diff options
author | Ashlee Young <ashlee@onosfw.com> | 2015-09-09 22:15:21 -0700 |
---|---|---|
committer | Ashlee Young <ashlee@onosfw.com> | 2015-09-09 22:15:21 -0700 |
commit | 13d05bc8458758ee39cb829098241e89616717ee (patch) | |
tree | 22a4d1ce65f15952f07a3df5af4b462b4697cb3a /framework/src/onos/providers/openflow/group/src/test/java/org/onosproject/provider/of/group/impl/OpenFlowGroupProviderTest.java | |
parent | 6139282e1e93c2322076de4b91b1c85d0bc4a8b3 (diff) |
ONOS checkin based on commit tag e796610b1f721d02f9b0e213cf6f7790c10ecd60
Change-Id: Ife8810491034fe7becdba75dda20de4267bd15cd
Diffstat (limited to 'framework/src/onos/providers/openflow/group/src/test/java/org/onosproject/provider/of/group/impl/OpenFlowGroupProviderTest.java')
-rw-r--r-- | framework/src/onos/providers/openflow/group/src/test/java/org/onosproject/provider/of/group/impl/OpenFlowGroupProviderTest.java | 397 |
1 files changed, 397 insertions, 0 deletions
diff --git a/framework/src/onos/providers/openflow/group/src/test/java/org/onosproject/provider/of/group/impl/OpenFlowGroupProviderTest.java b/framework/src/onos/providers/openflow/group/src/test/java/org/onosproject/provider/of/group/impl/OpenFlowGroupProviderTest.java new file mode 100644 index 00000000..d66ba090 --- /dev/null +++ b/framework/src/onos/providers/openflow/group/src/test/java/org/onosproject/provider/of/group/impl/OpenFlowGroupProviderTest.java @@ -0,0 +1,397 @@ +package org.onosproject.provider.of.group.impl; + +import com.google.common.collect.Lists; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.onosproject.core.DefaultGroupId; +import org.onosproject.core.GroupId; +import org.onosproject.net.Device; +import org.onosproject.net.DeviceId; +import org.onosproject.net.PortNumber; +import org.onosproject.net.flow.DefaultTrafficTreatment; +import org.onosproject.net.flow.TrafficTreatment; +import org.onosproject.net.group.DefaultGroupBucket; +import org.onosproject.net.group.Group; +import org.onosproject.net.group.GroupBucket; +import org.onosproject.net.group.GroupBuckets; +import org.onosproject.net.group.GroupDescription; +import org.onosproject.net.group.GroupOperation; +import org.onosproject.net.group.GroupOperations; +import org.onosproject.net.group.GroupProvider; +import org.onosproject.net.group.GroupProviderRegistry; +import org.onosproject.net.group.GroupProviderService; +import org.onosproject.net.provider.AbstractProviderService; +import org.onosproject.net.provider.ProviderId; +import org.onosproject.openflow.controller.Dpid; +import org.onosproject.openflow.controller.OpenFlowController; +import org.onosproject.openflow.controller.OpenFlowEventListener; +import org.onosproject.openflow.controller.OpenFlowSwitch; +import org.onosproject.openflow.controller.OpenFlowSwitchListener; +import org.onosproject.openflow.controller.PacketListener; +import org.onosproject.openflow.controller.RoleState; +import org.projectfloodlight.openflow.protocol.OFFactories; +import org.projectfloodlight.openflow.protocol.OFFactory; +import org.projectfloodlight.openflow.protocol.OFGroupDescStatsReply; +import org.projectfloodlight.openflow.protocol.OFGroupMod; +import org.projectfloodlight.openflow.protocol.OFGroupModFailedCode; +import org.projectfloodlight.openflow.protocol.OFGroupStatsReply; +import org.projectfloodlight.openflow.protocol.OFGroupType; +import org.projectfloodlight.openflow.protocol.OFMessage; +import org.projectfloodlight.openflow.protocol.OFPortDesc; +import org.projectfloodlight.openflow.protocol.OFVersion; +import org.projectfloodlight.openflow.protocol.errormsg.OFGroupModFailedErrorMsg; +import org.projectfloodlight.openflow.types.OFGroup; + +import java.util.Collection; +import java.util.List; +import java.util.Set; + +import static org.junit.Assert.*; + +public class OpenFlowGroupProviderTest { + + OpenFlowGroupProvider provider = new OpenFlowGroupProvider(); + private final OpenFlowController controller = new TestController(); + GroupProviderRegistry providerRegistry = new TestGroupProviderRegistry(); + GroupProviderService providerService; + + private DeviceId deviceId = DeviceId.deviceId("of:0000000000000001"); + private Dpid dpid1 = Dpid.dpid(deviceId.uri()); + + @Before + public void setUp() { + provider.controller = controller; + provider.providerRegistry = providerRegistry; + provider.activate(); + } + + @Test + public void basics() { + assertNotNull("registration expected", providerService); + assertEquals("incorrect provider", provider, providerService.provider()); + } + + @Test + public void addGroup() { + + GroupId groupId = new DefaultGroupId(1); + + List<GroupBucket> bucketList = Lists.newArrayList(); + TrafficTreatment.Builder builder = DefaultTrafficTreatment.builder(); + builder.setOutput(PortNumber.portNumber(1)); + GroupBucket bucket = + DefaultGroupBucket.createSelectGroupBucket(builder.build()); + bucketList.add(bucket); + GroupBuckets buckets = new GroupBuckets(bucketList); + + List<GroupOperation> operationList = Lists.newArrayList(); + GroupOperation operation = GroupOperation.createAddGroupOperation(groupId, + GroupDescription.Type.SELECT, buckets); + operationList.add(operation); + GroupOperations operations = new GroupOperations(operationList); + + provider.performGroupOperation(deviceId, operations); + + final Dpid dpid = Dpid.dpid(deviceId.uri()); + TestOpenFlowSwitch sw = (TestOpenFlowSwitch) controller.getSwitch(dpid); + assertNotNull("Switch should not be nul", sw); + assertNotNull("OFGroupMsg should not be null", sw.msg); + + } + + + @Test + public void groupModFailure() { + TestOpenFlowGroupProviderService testProviderService = + (TestOpenFlowGroupProviderService) providerService; + + GroupId groupId = new DefaultGroupId(1); + List<GroupBucket> bucketList = Lists.newArrayList(); + TrafficTreatment.Builder builder = DefaultTrafficTreatment.builder(); + builder.setOutput(PortNumber.portNumber(1)); + GroupBucket bucket = + DefaultGroupBucket.createSelectGroupBucket(builder.build()); + bucketList.add(bucket); + GroupBuckets buckets = new GroupBuckets(bucketList); + List<GroupOperation> operationList = Lists.newArrayList(); + GroupOperation operation = GroupOperation.createAddGroupOperation(groupId, + GroupDescription.Type.SELECT, buckets); + operationList.add(operation); + GroupOperations operations = new GroupOperations(operationList); + + provider.performGroupOperation(deviceId, operations); + + OFGroupModFailedErrorMsg.Builder errorBuilder = + OFFactories.getFactory(OFVersion.OF_13).errorMsgs().buildGroupModFailedErrorMsg(); + OFGroupMod.Builder groupBuilder = OFFactories.getFactory(OFVersion.OF_13).buildGroupModify(); + groupBuilder.setGroupType(OFGroupType.ALL); + groupBuilder.setGroup(OFGroup.of(1)); + errorBuilder.setCode(OFGroupModFailedCode.GROUP_EXISTS); + errorBuilder.setXid(provider.getXidAndAdd(0) - 1); + + controller.processPacket(dpid1, errorBuilder.build()); + + assertNotNull("Operation failed should not be null", + testProviderService.failedOperation); + } + + + @Test + public void groupStatsEvent() { + TestOpenFlowGroupProviderService testProviderService = + (TestOpenFlowGroupProviderService) providerService; + + OFGroupStatsReply.Builder rep1 = + OFFactories.getFactory(OFVersion.OF_13).buildGroupStatsReply(); + rep1.setXid(1); + controller.processPacket(dpid1, rep1.build()); + OFGroupDescStatsReply.Builder rep2 = + OFFactories.getFactory(OFVersion.OF_13).buildGroupDescStatsReply(); + assertNull("group entries is not set yet", testProviderService.getGroupEntries()); + + rep2.setXid(2); + controller.processPacket(dpid1, rep2.build()); + assertNotNull("group entries should be set", testProviderService.getGroupEntries()); + } + + + + @After + public void tearDown() { + provider.deactivate(); + provider.providerRegistry = null; + provider.controller = null; + } + + private class TestOpenFlowGroupProviderService + extends AbstractProviderService<GroupProvider> + implements GroupProviderService { + + Collection<Group> groups = null; + GroupOperation failedOperation = null; + + protected TestOpenFlowGroupProviderService(GroupProvider provider) { + super(provider); + } + + @Override + public void groupOperationFailed(DeviceId deviceId, GroupOperation operation) { + this.failedOperation = operation; + } + + @Override + public void pushGroupMetrics(DeviceId deviceId, Collection<Group> groupEntries) { + this.groups = groupEntries; + } + + public Collection<Group> getGroupEntries() { + return groups; + } + } + + private class TestController implements OpenFlowController { + + OpenFlowEventListener eventListener = null; + List<OpenFlowSwitch> switches = Lists.newArrayList(); + + public TestController() { + OpenFlowSwitch testSwitch = new TestOpenFlowSwitch(); + switches.add(testSwitch); + } + + @Override + public void addListener(OpenFlowSwitchListener listener) { + } + + @Override + public void removeListener(OpenFlowSwitchListener listener) { + + } + + @Override + public void addPacketListener(int priority, PacketListener listener) { + + } + + @Override + public void removePacketListener(PacketListener listener) { + + } + + @Override + public void addEventListener(OpenFlowEventListener listener) { + this.eventListener = listener; + } + + @Override + public void removeEventListener(OpenFlowEventListener listener) { + + } + + @Override + public void write(Dpid dpid, OFMessage msg) { + + } + + @Override + public void processPacket(Dpid dpid, OFMessage msg) { + eventListener.handleMessage(dpid, msg); + } + + @Override + public void setRole(Dpid dpid, RoleState role) { + + } + + @Override + public Iterable<OpenFlowSwitch> getSwitches() { + return switches; + } + + @Override + public Iterable<OpenFlowSwitch> getMasterSwitches() { + return null; + } + + @Override + public Iterable<OpenFlowSwitch> getEqualSwitches() { + return null; + } + + @Override + public OpenFlowSwitch getSwitch(Dpid dpid) { + return switches.get(0); + } + + @Override + public OpenFlowSwitch getMasterSwitch(Dpid dpid) { + return null; + } + + @Override + public OpenFlowSwitch getEqualSwitch(Dpid dpid) { + return null; + } + + } + + private class TestGroupProviderRegistry implements GroupProviderRegistry { + + @Override + public GroupProviderService register(GroupProvider provider) { + providerService = new TestOpenFlowGroupProviderService(provider); + return providerService; + } + + @Override + public void unregister(GroupProvider provider) { + } + + @Override + public Set<ProviderId> getProviders() { + return null; + } + } + + private class TestOpenFlowSwitch implements OpenFlowSwitch { + + OFMessage msg = null; + + @Override + public void sendMsg(OFMessage msg) { + this.msg = msg; + } + + @Override + public void sendMsg(List<OFMessage> msgs) { + + } + + @Override + public void handleMessage(OFMessage fromSwitch) { + + } + + @Override + public void setRole(RoleState role) { + + } + + @Override + public RoleState getRole() { + return null; + } + + @Override + public List<OFPortDesc> getPorts() { + return null; + } + + @Override + public OFFactory factory() { + return OFFactories.getFactory(OFVersion.OF_13); + } + + @Override + public String getStringId() { + return null; + } + + @Override + public long getId() { + return 0; + } + + @Override + public String manufacturerDescription() { + return null; + } + + @Override + public String datapathDescription() { + return null; + } + + @Override + public String hardwareDescription() { + return null; + } + + @Override + public String softwareDescription() { + return null; + } + + @Override + public String serialNumber() { + return null; + } + + @Override + public boolean isConnected() { + return false; + } + + @Override + public void disconnectSwitch() { + + } + + @Override + public void returnRoleReply(RoleState requested, RoleState response) { + + } + + @Override + public Device.Type deviceType() { + return Device.Type.SWITCH; + } + + @Override + public String channelId() { + return null; + } + + } +}
\ No newline at end of file |