package org.opennaas.extensions.ofertie.ncl.test; import static org.easymock.EasyMock.createMock; import static org.easymock.EasyMock.expect; import static org.easymock.EasyMock.replay; import static org.easymock.EasyMock.verify; import junit.framework.Assert; import org.junit.Before; import org.junit.Test; import org.opennaas.extensions.ofertie.ncl.controller.api.INCLController; import org.opennaas.extensions.ofertie.ncl.provisioner.NCLProvisioner; import org.opennaas.extensions.ofertie.ncl.provisioner.api.exceptions.FlowAllocationException; import org.opennaas.extensions.ofertie.ncl.provisioner.api.exceptions.FlowAllocationRejectedException; import org.opennaas.extensions.ofertie.ncl.provisioner.api.exceptions.ProvisionerException; import org.opennaas.extensions.ofertie.ncl.provisioner.api.model.Flow; import org.opennaas.extensions.ofertie.ncl.provisioner.api.model.FlowRequest; import org.opennaas.extensions.ofertie.ncl.provisioner.api.model.QoSRequirements; import org.opennaas.extensions.ofertie.ncl.provisioner.components.INetworkSelector; import org.opennaas.extensions.ofertie.ncl.provisioner.components.IPathFinder; import org.opennaas.extensions.ofertie.ncl.provisioner.components.IQoSPDP; import org.opennaas.extensions.sdnnetwork.model.Route; public class ProvisionerLogicTest { final String userId = "alice"; final String netId = "NET:1234"; final Route route = new Route(); final String flowId = "FLOW:1"; NCLProvisioner provisioner; IQoSPDP qosPDP; INetworkSelector networkSelector; IPathFinder pathFinder; INCLController nclController; FlowRequest flowRequest; @Before public void initFlowRequest() { flowRequest = generateSampleFlow().getFlowRequest(); } @Before public void initProvisioner() { qosPDP = createMock(IQoSPDP.class); networkSelector = createMock(INetworkSelector.class); pathFinder = createMock(IPathFinder.class); nclController = createMock(INCLController.class); provisioner = new NCLProvisioner(); provisioner.setQoSPDP(qosPDP); provisioner.setNetworkSelector(networkSelector); provisioner.setPathFinder(pathFinder); provisioner.setNclController(nclController); } @Test public void allocateFlowOkTest() throws Exception { expect(qosPDP.shouldAcceptRequest(userId, flowRequest)).andReturn(true); expect(networkSelector.findNetworkForRequest(flowRequest)).andReturn(netId); expect(pathFinder.findPathForRequest(flowRequest, netId)).andReturn(route); expect(nclController.allocateFlow(flowRequest, route, netId)).andReturn(flowId); replay(qosPDP); replay(networkSelector); replay(pathFinder); replay(nclController); String result = provisioner.allocateFlow(flowRequest); Assert.assertEquals(flowId, result); verify(qosPDP); verify(networkSelector); verify(pathFinder); verify(nclController); } @Test(expected = FlowAllocationRejectedException.class) public void allocateFlowQoSDeniedTest() throws Exception { expect(qosPDP.shouldAcceptRequest(userId, flowRequest)).andReturn(false); replay(qosPDP); replay(networkSelector); replay(pathFinder); replay(nclController); provisioner.allocateFlow(flowRequest); verify(qosPDP); verify(networkSelector); verify(pathFinder); verify(nclController); } @Test(expected = ProvisionerException.class) public void allocateFlowNetworkSelectorErrorTest() throws Exception { expect(qosPDP.shouldAcceptRequest(userId, flowRequest)).andReturn(true); expect(networkSelector.findNetworkForRequest(flowRequest)).andThrow(new Exception()); replay(qosPDP); replay(networkSelector); replay(pathFinder); replay(nclController); provisioner.allocateFlow(flowRequest); verify(qosPDP); verify(networkSelector); verify(pathFinder); verify(nclController); } @Test(expected = ProvisionerException.class) public void allocateFlowPathFinderErrorTest() throws Exception { expect(qosPDP.shouldAcceptRequest(userId, flowRequest)).andReturn(true); expect(networkSelector.findNetworkForRequest(flowRequest)).andReturn(netId); expect(pathFinder.findPathForRequest(flowRequest, netId)).andThrow(new Exception()); replay(qosPDP); replay(networkSelector); replay(pathFinder); replay(nclController); provisioner.allocateFlow(flowRequest); verify(qosPDP); verify(networkSelector); verify(pathFinder); verify(nclController); } @Test(expected = FlowAllocationException.class) public void allocateFlowNCLControllerErrorTest() throws Exception { expect(qosPDP.shouldAcceptRequest(userId, flowRequest)).andReturn(true); expect(networkSelector.findNetworkForRequest(flowRequest)).andReturn(netId); expect(pathFinder.findPathForRequest(flowRequest, netId)).andReturn(route); expect(nclController.allocateFlow(flowRequest, route, netId)).andThrow(new FlowAllocationException()); replay(qosPDP); replay(networkSelector); replay(pathFinder); replay(nclController); provisioner.allocateFlow(flowRequest); verify(qosPDP); verify(networkSelector); verify(pathFinder); verify(nclController); } private Flow generateSampleFlow() { QoSRequirements qoSRequirements = new QoSRequirements(); qoSRequirements.setMinBandwidth(100 * 1000 * 1000); qoSRequirements.setMaxBandwidth(-1); qoSRequirements.setMinDelay(-1); qoSRequirements.setMaxDelay(10); qoSRequirements.setMinJitter(-1); qoSRequirements.setMaxJitter(10); qoSRequirements.setMinPacketLoss(-1); qoSRequirements.setMaxPacketLoss(10); FlowRequest request = new FlowRequest(); request.setRequestId("1"); request.setSourceIPAddress("192.168.0.1"); request.setDestinationIPAddress("192.168.0.2"); request.setSourcePort(8080); request.setDestinationPort(8080); request.setSourceVlanId(1100); request.setDestinationVlanId(1100); request.setTos(1); request.setQoSRequirements(qoSRequirements); Flow flow = new Flow(); flow.setId("1"); flow.setFlowRequest(request); return flow; } }