*/
package org.opendaylight.openflowplugin.openflow.md.core.session;
+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 org.junit.Assert;
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.ModelDrivenSwitch;
-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.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.ModelDrivenSwitch;
+import org.opendaylight.openflowplugin.api.OFConstants;
+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.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.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.PortGrouping;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.PortModInput;
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
public void testBarrierMessageForPrimary() throws Exception {
MockConnectionConductor conductor = new MockConnectionConductor(1);
- SwitchConnectionDistinguisher cookie = conductor.getAuxiliaryKey();
+ 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 get async output with null cookie
+ */
+ @Test
+ 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
*
@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));
}
}
// TODO Auto-generated method stub
return null;
}
-
+
@Override
public IMessageDispatchService getMessageDispatchService() {
// TODO Auto-generated method stub
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;
}
@Override
- public void setQueueKeeper(QueueKeeper<OfHeader, DataObject> queueKeeper) {
+ public void setQueueProcessor(QueueProcessor<OfHeader, DataObject> queueKeeper) {
// NOOP
}
public void setErrorHandler(ErrorHandler errorHandler) {
// NOOP
}
+
+ @Override
+ public void setId(int conductorId) {
+ // NOOP
+ }
+
+ @Override
+ public void enqueueNotification(NotificationQueueWrapper notification) {
+ // NOOP
+ }
}
enum MessageType {
}
/**
- * @param messageType
- * the messageType to set
+ * @param messageType the messageType to set
*/
public void setMessageType(MessageType messageType) {
this.messageType = messageType;
@Override
public void fireConnectionReadyNotification() {
- connectionReadyListener.onConnectionReady();
+ connectionReadyListener.onConnectionReady();
}
@Override
return null;
}
+ /* (non-Javadoc)
+ * @see org.opendaylight.openflowjava.protocol.api.connection.ConnectionAdapter#getRemoteAddress()
+ */
+ @Override
+ public InetSocketAddress getRemoteAddress() {
+ // TODO Auto-generated method stub
+ return null;
+ }
}