Beispiel #1
0
  public Validator(
      String controlGateway,
      String testGateway,
      Duration controlTimeout,
      Duration testTimeout,
      int maxRowCount,
      boolean explainOnly,
      int precision,
      boolean checkCorrectness,
      boolean verboseResultsComparison,
      QueryPair queryPair) {
    this.testUsername = requireNonNull(queryPair.getTest().getUsername(), "test username is null");
    this.controlUsername =
        requireNonNull(queryPair.getControl().getUsername(), "control username is null");
    this.testPassword = queryPair.getTest().getPassword();
    this.controlPassword = queryPair.getControl().getPassword();
    this.controlGateway = requireNonNull(controlGateway, "controlGateway is null");
    this.testGateway = requireNonNull(testGateway, "testGateway is null");
    this.controlTimeout = controlTimeout;
    this.testTimeout = testTimeout;
    this.maxRowCount = maxRowCount;
    this.explainOnly = explainOnly;
    this.precision = precision;
    this.checkCorrectness = checkCorrectness;
    this.verboseResultsComparison = verboseResultsComparison;

    this.queryPair = requireNonNull(queryPair, "queryPair is null");
    // Test and Control always have the same session properties.
    this.sessionProperties = queryPair.getTest().getSessionProperties();
  }
Beispiel #2
0
  private QueryResult executeQueryControl() {
    Query query = queryPair.getControl();
    QueryResult queryResult =
        new QueryResult(State.INVALID, null, null, ImmutableList.<List<Object>>of());
    try {
      // startup
      queryResult =
          setup(
              query,
              controlPreQueryResults,
              controlPrequery ->
                  executeQuery(
                      controlGateway,
                      controlUsername,
                      controlPassword,
                      queryPair.getControl(),
                      controlPrequery,
                      controlTimeout,
                      sessionProperties));

      // if startup is successful -> execute query
      if (queryResult.getState() == State.SUCCESS) {
        queryResult =
            executeQuery(
                controlGateway,
                controlUsername,
                controlPassword,
                queryPair.getControl(),
                query.getQuery(),
                controlTimeout,
                sessionProperties);
      }
    } finally {
      // teardown no matter what
      QueryResult tearDownResult =
          tearDown(
              query,
              controlPostQueryResults,
              controlPostquery ->
                  executeQuery(
                      controlGateway,
                      controlUsername,
                      controlPassword,
                      queryPair.getControl(),
                      controlPostquery,
                      controlTimeout,
                      sessionProperties));

      // if teardown is not successful the query fails
      queryResult = tearDownResult.getState() == State.SUCCESS ? queryResult : tearDownResult;
    }
    return queryResult;
  }
Beispiel #3
0
  public boolean isSkipped() {
    if (queryPair.getControl().getQuery().isEmpty() || queryPair.getTest().getQuery().isEmpty()) {
      return true;
    }

    if (getControlResult().getState() != State.SUCCESS) {
      return true;
    }

    if (!isDeterministic()) {
      return true;
    }

    if (getTestResult().getState() == State.TIMEOUT) {
      return true;
    }

    return false;
  }
Beispiel #4
0
 private void trySetConnectionProperties(Query query, Connection connection) throws SQLException {
   // Required for jdbc drivers that do not implement all/some of these functions (eg. impala jdbc
   // driver)
   // For these drivers, set the database default values in the query database
   try {
     connection.setClientInfo("ApplicationName", "verifier-test:" + queryPair.getName());
     connection.setCatalog(query.getCatalog());
     connection.setSchema(query.getSchema());
   } catch (SQLClientInfoException ignored) {
     // Do nothing
   }
 }
Beispiel #5
0
 public String getSkippedMessage() {
   StringBuilder sb = new StringBuilder();
   if (getControlResult().getState() == State.TOO_MANY_ROWS) {
     sb.append("----------\n");
     sb.append("Name: " + queryPair.getName() + "\n");
     sb.append("Schema (control): " + queryPair.getControl().getSchema() + "\n");
     sb.append("Too many rows.\n");
   } else if (!isDeterministic()) {
     sb.append("----------\n");
     sb.append("Name: " + queryPair.getName() + "\n");
     sb.append("Schema (control): " + queryPair.getControl().getSchema() + "\n");
     sb.append("NON DETERMINISTIC\n");
   } else if (getControlResult().getState() == State.TIMEOUT
       || getTestResult().getState() == State.TIMEOUT) {
     sb.append("----------\n");
     sb.append("Name: " + queryPair.getName() + "\n");
     sb.append("Schema (control): " + queryPair.getControl().getSchema() + "\n");
     sb.append("TIMEOUT\n");
   } else {
     sb.append("SKIPPED: ");
     if (getControlResult().getException() != null) {
       sb.append(getControlResult().getException().getMessage());
     }
   }
   return sb.toString();
 }