2 * Copyright (C) 2014 Cisco Systems, Inc.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 * Authors : Thomas Bachman
11 package org.opendaylight.groupbasedpolicy.renderer.opflex;
13 import static org.junit.Assert.assertTrue;
15 import java.util.ArrayList;
16 import java.util.List;
19 import org.junit.Before;
20 import org.junit.Test;
21 import org.mockito.MockitoAnnotations;
22 import org.opendaylight.groupbasedpolicy.renderer.opflex.lib.messages.ManagedObject;
23 import org.opendaylight.groupbasedpolicy.renderer.opflex.mit.AgentOvsMit;
24 import org.opendaylight.groupbasedpolicy.renderer.opflex.mit.MitLib;
25 import org.opendaylight.groupbasedpolicy.renderer.opflex.mit.PolicyUri;
26 import org.opendaylight.groupbasedpolicy.resolver.RuleGroup;
27 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Uri;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ContractId;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.EndpointGroupId;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.Name;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.NetworkDomainId;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SelectorName;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.Tenant;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.TenantBuilder;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.EndpointGroup;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.EndpointGroup.IntraGroupPolicy;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.EndpointGroupBuilder;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ConsumerNamedSelector;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ConsumerNamedSelectorBuilder;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ProviderNamedSelector;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ProviderNamedSelectorBuilder;
43 import org.slf4j.Logger;
44 import org.slf4j.LoggerFactory;
50 public class MessageUtilsTest {
51 protected static final Logger logger = LoggerFactory.getLogger(MessageUtilsTest.class);
52 public static final String SEP = "/";
53 public static final String TENANT_PREFIX = "/PolicyUniverse/PolicySpace";
54 public static final String CONTRACT_RN = "contract";
55 public static final String EPG_RN = "GbpEpGroup";
56 public static final String TENANT_UUID = "8ca978fa-05bc-4120-b037-f74802d18396";
57 public static final String EPG_UUID = "420c5855-0578-4ca5-b3d2-3057e640e55a";
58 public static final String EPG_NAME = "webFarm1";
60 public static final String TEST_TARGET_NAME1 = "target1";
61 public static final String TEST_TARGET_NAME2 = "target2";
62 public static final String TEST_CONTRACT_ID1 = "bcef4a60-ce45-4eb2-9a47-5d93bf6877bc";
63 public static final String TEST_CONTRACT_ID2 = "e8de1a72-6d0b-45e4-9980-a425b2b4a40d";
64 public static final Integer TEST_RULE_ORDER = 1;
65 public static final String TEST_RULE_NAME1 = "rule1";
66 public static final String TEST_ACTION_NAME1 = "action1";
67 public static final String TEST_ACTION_NAME2 = "action2";
68 public static final Integer TEST_ACTION_ORDER1 = 1;
69 public static final Integer TEST_ACTION_ORDER2 = 2;
70 public static final String TEST_CLASSIFIER_NAME1 = "classifier1";
71 public static final String TEST_CLASSIFIER_NAME2 = "classifier2";
72 public static final String TEST_CLASSIFIER_INSTANCE_NAME1 = "classifierInstance1";
73 public static final String TEST_CLASSIFIER_INSTANCE_NAME2 = "classifierInstance2";
74 private static final String TEST_URI1 = TENANT_PREFIX + PolicyUri.POLICY_URI_SEP + TENANT_UUID + SEP + EPG_RN + SEP + EPG_UUID;
75 private static final String TEST_SELECTOR_NAME1 = "selector1";
76 private static final String TEST_NETWORK_DOMAIN_ID = "9AF7B4EF-1C5B-4FA9-A769-F368F781C4E6";
78 private static final String TEST_IP_SUBNET_1 = "10.0.2.23/24";
79 private static final String TEST_IP_SUBNET_2 = "192.168.194.1/24";
80 private static final String TEST_IP_SUBNET_3 = "192.168.195.23/23";
83 public void setUp() throws Exception {
84 MockitoAnnotations.initMocks(this);
87 MessageUtils.setMit(new AgentOvsMit());
88 MessageUtils.setOpflexLib(new MitLib());
93 public void testUri() throws Exception {
95 PolicyUri uri = MessageUtils.parseUri(TEST_URI1);
96 assertTrue(uri != null);
98 String element = uri.getElement(index++);
99 while (element != null) {
100 System.out.println("Element: " + element);
101 element = uri.getElement(index++);
103 assertTrue(uri.contains(EPG_RN));
104 index = uri.whichElement(EPG_UUID);
105 assertTrue(index == uri.totalElements()-1);
107 assertTrue(MessageUtils.hasEpg(TEST_URI1));
108 assertTrue(MessageUtils.isEpgUri(TEST_URI1));
113 private List<ConsumerNamedSelector> getTestConsumerNamedSelectorList() {
114 List<ConsumerNamedSelector> cns = new ArrayList<ConsumerNamedSelector>();
116 ConsumerNamedSelectorBuilder cnsb = new ConsumerNamedSelectorBuilder();
117 cnsb.setContract(getTestContractIdList());
118 cnsb.setName(new SelectorName(TEST_SELECTOR_NAME1));
119 cns.add(cnsb.build());
125 private List<ContractId> getTestContractIdList() {
126 List<ContractId> cid = new ArrayList<ContractId>();
128 cid.add(new ContractId(TEST_CONTRACT_ID1));
129 cid.add(new ContractId(TEST_CONTRACT_ID2));
134 private List<ProviderNamedSelector> getTestProviderNamedSelectorList() {
135 List<ProviderNamedSelector> pns = new ArrayList<ProviderNamedSelector>();
137 ProviderNamedSelectorBuilder pnsb = new ProviderNamedSelectorBuilder();
138 pnsb.setContract(getTestContractIdList());
139 pnsb.setName(new SelectorName(TEST_SELECTOR_NAME1));
141 pns.add(pnsb.build());
147 private void printMos(Set<ManagedObject> mol) {
148 for (ManagedObject mo: mol) {
149 if (mo == null) return;
151 if (mo.getProperties() != null) {
152 for (ManagedObject.Property p : mo.getProperties()) {
153 assertTrue(p != null);
154 System.out.println("\t" + p.getName() + ": " + p.getData());
157 if (mo.getChildren() == null) return;
159 for (Uri children: mo.getChildren()) {
160 assertTrue(children != null);
166 public void testIsGenieUri() throws Exception {
167 PolicyUri uri = new PolicyUri();
168 uri.push("PolicyUniverse");
169 uri.push("PolicySpace");
170 uri.push(TENANT_UUID);
171 uri.push("GbpEpGroup");
172 assertTrue(MessageUtils.isGenieUri(new Uri(uri.toString())));
175 private static final String TEST_URI_1 =
176 "/endpoints/endpoint/e60dec20-ff2c-4b10-90a3-e8c27ce9fd08/00:11:22:33:44:55";
177 private static final String TEST_URI_2 =
178 "/endpoints/endpoint-l3/e60dec20-ff2c-4b10-90a3-e8c27ce9fd08/192.168.10.3";
179 private static final String TEST_URI_3 = "/tenants/tenant/51134b1e-6047-4d51-8d07-4135afd3672f";
180 private static final String TEST_URI_4 =
181 TEST_URI_3 + "/contract/81cb5b9f-b443-4d85-9da2-dfe2b3e5f7a3";
182 private static final String TEST_URI_5 =
183 TEST_URI_4 + "/subject/HTTP";
184 private static final String TEST_URI_6 =
185 TEST_URI_5 + "/rule/block";
186 private static final String TEST_URI_7 =
187 TEST_URI_3 + "/l2-flood-domain/e2168e8d-856c-4927-9695-156ed567d6a8";
188 private static final String TEST_URI_8 =
189 TEST_URI_3 + "/l2-bridge-domain/1d148938-38e3-41e5-a6dc-4b35541a498b";
190 private static final String TEST_URI_9 =
191 TEST_URI_3 + "/subnet/99693e3c-a5e1-4229-a3b6-9aae9cf69b61";
192 private static final String TEST_URI_10 =
193 TEST_URI_3 + "/l3-context/bf11bd5b-7a45-412d-bff3-c9c1f1770023";
196 // private static final String TEST_GENIE_URI_1 =
197 // "/EprL2Universe/EprL2Ep/e60dec20-ff2c-4b10-90a3-e8c27ce9fd08/00:11:22:33:44:55";
198 // private static final String TEST_GENIE_URI_2 =
199 // "/EprL3Universe/EprL3Ep/e60dec20-ff2c-4b10-90a3-e8c27ce9fd08/192.168.10.3";
202 public void testOdlUriIterator() throws Exception {
203 PolicyUri uri = new PolicyUri(TEST_URI_1);
204 MessageUtils.UriIterator it = new MessageUtils.UriIterator(uri, MessageUtils.getOdlKeys());
206 while (it.hasNext()) {
208 System.out.println("Key is " + it.getElement());
211 System.out.println("Element is " + it.getElement());
215 uri = new PolicyUri(TEST_URI_2);
216 it = new MessageUtils.UriIterator(uri, MessageUtils.getOdlKeys());
217 while (it.hasNext()) {
219 System.out.println("Key is " + it.getElement());
222 System.out.println("Element is " + it.getElement());
229 public void testOdlUritoGenieUri() throws Exception {
230 PolicyUri guri = MessageUtils.odlUriToGenieUri(new PolicyUri(TEST_URI_1));
231 System.out.println(guri.originalPath());
232 guri = MessageUtils.odlUriToGenieUri(new PolicyUri(TEST_URI_2));
233 System.out.println(guri.originalPath());
234 guri = MessageUtils.odlUriToGenieUri(new PolicyUri(TEST_URI_3));
235 System.out.println(guri.originalPath());
236 guri = MessageUtils.odlUriToGenieUri(new PolicyUri(TEST_URI_4));
237 System.out.println(guri.originalPath());
238 guri = MessageUtils.odlUriToGenieUri(new PolicyUri(TEST_URI_5));
239 System.out.println(guri.originalPath());
240 guri = MessageUtils.odlUriToGenieUri(new PolicyUri(TEST_URI_6));
241 System.out.println(guri.originalPath());
242 guri = MessageUtils.odlUriToGenieUri(new PolicyUri(TEST_URI_7));
243 System.out.println(guri.originalPath());
244 guri = MessageUtils.odlUriToGenieUri(new PolicyUri(TEST_URI_8));
245 System.out.println(guri.originalPath());
246 guri = MessageUtils.odlUriToGenieUri(new PolicyUri(TEST_URI_9));
247 System.out.println(guri.originalPath());
248 guri = MessageUtils.odlUriToGenieUri(new PolicyUri(TEST_URI_10));
249 System.out.println(guri.originalPath());
253 public void testGetEndpointGroup() throws Exception {
254 TenantBuilder tb = new TenantBuilder();
255 tb.setId(new TenantId(TENANT_UUID));
256 Tenant t = tb.build();
257 ManagedObject epgMo = new ManagedObject();
259 RuleGroup rg = new RuleGroup(null, 0, t, null, null);
261 EndpointGroupBuilder epgb = new EndpointGroupBuilder();
262 epgb.setConsumerNamedSelector(getTestConsumerNamedSelectorList());
263 epgb.setProviderNamedSelector(getTestProviderNamedSelectorList());
265 epgb.setIntraGroupPolicy(IntraGroupPolicy.Allow);
266 epgb.setNetworkDomain(new NetworkDomainId(TEST_NETWORK_DOMAIN_ID));
267 epgb.setName(new Name(EPG_NAME));
268 epgb.setId(new EndpointGroupId(EPG_UUID));
270 EndpointGroup epg = epgb.build();
271 assertTrue(epg != null);
272 PolicyUri uri = new PolicyUri();
273 uri.push("PolicyUniverse");
274 uri.push("PolicySpace");
275 uri.push(TENANT_UUID);
276 uri.push("GbpEpGroup");
277 uri.push(epg.getId().getValue());
278 Set<ManagedObject> children = MessageUtils.getEndpointGroupMo(epgMo, uri, epg, rg);
283 public void testIpv4PlusSubnet() throws Exception {
284 MessageUtils.Ipv4PlusSubnet ipv4 = new MessageUtils.Ipv4PlusSubnet(TEST_IP_SUBNET_1);
285 System.out.println("Prefix is " + ipv4.getPrefixAsString() + ", Mask is " + ipv4.getMaskAsString());
286 ipv4 = new MessageUtils.Ipv4PlusSubnet(TEST_IP_SUBNET_2);
287 System.out.println("Prefix is " + ipv4.getPrefixAsString() + ", Mask is " + ipv4.getMaskAsString());
288 ipv4 = new MessageUtils.Ipv4PlusSubnet(TEST_IP_SUBNET_3);
289 System.out.println("Prefix is " + ipv4.getPrefixAsString() + ", Mask is " + ipv4.getMaskAsString());