@Test public void testWhenNoHelpIsRequested() { ByteArrayOutputStream baos = new ByteArrayOutputStream(); ListMultimap<String, String> arguments = ArrayListMultimap.create(); assertFalse( PipelineOptionsFactory.printHelpUsageAndExitIfNeeded( arguments, new PrintStream(baos), false /* exit */)); String output = new String(baos.toByteArray(), Charsets.UTF_8); assertEquals("", output); }
@Test public void testHelpWithOptionThatOutputsValidEnumTypes() { ByteArrayOutputStream baos = new ByteArrayOutputStream(); ListMultimap<String, String> arguments = ArrayListMultimap.create(); arguments.put("help", Objects.class.getName()); assertTrue( PipelineOptionsFactory.printHelpUsageAndExitIfNeeded( arguments, new PrintStream(baos), false /* exit */)); String output = new String(baos.toByteArray(), Charsets.UTF_8); assertThat(output, containsString("<Value | Value2>")); }
@Test public void testHelpWithHiddenMethodAndInterface() { ByteArrayOutputStream baos = new ByteArrayOutputStream(); ListMultimap<String, String> arguments = ArrayListMultimap.create(); arguments.put("help", "org.apache.beam.sdk.option.DataflowPipelineOptions"); assertTrue( PipelineOptionsFactory.printHelpUsageAndExitIfNeeded( arguments, new PrintStream(baos), false /* exit */)); String output = new String(baos.toByteArray(), Charsets.UTF_8); // A hidden interface. assertThat( output, not(containsString("org.apache.beam.sdk.options.DataflowPipelineDebugOptions"))); // A hidden option. assertThat(output, not(containsString("--gcpCredential"))); }
@Test public void testDefaultHelpAsArgument() { ByteArrayOutputStream baos = new ByteArrayOutputStream(); ListMultimap<String, String> arguments = ArrayListMultimap.create(); arguments.put("help", "true"); assertTrue( PipelineOptionsFactory.printHelpUsageAndExitIfNeeded( arguments, new PrintStream(baos), false /* exit */)); String output = new String(baos.toByteArray(), Charsets.UTF_8); assertThat(output, containsString("The set of registered options are:")); assertThat(output, containsString("org.apache.beam.sdk.options.PipelineOptions")); assertThat(output, containsString("Use --help=<OptionsName> for detailed help.")); }
@Test public void testHelpWithBadOptionNameAsArgument() { ByteArrayOutputStream baos = new ByteArrayOutputStream(); ListMultimap<String, String> arguments = ArrayListMultimap.create(); arguments.put("help", "org.apache.beam.sdk.Pipeline"); assertTrue( PipelineOptionsFactory.printHelpUsageAndExitIfNeeded( arguments, new PrintStream(baos), false /* exit */)); String output = new String(baos.toByteArray(), Charsets.UTF_8); assertThat(output, containsString("Unable to find option org.apache.beam.sdk.Pipeline")); assertThat(output, containsString("The set of registered options are:")); assertThat(output, containsString("org.apache.beam.sdk.options.PipelineOptions")); }
@Test public void testSpecificHelpAsArgumentWithSimpleClassName() { ByteArrayOutputStream baos = new ByteArrayOutputStream(); ListMultimap<String, String> arguments = ArrayListMultimap.create(); arguments.put("help", "PipelineOptions"); assertTrue( PipelineOptionsFactory.printHelpUsageAndExitIfNeeded( arguments, new PrintStream(baos), false /* exit */)); String output = new String(baos.toByteArray(), Charsets.UTF_8); assertThat(output, containsString("org.apache.beam.sdk.options.PipelineOptions")); assertThat(output, containsString("--runner")); assertThat(output, containsString("Default: " + DEFAULT_RUNNER_NAME)); assertThat( output, containsString("The pipeline runner that will be used to execute the pipeline.")); }
@Test public void testSpecificHelpAsArgument() { ByteArrayOutputStream baos = new ByteArrayOutputStream(); ListMultimap<String, String> arguments = ArrayListMultimap.create(); arguments.put("help", "org.apache.beam.sdk.options.PipelineOptions"); assertTrue( PipelineOptionsFactory.printHelpUsageAndExitIfNeeded( arguments, new PrintStream(baos), false /* exit */)); String output = new String(baos.toByteArray(), Charsets.UTF_8); assertThat(output, containsString("org.apache.beam.sdk.options.PipelineOptions")); assertThat(output, containsString("--runner")); assertThat(output, containsString("Default: " + DEFAULT_RUNNER_NAME)); assertThat( output, containsString("The pipeline runner that will be used to execute the pipeline.")); }
@Test public void testSpecificHelpAsArgumentWithClassNameSuffix() { ByteArrayOutputStream baos = new ByteArrayOutputStream(); ListMultimap<String, String> arguments = ArrayListMultimap.create(); arguments.put("help", "options.PipelineOptions"); assertTrue( PipelineOptionsFactory.printHelpUsageAndExitIfNeeded( arguments, new PrintStream(baos), false /* exit */)); String output = new String(baos.toByteArray(), Charsets.UTF_8); assertThat(output, containsString("org.apache.beam.sdk.options.PipelineOptions")); assertThat(output, containsString("--runner")); assertThat(output, containsString("Default: " + DEFAULT_RUNNER_NAME)); assertThat( output, containsString("The pipeline runner that will be used to execute the pipeline.")); }
@Test public void testShortnameSpecificHelpHasMultipleMatches() { PipelineOptionsFactory.register(NameConflictClassA.NameConflict.class); PipelineOptionsFactory.register(NameConflictClassB.NameConflict.class); ByteArrayOutputStream baos = new ByteArrayOutputStream(); ListMultimap<String, String> arguments = ArrayListMultimap.create(); arguments.put("help", "NameConflict"); assertTrue( PipelineOptionsFactory.printHelpUsageAndExitIfNeeded( arguments, new PrintStream(baos), false /* exit */)); String output = new String(baos.toByteArray(), Charsets.UTF_8); assertThat(output, containsString("Multiple matches found for NameConflict")); assertThat( output, containsString( "org.apache.beam.sdk.options." + "PipelineOptionsFactoryTest$NameConflictClassA$NameConflict")); assertThat( output, containsString( "org.apache.beam.sdk.options." + "PipelineOptionsFactoryTest$NameConflictClassB$NameConflict")); assertThat(output, containsString("The set of registered options are:")); assertThat(output, containsString("org.apache.beam.sdk.options.PipelineOptions")); }
ListMultimap<String, String> options = parseCommandLine(args, strictParsing); LOG.debug("Provided Arguments: {}", options); printHelpUsageAndExitIfNeeded(options, System.out, true /* exit */); initialOptions = parseObjects(klass, options, strictParsing);