package org.opennaas.extensions.quantum.controller; import junit.framework.Assert; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.junit.Test; import org.opennaas.extensions.bod.capability.l2bod.BoDLink; import org.opennaas.extensions.quantum.QuantumException; import org.opennaas.extensions.quantum.model.AutobahnElement; import org.opennaas.extensions.quantum.model.Network; import org.opennaas.extensions.quantum.model.NetworkModel; import org.opennaas.extensions.quantum.model.QuantumModel; import org.opennaas.extensions.quantum.model.QuantumModelController; import org.opennaas.extensions.quantum.model.Resource; import org.opennaas.extensions.quantum.network.builder.NetworkBuilderHelper; /** * * @author Adrian Rosello (i2CAT) * */ public class ControllerTest { private static final Log log = LogFactory.getLog(ControllerTest.class); private static final String NET01_ID = "abcd-1234-abcd-1234"; private static final String NET01_NAME = "net01"; private static final String NET02_ID = "efgh-5678-efgh-5678"; private static final String NET02_NAME = "net02"; private static final String TENANT01_ID = "tenant01"; private static final String TENANT02_ID = "tenant02"; private static final String AUTOBAHN_RESOURCE_ID = "autobahn01"; private static final String IFACE1_NAME = "interface1"; private static final String IFACE2_NAME = "interface2"; private static final String IFACE3_NAME = "interface3"; private static final String IFACE4_NAME = "interface4"; private int LINK_CAPACITY = 100; private int VLAN_ID_25 = 25; private int VLAN_ID_26 = 26; private QuantumModel quantumModel; private QuantumModelController controller; private NetworkModel model1; private NetworkModel model2; @Test public void addAndRemoveNetworksTest() throws QuantumException { quantumModel = new QuantumModel(); controller = new QuantumModelController(); model1 = new NetworkModel(); model1.setQuantumNetworkId(NET01_ID); model2 = new NetworkModel(); model2.setQuantumNetworkId(NET02_ID); Assert.assertTrue("Quantum model should not have any network.", quantumModel.getNetworks().isEmpty()); Network network1 = NetworkBuilderHelper.createSampleNetwork(NET01_ID, NET01_NAME, TENANT01_ID); Network network2 = NetworkBuilderHelper.createSampleNetwork(NET02_ID, NET02_NAME, TENANT01_ID); controller.addNetwork(quantumModel, network1); Assert.assertTrue("Quantum model should contain network1", quantumModel.getNetworks().contains(network1)); Assert.assertFalse("Quantum model should not contain network2", quantumModel.getNetworks().contains(network2)); Assert.assertEquals("Quantum model should only contain one network.", 1, quantumModel.getNetworks().size()); controller.addNetwork(quantumModel, network2); Assert.assertTrue("Quantum model should contain network1", quantumModel.getNetworks().contains(network1)); Assert.assertTrue("Quantum model should contain network2", quantumModel.getNetworks().contains(network2)); Assert.assertEquals("Quantum model should contain two networks.", 2, quantumModel.getNetworks().size()); controller.removeNetwork(quantumModel, model1); Assert.assertFalse("Quantum model should not contain network1", quantumModel.getNetworks().contains(network1)); Assert.assertTrue("Quantum model should contain network2", quantumModel.getNetworks().contains(network2)); Assert.assertEquals("Quantum model should only contain one network.", 1, quantumModel.getNetworks().size()); controller.removeNetwork(quantumModel, model2); Assert.assertFalse("Quantum model should not contain network1", quantumModel.getNetworks().contains(network1)); Assert.assertFalse("Quantum model should not contain network2", quantumModel.getNetworks().contains(network2)); Assert.assertTrue("Quantum model should not have any network.", quantumModel.getNetworks().isEmpty()); } @Test public void updateNetworkTest() throws QuantumException { quantumModel = new QuantumModel(); controller = new QuantumModelController(); model1 = new NetworkModel(); model1.setQuantumNetworkId(NET01_ID); model2 = new NetworkModel(); model2.setQuantumNetworkId(NET02_ID); Assert.assertTrue("Quantum model should not have any network.", quantumModel.getNetworks().isEmpty()); Network network1 = NetworkBuilderHelper.createSampleNetwork(NET01_ID, NET01_NAME, TENANT01_ID); Network network2 = NetworkBuilderHelper.createSampleNetwork(NET02_ID, NET02_NAME, TENANT01_ID); Network network1Updated = NetworkBuilderHelper.createSampleNetwork(NET01_ID, NET02_NAME, TENANT02_ID); controller.addNetwork(quantumModel, network1); Assert.assertTrue("Quantum model should contain network1", quantumModel.getNetworks().contains(network1)); Assert.assertFalse("Quantum model should not contain network2", quantumModel.getNetworks().contains(network2)); Assert.assertEquals("Quantum model should only contain one network.", 1, quantumModel.getNetworks().size()); controller.addNetwork(quantumModel, network2); Assert.assertTrue("Quantum model should contain network1", quantumModel.getNetworks().contains(network1)); Assert.assertTrue("Quantum model should contain network2", quantumModel.getNetworks().contains(network2)); Assert.assertEquals("Quantum model should contain two networks.", 2, quantumModel.getNetworks().size()); controller.updateNetwork(network1.getId(), quantumModel, network1Updated); Assert.assertFalse("Quantum model should not contain network1", quantumModel.getNetworks().contains(network1)); Assert.assertTrue("Quantum model should contain network2", quantumModel.getNetworks().contains(network2)); Assert.assertTrue("Quantum model should contain network1 updated", quantumModel.getNetworks().contains(network1Updated)); Assert.assertEquals("Quantum model should contain two networks.", 2, quantumModel.getNetworks().size()); controller.removeNetwork(quantumModel, model1); controller.removeNetwork(quantumModel, model2); Assert.assertFalse("Quantum model should not contain network1", quantumModel.getNetworks().contains(network1)); Assert.assertFalse("Quantum model should not contain network2", quantumModel.getNetworks().contains(network2)); Assert.assertFalse("Quantum model should contain network1 updated", quantumModel.getNetworks().contains(network1Updated)); Assert.assertTrue("Quantum model should not have any network.", quantumModel.getNetworks().isEmpty()); } @Test(expected = QuantumException.class) public void addSameNetworkTwiceTest() throws QuantumException { quantumModel = new QuantumModel(); controller = new QuantumModelController(); Assert.assertTrue("Quantum model should not have any network.", quantumModel.getNetworks().isEmpty()); Network network1 = NetworkBuilderHelper.createSampleNetwork(NET01_ID, NET01_NAME, TENANT01_ID); controller.addNetwork(quantumModel, network1); Assert.assertTrue("Quantum model should contain network1", quantumModel.getNetworks().contains(network1)); Assert.assertEquals("Quantum model should only contain one network.", 1, quantumModel.getNetworks().size()); controller.addNetwork(quantumModel, network1); } @Test(expected = QuantumException.class) public void removeUnexistingNetworkTest() throws QuantumException { quantumModel = new QuantumModel(); controller = new QuantumModelController(); model1 = new NetworkModel(); model1.setQuantumNetworkId(NET01_ID); model2 = new NetworkModel(); model2.setQuantumNetworkId(NET02_ID); Assert.assertTrue("Quantum model should not have any network.", quantumModel.getNetworks().isEmpty()); Network network1 = NetworkBuilderHelper.createSampleNetwork(NET01_ID, NET01_NAME, TENANT01_ID); Network network2 = NetworkBuilderHelper.createSampleNetwork(NET02_ID, NET02_NAME, TENANT01_ID); controller.addNetwork(quantumModel, network1); Assert.assertTrue("Quantum model should contain network1", quantumModel.getNetworks().contains(network1)); Assert.assertFalse("Quantum model should not contain network2", quantumModel.getNetworks().contains(network2)); Assert.assertEquals("Quantum model should only contain one network.", 1, quantumModel.getNetworks().size()); controller.removeNetwork(quantumModel, model2); } @Test(expected = QuantumException.class) public void updateUnexistingNetworkTest() throws QuantumException { quantumModel = new QuantumModel(); controller = new QuantumModelController(); model1 = new NetworkModel(); model1.setQuantumNetworkId(NET01_ID); model2 = new NetworkModel(); model2.setQuantumNetworkId(NET02_ID); Assert.assertTrue("Quantum model should not have any network.", quantumModel.getNetworks().isEmpty()); Network network1 = NetworkBuilderHelper.createSampleNetwork(NET01_ID, NET01_NAME, TENANT01_ID); Network network2 = NetworkBuilderHelper.createSampleNetwork(NET02_ID, NET02_NAME, TENANT01_ID); Network network2Updated = NetworkBuilderHelper.createSampleNetwork(NET02_ID, NET02_NAME, TENANT02_ID); controller.addNetwork(quantumModel, network1); Assert.assertTrue("Quantum model should contain network1", quantumModel.getNetworks().contains(network1)); Assert.assertFalse("Quantum model should not contain network2", quantumModel.getNetworks().contains(network2)); Assert.assertEquals("Quantum model should only contain one network.", 1, quantumModel.getNetworks().size()); controller.updateNetwork(NET02_ID, quantumModel, network2Updated); } @Test public void addAndRemoveAutobahnResourceToQuantumModelTest() throws QuantumException { Resource resource1 = prepareAutobahnResource(IFACE1_NAME, IFACE2_NAME, LINK_CAPACITY, VLAN_ID_25); Resource resource2 = prepareAutobahnResource(IFACE3_NAME, IFACE4_NAME, LINK_CAPACITY, VLAN_ID_26); quantumModel = new QuantumModel(); controller = new QuantumModelController(); model1 = new NetworkModel(); model1.setQuantumNetworkId(NET01_ID); model1.addResource(resource1); model2 = new NetworkModel(); model2.setQuantumNetworkId(NET02_ID); model2.addResource(resource2); Assert.assertTrue("Quantum model should not have any network.", quantumModel.getNetworks().isEmpty()); Network network1 = NetworkBuilderHelper.createSampleNetwork(NET01_ID, NET01_NAME, TENANT01_ID); Network network2 = NetworkBuilderHelper.createSampleNetwork(NET02_ID, NET02_NAME, TENANT01_ID); controller.addNetwork(quantumModel, network1); controller.addNetwork(quantumModel, network2); Assert.assertEquals("Quantum model should only contain two networks.", 2, quantumModel.getNetworks().size()); Assert.assertTrue("Quantum model should contain network1", quantumModel.getNetworks().contains(network1)); Assert.assertTrue("Quantum model should contain network2", quantumModel.getNetworks().contains(network2)); Assert.assertTrue("Quantum model should not contain any network model.", quantumModel.getNetworksModel().isEmpty()); controller.addNetworkModelToQuantumModel(quantumModel, model1); Assert.assertEquals("Quantum model should only contain one network model.", 1, quantumModel.getNetworksModel().size()); Assert.assertTrue("Quantum model should contain netmodel1.", quantumModel.getNetworksModel().contains(model1)); Assert.assertFalse("Quantum model should not contain netmodel2.", quantumModel.getNetworksModel().contains(model2)); controller.addNetworkModelToQuantumModel(quantumModel, model2); Assert.assertEquals("Quantum model should contain two network models.", 2, quantumModel.getNetworksModel().size()); Assert.assertTrue("Quantum model should contain netmodel1.", quantumModel.getNetworksModel().contains(model1)); Assert.assertTrue("Quantum model should contain netmodel2.", quantumModel.getNetworksModel().contains(model2)); controller.removeNetworkModelFromQuantumModel(quantumModel, model2); controller.removeNetwork(quantumModel, model2); Assert.assertEquals("Quantum model should only contain one network model.", 1, quantumModel.getNetworksModel().size()); Assert.assertTrue("Quantum model should contain netmodel1.", quantumModel.getNetworksModel().contains(model1)); Assert.assertFalse("Quantum model should not contain netmodel2.", quantumModel.getNetworksModel().contains(model2)); controller.removeNetworkModelFromQuantumModel(quantumModel, model1); controller.removeNetwork(quantumModel, model1); Assert.assertTrue("Quantum model should not contain any network model.", quantumModel.getNetworksModel().isEmpty()); Assert.assertFalse("Quantum model should not contain netmodel1.", quantumModel.getNetworksModel().contains(model1)); Assert.assertFalse("Quantum model should not contain netmodel2.", quantumModel.getNetworksModel().contains(model2)); } @Test(expected = QuantumException.class) public void addSameNetworkModelTwice() throws QuantumException { Resource resource1 = prepareAutobahnResource(IFACE1_NAME, IFACE2_NAME, LINK_CAPACITY, VLAN_ID_25); quantumModel = new QuantumModel(); controller = new QuantumModelController(); model1 = new NetworkModel(); model1.setQuantumNetworkId(NET01_ID); model1.addResource(resource1); Assert.assertTrue("Quantum model should not contain any network model.", quantumModel.getNetworksModel().isEmpty()); controller.addNetworkModelToQuantumModel(quantumModel, model1); Assert.assertEquals("Quantum model should only contain one network model.", 1, quantumModel.getNetworksModel().size()); Assert.assertTrue("Quantum model should contain netmodel1.", quantumModel.getNetworksModel().contains(model1)); controller.addNetworkModelToQuantumModel(quantumModel, model1); } @Test(expected = QuantumException.class) public void removeUnexistingNetworkModel() throws QuantumException { Resource resource1 = prepareAutobahnResource(IFACE1_NAME, IFACE2_NAME, LINK_CAPACITY, VLAN_ID_25); Resource resource2 = prepareAutobahnResource(IFACE3_NAME, IFACE4_NAME, LINK_CAPACITY, VLAN_ID_26); quantumModel = new QuantumModel(); controller = new QuantumModelController(); model1 = new NetworkModel(); model1.setQuantumNetworkId(NET01_ID); model1.addResource(resource1); model2 = new NetworkModel(); model2.setQuantumNetworkId(NET02_ID); model2.addResource(resource2); Assert.assertTrue("Quantum model should not contain any network model.", quantumModel.getNetworksModel().isEmpty()); controller.addNetworkModelToQuantumModel(quantumModel, model1); Assert.assertEquals("Quantum model should only contain one network model.", 1, quantumModel.getNetworksModel().size()); Assert.assertTrue("Quantum model should contain netmodel1.", quantumModel.getNetworksModel().contains(model1)); Assert.assertFalse("Quantum model should not contain netmodel2.", quantumModel.getNetworksModel().contains(model2)); controller.removeNetworkModelFromQuantumModel(quantumModel, model2); } private Resource prepareAutobahnResource(String iface1Name, String iface2Name, int linkCapacity, int vlanId) { AutobahnElement autobahnElem = new AutobahnElement(); BoDLink link = NetworkBuilderHelper.createSampleBoDLink(iface1Name, iface2Name, linkCapacity, vlanId, vlanId); autobahnElem.addLink(link); Resource resource = NetworkBuilderHelper.createSampleAutobahnResource(AUTOBAHN_RESOURCE_ID, autobahnElem); return resource; } }