private ConnectionContext prepareConnectionContext() {
   ConnectionContext mockedConnectionContext = mock(ConnectionContext.class);
   FeaturesReply mockedFeaturesReply = mock(FeaturesReply.class);
   when(mockedFeaturesReply.getAuxiliaryId()).thenReturn(DUMMY_AUXILIARY_ID);
   when(mockedConnectionContext.getFeatures()).thenReturn(mockedFeaturesReply);
   return mockedConnectionContext;
 }
  @Test
  public void testOnPublished() {
    final ConnectionContext auxiliaryConnectionContext = addDummyAuxiliaryConnectionContext();

    ConnectionAdapter mockedAuxConnectionAdapter = mock(ConnectionAdapter.class);
    when(auxiliaryConnectionContext.getConnectionAdapter()).thenReturn(mockedAuxConnectionAdapter);

    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 registerServiceTest() {

    final RpcContext mockedRpcContext = mock(RpcContext.class);
    final DeviceContext mockedDeviceContext = mock(DeviceContext.class);
    final ConnectionContext mockedConnectionContext = mock(ConnectionContext.class);

    final FeaturesReply mockedFeatures = mock(FeaturesReply.class);
    when(mockedConnectionContext.getFeatures()).thenReturn(mockedFeatures);

    final BigInteger mockedDataPathId = mock(BigInteger.class);
    when(mockedFeatures.getDatapathId()).thenReturn(mockedDataPathId);

    when(mockedDeviceContext.getPrimaryConnectionContext()).thenReturn(mockedConnectionContext);
    MdSalRegistratorUtils.registerServices(mockedRpcContext, mockedDeviceContext);
    verify(mockedRpcContext, times(NUMBER_OF_RPC_SERVICE_REGISTRATION))
        .registerRpcServiceImplementation(any(RpcService.class.getClass()), any(RpcService.class));
  }
  @Test
  public void testClose() {
    ConnectionAdapter mockedConnectionAdapter = mock(ConnectionAdapter.class);
    InetSocketAddress mockRemoteAddress = mock(InetSocketAddress.class);
    when(mockedConnectionAdapter.getRemoteAddress()).thenReturn(mockRemoteAddress);
    when(connectionContext.getConnectionAdapter()).thenReturn(mockedConnectionAdapter);

    NodeId dummyNodeId = new NodeId("dummyNodeId");
    when(deviceState.getNodeId()).thenReturn(dummyNodeId);

    ConnectionContext mockedAuxiliaryConnectionContext = prepareConnectionContext();
    deviceContext.addAuxiliaryConenctionContext(mockedAuxiliaryConnectionContext);
    DeviceContextClosedHandler mockedDeviceContextClosedHandler =
        mock(DeviceContextClosedHandler.class);
    deviceContext.addDeviceContextClosedHandler(mockedDeviceContextClosedHandler);
    deviceContext.close();
    verify(connectionContext).closeConnection(eq(false));
    verify(deviceState).setValid(eq(false));
    verify(txChainManager).close();
    verify(mockedAuxiliaryConnectionContext).closeConnection(eq(false));
  }
  @Before
  public void setUp() {
    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);
    Mockito.when(deviceState.getNodeInstanceIdentifier()).thenReturn(nodeKeyIdent);

    final SettableFuture<RpcResult<GetAsyncReply>> settableFuture = SettableFuture.create();
    final SettableFuture<RpcResult<MultipartReply>> settableFutureMultiReply =
        SettableFuture.create();
    Mockito.when(requestContext.getFuture()).thenReturn(settableFuture);
    Mockito.doAnswer(
            new Answer<Object>() {
              @SuppressWarnings("unchecked")
              @Override
              public Object answer(final InvocationOnMock invocation) {
                settableFuture.set((RpcResult<GetAsyncReply>) invocation.getArguments()[0]);
                return null;
              }
            })
        .when(requestContext)
        .setResult(any(RpcResult.class));

    Mockito.when(requestContextMultiReply.getFuture()).thenReturn(settableFutureMultiReply);
    Mockito.doAnswer(
            new Answer<Object>() {
              @SuppressWarnings("unchecked")
              @Override
              public Object answer(final InvocationOnMock invocation) {
                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(connectionContext.getOutboundQueueProvider()).thenReturn(outboundQueueProvider);
    Mockito.when(connectionContext.getConnectionAdapter()).thenReturn(connectionAdapter);

    Mockito.when(deviceState.getVersion()).thenReturn(OFConstants.OFP_VERSION_1_3);
    Mockito.when(
            messageTranslatorPacketReceived.translate(
                any(Object.class), any(DeviceContext.class), any(Object.class)))
        .thenReturn(mock(PacketReceived.class));
    Mockito.when(
            messageTranslatorFlowCapableNodeConnector.translate(
                any(Object.class), any(DeviceContext.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);

    deviceContext =
        new DeviceContextImpl(
            connectionContext,
            deviceState,
            dataBroker,
            timer,
            messageIntelligenceAgency,
            outboundQueueProvider,
            translatorLibrary,
            txChainManager);

    xid = new Xid(atomicLong.incrementAndGet());
    xidMulti = new Xid(atomicLong.incrementAndGet());
  }