package net.sourceforge.cruisecontrol.listeners; import junit.framework.TestCase; import java.util.Properties; import java.io.FileOutputStream; import java.io.File; import net.sourceforge.cruisecontrol.CruiseControlException; import net.sourceforge.cruisecontrol.testutil.TestUtil.FilesToDelete; import net.sourceforge.cruisecontrol.testutil.TestUtil; /** * Test CMSynergySession. */ public class CMSynergySessionMonitorTest extends TestCase { private static final String ATTR_FILE_NAME = new File(TestUtil.getTargetDir(), "test-cmsynergyattribute").getAbsolutePath(); private CMSynergySessionMonitor monitor; private FilesToDelete filesToDelete; @Override public void setUp() { monitor = new CMSynergySessionMonitor(); filesToDelete = new FilesToDelete(); } @Override public void tearDown() { filesToDelete.delete(); } /** * * Test to make sure that {@link CMSynergySessionMonitor.CMSynergySession#validate()} * properly checks for complete information. * @throws Exception if the test fails */ public void testValidateCompleteSessionInfo() throws Exception { final CMSynergySessionMonitor.CMSynergySession session = monitor.createSession(); session.setName("testname"); session.setPassword("testpass"); session.setRole("build_mgr"); session.setUser("testuser"); session.setDatabase("/data/test/db"); session.validate(); } /** * Test to make sure that {@link CMSynergySessionMonitor.CMSynergySession#validate()} * propery checks for <em>incomplete</em> information. */ public void testValidateIncompleteSessionInfo() { final CMSynergySessionMonitor.CMSynergySession session = monitor.createSession(); try { session.validate(); fail("CMSynergySession.validate() should have thrown an exception"); } catch (CruiseControlException e) { } } /** * @return a new Properties object containing required CMSynergySession attributes. */ private static Properties createRequiredProperties() { /* * Set required properties */ final Properties requiredProperties = new Properties(); requiredProperties.setProperty("host", "testhost"); requiredProperties.setProperty("password", "testpass"); requiredProperties.setProperty("role", "build_mgr"); requiredProperties.setProperty("user", "testuser"); requiredProperties.setProperty("database", "/data/test/db"); return requiredProperties; } /** * Check that required properties from createRequiredProperties are still there. * "name" property should be set by caller for the validation * @param expectedProperties holds expected values * @param actualSession holds actual values */ private static void checkRequiredProperties(final Properties expectedProperties, final CMSynergySessionMonitor.CMSynergySession actualSession ) { assertEquals("Attribute name didn't match.", expectedProperties.getProperty("name"), actualSession.getName()); assertEquals("Attribute password didn't match.", expectedProperties.getProperty("password"), actualSession.getPassword()); assertEquals("Attribute role didn't match.", expectedProperties.getProperty("role"), actualSession.getRole()); assertEquals("Attribute user didn't match.", expectedProperties.getProperty("user"), actualSession.getUser()); assertEquals("Attribute password didn't match.", expectedProperties.getProperty("database"), actualSession.getDatabase()); assertEquals("Attribute name didn't match.", expectedProperties.getProperty("name"), actualSession.getName()); } /** * Verify the default value of remoteclient is false. * @throws Exception if the test fails */ public void testDefaultRemoteClientFalse() throws Exception { final Properties properties = createRequiredProperties(); final File file = new File(ATTR_FILE_NAME); filesToDelete.add(file); final FileOutputStream stream = new FileOutputStream(file); try { properties.store(stream, null); } finally { stream.close(); } CMSynergySessionMonitor.CMSynergySession session = monitor.createSession(); session.setAttributeFile(ATTR_FILE_NAME); assertFalse("Remoteclient reported true", session.isRemoteClient()); } /** * Test {@link CMSynergySessionMonitor.CMSynergySession#setAttributeFile(String)}) with * remoteclient false. * @throws Exception if the test fails */ public void testSetAttributeFileRemoteClientFalse() throws Exception { final Properties properties = createRequiredProperties(); final File file = new File(ATTR_FILE_NAME); filesToDelete.add(file); final FileOutputStream stream = new FileOutputStream(file); try { properties.setProperty("remoteclient", "false"); properties.store(stream, null); } finally { stream.close(); } CMSynergySessionMonitor.CMSynergySession session = monitor.createSession(); session.setName("testname"); properties.setProperty("name", "testname"); session.setAttributeFile(ATTR_FILE_NAME); checkRequiredProperties(properties, session); session.validate(); assertFalse("Remoteclient reported true", session.isRemoteClient()); } /** * Test {@link CMSynergySessionMonitor.CMSynergySession#setAttributeFile(String)}) with * remoteclient true. * @throws Exception if the test fails */ public void testSetAttributeFileRemoteClientTrue() throws Exception { final Properties properties = createRequiredProperties(); final File file = new File(ATTR_FILE_NAME); filesToDelete.add(file); final FileOutputStream stream = new FileOutputStream(file); try { properties.setProperty("remoteclient", "true"); properties.store(stream, null); } finally { stream.close(); } CMSynergySessionMonitor.CMSynergySession session = monitor.createSession(); session.setName("testname"); properties.setProperty("name", "testname"); session.setAttributeFile(ATTR_FILE_NAME); checkRequiredProperties(properties, session); session.validate(); assertTrue("Remoteclient reported true", session.isRemoteClient()); } /** * Test that set/get functions are working properly. */ public void testGetSetFunctions() { CMSynergySessionMonitor.CMSynergySession session = monitor.createSession(); final String testExpected = "test"; session.setName(testExpected); assertEquals("Either setName or getName did something wrong.", testExpected, session.getName()); session.setHost(testExpected); assertEquals("Either setHost or getHost did something wrong.", testExpected, session.getHost()); session.setDatabase(testExpected); assertEquals("Either setDatabase or getDatabase did something wrong.", testExpected, session.getDatabase()); session.setRole(testExpected); assertEquals("Either setRole or getRole did something wrong.", testExpected, session.getRole()); session.setUser(testExpected); assertEquals("Either setUser or getUser did something wrong.", testExpected, session.getUser()); session.setPassword(testExpected); assertEquals("Either setPassword or getPassword did something wrong.", testExpected, session.getPassword()); session.setRemoteClient("true"); assertTrue("Either setRemoteClient or isRemoteClient did something wrong when testing for " + " remoteclient=\"true\". isRemoteClient() returned " + Boolean.toString(session.isRemoteClient()), session.isRemoteClient()); session.setRemoteClient("false"); assertFalse("Either setRemoteClient or isRemoteClient did something wrong when testing for " + " remoteclient=\"false\". isRemoteClient() returned " + Boolean.toString(session.isRemoteClient()), session.isRemoteClient()); } }