2 * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
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
9 package org.opendaylight.sfc.provider.api;
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;
32 import java.util.ArrayList;
33 import java.util.List;
34 import java.util.concurrent.ExecutionException;
36 import static org.hamcrest.CoreMatchers.hasItem;
37 import static org.junit.Assert.*;
40 * Tests for dictionary operations on SFFs
42 public class SfcProviderServiceForwarderAPIDictionaryTest extends AbstractDataStoreManager {
44 private String[] sffName = {"unittest-forwarder-1", "unittest-forwarder-2", "unittest-forwarder-3"};
45 private List<ServiceFunction> sfList = new ArrayList<>();
48 public void before() {
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);
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));
63 public void testUpdateDictionary() throws ExecutionException, InterruptedException {
65 String name = sffName[0];
67 List<SffDataPlaneLocator> locatorList = new ArrayList<>();
70 IpBuilder ipBuilder = new IpBuilder();
71 ipBuilder.setIp(new IpAddress(new Ipv4Address("10.1.1.101")))
72 .setPort(new PortNumber(555));
74 DataPlaneLocatorBuilder sffLocatorBuilder = new DataPlaneLocatorBuilder();
75 sffLocatorBuilder.setLocatorType(ipBuilder.build())
76 .setTransport(VxlanGpe.class);
78 SffDataPlaneLocatorBuilder locatorBuilder = new SffDataPlaneLocatorBuilder();
79 locatorBuilder.setName("locator-1").setKey(new SffDataPlaneLocatorKey("locator-1"))
80 .setDataPlaneLocator(sffLocatorBuilder.build());
82 locatorList.add(locatorBuilder.build());
85 List<ServiceFunctionDictionary> dictionary = new ArrayList<>();
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);
99 ServiceFunctionDictionary firstDictEntry = dictionaryEntryBuilder0.build();
100 dictionary.add(firstDictEntry);
102 ServiceFunctionForwarderBuilder sffBuilder = new ServiceFunctionForwarderBuilder();
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
111 Object[] parameters = {sff};
112 Class[] parameterTypes = {ServiceFunctionForwarder.class};
114 executor.submit(SfcProviderServiceForwarderAPI
115 .getPut(parameters, parameterTypes)).get();
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;
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));
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);
139 ServiceFunctionDictionary newDictEntry = dictionaryEntryBuilder1.build();
141 sff2.getServiceFunctionDictionary().add(newDictEntry);
142 dictionary.add(newDictEntry);
144 Object[] parameters3 = {sff};
145 Class[] parameterTypes3 = {ServiceFunctionForwarder.class};
147 executor.submit(SfcProviderServiceForwarderAPI
148 .getPut(parameters3, parameterTypes3)).get();
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;
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));