package org.ovirt.engine.core.bll.network.cluster.helper; import static org.junit.Assert.assertEquals; import static org.mockito.ArgumentMatchers.same; import static org.mockito.Mockito.atLeastOnce; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyZeroInteractions; import static org.mockito.Mockito.when; import java.util.Collections; import java.util.List; import org.junit.Before; import org.junit.ClassRule; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; import org.mockito.Captor; import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; import org.ovirt.engine.core.common.AuditLogType; import org.ovirt.engine.core.common.businessentities.Cluster; import org.ovirt.engine.core.common.businessentities.VM; import org.ovirt.engine.core.common.businessentities.network.NetworkCluster; import org.ovirt.engine.core.common.businessentities.network.NetworkClusterId; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogDirector; import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogableBase; import org.ovirt.engine.core.dao.ClusterDao; import org.ovirt.engine.core.dao.VmDao; import org.ovirt.engine.core.dao.network.NetworkClusterDao; import org.ovirt.engine.core.di.InjectorRule; @RunWith(MockitoJUnitRunner.class) public class DisplayNetworkClusterHelperTest { private static final String TEST_NETWORK_NAME = "test network"; private static final String TEST_CLUSTER_NAME = "cluster name"; private static final Guid TEST_NETWORK_ID = new Guid("1-2-3-4-5"); private static final Guid TEST_CLUSTER_ID = new Guid("a-b-c-d-e"); private static final NetworkClusterId TEST_NETWORK_CLUSTER_ID = new NetworkClusterId( TEST_CLUSTER_ID, TEST_NETWORK_ID); @ClassRule public static InjectorRule injectorRule = new InjectorRule(); @Mock private NetworkClusterDao mockNetworkClusterDao; @Mock private VmDao mockVmDao; @Mock private ClusterDao mockClusterDao; @Mock private NetworkCluster mockNetworkCluster; @Mock private NetworkCluster mockNetworkClusterBeforeUpdate; @Mock private VM mockVm; @Mock private AuditLogDirector mockAuditLogDirector; @Captor private ArgumentCaptor<AuditLogableBase> auditLogableBaseCaptor; private DisplayNetworkClusterHelper underTest; @Before public void setUp() { underTest = new DisplayNetworkClusterHelper( mockNetworkClusterDao, mockVmDao, mockClusterDao, mockNetworkCluster, TEST_NETWORK_NAME, mockAuditLogDirector); when(mockNetworkCluster.getId()).thenReturn(TEST_NETWORK_CLUSTER_ID); when(mockNetworkClusterDao.get(TEST_NETWORK_CLUSTER_ID)).thenReturn(mockNetworkClusterBeforeUpdate); when(mockClusterDao.get(TEST_CLUSTER_ID)).thenReturn(createCluster(TEST_CLUSTER_NAME)); } private Cluster createCluster(String clusterName) { final Cluster cluster = new Cluster(); cluster.setName(clusterName); return cluster; } /** * Test method for * {@link org.ovirt.engine.core.bll.network.cluster.helper.DisplayNetworkClusterHelper#isDisplayToBeUpdated()}. */ @Test public void testIsDisplayToBeUpdatedPositive1() { testIsDisplayToBeUpdatedInner(true, false, true); } /** * Test method for * {@link org.ovirt.engine.core.bll.network.cluster.helper.DisplayNetworkClusterHelper#isDisplayToBeUpdated()}. */ @Test public void testIsDisplayToBeUpdatedPositive2() { testIsDisplayToBeUpdatedInner(false, true, true); } /** * Test method for * {@link org.ovirt.engine.core.bll.network.cluster.helper.DisplayNetworkClusterHelper#isDisplayToBeUpdated()}. */ @Test public void testIsDisplayToBeUpdatedNegative1() { testIsDisplayToBeUpdatedInner(true, true, false); } /** * Test method for * {@link org.ovirt.engine.core.bll.network.cluster.helper.DisplayNetworkClusterHelper#isDisplayToBeUpdated()}. */ @Test public void testIsDisplayToBeUpdatedNegative2() { testIsDisplayToBeUpdatedInner(false, false, false); } private void testIsDisplayToBeUpdatedInner(boolean displayNetworkToBeSet, boolean displayNetworkBeforeUpdate, boolean expectedResult) { when(mockNetworkCluster.isDisplay()).thenReturn(displayNetworkToBeSet); when(mockNetworkClusterBeforeUpdate.isDisplay()).thenReturn(displayNetworkBeforeUpdate); final boolean actual = underTest.isDisplayToBeUpdated(); verify(mockNetworkCluster).getId(); verify(mockNetworkClusterDao).get(TEST_NETWORK_CLUSTER_ID); verify(mockNetworkCluster).isDisplay(); verify(mockNetworkClusterBeforeUpdate).isDisplay(); assertEquals(expectedResult, actual); } /** * Test method for * {@link org.ovirt.engine.core.bll.network.cluster.helper.DisplayNetworkClusterHelper#warnOnActiveVm()}. */ @Test public void testWarnOnActiveVmPositive() { testWarnOnActiveVmInner(true); verify(mockAuditLogDirector).log(auditLogableBaseCaptor.capture(), same(AuditLogType.NETWORK_UPDATE_DISPLAY_FOR_CLUSTER_WITH_ACTIVE_VM)); final AuditLogableBase actualLoggable = auditLogableBaseCaptor.getValue(); assertEquals(TEST_CLUSTER_NAME, actualLoggable.getClusterName()); assertEquals(TEST_NETWORK_NAME, actualLoggable.getCustomValue("networkname")); } @Test public void testWarnOnActiveVmNegative() { testWarnOnActiveVmInner(false); verifyZeroInteractions(mockAuditLogDirector); } private void testWarnOnActiveVmInner(boolean activeVm) { final List<VM> clusterVms = Collections.singletonList(mockVm); when(mockNetworkCluster.getClusterId()).thenReturn(TEST_CLUSTER_ID); when(mockVmDao.getAllForCluster(TEST_CLUSTER_ID)).thenReturn(clusterVms); when(mockVm.isRunning()).thenReturn(activeVm); underTest.warnOnActiveVm(); verify(mockNetworkCluster, atLeastOnce()).getClusterId(); verify(mockVmDao).getAllForCluster(TEST_CLUSTER_ID); verify(mockVm).isRunning(); } }