package org.zend.sdk.test.sdklib.manager; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertSame; import static org.junit.Assert.assertTrue; import static org.mockito.Matchers.any; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; import java.io.File; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import java.util.Random; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.mockito.Mockito; import org.zend.sdk.test.AbstractTest; import org.zend.sdklib.internal.target.UserBasedTargetLoader; import org.zend.sdklib.internal.target.ZendTarget; import org.zend.sdklib.internal.target.ZendTargetAutoDetect; import org.zend.sdklib.manager.DetectionException; import org.zend.sdklib.manager.TargetException; import org.zend.sdklib.manager.TargetsManager; import org.zend.sdklib.target.ITargetLoader; import org.zend.sdklib.target.IZendTarget; import org.zend.sdklib.target.LicenseExpiredException; import org.zend.webapi.core.WebApiException; public class TestTargetsManager extends AbstractTest { private ITargetLoader loader; private File file; @Before public void startup() { final String tempDir = System.getProperty("java.io.tmpdir"); file = new File(tempDir + File.separator + new Random().nextInt()); file.mkdir(); loader = new UserBasedTargetLoader(file); } @After public void shutdown() { loader = null; file.deleteOnExit(); } @Test public void testCreateManagerWithInvalidTarget() throws WebApiException, MalformedURLException { ITargetLoader loader = spy(new UserBasedTargetLoader(file)); when(loader.loadAll()).thenReturn( new IZendTarget[] { new ZendTarget(null, new URL( "http://localhost"), "mykey", "43543") }); TargetsManager manager = new TargetsManager(loader); assertTrue(manager.getTargets().length == 0); } @Test public void testCreateManagerWithValidTarget() throws WebApiException, MalformedURLException { ITargetLoader loader = spy(new UserBasedTargetLoader(file)); when(loader.loadAll()).thenReturn( new IZendTarget[] { new ZendTarget("dev3", new URL( "http://localhost"), "mykey", "43543") }); TargetsManager manager = new TargetsManager(loader); assertTrue(manager.getTargets().length == 1); } @Test public void testAddTarget() throws WebApiException, TargetException, LicenseExpiredException { TargetsManager manager = new TargetsManager(loader); IZendTarget target = getTarget(); manager.add(target); assertTrue(manager.getTargets().length == 1); } @Test public void testNullIdAddTarget() throws WebApiException, TargetException, MalformedURLException, LicenseExpiredException { TargetsManager manager = new TargetsManager(loader); IZendTarget target = spy(new ZendTarget(null, new URL( "http://localhost:10081"), "mykey", "43543")); doReturn(true).when(target).connect(); manager.add(target); assertTrue(manager.getTargets().length == 0); } @Test public void testAddDisconnectedTarget() throws WebApiException, TargetException, LicenseExpiredException { TargetsManager manager = new TargetsManager(loader); IZendTarget target = getTarget(); when(target.connect()).thenReturn(false); assertNull(manager.add(target)); } @Test public void testAddDuplicatedTarget() throws WebApiException, TargetException, LicenseExpiredException { TargetsManager manager = new TargetsManager(loader); IZendTarget target = getTarget(); manager.add(target); manager.add(target); assertTrue(manager.getTargets().length == 1); } @Test public void testAddNullTarget() throws TargetException, LicenseExpiredException { TargetsManager manager = new TargetsManager(loader); assertNull(manager.add(null)); } @Test public void testRemoveTarget() throws WebApiException, TargetException, LicenseExpiredException { TargetsManager manager = new TargetsManager(loader); IZendTarget target = getTarget(); manager.add(target); assertTrue(manager.getTargets().length == 1); manager.remove(target); assertTrue(manager.getTargets().length == 0); } @Test(expected = IllegalArgumentException.class) public void testRemoveNullTarget() throws WebApiException { TargetsManager manager = new TargetsManager(loader); manager.remove(null); } @Test(expected = IllegalArgumentException.class) public void testRemoveNotAddedTarget() throws WebApiException, LicenseExpiredException { TargetsManager manager = new TargetsManager(loader); IZendTarget target = getTarget(); manager.remove(target); } @Test public void testGetTargetById() throws WebApiException, TargetException, LicenseExpiredException { TargetsManager manager = new TargetsManager(loader); IZendTarget target = getTarget(); manager.add(target); assertTrue(manager.getTargets().length == 1); assertSame(target, manager.getTargetById(target.getId())); } @Test public void testGetNullTargetById() throws WebApiException { TargetsManager manager = new TargetsManager(loader); assertNull(manager.getTargetById(null)); } @Test public void testGetNotAddedTargetById() throws WebApiException { TargetsManager manager = new TargetsManager(loader); assertNull(manager.getTargetById("0")); } @Test public void testDetectLocalhost() throws WebApiException, TargetException, IOException, DetectionException, LicenseExpiredException { TargetsManager manager = getManagerForLocalhostDetection(); IZendTarget target = manager.detectLocalhostTarget("test", "sdk.admin", false, false); assertNotNull(target); } @Test(expected = DetectionException.class) public void testDetectLocalhostNoKey() throws WebApiException, TargetException, IOException, DetectionException, LicenseExpiredException { TargetsManager manager = getManagerForLocalhostDetection(); manager.detectLocalhostTarget("test", null, false, false); } @Test public void testCreateTarget() throws WebApiException, TargetException, LicenseExpiredException { TargetsManager manager = spy(new TargetsManager(loader)); doReturn(getTarget()).when(manager).add(any(IZendTarget.class)); assertNotNull(manager.createTarget("1", "http://localhost", "mykey", "43543")); } @Test public void testCreateTargetNoId() throws WebApiException, TargetException, LicenseExpiredException { TargetsManager manager = spy(new TargetsManager(loader)); doReturn(getTarget()).when(manager).add(any(IZendTarget.class)); assertNotNull(manager .createTarget("http://localhost", "mykey", "43543")); } @Test public void testCreateTargetFailAdd() throws TargetException, LicenseExpiredException { TargetsManager manager = spy(new TargetsManager(loader)); doReturn(null).when(manager).add(any(IZendTarget.class)); assertNull(manager.createTarget("1", "http://localhost", "mykey", "43543")); } @Test public void testCreateTargetInvalidUrl() throws TargetException, LicenseExpiredException { TargetsManager manager = spy(new TargetsManager(loader)); doReturn(null).when(manager).add(any(IZendTarget.class)); assertNull(manager.createTarget("1", "aaa11://localhost", "mykey", "43543")); } @Test public void testCreateTargetAddThrowsException() throws TargetException, LicenseExpiredException { TargetsManager manager = spy(new TargetsManager(loader)); Mockito.doThrow(new TargetException("testError")).when(manager) .add(any(IZendTarget.class)); assertNull(manager.createTarget("1", "http://localhost", "mykey", "43543")); } @Test public void testUpdateTarget() throws WebApiException, TargetException, LicenseExpiredException { TargetsManager manager = spy(new TargetsManager(loader)); manager.add(getTarget()); assertNotNull(manager.updateTarget("dev4", "http://test1test", null, "new", "00112233")); IZendTarget actual = manager.getTargetById("dev4"); assertEquals("http://test1test", actual.getHost().toString()); assertEquals("new", actual.getKey()); assertEquals("00112233", actual.getSecretKey()); } @Test public void testUpdateTarget2() throws WebApiException, TargetException, LicenseExpiredException { TargetsManager manager = spy(new TargetsManager(loader)); manager.add(getTarget()); assertNotNull(manager.updateTarget("dev4", "http://test1test", null, "new", null)); IZendTarget actual = manager.getTargetById("dev4"); assertEquals("http://test1test", actual.getHost().toString()); assertEquals("new", actual.getKey()); assertEquals("43543", actual.getSecretKey()); } @Test public void testUpdateTarget3() throws WebApiException, TargetException, LicenseExpiredException { TargetsManager manager = spy(new TargetsManager(loader)); manager.add(getTarget()); assertNotNull(manager.updateTarget("dev4", "http://test1test", null, null, null)); IZendTarget actual = manager.getTargetById("dev4"); assertEquals("http://test1test", actual.getHost().toString()); assertEquals("mykey", actual.getKey()); assertEquals("43543", actual.getSecretKey()); } @Test public void testUpdateTargetNullId() throws WebApiException, TargetException, LicenseExpiredException { TargetsManager manager = spy(new TargetsManager(loader)); manager.add(getTarget()); assertNull(manager.updateTarget(null, null, null, null, null)); } @Test public void testUpdateTargetInvalidUrl() throws WebApiException, TargetException, LicenseExpiredException { TargetsManager manager = spy(new TargetsManager(loader)); manager.add(getTarget()); assertNull(manager.updateTarget("dev4", "a111://qwerty", null, null, null)); } @Test public void testCreateUniqueId() throws TargetException, WebApiException, LicenseExpiredException { TargetsManager manager = spy(new TargetsManager(loader)); manager.add(getTarget()); assertEquals("1", manager.createUniqueId(null)); } @Test public void testCreateUniqueIdPrefix() throws TargetException, WebApiException, LicenseExpiredException { TargetsManager manager = spy(new TargetsManager(loader)); manager.add(getTarget()); assertEquals("target1", manager.createUniqueId("target")); } private IZendTarget getTarget() throws WebApiException, LicenseExpiredException { IZendTarget target = null; try { target = spy(new ZendTarget("dev4", new URL("http://localhost"), "mykey", "43543")); doReturn(true).when(target).connect(); } catch (MalformedURLException e) { // ignore } return target; } private TargetsManager getManagerForLocalhostDetection() throws IOException, DetectionException { TargetsManager manager = spy(new TargetsManager(loader)); ZendTargetAutoDetect detector = spy(new ZendTargetAutoDetect(false)); doReturn("test/config/server").when(detector) .findLocalhostInstallDirectory(); detector.init(); doReturn(detector).when(manager).getAutoDetector(); return manager; } }