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.assertNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.util.List; import java.util.Set; import org.junit.Test; import org.ovirt.engine.core.common.businessentities.network.Network; import org.ovirt.engine.core.common.businessentities.network.NetworkCluster; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.dao.BaseDaoTestCase; import org.ovirt.engine.core.dao.FixturesTool; public class NetworkDaoTest extends BaseDaoTestCase { private static final Guid MANAGEMENT_NETWORK_ID = new Guid("58d5c1c6-cb15-4832-b2a4-1234567890ab"); private NetworkDao dao; private Guid cluster; private Guid datacenter; private Network new_net; private static final String EXISTING_NETWORK_NAME1 = "engine"; private static final String EXISTING_NETWORK_NAME2 = "engine3"; private static final int NUM_OF_NETWORKS = 7; private static final int NUM_OF_MANAGEMENT_NETWORKS = 1; private static final String NETWORK_LABEL = "lbl1"; @Override public void setUp() throws Exception { super.setUp(); dao = dbFacade.getNetworkDao(); cluster = new Guid("b399944a-81ab-4ec5-8266-e19ba7c3c9d1"); datacenter = new Guid("6d849ebf-755f-4552-ad09-9a090cda105d"); new_net = new Network(); new_net.setName("newnet1"); new_net.setDescription("New network"); new_net.setDataCenterId(datacenter); } /** * Ensures that a null network is returned. */ @Test public void testGetByNameWithInvalidName() { Network result = dao.getByName("farkle"); assertNull(result); } /** * Ensures that retrieving a network by name works as expected. */ @Test public void testGetByName() { Network result = dao.getByName(EXISTING_NETWORK_NAME1); assertNotNull(result); assertEquals(EXISTING_NETWORK_NAME1, result.getName()); } /** * Ensures that retrieving a network by name and data center works as expected. */ @Test public void testGetByNameAndDataCenter() { Network result = dao.getByNameAndDataCenter(EXISTING_NETWORK_NAME1, datacenter); assertNotNull(result); assertEquals(EXISTING_NETWORK_NAME1, result.getName()); } /** * Ensures that retrieving a network by name and cluster works as expected. */ @Test public void testGetByNameAndCluster() { Network result = dao.getByNameAndCluster(EXISTING_NETWORK_NAME1, cluster); assertNotNull(result); assertEquals(EXISTING_NETWORK_NAME1, result.getName()); } /** * Ensures that retrieving the management network by cluster works as expected. */ @Test public void testGetManagementNetworkByCluster() { Network result = dao.getManagementNetwork(cluster); assertNotNull(result); assertEquals(MANAGEMENT_NETWORK_ID, result.getId()); } /** * Ensures that all management networks are returned. */ @Test public void testGetManagementNetworks() { List<Network> result = dao.getManagementNetworks(datacenter); assertEquals(NUM_OF_MANAGEMENT_NETWORKS, result.size()); } /** * Ensures that all networks are returned. */ @Test public void testGetAll() { List<Network> result = dao.getAll(); assertNotNull(result); assertEquals(NUM_OF_NETWORKS, result.size()); } /** * Ensures that all networks are returned for a specific user when filter is on. */ @Test public void testFilteredGetAll() { List<Network> result = dao.getAll(PRIVILEGED_USER_ID, true); assertNotNull(result); assertFalse(result.isEmpty()); } /** * Ensures that no networks is returned for a specific user when filter is on. */ @Test public void testFilteredGetAllWithNoPermissions() { List<Network> result = dao.getAll(UNPRIVILEGED_USER_ID, true); assertNotNull(result); assertTrue(result.isEmpty()); } /** * Ensures that all networks are returned for a unprivileged user when filter is off. */ @Test public void testUnfilteredGetAllWithNoPermissions() { List<Network> result = dao.getAll(UNPRIVILEGED_USER_ID, false); assertNotNull(result); assertFalse(result.isEmpty()); } /** * Ensures that an empty collection is returned when the specified cluster has no networks. */ @Test public void testGetAllForClusterWithInvalidCluster() { List<Network> result = dao.getAllForCluster(Guid.newGuid()); assertNotNull(result); assertTrue(result.isEmpty()); } /** * Ensures the right set of networks are returned for the given cluster. */ @Test public void testGetAllForCluster() { List<Network> result = dao.getAllForCluster(cluster); assertGetAllForClusterResult(result); } /** * Ensures the right set of networks are returned for the given cluster, * with a privileged user */ @Test public void testGetAllForClusterFilteredWithPermissions() { // A use with permissions List<Network> result = dao.getAllForCluster(cluster, PRIVILEGED_USER_ID, true); assertGetAllForClusterResult(result); } /** * Ensures the right set of networks are returned for the given cluster, * with a unprivileged user and with filtering enabled */ @Test public void testGetAllForClusterFilteredWithPermissionsNoPermissions() { // A use with permissions List<Network> result = dao.getAllForCluster(cluster, UNPRIVILEGED_USER_ID, true); assertNotNull(result); assertTrue(result.isEmpty()); } /** * Ensures the right set of networks are returned for the given cluster, * with a unprivileged user, but with no filtering */ @Test public void testGetAllForClusterFilteredWithPermissionsNoPermissionsAndNoFilter() { // A use with permissions List<Network> result = dao.getAllForCluster(cluster, UNPRIVILEGED_USER_ID, false); assertGetAllForClusterResult(result); } /** * Asserts the result of {@link NetworkDao#getAllForCluster(Guid)} contains all the required networks */ private static void assertGetAllForClusterResult(List<Network> result) { assertNotNull(result); assertFalse(result.isEmpty()); assertIsSorted(result); } private static void assertIsSorted(List<Network> result) { Network previous = null; for (Network network : result) { if (previous != null && network.getName().compareTo(previous.getName()) < 0) { fail(String.format("List of networks is not ordered by network name, %s came before %s.", previous.getName(), network.getName())); } previous = network; } } /** * Ensures that an empty collection is returned when the data center has no networks. */ @Test public void testGetAllForDataCenterWithInvalidDataCenter() { List<Network> result = dao.getAllForDataCenter(Guid.newGuid()); assertNotNull(result); assertTrue(result.isEmpty()); } /** * Ensures that the right set of networks are returned for the given data center. */ @Test public void testGetAllForDataCenter() { List<Network> result = dao.getAllForDataCenter(datacenter); verifyDataCenterNetworks(result); } /** * Ensures that the right set of networks are returned for the given data center for a specific user according to * the filter. */ @Test public void testFilteredGetAllForDataCenter() { List<Network> result = dao.getAllForDataCenter(datacenter, PRIVILEGED_USER_ID, true); verifyDataCenterNetworks(result); } /** * Ensures that the no network is returned for the given data center for a user with no permissions on network * entities */ @Test public void testFilteredGetAllForDataCenterWithNoPermissions() { List<Network> result = dao.getAllForDataCenter(datacenter, UNPRIVILEGED_USER_ID, true); assertNotNull(result); assertTrue(result.isEmpty()); } /** * Ensures that the all networks are returned for the given data center for a specific user when the filter is off. */ @Test public void testUnFilteredGetAllForDataCenterWithNoPermissions() { List<Network> result = dao.getAllForDataCenter(datacenter, PRIVILEGED_USER_ID, false); verifyDataCenterNetworks(result); } private void verifyDataCenterNetworks(List<Network> result) { assertNotNull(result); assertFalse(result.isEmpty()); for (Network net : result) { assertEquals(datacenter, net.getDataCenterId()); } } /** * Ensures that the correct networks are returned for a given QoS ID. */ @Test public void testGetAllForValidQos() { List<Network> result = dao.getAllForQos(FixturesTool.HOST_NETWORK_QOS_A); assertNotNull(result); assertEquals(1, result.size()); assertEquals(FixturesTool.NETWORK_ENGINE, result.get(0).getId()); } /** * Ensures that an empty collection is returned for a QoS that no network is using. */ @Test public void testGetAllForUnusedQos() { List<Network> result = dao.getAllForQos(FixturesTool.HOST_NETWORK_QOS_B); assertNotNull(result); assertTrue(result.isEmpty()); } /** * Ensures the right set of networks are returned for the given provider. */ @Test public void testGetAllForProvider() { List<Network> result = dao.getAllForProvider(FixturesTool.PROVIDER_ID); assertNotNull(result); assertFalse(result.isEmpty()); for (Network network : result) { assertEquals(FixturesTool.PROVIDER_ID, network.getProvidedBy().getProviderId()); } } /** * Ensures a list of networks labels is returned for a given data-center */ @Test public void testGetAllNetworkLabelsForDataCenter() { Set<String> result = dao.getAllNetworkLabelsForDataCenter(datacenter); assertNotNull(result); assertFalse(result.isEmpty()); } /** * Ensures a list of networks is returned for a given cluster by a specific label */ @Test public void getAllByLabelForCluster() { List<Network> result = dao.getAllByLabelForCluster(NETWORK_LABEL, cluster); assertNotNull(result); assertFalse(result.isEmpty()); for (Network network : result) { assertEquals(NETWORK_LABEL, network.getLabel()); } } /** * Ensures that saving a network works as expected. */ @Test public void testSave() { List<NetworkCluster> clustersFromDB = dbFacade.getNetworkClusterDao().getAllForCluster(cluster); NetworkCluster clusterFromDB = clustersFromDB.get(0); assertNotNull(clusterFromDB); new_net.setCluster(clusterFromDB); new_net.setId(Guid.newGuid()); dao.save(new_net); Network result = dao.getByName(new_net.getName()); assertNotNull(result); assertEquals(new_net, result); } /** * Ensures updating a network works as expected. */ @Test public void testUpdate() { Network before = dao.getByName(EXISTING_NETWORK_NAME1); before.setDescription("This is a completely changed description"); dao.update(before); Network after = dao.getByName(EXISTING_NETWORK_NAME1); assertNotNull(after); assertEquals(before, after); } /** * Ensures that removing a network works as expected. */ @Test public void testRemove() { Network result = dao.getByName(EXISTING_NETWORK_NAME2); assertNotNull(result); dao.remove(result.getId()); result = dao.getByName(EXISTING_NETWORK_NAME2); assertNull(result); } }