blob: f1cbaa24ee23ddba26827feb60a0d96ef0e3c499 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more contributor license
* agreements. See the NOTICE file distributed with this work for additional information regarding
* copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the License. You may obtain a
* copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
* or implied. See the License for the specific language governing permissions and limitations under
* the License.
*/
package org.apache.geode.management.internal.cli;
import static java.lang.System.lineSeparator;
import static org.assertj.core.api.Assertions.assertThat;
import org.junit.Rule;
import org.junit.Test;
import org.junit.experimental.categories.Category;
import org.springframework.shell.core.Completion;
import org.apache.geode.cache.query.IndexType;
import org.apache.geode.management.internal.cli.i18n.CliStrings;
import org.apache.geode.test.junit.categories.GfshTest;
import org.apache.geode.test.junit.rules.GfshParserRule;
import org.apache.geode.test.junit.rules.GfshParserRule.CommandCandidate;
@Category(GfshTest.class)
public class GfshParserAutoCompletionIntegrationTest {
@Rule
public GfshParserRule gfshParserRule = new GfshParserRule();
@Test
public void testCompletionDescribe() {
String buffer = "describe";
CommandCandidate candidate = gfshParserRule.complete(buffer);
assertThat(candidate.getCandidates()).hasSize(8);
assertThat(candidate.getFirstCandidate()).isEqualTo("describe client");
}
@Test
public void testCompletionDescribeWithSpace() {
String buffer = "describe ";
CommandCandidate candidate = gfshParserRule.complete(buffer);
assertThat(candidate.getCandidates()).hasSize(8);
assertThat(candidate.getFirstCandidate()).isEqualTo("describe client");
}
@Test
public void testCompletionDeploy() {
String buffer = "deploy";
CommandCandidate candidate = gfshParserRule.complete(buffer);
assertThat(candidate.getCandidates()).hasSize(5);
assertThat(candidate.getFirstCandidate()).isEqualTo(buffer + " --dir");
}
@Test
public void testCompletionDeployWithSpace() {
String buffer = "deploy ";
CommandCandidate candidate = gfshParserRule.complete(buffer);
assertThat(candidate.getCandidates()).hasSize(5);
assertThat(candidate.getFirstCandidate()).isEqualTo(buffer + "--dir");
}
@Test
public void testCompleteWithRequiredOption() {
String buffer = "describe config";
CommandCandidate candidate = gfshParserRule.complete(buffer);
assertThat(candidate.getCandidates()).hasSize(1);
assertThat(candidate.getFirstCandidate()).isEqualTo(buffer + " --member");
}
@Test
public void testCompleteWithRequiredOptionWithSpace() {
String buffer = "describe config ";
CommandCandidate candidate = gfshParserRule.complete(buffer);
assertThat(candidate.getCandidates()).hasSize(1);
assertThat(candidate.getFirstCandidate()).isEqualTo(buffer + "--member");
}
@Test
public void testCompletionStart() {
String buffer = "start";
CommandCandidate candidate = gfshParserRule.complete(buffer);
assertThat(candidate.getCandidates().size()).isEqualTo(8);
assertThat(candidate.getCandidates().stream()
.anyMatch(completion -> completion.getFormattedValue().contains("gateway-receiver")))
.isTrue();
assertThat(candidate.getCandidates().stream()
.anyMatch(completion -> completion.getFormattedValue().contains("vsd")))
.isTrue();
}
@Test
public void testCompletionStartWithSpace() {
String buffer = "start ";
CommandCandidate candidate = gfshParserRule.complete(buffer);
assertThat(candidate.getCandidates().size()).isEqualTo(8);
assertThat(candidate.getCandidates().stream()
.anyMatch(completion -> completion.getFormattedValue().contains("gateway-receiver")))
.isTrue();
assertThat(candidate.getCandidates().stream()
.anyMatch(completion -> completion.getFormattedValue().contains("vsd")))
.isTrue();
}
@Test
public void testCompleteCommand() {
String buffer = "start ser";
CommandCandidate candidate = gfshParserRule.complete(buffer);
assertThat(candidate.getCandidates()).hasSize(1);
assertThat("start server").isEqualTo(candidate.getFirstCandidate());
}
@Test
public void testCompleteOptionWithOnlyOneCandidate() {
String buffer = "start server --nam";
CommandCandidate candidate = gfshParserRule.complete(buffer);
assertThat(candidate.getCandidates()).hasSize(1);
assertThat(candidate.getFirstCandidate()).isEqualTo(buffer + "e");
}
@Test
public void testCompleteOptionWithMultipleCandidates() {
String buffer = "start server --name=jinmei --loc";
CommandCandidate candidate = gfshParserRule.complete(buffer);
assertThat(candidate.getCandidates()).hasSize(3);
assertThat(candidate.getFirstCandidate()).isEqualTo(buffer + "ator-wait-time");
assertThat(candidate.getCandidate(1)).isEqualTo(buffer + "ators");
assertThat(candidate.getCandidate(2)).isEqualTo(buffer + "k-memory");
}
@Test
public void testCompleteWithExtraSpace() {
String buffer = "start server --name=name1 --se";
CommandCandidate candidate = gfshParserRule.complete(buffer);
assertThat(candidate.getCursor()).isEqualTo("start server --name=name1 ".length());
assertThat(candidate.getCandidates()).hasSize(3);
assertThat(candidate.getCandidates()).contains(new Completion("--server-port"));
assertThat(candidate.getFirstCandidate()).isEqualTo(buffer + "curity-properties-file");
}
@Test
public void testCompleteWithDashInTheEnd() {
String buffer = "start server --name=name1 --";
CommandCandidate candidate = gfshParserRule.complete(buffer);
assertThat(candidate.getCursor()).isEqualTo(buffer.length() - 2);
assertThat(candidate.getCandidates()).hasSize(53);
assertThat(candidate.getCandidates()).contains(new Completion("--properties-file"));
assertThat(candidate.getFirstCandidate()).isEqualTo(buffer + "J");
}
@Test
public void testCompleteWithSpace() {
String buffer = "start server --name=name1 ";
CommandCandidate candidate = gfshParserRule.complete(buffer);
assertThat(candidate.getCursor()).isEqualTo(buffer.length() - 1);
assertThat(candidate.getCandidates()).hasSize(53);
assertThat(candidate.getCandidates()).contains(new Completion(" --properties-file"));
assertThat(candidate.getFirstCandidate()).isEqualTo(buffer + "--J");
}
@Test
public void testCompleteWithOutSpace() {
String buffer = "start server --name=name1";
CommandCandidate candidate = gfshParserRule.complete(buffer);
assertThat(candidate.getCursor()).isEqualTo(buffer.length());
assertThat(candidate.getCandidates()).hasSize(53);
assertThat(candidate.getCandidates()).contains(new Completion(" --properties-file"));
assertThat(candidate.getFirstCandidate()).isEqualTo(buffer + " --J");
}
@Test
public void testCompleteJ() {
String buffer = "start server --name=name1 --J=";
CommandCandidate candidate = gfshParserRule.complete(buffer);
assertThat(candidate.getCursor()).isEqualTo(buffer.length() - 3);
assertThat(candidate.getCandidates()).hasSize(1);
}
@Test
public void testCompleteWithValue() {
String buffer = "start server --name=name1 --J";
CommandCandidate candidate = gfshParserRule.complete(buffer);
assertThat(candidate.getCursor()).isEqualTo(buffer.length() - 3);
assertThat(candidate.getCandidates()).hasSize(1);
}
@Test
public void testCompleteWithDash() {
String buffer = "start server --name=name1 --J=-Dfoo.bar --";
CommandCandidate candidate = gfshParserRule.complete(buffer);
assertThat(candidate.getCandidates()).hasSize(52);
}
@Test
public void testCompleteWithMultipleJ() {
String buffer = "start server --name=name1 --J=-Dme=her --J=-Dfoo=bar --l";
CommandCandidate candidate = gfshParserRule.complete(buffer);
assertThat(candidate.getCursor())
.isEqualTo("start server --name=name1 --J=-Dme=her --J=-Dfoo=bar ".length());
assertThat(candidate.getCandidates()).hasSize(4);
assertThat(candidate.getCandidates()).contains(new Completion("--locators"));
}
@Test
public void testMultiJComplete() {
String buffer = "start server --name=name1 --J=-Dtest=test1 --J=-Dfoo=bar";
CommandCandidate candidate = gfshParserRule.complete(buffer);
assertThat(candidate.getCursor()).isEqualTo(buffer.length());
assertThat(candidate.getCandidates()).hasSize(52);
assertThat(candidate.getFirstCandidate()).isEqualTo(buffer + " --assign-buckets");
}
@Test
public void testMultiJCompleteWithDifferentOrder() {
String buffer = "start server --J=-Dtest=test1 --J=-Dfoo=bar --name=name1";
CommandCandidate candidate = gfshParserRule.complete(buffer);
assertThat(candidate.getCursor()).isEqualTo(buffer.length());
assertThat(candidate.getCandidates()).hasSize(52);
assertThat(candidate.getFirstCandidate()).isEqualTo(buffer + " --assign-buckets");
}
@Test
public void testJComplete3() {
String buffer = "start server --name=name1 --locators=localhost --J=-Dfoo=bar";
CommandCandidate candidate = gfshParserRule.complete(buffer);
assertThat(candidate.getCursor()).isEqualTo(buffer.length());
assertThat(candidate.getCandidates()).hasSize(51);
assertThat(candidate.getFirstCandidate()).isEqualTo(buffer + " --assign-buckets");
}
@Test
public void testJComplete4() {
String buffer = "start server --name=name1 --locators=localhost --J=-Dfoo=bar --";
CommandCandidate candidate = gfshParserRule.complete(buffer);
assertThat(candidate.getCursor()).isEqualTo(buffer.length() - 2);
assertThat(candidate.getCandidates()).hasSize(51);
assertThat(candidate.getFirstCandidate()).isEqualTo(buffer + "assign-buckets");
}
@Test
public void testCompleteRegionType() {
String buffer = "create region --name=test --type";
CommandCandidate candidate = gfshParserRule.complete(buffer);
assertThat(candidate.getCandidates()).hasSize(23);
assertThat(candidate.getFirstCandidate()).isEqualTo(buffer + "=LOCAL");
}
@Test
public void testCompletePartialRegionType() {
String buffer = "create region --name=test --type=LO";
CommandCandidate candidate = gfshParserRule.complete(buffer);
assertThat(candidate.getCandidates()).hasSize(5);
assertThat(candidate.getFirstCandidate()).isEqualTo(buffer + "CAL");
}
@Test
public void testCompleteWithRegionTypeWithNoSpace() {
String buffer = "create region --name=test --type=REPLICATE";
CommandCandidate candidate = gfshParserRule.complete(buffer);
assertThat(candidate.getCandidates()).hasSize(5);
assertThat(candidate.getFirstCandidate()).isEqualTo(buffer + "_HEAP_LRU");
}
@Test
public void testCompleteWithRegionTypeWithSpace() {
String buffer = "create region --name=test --type=REPLICATE ";
CommandCandidate candidate = gfshParserRule.complete(buffer);
assertThat(candidate.getCandidates()).hasSize(45);
assertThat(candidate.getFirstCandidate()).isEqualTo(buffer + "--async-event-queue-id");
}
@Test
public void testCompleteLogLevel() {
String buffer = "change loglevel --loglevel";
CommandCandidate candidate = gfshParserRule.complete(buffer);
assertThat(candidate.getCandidates()).hasSize(8);
assertThat(candidate.getFirstCandidate()).isEqualTo(buffer + "=ALL");
}
@Test
public void testCompleteLogLevelWithEqualSign() {
String buffer = "change loglevel --loglevel=";
CommandCandidate candidate = gfshParserRule.complete(buffer);
assertThat(candidate.getCandidates()).hasSize(8);
assertThat(candidate.getFirstCandidate()).isEqualTo(buffer + "ALL");
}
@Test
public void testCompleteHintNonexistemt() {
String buffer = "hint notfound";
CommandCandidate candidate = gfshParserRule.complete(buffer);
assertThat(candidate.getCandidates()).hasSize(0);
}
@Test
public void testCompleteHintNada() {
String buffer = "hint";
CommandCandidate candidate = gfshParserRule.complete(buffer);
assertThat(candidate.getCandidates().size()).isGreaterThan(10);
assertThat(candidate.getFirstCandidate()).isEqualToIgnoringCase("hint client");
}
@Test
public void testCompleteHintSpace() {
String buffer = "hint ";
CommandCandidate candidate = gfshParserRule.complete(buffer);
assertThat(candidate.getCandidates().size()).isGreaterThan(10);
assertThat(candidate.getFirstCandidate()).isEqualToIgnoringCase("hint client");
}
@Test
public void testCompleteHintPartial() {
String buffer = "hint d";
CommandCandidate candidate = gfshParserRule.complete(buffer);
assertThat(candidate.getCandidates()).hasSize(3);
assertThat(candidate.getFirstCandidate()).isEqualToIgnoringCase("hint data");
}
@Test
public void testCompleteHintAlreadyComplete() {
String buffer = "hint data";
CommandCandidate candidate = gfshParserRule.complete(buffer);
assertThat(candidate.getCandidates()).hasSize(1);
assertThat(candidate.getFirstCandidate()).isEqualToIgnoringCase(buffer);
}
@Test
public void testCompleteHelpFirstWord() {
String buffer = "help start";
CommandCandidate candidate = gfshParserRule.complete(buffer);
assertThat(candidate.getCandidates()).hasSize(8);
assertThat(candidate.getFirstCandidate()).isEqualTo(buffer + " gateway-receiver");
}
@Test
public void testCompleteHelpPartialFirstWord() {
String buffer = "help st";
CommandCandidate candidate = gfshParserRule.complete(buffer);
assertThat(candidate.getCandidates()).hasSize(17);
assertThat(candidate.getFirstCandidate()).isEqualTo(buffer + "art gateway-receiver");
}
@Test
public void testObtainHelp() {
String command = CliStrings.START_PULSE;
String helpString = "NAME" + lineSeparator() + "start pulse" + lineSeparator() + "IS AVAILABLE"
+ lineSeparator() + "true" + lineSeparator() + "SYNOPSIS" + lineSeparator()
+ "Open a new window in the default Web browser with the URL for the Pulse application."
+ lineSeparator()
+ "SYNTAX" + lineSeparator() + "start pulse [--url=value]" + lineSeparator() + "PARAMETERS"
+ lineSeparator() + "url" + lineSeparator()
+ "URL of the Pulse Web application." + lineSeparator() + "Required: false"
+ lineSeparator()
+ "Default (if the parameter is not specified): http://localhost:7070/pulse"
+ lineSeparator();
assertThat(gfshParserRule.getCommandManager().obtainHelp(command)).isEqualTo(helpString);
}
@Test
public void testObtainHelpForStart() {
String command = "start";
String helpProvided = gfshParserRule.getCommandManager().getHelper().getHelp(command, 1000);
String[] helpProvidedArray = helpProvided.split(lineSeparator());
assertThat(helpProvidedArray.length).isEqualTo(8 * 2 + 3);
for (int i = 0; i < helpProvidedArray.length - 3; i++) {
if (i % 2 != 0) {
assertThat(helpProvidedArray[i]).startsWith(" ");
} else {
assertThat(helpProvidedArray[i]).startsWith(command);
}
}
}
@Test
public void testObtainHintForData() {
String hintArgument = "data";
String hintsProvided = gfshParserRule.getCommandManager().obtainHint(hintArgument);
String[] hintsProvidedArray = hintsProvided.split(lineSeparator());
assertThat(hintsProvidedArray.length).isEqualTo(15);
assertThat(hintsProvidedArray[0])
.isEqualTo("User data as stored in regions of the Geode distributed system.");
}
@Test
public void testObtainHintWithoutArgument() {
String hintArgument = "";
String hintsProvided = gfshParserRule.getCommandManager().obtainHint(hintArgument);
String[] hintsProvidedArray = hintsProvided.split(lineSeparator());
assertThat(hintsProvidedArray.length).isEqualTo(21);
assertThat(hintsProvidedArray[0]).isEqualTo(
"Hints are available for the following topics. Use \"hint <topic-name>\" for a specific hint.");
}
@Test
public void testObtainHintWithNonExistingCommand() {
String hintArgument = "fortytwo";
String hintsProvided = gfshParserRule.getCommandManager().obtainHint(hintArgument);
String[] hintsProvidedArray = hintsProvided.split(lineSeparator());
assertThat(hintsProvidedArray.length).isEqualTo(1);
assertThat(hintsProvidedArray[0]).isEqualTo(
"Unknown topic: " + hintArgument + ". Use hint to view the list of available topics.");
}
@Test
public void testObtainHintWithPartialCommand() {
String hintArgument = "d";
String hintsProvided = gfshParserRule.getCommandManager().obtainHint(hintArgument);
System.out.println(hintsProvided);
String[] hintsProvidedArray = hintsProvided.split(lineSeparator());
assertThat(hintsProvidedArray.length).isEqualTo(5);
assertThat(hintsProvidedArray[0]).isEqualTo(
"Hints are available for the following topics. Use \"hint <topic-name>\" for a specific hint.");
assertThat(hintsProvidedArray).contains("Data");
assertThat(hintsProvidedArray).contains("Debug-Utility");
assertThat(hintsProvidedArray).contains("Disk Store");
}
@Test
public void testIndexType() {
String buffer = "create index --type=";
CommandCandidate candidate = gfshParserRule.complete(buffer);
assertThat(candidate.getCandidates()).hasSize(IndexType.values().length);
assertThat(candidate.getFirstCandidate()).isEqualTo(buffer + "hash");
}
}