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;
11 import java.util.Arrays;
12 import java.util.Collections;
14 import org.junit.Assert;
15 import org.junit.Before;
16 import org.junit.Test;
17 import org.junit.runner.RunWith;
18 import org.mockito.ArgumentCaptor;
19 import org.mockito.Mock;
20 import org.mockito.Mockito;
21 import org.mockito.runners.MockitoJUnitRunner;
22 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
23 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
24 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
25 import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
26 import org.opendaylight.groupbasedpolicy.base_endpoint.EndpointAugmentorRegistryImpl;
27 import org.opendaylight.groupbasedpolicy.forwarding.NetworkDomainAugmentorRegistryImpl;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.EndpointLocations;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.EndpointLocationsBuilder;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.EndpointsBuilder;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.endpoint.locations.AddressEndpointLocation;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.endpoint.locations.ContainmentEndpointLocation;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.endpoints.AddressEndpointsBuilder;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.endpoints.ContainmentEndpointsBuilder;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.endpoints.address.endpoints.AddressEndpoint;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.endpoints.containment.endpoints.ContainmentEndpoint;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.has.absolute.location.absolute.location.location.type.ExternalLocationCase;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.has.absolute.location.absolute.location.location.type.ExternalLocationCaseBuilder;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.has.absolute.location.absolute.location.location.type.InternalLocationCase;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.has.absolute.location.absolute.location.location.type.InternalLocationCaseBuilder;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.has.relative.location.relative.locations.InternalLocation;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.has.relative.location.relative.locations.InternalLocationBuilder;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ContractId;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.EndpointGroupId;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.RuleName;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SubjectName;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.rev160427.ContextType;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.rev160427.ForwardingBuilder;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.rev160427.forwarding.ForwardingByTenantBuilder;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.rev160427.forwarding.forwarding.by.tenant.ForwardingContextBuilder;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.Tenants;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.RendererName;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.Renderers;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.RenderersBuilder;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.Renderer;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.RendererBuilder;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.RendererNodesBuilder;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.RendererPolicy;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.RendererPolicyBuilder;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.nodes.RendererNodeBuilder;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.Configuration;
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.Endpoints;
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.RendererEndpoints;
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.RendererForwarding;
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.RuleGroups;
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.resolved.policy.rev150828.ResolvedPolicies;
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.resolved.policy.rev150828.ResolvedPoliciesBuilder;
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.resolved.policy.rev150828.has.resolved.rules.ResolvedRule;
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.resolved.policy.rev150828.resolved.policies.ResolvedPolicy;
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.resolved.policy.rev150828.resolved.policies.ResolvedPolicy.ExternalImplicitGroup;
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.resolved.policy.rev150828.resolved.policies.resolved.policy.policy.rule.group.with.endpoint.constraints.PolicyRuleGroup;
72 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
74 import com.google.common.collect.ImmutableList;
75 import com.google.common.util.concurrent.CheckedFuture;
77 @RunWith(MockitoJUnitRunner.class)
78 public class RendererManagerDataBrokerTest {
80 private static final RendererName RENDERER_NAME_R1 = new RendererName("R1");
81 private static final EndpointGroupId EPG_BLUE = new EndpointGroupId("blue_epg");
82 private static final EndpointGroupId EPG_PURPLE = new EndpointGroupId("purple_epg");
83 private static final ContractId CONTRACT_1 = new ContractId("contract_1");
84 private static final SubjectName SUBJECT_1 = new SubjectName("subject_1");
85 private static final RuleName RULE_1 = new RuleName("rule_1");
86 private static final String ADR_1 = "adr_1";
87 private static final String ADR_2 = "adr_2";
88 private static final InstanceIdentifier<?> NODE_PATH_1 = InstanceIdentifier.create(Tenants.class);
89 private static final InternalLocationCase INT_LOC_CASE_NODE_PATH_1 =
90 new InternalLocationCaseBuilder().setInternalNode(NODE_PATH_1).build();
91 private static final InternalLocation INT_LOC_NODE_PATH_1 =
92 new InternalLocationBuilder().setInternalNode(NODE_PATH_1).build();
93 private static final ExternalLocationCase EXT_LOC_CASE_NODE_PATH_1 =
94 new ExternalLocationCaseBuilder().setExternalNodeMountPoint(NODE_PATH_1).build();
97 private DataBroker dataProvider;
99 private NetworkDomainAugmentorRegistryImpl netDomainAugmentorRegistry;
101 private EndpointAugmentorRegistryImpl epAugmentorRegistry;
103 private WriteTransaction wTx;
105 private CheckedFuture<Void, TransactionCommitFailedException> submitFuture;
107 private RendererManager rendererManager;
111 Mockito.when(dataProvider.newWriteOnlyTransaction()).thenReturn(wTx);
112 Mockito.when(wTx.submit()).thenReturn(submitFuture);
113 Mockito.when(netDomainAugmentorRegistry.getNetworkDomainAugmentors()).thenReturn(Collections.emptySet());
114 Mockito.when(epAugmentorRegistry.getEndpointAugmentors()).thenReturn(Collections.emptySet());
115 rendererManager = new RendererManager(dataProvider, netDomainAugmentorRegistry, epAugmentorRegistry);
116 RendererManager.resetVersion();
120 * EP1--EPG_BLUE---SUBJECT_1---(P)EPG_PURPLE--EP2
123 public void testProcessState_dispatchOnePolicy_rendererFeedbackPositive() throws Exception {
124 ArgumentCaptor<Renderers> acRenderers = ArgumentCaptor.forClass(Renderers.class);
125 ResolvedRule rule1 = TestDataFactory.defaultResolvedRule(RULE_1).build();
126 PolicyRuleGroup ruleGrp1 = TestDataFactory.defaultPolicyRuleGrp(CONTRACT_1, SUBJECT_1, rule1).build();
127 ResolvedPolicy resolvedPolicy = TestDataFactory.defaultResolvedPolicy(EPG_BLUE, EPG_PURPLE, ruleGrp1).build();
128 ResolvedPolicies resolvedPolicies =
129 new ResolvedPoliciesBuilder().setResolvedPolicy(ImmutableList.of(resolvedPolicy)).build();
130 rendererManager.resolvedPoliciesUpdated(resolvedPolicies);
132 AddressEndpoint ep1 = TestDataFactory.defaultAdrEp(ADR_1, EPG_BLUE).build();
133 AddressEndpoint ep2 = TestDataFactory.defaultAdrEp(ADR_2, EPG_PURPLE).build();
134 rendererManager.endpointsUpdated(new EndpointsBuilder()
135 .setAddressEndpoints(new AddressEndpointsBuilder().setAddressEndpoint(ImmutableList.of(ep1, ep2)).build())
138 AddressEndpointLocation ep1Loc =
139 TestDataFactory.defaultAdrEpLoc(ep1.getKey(), INT_LOC_CASE_NODE_PATH_1).build();
140 AddressEndpointLocation ep2Loc =
141 TestDataFactory.defaultAdrEpLoc(ep2.getKey(), INT_LOC_CASE_NODE_PATH_1).build();
142 EndpointLocations endpointLocations =
143 new EndpointLocationsBuilder().setAddressEndpointLocation(ImmutableList.of(ep1Loc, ep2Loc)).build();
144 rendererManager.endpointLocationsUpdated(endpointLocations);
147 .forwardingUpdated(new ForwardingBuilder()
148 .setForwardingByTenant(
149 Arrays.asList(new ForwardingByTenantBuilder().setTenantId(TestDataFactory.TENANT_ID)
150 .setForwardingContext(Arrays.asList(new ForwardingContextBuilder()
151 .setContextType(ContextType.class)
152 .setContextId(TestDataFactory.CTX_1)
157 rendererManager.renderersUpdated(new RenderersBuilder()
158 .setRenderer(Arrays.asList(new RendererBuilder().setName(RENDERER_NAME_R1)
159 .setRendererNodes(new RendererNodesBuilder()
160 .setRendererNode(Arrays.asList(new RendererNodeBuilder().setNodePath(NODE_PATH_1).build())).build())
164 // assert dispatch one policy
165 Assert.assertEquals(1, rendererManager.getProcessingRenderers().size());
166 Mockito.verify(wTx).put(Mockito.eq(LogicalDatastoreType.CONFIGURATION),
167 Mockito.eq(InstanceIdentifier.create(Renderers.class)),
168 acRenderers.capture());
170 Renderers renderers = acRenderers.getValue();
171 Assert.assertNotNull(renderers);
172 Assert.assertNotNull(renderers.getRenderer());
173 Assert.assertEquals(1, renderers.getRenderer().size());
174 Renderer renderer = renderers.getRenderer().get(0);
175 Assert.assertEquals(RENDERER_NAME_R1, renderer.getName());
176 RendererPolicy rendererPolicy = renderer.getRendererPolicy();
177 Assert.assertNotNull(rendererPolicy);
178 Assert.assertEquals(1, rendererPolicy.getVersion().longValue());
180 Configuration configuration = rendererPolicy.getConfiguration();
181 Assert.assertNotNull(configuration);
182 RendererEndpoints rendererEndpoints = configuration.getRendererEndpoints();
183 Assert.assertNotNull(rendererEndpoints);
184 Assert.assertEquals(2, rendererEndpoints.getRendererEndpoint().size());
186 RendererForwarding rendererForwarding = configuration.getRendererForwarding();
187 Assert.assertNotNull(rendererForwarding);
188 Assert.assertEquals(1, rendererForwarding.getRendererForwardingByTenant().size());
190 Endpoints endpoints = configuration.getEndpoints();
191 Assert.assertNotNull(endpoints);
192 Assert.assertEquals(2, endpoints.getAddressEndpointWithLocation().size());
194 RuleGroups ruleGroups = configuration.getRuleGroups();
195 Assert.assertNotNull(ruleGroups);
196 Assert.assertEquals(1, ruleGroups.getRuleGroup().size());
200 new RenderersBuilder()
202 Arrays.asList(new RendererBuilder().setName(RENDERER_NAME_R1)
203 .setRendererNodes(new RendererNodesBuilder()
204 .setRendererNode(Arrays
205 .asList(new RendererNodeBuilder().setNodePath(NODE_PATH_1).build()))
207 .setRendererPolicy(new RendererPolicyBuilder().setVersion(1L).build())
210 Assert.assertEquals(0, rendererManager.getProcessingRenderers().size());
214 * EP1--EPG_BLUE---SUBJECT_1---(P)EPG_PURPLE(EIG)--EP2(containment)
217 public void testProcessState_dispatchOneExternalPolicyWithContainmentEp_noRendererFeedback() throws Exception {
218 ArgumentCaptor<Renderers> acRenderers = ArgumentCaptor.forClass(Renderers.class);
219 ResolvedRule rule1 = TestDataFactory.defaultResolvedRule(RULE_1).build();
220 PolicyRuleGroup ruleGrp1 = TestDataFactory.defaultPolicyRuleGrp(CONTRACT_1, SUBJECT_1, rule1).build();
221 ResolvedPolicy resolvedPolicy = TestDataFactory.defaultResolvedPolicy(EPG_BLUE, EPG_PURPLE, ruleGrp1)
222 .setExternalImplicitGroup(ExternalImplicitGroup.ProviderEpg)
224 ResolvedPolicies resolvedPolicies =
225 new ResolvedPoliciesBuilder().setResolvedPolicy(ImmutableList.of(resolvedPolicy)).build();
226 rendererManager.resolvedPoliciesUpdated(resolvedPolicies);
228 AddressEndpoint ep1 = TestDataFactory.defaultAdrEp(ADR_1, EPG_BLUE).build();
229 ContainmentEndpoint ep2 = TestDataFactory.defaultContEp(EPG_PURPLE).build();
231 .endpointsUpdated(new EndpointsBuilder()
232 .setAddressEndpoints(new AddressEndpointsBuilder().setAddressEndpoint(ImmutableList.of(ep1)).build())
233 .setContainmentEndpoints(
234 new ContainmentEndpointsBuilder().setContainmentEndpoint(ImmutableList.of(ep2)).build())
237 AddressEndpointLocation ep1Loc =
238 TestDataFactory.defaultAdrEpLoc(ep1.getKey(), INT_LOC_CASE_NODE_PATH_1).build();
239 ContainmentEndpointLocation ep2Loc =
240 TestDataFactory.defaultContEpLoc(ep2.getKey(), INT_LOC_NODE_PATH_1).build();
241 EndpointLocations endpointLocations =
242 new EndpointLocationsBuilder().setAddressEndpointLocation(ImmutableList.of(ep1Loc))
243 .setContainmentEndpointLocation(ImmutableList.of(ep2Loc))
245 rendererManager.endpointLocationsUpdated(endpointLocations);
248 .forwardingUpdated(new ForwardingBuilder()
249 .setForwardingByTenant(
250 Arrays.asList(new ForwardingByTenantBuilder().setTenantId(TestDataFactory.TENANT_ID)
251 .setForwardingContext(Arrays.asList(new ForwardingContextBuilder()
252 .setContextType(ContextType.class)
253 .setContextId(TestDataFactory.CTX_1)
258 rendererManager.renderersUpdated(new RenderersBuilder()
259 .setRenderer(Arrays.asList(new RendererBuilder().setName(RENDERER_NAME_R1)
260 .setRendererNodes(new RendererNodesBuilder()
261 .setRendererNode(Arrays.asList(new RendererNodeBuilder().setNodePath(NODE_PATH_1).build())).build())
265 // assert dispatch one policy
266 Assert.assertEquals(1, rendererManager.getProcessingRenderers().size());
267 Mockito.verify(wTx).put(Mockito.eq(LogicalDatastoreType.CONFIGURATION),
268 Mockito.eq(InstanceIdentifier.create(Renderers.class)),
269 acRenderers.capture());
271 Renderers renderers = acRenderers.getValue();
272 Assert.assertNotNull(renderers);
273 Assert.assertNotNull(renderers.getRenderer());
274 Assert.assertEquals(1, renderers.getRenderer().size());
275 Renderer renderer = renderers.getRenderer().get(0);
276 Assert.assertEquals(RENDERER_NAME_R1, renderer.getName());
277 RendererPolicy rendererPolicy = renderer.getRendererPolicy();
278 Assert.assertNotNull(rendererPolicy);
279 Assert.assertEquals(1, rendererPolicy.getVersion().longValue());
281 Configuration configuration = rendererPolicy.getConfiguration();
282 Assert.assertNotNull(configuration);
283 RendererEndpoints rendererEndpoints = configuration.getRendererEndpoints();
284 Assert.assertNotNull(rendererEndpoints);
285 Assert.assertEquals(1, rendererEndpoints.getRendererEndpoint().size());
287 RendererForwarding rendererForwarding = configuration.getRendererForwarding();
288 Assert.assertNotNull(rendererForwarding);
289 Assert.assertEquals(1, rendererForwarding.getRendererForwardingByTenant().size());
291 Endpoints endpoints = configuration.getEndpoints();
292 Assert.assertNotNull(endpoints);
293 Assert.assertEquals(1, endpoints.getAddressEndpointWithLocation().size());
294 Assert.assertEquals(1, endpoints.getContainmentEndpointWithLocation().size());
296 RuleGroups ruleGroups = configuration.getRuleGroups();
297 Assert.assertNotNull(ruleGroups);
298 Assert.assertEquals(1, ruleGroups.getRuleGroup().size());
302 * EP1--EPG_BLUE---SUBJECT_1---(P)EPG_PURPLE(EIG)--EP2()
305 public void testProcessState_dispatchOneExternalPolicyWithEp_noRendererFeedback() {
306 ArgumentCaptor<Renderers> acRenderers = ArgumentCaptor.forClass(Renderers.class);
307 ResolvedRule rule1 = TestDataFactory.defaultResolvedRule(RULE_1).build();
308 PolicyRuleGroup ruleGrp1 = TestDataFactory.defaultPolicyRuleGrp(CONTRACT_1, SUBJECT_1, rule1).build();
309 ResolvedPolicy resolvedPolicy = TestDataFactory.defaultResolvedPolicy(EPG_BLUE, EPG_PURPLE, ruleGrp1)
310 .setExternalImplicitGroup(ExternalImplicitGroup.ProviderEpg)
312 ResolvedPolicies resolvedPolicies =
313 new ResolvedPoliciesBuilder().setResolvedPolicy(ImmutableList.of(resolvedPolicy)).build();
314 rendererManager.resolvedPoliciesUpdated(resolvedPolicies);
316 AddressEndpoint ep1 = TestDataFactory.defaultAdrEp(ADR_1, EPG_BLUE).build();
317 AddressEndpoint ep2 = TestDataFactory.defaultAdrEp(ADR_2, EPG_PURPLE).build();
318 rendererManager.endpointsUpdated(new EndpointsBuilder()
319 .setAddressEndpoints(new AddressEndpointsBuilder().setAddressEndpoint(ImmutableList.of(ep1, ep2)).build())
322 AddressEndpointLocation ep1Loc =
323 TestDataFactory.defaultAdrEpLoc(ep1.getKey(), INT_LOC_CASE_NODE_PATH_1).build();
324 AddressEndpointLocation ep2Loc =
325 TestDataFactory.defaultAdrEpLoc(ep2.getKey(), EXT_LOC_CASE_NODE_PATH_1).build();
326 EndpointLocations endpointLocations =
327 new EndpointLocationsBuilder().setAddressEndpointLocation(ImmutableList.of(ep1Loc, ep2Loc)).build();
328 rendererManager.endpointLocationsUpdated(endpointLocations);
331 .forwardingUpdated(new ForwardingBuilder()
332 .setForwardingByTenant(
333 Arrays.asList(new ForwardingByTenantBuilder().setTenantId(TestDataFactory.TENANT_ID)
334 .setForwardingContext(Arrays.asList(new ForwardingContextBuilder()
335 .setContextType(ContextType.class)
336 .setContextId(TestDataFactory.CTX_1)
341 rendererManager.renderersUpdated(new RenderersBuilder()
342 .setRenderer(Arrays.asList(new RendererBuilder().setName(RENDERER_NAME_R1)
343 .setRendererNodes(new RendererNodesBuilder()
344 .setRendererNode(Arrays.asList(new RendererNodeBuilder().setNodePath(NODE_PATH_1).build())).build())
348 // assert dispatch one policy
349 Assert.assertEquals(1, rendererManager.getProcessingRenderers().size());
350 Mockito.verify(wTx).put(Mockito.eq(LogicalDatastoreType.CONFIGURATION),
351 Mockito.eq(InstanceIdentifier.create(Renderers.class)),
352 acRenderers.capture());
354 Renderers renderers = acRenderers.getValue();
355 Assert.assertNotNull(renderers);
356 Assert.assertNotNull(renderers.getRenderer());
357 Assert.assertEquals(1, renderers.getRenderer().size());
358 Renderer renderer = renderers.getRenderer().get(0);
359 Assert.assertEquals(RENDERER_NAME_R1, renderer.getName());
360 RendererPolicy rendererPolicy = renderer.getRendererPolicy();
361 Assert.assertNotNull(rendererPolicy);
362 Assert.assertEquals(1, rendererPolicy.getVersion().longValue());
364 Configuration configuration = rendererPolicy.getConfiguration();
365 Assert.assertNotNull(configuration);
366 RendererEndpoints rendererEndpoints = configuration.getRendererEndpoints();
367 Assert.assertNotNull(rendererEndpoints);
368 Assert.assertEquals(1, rendererEndpoints.getRendererEndpoint().size());
370 RendererForwarding rendererForwarding = configuration.getRendererForwarding();
371 Assert.assertNotNull(rendererForwarding);
372 Assert.assertEquals(1, rendererForwarding.getRendererForwardingByTenant().size());
374 Endpoints endpoints = configuration.getEndpoints();
375 Assert.assertNotNull(endpoints);
376 Assert.assertEquals(2, endpoints.getAddressEndpointWithLocation().size());
378 RuleGroups ruleGroups = configuration.getRuleGroups();
379 Assert.assertNotNull(ruleGroups);
380 Assert.assertEquals(1, ruleGroups.getRuleGroup().size());