bug 2446 - High priority (control) queue stop reading from channel if is full
[openflowplugin.git] / openflowplugin / src / test / java / org / opendaylight / openflowplugin / openflow / md / core / session / MessageDispatchServiceImplTest.java
index da49bdd431da744a09ed5eb27d14dc115f4ef397..09a532ababb8337b5ee5e259acd6782594255c1d 100644 (file)
@@ -1,59 +1,87 @@
+/**
+ * Copyright IBM Corporation, 2013.  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.openflowplugin.openflow.md.core.session;
 
 import java.math.BigInteger;
+import java.net.InetSocketAddress;
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
+import java.util.concurrent.ExecutionException;
 import java.util.concurrent.Future;
 
-import junit.framework.Assert;
-
-import org.junit.After;
+import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
 import org.opendaylight.openflowjava.protocol.api.connection.ConnectionAdapter;
 import org.opendaylight.openflowjava.protocol.api.connection.ConnectionReadyListener;
-import org.opendaylight.openflowplugin.openflow.md.core.ConnectionConductor;
-import org.opendaylight.openflowplugin.openflow.md.core.ErrorHandler;
-import org.opendaylight.openflowplugin.openflow.md.core.SwitchConnectionDistinguisher;
-import org.opendaylight.openflowplugin.openflow.md.queue.QueueKeeper;
+import org.opendaylight.openflowplugin.api.OFConstants;
+import org.opendaylight.openflowplugin.api.openflow.md.ModelDrivenSwitch;
+import org.opendaylight.openflowplugin.api.openflow.md.core.ConnectionConductor;
+import org.opendaylight.openflowplugin.api.openflow.md.core.ErrorHandler;
+import org.opendaylight.openflowplugin.api.openflow.md.core.NotificationEnqueuer;
+import org.opendaylight.openflowplugin.api.openflow.md.core.NotificationQueueWrapper;
+import org.opendaylight.openflowplugin.api.openflow.md.core.SwitchConnectionDistinguisher;
+import org.opendaylight.openflowplugin.api.openflow.md.core.session.IMessageDispatchService;
+import org.opendaylight.openflowplugin.api.openflow.md.core.session.SessionContext;
+import org.opendaylight.openflowplugin.api.openflow.md.core.session.SwitchSessionKeyOF;
+import org.opendaylight.openflowplugin.api.openflow.md.queue.QueueProcessor;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.BarrierInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.BarrierInputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.BarrierOutput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.EchoInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.EchoOutput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.EchoReplyInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.ExperimenterInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.ExperimenterInputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.FlowModInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GetAsyncInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GetAsyncInputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GetAsyncOutput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GetConfigInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GetConfigInputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GetConfigOutput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GetFeaturesInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GetFeaturesInputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GetFeaturesOutput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GetQueueConfigInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GetQueueConfigInputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GetQueueConfigOutput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GroupModInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.HelloInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MeterModInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartRequestInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartRequestInputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.OfHeader;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.OpenflowProtocolListener;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.PacketOutInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.PacketOutInputBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.Port;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.PortGrouping;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.PortModInput;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.PortStatus;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.RoleRequestInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.RoleRequestInputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.RoleRequestOutput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.SetAsyncInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.SetConfigInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.TableModInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.TableModInputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.system.rev130927.SystemNotificationsListener;
+import org.opendaylight.yangtools.concepts.CompositeObjectRegistration;
 import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.common.RpcError;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 
+/**
+ * test for {@link MessageDispatchServiceImpl}
+ */
 public class MessageDispatchServiceImplTest {
 
     MockSessionContext session;
@@ -68,38 +96,147 @@ public class MessageDispatchServiceImplTest {
     }
 
     /**
-     * @throws java.lang.Exception
+     * Test barrier message for null cookie
+     * 
+     * @throws Exception
      */
-    @After
-    public void tearDown() throws Exception {
+    @Test
+    public void testBarrierMessageForPrimary() throws Exception {
+        MockConnectionConductor conductor = new MockConnectionConductor(1);
+        SwitchConnectionDistinguisher cookie = conductor.getAuxiliaryKey();
+        BarrierInputBuilder barrierMsg = new BarrierInputBuilder();
+        session.getMessageDispatchService().barrier(barrierMsg.build(), cookie);
+        Assert.assertEquals(MessageType.BARRIER, session.getPrimaryConductor()
+                .getMessageType());
+    }
+
+    /**
+     * Test experimenter message for null cookie
+     */
+    @Test
+    public void testExperimenter() {
+        MockConnectionConductor conductor = new MockConnectionConductor(1);
+        SwitchConnectionDistinguisher cookie = conductor.getAuxiliaryKey();
+        ExperimenterInputBuilder experimenterInputBuilder = new ExperimenterInputBuilder();
+        session.getMessageDispatchService().experimenter(
+                experimenterInputBuilder.build(), cookie);
+        Assert.assertEquals(MessageType.NONE, session.getPrimaryConductor()
+                .getMessageType());
+    }
 
+    /**
+     * Test get async input with null cookie
+     */
+    @Test
+    public void testGetAsync() throws ExecutionException, InterruptedException {
+        MockConnectionConductor conductor = new MockConnectionConductor(1);
+        SwitchConnectionDistinguisher cookie = conductor.getAuxiliaryKey();
+        GetAsyncInputBuilder getAsyncInputBuilder = new GetAsyncInputBuilder();
+        session.getMessageDispatchService().getAsync(
+                getAsyncInputBuilder.build(), cookie);
+        Assert.assertEquals(MessageType.NONE, session.getPrimaryConductor()
+                .getMessageType());
     }
 
     /**
-     * Test barrier message for null cookie
-     *
-     * @throws Exception
+     * Test get async output with null cookie
      */
     @Test
-    public void testBarrierMessageForPrimary() throws Exception {
-        session.getMessageDispatchService().barrier(null, null);
-        Assert.assertEquals(MessageType.BARRIER, session.getPrimaryConductor().getMessageType());
+    public void testGetConfig() {
+        MockConnectionConductor conductor = new MockConnectionConductor(1);
+        SwitchConnectionDistinguisher cookie = conductor.getAuxiliaryKey();
+        GetConfigInputBuilder getConfigInputBuilder = new GetConfigInputBuilder();
+        session.getMessageDispatchService().getConfig(
+                getConfigInputBuilder.build(), cookie);
+        Assert.assertEquals(MessageType.NONE, session.getPrimaryConductor()
+                .getMessageType());
+    }
+
+    /**
+     * Test get features with null cookie
+     */
+    @Test
+    public void testGetFeatures() {
+        MockConnectionConductor conductor = new MockConnectionConductor(1);
+        SwitchConnectionDistinguisher cookie = conductor.getAuxiliaryKey();
+        GetFeaturesInputBuilder getFeaturesInputBuilder = new GetFeaturesInputBuilder();
+        session.getMessageDispatchService().getFeatures(
+                getFeaturesInputBuilder.build(), cookie);
+        Assert.assertEquals(MessageType.NONE, session.getPrimaryConductor()
+                .getMessageType());
+    }
+
+    /**
+     * Test get queue config with null cookie
+     */
+    @Test
+    public void testGetQueueConfig() {
+        MockConnectionConductor conductor = new MockConnectionConductor(1);
+        SwitchConnectionDistinguisher cookie = conductor.getAuxiliaryKey();
+        GetQueueConfigInputBuilder getQueueConfigInputBuilder = new GetQueueConfigInputBuilder();
+        session.getMessageDispatchService().getQueueConfig(
+                getQueueConfigInputBuilder.build(), cookie);
+        Assert.assertEquals(MessageType.NONE, session.getPrimaryConductor()
+                .getMessageType());
+    }
+
+    /**
+     * Test multipart request with null cookie
+     */
+    @Test
+    public void testGetMultipart() {
+        MockConnectionConductor conductor = new MockConnectionConductor(1);
+        SwitchConnectionDistinguisher cookie = conductor.getAuxiliaryKey();
+        MultipartRequestInputBuilder multipartRequestInputBuilder = new MultipartRequestInputBuilder();
+        session.getMessageDispatchService().multipartRequest(
+                multipartRequestInputBuilder.build(), cookie);
+        Assert.assertEquals(MessageType.NONE, session.getPrimaryConductor()
+                .getMessageType());
+    }
+
+    /**
+     * Test role request with null cookie
+     */
+    @Test
+    public void testRoleRequest() {
+        MockConnectionConductor conductor = new MockConnectionConductor(1);
+        SwitchConnectionDistinguisher cookie = conductor.getAuxiliaryKey();
+        RoleRequestInputBuilder roleRequestInputBuilder = new RoleRequestInputBuilder();
+        session.getMessageDispatchService().roleRequest(
+                roleRequestInputBuilder.build(), cookie);
+        Assert.assertEquals(MessageType.NONE, session.getPrimaryConductor()
+                .getMessageType());
+    }
+
+    /**
+     * Test table mod with null cookie
+     */
+    @Test
+    public void testTableMod() {
+        MockConnectionConductor conductor = new MockConnectionConductor(1);
+        SwitchConnectionDistinguisher cookie = conductor.getAuxiliaryKey();
+        TableModInputBuilder tableModInputBuilder = new TableModInputBuilder();
+        session.getMessageDispatchService().tableMod(
+                tableModInputBuilder.build(), cookie);
+        Assert.assertEquals(MessageType.TABLEMOD, session.getPrimaryConductor()
+                .getMessageType());
     }
 
     /**
      * Test packet out message for primary connection
-     *
+     * 
      * @throws Exception
      */
     @Test
     public void testPacketOutMessageForPrimary() throws Exception {
         session.getMessageDispatchService().packetOut(null, null);
-        Assert.assertEquals(MessageType.PACKETOUT, session.getPrimaryConductor().getMessageType());
+        Assert.assertEquals(MessageType.PACKETOUT, session
+                .getPrimaryConductor().getMessageType());
     }
 
     /**
      * Test packet out message for auxiliary connection
-     *
+     * 
      * @throws Exception
      */
     @Test
@@ -108,14 +245,16 @@ public class MessageDispatchServiceImplTest {
         SwitchConnectionDistinguisher cookie = conductor.getAuxiliaryKey();
         session.addAuxiliaryConductor(cookie, conductor);
         session.getMessageDispatchService().packetOut(null, cookie);
-        Assert.assertEquals(MessageType.NONE, session.getPrimaryConductor().getMessageType());
-        conductor = (MockConnectionConductor) session.getAuxiliaryConductor(cookie);
+        Assert.assertEquals(MessageType.NONE, session.getPrimaryConductor()
+                .getMessageType());
+        conductor = (MockConnectionConductor) session
+                .getAuxiliaryConductor(cookie);
         Assert.assertEquals(MessageType.PACKETOUT, conductor.getMessageType());
     }
 
     /**
      * Test packet out message when multiple auxiliary connection exist
-     *
+     * 
      * @throws Exception
      */
     @Test
@@ -133,32 +272,46 @@ public class MessageDispatchServiceImplTest {
         // send message
         session.getMessageDispatchService().packetOut(builder.build(), cookie2);
 
-        Assert.assertEquals(MessageType.NONE, session.getPrimaryConductor().getMessageType());
+        Assert.assertEquals(MessageType.NONE, session.getPrimaryConductor()
+                .getMessageType());
 
-        conductor3 = (MockConnectionConductor) session.getAuxiliaryConductor(cookie3);
+        conductor3 = (MockConnectionConductor) session
+                .getAuxiliaryConductor(cookie3);
         Assert.assertEquals(MessageType.NONE, conductor3.getMessageType());
 
-        conductor2 = (MockConnectionConductor) session.getAuxiliaryConductor(cookie2);
+        conductor2 = (MockConnectionConductor) session
+                .getAuxiliaryConductor(cookie2);
         Assert.assertEquals(MessageType.PACKETOUT, conductor2.getMessageType());
 
-        conductor1 = (MockConnectionConductor) session.getAuxiliaryConductor(cookie1);
+        conductor1 = (MockConnectionConductor) session
+                .getAuxiliaryConductor(cookie1);
         Assert.assertEquals(MessageType.NONE, conductor1.getMessageType());
 
     }
 
     /**
      * Test for invalid session
-     *
+     * 
      * @throws Exception
      */
     @Test
     public void testInvalidSession() throws Exception {
         session.setValid(false);
-        try {
-            session.getMessageDispatchService().packetOut(null, null);
-            Assert.assertTrue(false);
-        } catch (IllegalArgumentException ex) {
-            Assert.assertTrue(true);
+        Future<RpcResult<Void>> resultFuture = session
+                .getMessageDispatchService().packetOut(null, null);
+        if (resultFuture.isDone()) {
+            RpcResult<Void> rpcResult = resultFuture.get();
+            Assert.assertTrue(!rpcResult.getErrors().isEmpty());
+
+            Iterator<RpcError> it = rpcResult.getErrors().iterator();
+            RpcError rpcError = it.next();
+
+            Assert.assertTrue(rpcError.getApplicationTag().equals(
+                    OFConstants.APPLICATION_TAG));
+            Assert.assertTrue(rpcError.getTag().equals(
+                    OFConstants.ERROR_TAG_TIMEOUT));
+            Assert.assertTrue(rpcError.getErrorType().equals(
+                    RpcError.ErrorType.TRANSPORT));
         }
     }
 
@@ -169,11 +322,16 @@ class MockSessionContext implements SessionContext {
     private Map<SwitchConnectionDistinguisher, ConnectionConductor> map;
     private IMessageDispatchService messageService;
     private boolean isValid = true;
+    private CompositeObjectRegistration<ModelDrivenSwitch> registration;
+    private int seed;
+    private SwitchSessionKeyOF sessionKey;
 
     MockSessionContext(int conductorNum) {
         conductor = new MockConnectionConductor(conductorNum);
         map = new HashMap<SwitchConnectionDistinguisher, ConnectionConductor>();
         messageService = new MessageDispatchServiceImpl(this);
+        sessionKey = new SwitchSessionKeyOF();
+        sessionKey.setDatapathId(new BigInteger("0"));
     }
 
     @Override
@@ -189,7 +347,8 @@ class MockSessionContext implements SessionContext {
     }
 
     @Override
-    public ConnectionConductor getAuxiliaryConductor(SwitchConnectionDistinguisher auxiliaryKey) {
+    public ConnectionConductor getAuxiliaryConductor(
+            SwitchConnectionDistinguisher auxiliaryKey) {
 
         return map.get(auxiliaryKey);
     }
@@ -201,12 +360,15 @@ class MockSessionContext implements SessionContext {
     }
 
     @Override
-    public void addAuxiliaryConductor(SwitchConnectionDistinguisher auxiliaryKey, ConnectionConductor conductor) {
-        map.put(auxiliaryKey, conductor);
+    public void addAuxiliaryConductor(
+            SwitchConnectionDistinguisher auxiliaryKey,
+            ConnectionConductor conductorArg) {
+        map.put(auxiliaryKey, conductorArg);
     }
 
     @Override
-    public ConnectionConductor removeAuxiliaryConductor(SwitchConnectionDistinguisher connectionCookie) {
+    public ConnectionConductor removeAuxiliaryConductor(
+            SwitchConnectionDistinguisher connectionCookie) {
         return map.remove(connectionCookie);
     }
 
@@ -222,9 +384,8 @@ class MockSessionContext implements SessionContext {
     }
 
     @Override
-    public SwitchConnectionDistinguisher getSessionKey() {
-        // TODO Auto-generated method stub
-        return null;
+    public SwitchSessionKeyOF getSessionKey() {
+        return sessionKey;
     }
 
     @Override
@@ -240,7 +401,7 @@ class MockSessionContext implements SessionContext {
     }
 
     @Override
-    public Map<Long, Port> getPhysicalPorts() {
+    public Map<Long, PortGrouping> getPhysicalPorts() {
         // TODO Auto-generated method stub
         return null;
     }
@@ -252,7 +413,7 @@ class MockSessionContext implements SessionContext {
     }
 
     @Override
-    public Port getPhysicalPort(Long portNumber) {
+    public PortGrouping getPhysicalPort(Long portNumber) {
         // TODO Auto-generated method stub
         return null;
     }
@@ -270,26 +431,55 @@ class MockSessionContext implements SessionContext {
     }
 
     @Override
-    public boolean isPortEnabled(Port port) {
+    public boolean isPortEnabled(PortGrouping port) {
         // TODO Auto-generated method stub
         return false;
     }
 
     @Override
-    public List<Port> getEnabledPorts() {
+    public List<PortGrouping> getEnabledPorts() {
         // TODO Auto-generated method stub
         return null;
     }
 
     @Override
-    public void processPortStatusMsg(PortStatus arg0) {
+    public Map<Long, Boolean> getPortsBandwidth() {
         // TODO Auto-generated method stub
+        return null;
+    }
 
+    @Override
+    public CompositeObjectRegistration<ModelDrivenSwitch> getProviderRegistration() {
+        return registration;
+    }
+
+    @Override
+    public void setProviderRegistration(
+            CompositeObjectRegistration<ModelDrivenSwitch> registration) {
+        this.registration = registration;
+    }
+
+    @Override
+    public int getSeed() {
+        return seed;
     }
 
+    /**
+     * @param seed
+     *            the seed to set
+     */
+    public void setSeed(int seed) {
+        this.seed = seed;
+    }
+
+    @Override
+    public NotificationEnqueuer getNotificationEnqueuer() {
+        return conductor;
+    }
 }
 
-class MockConnectionConductor implements ConnectionConductor {
+class MockConnectionConductor implements ConnectionConductor,
+        NotificationEnqueuer {
 
     private int conductorNum;
     private MockConnectionAdapter adapter;
@@ -351,9 +541,8 @@ class MockConnectionConductor implements ConnectionConductor {
     public SwitchConnectionDistinguisher getAuxiliaryKey() {
         if (0 != conductorNum) {
             SwitchConnectionCookieOFImpl key = new SwitchConnectionCookieOFImpl();
-            key.setDatapathId(BigInteger.valueOf(10L));
             key.setAuxiliaryId((short) conductorNum);
-            key.initId();
+            key.init(42);
             return key;
         }
         return null;
@@ -370,12 +559,24 @@ class MockConnectionConductor implements ConnectionConductor {
     }
 
     @Override
-    public void setQueueKeeper(QueueKeeper<OfHeader, DataObject> queueKeeper) {
+    public void setQueueProcessor(
+            QueueProcessor<OfHeader, DataObject> queueKeeper) {
         // NOOP
     }
 
     @Override
     public void setErrorHandler(ErrorHandler errorHandler) {
+        // NOOP
+    }
+
+    @Override
+    public void setId(int conductorId) {
+        // NOOP
+    }
+
+    @Override
+    public void enqueueNotification(NotificationQueueWrapper notification) {
+        // NOOP
     }
 }
 
@@ -435,13 +636,15 @@ class MockConnectionAdapter implements ConnectionAdapter {
     }
 
     @Override
-    public Future<RpcResult<GetFeaturesOutput>> getFeatures(GetFeaturesInput input) {
+    public Future<RpcResult<GetFeaturesOutput>> getFeatures(
+            GetFeaturesInput input) {
         // TODO Auto-generated method stub
         return null;
     }
 
     @Override
-    public Future<RpcResult<GetQueueConfigOutput>> getQueueConfig(GetQueueConfigInput input) {
+    public Future<RpcResult<GetQueueConfigOutput>> getQueueConfig(
+            GetQueueConfigInput input) {
         // TODO Auto-generated method stub
         return null;
     }
@@ -477,7 +680,8 @@ class MockConnectionAdapter implements ConnectionAdapter {
     }
 
     @Override
-    public Future<RpcResult<RoleRequestOutput>> roleRequest(RoleRequestInput input) {
+    public Future<RpcResult<RoleRequestOutput>> roleRequest(
+            RoleRequestInput input) {
         // TODO Auto-generated method stub
         return null;
     }
@@ -547,7 +751,7 @@ class MockConnectionAdapter implements ConnectionAdapter {
 
     @Override
     public void fireConnectionReadyNotification() {
-            connectionReadyListener.onConnectionReady();
+        connectionReadyListener.onConnectionReady();
     }
 
     @Override
@@ -557,10 +761,33 @@ class MockConnectionAdapter implements ConnectionAdapter {
     }
 
     @Override
-    public Future<RpcResult<Void>> multipartRequest(
-            MultipartRequestInput input) {
+    public Future<RpcResult<Void>> multipartRequest(MultipartRequestInput input) {
         // TODO Auto-generated method stub
         return null;
     }
 
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * org.opendaylight.openflowjava.protocol.api.connection.ConnectionAdapter
+     * #getRemoteAddress()
+     */
+    @Override
+    public InetSocketAddress getRemoteAddress() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public boolean isAutoRead() {
+        // TODO Auto-generated method stub
+        return false;
+    }
+
+    @Override
+    public void setAutoRead(boolean arg0) {
+        // TODO Auto-generated method stub
+
+    }
 }