@Test public void testNotificationsWhenUndeployingScopedInstances_changeInstanceState() throws Exception { // Prepare stuff final TestApplication app = new TestApplication(); final Map<Instance, List<InstanceStatus>> instanceToStatusHistory = new HashMap<>(); INotificationMngr notificationMngr = new NotificationMngrImpl() { @Override public void instance(Instance instance, Application application, EventType eventType) { Assert.assertEquals(EventType.CHANGED, eventType); Assert.assertEquals(app, application); List<InstanceStatus> status = instanceToStatusHistory.get(instance); if (status == null) { status = new ArrayList<>(); instanceToStatusHistory.put(instance, status); } status.add(instance.getStatus()); } }; ITargetsMngr targetsMngr = Mockito.mock(ITargetsMngr.class); IRandomMngr randomMngr = Mockito.mock(IRandomMngr.class); ITargetConfigurator targetConfigurator = Mockito.mock(ITargetConfigurator.class); IMessagingMngr messagingMngr = Mockito.mock(IMessagingMngr.class); Mockito.when(messagingMngr.getMessagingClient()).thenReturn(Mockito.mock(IDmClient.class)); IConfigurationMngr configurationMngr = new ConfigurationMngrImpl(); configurationMngr.setWorkingDirectory(this.folder.newFolder()); IInstancesMngr mngr = new InstancesMngrImpl( messagingMngr, notificationMngr, targetsMngr, randomMngr, targetConfigurator); ((InstancesMngrImpl) mngr).setTargetHandlerResolver(new TestTargetResolver()); // Make one of our VM being fully deployed ManagedApplication ma = new ManagedApplication(app); app.getTomcatVm().setStatus(InstanceStatus.DEPLOYED_STARTED); app.getTomcat().setStatus(InstanceStatus.DEPLOYED_STARTED); app.getWar().setStatus(InstanceStatus.DEPLOYED_STARTED); // One scoped instance has a machine ID (considered as running somewhere) app.getTomcatVm().data.put(Instance.MACHINE_ID, "machine-id"); // Stop everything mngr.changeInstanceState(ma, app.getTomcatVm(), InstanceStatus.NOT_DEPLOYED); // Check notifications Assert.assertEquals(3, instanceToStatusHistory.size()); List<InstanceStatus> statusHistory = instanceToStatusHistory.get(app.getTomcatVm()); Assert.assertNotNull(statusHistory); Assert.assertEquals( Arrays.asList(InstanceStatus.UNDEPLOYING, InstanceStatus.NOT_DEPLOYED), statusHistory); statusHistory = instanceToStatusHistory.get(app.getTomcat()); Assert.assertNotNull(statusHistory); Assert.assertEquals(Arrays.asList(InstanceStatus.NOT_DEPLOYED), statusHistory); statusHistory = instanceToStatusHistory.get(app.getWar()); Assert.assertNotNull(statusHistory); Assert.assertEquals(Arrays.asList(InstanceStatus.NOT_DEPLOYED), statusHistory); Mockito.verify(targetConfigurator, Mockito.only()) .cancelCandidate(Mockito.any(TargetHandlerParameters.class), Mockito.eq(app.getTomcatVm())); }