1 package org.opendaylight.groupbasedpolicy.renderer.ios_xe_provider.impl.manager;
3 import static org.junit.Assert.assertTrue;
4 import static org.mockito.Matchers.eq;
5 import static org.mockito.Mockito.mock;
6 import static org.mockito.Mockito.when;
7 import static org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.HasDirection.Direction.Out;
8 import static org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.EndpointPolicyParticipation.PROVIDER;
9 import static org.powermock.api.support.membermodification.MemberMatcher.method;
10 import static org.powermock.api.support.membermodification.MemberModifier.stub;
12 import com.google.common.util.concurrent.Futures;
13 import java.util.Collections;
14 import java.util.List;
16 import org.junit.Before;
17 import org.junit.Test;
18 import org.junit.runner.RunWith;
19 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
20 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
21 import org.opendaylight.groupbasedpolicy.renderer.ios_xe_provider.impl.util.PolicyManagerUtil;
22 import org.opendaylight.groupbasedpolicy.renderer.ios_xe_provider.impl.util.RendererPolicyUtil;
23 import org.opendaylight.groupbasedpolicy.renderer.ios_xe_provider.impl.util.ServiceChainingUtil;
24 import org.opendaylight.sfc.provider.api.SfcProviderServiceForwarderAPI;
25 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.common.rev151017.RspName;
26 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.common.rev151017.SfName;
27 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.common.rev151017.SffName;
28 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.common.rev151017.SfpName;
29 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.rsp.rev140701.rendered.service.paths.RenderedServicePath;
30 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.rsp.rev140701.rendered.service.paths.RenderedServicePathBuilder;
31 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.rsp.rev140701.rendered.service.paths.RenderedServicePathKey;
32 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.rsp.rev140701.rendered.service.paths.rendered.service.path.RenderedServicePathHopBuilder;
33 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sff.rev140701.service.function.forwarders.ServiceFunctionForwarder;
34 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sff.rev140701.service.function.forwarders.ServiceFunctionForwarderBuilder;
35 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sff.rev140701.service.function.forwarders.ServiceFunctionForwarderKey;
36 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sfp.rev140701.service.function.paths.ServiceFunctionPath;
37 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sfp.rev140701.service.function.paths.ServiceFunctionPathBuilder;
38 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sfp.rev140701.service.function.paths.ServiceFunctionPathKey;
39 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress;
40 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.has.absolute.location.AbsoluteLocation;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.has.absolute.location.AbsoluteLocationBuilder;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.has.absolute.location.absolute.location.location.type.ExternalLocationCaseBuilder;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ActionDefinitionId;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ContextId;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ContractId;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SubjectName;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.l2_l3.rev160427.IpPrefixType;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.l2_l3.rev160427.L2BridgeDomain;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.HasDirection;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.EndpointPolicyParticipation;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.has.rule.group.with.renderer.endpoint.participation.RuleGroupWithRendererEndpointParticipation;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.has.rule.group.with.renderer.endpoint.participation.RuleGroupWithRendererEndpointParticipationBuilder;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.has.rule.group.with.renderer.endpoint.participation.RuleGroupWithRendererEndpointParticipationKey;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.Configuration;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.ConfigurationBuilder;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.EndpointsBuilder;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.RendererEndpointsBuilder;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.RendererForwarding;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.RuleGroupsBuilder;
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.endpoints.AddressEndpointWithLocation;
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.endpoints.AddressEndpointWithLocationBuilder;
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.endpoints.AddressEndpointWithLocationKey;
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.renderer.endpoints.RendererEndpoint;
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.renderer.endpoints.RendererEndpointBuilder;
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.renderer.endpoints.RendererEndpointKey;
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.renderer.endpoints.renderer.endpoint.PeerEndpointWithPolicyBuilder;
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.renderer.endpoints.renderer.endpoint.PeerEndpointWithPolicyKey;
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.rule.groups.RuleGroup;
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.rule.groups.RuleGroupBuilder;
72 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.rule.groups.RuleGroupKey;
73 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.resolved.policy.rev150828.has.actions.ActionBuilder;
74 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.resolved.policy.rev150828.has.classifiers.ClassifierBuilder;
75 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.resolved.policy.rev150828.has.resolved.rules.ResolvedRule;
76 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.resolved.policy.rev150828.has.resolved.rules.ResolvedRuleBuilder;
77 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.groupbasedpolicy.sxp.mapper.model.rev160302.AddressEndpointWithLocationAug;
78 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.groupbasedpolicy.sxp.mapper.model.rev160302.AddressEndpointWithLocationAugBuilder;
79 import org.opendaylight.yang.gen.v1.urn.opendaylight.sxp.database.rev160308.Sgt;
80 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
81 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
82 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId;
83 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
84 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
85 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
86 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey;
87 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
88 import org.powermock.core.classloader.annotations.PrepareForTest;
89 import org.powermock.modules.junit4.PowerMockRunner;
91 import com.google.common.util.concurrent.ListenableFuture;
93 @RunWith(PowerMockRunner.class)
94 @PrepareForTest({RendererPolicyUtil.class, PolicyManagerUtil.class, SfcProviderServiceForwarderAPI.class})
95 public class PolicyManagerImplTest {
97 private final String address = "address";
98 private final String connector = "connector";
99 private final SfpName servicePath = new SfpName("service-path");
100 private final RspName renderedPath = new RspName("rendered-path");
101 private final SffName forwarderName = new SffName("service-forwarder");
102 private final ContextId contextId_1 = new ContextId("context-id-1");
103 private final ContextId contextId_2 = new ContextId("context-id-2");
104 private final ContextId contextId_3 = new ContextId("context-id-3");
105 private final ContextId contextId_4 = new ContextId("context-id-4");
106 private final ContractId contractId = new ContractId("contract-id");
107 private final String ipAddress = "192.168.50.1";
108 private final NodeId nodeId = new NodeId("node-id");
109 private final SubjectName subjectName = new SubjectName("subject-name");
110 private final TenantId tenantId = new TenantId("tenant-id");
111 private final TopologyId topologyId = new TopologyId("topology-id");
112 private final ActionDefinitionId chainActionDefinitionId = new ActionDefinitionId("Action-Chain");
113 private final ActionDefinitionId otherActionDefinitionId = new ActionDefinitionId("Action-Other");
114 private final SfName functionName = new SfName("service-function");
115 private PolicyManagerImpl policyManager;
116 private DataBroker mountpoint;
117 private NodeManager nodeManager;
118 private WriteTransaction writeTransaction;
122 mountpoint = mock(DataBroker.class);
123 writeTransaction = mock(WriteTransaction.class);
124 nodeManager = mock(NodeManager.class);
125 policyManager = new PolicyManagerImpl(mountpoint, nodeManager);
126 when(mountpoint.newWriteOnlyTransaction()).thenReturn(writeTransaction);
127 when(writeTransaction.submit()).thenReturn(Futures.immediateCheckedFuture((Void) null));
131 public void testSyncPolicy_emptyConfiguration() throws Exception {
132 Configuration policyConfiguration = createTestConfiguration(null, null, null, null);
133 ListenableFuture result = policyManager.syncPolicy(policyConfiguration, null, 0);
134 assertTrue((boolean) result.get());
138 public void testSyncPolicy_noEndpointsInConfiguration() throws Exception {
139 RendererEndpoint rendererEndpoint = createRendererEndpoint(contextId_1, contextId_2, null);
140 Configuration policyConfiguration = createTestConfiguration(null, Collections.singletonList(rendererEndpoint),
142 ListenableFuture result = policyManager.syncPolicy(policyConfiguration, null, 0);
143 assertTrue((boolean) result.get());
147 public void testSyncPolicy_noMountPoint() throws Exception {
148 AddressEndpointWithLocation endpointWithLocation = createAddressEndpointWithLocation(contextId_1, null, false);
149 RendererEndpoint rendererEndpoint = createRendererEndpoint(contextId_2, contextId_3, null);
150 Configuration policyConfiguration = createTestConfiguration(Collections.singletonList(endpointWithLocation),
151 Collections.singletonList(rendererEndpoint), null, null);
153 AbsoluteLocation location = createAbsoluteLocationExternal(connector, createMountpointIid());
154 AddressEndpointWithLocation lookupEndpoint = createAddressEndpointWithLocation(contextId_4, location, false);
155 stub(method(RendererPolicyUtil.class, "lookupEndpoint")).toReturn(lookupEndpoint);
156 when(nodeManager.getNodeMountPoint(eq(createMountpointIid()))).thenReturn(null);
158 ListenableFuture result = policyManager.syncPolicy(policyConfiguration, null, 0);
159 assertTrue((boolean) result.get());
163 public void testSyncPolicy_nullSgtTags() throws Exception {
164 AddressEndpointWithLocation endpointWithLocation = createAddressEndpointWithLocation(contextId_1, null, false);
165 RendererEndpoint rendererEndpoint = createRendererEndpoint(contextId_2, contextId_3, null);
166 Configuration policyConfiguration = createTestConfiguration(Collections.singletonList(endpointWithLocation),
167 Collections.singletonList(rendererEndpoint), null, null);
169 AbsoluteLocation location = createAbsoluteLocationExternal(connector, createMountpointIid());
170 AddressEndpointWithLocation lookupEndpoint = createAddressEndpointWithLocation(contextId_4, location, false);
171 stub(method(RendererPolicyUtil.class, "lookupEndpoint")).toReturn(lookupEndpoint);
172 when(nodeManager.getNodeMountPoint(eq(createMountpointIid()))).thenReturn(mountpoint);
173 when(nodeManager.getNodeIdByMountpointIid(eq(createMountpointIid()))).thenReturn(nodeId);
174 when(nodeManager.getNodeManagementIpByMountPointIid(eq(createMountpointIid()))).thenReturn(ipAddress);
176 ListenableFuture result = policyManager.syncPolicy(policyConfiguration, null, 0);
177 assertTrue((boolean) result.get());
181 public void testSyncPolicy_emptyRuleGroup() throws Exception {
182 AddressEndpointWithLocation endpointWithLocation = createAddressEndpointWithLocation(contextId_1, null, false);
183 RuleGroupWithRendererEndpointParticipation ruleGroupWithParticipation =
184 createRuleGroupWithRendererEpParticipation(PROVIDER);
185 RendererEndpoint rendererEndpoint = createRendererEndpoint(contextId_2, contextId_3,
186 ruleGroupWithParticipation);
187 RuleGroup ruleGroup = createRuleGroup(null);
188 Configuration policyConfiguration = createTestConfiguration(Collections.singletonList(endpointWithLocation),
189 Collections.singletonList(rendererEndpoint), null, ruleGroup);
191 AbsoluteLocation location = createAbsoluteLocationExternal(connector, createMountpointIid());
192 AddressEndpointWithLocation lookupEndpoint = createAddressEndpointWithLocation(contextId_4, location, true);
193 stub(method(RendererPolicyUtil.class, "lookupEndpoint")).toReturn(lookupEndpoint);
194 when(nodeManager.getNodeMountPoint(eq(createMountpointIid()))).thenReturn(mountpoint);
195 when(nodeManager.getNodeIdByMountpointIid(eq(createMountpointIid()))).thenReturn(nodeId);
196 when(nodeManager.getNodeManagementIpByMountPointIid(eq(createMountpointIid()))).thenReturn(ipAddress);
198 ListenableFuture result = policyManager.syncPolicy(policyConfiguration, null, 0);
199 assertTrue((boolean) result.get());
203 public void testSyncPolicy_noActionDefinition() throws Exception {
204 AddressEndpointWithLocation endpointWithLocation = createAddressEndpointWithLocation(contextId_1, null, false);
205 RuleGroupWithRendererEndpointParticipation ruleGroupWithParticipation =
206 createRuleGroupWithRendererEpParticipation(PROVIDER);
207 RendererEndpoint rendererEndpoint = createRendererEndpoint(contextId_2, contextId_3,
208 ruleGroupWithParticipation);
210 RuleGroup ruleGroup = createRuleGroup(createRule(Out, null));
211 Configuration policyConfiguration = createTestConfiguration(Collections.singletonList(endpointWithLocation),
212 Collections.singletonList(rendererEndpoint), null, ruleGroup);
214 AbsoluteLocation location = createAbsoluteLocationExternal(connector, createMountpointIid());
215 AddressEndpointWithLocation lookupEndpoint = createAddressEndpointWithLocation(contextId_4, location, true);
216 stub(method(RendererPolicyUtil.class, "lookupEndpoint")).toReturn(lookupEndpoint);
217 when(nodeManager.getNodeMountPoint(eq(createMountpointIid()))).thenReturn(mountpoint);
218 when(nodeManager.getNodeIdByMountpointIid(eq(createMountpointIid()))).thenReturn(nodeId);
219 when(nodeManager.getNodeManagementIpByMountPointIid(eq(createMountpointIid()))).thenReturn(ipAddress);
221 ListenableFuture result = policyManager.syncPolicy(policyConfiguration, null, 0);
222 assertTrue((boolean) result.get());
226 public void testSyncPolicy_otherAction() throws Exception {
227 AddressEndpointWithLocation endpointWithLocation = createAddressEndpointWithLocation(contextId_1, null, false);
228 RuleGroupWithRendererEndpointParticipation ruleGroupWithParticipation =
229 createRuleGroupWithRendererEpParticipation(PROVIDER);
230 RendererEndpoint rendererEndpoint = createRendererEndpoint(contextId_2, contextId_3,
231 ruleGroupWithParticipation);
233 RuleGroup ruleGroup = createRuleGroup(createRule(Out, otherActionDefinitionId));
234 Configuration policyConfiguration = createTestConfiguration(Collections.singletonList(endpointWithLocation),
235 Collections.singletonList(rendererEndpoint), null, ruleGroup);
237 AbsoluteLocation location = createAbsoluteLocationExternal(connector, createMountpointIid());
238 AddressEndpointWithLocation lookupEndpoint = createAddressEndpointWithLocation(contextId_4, location, true);
239 stub(method(RendererPolicyUtil.class, "lookupEndpoint")).toReturn(lookupEndpoint);
240 when(nodeManager.getNodeMountPoint(eq(createMountpointIid()))).thenReturn(mountpoint);
241 when(nodeManager.getNodeIdByMountpointIid(eq(createMountpointIid()))).thenReturn(nodeId);
242 when(nodeManager.getNodeManagementIpByMountPointIid(eq(createMountpointIid()))).thenReturn(ipAddress);
244 ListenableFuture result = policyManager.syncPolicy(policyConfiguration, null, 0);
245 assertTrue((boolean) result.get());
249 public void testSyncPolicy_asymmetricChain() throws Exception {
250 AddressEndpointWithLocation endpointWithLocation = createAddressEndpointWithLocation(contextId_1, null, false);
251 RuleGroupWithRendererEndpointParticipation ruleGroupWithParticipation =
252 createRuleGroupWithRendererEpParticipation(PROVIDER);
253 RendererEndpoint rendererEndpoint = createRendererEndpoint(contextId_2, contextId_3,
254 ruleGroupWithParticipation);
256 RuleGroup ruleGroup = createRuleGroup(createRule(Out, chainActionDefinitionId));
257 Configuration policyConfiguration = createTestConfiguration(Collections.singletonList(endpointWithLocation),
258 Collections.singletonList(rendererEndpoint), null, ruleGroup);
260 AbsoluteLocation location = createAbsoluteLocationExternal(connector, createMountpointIid());
261 AddressEndpointWithLocation lookupEndpoint = createAddressEndpointWithLocation(contextId_4, location, true);
262 stub(method(RendererPolicyUtil.class, "lookupEndpoint")).toReturn(lookupEndpoint);
263 when(nodeManager.getNodeMountPoint(eq(createMountpointIid()))).thenReturn(mountpoint);
264 when(nodeManager.getNodeIdByMountpointIid(eq(createMountpointIid()))).thenReturn(nodeId);
265 when(nodeManager.getNodeManagementIpByMountPointIid(eq(createMountpointIid()))).thenReturn(ipAddress);
266 ServiceFunctionPath sfp = createServiceFunctionPath();
267 stub(method(ServiceChainingUtil.class, "getServicePath")).toReturn(sfp);
268 RenderedServicePath rsp = createRenderedServicePath();
269 stub(method(ServiceChainingUtil.class, "createRenderedPath")).toReturn(rsp);
270 ServiceFunctionForwarder serviceFunctionForwarder = createServiceForwarder();
271 stub(method(SfcProviderServiceForwarderAPI.class, "readServiceFunctionForwarder"))
272 .toReturn(serviceFunctionForwarder);
274 ListenableFuture result = policyManager.syncPolicy(policyConfiguration, null, 0);
275 assertTrue((boolean) result.get());
278 private ServiceFunctionForwarder createServiceForwarder() {
279 ServiceFunctionForwarderBuilder serviceFunctionForwarderBuilder = new ServiceFunctionForwarderBuilder();
280 serviceFunctionForwarderBuilder.setName(new SffName(forwarderName))
281 .setKey(new ServiceFunctionForwarderKey(new SffName(forwarderName)))
282 .setIpMgmtAddress(new IpAddress(new Ipv4Address(ipAddress)));
283 return serviceFunctionForwarderBuilder.build();
288 private InstanceIdentifier createMountpointIid() {
289 return InstanceIdentifier.builder(NetworkTopology.class)
290 .child(Topology.class, new TopologyKey(topologyId))
291 .child(Node.class, new NodeKey(nodeId)).build();
294 private ResolvedRule createRule(HasDirection.Direction direction, ActionDefinitionId actionDefinitionId) {
295 ResolvedRuleBuilder resolvedRuleBuilder = new ResolvedRuleBuilder();
296 ClassifierBuilder classifierBuilder = new ClassifierBuilder();
297 classifierBuilder.setDirection(direction);
298 ActionBuilder actionBuilder = new ActionBuilder();
299 actionBuilder.setActionDefinitionId(actionDefinitionId);
300 resolvedRuleBuilder.setClassifier(Collections.singletonList(classifierBuilder.build()))
301 .setAction(Collections.singletonList(actionBuilder.build()));
302 return resolvedRuleBuilder.build();
305 private RuleGroupWithRendererEndpointParticipation createRuleGroupWithRendererEpParticipation(final EndpointPolicyParticipation participation) {
306 RuleGroupWithRendererEndpointParticipationBuilder ruleGroupBuilder = new RuleGroupWithRendererEndpointParticipationBuilder();
307 ruleGroupBuilder.setKey(new RuleGroupWithRendererEndpointParticipationKey(contractId, participation, subjectName,
309 return ruleGroupBuilder.build();
312 private AbsoluteLocation createAbsoluteLocationExternal(String connector, InstanceIdentifier mountpoint) {
313 ExternalLocationCaseBuilder externalLocationCaseBuilder = new ExternalLocationCaseBuilder();
314 externalLocationCaseBuilder.setExternalNodeConnector(connector)
315 .setExternalNodeMountPoint(mountpoint);
316 AbsoluteLocationBuilder absoluteLocationBuilder = new AbsoluteLocationBuilder();
317 absoluteLocationBuilder.setLocationType(externalLocationCaseBuilder.build());
318 return absoluteLocationBuilder.build();
321 private ServiceFunctionPath createServiceFunctionPath() {
322 ServiceFunctionPathBuilder serviceFunctionPathBuilder = new ServiceFunctionPathBuilder();
323 serviceFunctionPathBuilder.setKey(new ServiceFunctionPathKey(servicePath))
324 .setSymmetric(false);
325 return serviceFunctionPathBuilder.build();
328 private RenderedServicePath createRenderedServicePath() {
329 RenderedServicePathHopBuilder renderedServicePathHopBuilder = new RenderedServicePathHopBuilder();
330 renderedServicePathHopBuilder.setServiceFunctionForwarder(forwarderName);
331 renderedServicePathHopBuilder.setServiceFunctionName(functionName);
332 renderedServicePathHopBuilder.build();
334 RenderedServicePathBuilder renderedServicePathBuilder = new RenderedServicePathBuilder();
335 renderedServicePathBuilder.setKey(new RenderedServicePathKey(renderedPath))
336 .setRenderedServicePathHop(Collections.singletonList(renderedServicePathHopBuilder.build()));
337 return renderedServicePathBuilder.build();
341 private AddressEndpointWithLocation createAddressEndpointWithLocation(final ContextId contextId,
342 final AbsoluteLocation location,
343 boolean augmentation) {
344 AddressEndpointWithLocationAugBuilder augmentationBuilder = new AddressEndpointWithLocationAugBuilder();
345 augmentationBuilder.setSgt(new Sgt(1));
346 AddressEndpointWithLocationBuilder addressEndpointBuilder = new AddressEndpointWithLocationBuilder();
347 addressEndpointBuilder.setKey(new AddressEndpointWithLocationKey(address, IpPrefixType.class,
348 contextId, L2BridgeDomain.class))
349 .setAbsoluteLocation(location);
351 addressEndpointBuilder.addAugmentation(AddressEndpointWithLocationAug.class, augmentationBuilder.build());
353 return addressEndpointBuilder.build();
356 private RendererEndpoint createRendererEndpoint(ContextId contextId_1, ContextId contextId_2,
357 RuleGroupWithRendererEndpointParticipation ruleGroup) {
358 PeerEndpointWithPolicyBuilder peerEndpointWithPolicyBuilder = new PeerEndpointWithPolicyBuilder();
359 peerEndpointWithPolicyBuilder.setKey(new PeerEndpointWithPolicyKey(address, IpPrefixType.class, contextId_1,
360 L2BridgeDomain.class))
361 .setRuleGroupWithRendererEndpointParticipation(Collections.singletonList(ruleGroup));
362 RendererEndpointBuilder rendererEndpointBuilder = new RendererEndpointBuilder();
363 rendererEndpointBuilder.setKey(new RendererEndpointKey(address, IpPrefixType.class, contextId_2,
364 L2BridgeDomain.class))
365 .setPeerEndpointWithPolicy(Collections.singletonList(peerEndpointWithPolicyBuilder.build()));
366 return rendererEndpointBuilder.build();
369 private RuleGroup createRuleGroup(ResolvedRule rule) {
370 RuleGroupBuilder ruleGroupBuilder = new RuleGroupBuilder();
371 ruleGroupBuilder.setKey(new RuleGroupKey(contractId, subjectName, tenantId))
372 .setResolvedRule(Collections.singletonList(rule));
373 return ruleGroupBuilder.build();
376 private Configuration createTestConfiguration(final List<AddressEndpointWithLocation> endpointsWithLocation,
377 final List<RendererEndpoint> rendererEndpoints,
378 final RendererForwarding rendererForwarding,
379 final RuleGroup ruleGroup) {
381 EndpointsBuilder endpointsBuilder = new EndpointsBuilder();
382 endpointsBuilder.setAddressEndpointWithLocation(endpointsWithLocation);
383 // Set renderer endpoints
384 RendererEndpointsBuilder rendererEndpointsBuilder = new RendererEndpointsBuilder();
385 rendererEndpointsBuilder.setRendererEndpoint(rendererEndpoints);
387 RuleGroupsBuilder ruleGroupsBuilder = new RuleGroupsBuilder();
388 ruleGroupsBuilder.setRuleGroup(Collections.singletonList(ruleGroup));
389 // Build configuration
390 ConfigurationBuilder configurationBuilder = new ConfigurationBuilder();
391 configurationBuilder.setEndpoints(endpointsBuilder.build())
392 .setRendererEndpoints(rendererEndpointsBuilder.build())
393 .setRendererForwarding(rendererForwarding)
394 .setRuleGroups(ruleGroupsBuilder.build());
395 return configurationBuilder.build();