Skip to content

Commit

Permalink
Refactors out stream assertions
Browse files Browse the repository at this point in the history
Signed-off-by: Darshit Chanpura <dchanp@amazon.com>
  • Loading branch information
DarshitChanpura committed Dec 13, 2023
1 parent bcfb5e6 commit b865415
Show file tree
Hide file tree
Showing 3 changed files with 68 additions and 66 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,7 @@ void readOptions(String[] args) {
* Prints the help menu when -h option is passed
*/
void showHelp() {
formatter.printHelp("install_demo_configuration.sh", options, true);
formatter.printHelp("install_demo_configuration" + FILE_EXTENSION, options, true);
System.exit(0);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,6 @@
import static org.opensearch.security.tools.democonfig.util.DemoConfigHelperUtil.createDirectory;
import static org.opensearch.security.tools.democonfig.util.DemoConfigHelperUtil.createFile;
import static org.opensearch.security.tools.democonfig.util.DemoConfigHelperUtil.deleteDirectoryRecursive;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThrows;
import static org.junit.Assert.fail;

Expand Down Expand Up @@ -74,7 +73,7 @@ public void testPrintScriptHeaders() {
+ System.lineSeparator()
+ "### ** Warning: Do not use on production or public reachable systems **"
+ System.lineSeparator();
assertThat(expectedOutput, equalTo(outContent.toString()));
assertThat(outContent.toString(), equalTo(expectedOutput));
}

@Test
Expand All @@ -83,35 +82,28 @@ public void testReadOptions_withoutHelpOption() {
String[] validOptions = { "/scriptDir", "-y", "-i", "-c", "-s", "-t" };
installer.readOptions(validOptions);

assertEquals("/scriptDir", installer.SCRIPT_DIR);
assertThat(installer.SCRIPT_DIR, equalTo("/scriptDir"));
assertThat(installer.assumeyes, is(true));
assertThat(installer.initsecurity, is(true));
assertThat(installer.cluster_mode, is(true));
assertEquals(0, installer.skip_updates);
assertEquals(ExecutionEnvironment.TEST, installer.environment);
assertThat(installer.skip_updates, equalTo(0));
assertThat(installer.environment, equalTo(ExecutionEnvironment.TEST));
}

@Test
public void testReadOptions_help() {
try {
System.setSecurityManager(new NoExitSecurityManager());

String[] helpOption = { "/scriptDir", "-h" };
installer.readOptions(helpOption);

assertThat(outContent.toString(), containsString("install_demo_configuration.sh [-y] [-i] [-c]"));
assertThat(outContent.toString(), containsString("-h show help"));
assertThat(outContent.toString(), containsString("-y confirm all installation dialogues automatically"));
assertThat(outContent.toString(), containsString("-i initialize Security plugin with default configuration"));
assertThat(outContent.toString(), containsString("-c enable cluster mode by binding to all network interfaces"));
assertThat(outContent.toString(), containsString("-s skip updates if config is already applied to opensearch.yml"));
assertThat(outContent.toString(), containsString("-t set the execution environment to `test` to skip password validation"));
assertThat(outContent.toString(), containsString("Should be used only for testing. (default is set to `demo`)"));
} catch (SecurityException e) {
// if help text printed correctly then exit code 0 is expected
assertThat(e.getMessage(), equalTo("System.exit(0) blocked to allow print statement testing."));
} finally {
System.setSecurityManager(null);
}

verifyStdOutContainsString("usage: install_demo_configuration" + installer.FILE_EXTENSION + " [-c] [-h] [-i] [-s] [-t] [-y]");
}

@Test
Expand All @@ -128,11 +120,11 @@ public void testGatherUserInputs_withoutAssumeYes() {
// y
installer.gatherUserInputs();

assertThat(outContent.toString(), containsString("Install demo certificates?"));
assertThat(outContent.toString(), containsString("Initialize Security Modules?"));
assertThat(outContent.toString(), containsString("Cluster mode requires additional setup of:"));
assertThat(outContent.toString(), containsString(" - Virtual memory (vm.max_map_count)" + System.lineSeparator()));
assertThat(outContent.toString(), containsString("Enable cluster mode?"));
verifyStdOutContainsString("Install demo certificates?");
verifyStdOutContainsString("Initialize Security Modules?");
verifyStdOutContainsString("Cluster mode requires additional setup of:");
verifyStdOutContainsString(" - Virtual memory (vm.max_map_count)" + System.lineSeparator());
verifyStdOutContainsString("Enable cluster mode?");

assertThat(installer.initsecurity, is(false));
assertThat(installer.cluster_mode, is(false));
Expand All @@ -144,11 +136,11 @@ public void testGatherUserInputs_withoutAssumeYes() {
// y
installer.gatherUserInputs();

assertThat(outContent.toString(), containsString("Install demo certificates?"));
assertThat(outContent.toString(), containsString("Initialize Security Modules?"));
assertThat(outContent.toString(), containsString("Cluster mode requires additional setup of:"));
assertThat(outContent.toString(), containsString(" - Virtual memory (vm.max_map_count)" + System.lineSeparator()));
assertThat(outContent.toString(), containsString("Enable cluster mode?"));
verifyStdOutContainsString("Install demo certificates?");
verifyStdOutContainsString("Initialize Security Modules?");
verifyStdOutContainsString("Cluster mode requires additional setup of:");
verifyStdOutContainsString(" - Virtual memory (vm.max_map_count)" + System.lineSeparator());
verifyStdOutContainsString("Enable cluster mode?");

assertThat(installer.initsecurity, is(true));
assertThat(installer.cluster_mode, is(true));
Expand All @@ -161,17 +153,16 @@ public void testGatherUserInputs_withoutAssumeYes() {

readInputStream("n" + System.lineSeparator() + "n" + System.lineSeparator() + "n" + System.lineSeparator());
installer.gatherUserInputs();

assertThat(outContent.toString(), containsString("Install demo certificates?"));
assertThat(outContent.toString(), not(containsString("Initialize Security Modules?")));
assertThat(outContent.toString(), not(containsString("Cluster mode requires additional setup of:")));
assertThat(outContent.toString(), not(containsString(" - Virtual memory (vm.max_map_count)" + System.lineSeparator())));
assertThat(outContent.toString(), not(containsString("Enable cluster mode?")));
} catch (SecurityException e) {
assertThat(e.getMessage(), equalTo("System.exit(0) blocked to allow print statement testing."));
} finally {
System.setSecurityManager(null);
}
verifyStdOutContainsString("Install demo certificates?");
verifyStdOutDoesNotContainString("Initialize Security Modules?");
verifyStdOutDoesNotContainString("Cluster mode requires additional setup of:");
verifyStdOutDoesNotContainString(" - Virtual memory (vm.max_map_count)" + System.lineSeparator());
verifyStdOutDoesNotContainString("Enable cluster mode?");

outContent.reset();

Expand All @@ -186,9 +177,9 @@ public void testGatherUserInputs_withoutAssumeYes() {
// y
installer.gatherUserInputs();

assertThat(outContent.toString(), containsString("Install demo certificates?"));
assertThat(outContent.toString(), not(containsString("Initialize Security Modules?")));
assertThat(outContent.toString(), not(containsString("Enable cluster mode?")));
verifyStdOutContainsString("Install demo certificates?");
verifyStdOutDoesNotContainString("Initialize Security Modules?");
verifyStdOutDoesNotContainString("Enable cluster mode?");

assertThat(installer.initsecurity, is(true));
assertThat(installer.cluster_mode, is(true));
Expand Down Expand Up @@ -218,14 +209,14 @@ public void testInitializeVariables_setBaseDir_invalidPath() {

try {
System.setSecurityManager(new NoExitSecurityManager());

installer.initializeVariables();
assertThat(outContent.toString(), containsString("DEBUG: basedir does not exist"));
} catch (SecurityException e) {
assertThat(e.getMessage(), equalTo("System.exit(-1) blocked to allow print statement testing."));
} finally {
System.setSecurityManager(null);
}

verifyStdOutContainsString("DEBUG: basedir does not exist");
}

@Test
Expand All @@ -251,20 +242,18 @@ public void testSetOpenSearchVariables_invalidPath() {

try {
System.setSecurityManager(new NoExitSecurityManager());

installer.setBaseDir();
installer.setOpenSearchVariables();

assertThat(outContent.toString(), containsString("Unable to determine OpenSearch config file. Quit."));
assertThat(outContent.toString(), containsString("Unable to determine OpenSearch bin directory. Quit."));
assertThat(outContent.toString(), containsString("Unable to determine OpenSearch plugins directory. Quit."));
assertThat(outContent.toString(), containsString("Unable to determine OpenSearch lib directory. Quit."));

} catch (SecurityException e) {
assertThat(e.getMessage(), equalTo("System.exit(-1) blocked to allow print statement testing."));
} finally {
System.setSecurityManager(null);

}
verifyStdOutContainsString("Unable to determine OpenSearch config file. Quit.");
verifyStdOutContainsString("Unable to determine OpenSearch bin directory. Quit.");
verifyStdOutContainsString("Unable to determine OpenSearch plugins directory. Quit.");
verifyStdOutContainsString("Unable to determine OpenSearch lib directory. Quit.");

String expectedBaseDirValue = new File(currentDir).getParentFile().getParentFile().getParentFile().getAbsolutePath()
+ File.separator;
Expand All @@ -288,7 +277,7 @@ public void testDetermineInstallType_windows() {

String installType = installer.determineInstallType();

assertEquals(".zip", installType);
assertThat(installType, equalTo(".zip"));
}

@Test
Expand All @@ -300,7 +289,7 @@ public void testDetermineInstallType_rpm_deb() {

String installType = installer.determineInstallType();

assertEquals("rpm/deb", installType);
assertThat(installType, equalTo("rpm/deb"));
}

@Test
Expand All @@ -309,7 +298,7 @@ public void testDetermineInstallType_default() {
installer.BASE_DIR = "/random-dir";
String installType = installer.determineInstallType();

assertEquals(".tar.gz", installType);
assertThat(installType, equalTo(".tar.gz"));
}

@Test
Expand Down Expand Up @@ -367,7 +356,7 @@ public void testPrintVariables() {
+ "Detected OpenSearch Security Version: version"
+ System.lineSeparator();

assertEquals(expectedOutput, outContent.toString());
assertThat(outContent.toString(), equalTo(expectedOutput));
}

@Test
Expand Down Expand Up @@ -412,7 +401,7 @@ public void testFinishScriptExecution() {
+ "### (Ignore the SSL certificate warning because we installed self-signed demo certificates)"
+ System.lineSeparator();

assertEquals(expectedOutput, outContent.toString());
assertThat(outContent.toString(), equalTo(expectedOutput));

tearDownSecurityDirectories();
}
Expand Down Expand Up @@ -472,7 +461,7 @@ public void testFinishScriptExecution_withInitSecurityEnabled() {
+ "### (Ignore the SSL certificate warning because we installed self-signed demo certificates)"
+ System.lineSeparator();

assertEquals(expectedOutput, outContent.toString());
assertThat(outContent.toString(), equalTo(expectedOutput));

tearDownSecurityDirectories();
}
Expand Down Expand Up @@ -519,4 +508,12 @@ static void setWritePermissions(String filePath) {
}
}
}

private void verifyStdOutContainsString(String s) {
assertThat(outContent.toString(), containsString(s));
}

private void verifyStdOutDoesNotContainString(String s) {
assertThat(outContent.toString(), not(containsString(s)));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ public class SecuritySettingsConfigurerTests {

private final ByteArrayOutputStream outContent = new ByteArrayOutputStream();
private final PrintStream originalOut = System.out;
private final PrintStream originalErr = System.err;
private final InputStream originalIn = System.in;

private final String adminPasswordKey = "initialAdminPassword";
Expand All @@ -63,6 +64,7 @@ public class SecuritySettingsConfigurerTests {
@Before
public void setUp() {
System.setOut(new PrintStream(outContent));
System.setErr(new PrintStream(outContent));
installer = Installer.getInstance();
installer.buildOptions();
securitySettingsConfigurer = new SecuritySettingsConfigurer(installer);
Expand All @@ -71,7 +73,9 @@ public void setUp() {

@After
public void tearDown() throws NoSuchFieldException, IllegalAccessException {
outContent.reset();
System.setOut(originalOut);
System.setErr(originalErr);
System.setIn(originalIn);
deleteDirectoryRecursive(installer.OPENSEARCH_CONF_DIR);
unsetEnv(adminPasswordKey);
Expand All @@ -87,7 +91,7 @@ public void testUpdateAdminPasswordWithCustomPassword() throws NoSuchFieldExcept

assertThat(customPassword, is(equalTo(SecuritySettingsConfigurer.ADMIN_PASSWORD)));

assertThat(outContent.toString(), containsString("ADMIN PASSWORD SET TO: " + customPassword));
verifyStdOutContainsString("ADMIN PASSWORD SET TO: " + customPassword);
}

@Test
Expand All @@ -105,22 +109,21 @@ public void testUpdateAdminPasswordWithFilePassword() throws IOException {
securitySettingsConfigurer.updateAdminPassword();

assertEquals(customPassword, SecuritySettingsConfigurer.ADMIN_PASSWORD);
assertThat(outContent.toString(), containsString("ADMIN PASSWORD SET TO: " + customPassword));
verifyStdOutContainsString("ADMIN PASSWORD SET TO: " + customPassword);
}

@Test
public void testUpdateAdminPassword_noPasswordSupplied() {
deleteDirectoryRecursive(installer.OPENSEARCH_CONF_DIR); // to ensure no flakiness
try {
System.setSecurityManager(new NoExitSecurityManager());

securitySettingsConfigurer.updateAdminPassword();
assertThat(outContent.toString(), containsString("No custom admin password found. Please provide a password."));
} catch (SecurityException e) {
assertThat(e.getMessage(), equalTo("System.exit(-1) blocked to allow print statement testing."));
} finally {
System.setSecurityManager(null);
}

verifyStdOutContainsString("No custom admin password found. Please provide a password.");
}

@Test
Expand All @@ -129,16 +132,14 @@ public void testUpdateAdminPasswordWithWeakPassword() throws NoSuchFieldExceptio
setEnv(adminPasswordKey, "weakpassword");
try {
System.setSecurityManager(new NoExitSecurityManager());

securitySettingsConfigurer.updateAdminPassword();

assertThat(outContent.toString(), containsString("Password weakpassword is weak. Please re-try with a stronger password."));

} catch (SecurityException e) {
assertThat(e.getMessage(), equalTo("System.exit(-1) blocked to allow print statement testing."));
} finally {
System.setSecurityManager(null);
}

verifyStdOutContainsString("Password weakpassword is weak. Please re-try with a stronger password.");
}

@Test
Expand All @@ -148,23 +149,22 @@ public void testUpdateAdminPasswordWithWeakPassword_skipPasswordValidation() thr
securitySettingsConfigurer.updateAdminPassword();

assertThat("weakpassword", is(equalTo(SecuritySettingsConfigurer.ADMIN_PASSWORD)));
assertThat(outContent.toString(), containsString("ADMIN PASSWORD SET TO: weakpassword"));
verifyStdOutContainsString("ADMIN PASSWORD SET TO: weakpassword");
}

@Test
public void testSecurityPluginAlreadyConfigured() {
securitySettingsConfigurer.writeSecurityConfigToOpenSearchYML();
String expectedMessage = installer.OPENSEARCH_CONF_FILE + " seems to be already configured for Security. Quit.";
try {
System.setSecurityManager(new NoExitSecurityManager());
String expectedMessage = installer.OPENSEARCH_CONF_FILE + " seems to be already configured for Security. Quit.";

securitySettingsConfigurer.checkIfSecurityPluginIsAlreadyConfigured();
assertThat(outContent.toString(), containsString(expectedMessage));
} catch (SecurityException e) {
assertThat(e.getMessage(), equalTo("System.exit(-1) blocked to allow print statement testing."));
} finally {
System.setSecurityManager(null);
}
verifyStdOutContainsString(expectedMessage);
}

@Test
Expand All @@ -179,17 +179,18 @@ public void testSecurityPluginNotConfigured() {
@Test
public void testConfigFileDoesNotExist() {
installer.OPENSEARCH_CONF_FILE = "path/to/nonexistentfile";
String expectedMessage = "OpenSearch configuration file does not exist. Quit.";
try {
System.setSecurityManager(new NoExitSecurityManager());
String expectedMessage = "OpenSearch configuration file does not exist. Quit.";

securitySettingsConfigurer.checkIfSecurityPluginIsAlreadyConfigured();
assertThat(outContent.toString(), containsString(expectedMessage));
} catch (SecurityException e) {
assertThat(e.getMessage(), equalTo("System.exit(-1) blocked to allow print statement testing."));
} finally {
System.setSecurityManager(null);
}

verifyStdOutContainsString(expectedMessage);

// reset the file pointer
installer.OPENSEARCH_CONF_FILE = installer.OPENSEARCH_CONF_DIR + "opensearch.yml";
}
Expand Down Expand Up @@ -318,4 +319,8 @@ void setUpConf() {
createFile(securityConfDir + "internal_users.yml");
createFile(installer.OPENSEARCH_CONF_FILE);
}

private void verifyStdOutContainsString(String s) {
assertThat(outContent.toString(), containsString(s));
}
}

0 comments on commit b865415

Please sign in to comment.