package org.ovirt.engine.core.dao.network; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import java.util.List; import org.junit.Test; import org.ovirt.engine.core.common.businessentities.Cluster; import org.ovirt.engine.core.common.businessentities.network.Network; import org.ovirt.engine.core.common.businessentities.network.NetworkCluster; import org.ovirt.engine.core.common.businessentities.network.NetworkStatus; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.dao.BaseDaoTestCase; import org.ovirt.engine.core.dao.ClusterDao; public class NetworkClusterDaoTest extends BaseDaoTestCase { private static final int NETWORK_CLUSTER_COUNT = 4; private NetworkClusterDao dao; private Cluster cluster; private Network network; private NetworkCluster newNetworkCluster; private Network networkNoCluster; private NetworkCluster existingNetworkCluster; private Cluster freeCluster; @Override public void setUp() throws Exception { super.setUp(); dao = dbFacade.getNetworkClusterDao(); ClusterDao clusterDao = dbFacade.getClusterDao(); cluster = clusterDao.get(new Guid("b399944a-81ab-4ec5-8266-e19ba7c3c9d1")); freeCluster = clusterDao.get(new Guid("b399944a-81ab-4ec5-8266-e19ba7c3c9d3")); NetworkDao networkDao = dbFacade.getNetworkDao(); network = networkDao.getByName("engine"); networkNoCluster = networkDao.getByName("engine3"); createNewNetworkCluster(); existingNetworkCluster = dao.getAll().get(0); } private void createNewNetworkCluster() { newNetworkCluster = new NetworkCluster(); newNetworkCluster.setNetworkId(networkNoCluster.getId()); newNetworkCluster.setClusterId(freeCluster.getId()); newNetworkCluster.setStatus(NetworkStatus.OPERATIONAL); newNetworkCluster.setManagement(true); newNetworkCluster.setRequired(true); newNetworkCluster.setDisplay(true); newNetworkCluster.setMigration(true); } /** * Ensures that retrieving an instance works as expected. */ @Test public void testGet() { assertEquals(existingNetworkCluster, dao.get(existingNetworkCluster.getId())); } /** * Ensures that retrieving all instances works as expected. */ @Test public void testGetAll() { List<NetworkCluster> result = dao.getAll(); assertNotNull(result); assertFalse(result.isEmpty()); assertEquals(NETWORK_CLUSTER_COUNT, result.size()); } /** * Ensures that an empty collection is returned when the cluster specified doesn't have any networks. */ @Test public void testGetAllForClusterWithInvalidCluster() { List<NetworkCluster> result = dao.getAllForCluster(Guid.newGuid()); assertNotNull(result); assertTrue(result.isEmpty()); } /** * Ensures that retrieving all for a specific cluster works as expected. */ @Test public void testGetAllForCluster() { List<NetworkCluster> result = dao.getAllForCluster(cluster.getId()); assertNotNull(result); assertFalse(result.isEmpty()); for (NetworkCluster thiscluster : result) { assertEquals(cluster.getId(), thiscluster.getClusterId()); } } /** * Ensures that an empty collection is returned if the network has no clusters. */ @Test public void testGetAllForNetworkWithInvalidNetwork() { List<NetworkCluster> result = dao.getAllForNetwork(networkNoCluster.getId()); assertNotNull(result); assertTrue(result.isEmpty()); } /** * Ensures that the right set is returned for the specified network. */ @Test public void testGetAllForNetwork() { List<NetworkCluster> result = dao.getAllForNetwork(network.getId()); assertNotNull(result); assertFalse(result.isEmpty()); for (NetworkCluster cluster : result) { assertEquals(network.getId(), cluster.getNetworkId()); } } /** * Ensures that saving a cluster works as expected. */ @Test public void testSave() { List<NetworkCluster> before = dao.getAllForNetwork(networkNoCluster.getId()); // ensure that we have nothing to start assertTrue(before.isEmpty()); dao.save(newNetworkCluster); List<NetworkCluster> after = dao.getAllForNetwork(networkNoCluster.getId()); assertFalse(after.isEmpty()); assertNetworkClustersEqual(newNetworkCluster, after.get(0)); } private void assertNetworkClustersEqual(NetworkCluster expected, NetworkCluster actual) { assertEquals(expected.getClusterId(), actual.getClusterId()); assertEquals(expected.getNetworkId(), actual.getNetworkId()); assertEquals(expected.getStatus(), actual.getStatus()); assertEquals(expected.isManagement(), actual.isManagement()); assertEquals(expected.isRequired(), actual.isRequired()); assertEquals(expected.isMigration(), actual.isMigration()); assertEquals(expected.isDisplay(), actual.isDisplay()); } /** * Ensures that updating a cluster works as expected. */ @Test public void testUpdate() { existingNetworkCluster.setRequired(!existingNetworkCluster.isRequired()); existingNetworkCluster.setDisplay(!existingNetworkCluster.isDisplay()); existingNetworkCluster.setMigration(!existingNetworkCluster.isMigration()); existingNetworkCluster.setManagement(!existingNetworkCluster.isManagement()); existingNetworkCluster.setStatus(invert(existingNetworkCluster.getStatus())); dao.update(existingNetworkCluster); NetworkCluster result = dao.get(existingNetworkCluster.getId()); assertNetworkClustersEqual(existingNetworkCluster, result); } private NetworkStatus invert(NetworkStatus networkStatus) { return networkStatus == NetworkStatus.OPERATIONAL ? NetworkStatus.NON_OPERATIONAL : NetworkStatus.OPERATIONAL; } /** * Ensures that updating a cluster status works as expected. */ @Test public void testUpdateStatus() { existingNetworkCluster.setStatus(NetworkStatus.NON_OPERATIONAL); dao.updateStatus(existingNetworkCluster); List<NetworkCluster> result = dao.getAll(); assertTrue(result.stream().anyMatch(t -> t.getClusterId().equals(existingNetworkCluster.getClusterId()) && t.getNetworkId().equals(existingNetworkCluster.getNetworkId()) && t.getStatus() == existingNetworkCluster.getStatus())); } /** * Ensures that removing a network cluster works. */ @Test public void testRemove() { int before = dao.getAll().size(); dao.remove(existingNetworkCluster.getClusterId(), existingNetworkCluster.getNetworkId()); int after = dao.getAll().size(); assertEquals(before - 1, after); } @Test public void testSetDisplay() { dao.setNetworkExclusivelyAsDisplay(existingNetworkCluster.getClusterId(), existingNetworkCluster.getNetworkId()); List<NetworkCluster> allForCluster = dao.getAllForCluster(existingNetworkCluster.getClusterId()); for (NetworkCluster net : allForCluster) { if (net.getClusterId().equals(existingNetworkCluster.getClusterId()) && net.getNetworkId().equals(existingNetworkCluster.getNetworkId())) { assertTrue(net.isDisplay()); } else { assertFalse(net.isDisplay()); } } } @Test public void testSetMigration() { dao.setNetworkExclusivelyAsMigration(existingNetworkCluster.getClusterId(), existingNetworkCluster.getNetworkId()); List<NetworkCluster> allForCluster = dao.getAllForCluster(existingNetworkCluster.getClusterId()); for (NetworkCluster net : allForCluster) { if (net.getId().equals(existingNetworkCluster.getId())) { assertTrue(net.isMigration()); } else { assertFalse(net.isMigration()); } } } @Test public void testSetManagement() { dao.setNetworkExclusivelyAsManagement(existingNetworkCluster.getClusterId(), existingNetworkCluster.getNetworkId()); List<NetworkCluster> allForCluster = dao.getAllForCluster(existingNetworkCluster.getClusterId()); for (NetworkCluster net : allForCluster) { if (net.getId().equals(existingNetworkCluster.getId())) { assertTrue(net.isManagement()); } else { assertFalse(net.isManagement()); } } } @Test public void testSetGluster() { dao.setNetworkExclusivelyAsGluster(existingNetworkCluster.getClusterId(), existingNetworkCluster.getNetworkId()); List<NetworkCluster> allForCluster = dao.getAllForCluster(existingNetworkCluster.getClusterId()); for (NetworkCluster net : allForCluster) { if (net.getId().equals(existingNetworkCluster.getId())) { assertTrue(net.isGluster()); } else { assertFalse(net.isGluster()); } } } @Test public void testSetGlusterAsNull() { dao.setNetworkExclusivelyAsGluster(existingNetworkCluster.getClusterId(), null); List<NetworkCluster> allForCluster = dao.getAllForCluster(existingNetworkCluster.getClusterId()); for (NetworkCluster net : allForCluster) { assertFalse(net.isGluster()); } } }