Search in sources :

Example 1 with BuildInformation

use of org.finra.herd.model.api.xml.BuildInformation in project herd by FINRAOS.

the class RetentionExpirationExporterAppTest method testParseCommandLineArgumentsVersionOpt.

@Test
public void testParseCommandLineArgumentsVersionOpt() {
    String output = runTestGetSystemOut(() -> {
        String[] arguments = { "--version" };
        assertEquals(ToolsCommonConstants.ReturnValue.SUCCESS, retentionExpirationExporterApp.parseCommandLineArguments(arguments, applicationContext));
    });
    BuildInformation buildInformation = applicationContext.getBean(BuildInformation.class);
    assertEquals("output", String.format(DataBridgeApp.BUILD_INFO_STRING_FORMAT, buildInformation.getBuildDate(), buildInformation.getBuildNumber(), buildInformation.getBuildOs(), buildInformation.getBuildUser()), output);
}
Also used : BuildInformation(org.finra.herd.model.api.xml.BuildInformation) Test(org.junit.Test)

Example 2 with BuildInformation

use of org.finra.herd.model.api.xml.BuildInformation in project herd by FINRAOS.

the class DataBridgeApp method parseCommandLineArguments.

/**
 * Parses the command line arguments using the specified argument parser. Common data bridge options will be initialized and added to the argument parser in
 * this method, but any application specific arguments should be added to the argument parser prior to calling this method. Ensure the argParser was set in
 * this class prior to calling this method.
 *
 * @param args the command line arguments.
 * @param applicationContext the Spring application context.
 *
 * @return the return value if the application should exit or null if the application can continue.
 */
// Using System.out to inform user of usage or version information is okay.
@SuppressWarnings("PMD.SystemPrintln")
@SuppressFBWarnings(value = "VA_FORMAT_STRING_USES_NEWLINE", justification = "We will use the standard carriage return character.")
protected ReturnValue parseCommandLineArguments(String[] args, ApplicationContext applicationContext) {
    // Get the application argument parser.
    ArgumentParser argParser = getArgumentParser();
    try {
        s3AccessKeyOpt = argParser.addArgument("a", "s3AccessKey", true, "S3 access key.", false);
        s3SecretKeyOpt = argParser.addArgument("p", "s3SecretKey", true, "S3 secret key.", false);
        s3EndpointOpt = argParser.addArgument("e", "s3Endpoint", true, "S3 endpoint.", false);
        localPathOpt = argParser.addArgument("l", "localPath", true, "The path to files on your local file system.", true);
        manifestPathOpt = argParser.addArgument("m", "manifestPath", true, "Local path to the manifest file.", true);
        regServerHostOpt = argParser.addArgument("H", "regServerHost", true, "Registration Service hostname.", false);
        regServerPortOpt = argParser.addArgument("P", "regServerPort", true, "Registration Service port.", false);
        dmRegServerHostOpt = argParser.addArgument("Y", "dmRegServerHost", true, "Registration Service hostname (deprecated - use regServerHost).", false);
        dmRegServerPortOpt = argParser.addArgument("Z", "dmRegServerPort", true, "Registration Service port (deprecated - use regServerPort.", false);
        sslOpt = argParser.addArgument("s", "ssl", true, "Enable or disable SSL (HTTPS).", false);
        usernameOpt = argParser.addArgument("u", "username", true, "The username for HTTPS client authentication.", false);
        passwordOpt = argParser.addArgument("w", "password", true, "The password used for HTTPS client authentication.", false);
        helpOpt = argParser.addArgument("h", "help", false, "Display usage information and exit.", false);
        versionOpt = argParser.addArgument("v", "version", false, "Display version information and exit.", false);
        httpProxyHostOpt = argParser.addArgument("n", "httpProxyHost", true, "HTTP proxy host.", false);
        httpProxyPortOpt = argParser.addArgument("o", "httpProxyPort", true, "HTTP proxy port.", false);
        maxThreadsOpt = argParser.addArgument("t", "maxThreads", true, "Maximum number of threads.", false);
        socketTimeoutOpt = argParser.addArgument("c", "socketTimeout", true, "The socket timeout in milliseconds. 0 indicates no timeout. Default 50000.", false);
        // Parse command line arguments without failing on any missing required arguments by passing "false" as the second argument.
        argParser.parseArguments(args, false);
        // If help option was specified, then display usage information and return success.
        if (argParser.getBooleanValue(helpOpt)) {
            System.out.println(argParser.getUsageInformation());
            return ReturnValue.SUCCESS;
        }
        // If version option was specified, then display version information and return success.
        if (argParser.getBooleanValue(versionOpt)) {
            BuildInformation buildInformation = applicationContext.getBean(BuildInformation.class);
            System.out.println(String.format(BUILD_INFO_STRING_FORMAT, buildInformation.getBuildDate(), buildInformation.getBuildNumber(), buildInformation.getBuildOs(), buildInformation.getBuildUser()));
            return ReturnValue.SUCCESS;
        }
        // Parse command line arguments for the second time, enforcing the required arguments by passing "true" as the second argument.
        argParser.parseArguments(args, true);
        // Extract a boolean option value passing "false" as a default value.
        useSsl = argParser.getStringValueAsBoolean(sslOpt, false);
        // Username and password are required when useSsl is enabled.
        if (useSsl && (StringUtils.isBlank(argParser.getStringValue(usernameOpt)) || StringUtils.isBlank(argParser.getStringValue(passwordOpt)))) {
            throw new ParseException("Username and password are required when SSL is enabled.");
        }
        // Ensure that both the S3 secret and access keys were specified or both not specified.
        if (StringUtils.isNotBlank(argParser.getStringValue(s3SecretKeyOpt)) && StringUtils.isBlank(argParser.getStringValue(s3AccessKeyOpt))) {
            throw new ParseException("S3 access key must be specified when S3 secret key is present.");
        }
        if (StringUtils.isNotBlank(argParser.getStringValue(s3AccessKeyOpt)) && StringUtils.isBlank(argParser.getStringValue(s3SecretKeyOpt))) {
            throw new ParseException("S3 secret key must be specified when S3 access key is present.");
        }
        // Get the registration server host
        regServerHost = argParser.getStringValue(regServerHostOpt);
        if (StringUtils.isBlank(regServerHost)) {
            regServerHost = argParser.getStringValue(dmRegServerHostOpt);
            if (StringUtils.isBlank(regServerHost)) {
                throw new ParseException("A registration host must be specified.");
            }
        } else {
            if (StringUtils.isNotBlank(argParser.getStringValue(dmRegServerHostOpt))) {
                throw new ParseException("The regServerHost and the dmRegServerHost options can't both be specified.");
            }
        }
        // Get the registration server port
        regServerPort = argParser.getIntegerValue(regServerPortOpt);
        if (regServerPort == null) {
            regServerPort = argParser.getIntegerValue(dmRegServerPortOpt);
            if (regServerPort == null) {
                throw new ParseException("A registration port must be specified.");
            }
        } else {
            if (argParser.getIntegerValue(dmRegServerPortOpt) != null) {
                throw new ParseException("The regServerPort and the dmRegServerPort options can't both be specified.");
            }
        }
        // Extract all Integer option values here to catch any NumberFormatException exceptions.
        httpProxyPort = argParser.getIntegerValue(httpProxyPortOpt);
        maxThreads = argParser.getIntegerValue(maxThreadsOpt, ToolsCommonConstants.DEFAULT_THREADS);
    } catch (ParseException ex) {
        // Log a friendly error and return a failure which will cause the application to exit.
        LOGGER.error("Error parsing command line arguments: " + ex.getMessage() + "\n" + argParser.getUsageInformation());
        return ReturnValue.FAILURE;
    }
    // The command line arguments were all parsed successfully so return null to continue processing.
    return null;
}
Also used : BuildInformation(org.finra.herd.model.api.xml.BuildInformation) ParseException(org.apache.commons.cli.ParseException) ArgumentParser(org.finra.herd.core.ArgumentParser) SuppressFBWarnings(edu.umd.cs.findbugs.annotations.SuppressFBWarnings)

Example 3 with BuildInformation

use of org.finra.herd.model.api.xml.BuildInformation in project herd by FINRAOS.

the class CoreSpringModuleConfig method buildInformation.

/**
 * Gets the build information.
 *
 * @return the build information.
 */
@Bean
public BuildInformation buildInformation() {
    // Use the environment to get access to the herdBuildInfo.properties properties configured above using the @PropertySource annotation.
    // Another way to do this would be to use "@Value("${<property>}")" and ensure a static @Bean that returned a PropertySourcesPlaceholderConfigurer
    // was configured. Using the environment is the preferred way due to its extended capabilities.
    BuildInformation buildInformation = new BuildInformation();
    buildInformation.setBuildDate(environment.getProperty("build.date"));
    buildInformation.setBuildNumber(environment.getProperty("build.number"));
    buildInformation.setBuildOs(environment.getProperty("build.os"));
    buildInformation.setBuildUser(environment.getProperty("build.user"));
    // Log useful build and system property information.
    LOGGER.info(String.format("Build Information: {buildNumber=%s, buildDate=%s, buildUser=%s, buildOs=%s}", buildInformation.getBuildNumber(), buildInformation.getBuildDate(), buildInformation.getBuildUser(), buildInformation.getBuildOs()));
    LOGGER.info("System Properties: " + getSystemPropertyMap("java.version", "java.runtime.version", "java.vm.version", "java.vm.name", "java.vendor", "java.vendor.url", "java.home", "java.class.path", "os.name", "os.version", "os.arch", "user.name", "user.dir", "user.home", "file.separator", "path.separator"));
    return buildInformation;
}
Also used : BuildInformation(org.finra.herd.model.api.xml.BuildInformation) Bean(org.springframework.context.annotation.Bean)

Example 4 with BuildInformation

use of org.finra.herd.model.api.xml.BuildInformation in project herd by FINRAOS.

the class HerdRestControllerTest method testGetBuildInfo.

@Test
public void testGetBuildInfo() {
    // Call the method under test.
    BuildInformation result = herdRestController.getBuildInfo();
    // Validate the results.
    assertEquals(buildInformation, result);
}
Also used : BuildInformation(org.finra.herd.model.api.xml.BuildInformation) Test(org.junit.Test)

Example 5 with BuildInformation

use of org.finra.herd.model.api.xml.BuildInformation in project herd by FINRAOS.

the class DataBridgeAppTest method testParseCommandLineArgumentsVersionOpt.

@Test
public void testParseCommandLineArgumentsVersionOpt() {
    String output = runTestGetSystemOut(new Runnable() {

        @Override
        public void run() {
            String[] arguments = { "--version" };
            assertEquals(ReturnValue.SUCCESS, dataBridgeApp.parseCommandLineArguments(arguments, applicationContext));
        }
    });
    BuildInformation buildInformation = applicationContext.getBean(BuildInformation.class);
    assertEquals("output", String.format(DataBridgeApp.BUILD_INFO_STRING_FORMAT, buildInformation.getBuildDate(), buildInformation.getBuildNumber(), buildInformation.getBuildOs(), buildInformation.getBuildUser()), output);
}
Also used : BuildInformation(org.finra.herd.model.api.xml.BuildInformation) Test(org.junit.Test)

Aggregations

BuildInformation (org.finra.herd.model.api.xml.BuildInformation)9 Test (org.junit.Test)5 SuppressFBWarnings (edu.umd.cs.findbugs.annotations.SuppressFBWarnings)3 ParseException (org.apache.commons.cli.ParseException)3 Option (org.apache.commons.cli.Option)2 ArgumentParser (org.finra.herd.core.ArgumentParser)1 Bean (org.springframework.context.annotation.Bean)1 ModelAndView (org.springframework.web.servlet.ModelAndView)1