Remove Itemlifecycle
[openflowplugin.git] / openflowplugin-impl / src / test / java / org / opendaylight / openflowplugin / impl / device / DeviceContextImplTest.java
index c0657da1991e914d3e8e8d1ca01414911eebd2ad..6b2e76408ad10ad15667bb05246b6ea739fd140c 100644 (file)
@@ -10,9 +10,9 @@ package org.opendaylight.openflowplugin.impl.device;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyBoolean;
 import static org.mockito.Matchers.eq;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
@@ -25,16 +25,11 @@ import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
 import com.google.common.util.concurrent.SettableFuture;
 import io.netty.util.HashedWheelTimer;
-import io.netty.util.Timeout;
 import java.math.BigInteger;
-import java.net.InetSocketAddress;
 import java.util.concurrent.atomic.AtomicLong;
-import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.mockito.InOrder;
-import org.mockito.Matchers;
 import org.mockito.Mock;
 import org.mockito.Mockito;
 import org.mockito.runners.MockitoJUnitRunner;
@@ -43,7 +38,7 @@ import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.md.sal.binding.api.NotificationPublishService;
 import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
 import org.opendaylight.controller.md.sal.binding.api.ReadTransaction;
-import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
+import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
 import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
 import org.opendaylight.openflowjava.protocol.api.connection.ConnectionAdapter;
@@ -53,25 +48,22 @@ import org.opendaylight.openflowplugin.api.openflow.connection.ConnectionContext
 import org.opendaylight.openflowplugin.api.openflow.connection.OutboundQueueProvider;
 import org.opendaylight.openflowplugin.api.openflow.device.DeviceContext;
 import org.opendaylight.openflowplugin.api.openflow.device.DeviceInfo;
-import org.opendaylight.openflowplugin.api.openflow.device.DeviceManager;
-import org.opendaylight.openflowplugin.api.openflow.device.DeviceState;
 import org.opendaylight.openflowplugin.api.openflow.device.MessageTranslator;
 import org.opendaylight.openflowplugin.api.openflow.device.RequestContext;
 import org.opendaylight.openflowplugin.api.openflow.device.TranslatorLibrary;
 import org.opendaylight.openflowplugin.api.openflow.device.Xid;
-import org.opendaylight.openflowplugin.api.openflow.device.handlers.DeviceTerminationPhaseHandler;
 import org.opendaylight.openflowplugin.api.openflow.md.core.TranslatorKey;
 import org.opendaylight.openflowplugin.api.openflow.registry.flow.DeviceFlowRegistry;
 import org.opendaylight.openflowplugin.api.openflow.registry.flow.FlowDescriptor;
 import org.opendaylight.openflowplugin.api.openflow.registry.flow.FlowRegistryKey;
 import org.opendaylight.openflowplugin.api.openflow.registry.group.DeviceGroupRegistry;
 import org.opendaylight.openflowplugin.api.openflow.registry.meter.DeviceMeterRegistry;
-import org.opendaylight.openflowplugin.api.openflow.rpc.ItemLifeCycleSource;
-import org.opendaylight.openflowplugin.api.openflow.rpc.listener.ItemLifecycleListener;
 import org.opendaylight.openflowplugin.api.openflow.statistics.ofpspecific.MessageSpy;
+import org.opendaylight.openflowplugin.common.txchain.TransactionChainManager;
 import org.opendaylight.openflowplugin.extension.api.ConvertorMessageFromOFJava;
 import org.opendaylight.openflowplugin.extension.api.core.extension.ExtensionConverterProvider;
-import org.opendaylight.openflowplugin.impl.device.initialization.DeviceInitializerProviderFactory;
+import org.opendaylight.openflowplugin.impl.device.initialization.AbstractDeviceInitializer;
+import org.opendaylight.openflowplugin.impl.device.initialization.DeviceInitializerProvider;
 import org.opendaylight.openflowplugin.impl.registry.flow.FlowDescriptorFactory;
 import org.opendaylight.openflowplugin.impl.registry.flow.FlowRegistryKeyFactory;
 import org.opendaylight.openflowplugin.impl.util.DeviceStateUtil;
@@ -87,6 +79,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.ta
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.FlowRemovedBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowCookie;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.MatchBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
@@ -97,6 +90,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.ExperimenterMessage;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.ExperimenterMessageBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.FeaturesReply;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.FlowRemoved;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.FlowRemovedMessageBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GetAsyncReply;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GetFeaturesOutput;
@@ -108,10 +102,10 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.PortStatusMessage;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.experimenter.core.ExperimenterDataOfChoice;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.PacketReceived;
-import org.opendaylight.yangtools.concepts.Registration;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.PacketReceivedBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.role.service.rev150727.SalRoleService;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier;
-import org.opendaylight.yangtools.yang.binding.Notification;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -125,69 +119,67 @@ public class DeviceContextImplTest {
     private static final Long DUMMY_XID = 544L;
     private static final Long DUMMY_PORT_NUMBER = 159L;
     private static final BigInteger DUMMY_DATAPATH_ID = new BigInteger("55");
-    Xid xid;
-    Xid xidMulti;
+    private Xid xid;
+    private Xid xidMulti;
 
-    DeviceContext deviceContext;
+    private DeviceContext deviceContext;
     @Mock
-    TransactionChainManager txChainManager;
+    private RequestContext<GetAsyncReply> requestContext;
     @Mock
-    RequestContext<GetAsyncReply> requestContext;
+    private RequestContext<MultipartReply> requestContextMultiReply;
     @Mock
-    RequestContext<MultipartReply> requestContextMultiReply;
+    private ConnectionContext connectionContext;
     @Mock
-    ConnectionContext connectionContext;
+    private GetFeaturesOutput featuresOutput;
     @Mock
-    DeviceState deviceState;
+    private DataBroker dataBroker;
     @Mock
-    GetFeaturesOutput featuresOutput;
+    private ReadWriteTransaction writeTx;
     @Mock
-    DataBroker dataBroker;
+    private ReadOnlyTransaction readTx;
     @Mock
-    WriteTransaction wTx;
+    private BindingTransactionChain txChainFactory;
     @Mock
-    ReadOnlyTransaction rTx;
+    private HashedWheelTimer timer;
     @Mock
-    BindingTransactionChain txChainFactory;
+    private OutboundQueueProvider outboundQueueProvider;
     @Mock
-    HashedWheelTimer timer;
+    private ConnectionAdapter connectionAdapter;
+    private NodeId nodeId = new NodeId("h2g2:42");
+    private KeyedInstanceIdentifier<Node, NodeKey> nodeKeyIdent = DeviceStateUtil.createNodeInstanceIdentifier(nodeId);
     @Mock
-    OutboundQueueProvider outboundQueueProvider;
-    @Mock
-    ConnectionAdapter connectionAdapter;
-    NodeId nodeId = new NodeId("h2g2:42");
-    KeyedInstanceIdentifier<Node, NodeKey> nodeKeyIdent = DeviceStateUtil.createNodeInstanceIdentifier(nodeId);
-    @Mock
-    TranslatorLibrary translatorLibrary;
-    @Mock
-    Registration registration;
+    private TranslatorLibrary translatorLibrary;
     @Mock
     MessageTranslator messageTranslatorPacketReceived;
     @Mock
-    MessageTranslator messageTranslatorFlowCapableNodeConnector;
+    private MessageTranslator messageTranslatorFlowCapableNodeConnector;
     @Mock
     private MessageTranslator<Object, Object> messageTranslatorFlowRemoved;
     @Mock
     private DeviceInfo deviceInfo;
     @Mock
-    private DeviceManager deviceManager;
-    @Mock
     private ConvertorExecutor convertorExecutor;
     @Mock
     private MessageSpy messageSpy;
-
-    private InOrder inOrderDevState;
+    @Mock
+    private DeviceInitializerProvider deviceInitializerProvider;
+    @Mock
+    private AbstractDeviceInitializer abstractDeviceInitializer;
+    @Mock
+    private SalRoleService salRoleService;
 
     private final AtomicLong atomicLong = new AtomicLong(0);
 
     private DeviceContext deviceContextSpy;
 
     @Before
-    public void setUp() throws Exception{
-        final CheckedFuture<Optional<Node>, ReadFailedException> noExistNodeFuture = Futures.immediateCheckedFuture(Optional.<Node>absent());
-        Mockito.when(rTx.read(LogicalDatastoreType.OPERATIONAL, nodeKeyIdent)).thenReturn(noExistNodeFuture);
-        Mockito.when(dataBroker.newReadOnlyTransaction()).thenReturn(rTx);
-        Mockito.when(dataBroker.createTransactionChain(Mockito.any(TransactionChainManager.class))).thenReturn(txChainFactory);
+    public void setUp() throws Exception {
+        final CheckedFuture<Optional<Node>, ReadFailedException> noExistNodeFuture =
+                Futures.immediateCheckedFuture(Optional.<Node>absent());
+        Mockito.when(readTx.read(LogicalDatastoreType.OPERATIONAL, nodeKeyIdent)).thenReturn(noExistNodeFuture);
+        Mockito.when(dataBroker.newReadOnlyTransaction()).thenReturn(readTx);
+        Mockito.when(dataBroker.createTransactionChain(Mockito.any(TransactionChainManager.class)))
+                .thenReturn(txChainFactory);
         Mockito.when(deviceInfo.getNodeInstanceIdentifier()).thenReturn(nodeKeyIdent);
         Mockito.when(deviceInfo.getNodeId()).thenReturn(nodeId);
         Mockito.when(deviceInfo.getDatapathId()).thenReturn(BigInteger.ONE);
@@ -204,8 +196,8 @@ public class DeviceContextImplTest {
             settableFutureMultiReply.set((RpcResult<MultipartReply>) invocation.getArguments()[0]);
             return null;
         }).when(requestContextMultiReply).setResult(any(RpcResult.class));
-        Mockito.when(txChainFactory.newWriteOnlyTransaction()).thenReturn(wTx);
-        Mockito.when(dataBroker.newReadOnlyTransaction()).thenReturn(rTx);
+        Mockito.when(txChainFactory.newReadWriteTransaction()).thenReturn(writeTx);
+        Mockito.when(dataBroker.newReadOnlyTransaction()).thenReturn(readTx);
         Mockito.when(connectionContext.getOutboundQueueProvider()).thenReturn(outboundQueueProvider);
         Mockito.when(connectionContext.getConnectionAdapter()).thenReturn(connectionAdapter);
         Mockito.when(connectionContext.getDeviceInfo()).thenReturn(deviceInfo);
@@ -216,30 +208,51 @@ public class DeviceContextImplTest {
         Mockito.when(deviceInfo.getVersion()).thenReturn(OFConstants.OFP_VERSION_1_3);
         Mockito.when(featuresOutput.getDatapathId()).thenReturn(DUMMY_DATAPATH_ID);
         Mockito.when(featuresOutput.getVersion()).thenReturn(OFConstants.OFP_VERSION_1_3);
-        Mockito.when(messageTranslatorPacketReceived.translate(any(Object.class), any(DeviceInfo.class), any(Object.class))).thenReturn(mock(PacketReceived.class));
-        Mockito.when(messageTranslatorFlowCapableNodeConnector.translate(any(Object.class), any(DeviceInfo.class), any(Object.class))).thenReturn(mock(FlowCapableNodeConnector.class));
-        Mockito.when(translatorLibrary.lookupTranslator(eq(new TranslatorKey(OFConstants.OFP_VERSION_1_3, PacketIn.class.getName())))).thenReturn(messageTranslatorPacketReceived);
-        Mockito.when(translatorLibrary.lookupTranslator(eq(new TranslatorKey(OFConstants.OFP_VERSION_1_3, PortGrouping.class.getName())))).thenReturn(messageTranslatorFlowCapableNodeConnector);
+
+        final PacketReceived packetReceived = new PacketReceivedBuilder()
+                .setMatch(new org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.packet.received
+                        .MatchBuilder()
+                        .setInPort(new NodeConnectorId("openflow:1:LOCAL"))
+                        .build())
+                .build();
+
+        Mockito.when(messageTranslatorPacketReceived.translate(any(Object.class), any(DeviceInfo.class),
+                any(Object.class))).thenReturn(packetReceived);
+        Mockito.when(messageTranslatorFlowCapableNodeConnector.translate(any(Object.class), any(DeviceInfo.class),
+                any(Object.class))).thenReturn(mock(FlowCapableNodeConnector.class));
+        Mockito.when(translatorLibrary.lookupTranslator(eq(new TranslatorKey(OFConstants.OFP_VERSION_1_3,
+                PacketIn.class.getName())))).thenReturn(messageTranslatorPacketReceived);
         Mockito.when(translatorLibrary.lookupTranslator(eq(new TranslatorKey(OFConstants.OFP_VERSION_1_3,
-                org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.FlowRemoved.class.getName()))))
-                .thenReturn(messageTranslatorFlowRemoved);
+                PortGrouping.class.getName())))).thenReturn(messageTranslatorFlowCapableNodeConnector);
+        Mockito.when(translatorLibrary.lookupTranslator(eq(new TranslatorKey(OFConstants.OFP_VERSION_1_3,
+                FlowRemoved.class.getName())))).thenReturn(messageTranslatorFlowRemoved);
+
+        Mockito.when(abstractDeviceInitializer.initialize(any(), anyBoolean(), anyBoolean(), any(), any()))
+                .thenReturn(Futures.immediateFuture(null));
+
+        final java.util.Optional<AbstractDeviceInitializer> deviceInitializer = java.util.Optional
+                .of(this.abstractDeviceInitializer);
+
+        Mockito.when(deviceInitializerProvider.lookup(OFConstants.OFP_VERSION_1_3)).thenReturn(deviceInitializer);
+        Mockito.when(salRoleService.setRole(any())).thenReturn(Futures.immediateFuture(null));
 
         deviceContext = new DeviceContextImpl(
                 connectionContext,
                 dataBroker,
                 messageSpy,
                 translatorLibrary,
-                deviceManager,
                 convertorExecutor,
-                false, timer, deviceManager, false,
-            DeviceInitializerProviderFactory.createDefaultProvider());
+                false, timer, false,
+                deviceInitializerProvider,
+                true, false);
+
+        ((DeviceContextImpl) deviceContext).lazyTransactionManagerInitialization();
         deviceContextSpy = Mockito.spy(deviceContext);
 
         xid = new Xid(atomicLong.incrementAndGet());
         xidMulti = new Xid(atomicLong.incrementAndGet());
-        ((DeviceContextImpl) deviceContext).lazyTransactionManagerInitialization();
 
-        Mockito.doNothing().when(deviceContextSpy).writeToTransaction(Mockito.<LogicalDatastoreType>any(), Mockito.<InstanceIdentifier>any(), any());
+        Mockito.doNothing().when(deviceContextSpy).writeToTransaction(any(), any(), any());
 
     }
 
@@ -247,45 +260,18 @@ public class DeviceContextImplTest {
     public void testGetReadTransaction() {
         final ReadTransaction readTx = deviceContext.getReadTransaction();
         assertNotNull(readTx);
-        assertEquals(rTx, readTx);
+        assertEquals(this.readTx, readTx);
     }
 
-    /**
-     * @throws Exception
-     */
     @Test
     public void testInitialSubmitTransaction() throws Exception {
-        Mockito.when(wTx.submit()).thenReturn(Futures.immediateCheckedFuture(null));
+        Mockito.when(writeTx.submit()).thenReturn(Futures.immediateCheckedFuture(null));
         final InstanceIdentifier<Nodes> dummyII = InstanceIdentifier.create(Nodes.class);
         ((DeviceContextImpl) deviceContext).getTransactionChainManager().activateTransactionManager() ;
-        ((DeviceContextImpl) deviceContext).getTransactionChainManager().enableSubmit();
+        ((DeviceContextImpl) deviceContext).getTransactionChainManager().initialSubmitWriteTransaction();
         deviceContext.addDeleteToTxChain(LogicalDatastoreType.CONFIGURATION, dummyII);
         deviceContext.initialSubmitTransaction();
-        verify(wTx).submit();
-    }
-
-    @Test
-    public void testAuxiliaryConnectionContext() {
-        final ConnectionContext mockedConnectionContext = addDummyAuxiliaryConnectionContext();
-        final ConnectionContext pickedConnectiobContexts = deviceContext.getAuxiliaryConnectionContexts(DUMMY_COOKIE);
-        assertEquals(mockedConnectionContext, pickedConnectiobContexts);
-    }
-    @Test
-    public void testRemoveAuxiliaryConnectionContext() {
-        final ConnectionContext mockedConnectionContext = addDummyAuxiliaryConnectionContext();
-
-        final ConnectionAdapter mockedAuxConnectionAdapter = mock(ConnectionAdapter.class);
-        when(mockedConnectionContext.getConnectionAdapter()).thenReturn(mockedAuxConnectionAdapter);
-
-        assertNotNull(deviceContext.getAuxiliaryConnectionContexts(DUMMY_COOKIE));
-        deviceContext.removeAuxiliaryConnectionContext(mockedConnectionContext);
-        assertNull(deviceContext.getAuxiliaryConnectionContexts(DUMMY_COOKIE));
-    }
-
-    private ConnectionContext addDummyAuxiliaryConnectionContext() {
-        final ConnectionContext mockedConnectionContext = prepareConnectionContext();
-        deviceContext.addAuxiliaryConnectionContext(mockedConnectionContext);
-        return mockedConnectionContext;
+        verify(writeTx).submit();
     }
 
     private ConnectionContext prepareConnectionContext() {
@@ -296,25 +282,19 @@ public class DeviceContextImplTest {
         return mockedConnectionContext;
     }
 
-    /**
-     * @throws Exception
-     */
     @Test
-    public void testAddDeleteToTxChain() throws Exception{
+    public void testAddDeleteToTxChain() throws Exception {
         final InstanceIdentifier<Nodes> dummyII = InstanceIdentifier.create(Nodes.class);
         ((DeviceContextImpl) deviceContext).getTransactionChainManager().activateTransactionManager() ;
-        ((DeviceContextImpl) deviceContext).getTransactionChainManager().enableSubmit();
+        ((DeviceContextImpl) deviceContext).getTransactionChainManager().initialSubmitWriteTransaction();
         deviceContext.addDeleteToTxChain(LogicalDatastoreType.CONFIGURATION, dummyII);
-        verify(wTx).delete(eq(LogicalDatastoreType.CONFIGURATION), eq(dummyII));
+        verify(writeTx).delete(eq(LogicalDatastoreType.CONFIGURATION), eq(dummyII));
     }
 
-    /**
-     * @throws Exception
-     */
     @Test
     public void testSubmitTransaction() throws Exception {
         ((DeviceContextImpl) deviceContext).getTransactionChainManager().activateTransactionManager() ;
-        ((DeviceContextImpl) deviceContext).getTransactionChainManager().enableSubmit();
+        ((DeviceContextImpl) deviceContext).getTransactionChainManager().initialSubmitWriteTransaction();
         assertTrue(deviceContext.submitTransaction());
     }
 
@@ -346,10 +326,10 @@ public class DeviceContextImplTest {
     public void testProcessReply() {
         final Error mockedError = mock(Error.class);
         deviceContext.processReply(mockedError);
-        verify(messageSpy).spyMessage(any(Class.class), eq(MessageSpy.STATISTIC_GROUP.FROM_SWITCH_PUBLISHED_FAILURE));
+        verify(messageSpy).spyMessage(any(Class.class), eq(MessageSpy.StatisticsGroup.FROM_SWITCH_PUBLISHED_FAILURE));
         final OfHeader mockedOfHeader = mock(OfHeader.class);
         deviceContext.processReply(mockedOfHeader);
-        verify(messageSpy).spyMessage(any(Class.class), eq(MessageSpy.STATISTIC_GROUP.FROM_SWITCH_PUBLISHED_SUCCESS));
+        verify(messageSpy).spyMessage(any(Class.class), eq(MessageSpy.StatisticsGroup.FROM_SWITCH_PUBLISHED_SUCCESS));
     }
 
     @Test
@@ -358,23 +338,25 @@ public class DeviceContextImplTest {
 
         final Error mockedError = mock(Error.class);
         deviceContext.processReply(dummyXid, Lists.newArrayList(mockedError));
-        verify(messageSpy).spyMessage(any(Class.class), eq(MessageSpy.STATISTIC_GROUP.FROM_SWITCH_PUBLISHED_FAILURE));
+        verify(messageSpy).spyMessage(any(Class.class), eq(MessageSpy.StatisticsGroup.FROM_SWITCH_PUBLISHED_FAILURE));
 
         final MultipartReply mockedMultipartReply = mock(MultipartReply.class);
         deviceContext.processReply(dummyXid, Lists.newArrayList(mockedMultipartReply));
-        verify(messageSpy).spyMessage(any(Class.class), eq(MessageSpy.STATISTIC_GROUP.FROM_SWITCH_PUBLISHED_SUCCESS));
+        verify(messageSpy).spyMessage(any(Class.class), eq(MessageSpy.StatisticsGroup.FROM_SWITCH_PUBLISHED_SUCCESS));
     }
 
     @Test
     public void testProcessPacketInMessageFutureSuccess() {
         final PacketInMessage mockedPacketInMessage = mock(PacketInMessage.class);
         final NotificationPublishService mockedNotificationPublishService = mock(NotificationPublishService.class);
-        final ListenableFuture stringListenableFuture = Futures.immediateFuture(new String("dummy value"));
+        final ListenableFuture stringListenableFuture = Futures.immediateFuture("dummy value");
 
-        when(mockedNotificationPublishService.offerNotification(any(PacketReceived.class))).thenReturn(stringListenableFuture);
+        when(mockedNotificationPublishService.offerNotification(any(PacketReceived.class)))
+                .thenReturn(stringListenableFuture);
         deviceContext.setNotificationPublishService(mockedNotificationPublishService);
         deviceContext.processPacketInMessage(mockedPacketInMessage);
-        verify(messageSpy).spyMessage(any(Class.class), eq(MessageSpy.STATISTIC_GROUP.FROM_SWITCH_PUBLISHED_SUCCESS));
+        verify(messageSpy).spyMessage(any(Class.class), eq(MessageSpy.StatisticsGroup.FROM_SWITCH));
+        verify(messageSpy).spyMessage(any(Class.class), eq(MessageSpy.StatisticsGroup.FROM_SWITCH_PUBLISHED_SUCCESS));
     }
 
     @Test
@@ -386,7 +368,8 @@ public class DeviceContextImplTest {
         when(mockedNotificationPublishService.offerNotification(any(PacketReceived.class))).thenReturn(dummyFuture);
         deviceContext.setNotificationPublishService(mockedNotificationPublishService);
         deviceContext.processPacketInMessage(mockedPacketInMessage);
-        verify(messageSpy).spyMessage(any(Class.class), eq(MessageSpy.STATISTIC_GROUP.FROM_SWITCH_NOTIFICATION_REJECTED));
+        verify(messageSpy).spyMessage(any(Class.class),
+                eq(MessageSpy.StatisticsGroup.FROM_SWITCH_NOTIFICATION_REJECTED));
     }
 
     @Test
@@ -395,30 +378,6 @@ public class DeviceContextImplTest {
         assertEquals(translatorLibrary, pickedTranslatorLibrary);
     }
 
-    @Test
-    public void testShutdownConnection() {
-        final ConnectionAdapter mockedConnectionAdapter = mock(ConnectionAdapter.class);
-        final InetSocketAddress mockRemoteAddress = InetSocketAddress.createUnresolved("odl-unit.example.org",999);
-        when(mockedConnectionAdapter.getRemoteAddress()).thenReturn(mockRemoteAddress);
-        when(connectionContext.getConnectionAdapter()).thenReturn(mockedConnectionAdapter);
-
-        final NodeId dummyNodeId = new NodeId("dummyNodeId");
-        when(deviceInfo.getNodeId()).thenReturn(dummyNodeId);
-
-        final ConnectionContext mockedAuxiliaryConnectionContext = prepareConnectionContext();
-        deviceContext.addAuxiliaryConnectionContext(mockedAuxiliaryConnectionContext);
-        deviceContext.shutdownConnection();
-        verify(connectionContext).closeConnection(true);
-    }
-
-    @Test
-    public void testBarrierFieldSetGet() {
-        final Timeout mockedTimeout = mock(Timeout.class);
-        deviceContext.setCurrentBarrierTimeout(mockedTimeout);
-        final Timeout pickedBarrierTimeout = deviceContext.getBarrierTaskTimeout();
-        assertEquals(mockedTimeout, pickedBarrierTimeout);
-    }
-
     @Test
     public void testGetMessageSpy() {
         final MessageSpy pickedMessageSpy = deviceContext.getMessageSpy();
@@ -427,21 +386,15 @@ public class DeviceContextImplTest {
 
     @Test
     public void testOnPublished() {
-        final ConnectionContext auxiliaryConnectionContext = addDummyAuxiliaryConnectionContext();
-
-        final ConnectionAdapter mockedAuxConnectionAdapter = mock(ConnectionAdapter.class);
-        when(auxiliaryConnectionContext.getConnectionAdapter()).thenReturn(mockedAuxConnectionAdapter);
-
         final ConnectionAdapter mockedConnectionAdapter = mock(ConnectionAdapter.class);
         when(connectionContext.getConnectionAdapter()).thenReturn(mockedConnectionAdapter);
 
         deviceContext.onPublished();
-        verify(mockedAuxConnectionAdapter).setPacketInFiltering(eq(false));
         verify(mockedConnectionAdapter).setPacketInFiltering(eq(false));
     }
 
     @Test
-    public void testPortStatusMessage() throws Exception{
+    public void testPortStatusMessage() throws Exception {
         final PortStatusMessage mockedPortStatusMessage = mock(PortStatusMessage.class);
         final Class dummyClass = Class.class;
         when(mockedPortStatusMessage.getImplementedInterface()).thenReturn(dummyClass);
@@ -455,8 +408,7 @@ public class DeviceContextImplTest {
         when(mockedPortStatusMessage.getPortNo()).thenReturn(42L);
 
         deviceContextSpy.processPortStatusMessage(mockedPortStatusMessage);
-        verify(deviceContextSpy).writeToTransaction(Mockito.<LogicalDatastoreType>any(), Mockito.<InstanceIdentifier>any(), any());
-        verify(deviceContextSpy).submitTransaction();
+        verify(messageSpy).spyMessage(any(), any());
     }
 
     @Test
@@ -469,19 +421,15 @@ public class DeviceContextImplTest {
                 .setMatch(new MatchBuilder().build());
         final NotificationPublishService mockedNotificationPublishService = mock(NotificationPublishService.class);
 
-        Mockito.when(messageTranslatorFlowRemoved.translate(any(Object.class), any(DeviceInfo.class), any(Object.class)))
+        Mockito.when(messageTranslatorFlowRemoved
+                .translate(any(Object.class), any(DeviceInfo.class), any(Object.class)))
                 .thenReturn(flowRemovedMdsalBld.build());
 
         // insert flow+flowId into local registry
-        final FlowRegistryKey flowRegKey = FlowRegistryKeyFactory.create(deviceInfo.getVersion(), flowRemovedMdsalBld.build());
+        final FlowRegistryKey flowRegKey =
+                FlowRegistryKeyFactory.create(deviceInfo.getVersion(), flowRemovedMdsalBld.build());
         final FlowDescriptor flowDescriptor = FlowDescriptorFactory.create((short) 0, new FlowId("ut-ofp:f456"));
-        deviceContext.getDeviceFlowRegistry().store(flowRegKey, flowDescriptor);
-
-        // plug in lifecycleListener
-        final ItemLifecycleListener itemLifecycleListener = Mockito.mock(ItemLifecycleListener.class);
-        for (final ItemLifeCycleSource lifeCycleSource : deviceContext.getItemLifeCycleSourceRegistry().getLifeCycleSources()) {
-            lifeCycleSource.setItemLifecycleListener(itemLifecycleListener);
-        }
+        deviceContext.getDeviceFlowRegistry().storeDescriptor(flowRegKey, flowDescriptor);
 
         // prepare empty input message
         final FlowRemovedMessageBuilder flowRemovedBld = new FlowRemovedMessageBuilder();
@@ -492,24 +440,16 @@ public class DeviceContextImplTest {
                 .child(Table.class, new TableKey((short) 0))
                 .child(Flow.class, new FlowKey(new FlowId("ut-ofp:f456")));
 
-        Mockito.when(deviceManager.isFlowRemovedNotificationOn()).thenReturn(true);
-
         deviceContext.setNotificationPublishService(mockedNotificationPublishService);
         deviceContext.processFlowRemovedMessage(flowRemovedBld.build());
-
-        Mockito.verify(itemLifecycleListener).onRemoved(flowToBeRemovedPath);
-
-        Mockito.when(deviceManager.isFlowRemovedNotificationOn()).thenReturn(false);
-        deviceContext.processFlowRemovedMessage(flowRemovedBld.build());
-
-        Mockito.verify(mockedNotificationPublishService).offerNotification(Matchers.any(Notification.class));
     }
 
     @Test
     public void testProcessExperimenterMessage() {
         final ConvertorMessageFromOFJava mockedMessageConverter = mock(ConvertorMessageFromOFJava.class);
         final ExtensionConverterProvider mockedExtensionConverterProvider = mock(ExtensionConverterProvider.class);
-        when(mockedExtensionConverterProvider.getMessageConverter(any(MessageTypeKey.class))).thenReturn(mockedMessageConverter);
+        when(mockedExtensionConverterProvider.getMessageConverter(any(MessageTypeKey.class)))
+                .thenReturn(mockedMessageConverter);
 
         final ExperimenterDataOfChoice mockedExperimenterDataOfChoice = mock(ExperimenterDataOfChoice.class);
         final ExperimenterMessage experimenterMessage = new ExperimenterMessageBuilder()
@@ -525,25 +465,18 @@ public class DeviceContextImplTest {
     }
 
     @Test
-    public void testOnDeviceDisconnected() throws Exception {
-        final DeviceTerminationPhaseHandler deviceContextClosedHandler = mock(DeviceTerminationPhaseHandler.class);
-
-        assertEquals(0, deviceContext.getDeviceFlowRegistry().getAllFlowDescriptors().size());
-        assertEquals(0, deviceContext.getDeviceGroupRegistry().getAllGroupIds().size());
-        assertEquals(0, deviceContext.getDeviceMeterRegistry().getAllMeterIds().size());
-
+    public void instantiateServiceInstance() throws Exception {
+        deviceContext.instantiateServiceInstance();
     }
 
     @Test
-    public void replaceConnectionContext() throws Exception {
-
-        final ConnectionContext connectionContext1 = mock(ConnectionContext.class);
-        Assert.assertEquals(deviceContext.getPrimaryConnectionContext(), connectionContext);
-        Mockito.when(connectionContext1.getConnectionAdapter()).thenReturn(connectionAdapter);
-        Mockito.doNothing().when(connectionAdapter).setPacketInFiltering(Mockito.anyBoolean());
-        deviceContext.replaceConnectionContext(connectionContext1);
-        Assert.assertEquals(deviceContext.getPrimaryConnectionContext(), connectionContext1);
+    public void close() throws Exception {
+        deviceContext.close();
+    }
 
+    @Test
+    public void closeServiceInstance() throws Exception {
+        deviceContext.closeServiceInstance();
     }
 
 }