Added range type to subject-feature-definition/parameter
[groupbasedpolicy.git] / renderers / opflex / src / test / java / org / opendaylight / groupbasedpolicy / renderer / opflex / MessageUtilsTest.java
1 /*
2  * Copyright (C) 2014 Cisco Systems, Inc.
3  *
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
7  *
8  *  Authors : Thomas Bachman
9  */
10
11 package org.opendaylight.groupbasedpolicy.renderer.opflex;
12
13 import static org.junit.Assert.assertTrue;
14
15 import java.util.ArrayList;
16 import java.util.List;
17 import java.util.Set;
18
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;
45
46
47 /**
48  *
49  */
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";
59
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";
77
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";
81
82     @Before
83     public void setUp() throws Exception {
84         MockitoAnnotations.initMocks(this);
85
86         MessageUtils.init();
87         MessageUtils.setMit(new AgentOvsMit());
88         MessageUtils.setOpflexLib(new MitLib());
89     }
90
91
92     @Test
93     public void testUri() throws Exception {
94
95         PolicyUri uri = MessageUtils.parseUri(TEST_URI1);
96         assertTrue(uri != null);
97         int index = 0;
98         String element = uri.getElement(index++);
99         while (element != null) {
100             System.out.println("Element: " + element);
101             element = uri.getElement(index++);
102         }
103         assertTrue(uri.contains(EPG_RN));
104         index = uri.whichElement(EPG_UUID);
105         assertTrue(index == uri.totalElements()-1);
106
107         assertTrue(MessageUtils.hasEpg(TEST_URI1));
108         assertTrue(MessageUtils.isEpgUri(TEST_URI1));
109
110     }
111
112
113     private List<ConsumerNamedSelector> getTestConsumerNamedSelectorList() {
114         List<ConsumerNamedSelector> cns = new ArrayList<ConsumerNamedSelector>();
115
116         ConsumerNamedSelectorBuilder cnsb = new ConsumerNamedSelectorBuilder();
117         cnsb.setContract(getTestContractIdList());
118         cnsb.setName(new SelectorName(TEST_SELECTOR_NAME1));
119         cns.add(cnsb.build());
120
121         return cns;
122     }
123
124
125     private List<ContractId> getTestContractIdList() {
126         List<ContractId> cid = new ArrayList<ContractId>();
127
128         cid.add(new ContractId(TEST_CONTRACT_ID1));
129         cid.add(new ContractId(TEST_CONTRACT_ID2));
130
131         return cid;
132     }
133
134     private List<ProviderNamedSelector> getTestProviderNamedSelectorList() {
135         List<ProviderNamedSelector> pns = new ArrayList<ProviderNamedSelector>();
136
137         ProviderNamedSelectorBuilder pnsb = new ProviderNamedSelectorBuilder();
138         pnsb.setContract(getTestContractIdList());
139         pnsb.setName(new SelectorName(TEST_SELECTOR_NAME1));
140
141         pns.add(pnsb.build());
142
143         return pns;
144     }
145
146
147     private void printMos(Set<ManagedObject> mol) {
148         for (ManagedObject mo: mol) {
149                 if (mo == null) return;
150
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());
155                     }
156                 }
157                 if (mo.getChildren() == null) return;
158
159                 for (Uri children: mo.getChildren()) {
160                     assertTrue(children != null);
161                 }
162         }
163     }
164
165     @Test
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())));
173     }
174
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";
194
195
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";
200
201     //@Test
202     public void testOdlUriIterator() throws Exception {
203         PolicyUri uri = new PolicyUri(TEST_URI_1);
204         MessageUtils.UriIterator it = new MessageUtils.UriIterator(uri, MessageUtils.getOdlKeys());
205
206         while (it.hasNext()) {
207                 if (it.isKey()) {
208                         System.out.println("Key is " + it.getElement());
209                 }
210                 else {
211                         System.out.println("Element is " + it.getElement());
212                 }
213                 it.next();
214         }
215         uri = new PolicyUri(TEST_URI_2);
216         it = new MessageUtils.UriIterator(uri, MessageUtils.getOdlKeys());
217         while (it.hasNext()) {
218                 if (it.isKey()) {
219                         System.out.println("Key is " + it.getElement());
220                 }
221                 else {
222                         System.out.println("Element is " + it.getElement());
223                 }
224                 it.next();
225         }
226     }
227
228     //@Test
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());
250     }
251
252     //@Test
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();
258
259         RuleGroup rg = new RuleGroup(null, 0, t, null, null);
260
261         EndpointGroupBuilder epgb = new EndpointGroupBuilder();
262         epgb.setConsumerNamedSelector(getTestConsumerNamedSelectorList());
263         epgb.setProviderNamedSelector(getTestProviderNamedSelectorList());
264
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));
269
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);
279         printMos(children);
280     }
281
282     //@Test
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());
290     }
291 }