Mercurial > hg > release > thermostat-0.15
changeset 1117:4cdafa27ac9a
PR1442: Error stopping bundle. (java.lang.IllegalStateException: Service already unregistered.)
Reviewed-by: neugens, jerboaa
Review-thread: http://icedtea.classpath.org/pipermail/thermostat/2013-May/006813.html
author | Andriy Petrus <apetrus@redhat.com> |
---|---|
date | Tue, 28 May 2013 11:23:34 -0400 |
parents | 6d696f9181d6 |
children | d329d22447f4 |
files | storage/core/src/main/java/com/redhat/thermostat/storage/internal/Activator.java storage/core/src/test/java/com/redhat/thermostat/storage/internal/ActivatorTest.java |
diffstat | 2 files changed, 60 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/storage/core/src/main/java/com/redhat/thermostat/storage/internal/Activator.java Tue May 21 11:33:34 2013 +0200 +++ b/storage/core/src/main/java/com/redhat/thermostat/storage/internal/Activator.java Tue May 28 11:23:34 2013 -0400 @@ -96,6 +96,7 @@ for (ServiceRegistration reg : regs) { reg.unregister(); } + regs.clear(); super.removedService(reference, service); } };
--- a/storage/core/src/test/java/com/redhat/thermostat/storage/internal/ActivatorTest.java Tue May 21 11:33:34 2013 +0200 +++ b/storage/core/src/test/java/com/redhat/thermostat/storage/internal/ActivatorTest.java Tue May 28 11:23:34 2013 -0400 @@ -37,6 +37,7 @@ package com.redhat.thermostat.storage.internal; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotSame; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.mock; @@ -95,5 +96,63 @@ assertEquals(1, context.getAllServices().size()); } + @Test + public void verifyActivatorUnregistersServices() throws Exception { + StubBundleContext context = new StubBundleContext(); + Storage storage = mock(Storage.class); + + context.registerService(Storage.class, storage, null); + + Activator activator = new Activator(); + + activator.start(context); + + activator.stop(context); + + assertFalse(context.isServiceRegistered(HostInfoDAO.class.getName(), HostInfoDAOImpl.class)); + assertFalse(context.isServiceRegistered(NetworkInterfaceInfoDAO.class.getName(), NetworkInterfaceInfoDAOImpl.class)); + assertFalse(context.isServiceRegistered(VmInfoDAO.class.getName(), VmInfoDAOImpl.class)); + assertFalse(context.isServiceRegistered(AgentInfoDAO.class.getName(), AgentInfoDAOImpl.class)); + assertFalse(context.isServiceRegistered(BackendInfoDAO.class.getName(), BackendInfoDAOImpl.class)); + + assertEquals(0, context.getServiceListeners().size()); + assertEquals(1, context.getAllServices().size()); + } + + @Test + public void verifyActivatorRegistersServicesMultipleTimes() throws Exception { + StubBundleContext context = new StubBundleContext(); + Storage storage = mock(Storage.class); + + context.registerService(Storage.class, storage, null); + + Activator activator = new Activator(); + + activator.start(context); + + assertTrue(context.isServiceRegistered(HostInfoDAO.class.getName(), HostInfoDAOImpl.class)); + assertTrue(context.isServiceRegistered(NetworkInterfaceInfoDAO.class.getName(), NetworkInterfaceInfoDAOImpl.class)); + assertTrue(context.isServiceRegistered(VmInfoDAO.class.getName(), VmInfoDAOImpl.class)); + assertTrue(context.isServiceRegistered(AgentInfoDAO.class.getName(), AgentInfoDAOImpl.class)); + assertTrue(context.isServiceRegistered(BackendInfoDAO.class.getName(), BackendInfoDAOImpl.class)); + + activator.stop(context); + + assertEquals(0, context.getServiceListeners().size()); + assertEquals(1, context.getAllServices().size()); + + activator.start(context); + + assertTrue(context.isServiceRegistered(HostInfoDAO.class.getName(), HostInfoDAOImpl.class)); + assertTrue(context.isServiceRegistered(NetworkInterfaceInfoDAO.class.getName(), NetworkInterfaceInfoDAOImpl.class)); + assertTrue(context.isServiceRegistered(VmInfoDAO.class.getName(), VmInfoDAOImpl.class)); + assertTrue(context.isServiceRegistered(AgentInfoDAO.class.getName(), AgentInfoDAOImpl.class)); + assertTrue(context.isServiceRegistered(BackendInfoDAO.class.getName(), BackendInfoDAOImpl.class)); + + activator.stop(context); + + assertEquals(0, context.getServiceListeners().size()); + assertEquals(1, context.getAllServices().size()); + } }