64a8a61e510e3c4b58d2ec99e042ebd94ca516ad
[groupbasedpolicy.git] / renderers / ofoverlay / src / test / java / org / opendaylight / groupbasedpolicy / renderer / ofoverlay / mapper / MapperUtilsTest.java
1 package org.opendaylight.groupbasedpolicy.renderer.ofoverlay.mapper;
2
3 import org.opendaylight.groupbasedpolicy.dto.IndexedTenant;
4 import org.opendaylight.groupbasedpolicy.dto.PolicyInfo;
5 import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.OfContext;
6 import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.OfWriter;
7 import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.PolicyManager;
8 import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.endpoint.EndpointManager;
9 import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow.FlowUtils;
10 import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.node.SwitchManager;
11 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress;
12 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;
13 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Address;
14 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowId;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.Flow;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.FlowBuilder;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Instructions;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.L2BridgeDomainId;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.L2FloodDomainId;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.NetworkDomainId;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoint.fields.L3Address;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoint.fields.L3AddressBuilder;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.Endpoint;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.EndpointBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.EndpointL3;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.EndpointL3Builder;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.l3endpoint.rev151217.NatAddress;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.l3endpoint.rev151217.NatAddressBuilder;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.OfOverlayContext;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.OfOverlayContextBuilder;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.Segmentation;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.SegmentationBuilder;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.TenantBuilder;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.ForwardingContextBuilder;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L2FloodDomain;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L2FloodDomainBuilder;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
42
43 import java.util.ArrayList;
44 import java.util.List;
45
46 public abstract class MapperUtilsTest {
47
48     protected static final String IPV4_1 = "170.0.0.1";
49     protected static final String IPV4_2 = "190.0.0.1";
50     protected static final String MAC_0 = "00:00:00:00:00:00";
51     protected static final String MAC_1 = "00:00:00:00:00:01";
52     protected static final String CONNECTOR_0 = "0";
53     protected static final String CONNECTOR_1 = "1";
54     protected static final String IP_PREFIX_32 = "/32";
55     protected static final String IP_PREFIX_128 = "/128";
56     protected static final String IPV6_1 = "2000:db80:85a3:08ba:0947:8a2e:3a70:7334";
57     protected static final String IPV6_2 = "0947:db80:3a70:7334:85a3:8a2e:2000:08ba";
58     protected static final String DHCP_IP = "255.255.255.255";
59     protected static final String TENANT_ID = "dummy tenant";
60     protected static final String NODE_ID = "dummy node";
61     protected static final String L2 = "L2";
62     private static final String DOMAIN_ID = "dummy id";
63     protected final NodeId nodeId = new NodeId(NODE_ID);
64     protected Short tableId;
65     protected OfContext ctx;
66     protected OfWriter ofWriter;
67     protected SwitchManager switchManager;
68     protected PolicyManager policyManager;
69     protected EndpointManager endpointManager;
70     protected PolicyInfo policyInfo;
71
72     protected Flow flowCreator(FlowId flowId, short tableId, Integer priority, Match match, Instructions instructions) {
73         FlowBuilder flowBuilder = FlowUtils.base(tableId);
74         flowBuilder.setId(flowId)
75                 .setPriority(priority)
76                 .setMatch(match)
77                 .setInstructions(instructions);
78
79         return flowBuilder.build();
80     }
81
82     protected Endpoint endpointCreator(IpAddress ip, MacAddress mac, NodeConnectorId nodeConnectorId) {
83         EndpointBuilder endpointBuilder = new EndpointBuilder();
84
85         // Set tenant
86         endpointBuilder.setTenant(new TenantId(TENANT_ID));
87
88         // Set L3 address
89         if (ip != null) {
90             List<L3Address> l3Addresses = new ArrayList<>();
91             L3AddressBuilder l3AddressBuilder = new L3AddressBuilder();
92             l3AddressBuilder.setIpAddress(ip);
93             l3Addresses.add(l3AddressBuilder.build());
94             endpointBuilder.setL3Address(l3Addresses);
95         }
96
97         // Set Mac address
98         endpointBuilder.setMacAddress(new MacAddress(mac));
99
100         // Augment node connector
101         OfOverlayContextBuilder ofOverlayContextBuilder = new OfOverlayContextBuilder();
102         ofOverlayContextBuilder.setNodeConnectorId(new NodeConnectorId(nodeConnectorId));
103         endpointBuilder.addAugmentation(OfOverlayContext.class, ofOverlayContextBuilder.build());
104
105         // Set network containment
106         endpointBuilder.setNetworkContainment(new NetworkDomainId(DOMAIN_ID));
107
108         return endpointBuilder.build();
109     }
110
111     protected EndpointL3 endpointL3Creator(String ip, String insideIp, String mac, String l2, boolean ipv6) {
112         EndpointL3Builder endpointL3Builder = new EndpointL3Builder();
113
114         // Set NAT address augmentation
115         if (ip != null) {
116             if (ipv6) {
117                 NatAddressBuilder natAddressBuilder = new NatAddressBuilder();
118                 natAddressBuilder.setNatAddress(new IpAddress(new Ipv6Address(ip)));
119                 endpointL3Builder.addAugmentation(NatAddress.class, natAddressBuilder.build());
120             } else {
121                 NatAddressBuilder natAddressBuilder = new NatAddressBuilder();
122                 natAddressBuilder.setNatAddress(new IpAddress(new Ipv4Address(ip)));
123                 endpointL3Builder.addAugmentation(NatAddress.class, natAddressBuilder.build());
124             }
125         }
126
127         // Set IP address
128         if (insideIp != null) {
129             if (ipv6) {
130                 endpointL3Builder.setIpAddress(new IpAddress(new Ipv6Address(insideIp)));
131             } else {
132                 endpointL3Builder.setIpAddress(new IpAddress(new Ipv4Address(insideIp)));
133             }
134         }
135
136         // Set MAC
137         if (mac != null) {
138             endpointL3Builder.setMacAddress(new MacAddress(mac));
139         }
140
141         // Set L2 context
142         if (l2 != null) {
143             endpointL3Builder.setL2Context(new L2BridgeDomainId(l2));
144         }
145
146         return endpointL3Builder.build();
147
148     }
149
150     protected IndexedTenant tenantCreator() {
151         TenantBuilder tenantBuilder = new TenantBuilder();
152         tenantBuilder.setId(new TenantId(TENANT_ID));
153
154         // Set forwarding context
155         SegmentationBuilder segmentationBuilder = new SegmentationBuilder();
156         segmentationBuilder.setSegmentationId(1);
157         List<L2FloodDomain> l2FloodDomains = new ArrayList<>();
158         L2FloodDomainBuilder l2FloodDomainBuilder = new L2FloodDomainBuilder();
159         l2FloodDomainBuilder.setId(new L2FloodDomainId("l2id"));
160         l2FloodDomainBuilder.addAugmentation(Segmentation.class, segmentationBuilder.build());
161         l2FloodDomains.add(l2FloodDomainBuilder.build());
162         ForwardingContextBuilder forwardingContextBuilder = new ForwardingContextBuilder();
163         forwardingContextBuilder.setL2FloodDomain(l2FloodDomains);
164         tenantBuilder.setForwardingContext(forwardingContextBuilder.build());
165
166         return new IndexedTenant(tenantBuilder.build());
167     }
168
169     protected List<L2FloodDomain> l2FloodDomainsCreator() {
170         SegmentationBuilder segmentationBuilder = new SegmentationBuilder();
171         segmentationBuilder.setSegmentationId(1);
172         List<L2FloodDomain> l2FloodDomains = new ArrayList<>();
173         L2FloodDomainBuilder l2FloodDomainBuilder = new L2FloodDomainBuilder();
174         l2FloodDomainBuilder.setId(new L2FloodDomainId("l2id"));
175         l2FloodDomainBuilder.addAugmentation(Segmentation.class, segmentationBuilder.build());
176         l2FloodDomains.add(l2FloodDomainBuilder.build());
177         return l2FloodDomains;
178     }
179 }