aboutsummaryrefslogtreecommitdiffstats
path: root/vespa-feed-client-cli
diff options
context:
space:
mode:
authorBjørn Christian Seime <bjorncs@verizonmedia.com>2021-05-27 15:09:37 +0200
committerBjørn Christian Seime <bjorncs@verizonmedia.com>2021-05-27 15:19:04 +0200
commit8378dd0703460bb87ec5ad7a966ef830b8714a9d (patch)
tree37c0e636b5729b405571420d84f30375cc6153d6 /vespa-feed-client-cli
parentf0fc648c00d666da46055c2e34c909914f6fdeb0 (diff)
Add option for reading feed input from stdin
Diffstat (limited to 'vespa-feed-client-cli')
-rw-r--r--vespa-feed-client-cli/src/main/java/ai/vespa/feed/client/CliArguments.java14
-rw-r--r--vespa-feed-client-cli/src/test/java/ai/vespa/feed/client/CliArgumentsTest.java17
-rw-r--r--vespa-feed-client-cli/src/test/resources/help.txt1
3 files changed, 25 insertions, 7 deletions
diff --git a/vespa-feed-client-cli/src/main/java/ai/vespa/feed/client/CliArguments.java b/vespa-feed-client-cli/src/main/java/ai/vespa/feed/client/CliArguments.java
index 9c8e156b824..125a27737ef 100644
--- a/vespa-feed-client-cli/src/main/java/ai/vespa/feed/client/CliArguments.java
+++ b/vespa-feed-client-cli/src/main/java/ai/vespa/feed/client/CliArguments.java
@@ -48,6 +48,7 @@ class CliArguments {
private static final String TIMEOUT_OPTION = "timeout";
private static final String TRACE_OPTION = "trace";
private static final String VERSION_OPTION = "version";
+ private static final String STDIN_OPTION = "stdin";
private final CommandLine arguments;
@@ -70,8 +71,8 @@ class CliArguments {
if (!args.hasOption(ENDPOINT_OPTION)) {
throw new CliArgumentsException("Endpoint must be specified");
}
- if (!args.hasOption(FILE_OPTION)) {
- throw new CliArgumentsException("Feed file must be specified");
+ if (args.hasOption(FILE_OPTION) == args.hasOption(STDIN_OPTION)) {
+ throw new CliArgumentsException(String.format("Either option '%s' or '%s' must be specified", FILE_OPTION, STDIN_OPTION));
}
if (args.hasOption(CERTIFICATE_OPTION) != args.hasOption(PRIVATE_KEY_OPTION)) {
throw new CliArgumentsException(
@@ -107,7 +108,9 @@ class CliArguments {
Optional<Path> caCertificates() throws CliArgumentsException { return fileValue(CA_CERTIFICATES_OPTION); }
- Path inputFile() throws CliArgumentsException { return fileValue(FILE_OPTION).get(); }
+ Optional<Path> inputFile() throws CliArgumentsException {
+ return fileValue(FILE_OPTION);
+ }
Map<String, String> headers() throws CliArgumentsException {
String[] rawArguments = arguments.getOptionValues(HEADER_OPTION);
@@ -142,6 +145,8 @@ class CliArguments {
: Optional.empty();
}
+ boolean readFeedFromStandardInput() { return has(STDIN_OPTION); }
+
private OptionalInt intValue(String option) throws CliArgumentsException {
try {
Number number = (Number) arguments.getParsedOptionValue(option);
@@ -245,6 +250,9 @@ class CliArguments {
.longOpt(TRACE_OPTION)
.hasArg()
.type(Number.class)
+ .build())
+ .addOption(Option.builder()
+ .longOpt(STDIN_OPTION)
.build());
}
diff --git a/vespa-feed-client-cli/src/test/java/ai/vespa/feed/client/CliArgumentsTest.java b/vespa-feed-client-cli/src/test/java/ai/vespa/feed/client/CliArgumentsTest.java
index f1233e4e0c7..14b69f20ad0 100644
--- a/vespa-feed-client-cli/src/test/java/ai/vespa/feed/client/CliArgumentsTest.java
+++ b/vespa-feed-client-cli/src/test/java/ai/vespa/feed/client/CliArgumentsTest.java
@@ -25,7 +25,7 @@ class CliArgumentsTest {
"--header=\"My-Header: my-value\"", "--header", "Another-Header: another-value", "--benchmark",
"--route=myroute", "--timeout=0.125", "--trace=9"});
assertEquals(URI.create("https://vespa.ai:4443/"), args.endpoint());
- assertEquals(Paths.get("feed.json"), args.inputFile());
+ assertEquals(Paths.get("feed.json"), args.inputFile().get());
assertEquals(10, args.connections().getAsInt());
assertEquals(128, args.maxStreamsPerConnection().getAsInt());
assertEquals(Paths.get("cert.pem"), args.certificateAndKey().get().certificateFile);
@@ -47,12 +47,21 @@ class CliArgumentsTest {
void fails_on_missing_parameters() {
CliArguments.CliArgumentsException exception = assertThrows(
CliArguments.CliArgumentsException.class,
- () -> CliArguments.fromRawArgs(new String[] {"--file=/path/to/file"}));
+ () -> CliArguments.fromRawArgs(new String[] {"--file=/path/to/file", "--stdin"}));
assertEquals("Endpoint must be specified", exception.getMessage());
- exception = assertThrows(
+ }
+
+ @Test
+ void fails_on_conflicting_parameters() {
+ CliArguments.CliArgumentsException exception = assertThrows(
+ CliArguments.CliArgumentsException.class,
+ () -> CliArguments.fromRawArgs(new String[] {"--endpoint=https://endpoint", "--file=/path/to/file", "--stdin"}));
+ assertEquals("Either option 'file' or 'stdin' must be specified", exception.getMessage());
+
+ exception = assertThrows(
CliArguments.CliArgumentsException.class,
() -> CliArguments.fromRawArgs(new String[] {"--endpoint=https://endpoint"}));
- assertEquals("Feed file must be specified", exception.getMessage());
+ assertEquals("Either option 'file' or 'stdin' must be specified", exception.getMessage());
}
@Test
diff --git a/vespa-feed-client-cli/src/test/resources/help.txt b/vespa-feed-client-cli/src/test/resources/help.txt
index a52842b32fd..56441ee0728 100644
--- a/vespa-feed-client-cli/src/test/resources/help.txt
+++ b/vespa-feed-client-cli/src/test/resources/help.txt
@@ -12,6 +12,7 @@ Vespa feed client
--max-streams-per-connection <arg>
--private-key <arg>
--route <arg>
+ --stdin
--timeout <arg>
--trace <arg>
--version