Bug 8228 - metadata service fix made cleaner
[groupbasedpolicy.git] / renderers / vpp / src / test / java / org / opendaylight / groupbasedpolicy / renderer / vpp / iface / VppEndpointLocationProviderTest.java
index e9026fa502e588ab0986ac458c7f0dc38b30b4e6..6a766cba573c2e581f6315432275c416fb1ed150 100644 (file)
@@ -15,17 +15,16 @@ import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
-import com.google.common.util.concurrent.CheckedFuture;
-import com.google.common.util.concurrent.ListenableFuture;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
 import org.opendaylight.controller.md.sal.binding.api.BindingTransactionChain;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
 import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.has.absolute.location.AbsoluteLocation;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.has.absolute.location.absolute.location.location.type.ExternalLocationCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.has.absolute.location.absolute.location.location.type.ExternalLocationCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ContextId;
@@ -36,10 +35,15 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.endpoints.AddressEndpointWithLocationKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_renderer.rev160425.config.VppEndpoint;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_renderer.rev160425.config.VppEndpointBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_renderer.rev160425.config.VppEndpointKey;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
-import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
+import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 
+import com.google.common.base.Optional;
+import com.google.common.util.concurrent.CheckedFuture;
+import com.google.common.util.concurrent.ListenableFuture;
+
 @SuppressWarnings("unchecked")
 public class VppEndpointLocationProviderTest {
 
@@ -49,19 +53,29 @@ public class VppEndpointLocationProviderTest {
     private final DataBroker dataProvider = mock(DataBroker.class);
     private final BindingTransactionChain transactionChain = mock(BindingTransactionChain.class);
     private final WriteTransaction wTx = mock(WriteTransaction.class);
+    private final ReadWriteTransaction rwTx = mock(ReadWriteTransaction.class);
     private final CheckedFuture<Void, TransactionCommitFailedException> future = mock(CheckedFuture.class);
+    private final CheckedFuture<Optional<DataObject>,ReadFailedException> readFuture = mock(CheckedFuture.class);
+    private final Optional<DataObject> vppEpOpt = mock(Optional.class);
+    private final VppEndpointKey VPP_EP_KEY =
+            new VppEndpointKey("192.168.192.168/32", IpPrefixType.class, new ContextId("TEST_CTX"), L3Context.class);
 
     @Before
-    public void init() {
+    public void init() throws ReadFailedException {
         when(dataProvider.createTransactionChain(any())).thenReturn(transactionChain);
         when(transactionChain.newWriteOnlyTransaction()).thenReturn(wTx);
+        when(transactionChain.newReadWriteTransaction()).thenReturn(rwTx);
+        when(dataProvider.newReadWriteTransaction()).thenReturn(rwTx);
+        when(rwTx.read(any(LogicalDatastoreType.class), any(InstanceIdentifier.class))).thenReturn(readFuture);
+        when(readFuture.checkedGet()).thenReturn(vppEpOpt);
+        when(vppEpOpt.isPresent()).thenReturn(true);
         when(wTx.submit()).thenReturn(future);
+        when(rwTx.submit()).thenReturn(future);
     }
 
     @Test
     public void constructorTest() {
         new VppEndpointLocationProvider(dataProvider);
-
         verify(dataProvider, times(1)).createTransactionChain(any());
         verify(transactionChain, times(1)).newWriteOnlyTransaction();
         verify(wTx, times(1)).put(eq(LogicalDatastoreType.CONFIGURATION),
@@ -73,44 +87,29 @@ public class VppEndpointLocationProviderTest {
     public void createLocationForVppEndpointTest() {
         final VppEndpointLocationProvider locationProvider = new VppEndpointLocationProvider(dataProvider);
         final ListenableFuture<Void> result = locationProvider.createLocationForVppEndpoint(vppEndpointBuilder());
-
         Assert.assertNotNull(result);
         verify(dataProvider, times(1)).createTransactionChain(any());
-        verify(transactionChain, times(2)).newWriteOnlyTransaction();
+        verify(transactionChain, times(1)).newWriteOnlyTransaction();
         verify(wTx, times(1)).put(eq(LogicalDatastoreType.CONFIGURATION),
                 any(InstanceIdentifier.class), any(LocationProvider.class), eq(true));
         verify(wTx, times(1)).put(eq(LogicalDatastoreType.CONFIGURATION),
                 any(InstanceIdentifier.class), any(ProviderAddressEndpointLocation.class), eq(true));
-        verify(wTx, times(2)).submit();
-    }
-
-    @Test
-    public void createProviderAddressEndpointLocationTest() {
-        final ProviderAddressEndpointLocation result =
-                VppEndpointLocationProvider.createProviderAddressEndpointLocation(vppEndpointBuilder());
-        Assert.assertNotNull(result);
-        final AbsoluteLocation location = result.getAbsoluteLocation();
-        Assert.assertNotNull(location);
-        Assert.assertEquals(location.getLocationType().getImplementedInterface(), ExternalLocationCase.class);
-        final ExternalLocationCase locationType = (ExternalLocationCase) location.getLocationType();
-        Assert.assertEquals(locationType.getExternalNodeMountPoint().firstKeyOf(Node.class).getNodeId(), nodeId);
-        Assert.assertTrue(locationType.getExternalNodeConnector().contains(INTERFACE_NAME));
-
+        verify(wTx, times(1)).submit();
     }
 
     @Test
     public void deleteLocationForVppEndpointTest() {
         final VppEndpointLocationProvider locationProvider = new VppEndpointLocationProvider(dataProvider);
         final ListenableFuture<Void> result = locationProvider.deleteLocationForVppEndpoint(vppEndpointBuilder());
-
         Assert.assertNotNull(result);
         verify(dataProvider, times(1)).createTransactionChain(any());
-        verify(transactionChain, times(2)).newWriteOnlyTransaction();
+        verify(transactionChain, times(1)).newWriteOnlyTransaction();
         verify(wTx, times(1)).put(eq(LogicalDatastoreType.CONFIGURATION),
                 any(InstanceIdentifier.class), any(LocationProvider.class), eq(true));
-        verify(wTx, times(1)).delete(eq(LogicalDatastoreType.CONFIGURATION),
+        verify(rwTx, times(1)).delete(eq(LogicalDatastoreType.CONFIGURATION),
                 any(InstanceIdentifier.class));
-        verify(wTx, times(2)).submit();
+        verify(wTx, times(1)).submit();
+        verify(rwTx, times(1)).submit();
     }
 
     @Test
@@ -131,8 +130,7 @@ public class VppEndpointLocationProviderTest {
 
     private VppEndpoint vppEndpointBuilder() {
         final VppEndpointBuilder vppEndpointBuilder = new VppEndpointBuilder();
-        vppEndpointBuilder.setVppNodeId(nodeId)
-                .setVppInterfaceName(INTERFACE_NAME);
+        vppEndpointBuilder.setKey(VPP_EP_KEY).setVppNodeId(nodeId).setVppInterfaceName(INTERFACE_NAME);
         return vppEndpointBuilder.build();
     }