* Port to use the new submit() API call rather than commit(). 09/9209/2
authorRob Adams <readams@readams.net>
Mon, 21 Jul 2014 16:49:18 +0000 (09:49 -0700)
committerRob Adams <readams@readams.net>
Tue, 22 Jul 2014 16:00:26 +0000 (09:00 -0700)
* Fix warning caused by spurious SupressWarning
* Additional unit tests
* Tweaks to destination mapper table
* Fix policy model bug with duplicate name

Change-Id: I5bfc612ea78a1d9ff46d8d83a9ddc0d464cf13ac
Signed-off-by: Rob Adams <readams@readams.net>
12 files changed:
groupbasedpolicy/src/main/java/org/opendaylight/controller/config/yang/config/opflex_provider/impl/OpflexProviderModule.java
groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/endpoint/AbstractEndpointRegistry.java
groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/PolicyManager.java
groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/DestinationMapper.java
groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/FlowTable.java
groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/PolicyEnforcer.java
groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/renderer/opflex/OpflexConnectionService.java
groupbasedpolicy/src/main/yang/model/policy.yang
groupbasedpolicy/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/DestinationMapperTest.java
groupbasedpolicy/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/PortSecurityTest.java
groupbasedpolicy/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/SourceMapperTest.java
groupbasedpolicy/src/test/java/org/opendaylight/groupbasedpolicy/renderer/opflex/OpflexConnectionServiceTest.java

index 4d4c0913f9a12318d5aaff33d8004c2f3ddbe490..5ce3532970d113df099951135d13e28ccf830719 100644 (file)
@@ -21,7 +21,6 @@ public class OpflexProviderModule extends org.opendaylight.controller.config.yan
         // add custom validation form module attributes here.
     }
 
-    @SuppressWarnings("resource")
     @Override
     public java.lang.AutoCloseable createInstance() {
         final OpflexConnectionService connectionService = new OpflexConnectionService();
index 3b12ae769d5e03de23c05148747f40585076a149..21b45ed59b7f1bb47bcde061bb6fce33f483897e 100644 (file)
@@ -13,8 +13,8 @@ import java.util.concurrent.ScheduledExecutorService;
 
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
-import org.opendaylight.controller.md.sal.common.api.TransactionStatus;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
 import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.EndpointService;
@@ -44,6 +44,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import com.google.common.base.Function;
+import com.google.common.util.concurrent.CheckedFuture;
 import com.google.common.util.concurrent.FutureCallback;
 import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
@@ -85,17 +86,17 @@ public abstract class AbstractEndpointRegistry
             WriteTransaction t = this.dataProvider.newWriteOnlyTransaction();
             t.put(LogicalDatastoreType.OPERATIONAL, 
                   iid, new EndpointsBuilder().build());
-            ListenableFuture<RpcResult<TransactionStatus>> f = t.commit();
-            Futures.addCallback(f, new FutureCallback<RpcResult<TransactionStatus>>() {
-
+            CheckedFuture<Void, TransactionCommitFailedException> f = t.submit();
+            Futures.addCallback(f, new FutureCallback<Void>() {
                 @Override
-                public void onSuccess(RpcResult<TransactionStatus> result) {
-
+                public void onFailure(Throwable t) {
+                    LOG.error("Could not write endpoint base container", t);
                 }
 
                 @Override
-                public void onFailure(Throwable t) {
-                    LOG.error("Could not write endpoint base container", t);
+                public void onSuccess(Void result) {
+                    // TODO Auto-generated method stub
+                    
                 }
             });
         }
@@ -166,7 +167,7 @@ public abstract class AbstractEndpointRegistry
                 t.put(LogicalDatastoreType.OPERATIONAL, iid_l3, ep3);
             }
         }
-        ListenableFuture<RpcResult<TransactionStatus>> r = t.commit();
+        ListenableFuture<Void> r = t.submit();
         return Futures.transform(r, futureTrans, executor);
     }
 
@@ -198,7 +199,7 @@ public abstract class AbstractEndpointRegistry
             }
         }
 
-        ListenableFuture<RpcResult<TransactionStatus>> r = t.commit();
+        ListenableFuture<Void> r = t.submit();
         return Futures.transform(r, futureTrans, executor);
     }
 
@@ -221,7 +222,7 @@ public abstract class AbstractEndpointRegistry
             t.put(LogicalDatastoreType.OPERATIONAL, iid, condition);
         }
 
-        ListenableFuture<RpcResult<TransactionStatus>> r = t.commit();
+        ListenableFuture<Void> r = t.submit();
         return Futures.transform(r, futureTrans, executor);
     }
 
@@ -245,19 +246,15 @@ public abstract class AbstractEndpointRegistry
             t.delete(LogicalDatastoreType.OPERATIONAL, iid);
         }
 
-        ListenableFuture<RpcResult<TransactionStatus>> r = t.commit();
+        ListenableFuture<Void> r = t.submit();
         return Futures.transform(r, futureTrans, executor);
     }
 
-    Function<RpcResult<TransactionStatus>, RpcResult<Void>> futureTrans =
-            new Function<RpcResult<TransactionStatus>,RpcResult<Void>>() {
+    Function<Void, RpcResult<Void>> futureTrans =
+            new Function<Void,RpcResult<Void>>() {
         @Override
-        public RpcResult<Void> apply(RpcResult<TransactionStatus> input) {
-            if (input.isSuccessful())
-                return RpcResultBuilder.<Void>success().build();
-            else 
-                return RpcResultBuilder.<Void>failed()
-                        .withRpcErrors(input.getErrors()).build();
+        public RpcResult<Void> apply(Void input) {
+            return RpcResultBuilder.<Void>success().build();
         }
     };
 }
index 7b3639ba98da80462f5d04bcfd7f238f2ced0361..0c65b55cd13877df7d1a8fa3186e2cc463b7cc4d 100644 (file)
@@ -24,7 +24,6 @@ import java.util.concurrent.atomic.AtomicReference;
 
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
-import org.opendaylight.controller.md.sal.common.api.TransactionStatus;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
 import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
 import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow.DestinationMapper;
@@ -49,7 +48,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeBuilder;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -125,7 +123,7 @@ public class PolicyManager
                       .builder(SubjectFeatureDefinitions.class)
                       .build(),
                   SubjectFeatures.OF_OVERLAY_FEATURES);
-            t.commit();
+            t.submit();
         }
 
         FlowTableCtx ctx = new FlowTableCtx(dataBroker, rpcRegistry, 
@@ -173,12 +171,11 @@ public class PolicyManager
         t.put(LogicalDatastoreType.CONFIGURATION, 
               FlowUtils.createNodePath(nodeId),
               nb.build());
-        ListenableFuture<RpcResult<TransactionStatus>> result = t.commit();
+        ListenableFuture<Void> result = t.submit();
         Futures.addCallback(result, 
-                            new FutureCallback<RpcResult<TransactionStatus>>() {
-
+                            new FutureCallback<Void>() {
             @Override
-            public void onSuccess(RpcResult<TransactionStatus> result) {
+            public void onSuccess(Void result) {
                 dirty.get().addNode(nodeId);
                 scheduleUpdate();
             }
index 7d7a17191308cb12e6625daaa5d6295be0534bea..8a32fbb906982bb2cd1c4d4b4cd584ec88912637 100644 (file)
@@ -117,16 +117,16 @@ public class DestinationMapper extends FlowTable {
             OfOverlayContext ofc = e.getAugmentation(OfOverlayContext.class);
             if (ofc == null || ofc.getNodeId() == null) continue;
             
-            syncEPL2(t, tiid, flowMap, nodeId, e, ofc, key);
+            syncEP(t, tiid, flowMap, nodeId, e, ofc, key);
         }
     }
 
-    private void syncEPL2(ReadWriteTransaction t,
-                          InstanceIdentifier<Table> tiid,
-                          Map<String, FlowCtx> flowMap, 
-                          NodeId nodeId, 
-                          Endpoint e, OfOverlayContext ofc,
-                          EgKey key) 
+    private void syncEP(ReadWriteTransaction t,
+                        InstanceIdentifier<Table> tiid,
+                        Map<String, FlowCtx> flowMap, 
+                        NodeId nodeId, 
+                        Endpoint e, OfOverlayContext ofc,
+                        EgKey key) 
                                  throws Exception {
 
         ArrayList<Instruction> instructions = new ArrayList<>();
@@ -148,16 +148,20 @@ public class DestinationMapper extends FlowTable {
                 // this is a local endpoint
                 nextHop = ofc.getNodeConnectorId().getValue();
 
+                Action output = FlowUtils.outputAction(ofc.getNodeConnectorId());
+
                 instructions.add(new InstructionBuilder()
-                    .setOrder(order++)
-                    .setInstruction(FlowUtils.outputActionIns(ofc.getNodeConnectorId()))
+                    .setOrder(order)
+                    .setInstruction(FlowUtils.writeActionIns(output))
                     .build());
                 l3instructions.add(new InstructionBuilder()
                     .setOrder(order)
                     .setInstruction(FlowUtils.writeActionIns(setDlSrc,
                                                              setDlDst,
-                                                             decTtl))
+                                                             decTtl,
+                                                             output))
                     .build());
+                order +=1;
             } else {
                 // this endpoint is on a different switch; send to the 
                 // appropriate tunnel
@@ -182,17 +186,22 @@ public class DestinationMapper extends FlowTable {
                     LOG.error("Tunnel IP for {} invalid", ofc.getNodeId());
                     return;
                 }
+
+                Action output = FlowUtils.outputAction(tunPort);
                 
                 // XXX - TODO Add action: set tunnel_id from sEPG register
                 instructions.add(new InstructionBuilder()
-                    .setOrder(order++)
-                    .setInstruction(FlowUtils.outputActionIns(tunPort))
+                    .setOrder(order)
+                    .setInstruction(FlowUtils.writeActionIns(output))
                     .build());
                 l3instructions.add(new InstructionBuilder()
                     .setOrder(order)
-                    .setInstruction(FlowUtils.writeActionIns(setDlSrc, decTtl))
+                    .setInstruction(FlowUtils.writeActionIns(setDlSrc, 
+                                                             decTtl,
+                                                             output))
                     .build());
 
+                order +=1;
             }
         }
         Instruction gotoTable = new InstructionBuilder()
@@ -203,9 +212,9 @@ public class DestinationMapper extends FlowTable {
         l3instructions.add(gotoTable);
 
         FlowId flowid = new FlowId(new StringBuilder()
-            .append(e.getL2Context())
+            .append(e.getL2Context().getValue())
             .append("|l2|")
-            .append(e.getMacAddress())
+            .append(e.getMacAddress().getValue())
             .append("|")
             .append(nextHop)
             .toString());
@@ -222,7 +231,7 @@ public class DestinationMapper extends FlowTable {
                 .setInstructions(new InstructionsBuilder()
                     .setInstruction(instructions)
                     .build());
-            
+
             writeFlow(t, tiid, flowb.build());
         }
         if (e.getL3Address() == null) return;
@@ -248,9 +257,9 @@ public class DestinationMapper extends FlowTable {
                 continue;
 
             flowid = new FlowId(new StringBuilder()
-                .append(l3a.getL3Context())
+                .append(l3a.getL3Context().getValue())
                 .append("|l3|")
-                .append(l3a.getIpAddress())
+                .append(ikey)
                 .append("|")
                 .append(nextHop)
                 .toString());
@@ -269,7 +278,7 @@ public class DestinationMapper extends FlowTable {
                     .setInstructions(new InstructionsBuilder()
                         .setInstruction(l3instructions)
                         .build());
-                
+
                 writeFlow(t, tiid, flowb.build());
             }
         }
index 41e1e7ef7ecbc6b176291cdb82c882fa1d129cfb..c24cc4817c119795381a3c711d30b42c516cbe7b 100644 (file)
@@ -14,7 +14,6 @@ import java.util.concurrent.ScheduledExecutorService;
 
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
-import org.opendaylight.controller.md.sal.common.api.TransactionStatus;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
 import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
 import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.EndpointManager;
@@ -27,7 +26,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.ta
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.FlowBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -125,7 +123,7 @@ public abstract class FlowTable {
             }
         }
 
-        ListenableFuture<RpcResult<TransactionStatus>> result = t.commit();
+        ListenableFuture<Void> result = t.submit();
         Futures.addCallback(result, updateCallback);
     }
 
@@ -164,13 +162,9 @@ public abstract class FlowTable {
      *
      * @param <T> the expected output type
      */
-    protected static class FlowCallback<T> implements FutureCallback<RpcResult<T>> {
-
+    protected static class FlowCallback<T> implements FutureCallback<T> {
         @Override
-        public void onSuccess(RpcResult<T> result) {
-            if (!result.isSuccessful()) {
-                LOG.error("Failed to update flow entry", result.getErrors());
-            }
+        public void onSuccess(T result) {
         }
 
         @Override
@@ -178,7 +172,7 @@ public abstract class FlowTable {
             LOG.error("Failed to add flow entry", t);
         }
     }
-    protected static final FlowCallback<TransactionStatus> updateCallback =
+    protected static final FlowCallback<Void> updateCallback =
             new FlowCallback<>();
 
     /**
index b307791a60db1963e25ff06aa2204f6dfd71c3dc..2f383de23a4ae49dad0649ac00a660aca79a252e 100644 (file)
@@ -22,7 +22,7 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
  * @author readams
  */
 public class PolicyEnforcer extends FlowTable {
-    public static final short TABLE_ID = 2;
+    public static final short TABLE_ID = 3;
 
     public PolicyEnforcer(FlowTableCtx ctx) {
         super(ctx);
index 44094bcb983df5814fc4e729017bd0d95119102f..a91477143ede44385c938fcce7645a51c22fbd79 100644 (file)
@@ -447,7 +447,7 @@ public class OpflexConnectionService
          if (dataProvider != null) {
              WriteTransaction t = dataProvider.newWriteOnlyTransaction();
              t.delete(LogicalDatastoreType.CONFIGURATION, DOMAINS_IID);
-             t.commit().get();
+             t.submit().get();
          }
      }
 
index be432fa3660cfecf3235f4316926077567917c26..580a8ca8374a022831a35b69db19b8a39abd78d3 100644 (file)
@@ -330,12 +330,6 @@ module policy {
              endpoint group, and provider named selectors select
              contracts to provide capabilities for the endpoint group.";
 
-        leaf name {
-            description "A name for the named selector.";
-            type gbp-common:selector-name;
-            mandatory true;
-        }
-
         leaf-list contract {
             description "Specific contracts to select.";
             type leafref {
index 7c9bb6f3d74c1aed2391a5b0e6c690eefc5a4632..148b05a63f14bdd0bf036e37a8262cf18eb387f2 100644 (file)
@@ -16,6 +16,7 @@ import java.util.Objects;
 import org.junit.Before;
 import org.junit.Test;
 import org.mockito.ArgumentCaptor;
+import org.mockito.Matchers;
 import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
 import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow.FlowTable.FlowCtx;
@@ -68,17 +69,18 @@ public class DestinationMapperTest extends FlowTableTest {
     public void testNoEps() throws Exception {
         ReadWriteTransaction t = dosync(null);
         verify(t, never()).put(any(LogicalDatastoreType.class), 
-                               any(InstanceIdentifier.class), 
+                               Matchers.<InstanceIdentifier<Flow>>any(), 
                                any(Flow.class));
     }
 
     private void verifyDMap(Endpoint remoteEp, 
-                          Endpoint localEp) throws Exception {
+                            Endpoint localEp) throws Exception {
 
         ReadWriteTransaction t = dosync(null);
         ArgumentCaptor<Flow> ac = ArgumentCaptor.forClass(Flow.class);
         verify(t, atLeastOnce()).put(eq(LogicalDatastoreType.CONFIGURATION), 
-                      any(InstanceIdentifier.class), ac.capture());
+                                     Matchers.<InstanceIdentifier<Flow>>any(),
+                                     ac.capture());
 
         int count = 0;
         HashMap<String, FlowCtx> flowMap = new HashMap<>();
@@ -133,10 +135,16 @@ public class DestinationMapperTest extends FlowTableTest {
                             ((WriteActionsCase)ins.getInstruction()).getWriteActions().getAction();
                     assertEquals(FlowUtils.setDlSrc(DestinationMapper.ROUTER_MAC),
                                  actions.get(0).getAction());
+                    assertEquals(Integer.valueOf(0), actions.get(0).getOrder());
                     assertEquals(FlowUtils.setDlDst(localEp.getMacAddress()),
                                  actions.get(1).getAction());
+                    assertEquals(Integer.valueOf(1), actions.get(1).getOrder());
                     assertEquals(FlowUtils.decNwTtl(),
                                  actions.get(2).getAction());
+                    assertEquals(Integer.valueOf(2), actions.get(2).getOrder());
+                    assertEquals(FlowUtils.outputAction(nodeConnectorId),
+                                 actions.get(3).getAction());
+                    assertEquals(Integer.valueOf(3), actions.get(3).getOrder());
                     count += 1;
                 } else if (f.getMatch().getLayer3Match() instanceof Ipv6Match) {
                     // should be remote port with rewrite dlsrc plus
@@ -147,8 +155,13 @@ public class DestinationMapperTest extends FlowTableTest {
                             ((WriteActionsCase)ins.getInstruction()).getWriteActions().getAction();
                     assertEquals(FlowUtils.setDlSrc(DestinationMapper.ROUTER_MAC),
                                  actions.get(0).getAction());
+                    assertEquals(Integer.valueOf(0), actions.get(0).getOrder());
                     assertEquals(FlowUtils.decNwTtl(),
                                  actions.get(1).getAction());
+                    assertEquals(Integer.valueOf(1), actions.get(1).getOrder());
+                    assertEquals(FlowUtils.outputAction(tunnelId),
+                                 actions.get(2).getAction());
+                    assertEquals(Integer.valueOf(2), actions.get(2).getOrder());
                     count += 1;
                 }
             }
@@ -157,7 +170,7 @@ public class DestinationMapperTest extends FlowTableTest {
 
         t = dosync(flowMap);
         verify(t, never()).put(any(LogicalDatastoreType.class), 
-                               any(InstanceIdentifier.class), 
+                               Matchers.<InstanceIdentifier<Flow>>any(), 
                                any(Flow.class));
     }
     
index 72f53e72081b15f039fe8a8c3906d919861b675d..bd02feedaffefba3b132dfc20aaeaeb67cef50ad 100644 (file)
@@ -17,6 +17,7 @@ import java.util.Set;
 import org.junit.Before;
 import org.junit.Test;
 import org.mockito.ArgumentCaptor;
+import org.mockito.Matchers;
 import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
 import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow.FlowTable.FlowCtx;
@@ -62,7 +63,8 @@ public class PortSecurityTest extends FlowTableTest {
         ReadWriteTransaction t = dosync(null);
         ArgumentCaptor<Flow> ac = ArgumentCaptor.forClass(Flow.class);
         verify(t, times(4)).put(eq(LogicalDatastoreType.CONFIGURATION), 
-                      any(InstanceIdentifier.class), ac.capture());
+                                Matchers.<InstanceIdentifier<Flow>>any(), 
+                                ac.capture());
         int count = 0;
         
         HashMap<String, FlowCtx> flowMap = new HashMap<>();
@@ -80,12 +82,12 @@ public class PortSecurityTest extends FlowTableTest {
                 count += 1;
                 assertEquals(FlowUtils.dropInstructions(),
                              f.getInstructions());
-            } 
+            }
         }
         assertEquals(4, count);
         t = dosync(flowMap);
         verify(t, never()).put(any(LogicalDatastoreType.class), 
-                               any(InstanceIdentifier.class), 
+                               Matchers.<InstanceIdentifier<Flow>>any(), 
                                any(Flow.class));
     }
 
@@ -100,7 +102,8 @@ public class PortSecurityTest extends FlowTableTest {
         ReadWriteTransaction t = dosync(null);
         ArgumentCaptor<Flow> ac = ArgumentCaptor.forClass(Flow.class);
         verify(t, atLeastOnce()).put(eq(LogicalDatastoreType.CONFIGURATION), 
-                      any(InstanceIdentifier.class), ac.capture());
+                                     Matchers.<InstanceIdentifier<Flow>>any(),
+                                     ac.capture());
         
         int count = 0;
         HashMap<String, FlowCtx> flowMap = new HashMap<>();
@@ -118,7 +121,7 @@ public class PortSecurityTest extends FlowTableTest {
 
         t = dosync(flowMap);
         verify(t, never()).put(any(LogicalDatastoreType.class), 
-                               any(InstanceIdentifier.class), 
+                               Matchers.<InstanceIdentifier<Flow>>any(), 
                                any(Flow.class));
     }
     
@@ -134,8 +137,9 @@ public class PortSecurityTest extends FlowTableTest {
         ReadWriteTransaction t = dosync(null);
         ArgumentCaptor<Flow> ac = ArgumentCaptor.forClass(Flow.class);
         verify(t, atLeastOnce()).put(eq(LogicalDatastoreType.CONFIGURATION), 
-                      any(InstanceIdentifier.class), ac.capture());
-        
+                                     Matchers.<InstanceIdentifier<Flow>>any(),
+                                     ac.capture());
+
         int count = 0;
         HashMap<String, FlowCtx> flowMap = new HashMap<>();
         for (Flow f : ac.getAllValues()) {
@@ -156,7 +160,7 @@ public class PortSecurityTest extends FlowTableTest {
         assertEquals(1, count);
         t = dosync(flowMap);
         verify(t, never()).put(any(LogicalDatastoreType.class), 
-                               any(InstanceIdentifier.class), 
+                               Matchers.<InstanceIdentifier<Flow>>any(), 
                                any(Flow.class));
     }
     
@@ -176,7 +180,8 @@ public class PortSecurityTest extends FlowTableTest {
         ReadWriteTransaction t = dosync(null);
         ArgumentCaptor<Flow> ac = ArgumentCaptor.forClass(Flow.class);
         verify(t, atLeastOnce()).put(eq(LogicalDatastoreType.CONFIGURATION), 
-                      any(InstanceIdentifier.class), ac.capture());
+                                     Matchers.<InstanceIdentifier<Flow>>any(),
+                                     ac.capture());
         
         int count = 0;
         HashMap<String, FlowCtx> flowMap = new HashMap<>();
@@ -205,7 +210,7 @@ public class PortSecurityTest extends FlowTableTest {
         assertEquals(3, count);
         t = dosync(flowMap);
         verify(t, never()).put(any(LogicalDatastoreType.class), 
-                               any(InstanceIdentifier.class), 
+                               Matchers.<InstanceIdentifier<Flow>>any(), 
                                any(Flow.class));
     }
 }
index ea4cbb9211c197a99e2a6f8b5eff05b918d6a2cd..8a8b226b17178f41f39aea2ec72ed6ecb26777b0 100644 (file)
@@ -14,6 +14,7 @@ import java.util.Objects;
 import org.junit.Before;
 import org.junit.Test;
 import org.mockito.ArgumentCaptor;
+import org.mockito.Matchers;
 import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
 import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow.FlowTable.FlowCtx;
@@ -44,7 +45,7 @@ public class SourceMapperTest extends FlowTableTest {
         endpointManager.addEndpoint(localEP().build());
         ReadWriteTransaction t = dosync(null);
         verify(t, never()).put(any(LogicalDatastoreType.class), 
-                               any(InstanceIdentifier.class), 
+                               Matchers.<InstanceIdentifier<Flow>>any(), 
                                any(Flow.class));
     }
     
@@ -57,7 +58,8 @@ public class SourceMapperTest extends FlowTableTest {
         ReadWriteTransaction t = dosync(null);
         ArgumentCaptor<Flow> ac = ArgumentCaptor.forClass(Flow.class);
         verify(t, times(1)).put(eq(LogicalDatastoreType.CONFIGURATION), 
-                      any(InstanceIdentifier.class), ac.capture());
+                                Matchers.<InstanceIdentifier<Flow>>any(),
+                                ac.capture());
 
         int count = 0;
         HashMap<String, FlowCtx> flowMap = new HashMap<>();
@@ -70,13 +72,12 @@ public class SourceMapperTest extends FlowTableTest {
                 LOG.info("{}", f);
                 count += 1;
             }
-            
         }
         assertEquals(1, count);
 
         t = dosync(flowMap);
         verify(t, never()).put(any(LogicalDatastoreType.class), 
-                               any(InstanceIdentifier.class), 
+                               Matchers.<InstanceIdentifier<Flow>>any(), 
                                any(Flow.class));
     }
     
index 4a8561f7bad66bb77909786fb14c7287cec706b4..3fc2b3b2f32b90dfbd562576e643c95b0a62f8dd 100644 (file)
 
 package org.opendaylight.groupbasedpolicy.renderer.opflex;
 
-import static io.netty.buffer.Unpooled.copiedBuffer;
-import static org.junit.Assert.assertTrue;
-import static org.mockito.Matchers.anyObject;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
 import io.netty.channel.embedded.EmbeddedChannel;
 import io.netty.util.CharsetUtil;
 
@@ -31,8 +26,8 @@ import org.mockito.MockitoAnnotations;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
-import org.opendaylight.controller.md.sal.common.api.TransactionStatus;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
 import org.opendaylight.groupbasedpolicy.jsonrpc.JsonRpcDecoder;
 import org.opendaylight.groupbasedpolicy.jsonrpc.JsonRpcEndpoint;
 import org.opendaylight.groupbasedpolicy.jsonrpc.JsonRpcServiceBinderHandler;
@@ -48,15 +43,23 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.opflex.rev
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.opflex.rev140528.domains.domain.discovery.definitions.ObserverBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.opflex.rev140528.domains.domain.discovery.definitions.PolicyRepository;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.opflex.rev140528.domains.domain.discovery.definitions.PolicyRepositoryBuilder;
-import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import com.fasterxml.jackson.databind.DeserializationFeature;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.google.common.base.Optional;
+import com.google.common.util.concurrent.CheckedFuture;
 import com.google.common.util.concurrent.ListenableFuture;
 
+import static io.netty.buffer.Unpooled.*;
+
+import static org.junit.Assert.*;
+
+import static org.mockito.Matchers.*;
+
+import static org.mockito.Mockito.*;
+
 /**
  *
  * Test the serialization and deserialization of RPC Messages,
@@ -105,7 +108,7 @@ public class OpflexConnectionServiceTest {
     @Mock
     private ListenableFuture<Optional<Domains>> mockOption;
     @Mock
-    ListenableFuture<RpcResult<TransactionStatus>> mockStatus;
+    CheckedFuture<Void, TransactionCommitFailedException> mockStatus;
     @Mock
     private Optional<Domains> mockDao;
     @Mock
@@ -153,7 +156,7 @@ public class OpflexConnectionServiceTest {
          */
         when(mockDataBroker.newReadOnlyTransaction()).thenReturn(mockRead);
         when(mockDataBroker.newWriteOnlyTransaction()).thenReturn(mockWrite);
-        when(mockWrite.commit()).thenReturn(mockStatus);
+        when(mockWrite.submit()).thenReturn(mockStatus);
         when(mockRead.read(LogicalDatastoreType.CONFIGURATION,
                 OpflexConnectionService.DOMAINS_IID)).thenReturn(mockOption);
         when(mockOption.get()).thenReturn(mockDao);