Switch cli tests to unified MockTerminal

This is the xplugins side of elastic/elasticsearchelastic/elasticsearch#16966

Original commit: elastic/x-pack-elasticsearch@a2e2faf20a
This commit is contained in:
Ryan Ernst 2016-03-06 13:18:40 -08:00
parent 46cae1b2b1
commit 59ec9302c8
3 changed files with 46 additions and 49 deletions

View File

@ -12,6 +12,7 @@ import java.nio.file.Path;
import org.elasticsearch.common.cli.CliTool.Command; import org.elasticsearch.common.cli.CliTool.Command;
import org.elasticsearch.common.cli.CliTool.ExitStatus; import org.elasticsearch.common.cli.CliTool.ExitStatus;
import org.elasticsearch.common.cli.CliToolTestCase; import org.elasticsearch.common.cli.CliToolTestCase;
import org.elasticsearch.common.cli.MockTerminal;
import org.elasticsearch.common.cli.UserError; import org.elasticsearch.common.cli.UserError;
import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.env.Environment; import org.elasticsearch.env.Environment;
@ -124,12 +125,13 @@ public class LicenseGenerationToolTests extends CliToolTestCase {
private String runLicenseGenerationTool(Path pubKeyPath, Path priKeyPath, License licenseSpec, private String runLicenseGenerationTool(Path pubKeyPath, Path priKeyPath, License licenseSpec,
ExitStatus expectedExitStatus) throws Exception { ExitStatus expectedExitStatus) throws Exception {
CaptureOutputTerminal outputTerminal = new CaptureOutputTerminal(); MockTerminal outputTerminal = new MockTerminal();
Settings settings = Settings.builder().put("path.home", createTempDir("LicenseGenerationToolTests")).build(); Settings settings = Settings.builder().put("path.home", createTempDir("LicenseGenerationToolTests")).build();
LicenseGenerator licenseGenerator = new LicenseGenerator(outputTerminal, pubKeyPath, priKeyPath, licenseSpec); LicenseGenerator licenseGenerator = new LicenseGenerator(outputTerminal, pubKeyPath, priKeyPath, licenseSpec);
assertThat(execute(licenseGenerator, settings), equalTo(expectedExitStatus)); assertThat(execute(licenseGenerator, settings), equalTo(expectedExitStatus));
assertThat(outputTerminal.getTerminalOutput().size(), equalTo(1)); String output = outputTerminal.getOutput();
return outputTerminal.getTerminalOutput().get(0); assertFalse(output, output.isEmpty());
return output;
} }
private ExitStatus execute(Command cmd, Settings settings) throws Exception { private ExitStatus execute(Command cmd, Settings settings) throws Exception {

View File

@ -14,6 +14,7 @@ import java.util.List;
import org.elasticsearch.common.cli.CliTool.Command; import org.elasticsearch.common.cli.CliTool.Command;
import org.elasticsearch.common.cli.CliTool.ExitStatus; import org.elasticsearch.common.cli.CliTool.ExitStatus;
import org.elasticsearch.common.cli.CliToolTestCase; import org.elasticsearch.common.cli.CliToolTestCase;
import org.elasticsearch.common.cli.MockTerminal;
import org.elasticsearch.common.cli.UserError; import org.elasticsearch.common.cli.UserError;
import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.unit.TimeValue; import org.elasticsearch.common.unit.TimeValue;
@ -133,14 +134,14 @@ public class LicenseVerificationToolTests extends CliToolTestCase {
} }
private String runLicenseVerificationTool(License license, Path publicKeyPath, ExitStatus expectedExitStatus) throws Exception { private String runLicenseVerificationTool(License license, Path publicKeyPath, ExitStatus expectedExitStatus) throws Exception {
CaptureOutputTerminal outputTerminal = new CaptureOutputTerminal(); MockTerminal outputTerminal = new MockTerminal();
Settings settings = Settings.builder().put("path.home", createTempDir("LicenseVerificationToolTests")).build(); Settings settings = Settings.builder().put("path.home", createTempDir("LicenseVerificationToolTests")).build();
LicenseVerifier licenseVerifier = new LicenseVerifier(outputTerminal, license, publicKeyPath); LicenseVerifier licenseVerifier = new LicenseVerifier(outputTerminal, license, publicKeyPath);
assertThat(execute(licenseVerifier, settings), equalTo(expectedExitStatus)); assertThat(execute(licenseVerifier, settings), equalTo(expectedExitStatus));
if (expectedExitStatus == ExitStatus.OK) { if (expectedExitStatus == ExitStatus.OK) {
assertThat(outputTerminal.getTerminalOutput().size(), equalTo(1)); String output = outputTerminal.getOutput();
assertFalse(output, output.isEmpty());
return outputTerminal.getTerminalOutput().get(0); return output;
} else { } else {
return null; return null;
} }

View File

@ -8,6 +8,7 @@ package org.elasticsearch.shield.authc.esusers.tool;
import org.elasticsearch.common.Strings; import org.elasticsearch.common.Strings;
import org.elasticsearch.common.cli.CliTool; import org.elasticsearch.common.cli.CliTool;
import org.elasticsearch.common.cli.CliToolTestCase; import org.elasticsearch.common.cli.CliToolTestCase;
import org.elasticsearch.common.cli.MockTerminal;
import org.elasticsearch.common.cli.Terminal; import org.elasticsearch.common.cli.Terminal;
import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.env.Environment; import org.elasticsearch.env.Environment;
@ -232,12 +233,12 @@ public class ESUsersToolTests extends CliToolTestCase {
.put("path.home", createTempDir()) .put("path.home", createTempDir())
.build(); .build();
final CaptureOutputTerminal terminal = new CaptureOutputTerminal(); MockTerminal terminal = new MockTerminal();
ESUsersTool.Useradd cmd = new ESUsersTool.Useradd(terminal, "user1", SecuredStringTests.build("changeme"), "plugin_admin"); ESUsersTool.Useradd cmd = new ESUsersTool.Useradd(terminal, "user1", SecuredStringTests.build("changeme"), "plugin_admin");
CliTool.ExitStatus status = execute(cmd, settings); CliTool.ExitStatus status = execute(cmd, settings);
assertThat(status, is(CliTool.ExitStatus.OK)); assertThat(status, is(CliTool.ExitStatus.OK));
assertThat(terminal.getTerminalOutput(), hasSize(0)); assertTrue(terminal.getOutput(), terminal.getOutput().isEmpty());
} }
public void testUseraddNonExistantRole() throws Exception { public void testUseraddNonExistantRole() throws Exception {
@ -254,13 +255,12 @@ public class ESUsersToolTests extends CliToolTestCase {
.put("path.home", createTempDir()) .put("path.home", createTempDir())
.build(); .build();
final CaptureOutputTerminal terminal = new CaptureOutputTerminal(); MockTerminal terminal = new MockTerminal();
ESUsersTool.Useradd cmd = new ESUsersTool.Useradd(terminal, "user1", SecuredStringTests.build("changeme"), "plugin_admin_2"); ESUsersTool.Useradd cmd = new ESUsersTool.Useradd(terminal, "user1", SecuredStringTests.build("changeme"), "plugin_admin_2");
CliTool.ExitStatus status = execute(cmd, settings); CliTool.ExitStatus status = execute(cmd, settings);
assertThat(status, is(CliTool.ExitStatus.OK)); assertThat(status, is(CliTool.ExitStatus.OK));
assertThat(terminal.getTerminalOutput(), hasSize(1)); assertThat(terminal.getOutput(), containsString("[plugin_admin_2]"));
assertThat(terminal.getTerminalOutput().get(0), containsString("[plugin_admin_2]"));
} }
public void testUserdelParse() throws Exception { public void testUserdelParse() throws Exception {
@ -322,16 +322,14 @@ public class ESUsersToolTests extends CliToolTestCase {
.put("shield.authc.realms.esusers.files.users_roles", userRolesFile) .put("shield.authc.realms.esusers.files.users_roles", userRolesFile)
.put("path.home", createTempDir()) .put("path.home", createTempDir())
.build(); .build();
CaptureOutputTerminal terminal = new CaptureOutputTerminal(); MockTerminal terminal = new MockTerminal();
ESUsersTool.Userdel cmd = new ESUsersTool.Userdel(terminal, "user2"); ESUsersTool.Userdel cmd = new ESUsersTool.Userdel(terminal, "user2");
CliTool.ExitStatus status = execute(cmd, settings); CliTool.ExitStatus status = execute(cmd, settings);
assertThat(status, is(CliTool.ExitStatus.NO_USER)); assertThat(status, is(CliTool.ExitStatus.NO_USER));
List<String> output = terminal.getTerminalOutput(); assertThat(terminal.getOutput(), startsWith("User [user2] doesn't exist"));
assertThat(output, hasSize(equalTo(1)));
assertThat(output, hasItem(startsWith("User [user2] doesn't exist")));
assertFileExists(userFile); assertFileExists(userFile);
List<String> lines = Files.readAllLines(userFile, StandardCharsets.UTF_8); List<String> lines = Files.readAllLines(userFile, StandardCharsets.UTF_8);
@ -620,12 +618,12 @@ public class ESUsersToolTests extends CliToolTestCase {
.put("path.home", createTempDir()) .put("path.home", createTempDir())
.build(); .build();
CaptureOutputTerminal catchTerminalOutput = new CaptureOutputTerminal(); MockTerminal catchTerminalOutput = new MockTerminal();
ESUsersTool.Roles cmd = new ESUsersTool.Roles(catchTerminalOutput, "user", Strings.EMPTY_ARRAY, Strings.EMPTY_ARRAY); ESUsersTool.Roles cmd = new ESUsersTool.Roles(catchTerminalOutput, "user", Strings.EMPTY_ARRAY, Strings.EMPTY_ARRAY);
CliTool.ExitStatus status = execute(cmd, settings); CliTool.ExitStatus status = execute(cmd, settings);
assertThat(status, is(CliTool.ExitStatus.OK)); assertThat(status, is(CliTool.ExitStatus.OK));
assertThat(catchTerminalOutput.getTerminalOutput(), hasItem(allOf(containsString("user"), containsString("user,foo,bar")))); assertThat(catchTerminalOutput.getOutput(), allOf(containsString("user"), containsString("user,foo,bar")));
} }
public void testRolesCmdRoleCanBeAddedWhenUserIsNotInRolesFile() throws Exception { public void testRolesCmdRoleCanBeAddedWhenUserIsNotInRolesFile() throws Exception {
@ -641,7 +639,7 @@ public class ESUsersToolTests extends CliToolTestCase {
.put("path.home", createTempDir()) .put("path.home", createTempDir())
.build(); .build();
CaptureOutputTerminal catchTerminalOutput = new CaptureOutputTerminal(); MockTerminal catchTerminalOutput = new MockTerminal();
ESUsersTool.Roles cmd = new ESUsersTool.Roles(catchTerminalOutput, "user", new String[]{"myrole"}, Strings.EMPTY_ARRAY); ESUsersTool.Roles cmd = new ESUsersTool.Roles(catchTerminalOutput, "user", new String[]{"myrole"}, Strings.EMPTY_ARRAY);
CliTool.ExitStatus status = execute(cmd, settings); CliTool.ExitStatus status = execute(cmd, settings);
@ -678,14 +676,14 @@ public class ESUsersToolTests extends CliToolTestCase {
.put("path.home", createTempDir()) .put("path.home", createTempDir())
.build(); .build();
CaptureOutputTerminal catchTerminalOutput = new CaptureOutputTerminal(); MockTerminal catchTerminalOutput = new MockTerminal();
ESUsersTool.ListUsersAndRoles cmd = new ESUsersTool.ListUsersAndRoles(catchTerminalOutput, null); ESUsersTool.ListUsersAndRoles cmd = new ESUsersTool.ListUsersAndRoles(catchTerminalOutput, null);
CliTool.ExitStatus status = execute(cmd, settings); CliTool.ExitStatus status = execute(cmd, settings);
assertThat(status, is(CliTool.ExitStatus.OK)); assertThat(status, is(CliTool.ExitStatus.OK));
assertThat(catchTerminalOutput.getTerminalOutput(), hasSize(greaterThanOrEqualTo(2))); String output = catchTerminalOutput.getOutput();
assertThat(catchTerminalOutput.getTerminalOutput(), hasItem(containsString("admin"))); assertThat(output, containsString("admin"));
assertThat(catchTerminalOutput.getTerminalOutput(), hasItem(allOf(containsString("user"), containsString("user,foo,bar")))); assertThat(output, allOf(containsString("user"), containsString("user,foo,bar")));
} }
public void testListUsersAndRolesCmdListAllUsersWithUnknownRoles() throws Exception { public void testListUsersAndRolesCmdListAllUsersWithUnknownRoles() throws Exception {
@ -698,14 +696,14 @@ public class ESUsersToolTests extends CliToolTestCase {
.put("path.home", createTempDir()) .put("path.home", createTempDir())
.build(); .build();
CaptureOutputTerminal catchTerminalOutput = new CaptureOutputTerminal(); MockTerminal catchTerminalOutput = new MockTerminal();
ESUsersTool.ListUsersAndRoles cmd = new ESUsersTool.ListUsersAndRoles(catchTerminalOutput, null); ESUsersTool.ListUsersAndRoles cmd = new ESUsersTool.ListUsersAndRoles(catchTerminalOutput, null);
CliTool.ExitStatus status = execute(cmd, settings); CliTool.ExitStatus status = execute(cmd, settings);
assertThat(status, is(CliTool.ExitStatus.OK)); assertThat(status, is(CliTool.ExitStatus.OK));
assertThat(catchTerminalOutput.getTerminalOutput(), hasSize(greaterThanOrEqualTo(2))); String output = catchTerminalOutput.getOutput();
assertThat(catchTerminalOutput.getTerminalOutput(), hasItem(containsString("admin"))); assertThat(output, containsString("admin"));
assertThat(catchTerminalOutput.getTerminalOutput(), hasItem(allOf(containsString("user"), containsString("user,foo*,bar*")))); assertThat(output, allOf(containsString("user"), containsString("user,foo*,bar*")));
} }
public void testListUsersAndRolesCmdListSingleUser() throws Exception { public void testListUsersAndRolesCmdListSingleUser() throws Exception {
@ -720,14 +718,13 @@ public class ESUsersToolTests extends CliToolTestCase {
.put("path.home", createTempDir()) .put("path.home", createTempDir())
.build(); .build();
CaptureOutputTerminal catchTerminalOutput = new CaptureOutputTerminal(); MockTerminal catchTerminalOutput = new MockTerminal();
ESUsersTool.ListUsersAndRoles cmd = new ESUsersTool.ListUsersAndRoles(catchTerminalOutput, "admin"); ESUsersTool.ListUsersAndRoles cmd = new ESUsersTool.ListUsersAndRoles(catchTerminalOutput, "admin");
CliTool.ExitStatus status = execute(cmd, settings); CliTool.ExitStatus status = execute(cmd, settings);
assertThat(status, is(CliTool.ExitStatus.OK)); assertThat(status, is(CliTool.ExitStatus.OK));
assertThat(catchTerminalOutput.getTerminalOutput(), hasSize(greaterThanOrEqualTo(1))); assertThat(catchTerminalOutput.getOutput(), containsString("admin"));
assertThat(catchTerminalOutput.getTerminalOutput(), hasItem(containsString("admin"))); assertThat(catchTerminalOutput.getOutput(), not(containsString("user")));
assertThat(catchTerminalOutput.getTerminalOutput(), hasItem(not(containsString("user"))));
} }
public void testListUsersAndRolesCmdNoUsers() throws Exception { public void testListUsersAndRolesCmdNoUsers() throws Exception {
@ -740,14 +737,12 @@ public class ESUsersToolTests extends CliToolTestCase {
.put("path.home", createTempDir()) .put("path.home", createTempDir())
.build(); .build();
CaptureOutputTerminal terminal = new CaptureOutputTerminal(); MockTerminal terminal = new MockTerminal();
ESUsersTool.ListUsersAndRoles cmd = new ESUsersTool.ListUsersAndRoles(terminal, null); ESUsersTool.ListUsersAndRoles cmd = new ESUsersTool.ListUsersAndRoles(terminal, null);
CliTool.ExitStatus status = execute(cmd, settings); CliTool.ExitStatus status = execute(cmd, settings);
assertThat(status, is(CliTool.ExitStatus.OK)); assertThat(status, is(CliTool.ExitStatus.OK));
List<String> output = terminal.getTerminalOutput(); assertThat(terminal.getOutput(), equalTo("No users found\n"));
assertThat(output, hasSize(1));
assertThat(output.get(0), equalTo("No users found" + System.lineSeparator()));
} }
public void testListUsersAndRolesCmdListSingleUserNotFound() throws Exception { public void testListUsersAndRolesCmdListSingleUserNotFound() throws Exception {
@ -758,7 +753,7 @@ public class ESUsersToolTests extends CliToolTestCase {
.put("path.home", createTempDir()) .put("path.home", createTempDir())
.build(); .build();
CaptureOutputTerminal catchTerminalOutput = new CaptureOutputTerminal(); MockTerminal catchTerminalOutput = new MockTerminal();
ESUsersTool.ListUsersAndRoles cmd = new ESUsersTool.ListUsersAndRoles(catchTerminalOutput, "does-not-exist"); ESUsersTool.ListUsersAndRoles cmd = new ESUsersTool.ListUsersAndRoles(catchTerminalOutput, "does-not-exist");
CliTool.ExitStatus status = execute(cmd, settings); CliTool.ExitStatus status = execute(cmd, settings);
@ -777,15 +772,15 @@ public class ESUsersToolTests extends CliToolTestCase {
.put("path.home", createTempDir()) .put("path.home", createTempDir())
.build(); .build();
CaptureOutputTerminal catchTerminalOutput = new CaptureOutputTerminal(); MockTerminal catchTerminalOutput = new MockTerminal();
ESUsersTool.ListUsersAndRoles cmd = new ESUsersTool.ListUsersAndRoles(catchTerminalOutput, null); ESUsersTool.ListUsersAndRoles cmd = new ESUsersTool.ListUsersAndRoles(catchTerminalOutput, null);
CliTool.ExitStatus status = execute(cmd, settings); CliTool.ExitStatus status = execute(cmd, settings);
assertThat(status, is(CliTool.ExitStatus.OK)); assertThat(status, is(CliTool.ExitStatus.OK));
assertThat(catchTerminalOutput.getTerminalOutput(), hasSize(greaterThanOrEqualTo(3))); String output = catchTerminalOutput.getOutput();
assertThat(catchTerminalOutput.getTerminalOutput(), hasItem(containsString("admin"))); assertThat(output, containsString("admin"));
assertThat(catchTerminalOutput.getTerminalOutput(), hasItem(allOf(containsString("user"), containsString("user,foo,bar")))); assertThat(output, allOf(containsString("user"), containsString("user,foo,bar")));
assertThat(catchTerminalOutput.getTerminalOutput(), hasItem(allOf(containsString("no-roles-user"), containsString("-")))); assertThat(output, allOf(containsString("no-roles-user"), containsString("-")));
} }
public void testListUsersAndRolesCmdUsersWithoutRolesAreListed() throws Exception { public void testListUsersAndRolesCmdUsersWithoutRolesAreListed() throws Exception {
@ -800,15 +795,15 @@ public class ESUsersToolTests extends CliToolTestCase {
.put("path.home", createTempDir()) .put("path.home", createTempDir())
.build(); .build();
CaptureOutputTerminal catchTerminalOutput = new CaptureOutputTerminal(); MockTerminal catchTerminalOutput = new MockTerminal();
ESUsersTool.ListUsersAndRoles cmd = new ESUsersTool.ListUsersAndRoles(catchTerminalOutput, null); ESUsersTool.ListUsersAndRoles cmd = new ESUsersTool.ListUsersAndRoles(catchTerminalOutput, null);
CliTool.ExitStatus status = execute(cmd, settings); CliTool.ExitStatus status = execute(cmd, settings);
assertThat(status, is(CliTool.ExitStatus.OK)); assertThat(status, is(CliTool.ExitStatus.OK));
assertThat(catchTerminalOutput.getTerminalOutput(), hasSize(greaterThanOrEqualTo(3))); String output = catchTerminalOutput.getOutput();
assertThat(catchTerminalOutput.getTerminalOutput(), hasItem(allOf(containsString("admin"), containsString("-")))); assertThat(output, allOf(containsString("admin"), containsString("-")));
assertThat(catchTerminalOutput.getTerminalOutput(), hasItem(allOf(containsString("user"), containsString("-")))); assertThat(output, allOf(containsString("user"), containsString("-")));
assertThat(catchTerminalOutput.getTerminalOutput(), hasItem(allOf(containsString("no-roles-user"), containsString("-")))); assertThat(output, allOf(containsString("no-roles-user"), containsString("-")));
} }
public void testListUsersAndRolesCmdUsersWithoutRolesAreListedForSingleUser() throws Exception { public void testListUsersAndRolesCmdUsersWithoutRolesAreListedForSingleUser() throws Exception {
@ -821,13 +816,12 @@ public class ESUsersToolTests extends CliToolTestCase {
.put("path.home", createTempDir()) .put("path.home", createTempDir())
.build(); .build();
CaptureOutputTerminal loggingTerminal = new CaptureOutputTerminal(); MockTerminal loggingTerminal = new MockTerminal();
ESUsersTool.ListUsersAndRoles cmd = new ESUsersTool.ListUsersAndRoles(loggingTerminal, "admin"); ESUsersTool.ListUsersAndRoles cmd = new ESUsersTool.ListUsersAndRoles(loggingTerminal, "admin");
CliTool.ExitStatus status = execute(cmd, settings); CliTool.ExitStatus status = execute(cmd, settings);
assertThat(status, is(CliTool.ExitStatus.OK)); assertThat(status, is(CliTool.ExitStatus.OK));
assertThat(loggingTerminal.getTerminalOutput(), hasSize(greaterThanOrEqualTo(1))); assertThat(loggingTerminal.getOutput(), allOf(containsString("admin"), containsString("-")));
assertThat(loggingTerminal.getTerminalOutput(), hasItem(allOf(containsString("admin"), containsString("-"))));
} }
public void testUseraddUsernameWithPeriod() throws Exception { public void testUseraddUsernameWithPeriod() throws Exception {