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
8 package org.opendaylight.groupbasedpolicy.renderer.ios_xe_provider.impl.manager;
10 import static org.junit.Assert.assertTrue;
11 import static org.mockito.Matchers.eq;
12 import static org.mockito.Mockito.mock;
13 import static org.mockito.Mockito.when;
14 import static org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.HasDirection.Direction.Out;
15 import static org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.EndpointPolicyParticipation.PROVIDER;
16 import static org.powermock.api.support.membermodification.MemberMatcher.method;
17 import static org.powermock.api.support.membermodification.MemberModifier.stub;
19 import java.util.Collections;
20 import java.util.List;
21 import java.util.Optional;
22 import com.google.common.util.concurrent.Futures;
23 import com.google.common.util.concurrent.ListenableFuture;
24 import org.junit.Before;
25 import org.junit.Test;
26 import org.junit.runner.RunWith;
27 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
28 import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
29 import org.opendaylight.groupbasedpolicy.renderer.ios_xe_provider.impl.util.PolicyManagerUtil;
30 import org.opendaylight.groupbasedpolicy.renderer.ios_xe_provider.impl.util.RendererPolicyUtil;
31 import org.opendaylight.groupbasedpolicy.renderer.ios_xe_provider.impl.util.ServiceChainingUtil;
32 import org.opendaylight.groupbasedpolicy.util.IetfModelCodec;
33 import org.opendaylight.sfc.provider.api.SfcProviderServiceForwarderAPI;
34 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.common.rev151017.RspName;
35 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.common.rev151017.SfName;
36 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.common.rev151017.SffName;
37 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.common.rev151017.SfpName;
38 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.rsp.rev140701.rendered.service.paths.RenderedServicePath;
39 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.rsp.rev140701.rendered.service.paths.RenderedServicePathBuilder;
40 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.rsp.rev140701.rendered.service.paths.RenderedServicePathKey;
41 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.rsp.rev140701.rendered.service.paths.rendered.service.path.RenderedServicePathHopBuilder;
42 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sff.rev140701.service.function.forwarders.ServiceFunctionForwarder;
43 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sff.rev140701.service.function.forwarders.ServiceFunctionForwarderBuilder;
44 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sff.rev140701.service.function.forwarders.ServiceFunctionForwarderKey;
45 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sfp.rev140701.service.function.paths.ServiceFunctionPath;
46 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sfp.rev140701.service.function.paths.ServiceFunctionPathBuilder;
47 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sfp.rev140701.service.function.paths.ServiceFunctionPathKey;
48 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
49 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.has.absolute.location.AbsoluteLocation;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.has.absolute.location.AbsoluteLocationBuilder;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.has.absolute.location.absolute.location.location.type.ExternalLocationCaseBuilder;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ActionDefinitionId;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ContextId;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ContractId;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SubjectName;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.l2_l3.rev160427.IpPrefixType;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.l2_l3.rev160427.L2BridgeDomain;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.HasDirection;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.EndpointPolicyParticipation;
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.has.rule.group.with.renderer.endpoint.participation.RuleGroupWithRendererEndpointParticipation;
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.has.rule.group.with.renderer.endpoint.participation.RuleGroupWithRendererEndpointParticipationBuilder;
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.has.rule.group.with.renderer.endpoint.participation.RuleGroupWithRendererEndpointParticipationKey;
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.Configuration;
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.ConfigurationBuilder;
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.EndpointsBuilder;
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.RendererEndpointsBuilder;
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.RendererForwarding;
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.RuleGroupsBuilder;
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.endpoints.AddressEndpointWithLocation;
72 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.endpoints.AddressEndpointWithLocationBuilder;
73 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.endpoints.AddressEndpointWithLocationKey;
74 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.renderer.endpoints.RendererEndpoint;
75 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.renderer.endpoints.RendererEndpointBuilder;
76 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.renderer.endpoints.RendererEndpointKey;
77 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.renderer.endpoints.renderer.endpoint.PeerEndpointBuilder;
78 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.renderer.endpoints.renderer.endpoint.PeerEndpointKey;
79 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.rule.groups.RuleGroup;
80 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.rule.groups.RuleGroupBuilder;
81 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.rule.groups.RuleGroupKey;
82 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.resolved.policy.rev150828.has.actions.ActionBuilder;
83 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.resolved.policy.rev150828.has.classifiers.ClassifierBuilder;
84 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.resolved.policy.rev150828.has.resolved.rules.ResolvedRule;
85 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.resolved.policy.rev150828.has.resolved.rules.ResolvedRuleBuilder;
86 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.groupbasedpolicy.sxp.mapper.model.rev160302.AddressEndpointWithLocationAug;
87 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.groupbasedpolicy.sxp.mapper.model.rev160302.AddressEndpointWithLocationAugBuilder;
88 import org.opendaylight.yang.gen.v1.urn.opendaylight.sxp.database.rev160308.Sgt;
89 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
90 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
91 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId;
92 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
93 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
94 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
95 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey;
96 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
97 import org.powermock.core.classloader.annotations.PrepareForTest;
98 import org.powermock.modules.junit4.PowerMockRunner;
100 @RunWith(PowerMockRunner.class)
101 @PrepareForTest({RendererPolicyUtil.class, PolicyManagerUtil.class, SfcProviderServiceForwarderAPI.class})
102 public class PolicyManagerImplTest {
104 private final String address = "address";
105 private final String connector = "connector";
106 private final SfpName servicePath = new SfpName("service-path");
107 private final RspName renderedPath = new RspName("rendered-path");
108 private final SffName forwarderName = new SffName("service-forwarder");
109 private final ContextId contextId_1 = new ContextId("context-id-1");
110 private final ContextId contextId_2 = new ContextId("context-id-2");
111 private final ContextId contextId_3 = new ContextId("context-id-3");
112 private final ContextId contextId_4 = new ContextId("context-id-4");
113 private final ContractId contractId = new ContractId("contract-id");
114 private final String ipAddress = "192.168.50.1";
115 private final NodeId nodeId = new NodeId("node-id");
116 private final SubjectName subjectName = new SubjectName("subject-name");
117 private final TenantId tenantId = new TenantId("tenant-id");
118 private final TopologyId topologyId = new TopologyId("topology-id");
119 private final ActionDefinitionId chainActionDefinitionId = new ActionDefinitionId("Action-Chain");
120 private final ActionDefinitionId otherActionDefinitionId = new ActionDefinitionId("Action-Other");
121 private final SfName functionName = new SfName("service-function");
122 private PolicyManagerImpl policyManager;
123 private DataBroker mountpoint;
124 private NodeManager nodeManager;
128 mountpoint = mock(DataBroker.class);
129 ReadWriteTransaction readWriteTransaction = mock(ReadWriteTransaction.class);
130 nodeManager = mock(NodeManager.class);
131 policyManager = new PolicyManagerImpl(mountpoint, nodeManager);
132 when(mountpoint.newReadWriteTransaction()).thenReturn(readWriteTransaction);
133 when(readWriteTransaction.submit()).thenReturn(Futures.immediateCheckedFuture(null));
137 public void testSyncPolicy_emptyConfiguration() throws Exception {
138 Configuration policyConfiguration = createTestConfiguration(null, null, null, null);
139 ListenableFuture result = policyManager.syncPolicy(policyConfiguration, null, 0);
140 assertTrue((boolean) result.get());
144 public void testSyncPolicy_noEndpointsInConfiguration() throws Exception {
145 RendererEndpoint rendererEndpoint = createRendererEndpoint(contextId_1, contextId_2, null);
146 Configuration policyConfiguration = createTestConfiguration(null, Collections.singletonList(rendererEndpoint),
148 ListenableFuture result = policyManager.syncPolicy(policyConfiguration, null, 0);
149 assertTrue((boolean) result.get());
153 public void testSyncPolicy_noMountPoint() throws Exception {
154 AddressEndpointWithLocation endpointWithLocation = createAddressEndpointWithLocation(contextId_1, null, false);
155 RendererEndpoint rendererEndpoint = createRendererEndpoint(contextId_2, contextId_3, null);
156 Configuration policyConfiguration = createTestConfiguration(Collections.singletonList(endpointWithLocation),
157 Collections.singletonList(rendererEndpoint), null, null);
159 AbsoluteLocation location = createAbsoluteLocationExternal(connector, createMountpointIid());
160 AddressEndpointWithLocation lookupEndpoint = createAddressEndpointWithLocation(contextId_4, location, false);
161 stub(method(RendererPolicyUtil.class, "lookupEndpoint")).toReturn(lookupEndpoint);
162 when(nodeManager.getNodeMountPoint(eq(createMountpointIid()))).thenReturn(null);
164 ListenableFuture result = policyManager.syncPolicy(policyConfiguration, null, 0);
165 assertTrue((boolean) result.get());
169 public void testSyncPolicy_nullSgtTags() throws Exception {
170 AddressEndpointWithLocation endpointWithLocation = createAddressEndpointWithLocation(contextId_1, null, false);
171 RendererEndpoint rendererEndpoint = createRendererEndpoint(contextId_2, contextId_3, null);
172 Configuration policyConfiguration = createTestConfiguration(Collections.singletonList(endpointWithLocation),
173 Collections.singletonList(rendererEndpoint), null, null);
175 AbsoluteLocation location = createAbsoluteLocationExternal(connector, createMountpointIid());
176 AddressEndpointWithLocation lookupEndpoint = createAddressEndpointWithLocation(contextId_4, location, false);
177 stub(method(RendererPolicyUtil.class, "lookupEndpoint")).toReturn(lookupEndpoint);
178 when(nodeManager.getNodeMountPoint(eq(createMountpointIid()))).thenReturn(mountpoint);
179 when(nodeManager.getNodeIdByMountpointIid(eq(createMountpointIid()))).thenReturn(nodeId);
180 when(nodeManager.getNodeManagementIpByMountPointIid(eq(createMountpointIid()))).thenReturn(Optional.of(ipAddress));
182 ListenableFuture result = policyManager.syncPolicy(policyConfiguration, null, 0);
183 assertTrue((boolean) result.get());
187 public void testSyncPolicy_emptyRuleGroup() throws Exception {
188 AddressEndpointWithLocation endpointWithLocation = createAddressEndpointWithLocation(contextId_1, null, false);
189 RuleGroupWithRendererEndpointParticipation ruleGroupWithParticipation =
190 createRuleGroupWithRendererEpParticipation(PROVIDER);
191 RendererEndpoint rendererEndpoint = createRendererEndpoint(contextId_2, contextId_3,
192 ruleGroupWithParticipation);
193 RuleGroup ruleGroup = createRuleGroup(null);
194 Configuration policyConfiguration = createTestConfiguration(Collections.singletonList(endpointWithLocation),
195 Collections.singletonList(rendererEndpoint), null, ruleGroup);
197 AbsoluteLocation location = createAbsoluteLocationExternal(connector, createMountpointIid());
198 AddressEndpointWithLocation lookupEndpoint = createAddressEndpointWithLocation(contextId_4, location, true);
199 stub(method(RendererPolicyUtil.class, "lookupEndpoint")).toReturn(lookupEndpoint);
200 when(nodeManager.getNodeMountPoint(eq(createMountpointIid()))).thenReturn(mountpoint);
201 when(nodeManager.getNodeIdByMountpointIid(eq(createMountpointIid()))).thenReturn(nodeId);
202 when(nodeManager.getNodeManagementIpByMountPointIid(eq(createMountpointIid()))).thenReturn(Optional.of(ipAddress));
204 ListenableFuture result = policyManager.syncPolicy(policyConfiguration, null, 0);
205 assertTrue((boolean) result.get());
209 public void testSyncPolicy_noActionDefinition() throws Exception {
210 AddressEndpointWithLocation endpointWithLocation = createAddressEndpointWithLocation(contextId_1, null, false);
211 RuleGroupWithRendererEndpointParticipation ruleGroupWithParticipation =
212 createRuleGroupWithRendererEpParticipation(PROVIDER);
213 RendererEndpoint rendererEndpoint = createRendererEndpoint(contextId_2, contextId_3,
214 ruleGroupWithParticipation);
216 RuleGroup ruleGroup = createRuleGroup(createRule(Out, null));
217 Configuration policyConfiguration = createTestConfiguration(Collections.singletonList(endpointWithLocation),
218 Collections.singletonList(rendererEndpoint), null, ruleGroup);
220 AbsoluteLocation location = createAbsoluteLocationExternal(connector, createMountpointIid());
221 AddressEndpointWithLocation lookupEndpoint = createAddressEndpointWithLocation(contextId_4, location, true);
222 stub(method(RendererPolicyUtil.class, "lookupEndpoint")).toReturn(lookupEndpoint);
223 when(nodeManager.getNodeMountPoint(eq(createMountpointIid()))).thenReturn(mountpoint);
224 when(nodeManager.getNodeIdByMountpointIid(eq(createMountpointIid()))).thenReturn(nodeId);
225 when(nodeManager.getNodeManagementIpByMountPointIid(eq(createMountpointIid()))).thenReturn(Optional.of(ipAddress));
227 ListenableFuture result = policyManager.syncPolicy(policyConfiguration, null, 0);
228 assertTrue((boolean) result.get());
232 public void testSyncPolicy_otherAction() throws Exception {
233 AddressEndpointWithLocation endpointWithLocation = createAddressEndpointWithLocation(contextId_1, null, false);
234 RuleGroupWithRendererEndpointParticipation ruleGroupWithParticipation =
235 createRuleGroupWithRendererEpParticipation(PROVIDER);
236 RendererEndpoint rendererEndpoint = createRendererEndpoint(contextId_2, contextId_3,
237 ruleGroupWithParticipation);
239 RuleGroup ruleGroup = createRuleGroup(createRule(Out, otherActionDefinitionId));
240 Configuration policyConfiguration = createTestConfiguration(Collections.singletonList(endpointWithLocation),
241 Collections.singletonList(rendererEndpoint), null, ruleGroup);
243 AbsoluteLocation location = createAbsoluteLocationExternal(connector, createMountpointIid());
244 AddressEndpointWithLocation lookupEndpoint = createAddressEndpointWithLocation(contextId_4, location, true);
245 stub(method(RendererPolicyUtil.class, "lookupEndpoint")).toReturn(lookupEndpoint);
246 when(nodeManager.getNodeMountPoint(eq(createMountpointIid()))).thenReturn(mountpoint);
247 when(nodeManager.getNodeIdByMountpointIid(eq(createMountpointIid()))).thenReturn(nodeId);
248 when(nodeManager.getNodeManagementIpByMountPointIid(eq(createMountpointIid()))).thenReturn(Optional.of(ipAddress));
250 ListenableFuture result = policyManager.syncPolicy(policyConfiguration, null, 0);
251 assertTrue((boolean) result.get());
255 public void testSyncPolicy_asymmetricChain() throws Exception {
256 AddressEndpointWithLocation endpointWithLocation = createAddressEndpointWithLocation(contextId_1, null, false);
257 RuleGroupWithRendererEndpointParticipation ruleGroupWithParticipation =
258 createRuleGroupWithRendererEpParticipation(PROVIDER);
259 RendererEndpoint rendererEndpoint = createRendererEndpoint(contextId_2, contextId_3,
260 ruleGroupWithParticipation);
262 RuleGroup ruleGroup = createRuleGroup(createRule(Out, chainActionDefinitionId));
263 Configuration policyConfiguration = createTestConfiguration(Collections.singletonList(endpointWithLocation),
264 Collections.singletonList(rendererEndpoint), null, ruleGroup);
266 AbsoluteLocation location = createAbsoluteLocationExternal(connector, createMountpointIid());
267 AddressEndpointWithLocation lookupEndpoint = createAddressEndpointWithLocation(contextId_4, location, true);
268 stub(method(RendererPolicyUtil.class, "lookupEndpoint")).toReturn(lookupEndpoint);
269 when(nodeManager.getNodeMountPoint(eq(createMountpointIid()))).thenReturn(mountpoint);
270 when(nodeManager.getNodeIdByMountpointIid(eq(createMountpointIid()))).thenReturn(nodeId);
271 when(nodeManager.getNodeManagementIpByMountPointIid(eq(createMountpointIid()))).thenReturn(Optional.of(ipAddress));
272 ServiceFunctionPath sfp = createServiceFunctionPath();
273 stub(method(ServiceChainingUtil.class, "findServicePathFromParameterValues")).toReturn(sfp);
274 RenderedServicePath rsp = createRenderedServicePath();
275 stub(method(ServiceChainingUtil.class, "resolveRenderedServicePath")).toReturn(rsp);
276 ServiceFunctionForwarder serviceFunctionForwarder = createServiceForwarder();
277 stub(method(SfcProviderServiceForwarderAPI.class, "readServiceFunctionForwarder"))
278 .toReturn(serviceFunctionForwarder);
280 ListenableFuture result = policyManager.syncPolicy(policyConfiguration, null, 0);
281 assertTrue((boolean) result.get());
284 private ServiceFunctionForwarder createServiceForwarder() {
285 ServiceFunctionForwarderBuilder serviceFunctionForwarderBuilder = new ServiceFunctionForwarderBuilder();
286 serviceFunctionForwarderBuilder.setName(new SffName(forwarderName))
287 .setKey(new ServiceFunctionForwarderKey(new SffName(forwarderName)))
288 .setIpMgmtAddress(IetfModelCodec.ipAddress2013(new IpAddress(new Ipv4Address(ipAddress))));
289 return serviceFunctionForwarderBuilder.build();
294 private InstanceIdentifier createMountpointIid() {
295 return InstanceIdentifier.builder(NetworkTopology.class)
296 .child(Topology.class, new TopologyKey(topologyId))
297 .child(Node.class, new NodeKey(nodeId)).build();
300 private ResolvedRule createRule(HasDirection.Direction direction, ActionDefinitionId actionDefinitionId) {
301 ResolvedRuleBuilder resolvedRuleBuilder = new ResolvedRuleBuilder();
302 ClassifierBuilder classifierBuilder = new ClassifierBuilder();
303 classifierBuilder.setDirection(direction);
304 ActionBuilder actionBuilder = new ActionBuilder();
305 actionBuilder.setActionDefinitionId(actionDefinitionId);
306 resolvedRuleBuilder.setClassifier(Collections.singletonList(classifierBuilder.build()))
307 .setAction(Collections.singletonList(actionBuilder.build()));
308 return resolvedRuleBuilder.build();
311 private RuleGroupWithRendererEndpointParticipation createRuleGroupWithRendererEpParticipation(final EndpointPolicyParticipation participation) {
312 RuleGroupWithRendererEndpointParticipationBuilder ruleGroupBuilder = new RuleGroupWithRendererEndpointParticipationBuilder();
313 ruleGroupBuilder.setKey(new RuleGroupWithRendererEndpointParticipationKey(contractId, participation, subjectName,
315 return ruleGroupBuilder.build();
318 private AbsoluteLocation createAbsoluteLocationExternal(String connector, InstanceIdentifier mountpoint) {
319 ExternalLocationCaseBuilder externalLocationCaseBuilder = new ExternalLocationCaseBuilder();
320 externalLocationCaseBuilder.setExternalNodeConnector(connector)
321 .setExternalNodeMountPoint(mountpoint);
322 AbsoluteLocationBuilder absoluteLocationBuilder = new AbsoluteLocationBuilder();
323 absoluteLocationBuilder.setLocationType(externalLocationCaseBuilder.build());
324 return absoluteLocationBuilder.build();
327 private ServiceFunctionPath createServiceFunctionPath() {
328 ServiceFunctionPathBuilder serviceFunctionPathBuilder = new ServiceFunctionPathBuilder();
329 serviceFunctionPathBuilder.setKey(new ServiceFunctionPathKey(servicePath))
330 .setSymmetric(false);
331 return serviceFunctionPathBuilder.build();
334 private RenderedServicePath createRenderedServicePath() {
335 RenderedServicePathHopBuilder renderedServicePathHopBuilder = new RenderedServicePathHopBuilder();
336 renderedServicePathHopBuilder.setServiceFunctionForwarder(forwarderName);
337 renderedServicePathHopBuilder.setServiceFunctionName(functionName);
338 renderedServicePathHopBuilder.build();
340 RenderedServicePathBuilder renderedServicePathBuilder = new RenderedServicePathBuilder();
341 renderedServicePathBuilder.setKey(new RenderedServicePathKey(renderedPath))
342 .setRenderedServicePathHop(Collections.singletonList(renderedServicePathHopBuilder.build()));
343 return renderedServicePathBuilder.build();
347 private AddressEndpointWithLocation createAddressEndpointWithLocation(final ContextId contextId,
348 final AbsoluteLocation location,
349 boolean augmentation) {
350 AddressEndpointWithLocationAugBuilder augmentationBuilder = new AddressEndpointWithLocationAugBuilder();
351 augmentationBuilder.setSgt(new Sgt(1));
352 AddressEndpointWithLocationBuilder addressEndpointBuilder = new AddressEndpointWithLocationBuilder();
353 addressEndpointBuilder.setKey(new AddressEndpointWithLocationKey(address, IpPrefixType.class,
354 contextId, L2BridgeDomain.class))
355 .setAbsoluteLocation(location);
357 addressEndpointBuilder.addAugmentation(AddressEndpointWithLocationAug.class, augmentationBuilder.build());
359 return addressEndpointBuilder.build();
362 private RendererEndpoint createRendererEndpoint(ContextId contextId_1, ContextId contextId_2,
363 RuleGroupWithRendererEndpointParticipation ruleGroup) {
364 PeerEndpointBuilder PeerEndpointBuilder = new PeerEndpointBuilder();
365 PeerEndpointBuilder.setKey(new PeerEndpointKey(address, IpPrefixType.class, contextId_1,
366 L2BridgeDomain.class))
367 .setRuleGroupWithRendererEndpointParticipation(Collections.singletonList(ruleGroup));
368 RendererEndpointBuilder rendererEndpointBuilder = new RendererEndpointBuilder();
369 rendererEndpointBuilder.setKey(new RendererEndpointKey(address, IpPrefixType.class, contextId_2,
370 L2BridgeDomain.class))
371 .setPeerEndpoint(Collections.singletonList(PeerEndpointBuilder.build()));
372 return rendererEndpointBuilder.build();
375 private RuleGroup createRuleGroup(ResolvedRule rule) {
376 RuleGroupBuilder ruleGroupBuilder = new RuleGroupBuilder();
377 ruleGroupBuilder.setKey(new RuleGroupKey(contractId, subjectName, tenantId))
378 .setResolvedRule(Collections.singletonList(rule));
379 return ruleGroupBuilder.build();
382 private Configuration createTestConfiguration(final List<AddressEndpointWithLocation> endpointsWithLocation,
383 final List<RendererEndpoint> rendererEndpoints,
384 final RendererForwarding rendererForwarding,
385 final RuleGroup ruleGroup) {
387 EndpointsBuilder endpointsBuilder = new EndpointsBuilder();
388 endpointsBuilder.setAddressEndpointWithLocation(endpointsWithLocation);
389 // Set renderer endpoints
390 RendererEndpointsBuilder rendererEndpointsBuilder = new RendererEndpointsBuilder();
391 rendererEndpointsBuilder.setRendererEndpoint(rendererEndpoints);
393 RuleGroupsBuilder ruleGroupsBuilder = new RuleGroupsBuilder();
394 ruleGroupsBuilder.setRuleGroup(Collections.singletonList(ruleGroup));
395 // Build configuration
396 ConfigurationBuilder configurationBuilder = new ConfigurationBuilder();
397 configurationBuilder.setEndpoints(endpointsBuilder.build())
398 .setRendererEndpoints(rendererEndpointsBuilder.build())
399 .setRendererForwarding(rendererForwarding)
400 .setRuleGroups(ruleGroupsBuilder.build());
401 return configurationBuilder.build();