2 * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved.
\r
4 * This program and the accompanying materials are made available under the
\r
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
\r
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
\r
9 package org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow;
\r
11 import static org.junit.Assert.assertEquals;
\r
12 import static org.junit.Assert.assertTrue;
\r
13 import static org.mockito.Mockito.mock;
\r
14 import static org.mockito.Mockito.when;
\r
16 import org.junit.Assert;
\r
17 import org.junit.Before;
\r
18 import org.junit.Test;
\r
19 import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.PolicyManager;
\r
20 import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow.OrdinalFactory.EndpointFwdCtxOrdinals;
\r
21 import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.mapper.policyenforcer.PolicyEnforcer.NetworkElements;
\r
22 import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.node.SwitchManager;
\r
23 import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.sfcutils.SfcNshHeader;
\r
24 import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.sfcutils.SfcNshHeader.SfcNshHeaderBuilder;
\r
25 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;
\r
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.Flow;
\r
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
\r
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
\r
30 public class ChainActionFlowsTest {
\r
32 private SfcNshHeader sfcNshHeader;
\r
33 private NodeConnectorId tunPort;
\r
34 private NetworkElements netElements;
\r
35 private PolicyManager policyManager;
\r
36 private SwitchManager switchManager;
\r
37 private Ipv4Address ip1 = new Ipv4Address("10.1.1.1");
\r
38 private Ipv4Address ip2 = new Ipv4Address("10.1.1.2");
\r
41 public void setup() {
\r
42 policyManager = mock(PolicyManager.class);
\r
43 switchManager = mock(SwitchManager.class);
\r
44 EndpointFwdCtxOrdinals ords = mock(EndpointFwdCtxOrdinals.class);
\r
45 sfcNshHeader = mock(SfcNshHeader.class);
\r
46 netElements = mock(NetworkElements.class);
\r
47 when(netElements.getSrcNodeId()).thenReturn(new NodeId("openflow:1"));
\r
48 when(netElements.getSrcEpOrdinals()).thenReturn(ords);
\r
49 when(netElements.getSrcEpOrdinals().getL3Id()).thenReturn(7);
\r
50 when(netElements.getDstNodeId()).thenReturn(new NodeId("openflow:1"));
\r
51 when(netElements.getDstEpOrdinals()).thenReturn(ords);
\r
52 when(netElements.getDstEpOrdinals().getL3Id()).thenReturn(7);
\r
53 when(netElements.getLocalNodeId()).thenReturn(new NodeId("openflow:1"));
\r
54 tunPort = new NodeConnectorId("openflow:1:42");
\r
58 public void createExternalFlowTest() throws Exception {
\r
59 // Note C1 != tunDest ie ip1 and ip2 - output action
\r
60 sfcNshHeader = new SfcNshHeaderBuilder().setNshMetaC1(SfcNshHeader.convertIpAddressToLong(ip1))
\r
61 .setNshTunIpDst(ip2)
\r
63 .setNshNsiToChain((short) 1)
\r
66 Flow flow = ChainActionFlows.createExternalFlow(sfcNshHeader, tunPort, netElements, policyManager, switchManager, ip2);
\r
67 assertEquals(policyManager.getTABLEID_EXTERNAL_MAPPER(), flow.getTableId().shortValue());
\r
68 assertTrue(flow.getInstructions().getInstruction()
\r
69 .get(0).getInstruction().toString().contains("_outputAction=OutputAction"));
\r
71 // Note C1 == tunDest ie ip1
\r
72 sfcNshHeader = new SfcNshHeaderBuilder().setNshMetaC1(SfcNshHeader.convertIpAddressToLong(ip1))
\r
73 .setNshTunIpDst(ip1)
\r
75 .setNshNsiToChain((short) 1)
\r
78 flow = ChainActionFlows.createExternalFlow(sfcNshHeader, tunPort, netElements, policyManager, switchManager, ip2);
\r
80 assertTrue(flow.getInstructions().getInstruction()
\r
81 .get(0).getInstruction().toString().contains("_outputAction=OutputAction"));
\r
85 public void returnOfPortFromNodeConnectorTest() {
\r
86 NodeConnectorId ncId = new NodeConnectorId("openflow:1:42");
\r
87 Integer port = ChainActionFlows.returnOfPortFromNodeConnector(ncId);
\r
88 assertEquals(new Integer("42"), port);
\r
90 ncId = new NodeConnectorId("openflow:1");
\r
91 Assert.assertNull(ChainActionFlows.returnOfPortFromNodeConnector(ncId));
\r