89e2d669e81b8bcf91497321d20527ac14e91f31
[sfc.git] /
1 /*
2  * Copyright (c) 2014 Cisco Systems, Inc. and others.  All rights reserved.
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
9 package org.opendaylight.sfc.provider.api;
10
11 import org.junit.Before;
12 import org.junit.Test;
13 import org.opendaylight.sfc.provider.AbstractDataStoreManager;
14 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sf.rev140701.service.function.entry.SfDataPlaneLocator;
15 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sf.rev140701.service.functions.ServiceFunction;
16 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sff.rev140701.Open;
17 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sff.rev140701.service.function.forwarders.ServiceFunctionForwarder;
18 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sff.rev140701.service.function.forwarders.ServiceFunctionForwarderBuilder;
19 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sff.rev140701.service.function.forwarders.ServiceFunctionForwarderKey;
20 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sff.rev140701.service.function.forwarders.service.function.forwarder.*;
21 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sff.rev140701.service.function.forwarders.service.function.forwarder.service.function.dictionary.SffSfDataPlaneLocator;
22 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sff.rev140701.service.function.forwarders.service.function.forwarder.service.function.dictionary.SffSfDataPlaneLocatorBuilder;
23 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sff.rev140701.service.function.forwarders.service.function.forwarder.sff.data.plane.locator.DataPlaneLocatorBuilder;
24 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sft.rev140701.Firewall;
25 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sl.rev140701.VxlanGpe;
26 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sl.rev140701.data.plane.locator.locator.type.Ip;
27 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sl.rev140701.data.plane.locator.locator.type.IpBuilder;
28 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress;
29 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;
30 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.PortNumber;
31
32 import java.util.ArrayList;
33 import java.util.List;
34 import java.util.concurrent.ExecutionException;
35
36 import static org.hamcrest.CoreMatchers.hasItem;
37 import static org.junit.Assert.*;
38
39 /**
40  * Tests for dictionary operations on SFFs
41  */
42 public class SfcProviderServiceForwarderAPIDictionaryTest extends AbstractDataStoreManager {
43
44     private String[] sffName = {"unittest-forwarder-1", "unittest-forwarder-2", "unittest-forwarder-3"};
45     private List<ServiceFunction> sfList = new ArrayList<>();
46
47     @Before
48     public void before() {
49         setOdlSfc();
50
51         Ip dummyIp = SimpleTestEntityBuilder.buildLocatorTypeIp(new IpAddress(new Ipv4Address("5.5.5.6")), 555);
52         SfDataPlaneLocator dummyLocator = SimpleTestEntityBuilder.buildSfDataPlaneLocator("kyiv-5.5.5.6:555-vxlan", dummyIp, "sff-kyiv", VxlanGpe.class);
53
54         sfList.add(SimpleTestEntityBuilder.buildServiceFunction("dict_fw_101", Firewall.class,
55                 new IpAddress(new Ipv4Address("192.168.100.111")), dummyLocator, Boolean.FALSE));
56         sfList.add(SimpleTestEntityBuilder.buildServiceFunction("dict_fw_102", Firewall.class,
57                 new IpAddress(new Ipv4Address("192.168.100.112")), dummyLocator, Boolean.FALSE));
58         sfList.add(SimpleTestEntityBuilder.buildServiceFunction("dict_fw_103", Firewall.class,
59                 new IpAddress(new Ipv4Address("192.168.100.113")), dummyLocator, Boolean.FALSE));
60     }
61
62     @Test
63     public void testUpdateDictionary() throws ExecutionException, InterruptedException {
64
65         String name = sffName[0];
66
67         List<SffDataPlaneLocator> locatorList = new ArrayList<>();
68
69
70         IpBuilder ipBuilder = new IpBuilder();
71         ipBuilder.setIp(new IpAddress(new Ipv4Address("10.1.1.101")))
72                 .setPort(new PortNumber(555));
73
74         DataPlaneLocatorBuilder sffLocatorBuilder = new DataPlaneLocatorBuilder();
75         sffLocatorBuilder.setLocatorType(ipBuilder.build())
76                 .setTransport(VxlanGpe.class);
77
78         SffDataPlaneLocatorBuilder locatorBuilder = new SffDataPlaneLocatorBuilder();
79         locatorBuilder.setName("locator-1").setKey(new SffDataPlaneLocatorKey("locator-1"))
80                 .setDataPlaneLocator(sffLocatorBuilder.build());
81
82         locatorList.add(locatorBuilder.build());
83
84
85         List<ServiceFunctionDictionary> dictionary = new ArrayList<>();
86
87         ServiceFunction sf0 = sfList.get(0);
88         SfDataPlaneLocator sfDPLocator0 = sf0.getSfDataPlaneLocator().get(0);
89         SffSfDataPlaneLocatorBuilder sffSfDataPlaneLocatorBuilder0 = new SffSfDataPlaneLocatorBuilder(sfDPLocator0);
90         SffSfDataPlaneLocator sffSfDataPlaneLocator0 = sffSfDataPlaneLocatorBuilder0.build();
91         ServiceFunctionDictionaryBuilder dictionaryEntryBuilder0 = new ServiceFunctionDictionaryBuilder();
92         dictionaryEntryBuilder0
93                 .setName(sf0.getName()).setKey(new ServiceFunctionDictionaryKey(sf0.getName()))
94                 .setType(sf0.getType())
95                 .setSffSfDataPlaneLocator(sffSfDataPlaneLocator0)
96                 .setFailmode(Open.class)
97                 .setSffInterfaces(null);
98
99         ServiceFunctionDictionary firstDictEntry = dictionaryEntryBuilder0.build();
100         dictionary.add(firstDictEntry);
101
102         ServiceFunctionForwarderBuilder sffBuilder = new ServiceFunctionForwarderBuilder();
103
104         ServiceFunctionForwarder sff =
105                 sffBuilder.setName(name).setKey(new ServiceFunctionForwarderKey(name))
106                         .setSffDataPlaneLocator(locatorList)
107                         .setServiceFunctionDictionary(dictionary)
108                         .setServiceNode(null) // for consistency only; we are going to get rid of ServiceNodes in the future
109                         .build();
110
111         Object[] parameters = {sff};
112         Class[] parameterTypes = {ServiceFunctionForwarder.class};
113
114         executor.submit(SfcProviderServiceForwarderAPI
115                 .getPut(parameters, parameterTypes)).get();
116
117         Object[] parameters2 = {name};
118         Class[] parameterTypes2 = {String.class};
119         Object result = executor.submit(SfcProviderServiceForwarderAPI
120                 .getRead(parameters2, parameterTypes2)).get();
121         ServiceFunctionForwarder sff2 = (ServiceFunctionForwarder) result;
122
123         assertNotNull("Must be not null", sff2);
124         assertEquals("Must be equal", sff2.getSffDataPlaneLocator(), locatorList);
125         assertThat("Must contain first dictionary entry", sff2.getServiceFunctionDictionary(), hasItem(firstDictEntry));
126
127         ServiceFunction sf1 = sfList.get(1);
128         SfDataPlaneLocator sfDPLocator1 = sf1.getSfDataPlaneLocator().get(0);
129         SffSfDataPlaneLocatorBuilder sffSfDataPlaneLocatorBuilder1 = new SffSfDataPlaneLocatorBuilder(sfDPLocator1);
130         SffSfDataPlaneLocator sffSfDataPlaneLocator1 = sffSfDataPlaneLocatorBuilder1.build();
131         ServiceFunctionDictionaryBuilder dictionaryEntryBuilder1 = new ServiceFunctionDictionaryBuilder();
132         dictionaryEntryBuilder1
133                 .setName(sf1.getName()).setKey(new ServiceFunctionDictionaryKey(sf1.getName()))
134                 .setType(sf1.getType())
135                 .setSffSfDataPlaneLocator(sffSfDataPlaneLocator1)
136                 .setFailmode(Open.class)
137                 .setSffInterfaces(null);
138
139         ServiceFunctionDictionary newDictEntry = dictionaryEntryBuilder1.build();
140
141         sff2.getServiceFunctionDictionary().add(newDictEntry);
142         dictionary.add(newDictEntry);
143
144         Object[] parameters3 = {sff};
145         Class[] parameterTypes3 = {ServiceFunctionForwarder.class};
146
147         executor.submit(SfcProviderServiceForwarderAPI
148                 .getPut(parameters3, parameterTypes3)).get();
149
150         Object[] parameters4 = {name};
151         Class[] parameterTypes4 = {String.class};
152         Object result4 = executor.submit(SfcProviderServiceForwarderAPI
153                 .getRead(parameters4, parameterTypes4)).get();
154         ServiceFunctionForwarder sff4 = (ServiceFunctionForwarder) result4;
155
156         assertNotNull("Must be not null", sff4);
157         assertThat("Must contain first dictionary entry", sff4.getServiceFunctionDictionary(), hasItem(firstDictEntry));
158         assertThat("Must contain new dictionary entry", sff4.getServiceFunctionDictionary(), hasItem(newDictEntry));
159     }
160
161
162 }