static TestConfig fromArgs()

in athena-federation-sdk-tools/src/main/java/com/amazonaws/athena/connector/validation/ConnectorValidator.java [464:547]


    static TestConfig fromArgs(String[] args) throws ParseException
    {
      log.info("Received arguments: {}", args);

      requireNonNull(args);

      Options options = new Options();
      options.addOption("f", LAMBDA_METADATA_FUNCTION_ARG, true,
                                "The name of the Lambda function to be validated. "
                                        + "Uses your configured default AWS region.");
      options.addOption("r", LAMBDA_RECORD_FUNCTION_ARG, true,
                        "The name of the Lambda function to be used to read data records. "
                                + "If not provided, this defaults to the value provided for lambda-func. "
                                + "Uses your configured default AWS region.");
      options.addOption("c", CATALOG_ID_ARG, true,
                        "The catalog name to pass to the Lambda function to be validated.");
      options.addOption("s", SCHEMA_ID_ARG, true,
                        "The schema name to be used when validating the Lambda function. "
                                + "If not provided, a random existing schema will be chosen.");
      options.addOption("t", TABLE_ID_ARG, true,
                        "The table name to be used when validating the Lambda function. "
                                + "If not provided, a random existing table will be chosen.");
      options.addOption("c", CONSTRAINTS_ARG, true,
                        "A comma-separated list of field/value pair constraints to be applied "
                                + "when reading metadata and records from the Lambda function to be validated");
      options.addOption("p", PLANNING_ONLY_ARG, false,
                        "If this option is set, then the validator will not attempt to read"
                                + " any records after calling GetSplits.");
      options.addOption("e", ALLOW_EMPTY_SHOW_TABLES, false,
              "Allows empty show tables results without considering it a failure.");
      options.addOption("h", HELP_ARG, false, "Prints usage information.");
      DefaultParser argParser = new DefaultParser();
      CommandLine parsedArgs = argParser.parse(options, args);

      if (parsedArgs.hasOption(HELP_ARG)) {
        new HelpFormatter().printHelp(150, "./validate_connector.sh --" + LAMBDA_METADATA_FUNCTION_ARG
                                                   + " lambda_func [--" + LAMBDA_RECORD_FUNCTION_ARG
                                                   + " record_func] [--" + CATALOG_ID_ARG
                                                   + " catalog] [--" + SCHEMA_ID_ARG
                                                   + " schema [--" + TABLE_ID_ARG
                                                   + " table [--" + CONSTRAINTS_ARG
                                                   + " constraints]]] [--" + PLANNING_ONLY_ARG + "]"
                                                   + " [--" + ALLOW_EMPTY_SHOW_TABLES + "]"
                                                   + " [--" + HELP_ARG + "]",
                                      null,
                                      options,
                                      null);
        System.exit(0);
      }

      checkArgument(parsedArgs.hasOption(LAMBDA_METADATA_FUNCTION_ARG),
                    "Lambda function must be provided via the --lambda-func or -l args!");
      String metadataFunction = parsedArgs.getOptionValue(LAMBDA_METADATA_FUNCTION_ARG);
      checkArgument(metadataFunction.equals(metadataFunction.toLowerCase()),
                    "Lambda function name must be lowercase.");

      if (parsedArgs.hasOption(TABLE_ID_ARG)) {
        checkArgument(parsedArgs.hasOption(SCHEMA_ID_ARG),
                      "The --schema argument must be provided if the --table argument is provided.");
      }

      if (parsedArgs.hasOption(CONSTRAINTS_ARG)) {
        checkArgument(parsedArgs.hasOption(TABLE_ID_ARG),
                      "The --table argument must be provided if the --constraints argument is provided.");
      }

      String catalog = metadataFunction;
      if (parsedArgs.hasOption(CATALOG_ID_ARG)) {
        catalog = parsedArgs.getOptionValue(CATALOG_ID_ARG);
        checkArgument(catalog.equals(catalog.toLowerCase()),
                      "Catalog name must be lowercase.");
      }

      return new TestConfig(metadataFunction,
                            parsedArgs.hasOption(LAMBDA_RECORD_FUNCTION_ARG)
                                    ? parsedArgs.getOptionValue(LAMBDA_RECORD_FUNCTION_ARG)
                                    : metadataFunction,
                            catalog,
                            Optional.ofNullable(parsedArgs.getOptionValue(SCHEMA_ID_ARG)),
                            Optional.ofNullable(parsedArgs.getOptionValue(TABLE_ID_ARG)),
                            Optional.ofNullable(parsedArgs.getOptionValue(CONSTRAINTS_ARG)),
                            parsedArgs.hasOption(PLANNING_ONLY_ARG),
                            parsedArgs.hasOption(ALLOW_EMPTY_SHOW_TABLES));
    }