fa6e4dfb28c1abc729315ea50c8a42aa298f7162
[groupbasedpolicy.git] / renderers / ofoverlay / src / test / java / org / opendaylight / groupbasedpolicy / renderer / ofoverlay / mapper / portsecurity / PortSecurityTest.java
1 package org.opendaylight.groupbasedpolicy.renderer.ofoverlay.mapper.portsecurity;
2
3 import org.junit.Before;
4 import org.junit.Test;
5 import org.mockito.InOrder;
6 import org.mockito.Mockito;
7 import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.OfContext;
8 import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.OfWriter;
9 import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.PolicyManager;
10 import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.endpoint.EndpointManager;
11 import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.mapper.MapperUtilsTest;
12 import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.node.SwitchManager;
13 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress;
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.Endpoint;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.EndpointBuilder;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.overlay.rev150105.TunnelTypeVxlan;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.overlay.rev150105.TunnelTypeVxlanGpe;
21
22 import java.util.HashSet;
23 import java.util.Set;
24
25 import static org.mockito.Mockito.*;
26
27 public class PortSecurityTest extends MapperUtilsTest {
28
29     @Before
30     public void init() {
31         ctx = mock(OfContext.class);
32         tableId = 1;
33         policyManager = mock(PolicyManager.class);
34         switchManager = mock(SwitchManager.class);
35         endpointManager = mock(EndpointManager.class);
36         ofWriter = mock(OfWriter.class);
37     }
38
39     @Test
40     public void testSyncFlows() throws Exception {
41
42         // Node connectors
43         Set<NodeConnectorId> connectors = new HashSet<>();
44         connectors.add(new NodeConnectorId(CONNECTOR_0));
45
46         // Prepare endpoint
47         EndpointBuilder endpointBuilder = new EndpointBuilder(buildEndpoint(IPV4_0, MAC_0, CONNECTOR_0)
48                 .build());
49         endpointBuilder.setTenant(getTestIndexedTenant().getTenant().getId());
50         Endpoint endpoint = endpointBuilder.build();
51
52         when(ctx.getEndpointManager()).thenReturn(endpointManager);
53         when(ctx.getSwitchManager()).thenReturn(switchManager);
54         when(ctx.getPolicyManager()).thenReturn(policyManager);
55         when(ctx.getTenant(Mockito.any(TenantId.class))).thenReturn(getTestIndexedTenant());
56         when(endpointManager.getEndpointNodeConnectorId(Mockito.any(Endpoint.class)))
57                 .thenReturn(new NodeConnectorId(CONNECTOR_0));
58         when(switchManager.getTunnelPort(NODE_ID, TunnelTypeVxlan.class)).thenReturn(new NodeConnectorId(CONNECTOR_0));
59         when(switchManager.getTunnelPort(NODE_ID, TunnelTypeVxlanGpe.class)).thenReturn(new NodeConnectorId(CONNECTOR_1));
60         when(switchManager.getExternalPorts(Mockito.any(NodeId.class))).thenReturn(connectors);
61
62         PortSecurityFlows flows = mock(PortSecurityFlows.class);
63         PortSecurity portSecurity = new PortSecurity(ctx, tableId);
64         portSecurity.syncFlows(flows, NODE_ID, endpoint, ofWriter);
65
66         // Verify usage
67         verify(flows, times(4)).dropFlow(Mockito.anyInt(), Mockito.anyLong(), eq(ofWriter));
68         verify(flows, times(2)).allowFromTunnelFlow(Mockito.anyShort(), Mockito.anyInt(),
69                 Mockito.any(NodeConnectorId.class), eq(ofWriter));
70         verify(flows, times(2)).allowFromTunnelFlow(Mockito.anyShort(), Mockito.anyInt(),
71                 Mockito.any(NodeConnectorId.class), eq(ofWriter));
72         verify(flows, times(2)).l3Flow(Mockito.anyShort(), Mockito.any(Endpoint.class), Mockito.any(NodeConnectorId.class),
73                 Mockito.any(MacAddress.class), Mockito.anyInt(), Mockito.anyBoolean(), eq(ofWriter));
74         verify(flows, times(1)).l3DhcpDoraFlow(Mockito.anyShort(), Mockito.any(NodeConnectorId.class),
75                 Mockito.any(MacAddress.class), Mockito.anyInt(), eq(ofWriter));
76         verify(flows, times(1)).l2flow(Mockito.anyShort(), Mockito.any(NodeConnectorId.class),
77                 Mockito.any(MacAddress.class), Mockito.anyInt(), eq(ofWriter));
78         verify(flows, times(1)).popVlanTagsOnExternalPortFlows(Mockito.anyShort(), Mockito.any(NodeConnectorId.class),
79                 eq(getL2FloodDomainList(false)), Mockito.anyInt(), eq(ofWriter));
80         verify(flows, times(1)).allowFromExternalPortFlow(Mockito.anyShort(), Mockito.any(NodeConnectorId.class),
81                 Mockito.anyInt(), eq(ofWriter));
82
83         // Verify order
84         InOrder order = inOrder(ctx, flows);
85         order.verify(flows, times(4)).dropFlow(Mockito.anyInt(), Mockito.anyLong(), eq(ofWriter));
86         order.verify(ctx, times(1)).getPolicyManager();
87         order.verify(ctx, times(1)).getSwitchManager();
88         order.verify(flows, times(1)).allowFromTunnelFlow(Mockito.anyShort(), Mockito.anyInt(),
89                 Mockito.any(NodeConnectorId.class), eq(ofWriter));
90         order.verify(ctx, times(1)).getSwitchManager();
91         order.verify(flows, times(1)).allowFromTunnelFlow(Mockito.anyShort(), Mockito.anyInt(),
92                 Mockito.any(NodeConnectorId.class), eq(ofWriter));
93         order.verify(ctx, times(1)).getEndpointManager();
94         order.verify(flows, times(1)).l3Flow(Mockito.anyShort(), Mockito.any(Endpoint.class), Mockito.any(NodeConnectorId.class),
95                 Mockito.any(MacAddress.class), Mockito.anyInt(), eq(false), eq(ofWriter));
96         order.verify(flows, times(1)).l3Flow(Mockito.anyShort(), Mockito.any(Endpoint.class), Mockito.any(NodeConnectorId.class),
97                 Mockito.any(MacAddress.class), Mockito.anyInt(), eq(true), eq(ofWriter));
98         order.verify(flows, times(1)).l3DhcpDoraFlow(Mockito.anyShort(), Mockito.any(NodeConnectorId.class),
99                 Mockito.any(MacAddress.class), Mockito.anyInt(), eq(ofWriter));
100         order.verify(flows, times(1)).l2flow(Mockito.anyShort(), Mockito.any(NodeConnectorId.class),
101                 Mockito.any(MacAddress.class), Mockito.anyInt(), eq(ofWriter));
102         order.verify(ctx, times(1)).getPolicyManager();
103         order.verify(ctx, times(1)).getSwitchManager();
104         order.verify(ctx, times(2)).getTenant(Mockito.any(TenantId.class));
105         order.verify(flows, times(1)).popVlanTagsOnExternalPortFlows(Mockito.anyShort(), Mockito.any(NodeConnectorId.class),
106                 eq(getL2FloodDomainList(false)), Mockito.anyInt(), eq(ofWriter));
107         order.verify(flows, times(1)).allowFromExternalPortFlow(Mockito.anyShort(), Mockito.any(NodeConnectorId.class),
108                 Mockito.anyInt(), eq(ofWriter));
109     }
110 }