Bug 5617: OfOverlay refactoring initial + PortSecurity
[groupbasedpolicy.git] / renderers / ofoverlay / src / test / java / org / opendaylight / groupbasedpolicy / renderer / ofoverlay / flow / ChainActionFlowsTest.java
1 /*\r
2  * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved.\r
3  *\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
7  */\r
8 \r
9 package org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow;\r
10 \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
15 \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
29 \r
30 public class ChainActionFlowsTest {\r
31 \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
39 \r
40     @Before\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
55     }\r
56 \r
57     @Test\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
62                 .setNshMetaC2(7L)\r
63                 .setNshNsiToChain((short) 1)\r
64                 .build();\r
65 \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
70 \r
71         // Note C1 == tunDest ie ip1\r
72         sfcNshHeader = new SfcNshHeaderBuilder().setNshMetaC1(SfcNshHeader.convertIpAddressToLong(ip1))\r
73                 .setNshTunIpDst(ip1)\r
74                 .setNshMetaC2(7L)\r
75                 .setNshNsiToChain((short) 1)\r
76                 .build();\r
77 \r
78         flow = ChainActionFlows.createExternalFlow(sfcNshHeader, tunPort, netElements, policyManager, switchManager, ip2);\r
79 \r
80         assertTrue(flow.getInstructions().getInstruction()\r
81                 .get(0).getInstruction().toString().contains("_outputAction=OutputAction"));\r
82     }\r
83 \r
84     @Test\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
89 \r
90         ncId = new NodeConnectorId("openflow:1");\r
91         Assert.assertNull(ChainActionFlows.returnOfPortFromNodeConnector(ncId));\r
92     }\r
93 }\r