package com.sequenceiq.cloudbreak.service.cluster.flow.status; import org.junit.Before; import org.junit.Test; import org.mockito.BDDMockito; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import com.sequenceiq.ambari.client.AmbariClient; import com.sequenceiq.cloudbreak.api.model.DetailedStackStatus; import com.sequenceiq.cloudbreak.api.model.Status; import com.sequenceiq.cloudbreak.client.HttpClientConfig; import com.sequenceiq.cloudbreak.core.CloudbreakSecuritySetupException; import com.sequenceiq.cloudbreak.domain.Blueprint; import com.sequenceiq.cloudbreak.domain.Cluster; import com.sequenceiq.cloudbreak.domain.Stack; import com.sequenceiq.cloudbreak.domain.StackStatus; import com.sequenceiq.cloudbreak.service.TlsSecurityService; import com.sequenceiq.cloudbreak.service.cluster.AmbariClientProvider; import com.sequenceiq.cloudbreak.service.cluster.ClusterService; import com.sequenceiq.cloudbreak.service.events.CloudbreakEventService; import com.sequenceiq.cloudbreak.service.messages.CloudbreakMessagesService; public class AmbariClusterStatusUpdaterTest { private static final Long TEST_STACK_ID = 0L; private static final Long TEST_CLUSTER_ID = 0L; private static final String TEST_BLUEPRINT = "blueprint"; private static final String TEST_REASON = "Reason"; @InjectMocks private AmbariClusterStatusUpdater underTest; @Mock private ClusterService clusterService; @Mock private AmbariClientProvider ambariClientProvider; @Mock private CloudbreakEventService cloudbreakEventService; @Mock private AmbariClusterStatusFactory clusterStatusFactory; @Mock private TlsSecurityService tlsSecurityService; @Mock private AmbariClient ambariClient; @Mock private CloudbreakMessagesService cloudbreakMessagesService; @Before public void setUp() { underTest = new AmbariClusterStatusUpdater(); MockitoAnnotations.initMocks(this); } @Test public void testUpdateClusterStatusShouldUpdateStackStatusWhenStackStatusChanged() throws CloudbreakSecuritySetupException { // GIVEN Stack stack = createStack(Status.AVAILABLE, Status.AVAILABLE); BDDMockito.given(ambariClientProvider.getAmbariClient(BDDMockito.any(HttpClientConfig.class), BDDMockito.anyInt(), BDDMockito.any(Cluster.class))) .willReturn(ambariClient); BDDMockito.given(clusterStatusFactory.createClusterStatus(ambariClient, TEST_BLUEPRINT)).willReturn(ClusterStatus.INSTALLED); // WHEN underTest.updateClusterStatus(stack, stack.getCluster()); // THEN BDDMockito.verify(clusterService, BDDMockito.times(1)).updateClusterStatusByStackId(stack.getId(), Status.STOPPED); } @Test public void testUpdateClusterStatusShouldOnlyNotifyWhenStackStatusNotChanged() throws CloudbreakSecuritySetupException { // GIVEN Stack stack = createStack(Status.AVAILABLE, Status.AVAILABLE); BDDMockito.given(ambariClientProvider.getAmbariClient(BDDMockito.any(HttpClientConfig.class), BDDMockito.anyInt(), BDDMockito.any(Cluster.class))) .willReturn(ambariClient); BDDMockito.given(clusterStatusFactory.createClusterStatus(ambariClient, TEST_BLUEPRINT)).willReturn(ClusterStatus.STARTED); // WHEN underTest.updateClusterStatus(stack, stack.getCluster()); // THEN BDDMockito.verify(clusterService, BDDMockito.times(0)).updateClusterStatusByStackId(BDDMockito.any(Long.class), BDDMockito.any(Status.class)); } private Stack createStack(Status stackStatus) { Stack stack = new Stack(); stack.setId(TEST_STACK_ID); stack.setStackStatus(new StackStatus(stack, stackStatus, "", DetailedStackStatus.UNKNOWN)); return stack; } private Stack createStack(Status stackStatus, Status clusterStatus) { Stack stack = createStack(stackStatus); Cluster cluster = new Cluster(); cluster.setAmbariIp("10.0.0.1"); cluster.setId(TEST_CLUSTER_ID); cluster.setStatus(clusterStatus); Blueprint blueprint = new Blueprint(); blueprint.setBlueprintName(TEST_BLUEPRINT); cluster.setBlueprint(blueprint); stack.setCluster(cluster); return stack; } }