package org.opennaas.extensions.router.capability.ip; /* * #%L * OpenNaaS :: Router :: IP Capability * %% * Copyright (C) 2007 - 2014 FundaciĆ³ Privada i2CAT, Internet i InnovaciĆ³ a Catalunya * %% * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * #L% */ import java.util.List; import junit.framework.Assert; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.junit.Before; import org.junit.Test; import org.mockito.ArgumentCaptor; import org.mockito.Mockito; import org.opennaas.core.resources.IResource; import org.opennaas.core.resources.action.IAction; import org.opennaas.core.resources.capability.AbstractCapability; import org.opennaas.core.resources.mock.MockResource; import org.opennaas.extensions.router.model.IPProtocolEndpoint; import org.opennaas.extensions.router.model.LogicalDevice; import org.opennaas.extensions.router.model.NetworkPort; import org.opennaas.extensions.router.model.ProtocolEndpoint; import org.powermock.api.mockito.PowerMockito; import org.powermock.reflect.Whitebox; /** * Unit tests for {@link IPCapability} * * @author Julio Carlos Barrera * */ public class IPCapabailityTests { private static final String IPV4_ADDRESS = "192.168.22.1"; private static final String IPV4_SUBNET_MASK = "24"; private static final String INTERFACE = "fe-0/1/1"; private static final int PORT_NUMBER = 1; private static final String INTERFACE_NAME = INTERFACE + PORT_NUMBER; private static final String IPV4_COMPOSED_ADDRESS = IPV4_ADDRESS + "/" + IPV4_SUBNET_MASK; private IPCapability ipCapability; @Before public void setUp() throws Exception { ipCapability = generatePartialMockedCapability(); ipCapability.setResource(generateResource()); } @Test public void testSetIp() throws SecurityException, NoSuchMethodException, Exception { // call to setIP() with an IP address v4 ipCapability.setIP(INTERFACE_NAME, IPV4_COMPOSED_ADDRESS); // verify the call to queueAction method Mockito.verify(ipCapability, Mockito.times(1)).queueAction((IAction) Mockito.anyObject()); // verify createActionAndCheckParams method and capture action params ArgumentCaptor<Object> capturedActionParams = ArgumentCaptor.forClass(Object.class); PowerMockito.verifyPrivate(ipCapability, Mockito.times(1)).invoke("createActionAndCheckParams", Mockito.eq(IPActionSet.SET_IPv4), capturedActionParams.capture()); // assertions Assert.assertTrue("Generated action param must be a NetworkPort", capturedActionParams.getValue() instanceof NetworkPort); NetworkPort networkPort = (NetworkPort) capturedActionParams.getValue(); Assert.assertEquals("NetworkPort interface name must be " + INTERFACE, INTERFACE, networkPort.getName()); Assert.assertEquals("NetworkPort interface port number must be " + PORT_NUMBER, PORT_NUMBER, networkPort.getPortNumber()); List<ProtocolEndpoint> protocolEndpoints = networkPort.getProtocolEndpoint(); Assert.assertEquals("There must be one protocol endpoint", protocolEndpoints.size(), 1); Assert.assertTrue("There must be one protocol endpoint of type IPProtocolEndpoint", protocolEndpoints.get(0) instanceof IPProtocolEndpoint); IPProtocolEndpoint ipProtocolEndpoint = (IPProtocolEndpoint) networkPort.getProtocolEndpoint().get(0); Assert.assertEquals("IPv4 address must be " + IPV4_ADDRESS, IPV4_ADDRESS, ipProtocolEndpoint.getIPv4Address()); Assert.assertEquals("IPv4 subnet mask must be " + IPV4_SUBNET_MASK, IPV4_SUBNET_MASK, ipProtocolEndpoint.getSubnetMask()); } private static IResource generateResource() { IResource resource = new MockResource(); return resource; } private static IPCapability generatePartialMockedCapability() throws Exception { IPCapability partialMockedIPCapability = PowerMockito.mock(IPCapability.class); // initialize internal loggerS (Capability and AbstractCapability instances) Whitebox.setInternalState(partialMockedIPCapability, Log.class, LogFactory.getLog(IPCapability.class)); Whitebox.setInternalState(partialMockedIPCapability, Log.class, LogFactory.getLog(IPCapability.class), AbstractCapability.class); // do real method calls on capability calls PowerMockito.doCallRealMethod().when(partialMockedIPCapability).setIP(Mockito.anyString(), Mockito.anyString()); PowerMockito.doCallRealMethod().when(partialMockedIPCapability) .setIP(Mockito.any(LogicalDevice.class), Mockito.any(IPProtocolEndpoint.class)); PowerMockito.doCallRealMethod().when(partialMockedIPCapability).setIP(Mockito.any(LogicalDevice.class), Mockito.anyString()); PowerMockito.doCallRealMethod().when(partialMockedIPCapability).setIPv4(Mockito.anyString(), Mockito.anyString()); PowerMockito.doCallRealMethod().when(partialMockedIPCapability) .setIPv4(Mockito.any(LogicalDevice.class), Mockito.any(IPProtocolEndpoint.class)); PowerMockito.doCallRealMethod().when(partialMockedIPCapability).setIPv6(Mockito.anyString(), Mockito.anyString()); PowerMockito.doCallRealMethod().when(partialMockedIPCapability) .setIPv6(Mockito.any(LogicalDevice.class), Mockito.any(IPProtocolEndpoint.class)); return partialMockedIPCapability; } }