Fixing compareTo for RendererResolvedPolicy 04/51004/6
authorTomas Cechvala <tcechval@cisco.com>
Wed, 25 Jan 2017 11:42:09 +0000 (12:42 +0100)
committerTomas Cechvala <tcechval@cisco.com>
Thu, 26 Jan 2017 09:31:50 +0000 (09:31 +0000)
It's important not to lose any resolved rule
when caching policy.

Parameters included:
    EndpointPolicyParticipation
    ResolvedRuleGroup

Change-Id: Idf5f4dbde902d7f21ca0a83d68a71dbeeefc7a52
Signed-off-by: Tomas Cechvala <tcechval@cisco.com>
renderers/vpp/src/main/java/org/opendaylight/groupbasedpolicy/renderer/vpp/policy/PolicyContext.java
renderers/vpp/src/main/java/org/opendaylight/groupbasedpolicy/renderer/vpp/policy/RendererResolvedPolicy.java
renderers/vpp/src/test/java/org/opendaylight/groupbasedpolicy/renderer/vpp/RendererResolvedPolicyTest.java [new file with mode: 0644]

index 3eb2c406340798a0a763e78c860295da3e0ce299..b8bf8acca1f4fcdce38472fbb24c7c6f353251ee 100644 (file)
@@ -8,12 +8,6 @@
 
 package org.opendaylight.groupbasedpolicy.renderer.vpp.policy;
 
-import com.google.common.base.Preconditions;
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.ImmutableSortedSet;
-import com.google.common.collect.ImmutableTable;
-import com.google.common.collect.ImmutableTable.Builder;
-import com.google.common.collect.Maps;
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
@@ -22,11 +16,12 @@ import java.util.Optional;
 import java.util.TreeSet;
 import java.util.function.Supplier;
 import java.util.stream.Collectors;
+
 import javax.annotation.Nonnull;
+
 import org.opendaylight.groupbasedpolicy.renderer.vpp.util.KeyFactory;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.endpoints.address.endpoints.AddressEndpointKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.Policy;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.RendererPolicy;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.Configuration;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.endpoints.AddressEndpointWithLocation;
@@ -40,6 +35,13 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.rule.groups.RuleGroup;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.rule.groups.RuleGroupKey;
 
+import com.google.common.base.Preconditions;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSortedSet;
+import com.google.common.collect.ImmutableTable;
+import com.google.common.collect.ImmutableTable.Builder;
+import com.google.common.collect.Maps;
+
 public class PolicyContext {
 
     private final RendererPolicy policy;
index b5f18d604f6f4fb92dd7940c0fafc07afa78379f..ff7a79adf40fa11a70b7abd0fb41b032e912d7df 100644 (file)
@@ -36,8 +36,13 @@ public class RendererResolvedPolicy implements Comparable<RendererResolvedPolicy
     }
 
     @Override
-    public int compareTo(RendererResolvedPolicy arg0) {
-        return ruleGroup.compareTo(arg0.getRuleGroup());
+    public int compareTo(RendererResolvedPolicy resolvedPolicy) {
+        int comp = ruleGroup.compareTo(resolvedPolicy.getRuleGroup());
+        if (comp == 0 && (rendererEndpointParticipation.getIntValue() != resolvedPolicy
+            .getRendererEndpointParticipation().getIntValue())) {
+            return 1;
+        }
+        return comp;
     }
 
     @Override
diff --git a/renderers/vpp/src/test/java/org/opendaylight/groupbasedpolicy/renderer/vpp/RendererResolvedPolicyTest.java b/renderers/vpp/src/test/java/org/opendaylight/groupbasedpolicy/renderer/vpp/RendererResolvedPolicyTest.java
new file mode 100644 (file)
index 0000000..5169346
--- /dev/null
@@ -0,0 +1,67 @@
+/*
+ * Copyright (c) 2017 Cisco Systems, Inc. and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.groupbasedpolicy.renderer.vpp;
+
+import java.util.Collections;
+import java.util.Set;
+import java.util.TreeSet;
+
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Mockito;
+import org.opendaylight.groupbasedpolicy.renderer.vpp.policy.RendererResolvedPolicy;
+import org.opendaylight.groupbasedpolicy.renderer.vpp.policy.ResolvedRuleGroup;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.EndpointPolicyParticipation;
+
+/**
+ * It's important not to lose any resolved rule when caching policy.
+ */
+public class RendererResolvedPolicyTest {
+
+    private ResolvedRuleGroup resolvedRuleGroup1;
+    private ResolvedRuleGroup resolvedRuleGroup2;
+    private RendererResolvedPolicy rendResPolicy1;
+    private RendererResolvedPolicy rendResPolicy2;
+    private Set<RendererResolvedPolicy> testSet;
+
+    @Before
+    public void init() {
+        resolvedRuleGroup1 = Mockito.mock(ResolvedRuleGroup.class);
+        resolvedRuleGroup2 = Mockito.mock(ResolvedRuleGroup.class);
+    }
+
+    @Test
+    public void testCompareTo_sameParticipation() {
+        rendResPolicy1 = new RendererResolvedPolicy(EndpointPolicyParticipation.PROVIDER, resolvedRuleGroup1);
+        rendResPolicy2 = new RendererResolvedPolicy(EndpointPolicyParticipation.PROVIDER, resolvedRuleGroup1);
+        testSet = createSet(rendResPolicy1, rendResPolicy2);
+        Assert.assertEquals(testSet.size(), 1);
+        rendResPolicy2 = new RendererResolvedPolicy(EndpointPolicyParticipation.PROVIDER, resolvedRuleGroup2);
+        testSet = createSet(rendResPolicy1, rendResPolicy2);
+        Assert.assertEquals(testSet.size(), 2);
+    }
+
+    @Test
+    public void testCompareTo_differentParticipation() {
+        rendResPolicy1 = new RendererResolvedPolicy(EndpointPolicyParticipation.PROVIDER, resolvedRuleGroup1);
+        rendResPolicy2 = new RendererResolvedPolicy(EndpointPolicyParticipation.CONSUMER, resolvedRuleGroup1);
+        testSet = createSet(rendResPolicy1, rendResPolicy2);
+        Assert.assertEquals(testSet.size(), 2);
+        rendResPolicy2 = new RendererResolvedPolicy(EndpointPolicyParticipation.PROVIDER, resolvedRuleGroup2);
+        testSet = createSet(rendResPolicy1, rendResPolicy2);
+        Assert.assertEquals(testSet.size(), 2);
+    }
+
+    private Set<RendererResolvedPolicy> createSet(RendererResolvedPolicy... rendResolvedPolicies) {
+        Set<RendererResolvedPolicy> policies = new TreeSet<>();
+        Collections.addAll(policies, rendResolvedPolicies);
+        return policies;
+    }
+}