package org.peerbox.app.config; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import org.apache.commons.io.FileUtils; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.peerbox.BaseJUnitTest; import org.peerbox.utils.OsUtils; public class UserConfigTest extends BaseJUnitTest { private Path configFile; private UserConfig userConfig; @Before public void setUp() throws IOException { configFile = Paths.get(FileUtils.getTempDirectoryPath(), "testconfig.conf"); userConfig = new UserConfig(configFile); userConfig.load(); } @After public void tearDown() throws IOException { Files.deleteIfExists(configFile); userConfig = null; } @Test(expected=IllegalStateException.class) public void testLoad() throws IOException { UserConfig cfg = new UserConfig(null); cfg.load(); } @Test public void testGetConfigFileName() { assertEquals(userConfig.getConfigFile(), configFile); UserConfig cfg = new UserConfig(null); assertNull(cfg.getConfigFile()); Path newPath = Paths.get(FileUtils.getTempDirectoryPath(), "test-config-file.txt"); cfg = new UserConfig(newPath); assertEquals(cfg.getConfigFile(), newPath); } @Test public void testHasRootPath() throws IOException { userConfig.setRootPath(Paths.get("")); assertFalse(userConfig.hasRootPath()); if (!OsUtils.isWindows()) { // trailing space is not supported on windows. throws exception. userConfig.setRootPath(Paths.get(" ")); assertTrue(userConfig.hasRootPath()); } userConfig.setRootPath(Paths.get("/this/is/a/path")); assertTrue(userConfig.hasRootPath()); userConfig.setRootPath(null); assertFalse(userConfig.hasRootPath()); } @Test public void testSetRootPath() throws IOException { userConfig.setRootPath(Paths.get("")); assertNull(userConfig.getRootPath()); userConfigAssertPersistence(userConfig, configFile); userConfig.setRootPath(Paths.get("/this/is/a/Path")); assertEquals(userConfig.getRootPath(), Paths.get("/this/is/a/Path")); userConfigAssertPersistence(userConfig, configFile); if (!OsUtils.isWindows()) { userConfig.setRootPath(Paths.get("/this/is/a/Path/John Doe ")); assertEquals(userConfig.getRootPath(), Paths.get("/this/is/a/Path/John Doe ")); userConfigAssertPersistence(userConfig, configFile); } userConfig.setRootPath(null); assertNull(userConfig.getRootPath()); userConfigAssertPersistence(userConfig, configFile); } @Test public void testHasUsername() throws IOException { userConfig.setUsername(""); assertFalse(userConfig.hasUsername()); userConfig.setUsername(" "); assertFalse(userConfig.hasUsername()); userConfig.setUsername("testuser"); assertTrue(userConfig.hasUsername()); userConfig.setUsername(null); assertFalse(userConfig.hasUsername()); } @Test public void testSetUsername() throws IOException { userConfig.setUsername(""); assertNull(userConfig.getUsername()); userConfigAssertPersistence(userConfig, configFile); userConfig.setUsername("TestUser123"); assertEquals(userConfig.getUsername(), "TestUser123"); userConfigAssertPersistence(userConfig, configFile); userConfig.setUsername(" JohnDoe "); assertNotEquals(userConfig.getUsername(), " JohnDoe "); assertEquals(userConfig.getUsername(), "JohnDoe"); userConfigAssertPersistence(userConfig, configFile); userConfig.setUsername(null); assertNull(userConfig.getUsername()); userConfigAssertPersistence(userConfig, configFile); } @Test public void testHasPassword() throws IOException { userConfig.setPassword(""); assertFalse(userConfig.hasPassword()); userConfig.setPassword(" "); assertTrue(userConfig.hasPassword()); userConfig.setPassword("mySecretPassword"); assertTrue(userConfig.hasPassword()); userConfig.setPassword(null); assertFalse(userConfig.hasPassword()); } @Test public void testSetPassword() throws IOException { userConfig.setPassword(""); assertNull(userConfig.getPassword()); userConfigAssertPersistence(userConfig, configFile); userConfig.setPassword("mySecret#Password123"); assertEquals(userConfig.getPassword(), "mySecret#Password123"); assertNotEquals(userConfig.getPassword(), "mySecret#Password123".toLowerCase()); userConfigAssertPersistence(userConfig, configFile); userConfig.setPassword(" my secret passwort "); assertEquals(userConfig.getPassword(), " my secret passwort "); assertNotEquals(userConfig.getPassword(), " my secret passwort ".trim()); userConfigAssertPersistence(userConfig, configFile); userConfig.setPassword(null); assertNull(userConfig.getPassword()); userConfigAssertPersistence(userConfig, configFile); } @Test public void testHasPin() throws IOException { userConfig.setPin(""); assertFalse(userConfig.hasPin()); userConfig.setPin(" "); assertTrue(userConfig.hasPin()); userConfig.setPin("myOwnPin"); assertTrue(userConfig.hasPin()); userConfig.setPin(null); assertFalse(userConfig.hasPin()); } @Test public void testSetPin() throws IOException { userConfig.setPin(""); assertNull(userConfig.getPin()); userConfigAssertPersistence(userConfig, configFile); userConfig.setPin("ThisIs-MyPin"); assertEquals(userConfig.getPin(), "ThisIs-MyPin"); assertNotEquals(userConfig.getPin(), "ThisIs-MyPin".toLowerCase()); userConfigAssertPersistence(userConfig, configFile); userConfig.setPin(" another pin 123 "); assertEquals(userConfig.getPin(), " another pin 123 "); assertNotEquals(userConfig.getPin(), " another pin 123 ".trim()); userConfigAssertPersistence(userConfig, configFile); userConfig.setPin(null); assertNull(userConfig.getPin()); userConfigAssertPersistence(userConfig, configFile); } @Test public void testSetAutoLogin() throws IOException { userConfig.setAutoLogin(true); assertTrue(userConfig.isAutoLoginEnabled()); userConfigAssertPersistence(userConfig, configFile); userConfig.setAutoLogin(false); assertFalse(userConfig.isAutoLoginEnabled()); userConfigAssertPersistence(userConfig, configFile); } /** * Allows to check that changes made to a config are persistent, i.e. saved on disk in * a property file. * Asserts that two user config instances are equals by comparing them with each * other regarding their state (properties). * * Usage: given an instance a, create a new instance b that reads the config again and compare. * * @param a an instance * @param file path to other config file. * @throws IOException if loading fails */ private void userConfigAssertPersistence(UserConfig a, Path file) throws IOException { UserConfig b = new UserConfig(file); b.load(); assertEquals(a.getUsername(), b.getUsername()); assertTrue(a.hasUsername() == b.hasUsername()); assertEquals(a.getPassword(), b.getPassword()); assertTrue(a.hasPassword() == b.hasPassword()); assertEquals(a.getPin(), b.getPin()); assertTrue(a.hasPin() == b.hasPin()); assertEquals(a.getRootPath(), b.getRootPath()); assertTrue(a.hasRootPath() == b.hasRootPath()); assertEquals(a.isAutoLoginEnabled(), b.isAutoLoginEnabled()); assertEquals(a.getConfigFile(), b.getConfigFile()); } }