2 * Copyright (c) 2016 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.groupbasedpolicy.renderer.ios_xe_provider.impl.util;
11 import static org.junit.Assert.assertEquals;
12 import static org.junit.Assert.assertFalse;
13 import static org.junit.Assert.assertNotNull;
14 import static org.junit.Assert.assertNull;
15 import static org.junit.Assert.assertTrue;
16 import static org.mockito.Matchers.any;
17 import static org.mockito.Mockito.mock;
18 import static org.mockito.Mockito.times;
19 import static org.mockito.Mockito.verifyNoMoreInteractions;
20 import static org.opendaylight.groupbasedpolicy.renderer.ios_xe_provider.impl.manager.PolicyManagerImpl.ActionCase.ALLOW;
21 import static org.opendaylight.groupbasedpolicy.renderer.ios_xe_provider.impl.manager.PolicyManagerImpl.ActionCase.CHAIN;
22 import static org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.HasDirection.Direction.In;
23 import static org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.HasDirection.Direction.Out;
24 import static org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.EndpointPolicyParticipation.PROVIDER;
25 import static org.powermock.api.mockito.PowerMockito.verifyStatic;
26 import static org.powermock.api.support.membermodification.MemberMatcher.method;
27 import static org.powermock.api.support.membermodification.MemberModifier.stub;
29 import javax.annotation.Nonnull;
30 import java.util.ArrayList;
31 import java.util.Collections;
32 import java.util.List;
34 import com.google.common.collect.Lists;
35 import org.junit.Before;
36 import org.junit.Test;
37 import org.junit.runner.RunWith;
38 import org.mockito.ArgumentCaptor;
39 import org.mockito.Captor;
40 import org.mockito.Mock;
41 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
42 import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
43 import org.opendaylight.groupbasedpolicy.renderer.ios_xe_provider.impl.manager.PolicyConfigurationContext;
44 import org.opendaylight.groupbasedpolicy.renderer.ios_xe_provider.impl.manager.PolicyManagerImpl;
45 import org.opendaylight.groupbasedpolicy.renderer.ios_xe_provider.impl.manager.PolicyManagerImpl.ActionCase;
46 import org.opendaylight.groupbasedpolicy.renderer.ios_xe_provider.impl.util.PolicyManagerUtil.ActionInDirection;
47 import org.opendaylight.groupbasedpolicy.renderer.ios_xe_provider.impl.writer.PolicyWriterUtil;
48 import org.opendaylight.sfc.provider.api.SfcProviderRenderedPathAPI;
49 import org.opendaylight.sfc.provider.api.SfcProviderServiceForwarderAPI;
50 import org.opendaylight.sfc.provider.api.SfcProviderServicePathAPI;
51 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.common.rev151017.RspName;
52 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.common.rev151017.SfName;
53 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.common.rev151017.SfcName;
54 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.common.rev151017.SffName;
55 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.common.rev151017.SfpName;
56 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.rsp.rev140701.CreateRenderedPathInput;
57 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.rsp.rev140701.rendered.service.paths.RenderedServicePath;
58 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.rsp.rev140701.rendered.service.paths.RenderedServicePathBuilder;
59 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.rsp.rev140701.rendered.service.paths.rendered.service.path.RenderedServicePathHop;
60 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.rsp.rev140701.rendered.service.paths.rendered.service.path.RenderedServicePathHopBuilder;
61 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sff.rev140701.service.function.forwarder.base.SffDataPlaneLocatorBuilder;
62 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sff.rev140701.service.function.forwarder.base.sff.data.plane.locator.DataPlaneLocatorBuilder;
63 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sff.rev140701.service.function.forwarders.ServiceFunctionForwarderBuilder;
64 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sff.rev140701.service.function.forwarders.ServiceFunctionForwarderKey;
65 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sfp.rev140701.ServiceFunctionPaths;
66 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sfp.rev140701.ServiceFunctionPathsBuilder;
67 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sfp.rev140701.service.function.paths.ServiceFunctionPath;
68 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sfp.rev140701.service.function.paths.ServiceFunctionPathBuilder;
69 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sl.rev140701.data.plane.locator.locator.type.IpBuilder;
70 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
71 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
72 import org.opendaylight.yang.gen.v1.urn.ios.rev160308._native.ClassMap;
73 import org.opendaylight.yang.gen.v1.urn.ios.rev160308._native.ServiceChain;
74 import org.opendaylight.yang.gen.v1.urn.ios.rev160308._native.policy.map.Class;
75 import org.opendaylight.yang.gen.v1.urn.ios.rev160308._native.service.chain.service.function.forwarder.ServiceFfName;
76 import org.opendaylight.yang.gen.v1.urn.ios.rev160308._native.service.chain.service.function.forwarder.ServiceFfNameBuilder;
77 import org.opendaylight.yang.gen.v1.urn.ios.rev160308._native.service.chain.service.function.forwarder.ServiceFfNameKey;
78 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ParameterName;
79 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.RuleName;
80 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId;
81 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.HasDirection.Direction;
82 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.instance.ParameterValue;
83 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.instance.ParameterValueBuilder;
84 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.has.rule.group.with.renderer.endpoint.participation.RuleGroupWithRendererEndpointParticipationBuilder;
85 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.renderer.endpoints.RendererEndpointBuilder;
86 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.renderer.endpoints.renderer.endpoint.PeerEndpoint;
87 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.renderer.endpoints.renderer.endpoint.PeerEndpointBuilder;
88 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.resolved.policy.rev150828.has.actions.Action;
89 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.resolved.policy.rev150828.has.actions.ActionBuilder;
90 import org.opendaylight.yang.gen.v1.urn.opendaylight.sxp.database.rev160308.Sgt;
91 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
92 import org.powermock.api.mockito.PowerMockito;
93 import org.powermock.core.classloader.annotations.PrepareForTest;
94 import org.powermock.modules.junit4.PowerMockRunner;
97 * Test for {@link ServiceChainingUtil}.
99 @RunWith(PowerMockRunner.class)
101 SfcProviderServiceForwarderAPI.class,
102 SfcProviderServicePathAPI.class,
103 SfcProviderRenderedPathAPI.class,
104 PolicyManagerUtil.class,
105 PolicyWriterUtil.class
107 public class ServiceChainingUtilTest {
109 private final String SFC_CHAIN_NAME = "sfc-chain-name";
110 private final String SFC_PATH_NAME = "sfc-path-name";
111 private final String TENANT_ID = "tenant-id";
112 private final String IP_ADDRESS = "170.0.0.1";
113 private final String SERVICE_FUNCTION_FORWARDER = "service-function-forwarder";
114 private final RuleName RULE_NAME = new RuleName("rule-name");
116 private DataBroker dataBroker;
117 private PolicyWriterUtil policyWriterUtil;
121 private ArgumentCaptor<RspName> rspNameCaptor;
123 private ArgumentCaptor<SffName> sffNameCaptor;
125 private ArgumentCaptor<ServiceFunctionPath> sfpCaptor;
127 private ArgumentCaptor<CreateRenderedPathInput> createRspCaptor;
129 private ArgumentCaptor<RenderedServicePath> rspCaptor;
131 private ArgumentCaptor<Class> listClassCaptor;
133 private ArgumentCaptor<ClassMap> classMapCaptor;
135 private ReadWriteTransaction rwTx;
138 public void setUp() {
139 dataBroker = mock(DataBroker.class);
140 policyWriterUtil = mock(PolicyWriterUtil.class);
144 public void testResolveNewChainAction_actionAllow() {
145 final PeerEndpoint peerEndpoint = peerEndpointBuilder();
146 final Action action = actionBuilder(null);
147 final PolicyConfigurationContext context = policyConfigurationContextBuilder();
149 ServiceChainingUtil.newChainAction(peerEndpoint, sgtBuilder(10), sgtBuilder(20),
150 resolvedActionBuilder(RULE_NAME, ALLOW, action, In), context, dataBroker);
152 verifyNoMoreInteractions(policyWriterUtil);
153 verifyNoMoreInteractions(dataBroker);
157 public void testResolveNewChainAction_noParameterValue() {
158 final PeerEndpoint peerEndpoint = peerEndpointBuilder();
159 final Action action = actionBuilder(null);
160 final PolicyConfigurationContext context = policyConfigurationContextBuilder();
162 ServiceChainingUtil.newChainAction(peerEndpoint, sgtBuilder(10), sgtBuilder(20),
163 resolvedActionBuilder(RULE_NAME, CHAIN, action, In), context, dataBroker);
165 verifyNoMoreInteractions(policyWriterUtil);
166 verifyNoMoreInteractions(dataBroker);
170 public void testResolveNewChainAction_noTenantId() {
171 final ParameterValueBuilder parameterValueBuilder = new ParameterValueBuilder();
172 parameterValueBuilder.setName(new ParameterName(SFC_CHAIN_NAME)).setStringValue(SFC_CHAIN_NAME);
173 final ParameterValue parameterValue = parameterValueBuilder.build();
175 final ServiceFunctionPathBuilder pathBuilder = new ServiceFunctionPathBuilder();
176 pathBuilder.setName(new SfpName(SFC_PATH_NAME)).setServiceChainName(new SfcName(SFC_CHAIN_NAME));
177 final ServiceFunctionPathsBuilder pathsBuilder = new ServiceFunctionPathsBuilder();
178 pathsBuilder.setServiceFunctionPath(Collections.singletonList(pathBuilder.build()));
180 final PeerEndpoint peerEndpoint = peerEndpointBuilder();
181 final Action action = actionBuilder(Collections.singletonList(parameterValue));
182 final PolicyConfigurationContext context = policyConfigurationContextBuilder();
184 stub(method(SfcProviderServicePathAPI.class, "readAllServiceFunctionPaths")).toReturn(pathsBuilder.build());
185 stub(method(PolicyManagerUtil.class, "getTenantId")).toReturn(null);
187 ServiceChainingUtil.newChainAction(peerEndpoint, sgtBuilder(10), sgtBuilder(20),
188 resolvedActionBuilder(RULE_NAME, CHAIN, action, In), context, dataBroker);
190 verifyNoMoreInteractions(policyWriterUtil);
191 verifyNoMoreInteractions(dataBroker);
195 public void testResolveNewChainAction_asymmetricChainOpposite() {
196 final ParameterValueBuilder parameterValueBuilder = new ParameterValueBuilder();
197 parameterValueBuilder.setName(new ParameterName(SFC_CHAIN_NAME)).setStringValue(SFC_CHAIN_NAME);
198 final ParameterValue parameterValue = parameterValueBuilder.build();
200 final ServiceFunctionPathBuilder pathBuilder = new ServiceFunctionPathBuilder();
201 pathBuilder.setName(new SfpName(SFC_PATH_NAME)).setServiceChainName(new SfcName(SFC_CHAIN_NAME))
202 .setSymmetric(false);
203 final ServiceFunctionPathsBuilder pathsBuilder = new ServiceFunctionPathsBuilder();
204 pathsBuilder.setServiceFunctionPath(Collections.singletonList(pathBuilder.build()));
206 final PeerEndpoint peerEndpoint = peerEndpointBuilder();
207 final Action action = actionBuilder(Collections.singletonList(parameterValue));
208 final PolicyConfigurationContext context = policyConfigurationContextBuilder();
210 stub(method(SfcProviderServicePathAPI.class, "readAllServiceFunctionPaths")).toReturn(pathsBuilder.build());
211 stub(method(PolicyManagerUtil.class, "getTenantId")).toReturn(new TenantId(TENANT_ID));
213 ServiceChainingUtil.newChainAction(peerEndpoint, sgtBuilder(10), sgtBuilder(20),
214 resolvedActionBuilder(RULE_NAME, CHAIN, action, In), context, dataBroker);
216 verifyNoMoreInteractions(policyWriterUtil);
217 verifyNoMoreInteractions(dataBroker);
221 public void testResolveNewChainAction_asymmetricChain() {
222 final ParameterValueBuilder parameterValueBuilder = new ParameterValueBuilder();
223 parameterValueBuilder.setName(new ParameterName(SFC_CHAIN_NAME)).setStringValue(SFC_CHAIN_NAME);
224 final ParameterValue parameterValue = parameterValueBuilder.build();
226 final ServiceFunctionPathBuilder pathBuilder = new ServiceFunctionPathBuilder();
227 pathBuilder.setName(new SfpName(SFC_PATH_NAME)).setServiceChainName(new SfcName(SFC_CHAIN_NAME))
228 .setSymmetric(false);
229 final ServiceFunctionPathsBuilder pathsBuilder = new ServiceFunctionPathsBuilder();
230 pathsBuilder.setServiceFunctionPath(Collections.singletonList(pathBuilder.build()));
232 final PeerEndpoint peerEndpoint = peerEndpointBuilder();
233 final Action action = actionBuilder(Collections.singletonList(parameterValue));
234 final PolicyConfigurationContext context = policyConfigurationContextBuilder();
236 stub(method(SfcProviderServicePathAPI.class, "readAllServiceFunctionPaths")).toReturn(pathsBuilder.build());
237 stub(method(PolicyWriterUtil.class, "writeClassMap")).toReturn(true);
238 stub(method(PolicyWriterUtil.class, "writePolicyMapEntry")).toReturn(true);
240 ServiceChainingUtil.newChainAction(peerEndpoint, sgtBuilder(10), sgtBuilder(20),
241 resolvedActionBuilder(RULE_NAME, CHAIN, action, Out), context, dataBroker);
243 verifyStatic(times(1));
244 PolicyWriterUtil.writeClassMap(any(ClassMap.class), any(PolicyManagerImpl.PolicyMapLocation.class));
245 PolicyWriterUtil.writePolicyMapEntry(any(Class.class), any(PolicyManagerImpl.PolicyMapLocation.class));
249 public void testResolveNewChainAction_symmetricChainDirect() {
250 final ParameterValueBuilder parameterValueBuilder = new ParameterValueBuilder();
251 parameterValueBuilder.setName(new ParameterName(SFC_CHAIN_NAME)).setStringValue(SFC_CHAIN_NAME);
252 final ParameterValue parameterValue = parameterValueBuilder.build();
254 final ServiceFunctionPathBuilder pathBuilder = new ServiceFunctionPathBuilder();
255 pathBuilder.setName(new SfpName(SFC_PATH_NAME)).setServiceChainName(new SfcName(SFC_CHAIN_NAME))
257 final ServiceFunctionPathsBuilder pathsBuilder = new ServiceFunctionPathsBuilder();
258 pathsBuilder.setServiceFunctionPath(Collections.singletonList(pathBuilder.build()));
260 final PeerEndpoint peerEndpoint = peerEndpointBuilder();
261 final Action action = actionBuilder(Collections.singletonList(parameterValue));
262 final PolicyConfigurationContext context = policyConfigurationContextBuilder();
264 stub(method(SfcProviderServicePathAPI.class, "readAllServiceFunctionPaths")).toReturn(pathsBuilder.build());
265 stub(method(PolicyWriterUtil.class, "writeClassMap")).toReturn(true);
266 stub(method(PolicyWriterUtil.class, "writePolicyMapEntry")).toReturn(true);
268 ServiceChainingUtil.newChainAction(peerEndpoint, sgtBuilder(10), sgtBuilder(20),
269 resolvedActionBuilder(RULE_NAME, CHAIN, action, Out), context, dataBroker);
271 verifyStatic(times(1));
272 PolicyWriterUtil.writeClassMap(any(ClassMap.class), any(PolicyManagerImpl.PolicyMapLocation.class));
273 PolicyWriterUtil.writePolicyMapEntry(any(Class.class), any(PolicyManagerImpl.PolicyMapLocation.class));
277 public void testResolveNewChainAction_symmetricChainReversed() {
278 final ParameterValueBuilder parameterValueBuilder = new ParameterValueBuilder();
279 parameterValueBuilder.setName(new ParameterName(SFC_CHAIN_NAME)).setStringValue(SFC_CHAIN_NAME);
280 final ParameterValue parameterValue = parameterValueBuilder.build();
282 final ServiceFunctionPathBuilder pathBuilder = new ServiceFunctionPathBuilder();
283 pathBuilder.setName(new SfpName(SFC_PATH_NAME)).setServiceChainName(new SfcName(SFC_CHAIN_NAME))
285 final ServiceFunctionPathsBuilder pathsBuilder = new ServiceFunctionPathsBuilder();
286 pathsBuilder.setServiceFunctionPath(Collections.singletonList(pathBuilder.build()));
288 final PeerEndpoint peerEndpoint = peerEndpointBuilder();
289 final Action action = actionBuilder(Collections.singletonList(parameterValue));
290 final PolicyConfigurationContext context = policyConfigurationContextBuilder();
292 stub(method(SfcProviderServicePathAPI.class, "readAllServiceFunctionPaths")).toReturn(pathsBuilder.build());
293 stub(method(PolicyWriterUtil.class, "writeClassMap")).toReturn(true);
294 stub(method(PolicyWriterUtil.class, "writePolicyMapEntry")).toReturn(true);
296 ServiceChainingUtil.newChainAction(peerEndpoint, sgtBuilder(10), sgtBuilder(20),
297 resolvedActionBuilder(RULE_NAME, CHAIN, action, In), context, dataBroker);
299 verifyStatic(times(1));
300 PolicyWriterUtil.writeClassMap(any(ClassMap.class), any(PolicyManagerImpl.PolicyMapLocation.class));
301 PolicyWriterUtil.writePolicyMapEntry(any(Class.class), any(PolicyManagerImpl.PolicyMapLocation.class));
305 public void testResolveRemovedChainAction_noParameterValue() {
306 final PolicyConfigurationContext context = new PolicyConfigurationContext();
307 context.setPolicyMapLocation(getLocation());
308 final PeerEndpoint peerEndpoint = peerEndpointBuilder();
309 final Action action = actionBuilder(null);
311 ServiceChainingUtil.resolveRemovedChainAction(peerEndpoint, sgtBuilder(10), sgtBuilder(20),
312 resolvedActionBuilder(new RuleName("rule-name"), CHAIN, action, In), context);
314 verifyNoMoreInteractions(policyWriterUtil);
318 public void testResolveRemovedChainAction_noTenantId() {
319 final PolicyConfigurationContext context = new PolicyConfigurationContext();
320 context.setPolicyMapLocation(getLocation());
321 final ParameterValueBuilder parameterValueBuilder = new ParameterValueBuilder();
322 parameterValueBuilder.setName(new ParameterName(SFC_CHAIN_NAME)).setStringValue(SFC_CHAIN_NAME);
323 final ParameterValue parameterValue = parameterValueBuilder.build();
325 final ServiceFunctionPathBuilder pathBuilder = new ServiceFunctionPathBuilder();
326 pathBuilder.setName(new SfpName(SFC_PATH_NAME)).setServiceChainName(new SfcName(SFC_CHAIN_NAME));
327 final ServiceFunctionPathsBuilder pathsBuilder = new ServiceFunctionPathsBuilder();
328 pathsBuilder.setServiceFunctionPath(Collections.singletonList(pathBuilder.build()));
330 final PeerEndpoint peerEndpoint = peerEndpointBuilder();
331 final Action action = actionBuilder(Collections.singletonList(parameterValue));
333 stub(method(SfcProviderServicePathAPI.class, "readAllServiceFunctionPaths")).toReturn(pathsBuilder.build());
334 stub(method(PolicyManagerUtil.class, "getTenantId")).toReturn(null);
336 ServiceChainingUtil.resolveRemovedChainAction(peerEndpoint, sgtBuilder(10), sgtBuilder(20),
337 resolvedActionBuilder(new RuleName("rule-name"), CHAIN, action, In), context);
339 verifyNoMoreInteractions(policyWriterUtil);
343 public void testResolveRemovedChainAction_asymmetricChainOpposite() {
344 final PolicyConfigurationContext context = new PolicyConfigurationContext();
345 context.setPolicyMapLocation(getLocation());
346 final ParameterValueBuilder parameterValueBuilder = new ParameterValueBuilder();
347 parameterValueBuilder.setName(new ParameterName(SFC_CHAIN_NAME)).setStringValue(SFC_CHAIN_NAME);
348 final ParameterValue parameterValue = parameterValueBuilder.build();
350 final ServiceFunctionPathBuilder pathBuilder = new ServiceFunctionPathBuilder();
351 pathBuilder.setName(new SfpName(SFC_PATH_NAME)).setServiceChainName(new SfcName(SFC_CHAIN_NAME))
352 .setSymmetric(false);
353 final ServiceFunctionPathsBuilder pathsBuilder = new ServiceFunctionPathsBuilder();
354 pathsBuilder.setServiceFunctionPath(Collections.singletonList(pathBuilder.build()));
356 final PeerEndpoint peerEndpoint = peerEndpointBuilder();
357 final Action action = actionBuilder(Collections.singletonList(parameterValue));
359 stub(method(SfcProviderServicePathAPI.class, "readAllServiceFunctionPaths")).toReturn(pathsBuilder.build());
360 stub(method(PolicyManagerUtil.class, "getTenantId")).toReturn(new TenantId(TENANT_ID));
362 ServiceChainingUtil.resolveRemovedChainAction(peerEndpoint, sgtBuilder(10), sgtBuilder(20),
363 resolvedActionBuilder(new RuleName("rule-name"), CHAIN, action, In), context);
365 verifyNoMoreInteractions(policyWriterUtil);
369 public void testResolveRemovedChainAction_asymmetricChainDirect() {
370 final PolicyConfigurationContext context = new PolicyConfigurationContext();
371 context.setPolicyMapLocation(getLocation());
372 final ParameterValueBuilder parameterValueBuilder = new ParameterValueBuilder();
373 parameterValueBuilder.setName(new ParameterName(SFC_CHAIN_NAME)).setStringValue(SFC_CHAIN_NAME);
374 final ParameterValue parameterValue = parameterValueBuilder.build();
375 final ServiceFunctionPathBuilder pathBuilder = new ServiceFunctionPathBuilder();
376 pathBuilder.setName(new SfpName(SFC_PATH_NAME)).setServiceChainName(new SfcName(SFC_CHAIN_NAME))
377 .setSymmetric(false);
378 final ServiceFunctionPathsBuilder pathsBuilder = new ServiceFunctionPathsBuilder();
379 pathsBuilder.setServiceFunctionPath(Collections.singletonList(pathBuilder.build()));
380 final PeerEndpoint peerEndpoint = peerEndpointBuilder();
381 final Action action = actionBuilder(Collections.singletonList(parameterValue));
382 final RenderedServicePathHopBuilder hopBuilder = new RenderedServicePathHopBuilder();
383 hopBuilder.setServiceFunctionForwarder(new SffName(SERVICE_FUNCTION_FORWARDER));
384 final ServiceFunctionForwarderBuilder forwarder = new ServiceFunctionForwarderBuilder();
385 forwarder.setName(new SffName(SERVICE_FUNCTION_FORWARDER))
386 .setIpMgmtAddress(new IpAddress(new Ipv4Address(IP_ADDRESS)));
388 stub(method(SfcProviderServicePathAPI.class, "readAllServiceFunctionPaths")).toReturn(pathsBuilder.build());
389 stub(method(PolicyWriterUtil.class, "removeClassMap")).toReturn(true);
390 stub(method(PolicyWriterUtil.class, "removePolicyMapEntry")).toReturn(true);
391 stub(method(PolicyWriterUtil.class, "removeServicePath")).toReturn(true);
392 stub(method(PolicyWriterUtil.class, "removeRemote")).toReturn(true);
394 ServiceChainingUtil.resolveRemovedChainAction(peerEndpoint, sgtBuilder(10), sgtBuilder(20),
395 resolvedActionBuilder(new RuleName("rule-name"), CHAIN, action, Out), context);
397 verifyStatic(times(1));
398 PolicyWriterUtil.removeClassMap(any(ClassMap.class), any(PolicyManagerImpl.PolicyMapLocation.class));
399 PolicyWriterUtil.removePolicyMapEntry(any(Class.class), any(PolicyManagerImpl.PolicyMapLocation.class));
400 PolicyWriterUtil.removeServicePath(any(ServiceChain.class), any(PolicyManagerImpl.PolicyMapLocation.class));
401 PolicyWriterUtil.removeRemote(any(ServiceFfName.class), any(PolicyManagerImpl.PolicyMapLocation.class));
405 public void testResolveRemovedChainAction_symmetricChainDirect() {
406 final PolicyConfigurationContext context = new PolicyConfigurationContext();
407 context.setPolicyMapLocation(getLocation());
408 final ParameterValueBuilder parameterValueBuilder = new ParameterValueBuilder();
409 parameterValueBuilder.setName(new ParameterName(SFC_CHAIN_NAME)).setStringValue(SFC_CHAIN_NAME);
410 final ParameterValue parameterValue = parameterValueBuilder.build();
411 final ServiceFunctionPathBuilder pathBuilder = new ServiceFunctionPathBuilder();
412 pathBuilder.setName(new SfpName(SFC_PATH_NAME)).setServiceChainName(new SfcName(SFC_CHAIN_NAME))
414 final ServiceFunctionPathsBuilder pathsBuilder = new ServiceFunctionPathsBuilder();
415 pathsBuilder.setServiceFunctionPath(Collections.singletonList(pathBuilder.build()));
416 final PeerEndpoint peerEndpoint = peerEndpointBuilder();
417 final Action action = actionBuilder(Collections.singletonList(parameterValue));
418 final RenderedServicePathHopBuilder hopBuilder = new RenderedServicePathHopBuilder();
419 hopBuilder.setServiceFunctionForwarder(new SffName(SERVICE_FUNCTION_FORWARDER));
420 final ServiceFunctionForwarderBuilder forwarder = new ServiceFunctionForwarderBuilder();
421 forwarder.setName(new SffName(SERVICE_FUNCTION_FORWARDER))
422 .setIpMgmtAddress(new IpAddress(new Ipv4Address(IP_ADDRESS)));
424 stub(method(SfcProviderServicePathAPI.class, "readAllServiceFunctionPaths")).toReturn(pathsBuilder.build());
425 stub(method(PolicyWriterUtil.class, "removeClassMap")).toReturn(true);
426 stub(method(PolicyWriterUtil.class, "removePolicyMapEntry")).toReturn(true);
427 stub(method(PolicyWriterUtil.class, "removeServicePath")).toReturn(true);
428 stub(method(PolicyWriterUtil.class, "removeRemote")).toReturn(true);
430 ServiceChainingUtil.resolveRemovedChainAction(peerEndpoint, sgtBuilder(10), sgtBuilder(20),
431 resolvedActionBuilder(new RuleName("rule-name"), CHAIN, action, Out), context);
433 verifyStatic(times(1));
434 PolicyWriterUtil.removeClassMap(any(ClassMap.class), any(PolicyManagerImpl.PolicyMapLocation.class));
435 PolicyWriterUtil.removePolicyMapEntry(any(Class.class), any(PolicyManagerImpl.PolicyMapLocation.class));
436 PolicyWriterUtil.removeServicePath(any(ServiceChain.class), any(PolicyManagerImpl.PolicyMapLocation.class));
437 PolicyWriterUtil.removeRemote(any(ServiceFfName.class), any(PolicyManagerImpl.PolicyMapLocation.class));
441 public void testResolveRemovedChainAction_symmetricChainReversed() {
442 final PolicyConfigurationContext context = new PolicyConfigurationContext();
443 context.setPolicyMapLocation(getLocation());
444 final ParameterValueBuilder parameterValueBuilder = new ParameterValueBuilder();
445 parameterValueBuilder.setName(new ParameterName(SFC_CHAIN_NAME)).setStringValue(SFC_CHAIN_NAME);
446 final ParameterValue parameterValue = parameterValueBuilder.build();
447 final ServiceFunctionPathBuilder pathBuilder = new ServiceFunctionPathBuilder();
448 pathBuilder.setName(new SfpName(SFC_PATH_NAME)).setServiceChainName(new SfcName(SFC_CHAIN_NAME))
450 final ServiceFunctionPathsBuilder pathsBuilder = new ServiceFunctionPathsBuilder();
451 pathsBuilder.setServiceFunctionPath(Collections.singletonList(pathBuilder.build()));
452 final PeerEndpoint peerEndpoint = peerEndpointBuilder();
453 final Action action = actionBuilder(Collections.singletonList(parameterValue));
454 final RenderedServicePathHopBuilder hopBuilder = new RenderedServicePathHopBuilder();
455 hopBuilder.setServiceFunctionForwarder(new SffName(SERVICE_FUNCTION_FORWARDER));
456 final ServiceFunctionForwarderBuilder forwarder = new ServiceFunctionForwarderBuilder();
457 forwarder.setName(new SffName(SERVICE_FUNCTION_FORWARDER))
458 .setIpMgmtAddress(new IpAddress(new Ipv4Address(IP_ADDRESS)));
460 stub(method(SfcProviderServicePathAPI.class, "readAllServiceFunctionPaths")).toReturn(pathsBuilder.build());
461 stub(method(PolicyWriterUtil.class, "removeClassMap")).toReturn(true);
462 stub(method(PolicyWriterUtil.class, "removePolicyMapEntry")).toReturn(true);
463 stub(method(PolicyWriterUtil.class, "removeServicePath")).toReturn(true);
464 stub(method(PolicyWriterUtil.class, "removeRemote")).toReturn(true);
466 ServiceChainingUtil.resolveRemovedChainAction(peerEndpoint, sgtBuilder(10), sgtBuilder(20),
467 resolvedActionBuilder(new RuleName("rule-name"), CHAIN, action, In), context);
469 verifyStatic(times(1));
470 PolicyWriterUtil.removeClassMap(any(ClassMap.class), any(PolicyManagerImpl.PolicyMapLocation.class));
471 PolicyWriterUtil.removePolicyMapEntry(any(Class.class), any(PolicyManagerImpl.PolicyMapLocation.class));
472 PolicyWriterUtil.removeServicePath(any(ServiceChain.class), any(PolicyManagerImpl.PolicyMapLocation.class));
473 PolicyWriterUtil.removeRemote(any(ServiceFfName.class), any(PolicyManagerImpl.PolicyMapLocation.class));
477 public void testResolveRemoteSfcComponents_noForwarder() {
478 final PolicyConfigurationContext context = new PolicyConfigurationContext();
479 context.setPolicyMapLocation(getLocation());
480 boolean result = ServiceChainingUtil.resolveRemoteSfcComponents(buildRsp(), context);
485 public void testResolveRemoteSfcComponents_noForwarderLocator() {
486 final PolicyConfigurationContext context = new PolicyConfigurationContext();
487 context.setPolicyMapLocation(getLocation());
488 final ServiceFunctionForwarderBuilder forwarderBuilder = new ServiceFunctionForwarderBuilder();
489 forwarderBuilder.setName(new SffName(SERVICE_FUNCTION_FORWARDER));
490 final RenderedServicePathHopBuilder hopBuilder = new RenderedServicePathHopBuilder();
491 hopBuilder.setServiceFunctionForwarder(new SffName(SERVICE_FUNCTION_FORWARDER));
492 final RenderedServicePathBuilder rspBuilder = new RenderedServicePathBuilder();
493 rspBuilder.setRenderedServicePathHop(Collections.singletonList(hopBuilder.build()));
495 stub(method(SfcProviderServiceForwarderAPI.class, "readServiceFunctionForwarder")).toReturn(forwarderBuilder.build());
497 boolean result = ServiceChainingUtil.resolveRemoteSfcComponents(rspBuilder.build(), context);
502 public void testResolveRemoteSfcComponents_dplWithoutLocatorType() {
503 final PolicyConfigurationContext context = new PolicyConfigurationContext();
504 context.setPolicyMapLocation(getLocation());
505 final DataPlaneLocatorBuilder dplBuilder = new DataPlaneLocatorBuilder();
506 final SffDataPlaneLocatorBuilder sffDplBuilder = new SffDataPlaneLocatorBuilder();
507 sffDplBuilder.setDataPlaneLocator(dplBuilder.build());
508 final ServiceFunctionForwarderBuilder forwarderBuilder = new ServiceFunctionForwarderBuilder();
509 forwarderBuilder.setName(new SffName(SERVICE_FUNCTION_FORWARDER))
510 .setSffDataPlaneLocator(Collections.singletonList(sffDplBuilder.build()));
511 final RenderedServicePathHopBuilder hopBuilder = new RenderedServicePathHopBuilder();
512 hopBuilder.setServiceFunctionForwarder(new SffName(SERVICE_FUNCTION_FORWARDER));
513 final RenderedServicePathBuilder rspBuilder = new RenderedServicePathBuilder();
514 rspBuilder.setRenderedServicePathHop(Collections.singletonList(hopBuilder.build()));
516 stub(method(SfcProviderServiceForwarderAPI.class, "readServiceFunctionForwarder")).toReturn(forwarderBuilder.build());
518 boolean result = ServiceChainingUtil.resolveRemoteSfcComponents(rspBuilder.build(), context);
523 public void testResolveRemoteSfcComponents_dplWithoutIp() {
524 final PolicyConfigurationContext context = new PolicyConfigurationContext();
525 context.setPolicyMapLocation(getLocation());
526 final DataPlaneLocatorBuilder dplBuilder = new DataPlaneLocatorBuilder();
527 dplBuilder.setLocatorType(new IpBuilder().build());
528 final SffDataPlaneLocatorBuilder sffDplBuilder = new SffDataPlaneLocatorBuilder();
529 sffDplBuilder.setDataPlaneLocator(dplBuilder.build());
530 final ServiceFunctionForwarderBuilder forwarderBuilder = new ServiceFunctionForwarderBuilder();
531 forwarderBuilder.setName(new SffName(SERVICE_FUNCTION_FORWARDER))
532 .setSffDataPlaneLocator(Collections.singletonList(sffDplBuilder.build()));
533 final RenderedServicePathHopBuilder hopBuilder = new RenderedServicePathHopBuilder();
534 hopBuilder.setServiceFunctionForwarder(new SffName(SERVICE_FUNCTION_FORWARDER));
535 final RenderedServicePathBuilder rspBuilder = new RenderedServicePathBuilder();
536 rspBuilder.setRenderedServicePathHop(Collections.singletonList(hopBuilder.build()));
538 stub(method(SfcProviderServiceForwarderAPI.class, "readServiceFunctionForwarder")).toReturn(forwarderBuilder.build());
540 boolean result = ServiceChainingUtil.resolveRemoteSfcComponents(rspBuilder.build(), context);
545 public void testResolveRemoteSfcComponents_sffWithoutMgmtAddress() {
546 final PolicyConfigurationContext context = new PolicyConfigurationContext();
547 context.setPolicyMapLocation(getLocation());
548 final DataPlaneLocatorBuilder dplBuilder = new DataPlaneLocatorBuilder();
549 dplBuilder.setLocatorType(new IpBuilder().setIp(new IpAddress(new Ipv4Address(IP_ADDRESS))).build());
550 final SffDataPlaneLocatorBuilder sffDplBuilder = new SffDataPlaneLocatorBuilder();
551 sffDplBuilder.setDataPlaneLocator(dplBuilder.build());
552 final ServiceFunctionForwarderBuilder forwarderBuilder = new ServiceFunctionForwarderBuilder();
553 forwarderBuilder.setName(new SffName(SERVICE_FUNCTION_FORWARDER))
554 .setSffDataPlaneLocator(Collections.singletonList(sffDplBuilder.build()));
555 final RenderedServicePathHopBuilder hopBuilder = new RenderedServicePathHopBuilder();
556 hopBuilder.setServiceFunctionForwarder(new SffName(SERVICE_FUNCTION_FORWARDER));
557 final RenderedServicePathBuilder rspBuilder = new RenderedServicePathBuilder();
558 rspBuilder.setRenderedServicePathHop(Collections.singletonList(hopBuilder.build()));
560 stub(method(SfcProviderServiceForwarderAPI.class, "readServiceFunctionForwarder")).toReturn(forwarderBuilder.build());
562 boolean result = ServiceChainingUtil.resolveRemoteSfcComponents(rspBuilder.build(), context);
567 public void testResolveRemoteSfcComponents_remoteCase() {
568 final PolicyConfigurationContext context = new PolicyConfigurationContext();
569 context.setPolicyMapLocation(getLocation());
570 final DataPlaneLocatorBuilder dplBuilder = new DataPlaneLocatorBuilder();
571 dplBuilder.setLocatorType(new IpBuilder().setIp(new IpAddress(new Ipv4Address("190.1.1.12"))).build());
572 final SffDataPlaneLocatorBuilder sffDplBuilder = new SffDataPlaneLocatorBuilder();
573 sffDplBuilder.setDataPlaneLocator(dplBuilder.build());
574 final ServiceFunctionForwarderBuilder forwarderBuilder = new ServiceFunctionForwarderBuilder();
575 forwarderBuilder.setName(new SffName(SERVICE_FUNCTION_FORWARDER))
576 .setSffDataPlaneLocator(Collections.singletonList(sffDplBuilder.build()))
577 .setIpMgmtAddress(new IpAddress(new Ipv4Address(IP_ADDRESS)));
578 final RenderedServicePathHopBuilder hopBuilder = new RenderedServicePathHopBuilder();
579 hopBuilder.setServiceFunctionForwarder(new SffName(SERVICE_FUNCTION_FORWARDER));
580 final RenderedServicePathBuilder rspBuilder = new RenderedServicePathBuilder();
581 rspBuilder.setRenderedServicePathHop(Collections.singletonList(hopBuilder.build()));
583 stub(method(SfcProviderServiceForwarderAPI.class, "readServiceFunctionForwarder")).toReturn(forwarderBuilder.build());
584 stub(method(PolicyWriterUtil.class, "writeServicePath")).toReturn(true);
585 stub(method(PolicyWriterUtil.class, "writeRemote")).toReturn(true);
587 boolean result = ServiceChainingUtil.resolveRemoteSfcComponents(rspBuilder.build(), context);
589 verifyStatic(times(1));
590 PolicyWriterUtil.writeServicePath(any(ServiceChain.class), any(PolicyManagerImpl.PolicyMapLocation.class));
591 PolicyWriterUtil.writeRemote(any(ServiceFfName.class), any(PolicyManagerImpl.PolicyMapLocation.class));
595 public void testFindServicePathFromParameterValues_noParams() {
596 final ServiceFunctionPath result = ServiceChainingUtil.findServicePathFromParameterValues(Collections.emptyList());
601 public void testFindServicePathFromParameterValues_differentActionDefinition() {
602 final ParameterValueBuilder noNamePVBuilder = new ParameterValueBuilder();
603 final ParameterValue noNamePV = noNamePVBuilder.build();
604 final ParameterValueBuilder intValuePMBuilder = new ParameterValueBuilder();
605 String PARAMETER_VALUE_1 = "parameter-value-1";
606 intValuePMBuilder.setName(new ParameterName(PARAMETER_VALUE_1))
608 final ParameterValue intValuePV = intValuePMBuilder.build();
609 final ParameterValueBuilder stringValuePVBuilder = new ParameterValueBuilder();
610 String PARAMETER_VALUE_2 = "parameter-value-2";
611 stringValuePVBuilder.setName(new ParameterName(PARAMETER_VALUE_2))
612 .setStringValue(PARAMETER_VALUE_2);
613 final ParameterValue stringValuePV = stringValuePVBuilder.build();
614 final List<ParameterValue> parameterValues = new ArrayList<>();
615 parameterValues.add(noNamePV);
616 parameterValues.add(intValuePV);
617 parameterValues.add(stringValuePV);
618 final ServiceFunctionPath result = ServiceChainingUtil.findServicePathFromParameterValues(parameterValues);
623 public void testFindServicePathFromParameterValues_noPathFound() {
624 final ParameterValueBuilder parameterValueBuilder = new ParameterValueBuilder();
625 parameterValueBuilder.setName(new ParameterName(SFC_CHAIN_NAME))
626 .setStringValue(SFC_CHAIN_NAME);
627 final List<ParameterValue> parameterValues = Collections.singletonList(parameterValueBuilder.build());
628 final ServiceFunctionPathsBuilder serviceFunctionPathsBuilder = new ServiceFunctionPathsBuilder();
629 final ServiceFunctionPaths serviceFunctionPaths = serviceFunctionPathsBuilder.build();
631 stub(method(SfcProviderServicePathAPI.class, "readAllServiceFunctionPaths")).toReturn(serviceFunctionPaths);
633 final ServiceFunctionPath result = ServiceChainingUtil.findServicePathFromParameterValues(parameterValues);
638 public void testFindServicePathFromParameterValues() {
639 final ParameterValueBuilder parameterValueBuilder = new ParameterValueBuilder();
640 parameterValueBuilder.setName(new ParameterName(SFC_CHAIN_NAME))
641 .setStringValue(SFC_CHAIN_NAME);
642 final List<ParameterValue> parameterValues = Collections.singletonList(parameterValueBuilder.build());
643 final ServiceFunctionPathBuilder serviceFunctionPathBuilder = new ServiceFunctionPathBuilder();
644 serviceFunctionPathBuilder.setName(new SfpName(SFC_PATH_NAME)).setServiceChainName(new SfcName(SFC_CHAIN_NAME));
645 final ServiceFunctionPathsBuilder serviceFunctionPathsBuilder = new ServiceFunctionPathsBuilder();
646 serviceFunctionPathsBuilder.setServiceFunctionPath(Collections.singletonList(serviceFunctionPathBuilder.build()));
647 final ServiceFunctionPaths serviceFunctionPaths = serviceFunctionPathsBuilder.build();
649 stub(method(SfcProviderServicePathAPI.class, "readAllServiceFunctionPaths")).toReturn(serviceFunctionPaths);
651 final ServiceFunctionPath result = ServiceChainingUtil.findServicePathFromParameterValues(parameterValues);
652 assertNotNull(result);
656 public void findServiceFunctionPathFromServiceChainName_noPaths() {
657 stub(method(SfcProviderServicePathAPI.class, "readAllServiceFunctionPaths")).toReturn(null);
659 final ServiceFunctionPath result = ServiceChainingUtil.findServiceFunctionPathFromServiceChainName(new SfcName(SFC_CHAIN_NAME));
664 public void findServiceFunctionPathFromServiceChainName_noPathFound() {
665 final ServiceFunctionPathBuilder serviceFunctionPathBuilder = new ServiceFunctionPathBuilder();
666 final ServiceFunctionPathsBuilder serviceFunctionPathsBuilder = new ServiceFunctionPathsBuilder();
667 serviceFunctionPathsBuilder.setServiceFunctionPath(Collections.singletonList(serviceFunctionPathBuilder.build()));
669 stub(method(SfcProviderServicePathAPI.class, "readAllServiceFunctionPaths")).toReturn(serviceFunctionPathsBuilder.build());
671 final ServiceFunctionPath result = ServiceChainingUtil.findServiceFunctionPathFromServiceChainName(new SfcName(SFC_CHAIN_NAME));
676 public void findServiceFunctionPathFromServiceChainName_pathFound() {
677 final ServiceFunctionPathBuilder serviceFunctionPathBuilder = new ServiceFunctionPathBuilder();
678 serviceFunctionPathBuilder.setName(new SfpName(SFC_PATH_NAME))
679 .setServiceChainName(new SfcName(SFC_CHAIN_NAME));
680 final ServiceFunctionPathsBuilder serviceFunctionPathsBuilder = new ServiceFunctionPathsBuilder();
681 serviceFunctionPathsBuilder.setServiceFunctionPath(Collections.singletonList(serviceFunctionPathBuilder.build()));
683 stub(method(SfcProviderServicePathAPI.class, "readAllServiceFunctionPaths")).toReturn(serviceFunctionPathsBuilder.build());
685 final ServiceFunctionPath result = ServiceChainingUtil.findServiceFunctionPathFromServiceChainName(new SfcName(SFC_CHAIN_NAME));
686 assertNotNull(result);
690 public void testCreateRenderedPath_renderedPathFound() {
691 final Sgt sourceSgt = new Sgt(1);
692 final Sgt destinationSgt = new Sgt(2);
693 final PolicyConfigurationContext context = new PolicyConfigurationContext();
694 context.setPolicyMapLocation(getLocation());
695 final ServiceFunctionPathBuilder serviceFunctionPathBuilder = new ServiceFunctionPathBuilder();
696 serviceFunctionPathBuilder.setName(new SfpName(SFC_PATH_NAME))
698 final ServiceFunctionPath serviceFunctionPath = serviceFunctionPathBuilder.build();
699 final TenantId tenantId = new TenantId(TENANT_ID);
701 stub(method(SfcProviderRenderedPathAPI.class, "readRenderedServicePath")).toReturn(new RenderedServicePathBuilder().build());
703 final RenderedServicePath result = ServiceChainingUtil.resolveRenderedServicePath(serviceFunctionPath, tenantId,
704 dataBroker, sourceSgt, destinationSgt, context);
705 assertNotNull(result);
709 public void testCreateRenderedPath_renderedPathCreated() {
710 ServiceChainingUtil.setTimeout(1L);
711 final Sgt sourceSgt = new Sgt(1);
712 final Sgt destinationSgt = new Sgt(2);
713 final PolicyConfigurationContext context = new PolicyConfigurationContext();
714 context.setPolicyMapLocation(getLocation());
715 final ServiceFunctionPathBuilder serviceFunctionPathBuilder = new ServiceFunctionPathBuilder();
716 serviceFunctionPathBuilder.setName(new SfpName(SFC_PATH_NAME))
718 final ServiceFunctionPath serviceFunctionPath = serviceFunctionPathBuilder.build();
719 final TenantId tenantId = new TenantId(TENANT_ID);
721 stub(method(SfcProviderRenderedPathAPI.class, "readRenderedServicePath")).toReturn(null);
722 stub(method(SfcProviderRenderedPathAPI.class, "createRenderedServicePathAndState", ServiceFunctionPath.class,
723 CreateRenderedPathInput.class)).toReturn(new RenderedServicePathBuilder().build());
725 final RenderedServicePath result = ServiceChainingUtil.resolveRenderedServicePath(serviceFunctionPath, tenantId,
726 dataBroker, sourceSgt, destinationSgt, context);
727 assertNotNull(result);
731 public void testCreateReversedRenderedPath_renderedPathFound() {
732 final Sgt sourceSgt = new Sgt(1);
733 final Sgt destinationSgt = new Sgt(2);
734 final PolicyConfigurationContext context = new PolicyConfigurationContext();
735 context.setPolicyMapLocation(getLocation());
736 final ServiceFunctionPathBuilder serviceFunctionPathBuilder = new ServiceFunctionPathBuilder();
737 serviceFunctionPathBuilder.setName(new SfpName(SFC_PATH_NAME))
739 final ServiceFunctionPath serviceFunctionPath = serviceFunctionPathBuilder.build();
740 final TenantId tenantId = new TenantId(TENANT_ID);
742 stub(method(SfcProviderRenderedPathAPI.class, "readRenderedServicePath")).toReturn(new RenderedServicePathBuilder().build());
744 final RenderedServicePath result = ServiceChainingUtil.resolveReversedRenderedServicePath(serviceFunctionPath,
745 tenantId, dataBroker, sourceSgt, destinationSgt, context);
746 assertNotNull(result);
750 public void testCreateReversedRenderedPath_renderedPathCreated() {
751 ServiceChainingUtil.setTimeout(1L);
752 final Sgt sourceSgt = new Sgt(1);
753 final Sgt destinationSgt = new Sgt(2);
754 final PolicyConfigurationContext context = new PolicyConfigurationContext();
755 context.setPolicyMapLocation(getLocation());
756 final ServiceFunctionPathBuilder serviceFunctionPathBuilder = new ServiceFunctionPathBuilder();
757 serviceFunctionPathBuilder.setName(new SfpName(SFC_PATH_NAME))
759 final ServiceFunctionPath serviceFunctionPath = serviceFunctionPathBuilder.build();
760 final TenantId tenantId = new TenantId(TENANT_ID);
762 stub(method(SfcProviderRenderedPathAPI.class, "readRenderedServicePath")).toReturn(null);
763 stub(method(SfcProviderRenderedPathAPI.class, "createReverseRenderedServicePathEntry"))
764 .toReturn(new RenderedServicePathBuilder().build());
766 final RenderedServicePath result = ServiceChainingUtil.resolveReversedRenderedServicePath(serviceFunctionPath,
767 tenantId, dataBroker, sourceSgt, destinationSgt, context);
768 assertNotNull(result);
772 public void testCreateRemoteForwarder() {
773 final ServiceFfNameBuilder serviceFfNameBuilder = new ServiceFfNameBuilder();
774 serviceFfNameBuilder.setName(SERVICE_FUNCTION_FORWARDER)
775 .setKey(new ServiceFfNameKey(SERVICE_FUNCTION_FORWARDER));
776 final ServiceFfName testForwarder = serviceFfNameBuilder.build();
777 final ServiceFunctionForwarderBuilder serviceFunctionForwarderBuilder = new ServiceFunctionForwarderBuilder();
778 serviceFunctionForwarderBuilder.setName(new SffName(SERVICE_FUNCTION_FORWARDER))
779 .setKey(new ServiceFunctionForwarderKey(new SffName(SERVICE_FUNCTION_FORWARDER)));
780 final ServiceFfName result = ServiceChainingUtil.createRemoteForwarder(serviceFunctionForwarderBuilder.build());
781 assertEquals(testForwarder, result);
785 public void testGetServicePath() throws Exception {
786 final String sfcNameValue = "123";
787 final ServiceFunctionPath sfcPath = createSfp(sfcNameValue);
788 final ServiceFunctionPaths sfcPaths = new ServiceFunctionPathsBuilder()
789 .setServiceFunctionPath(Collections.singletonList(sfcPath))
792 stub(method(SfcProviderServicePathAPI.class, "readAllServiceFunctionPaths")).toReturn(sfcPaths);
794 final ServiceFunctionPath servicePath = ServiceChainingUtil.findServicePathFromParameterValues(Lists.newArrayList(
795 createParameterValue(sfcNameValue)
797 assertEquals(sfcPath, servicePath);
800 private ParameterValue createParameterValue(final String value) {
801 return new ParameterValueBuilder().setName(new ParameterName("sfc-chain-name")).setStringValue(value).build();
805 public void testCreateRenderedPath() throws Exception {
806 final String sfcNameValue = "123";
807 final ServiceFunctionPath sfp = createSfp(sfcNameValue);
808 final TenantId tenantId = new TenantId("unit-tenant-01");
809 final Sgt sourceSgt = new Sgt(1);
810 final Sgt destinationSgt = new Sgt(2);
811 final PolicyConfigurationContext context = new PolicyConfigurationContext();
812 context.setPolicyMapLocation(getLocation());
814 final RenderedServicePath rsp = createRsp("unit-rsp-01");
816 PowerMockito.mockStatic(SfcProviderRenderedPathAPI.class);
817 PowerMockito.when(SfcProviderRenderedPathAPI.readRenderedServicePath(rspNameCaptor.capture())).thenReturn(rsp);
819 final RenderedServicePath renderedPath = ServiceChainingUtil.resolveRenderedServicePath(sfp, tenantId,
820 dataBroker, sourceSgt, destinationSgt, context);
822 assertEquals("123_plain-unit-tenant-01-gbp-rsp", rspNameCaptor.getValue().getValue());
823 assertEquals(rsp, renderedPath);
827 public void testCreateSymmetricRenderedPath() throws Exception {
828 final ServiceFunctionPath sfp = createSfp("unit-sfp-02");
829 final RenderedServicePath rsp = createRsp("unit-rsp-02");
830 final TenantId tenantId = new TenantId("tenant-02");
831 final Sgt sourceSgt = new Sgt(1);
832 final Sgt destinationSgt = new Sgt(2);
833 final PolicyConfigurationContext context = new PolicyConfigurationContext();
834 context.setPolicyMapLocation(getLocation());
836 PowerMockito.mockStatic(SfcProviderRenderedPathAPI.class);
837 PowerMockito.when(SfcProviderRenderedPathAPI.readRenderedServicePath(rspNameCaptor.capture())).thenReturn(rsp);
838 stub(method(SfcProviderServiceForwarderAPI.class, "readServiceFunctionForwarder"))
839 .toReturn(new ServiceFunctionForwarderBuilder().setName(new SffName("sff-name")).build());
841 final RenderedServicePath symmetricRenderedPath = ServiceChainingUtil.resolveReversedRenderedServicePath(sfp,
842 tenantId, dataBroker, sourceSgt, destinationSgt, context);
844 assertEquals("unit-sfp-02_plain-tenant-02-gbp-rsp-Reverse", rspNameCaptor.getValue().getValue());
845 assertEquals(rsp, symmetricRenderedPath);
849 public void testFindServiceFunctionPath() throws Exception {
850 final String sfcNameValue = "123";
851 final ServiceFunctionPath sfcPath = createSfp(sfcNameValue);
852 final ServiceFunctionPaths sfcPaths = new ServiceFunctionPathsBuilder()
853 .setServiceFunctionPath(Collections.singletonList(sfcPath))
856 stub(method(SfcProviderServicePathAPI.class, "readAllServiceFunctionPaths")).toReturn(sfcPaths);
858 final ServiceFunctionPath servicePath = ServiceChainingUtil.findServiceFunctionPathFromServiceChainName(new SfcName(sfcNameValue));
859 assertEquals(sfcPath, servicePath);
864 private RenderedServicePath buildRsp() {
865 RenderedServicePathBuilder renderedServicePathBuilder = new RenderedServicePathBuilder();
866 renderedServicePathBuilder.setRenderedServicePathHop(null);
867 return renderedServicePathBuilder.build();
870 private RenderedServicePath createRsp(final String rspNameValue) {
871 return new RenderedServicePathBuilder()
872 .setName(new RspName(rspNameValue))
873 .setRenderedServicePathHop(Lists.newArrayList(createRspHop()))
877 private RenderedServicePathHop createRspHop() {
878 return new RenderedServicePathHopBuilder()
879 .setServiceFunctionName(new SfName("rsp-hop-01-sf"))
880 .setServiceFunctionForwarder(new SffName("rsp-hop-01-sf" + "+sff"))
884 private ServiceFunctionPath createSfp(final String sfcNameValue) {
885 return new ServiceFunctionPathBuilder()
886 .setServiceChainName(new SfcName(sfcNameValue))
887 .setName(new SfpName(sfcNameValue + "_plain"))
892 private PeerEndpoint peerEndpointBuilder() {
893 final PeerEndpointBuilder peerEndpointBuilder = new PeerEndpointBuilder();
894 final RuleGroupWithRendererEndpointParticipationBuilder ruleGroupBuilder =
895 new RuleGroupWithRendererEndpointParticipationBuilder();
896 peerEndpointBuilder.setRuleGroupWithRendererEndpointParticipation(Collections.singletonList(ruleGroupBuilder.build()));
897 return peerEndpointBuilder.build();
900 private Map<ActionCase, ActionInDirection> resolvedActionBuilder(@Nonnull final RuleName ruleName,
901 @Nonnull final ActionCase actionCase,
902 @Nonnull final Action action,
903 @Nonnull final Direction direction) {
904 final ActionInDirection actionInDirection = new ActionInDirection(ruleName, action, PROVIDER, direction);
905 return Collections.singletonMap(actionCase, actionInDirection);
908 private PolicyConfigurationContext policyConfigurationContextBuilder() {
909 final RendererEndpointBuilder rendererEndpointBuilder = new RendererEndpointBuilder();
910 final PolicyConfigurationContext context = new PolicyConfigurationContext();
911 context.setCurrentRendererEP(rendererEndpointBuilder.build());
915 private Sgt sgtBuilder(final int value) {
916 return new Sgt(value);
919 private Action actionBuilder(final List<ParameterValue> parameters) {
920 final ActionBuilder actionBuilder = new ActionBuilder();
921 actionBuilder.setParameterValue(parameters);
922 return actionBuilder.build();
925 private PolicyManagerImpl.PolicyMapLocation getLocation() {
926 final String POLICY_MAP = "policy-map";
927 final String INTERFACE = "interface";
928 final NodeId nodeId = new NodeId("node-id");
929 final String IP_ADDRESS = "ip-address";
930 return new PolicyManagerImpl.PolicyMapLocation(POLICY_MAP, INTERFACE, nodeId, IP_ADDRESS, dataBroker);