diff options
author | CNlucius <lukai1@huawei.com> | 2016-09-13 11:40:12 +0800 |
---|---|---|
committer | CNlucius <lukai1@huawei.com> | 2016-09-13 11:41:53 +0800 |
commit | b731e2f1dd0972409b136aebc7b463dd72c9cfad (patch) | |
tree | 5107d7d80c19ad8076c2c97c2b5ef8d1cf3ab903 /framework/src/onos/apps/sdnip/src/test/java/org | |
parent | ee93993458266114c29271a481ef9ce7ce621b2a (diff) |
ONOSFW-171
O/S-SFC-ONOS scenario documentation
Change-Id: I51ae1cf736ea24ab6680f8edca1b2bf5dd598365
Signed-off-by: CNlucius <lukai1@huawei.com>
Diffstat (limited to 'framework/src/onos/apps/sdnip/src/test/java/org')
4 files changed, 0 insertions, 1486 deletions
diff --git a/framework/src/onos/apps/sdnip/src/test/java/org/onosproject/sdnip/IntentSyncTest.java b/framework/src/onos/apps/sdnip/src/test/java/org/onosproject/sdnip/IntentSyncTest.java deleted file mode 100644 index 4736aa1d..00000000 --- a/framework/src/onos/apps/sdnip/src/test/java/org/onosproject/sdnip/IntentSyncTest.java +++ /dev/null @@ -1,421 +0,0 @@ -/* - * Copyright 2014-2015 Open Networking Laboratory - * - * 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. - */ -package org.onosproject.sdnip; - -import com.google.common.collect.Sets; -import com.google.common.util.concurrent.MoreExecutors; -import org.junit.Before; -import org.junit.Test; -import org.onlab.junit.TestUtils; -import org.onlab.junit.TestUtils.TestUtilsException; -import org.onlab.packet.Ethernet; -import org.onlab.packet.Ip4Address; -import org.onlab.packet.Ip4Prefix; -import org.onlab.packet.IpAddress; -import org.onlab.packet.IpPrefix; -import org.onlab.packet.MacAddress; -import org.onlab.packet.VlanId; -import org.onosproject.TestApplicationId; -import org.onosproject.core.ApplicationId; -import org.onosproject.incubator.net.intf.Interface; -import org.onosproject.net.ConnectPoint; -import org.onosproject.net.DeviceId; -import org.onosproject.net.PortNumber; -import org.onosproject.net.flow.DefaultTrafficSelector; -import org.onosproject.net.flow.DefaultTrafficTreatment; -import org.onosproject.net.flow.TrafficSelector; -import org.onosproject.net.flow.TrafficTreatment; -import org.onosproject.net.host.InterfaceIpAddress; -import org.onosproject.net.intent.AbstractIntentTest; -import org.onosproject.net.intent.Intent; -import org.onosproject.net.intent.IntentService; -import org.onosproject.net.intent.IntentState; -import org.onosproject.net.intent.Key; -import org.onosproject.net.intent.MultiPointToSinglePointIntent; -import org.onosproject.net.intent.IntentUtils; -import org.onosproject.routing.RouteEntry; - -import java.util.Collections; -import java.util.HashSet; -import java.util.Set; - -import static org.easymock.EasyMock.createMock; -import static org.easymock.EasyMock.expect; -import static org.easymock.EasyMock.replay; -import static org.easymock.EasyMock.reset; -import static org.easymock.EasyMock.verify; -import static org.hamcrest.Matchers.is; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertThat; - -/** - * This class tests the intent synchronization function in the - * IntentSynchronizer class. - */ -public class IntentSyncTest extends AbstractIntentTest { - - private IntentService intentService; - - private static final ConnectPoint SW1_ETH1 = new ConnectPoint( - DeviceId.deviceId("of:0000000000000001"), - PortNumber.portNumber(1)); - - private static final ConnectPoint SW2_ETH1 = new ConnectPoint( - DeviceId.deviceId("of:0000000000000002"), - PortNumber.portNumber(1)); - - private static final ConnectPoint SW3_ETH1 = new ConnectPoint( - DeviceId.deviceId("of:0000000000000003"), - PortNumber.portNumber(1)); - - private static final ConnectPoint SW4_ETH1 = new ConnectPoint( - DeviceId.deviceId("of:0000000000000004"), - PortNumber.portNumber(1)); - - private IntentSynchronizer intentSynchronizer; - private final Set<Interface> interfaces = Sets.newHashSet(); - - private static final ApplicationId APPID = TestApplicationId.create("SDNIP"); - - @Before - public void setUp() throws Exception { - super.setUp(); - - setUpInterfaceService(); - - intentService = createMock(IntentService.class); - - intentSynchronizer = new IntentSynchronizer(APPID, intentService, - MoreExecutors.newDirectExecutorService()); - } - - /** - * Sets up InterfaceService. - */ - private void setUpInterfaceService() { - Set<InterfaceIpAddress> interfaceIpAddresses1 = Sets.newHashSet(); - interfaceIpAddresses1.add(new InterfaceIpAddress( - IpAddress.valueOf("192.168.10.101"), - IpPrefix.valueOf("192.168.10.0/24"))); - Interface sw1Eth1 = new Interface(SW1_ETH1, - interfaceIpAddresses1, MacAddress.valueOf("00:00:00:00:00:01"), - VlanId.NONE); - interfaces.add(sw1Eth1); - - Set<InterfaceIpAddress> interfaceIpAddresses2 = Sets.newHashSet(); - interfaceIpAddresses2.add( - new InterfaceIpAddress(IpAddress.valueOf("192.168.20.101"), - IpPrefix.valueOf("192.168.20.0/24"))); - Interface sw2Eth1 = new Interface(SW2_ETH1, - interfaceIpAddresses2, MacAddress.valueOf("00:00:00:00:00:02"), - VlanId.NONE); - interfaces.add(sw2Eth1); - - Set<InterfaceIpAddress> interfaceIpAddresses3 = Sets.newHashSet(); - interfaceIpAddresses3.add( - new InterfaceIpAddress(IpAddress.valueOf("192.168.30.101"), - IpPrefix.valueOf("192.168.30.0/24"))); - Interface sw3Eth1 = new Interface(SW3_ETH1, - interfaceIpAddresses3, MacAddress.valueOf("00:00:00:00:00:03"), - VlanId.NONE); - interfaces.add(sw3Eth1); - - InterfaceIpAddress interfaceIpAddress4 = - new InterfaceIpAddress(IpAddress.valueOf("192.168.40.101"), - IpPrefix.valueOf("192.168.40.0/24")); - Interface sw4Eth1 = new Interface(SW4_ETH1, - Sets.newHashSet(interfaceIpAddress4), - MacAddress.valueOf("00:00:00:00:00:04"), - VlanId.vlanId((short) 1)); - - interfaces.add(sw4Eth1); - } - - /** - * Tests the synchronization behavior of intent synchronizer. We set up - * a discrepancy between the intent service state and the intent - * synchronizer's state and ensure that this is reconciled correctly. - * - * @throws TestUtilsException - */ - @Test - public void testIntentSync() throws TestUtilsException { - - // - // Construct routes and intents. - // This test simulates the following cases during the master change - // time interval: - // 1. RouteEntry1 did not change and the intent also did not change. - // 2. RouteEntry2 was deleted, but the intent was not deleted. - // 3. RouteEntry3 was newly added, and the intent was also submitted. - // 4. RouteEntry4 was updated to RouteEntry4Update, and the intent was - // also updated to a new one. - // 5. RouteEntry5 did not change, but its intent id changed. - // 6. RouteEntry6 was newly added, but the intent was not submitted. - // - RouteEntry routeEntry1 = new RouteEntry( - Ip4Prefix.valueOf("1.1.1.0/24"), - Ip4Address.valueOf("192.168.10.1")); - - RouteEntry routeEntry2 = new RouteEntry( - Ip4Prefix.valueOf("2.2.2.0/24"), - Ip4Address.valueOf("192.168.20.1")); - - RouteEntry routeEntry3 = new RouteEntry( - Ip4Prefix.valueOf("3.3.3.0/24"), - Ip4Address.valueOf("192.168.30.1")); - - RouteEntry routeEntry4 = new RouteEntry( - Ip4Prefix.valueOf("4.4.4.0/24"), - Ip4Address.valueOf("192.168.30.1")); - - RouteEntry routeEntry4Update = new RouteEntry( - Ip4Prefix.valueOf("4.4.4.0/24"), - Ip4Address.valueOf("192.168.20.1")); - - RouteEntry routeEntry5 = new RouteEntry( - Ip4Prefix.valueOf("5.5.5.0/24"), - Ip4Address.valueOf("192.168.10.1")); - - RouteEntry routeEntry6 = new RouteEntry( - Ip4Prefix.valueOf("6.6.6.0/24"), - Ip4Address.valueOf("192.168.10.1")); - - RouteEntry routeEntry7 = new RouteEntry( - Ip4Prefix.valueOf("7.7.7.0/24"), - Ip4Address.valueOf("192.168.10.1")); - - MultiPointToSinglePointIntent intent1 = intentBuilder( - routeEntry1.prefix(), "00:00:00:00:00:01", SW1_ETH1); - MultiPointToSinglePointIntent intent2 = intentBuilder( - routeEntry2.prefix(), "00:00:00:00:00:02", SW2_ETH1); - MultiPointToSinglePointIntent intent3 = intentBuilder( - routeEntry3.prefix(), "00:00:00:00:00:03", SW3_ETH1); - MultiPointToSinglePointIntent intent4 = intentBuilder( - routeEntry4.prefix(), "00:00:00:00:00:03", SW3_ETH1); - MultiPointToSinglePointIntent intent4Update = intentBuilder( - routeEntry4Update.prefix(), "00:00:00:00:00:02", SW2_ETH1); - MultiPointToSinglePointIntent intent5 = intentBuilder( - routeEntry5.prefix(), "00:00:00:00:00:01", SW1_ETH1); - MultiPointToSinglePointIntent intent7 = intentBuilder( - routeEntry7.prefix(), "00:00:00:00:00:01", SW1_ETH1); - - // Compose a intent, which is equal to intent5 but the id is different. - MultiPointToSinglePointIntent intent5New = - staticIntentBuilder(intent5, routeEntry5, "00:00:00:00:00:01"); - assertThat(IntentUtils.equals(intent5, intent5New), is(true)); - assertFalse(intent5.equals(intent5New)); - - MultiPointToSinglePointIntent intent6 = intentBuilder( - routeEntry6.prefix(), "00:00:00:00:00:01", SW1_ETH1); - - // Set up expectation - Set<Intent> intents = new HashSet<>(); - intents.add(intent1); - expect(intentService.getIntentState(intent1.key())) - .andReturn(IntentState.INSTALLED).anyTimes(); - intents.add(intent2); - expect(intentService.getIntentState(intent2.key())) - .andReturn(IntentState.INSTALLED).anyTimes(); - intents.add(intent4); - expect(intentService.getIntentState(intent4.key())) - .andReturn(IntentState.INSTALLED).anyTimes(); - intents.add(intent5); - expect(intentService.getIntentState(intent5.key())) - .andReturn(IntentState.INSTALLED).anyTimes(); - intents.add(intent7); - expect(intentService.getIntentState(intent7.key())) - .andReturn(IntentState.WITHDRAWING).anyTimes(); - expect(intentService.getIntents()).andReturn(intents).anyTimes(); - - // These are the operations that should be done to the intentService - // during synchronization - intentService.withdraw(intent2); - intentService.submit(intent3); - intentService.submit(intent4Update); - intentService.submit(intent6); - intentService.submit(intent7); - replay(intentService); - - // Start the test - - // Simulate some input from the clients. The intent synchronizer has not - // gained the global leadership yet, but it will remember this input for - // when it does. - intentSynchronizer.submit(intent1); - intentSynchronizer.submit(intent2); - intentSynchronizer.withdraw(intent2); - intentSynchronizer.submit(intent3); - intentSynchronizer.submit(intent4); - intentSynchronizer.submit(intent4Update); - intentSynchronizer.submit(intent5); - intentSynchronizer.submit(intent6); - intentSynchronizer.submit(intent7); - - // Give the leadership to the intent synchronizer. It will now attempt - // to synchronize the intents in the store with the intents it has - // recorded based on the earlier user input. - intentSynchronizer.leaderChanged(true); - - verify(intentService); - } - - /** - * Tests the behavior of the submit API, both when the synchronizer has - * leadership and when it does not. - */ - @Test - public void testSubmit() { - IpPrefix prefix = Ip4Prefix.valueOf("1.1.1.0/24"); - Intent intent = intentBuilder(prefix, "00:00:00:00:00:01", SW1_ETH1); - - // Set up expectations - intentService.submit(intent); - expect(intentService.getIntents()).andReturn(Collections.emptyList()) - .anyTimes(); - replay(intentService); - - // Give the intent synchronizer leadership so it will submit intents - // to the intent service - intentSynchronizer.leaderChanged(true); - - // Test the submit - intentSynchronizer.submit(intent); - - verify(intentService); - - // Now we'll remove leadership from the intent synchronizer and verify - // that it does not submit any intents to the intent service when we - // call the submit API - reset(intentService); - replay(intentService); - - intentSynchronizer.leaderChanged(false); - - intentSynchronizer.submit(intent); - - verify(intentService); - } - - /** - * Tests the behavior of the withdraw API, both when the synchronizer has - * leadership and when it does not. - */ - @Test - public void testWithdraw() { - IpPrefix prefix = Ip4Prefix.valueOf("1.1.1.0/24"); - Intent intent = intentBuilder(prefix, "00:00:00:00:00:01", SW1_ETH1); - - // Submit an intent first so we can withdraw it later - intentService.submit(intent); - intentService.withdraw(intent); - expect(intentService.getIntents()).andReturn(Collections.emptyList()) - .anyTimes(); - replay(intentService); - - // Give the intent synchronizer leadership so it will submit intents - // to the intent service - intentSynchronizer.leaderChanged(true); - - // Test the submit then withdraw - intentSynchronizer.submit(intent); - intentSynchronizer.withdraw(intent); - - verify(intentService); - - // Now we'll remove leadership from the intent synchronizer and verify - // that it does not withdraw any intents to the intent service when we - // call the withdraw API - reset(intentService); - replay(intentService); - - intentSynchronizer.leaderChanged(false); - - intentSynchronizer.submit(intent); - intentSynchronizer.withdraw(intent); - - verify(intentService); - } - - /** - * MultiPointToSinglePointIntent builder. - * - * @param ipPrefix the ipPrefix to match - * @param nextHopMacAddress to which the destination MAC address in packet - * should be rewritten - * @param egressPoint to which packets should be sent - * @return the constructed MultiPointToSinglePointIntent - */ - private MultiPointToSinglePointIntent intentBuilder(IpPrefix ipPrefix, - String nextHopMacAddress, ConnectPoint egressPoint) { - - TrafficSelector.Builder selectorBuilder = - DefaultTrafficSelector.builder(); - if (ipPrefix.isIp4()) { - selectorBuilder.matchEthType(Ethernet.TYPE_IPV4); - selectorBuilder.matchIPDst(ipPrefix); - } else { - selectorBuilder.matchEthType(Ethernet.TYPE_IPV6); - selectorBuilder.matchIPv6Dst(ipPrefix); - } - - TrafficTreatment.Builder treatmentBuilder = - DefaultTrafficTreatment.builder(); - treatmentBuilder.setEthDst(MacAddress.valueOf(nextHopMacAddress)); - - Set<ConnectPoint> ingressPoints = new HashSet<>(); - for (Interface intf : interfaces) { - if (!intf.connectPoint().equals(egressPoint)) { - ConnectPoint srcPort = intf.connectPoint(); - ingressPoints.add(srcPort); - } - } - MultiPointToSinglePointIntent intent = - MultiPointToSinglePointIntent.builder() - .appId(APPID) - .key(Key.of(ipPrefix.toString(), APPID)) - .selector(selectorBuilder.build()) - .treatment(treatmentBuilder.build()) - .ingressPoints(ingressPoints) - .egressPoint(egressPoint) - .constraints(SdnIpFib.CONSTRAINTS) - .build(); - return intent; - } - - /** - * A static MultiPointToSinglePointIntent builder, the returned intent is - * equal to the input intent except that the id is different. - * - * @param intent the intent to be used for building a new intent - * @param routeEntry the relative routeEntry of the intent - * @return the newly constructed MultiPointToSinglePointIntent - * @throws TestUtilsException - */ - private MultiPointToSinglePointIntent staticIntentBuilder( - MultiPointToSinglePointIntent intent, RouteEntry routeEntry, - String nextHopMacAddress) throws TestUtilsException { - - // Use a different egress ConnectPoint with that in intent - // to generate a different id - MultiPointToSinglePointIntent intentNew = intentBuilder( - routeEntry.prefix(), nextHopMacAddress, SW2_ETH1); - TestUtils.setField(intentNew, "egressPoint", intent.egressPoint()); - TestUtils.setField(intentNew, - "ingressPoints", intent.ingressPoints()); - return intentNew; - } -} diff --git a/framework/src/onos/apps/sdnip/src/test/java/org/onosproject/sdnip/PeerConnectivityManagerTest.java b/framework/src/onos/apps/sdnip/src/test/java/org/onosproject/sdnip/PeerConnectivityManagerTest.java deleted file mode 100644 index 0dcc969d..00000000 --- a/framework/src/onos/apps/sdnip/src/test/java/org/onosproject/sdnip/PeerConnectivityManagerTest.java +++ /dev/null @@ -1,557 +0,0 @@ -/* - * Copyright 2014-2015 Open Networking Laboratory - * - * 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. - */ -package org.onosproject.sdnip; - -import com.google.common.collect.Sets; -import org.junit.Before; -import org.junit.Ignore; -import org.junit.Test; -import org.onlab.junit.TestUtils.TestUtilsException; -import org.onlab.packet.Ethernet; -import org.onlab.packet.IPv4; -import org.onlab.packet.IpAddress; -import org.onlab.packet.IpPrefix; -import org.onlab.packet.MacAddress; -import org.onlab.packet.TpPort; -import org.onlab.packet.VlanId; -import org.onosproject.TestApplicationId; -import org.onosproject.core.ApplicationId; -import org.onosproject.incubator.net.intf.Interface; -import org.onosproject.incubator.net.intf.InterfaceService; -import org.onosproject.net.ConnectPoint; -import org.onosproject.net.DeviceId; -import org.onosproject.net.PortNumber; -import org.onosproject.net.config.NetworkConfigListener; -import org.onosproject.net.config.NetworkConfigService; -import org.onosproject.net.flow.DefaultTrafficSelector; -import org.onosproject.net.flow.DefaultTrafficTreatment; -import org.onosproject.net.flow.TrafficSelector; -import org.onosproject.net.flow.TrafficTreatment; -import org.onosproject.net.host.InterfaceIpAddress; -import org.onosproject.net.intent.AbstractIntentTest; -import org.onosproject.net.intent.Intent; -import org.onosproject.net.intent.Key; -import org.onosproject.net.intent.PointToPointIntent; -import org.onosproject.routing.IntentSynchronizationService; -import org.onosproject.routing.config.BgpConfig; -import org.onosproject.routing.config.BgpPeer; -import org.onosproject.routing.config.BgpSpeaker; -import org.onosproject.routing.config.InterfaceAddress; -import org.onosproject.routing.config.RoutingConfigurationService; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.Optional; -import java.util.Set; - -import static org.easymock.EasyMock.anyObject; -import static org.easymock.EasyMock.createMock; -import static org.easymock.EasyMock.expect; -import static org.easymock.EasyMock.expectLastCall; -import static org.easymock.EasyMock.replay; -import static org.easymock.EasyMock.reset; -import static org.easymock.EasyMock.verify; -import static org.onosproject.sdnip.TestIntentServiceHelper.eqExceptId; - -/** - * Unit tests for PeerConnectivityManager. - */ -public class PeerConnectivityManagerTest extends AbstractIntentTest { - - private static final ApplicationId APPID = TestApplicationId.create("foo"); - - private static final ApplicationId CONFIG_APP_ID = APPID; - - private PeerConnectivityManager peerConnectivityManager; - private IntentSynchronizationService intentSynchronizer; - private RoutingConfigurationService routingConfig; - private InterfaceService interfaceService; - private NetworkConfigService networkConfigService; - - private Set<BgpConfig.BgpSpeakerConfig> bgpSpeakers; - private Map<String, Interface> interfaces; - private Map<IpAddress, BgpPeer> peers; - - private BgpConfig bgpConfig; - - private List<PointToPointIntent> intentList; - - private final String dpid1 = "00:00:00:00:00:00:00:01"; - private final String dpid2 = "00:00:00:00:00:00:00:02"; - - private final DeviceId deviceId1 = - DeviceId.deviceId(SdnIp.dpidToUri(dpid1)); - private final DeviceId deviceId2 = - DeviceId.deviceId(SdnIp.dpidToUri(dpid2)); - - // Interfaces connected to BGP speakers - private final ConnectPoint s1Eth100 = - new ConnectPoint(deviceId1, PortNumber.portNumber(100)); - private final ConnectPoint s2Eth100 = - new ConnectPoint(deviceId2, PortNumber.portNumber(100)); - - // Interfaces connected to BGP peers - private final ConnectPoint s1Eth1 = - new ConnectPoint(deviceId1, PortNumber.portNumber(1)); - private final ConnectPoint s2Eth1 = - new ConnectPoint(deviceId2, PortNumber.portNumber(1)); - - private final TrafficTreatment noTreatment = - DefaultTrafficTreatment.emptyTreatment(); - - @Before - public void setUp() throws Exception { - super.setUp(); - routingConfig = createMock(RoutingConfigurationService.class); - interfaceService = createMock(InterfaceService.class); - networkConfigService = createMock(NetworkConfigService.class); - networkConfigService.addListener(anyObject(NetworkConfigListener.class)); - expectLastCall().anyTimes(); - bgpConfig = createMock(BgpConfig.class); - - // These will set expectations on routingConfig and interfaceService - bgpSpeakers = setUpBgpSpeakers(); - interfaces = Collections.unmodifiableMap(setUpInterfaces()); - peers = setUpPeers(); - - initPeerConnectivity(); - intentList = setUpIntentList(); - } - - /** - * Sets up BGP speakers. - * - * @return configured BGP speakers as a map from speaker name to speaker - */ - private Set<BgpConfig.BgpSpeakerConfig> setUpBgpSpeakers() { - - BgpConfig.BgpSpeakerConfig speaker1 = new BgpConfig.BgpSpeakerConfig( - Optional.empty(), - s1Eth100, Collections.singleton(IpAddress.valueOf("192.168.10.1"))); - - BgpConfig.BgpSpeakerConfig speaker2 = new BgpConfig.BgpSpeakerConfig( - Optional.empty(), - s1Eth100, Sets.newHashSet(IpAddress.valueOf("192.168.20.1"), - IpAddress.valueOf("192.168.30.1"))); - - Set<BgpConfig.BgpSpeakerConfig> bgpSpeakers = Sets.newHashSet(); - bgpSpeakers.add(speaker1); - bgpSpeakers.add(speaker2); - - return bgpSpeakers; - } - - /** - * Sets up logical interfaces, which emulate the configured interfaces - * in SDN-IP application. - * - * @return configured interfaces as a map from interface name to Interface - */ - private Map<String, Interface> setUpInterfaces() { - - Map<String, Interface> configuredInterfaces = new HashMap<>(); - - String interfaceSw1Eth1 = "s1-eth1"; - InterfaceIpAddress ia1 = - new InterfaceIpAddress(IpAddress.valueOf("192.168.10.101"), - IpPrefix.valueOf("192.168.10.0/24")); - Interface intfsw1eth1 = new Interface(s1Eth1, - Collections.singleton(ia1), - MacAddress.valueOf("00:00:00:00:00:01"), - VlanId.NONE); - - configuredInterfaces.put(interfaceSw1Eth1, intfsw1eth1); - String interfaceSw2Eth1 = "s2-eth1"; - InterfaceIpAddress ia2 = - new InterfaceIpAddress(IpAddress.valueOf("192.168.20.101"), - IpPrefix.valueOf("192.168.20.0/24")); - Interface intfsw2eth1 = new Interface(s2Eth1, - Collections.singleton(ia2), - MacAddress.valueOf("00:00:00:00:00:02"), - VlanId.NONE); - configuredInterfaces.put(interfaceSw2Eth1, intfsw2eth1); - - String interfaceSw2Eth1intf2 = "s2-eth1_2"; - InterfaceIpAddress ia3 = - new InterfaceIpAddress(IpAddress.valueOf("192.168.30.101"), - IpPrefix.valueOf("192.168.30.0/24")); - Interface intfsw2eth1intf2 = new Interface(s2Eth1, - Collections.singleton(ia3), - MacAddress.valueOf("00:00:00:00:00:03"), - VlanId.NONE); - configuredInterfaces.put(interfaceSw2Eth1intf2, intfsw2eth1intf2); - - expect(interfaceService.getInterfacesByPort(s1Eth1)) - .andReturn(Collections.singleton(intfsw1eth1)).anyTimes(); - expect(interfaceService.getInterfacesByIp(IpAddress.valueOf("192.168.10.101"))) - .andReturn(Collections.singleton(intfsw1eth1)).anyTimes(); - expect(interfaceService.getMatchingInterface(IpAddress.valueOf("192.168.10.1"))) - .andReturn(intfsw1eth1).anyTimes(); - expect(interfaceService.getInterfacesByPort(s2Eth1)) - .andReturn(Collections.singleton(intfsw2eth1)).anyTimes(); - expect(interfaceService.getInterfacesByIp(IpAddress.valueOf("192.168.20.101"))) - .andReturn(Collections.singleton(intfsw2eth1)).anyTimes(); - expect(interfaceService.getMatchingInterface(IpAddress.valueOf("192.168.20.1"))) - .andReturn(intfsw2eth1).anyTimes(); - - expect(interfaceService.getInterfacesByIp(IpAddress.valueOf("192.168.30.101"))) - .andReturn(Collections.singleton(intfsw2eth1intf2)).anyTimes(); - expect(interfaceService.getMatchingInterface(IpAddress.valueOf("192.168.30.1"))) - .andReturn(intfsw2eth1intf2).anyTimes(); - - // Non-existent interface used during one of the tests - expect(interfaceService.getInterfacesByPort(new ConnectPoint( - DeviceId.deviceId(SdnIp.dpidToUri("00:00:00:00:00:00:01:00")), - PortNumber.portNumber(1)))) - .andReturn(null).anyTimes(); - - expect(interfaceService.getInterfaces()).andReturn( - Sets.newHashSet(configuredInterfaces.values())).anyTimes(); - - return configuredInterfaces; - } - - /** - * Sets up BGP daemon peers. - * - * @return configured BGP peers as a MAP from peer IP address to BgpPeer - */ - private Map<IpAddress, BgpPeer> setUpPeers() { - - Map<IpAddress, BgpPeer> configuredPeers = new HashMap<>(); - - String peerSw1Eth1 = "192.168.10.1"; - configuredPeers.put(IpAddress.valueOf(peerSw1Eth1), - new BgpPeer(dpid1, 1, peerSw1Eth1)); - - // Two BGP peers are connected to switch 2 port 1. - String peer1Sw2Eth1 = "192.168.20.1"; - configuredPeers.put(IpAddress.valueOf(peer1Sw2Eth1), - new BgpPeer(dpid2, 1, peer1Sw2Eth1)); - - String peer2Sw2Eth1 = "192.168.30.1"; - configuredPeers.put(IpAddress.valueOf(peer2Sw2Eth1), - new BgpPeer(dpid2, 1, peer2Sw2Eth1)); - - return configuredPeers; - } - - /** - * Sets up expected point to point intent list. - * - * @return point to point intent list - */ - private List<PointToPointIntent> setUpIntentList() { - intentList = new ArrayList<>(); - - setUpBgpIntents(); - setUpIcmpIntents(); - - return intentList; - } - - /** - * Constructs a BGP intent and put it into the intentList. - * <p/> - * The purpose of this method is too simplify the setUpBgpIntents() method, - * and to make the setUpBgpIntents() easy to read. - * - * @param srcPrefix source IP prefix to match - * @param dstPrefix destination IP prefix to match - * @param srcTcpPort source TCP port to match - * @param dstTcpPort destination TCP port to match - * @param srcConnectPoint source connect point for PointToPointIntent - * @param dstConnectPoint destination connect point for PointToPointIntent - */ - private void bgpPathintentConstructor(String srcPrefix, String dstPrefix, - Short srcTcpPort, Short dstTcpPort, - ConnectPoint srcConnectPoint, ConnectPoint dstConnectPoint) { - - TrafficSelector.Builder builder = DefaultTrafficSelector.builder() - .matchEthType(Ethernet.TYPE_IPV4) - .matchIPProtocol(IPv4.PROTOCOL_TCP) - .matchIPSrc(IpPrefix.valueOf(srcPrefix)) - .matchIPDst(IpPrefix.valueOf(dstPrefix)); - - if (srcTcpPort != null) { - builder.matchTcpSrc(TpPort.tpPort(srcTcpPort)); - } - if (dstTcpPort != null) { - builder.matchTcpDst(TpPort.tpPort(dstTcpPort)); - } - - Key key = Key.of(srcPrefix.split("/")[0] + "-" + dstPrefix.split("/")[0] - + "-" + ((srcTcpPort == null) ? "dst" : "src"), APPID); - - PointToPointIntent intent = PointToPointIntent.builder() - .appId(APPID) - .key(key) - .selector(builder.build()) - .treatment(noTreatment) - .ingressPoint(srcConnectPoint) - .egressPoint(dstConnectPoint) - .build(); - - intentList.add(intent); - } - - /** - * Sets up intents for BGP paths. - */ - private void setUpBgpIntents() { - - Short bgpPort = 179; - - // Start to build intents between BGP speaker1 and BGP peer1 - bgpPathintentConstructor( - "192.168.10.101/32", "192.168.10.1/32", null, bgpPort, - s1Eth100, s1Eth1); - bgpPathintentConstructor( - "192.168.10.101/32", "192.168.10.1/32", bgpPort, null, - s1Eth100, s1Eth1); - - bgpPathintentConstructor( - "192.168.10.1/32", "192.168.10.101/32", null, bgpPort, - s1Eth1, s1Eth100); - bgpPathintentConstructor( - "192.168.10.1/32", "192.168.10.101/32", bgpPort, null, - s1Eth1, s1Eth100); - - // Start to build intents between BGP speaker1 and BGP peer2 - bgpPathintentConstructor( - "192.168.20.101/32", "192.168.20.1/32", null, bgpPort, - s1Eth100, s2Eth1); - bgpPathintentConstructor( - "192.168.20.101/32", "192.168.20.1/32", bgpPort, null, - s1Eth100, s2Eth1); - - bgpPathintentConstructor( - "192.168.20.1/32", "192.168.20.101/32", null, bgpPort, - s2Eth1, s1Eth100); - bgpPathintentConstructor( - "192.168.20.1/32", "192.168.20.101/32", bgpPort, null, - s2Eth1, s1Eth100); - - // - // Start to build intents between BGP speaker3 and BGP peer1 - bgpPathintentConstructor( - "192.168.30.101/32", "192.168.30.1/32", null, bgpPort, - s1Eth100, s2Eth1); - bgpPathintentConstructor( - "192.168.30.101/32", "192.168.30.1/32", bgpPort, null, - s1Eth100, s2Eth1); - - bgpPathintentConstructor( - "192.168.30.1/32", "192.168.30.101/32", null, bgpPort, - s2Eth1, s1Eth100); - bgpPathintentConstructor( - "192.168.30.1/32", "192.168.30.101/32", bgpPort, null, - s2Eth1, s1Eth100); - } - - /** - * Constructs a BGP intent and put it into the intentList. - * <p/> - * The purpose of this method is too simplify the setUpBgpIntents() method, - * and to make the setUpBgpIntents() easy to read. - * - * @param srcPrefix source IP prefix to match - * @param dstPrefix destination IP prefix to match - * @param srcConnectPoint source connect point for PointToPointIntent - * @param dstConnectPoint destination connect point for PointToPointIntent - */ - private void icmpPathintentConstructor(String srcPrefix, String dstPrefix, - ConnectPoint srcConnectPoint, ConnectPoint dstConnectPoint) { - - TrafficSelector selector = DefaultTrafficSelector.builder() - .matchEthType(Ethernet.TYPE_IPV4) - .matchIPProtocol(IPv4.PROTOCOL_ICMP) - .matchIPSrc(IpPrefix.valueOf(srcPrefix)) - .matchIPDst(IpPrefix.valueOf(dstPrefix)) - .build(); - - Key key = Key.of(srcPrefix.split("/")[0] + "-" + dstPrefix.split("/")[0] - + "-" + "icmp", APPID); - - PointToPointIntent intent = PointToPointIntent.builder() - .appId(APPID) - .key(key) - .selector(selector) - .treatment(noTreatment) - .ingressPoint(srcConnectPoint) - .egressPoint(dstConnectPoint) - .build(); - - intentList.add(intent); - } - - /** - * Sets up intents for ICMP paths. - */ - private void setUpIcmpIntents() { - // Start to build intents between BGP speaker1 and BGP peer1 - icmpPathintentConstructor( - "192.168.10.101/32", "192.168.10.1/32", s1Eth100, s1Eth1); - icmpPathintentConstructor( - "192.168.10.1/32", "192.168.10.101/32", s1Eth1, s1Eth100); - - // Start to build intents between BGP speaker1 and BGP peer2 - icmpPathintentConstructor( - "192.168.20.101/32", "192.168.20.1/32", s1Eth100, s2Eth1); - icmpPathintentConstructor( - "192.168.20.1/32", "192.168.20.101/32", s2Eth1, s1Eth100); - - icmpPathintentConstructor( - "192.168.30.101/32", "192.168.30.1/32", s1Eth100, s2Eth1); - icmpPathintentConstructor( - "192.168.30.1/32", "192.168.30.101/32", s2Eth1, s1Eth100); - } - - /** - * Initializes peer connectivity testing environment. - * - * @throws TestUtilsException if exceptions when using TestUtils - */ - private void initPeerConnectivity() throws TestUtilsException { - expect(routingConfig.getBgpPeers()).andReturn(peers).anyTimes(); - expect(bgpConfig.bgpSpeakers()).andReturn(bgpSpeakers).anyTimes(); - replay(bgpConfig); - expect(networkConfigService.getConfig(APPID, BgpConfig.class)) - .andReturn(bgpConfig).anyTimes(); - replay(networkConfigService); - replay(routingConfig); - replay(interfaceService); - - intentSynchronizer = createMock(IntentSynchronizationService.class); - replay(intentSynchronizer); - - peerConnectivityManager = - new PeerConnectivityManager(APPID, intentSynchronizer, - networkConfigService, - CONFIG_APP_ID, - interfaceService); - } - - /** - * Tests whether peer connectivity manager can set up correct BGP and - * ICMP intents according to specific configuration. - * <p/> - * Two tricky cases included in the configuration are: 2 peers on a same - * switch port, peer on the same switch with BGPd. - */ - @Test - public void testConnectionSetup() { - reset(intentSynchronizer); - - // Setup the expected intents - for (Intent intent : intentList) { - intentSynchronizer.submit(eqExceptId(intent)); - } - replay(intentSynchronizer); - - // Running the interface to be tested. - peerConnectivityManager.start(); - - verify(intentSynchronizer); - } - - /** - * Tests a corner case, when there are no interfaces in the configuration. - */ - @Test - public void testNullInterfaces() { - reset(interfaceService); - - expect(interfaceService.getInterfaces()).andReturn( - Sets.newHashSet()).anyTimes(); - expect(interfaceService.getInterfacesByPort(s2Eth1)) - .andReturn(Collections.emptySet()).anyTimes(); - expect(interfaceService.getInterfacesByPort(s1Eth1)) - .andReturn(Collections.emptySet()).anyTimes(); - expect(interfaceService.getInterfacesByIp(IpAddress.valueOf("192.168.10.101"))) - .andReturn(Collections.emptySet()).anyTimes(); - expect(interfaceService.getMatchingInterface(IpAddress.valueOf("192.168.10.1"))) - .andReturn(null).anyTimes(); - expect(interfaceService.getInterfacesByIp(IpAddress.valueOf("192.168.20.101"))) - .andReturn(Collections.emptySet()).anyTimes(); - expect(interfaceService.getMatchingInterface(IpAddress.valueOf("192.168.20.1"))) - .andReturn(null).anyTimes(); - expect(interfaceService.getInterfacesByIp(IpAddress.valueOf("192.168.30.101"))) - .andReturn(Collections.emptySet()).anyTimes(); - expect(interfaceService.getMatchingInterface(IpAddress.valueOf("192.168.30.1"))) - .andReturn(null).anyTimes(); - - replay(interfaceService); - - reset(intentSynchronizer); - replay(intentSynchronizer); - peerConnectivityManager.start(); - verify(intentSynchronizer); - } - - /** - * Tests a corner case, when there is no BGP speakers in the configuration. - */ - @Test - public void testNullBgpSpeakers() { - reset(routingConfig); - reset(bgpConfig); - - expect(bgpConfig.bgpSpeakers()).andReturn(Collections.emptySet()).anyTimes(); - replay(bgpConfig); - expect(routingConfig.getBgpPeers()).andReturn(peers).anyTimes(); - replay(routingConfig); - - reset(intentSynchronizer); - replay(intentSynchronizer); - peerConnectivityManager.start(); - verify(intentSynchronizer); - } - - /** - * Tests a corner case, when there is no Interface configured for one BGP - * peer. - */ - @Test - public void testNoPeerInterface() { - String peerSw100Eth1 = "192.168.200.1"; - peers.put(IpAddress.valueOf(peerSw100Eth1), - new BgpPeer("00:00:00:00:00:00:01:00", 1, peerSw100Eth1)); - testConnectionSetup(); - } - - /** - * Tests a corner case, when there is no Interface configured for one BGP - * speaker. - */ - @Ignore - @Test - public void testNoSpeakerInterface() { - BgpSpeaker bgpSpeaker100 = new BgpSpeaker( - "bgpSpeaker100", - "00:00:00:00:00:00:01:00", 100, - "00:00:00:00:01:00"); - List<InterfaceAddress> interfaceAddresses100 = new LinkedList<>(); - interfaceAddresses100.add(new InterfaceAddress(dpid1, 1, "192.168.10.201")); - interfaceAddresses100.add(new InterfaceAddress(dpid2, 1, "192.168.20.201")); - bgpSpeaker100.setInterfaceAddresses(interfaceAddresses100); - testConnectionSetup(); - } -} diff --git a/framework/src/onos/apps/sdnip/src/test/java/org/onosproject/sdnip/SdnIpFibTest.java b/framework/src/onos/apps/sdnip/src/test/java/org/onosproject/sdnip/SdnIpFibTest.java deleted file mode 100644 index 5466d520..00000000 --- a/framework/src/onos/apps/sdnip/src/test/java/org/onosproject/sdnip/SdnIpFibTest.java +++ /dev/null @@ -1,417 +0,0 @@ -/* - * Copyright 2015 Open Networking Laboratory - * - * 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. - */ - -package org.onosproject.sdnip; - -import com.google.common.collect.Sets; -import org.junit.Before; -import org.junit.Test; -import org.onlab.packet.Ethernet; -import org.onlab.packet.Ip4Address; -import org.onlab.packet.Ip4Prefix; -import org.onlab.packet.IpAddress; -import org.onlab.packet.IpPrefix; -import org.onlab.packet.MacAddress; -import org.onlab.packet.VlanId; -import org.onosproject.TestApplicationId; -import org.onosproject.core.ApplicationId; -import org.onosproject.incubator.net.intf.Interface; -import org.onosproject.incubator.net.intf.InterfaceService; -import org.onosproject.net.ConnectPoint; -import org.onosproject.net.DeviceId; -import org.onosproject.net.PortNumber; -import org.onosproject.net.flow.DefaultTrafficSelector; -import org.onosproject.net.flow.DefaultTrafficTreatment; -import org.onosproject.net.flow.TrafficSelector; -import org.onosproject.net.flow.TrafficTreatment; -import org.onosproject.net.host.InterfaceIpAddress; -import org.onosproject.net.intent.AbstractIntentTest; -import org.onosproject.net.intent.Key; -import org.onosproject.net.intent.MultiPointToSinglePointIntent; -import org.onosproject.routing.FibEntry; -import org.onosproject.routing.FibUpdate; -import org.onosproject.routing.IntentSynchronizationService; -import org.onosproject.routing.config.BgpPeer; -import org.onosproject.routing.config.RoutingConfigurationService; - -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; - -import static org.easymock.EasyMock.createMock; -import static org.easymock.EasyMock.expect; -import static org.easymock.EasyMock.replay; -import static org.easymock.EasyMock.reset; -import static org.easymock.EasyMock.verify; -import static org.onosproject.sdnip.TestIntentServiceHelper.eqExceptId; - -/** - * Unit tests for SdnIpFib. - */ -public class SdnIpFibTest extends AbstractIntentTest { - - private RoutingConfigurationService routingConfig; - private InterfaceService interfaceService; - - private static final ConnectPoint SW1_ETH1 = new ConnectPoint( - DeviceId.deviceId("of:0000000000000001"), - PortNumber.portNumber(1)); - - private static final ConnectPoint SW2_ETH1 = new ConnectPoint( - DeviceId.deviceId("of:0000000000000002"), - PortNumber.portNumber(1)); - - private static final ConnectPoint SW3_ETH1 = new ConnectPoint( - DeviceId.deviceId("of:0000000000000003"), - PortNumber.portNumber(1)); - - private static final ConnectPoint SW4_ETH1 = new ConnectPoint( - DeviceId.deviceId("of:0000000000000004"), - PortNumber.portNumber(1)); - - private SdnIpFib sdnipFib; - private IntentSynchronizationService intentSynchronizer; - private final Set<Interface> interfaces = Sets.newHashSet(); - - private static final ApplicationId APPID = TestApplicationId.create("SDNIP"); - - @Before - public void setUp() throws Exception { - super.setUp(); - - routingConfig = createMock(RoutingConfigurationService.class); - interfaceService = createMock(InterfaceService.class); - - // These will set expectations on routingConfig and interfaceService - setUpInterfaceService(); - setUpBgpPeers(); - - replay(routingConfig); - replay(interfaceService); - - intentSynchronizer = createMock(IntentSynchronizationService.class); - - sdnipFib = new SdnIpFib(APPID, interfaceService, intentSynchronizer); - } - - /** - * Sets up BGP peers in external networks. - */ - private void setUpBgpPeers() { - - Map<IpAddress, BgpPeer> peers = new HashMap<>(); - - String peerSw1Eth1 = "192.168.10.1"; - peers.put(IpAddress.valueOf(peerSw1Eth1), - new BgpPeer("00:00:00:00:00:00:00:01", 1, peerSw1Eth1)); - - // Two BGP peers are connected to switch 2 port 1. - String peer1Sw2Eth1 = "192.168.20.1"; - peers.put(IpAddress.valueOf(peer1Sw2Eth1), - new BgpPeer("00:00:00:00:00:00:00:02", 1, peer1Sw2Eth1)); - - String peer2Sw2Eth1 = "192.168.20.2"; - peers.put(IpAddress.valueOf(peer2Sw2Eth1), - new BgpPeer("00:00:00:00:00:00:00:02", 1, peer2Sw2Eth1)); - - String peer1Sw4Eth1 = "192.168.40.1"; - peers.put(IpAddress.valueOf(peer1Sw4Eth1), - new BgpPeer("00:00:00:00:00:00:00:04", 1, peer1Sw4Eth1)); - - expect(routingConfig.getBgpPeers()).andReturn(peers).anyTimes(); - } - - /** - * Sets up InterfaceService. - */ - private void setUpInterfaceService() { - Set<InterfaceIpAddress> interfaceIpAddresses1 = Sets.newHashSet(); - interfaceIpAddresses1.add(new InterfaceIpAddress( - IpAddress.valueOf("192.168.10.101"), - IpPrefix.valueOf("192.168.10.0/24"))); - Interface sw1Eth1 = new Interface(SW1_ETH1, - interfaceIpAddresses1, MacAddress.valueOf("00:00:00:00:00:01"), - VlanId.NONE); - interfaces.add(sw1Eth1); - - Set<InterfaceIpAddress> interfaceIpAddresses2 = Sets.newHashSet(); - interfaceIpAddresses2.add( - new InterfaceIpAddress(IpAddress.valueOf("192.168.20.101"), - IpPrefix.valueOf("192.168.20.0/24"))); - Interface sw2Eth1 = new Interface(SW2_ETH1, - interfaceIpAddresses2, MacAddress.valueOf("00:00:00:00:00:02"), - VlanId.NONE); - interfaces.add(sw2Eth1); - - Set<InterfaceIpAddress> interfaceIpAddresses3 = Sets.newHashSet(); - interfaceIpAddresses3.add( - new InterfaceIpAddress(IpAddress.valueOf("192.168.30.101"), - IpPrefix.valueOf("192.168.30.0/24"))); - Interface sw3Eth1 = new Interface(SW3_ETH1, - interfaceIpAddresses3, MacAddress.valueOf("00:00:00:00:00:03"), - VlanId.NONE); - interfaces.add(sw3Eth1); - - InterfaceIpAddress interfaceIpAddress4 = - new InterfaceIpAddress(IpAddress.valueOf("192.168.40.101"), - IpPrefix.valueOf("192.168.40.0/24")); - Interface sw4Eth1 = new Interface(SW4_ETH1, - Sets.newHashSet(interfaceIpAddress4), - MacAddress.valueOf("00:00:00:00:00:04"), - VlanId.vlanId((short) 1)); - - expect(interfaceService.getInterfacesByPort(SW4_ETH1)).andReturn( - Collections.singleton(sw4Eth1)).anyTimes(); - expect(interfaceService.getMatchingInterface(Ip4Address.valueOf("192.168.40.1"))) - .andReturn(sw4Eth1).anyTimes(); - - interfaces.add(sw4Eth1); - - expect(interfaceService.getInterfacesByPort(SW1_ETH1)).andReturn( - Collections.singleton(sw1Eth1)).anyTimes(); - expect(interfaceService.getMatchingInterface(Ip4Address.valueOf("192.168.10.1"))) - .andReturn(sw1Eth1).anyTimes(); - expect(interfaceService.getInterfacesByPort(SW2_ETH1)).andReturn( - Collections.singleton(sw2Eth1)).anyTimes(); - expect(interfaceService.getMatchingInterface(Ip4Address.valueOf("192.168.20.1"))) - .andReturn(sw2Eth1).anyTimes(); - expect(interfaceService.getInterfacesByPort(SW3_ETH1)).andReturn( - Collections.singleton(sw3Eth1)).anyTimes(); - expect(interfaceService.getMatchingInterface(Ip4Address.valueOf("192.168.30.1"))) - .andReturn(sw3Eth1).anyTimes(); - expect(interfaceService.getInterfaces()).andReturn(interfaces).anyTimes(); - } - - /** - * Tests adding a FIB entry to the IntentSynchronizer. - * - * We verify that the synchronizer records the correct state and that the - * correct intent is submitted to the IntentService. - */ - @Test - public void testFibAdd() { - IpPrefix prefix = Ip4Prefix.valueOf("1.1.1.0/24"); - FibEntry fibEntry = new FibEntry(prefix, - Ip4Address.valueOf("192.168.10.1"), - MacAddress.valueOf("00:00:00:00:00:01")); - - // Construct a MultiPointToSinglePointIntent intent - TrafficSelector.Builder selectorBuilder = - DefaultTrafficSelector.builder(); - selectorBuilder.matchEthType(Ethernet.TYPE_IPV4).matchIPDst( - fibEntry.prefix()); - - TrafficTreatment.Builder treatmentBuilder = - DefaultTrafficTreatment.builder(); - treatmentBuilder.setEthDst(MacAddress.valueOf("00:00:00:00:00:01")); - - Set<ConnectPoint> ingressPoints = new HashSet<>(); - ingressPoints.add(SW2_ETH1); - ingressPoints.add(SW3_ETH1); - ingressPoints.add(SW4_ETH1); - - MultiPointToSinglePointIntent intent = - MultiPointToSinglePointIntent.builder() - .appId(APPID) - .key(Key.of(prefix.toString(), APPID)) - .selector(selectorBuilder.build()) - .treatment(treatmentBuilder.build()) - .ingressPoints(ingressPoints) - .egressPoint(SW1_ETH1) - .constraints(SdnIpFib.CONSTRAINTS) - .build(); - - // Setup the expected intents - intentSynchronizer.submit(eqExceptId(intent)); - replay(intentSynchronizer); - - // Send in the UPDATE FibUpdate - FibUpdate fibUpdate = new FibUpdate(FibUpdate.Type.UPDATE, fibEntry); - sdnipFib.update(Collections.singleton(fibUpdate), Collections.emptyList()); - - verify(intentSynchronizer); - } - - /** - * Tests adding a FIB entry with to a next hop in a VLAN. - * - * We verify that the synchronizer records the correct state and that the - * correct intent is submitted to the IntentService. - */ - @Test - public void testFibAddWithVlan() { - IpPrefix prefix = Ip4Prefix.valueOf("3.3.3.0/24"); - FibEntry fibEntry = new FibEntry(prefix, - Ip4Address.valueOf("192.168.40.1"), - MacAddress.valueOf("00:00:00:00:00:04")); - - // Construct a MultiPointToSinglePointIntent intent - TrafficSelector.Builder selectorBuilder = - DefaultTrafficSelector.builder(); - selectorBuilder.matchEthType(Ethernet.TYPE_IPV4) - .matchIPDst(fibEntry.prefix()) - .matchVlanId(VlanId.ANY); - - TrafficTreatment.Builder treatmentBuilder = - DefaultTrafficTreatment.builder(); - treatmentBuilder.setEthDst(MacAddress.valueOf("00:00:00:00:00:04")) - .setVlanId(VlanId.vlanId((short) 1)); - - Set<ConnectPoint> ingressPoints = new HashSet<>(); - ingressPoints.add(SW1_ETH1); - ingressPoints.add(SW2_ETH1); - ingressPoints.add(SW3_ETH1); - - MultiPointToSinglePointIntent intent = - MultiPointToSinglePointIntent.builder() - .appId(APPID) - .key(Key.of(prefix.toString(), APPID)) - .selector(selectorBuilder.build()) - .treatment(treatmentBuilder.build()) - .ingressPoints(ingressPoints) - .egressPoint(SW4_ETH1) - .constraints(SdnIpFib.CONSTRAINTS) - .build(); - - // Setup the expected intents - intentSynchronizer.submit(eqExceptId(intent)); - - replay(intentSynchronizer); - - // Send in the UPDATE FibUpdate - FibUpdate fibUpdate = new FibUpdate(FibUpdate.Type.UPDATE, fibEntry); - sdnipFib.update(Collections.singleton(fibUpdate), Collections.emptyList()); - - verify(intentSynchronizer); - } - - /** - * Tests updating a FIB entry. - * - * We verify that the synchronizer records the correct state and that the - * correct intent is submitted to the IntentService. - */ - @Test - public void testFibUpdate() { - // Firstly add a route - testFibAdd(); - - IpPrefix prefix = Ip4Prefix.valueOf("1.1.1.0/24"); - - // Start to construct a new route entry and new intent - FibEntry fibEntryUpdate = new FibEntry(prefix, - Ip4Address.valueOf("192.168.20.1"), - MacAddress.valueOf("00:00:00:00:00:02")); - - // Construct a new MultiPointToSinglePointIntent intent - TrafficSelector.Builder selectorBuilderNew = - DefaultTrafficSelector.builder(); - selectorBuilderNew.matchEthType(Ethernet.TYPE_IPV4).matchIPDst( - fibEntryUpdate.prefix()); - - TrafficTreatment.Builder treatmentBuilderNew = - DefaultTrafficTreatment.builder(); - treatmentBuilderNew.setEthDst(MacAddress.valueOf("00:00:00:00:00:02")); - - Set<ConnectPoint> ingressPointsNew = new HashSet<>(); - ingressPointsNew.add(SW1_ETH1); - ingressPointsNew.add(SW3_ETH1); - ingressPointsNew.add(SW4_ETH1); - - MultiPointToSinglePointIntent intentNew = - MultiPointToSinglePointIntent.builder() - .appId(APPID) - .key(Key.of(prefix.toString(), APPID)) - .selector(selectorBuilderNew.build()) - .treatment(treatmentBuilderNew.build()) - .ingressPoints(ingressPointsNew) - .egressPoint(SW2_ETH1) - .constraints(SdnIpFib.CONSTRAINTS) - .build(); - - // Set up test expectation - reset(intentSynchronizer); - - // Setup the expected intents - intentSynchronizer.submit(eqExceptId(intentNew)); - replay(intentSynchronizer); - - // Send in the UPDATE FibUpdate - FibUpdate fibUpdate = new FibUpdate(FibUpdate.Type.UPDATE, - fibEntryUpdate); - sdnipFib.update(Collections.singletonList(fibUpdate), - Collections.emptyList()); - - verify(intentSynchronizer); - } - - /** - * Tests deleting a FIB entry. - * - * We verify that the synchronizer records the correct state and that the - * correct intent is withdrawn from the IntentService. - */ - @Test - public void testFibDelete() { - // Firstly add a route - testFibAdd(); - - IpPrefix prefix = Ip4Prefix.valueOf("1.1.1.0/24"); - - // Construct the existing route entry - FibEntry fibEntry = new FibEntry(prefix, null, null); - - // Construct the existing MultiPointToSinglePoint intent - TrafficSelector.Builder selectorBuilder = - DefaultTrafficSelector.builder(); - selectorBuilder.matchEthType(Ethernet.TYPE_IPV4).matchIPDst( - fibEntry.prefix()); - - TrafficTreatment.Builder treatmentBuilder = - DefaultTrafficTreatment.builder(); - treatmentBuilder.setEthDst(MacAddress.valueOf("00:00:00:00:00:01")); - - Set<ConnectPoint> ingressPoints = new HashSet<>(); - ingressPoints.add(SW2_ETH1); - ingressPoints.add(SW3_ETH1); - ingressPoints.add(SW4_ETH1); - - MultiPointToSinglePointIntent addedIntent = - MultiPointToSinglePointIntent.builder() - .appId(APPID) - .key(Key.of(prefix.toString(), APPID)) - .selector(selectorBuilder.build()) - .treatment(treatmentBuilder.build()) - .ingressPoints(ingressPoints) - .egressPoint(SW1_ETH1) - .constraints(SdnIpFib.CONSTRAINTS) - .build(); - - // Set up expectation - reset(intentSynchronizer); - // Setup the expected intents - intentSynchronizer.withdraw(eqExceptId(addedIntent)); - replay(intentSynchronizer); - - // Send in the DELETE FibUpdate - FibUpdate fibUpdate = new FibUpdate(FibUpdate.Type.DELETE, fibEntry); - sdnipFib.update(Collections.emptyList(), Collections.singletonList(fibUpdate)); - - verify(intentSynchronizer); - } -} diff --git a/framework/src/onos/apps/sdnip/src/test/java/org/onosproject/sdnip/TestIntentServiceHelper.java b/framework/src/onos/apps/sdnip/src/test/java/org/onosproject/sdnip/TestIntentServiceHelper.java deleted file mode 100644 index 4df7f9de..00000000 --- a/framework/src/onos/apps/sdnip/src/test/java/org/onosproject/sdnip/TestIntentServiceHelper.java +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright 2014-2015 Open Networking Laboratory - * - * 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. - */ -package org.onosproject.sdnip; - -import org.easymock.IArgumentMatcher; -import org.onosproject.net.intent.Intent; -import org.onosproject.net.intent.IntentUtils; - -import static org.easymock.EasyMock.reportMatcher; - -/** - * Helper class for testing operations submitted to the IntentService. - */ -public final class TestIntentServiceHelper { - /** - * Default constructor to prevent instantiation. - */ - private TestIntentServiceHelper() { - } - - /** - * Matcher method to set the expected intent to match against - * (ignoring the intent ID for the intent). - * - * @param intent the expected Intent - * @return the submitted Intent - */ - static Intent eqExceptId(Intent intent) { - reportMatcher(new IdAgnosticIntentMatcher(intent)); - return intent; - } - - /* - * EasyMock matcher that matches {@link Intent} but - * ignores the {@link IntentId} when matching. - * <p/> - * The normal intent equals method tests that the intent IDs are equal, - * however in these tests we can't know what the intent IDs will be in - * advance, so we can't set up expected intents with the correct IDs. Thus, - * the solution is to use an EasyMock matcher that verifies that all the - * value properties of the provided intent match the expected values, but - * ignores the intent ID when testing equality. - */ - private static final class IdAgnosticIntentMatcher implements - IArgumentMatcher { - - private final Intent intent; - private String providedString; - - /** - * Constructor taking the expected intent to match against. - * - * @param intent the expected intent - */ - public IdAgnosticIntentMatcher(Intent intent) { - this.intent = intent; - } - - @Override - public void appendTo(StringBuffer strBuffer) { - strBuffer.append("IntentMatcher unable to match: " - + providedString); - } - - @Override - public boolean matches(Object object) { - if (!(object instanceof Intent)) { - return false; - } - - Intent providedIntent = (Intent) object; - providedString = providedIntent.toString(); - - return IntentUtils.equals(intent, providedIntent); - } - } - -} |