package org.peerbox.app.config;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
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;
public class AppConfigTest extends BaseJUnitTest {
private Path configFile;
private AppConfig appConfig;
@Before
public void setUp() throws IOException {
configFile = Paths.get(FileUtils.getTempDirectoryPath(), "testappconfig.conf");
appConfig = new AppConfig(configFile);
appConfig.load();
}
@After
public void tearDown() throws IOException {
Files.deleteIfExists(configFile);
appConfig = null;
}
@Test
public void testHasApiServerPort() throws IOException {
appConfig.setApiServerPort(0);
assertFalse(appConfig.hasApiServerPort());
appConfig.setApiServerPort(-1);
assertFalse(appConfig.hasApiServerPort());
appConfig.setApiServerPort(65536);
assertFalse(appConfig.hasApiServerPort());
appConfig.setApiServerPort(1);
assertTrue(appConfig.hasApiServerPort());
appConfig.setApiServerPort(47325);
assertTrue(appConfig.hasApiServerPort());
appConfig.setApiServerPort(65535);
assertTrue(appConfig.hasApiServerPort());
}
@Test
public void testSetApiServerPort() throws IOException {
// invalid ports
appConfig.setApiServerPort(0);
assertEquals(appConfig.getApiServerPort(), -1);
userConfigAssertPersistence(appConfig, configFile);
appConfig.setApiServerPort(-1);
assertEquals(appConfig.getApiServerPort(), -1);
userConfigAssertPersistence(appConfig, configFile);
appConfig.setApiServerPort(65536);
assertEquals(appConfig.getApiServerPort(), -1);
userConfigAssertPersistence(appConfig, configFile);
// valid ports
appConfig.setApiServerPort(1);
assertEquals(appConfig.getApiServerPort(), 1);
userConfigAssertPersistence(appConfig, configFile);
appConfig.setApiServerPort(37824);
assertEquals(appConfig.getApiServerPort(), 37824);
userConfigAssertPersistence(appConfig, configFile);
appConfig.setApiServerPort(65535);
assertEquals(appConfig.getApiServerPort(), 65535);
userConfigAssertPersistence(appConfig, configFile);
}
@Test
public void testSetTrayNotification() throws IOException {
appConfig.setTrayNotification(true);
assertTrue(appConfig.isTrayNotificationEnabled());
appConfig.setTrayNotification(false);
assertFalse(appConfig.isTrayNotificationEnabled());
appConfig.setTrayNotification(true);
assertTrue(appConfig.isTrayNotificationEnabled());
}
/**
* 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 b another instance
* @throws IOException if loading fails
*/
private void userConfigAssertPersistence(AppConfig a, Path file) throws IOException {
AppConfig b = new AppConfig(file);
b.load();
assertEquals(a.getApiServerPort(), b.getApiServerPort());
assertTrue(a.hasApiServerPort() == b.hasApiServerPort());
assertEquals(a.isTrayNotificationEnabled(), b.isTrayNotificationEnabled());
assertEquals(a.getConfigFile(), b.getConfigFile());
}
}