*/
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.Future;
+
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.ModelDrivenSwitch;
-import org.opendaylight.openflowplugin.openflow.md.OFConstants;
-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.QueueProcessor;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.*;
+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.common.types.rev130731.ControllerRole;
+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.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;
-import java.util.*;
-import java.util.Map.Entry;
-import java.util.concurrent.Future;
-
/**
* test for {@link MessageDispatchServiceImpl}
*/
/**
* Test barrier message for null cookie
- *
+ *
* @throws Exception
*/
@Test
SwitchConnectionDistinguisher cookie = conductor.getAuxiliaryKey();
BarrierInputBuilder barrierMsg = new BarrierInputBuilder();
session.getMessageDispatchService().barrier(barrierMsg.build(), cookie);
- Assert.assertEquals(MessageType.BARRIER, session.getPrimaryConductor().getMessageType());
+ 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() {
+ 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
- *
+ *
* @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
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
// 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);
- Future<RpcResult<Void>> resultFuture = session.getMessageDispatchService().packetOut(null, null);
+ 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));
+ 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));
}
}
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>();
+ map = new HashMap<>();
messageService = new MessageDispatchServiceImpl(this);
+ sessionKey = new SwitchSessionKeyOF();
+ sessionKey.setDatapathId(new BigInteger("0"));
}
@Override
}
@Override
- public ConnectionConductor getAuxiliaryConductor(SwitchConnectionDistinguisher auxiliaryKey) {
+ public ConnectionConductor getAuxiliaryConductor(
+ SwitchConnectionDistinguisher auxiliaryKey) {
return map.get(auxiliaryKey);
}
}
@Override
- public void addAuxiliaryConductor(SwitchConnectionDistinguisher auxiliaryKey, ConnectionConductor conductorArg) {
+ 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);
}
@Override
public SwitchSessionKeyOF getSessionKey() {
- // TODO Auto-generated method stub
- return null;
+ return sessionKey;
}
@Override
}
/**
- * @param seed the seed to set
+ * @param seed
+ * the seed to set
*/
public void setSeed(int seed) {
this.seed = seed;
}
+
+ @Override
+ public NotificationEnqueuer getNotificationEnqueuer() {
+ return conductor;
+ }
+
+ @Override
+ public ControllerRole getRoleOnDevice() {
+ return null;
+ }
+
+ @Override
+ public void setRoleOnDevice(ControllerRole roleOnDevice) {
+ // NOOP
+ }
}
-class MockConnectionConductor implements ConnectionConductor {
+class MockConnectionConductor implements ConnectionConductor,
+ NotificationEnqueuer {
private int conductorNum;
private MockConnectionAdapter adapter;
}
@Override
- public void setQueueProcessor(QueueProcessor<OfHeader, DataObject> queueKeeper) {
+ public void setQueueProcessor(
+ QueueProcessor<OfHeader, DataObject> queueKeeper) {
// NOOP
}
public void setId(int conductorId) {
// NOOP
}
+
+ @Override
+ public void enqueueNotification(NotificationQueueWrapper notification) {
+ // NOOP
+ }
}
enum MessageType {
}
@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;
}
}
@Override
- public Future<RpcResult<RoleRequestOutput>> roleRequest(RoleRequestInput input) {
+ public Future<RpcResult<RoleRequestOutput>> roleRequest(
+ RoleRequestInput input) {
// TODO Auto-generated method stub
return null;
}
}
/**
- * @param messageType the messageType to set
+ * @param messageType
+ * the messageType to set
*/
public void setMessageType(MessageType messageType) {
this.messageType = messageType;
}
@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
+
+ }
}