Ayaka Koshibe

Test for role delivery

Change-Id: I202e7606b03bcb89effd57d07003c563de0b7b06
......@@ -51,7 +51,7 @@ public interface DeviceProviderService extends ProviderService<DeviceProvider> {
* mastership role on the device.
*
* @param deviceId identity of the device
* @param role mastership role being asserted
* @param role mastership role that was asserted but failed
*/
void unableToAssertRole(DeviceId deviceId, MastershipRole role);
......
package org.onlab.onos.openflow.controller.impl;
import java.io.IOException;
import java.util.List;
import org.jboss.netty.channel.Channel;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.onlab.onos.openflow.controller.RoleState;
import org.onlab.onos.openflow.controller.driver.OpenFlowAgent;
import org.onlab.onos.openflow.controller.driver.OpenFlowSwitchDriver;
import org.onlab.onos.openflow.controller.driver.RoleHandler;
import org.onlab.onos.openflow.controller.driver.RoleRecvStatus;
import org.onlab.onos.openflow.controller.driver.RoleReplyInfo;
import org.onlab.onos.openflow.controller.driver.SwitchStateException;
import org.projectfloodlight.openflow.protocol.OFDescStatsReply;
import org.projectfloodlight.openflow.protocol.OFErrorMsg;
import org.projectfloodlight.openflow.protocol.OFFactories;
import org.projectfloodlight.openflow.protocol.OFFactory;
import org.projectfloodlight.openflow.protocol.OFFeaturesReply;
import org.projectfloodlight.openflow.protocol.OFMessage;
import org.projectfloodlight.openflow.protocol.OFPortDesc;
import org.projectfloodlight.openflow.protocol.OFPortDescStatsReply;
import org.projectfloodlight.openflow.protocol.OFVersion;
import org.projectfloodlight.openflow.types.U64;
import static org.junit.Assert.assertEquals;
import static org.onlab.onos.openflow.controller.RoleState.*;
import static org.onlab.onos.openflow.controller.driver.RoleRecvStatus.*;
public class RoleManagerTest {
private static final U64 GID = U64.of(10L);
private static final long XID = 1L;
private OpenFlowSwitchDriver sw;
private RoleManager manager;
@Before
public void setUp() {
sw = new TestSwitchDriver();
manager = new RoleManager(sw);
}
@After
public void tearDown() {
manager = null;
sw = null;
}
@Test
public void deliverRoleReply() {
RoleRecvStatus status;
RoleReplyInfo asserted = new RoleReplyInfo(MASTER, GID, XID);
RoleReplyInfo unasserted = new RoleReplyInfo(SLAVE, GID, XID);
try {
//call without sendRoleReq() for requestPending = false
//first, sw.role == null
status = manager.deliverRoleReply(asserted);
assertEquals("expectation wrong", OTHER_EXPECTATION, status);
sw.setRole(MASTER);
assertEquals("expectation wrong", OTHER_EXPECTATION, status);
sw.setRole(SLAVE);
//match to pendingRole = MASTER, requestPending = true
manager.sendRoleRequest(MASTER, MATCHED_CURRENT_ROLE);
status = manager.deliverRoleReply(asserted);
assertEquals("expectation wrong", MATCHED_CURRENT_ROLE, status);
//requestPending never gets reset -- this might be a bug.
status = manager.deliverRoleReply(unasserted);
assertEquals("expectation wrong", OTHER_EXPECTATION, status);
assertEquals("pending role mismatch", MASTER, ((TestSwitchDriver) sw).failed);
} catch (IOException | SwitchStateException e) {
assertEquals("unexpected error thrown",
SwitchStateException.class, e.getClass());
}
}
private class TestSwitchDriver implements OpenFlowSwitchDriver {
RoleState failed = null;
RoleState current = null;
@Override
public void sendMsg(OFMessage msg) {
}
@Override
public void sendMsg(List<OFMessage> msgs) {
}
@Override
public void handleMessage(OFMessage fromSwitch) {
}
@Override
public void setRole(RoleState role) {
current = role;
}
@Override
public RoleState getRole() {
return current;
}
@Override
public List<OFPortDesc> getPorts() {
return null;
}
@Override
public OFFactory factory() {
// return what-ever triggers requestPending = true
return OFFactories.getFactory(OFVersion.OF_10);
}
@Override
public String getStringId() {
return "100";
}
@Override
public long getId() {
return 0;
}
@Override
public String manfacturerDescription() {
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 void disconnectSwitch() {
}
@Override
public void returnRoleAssertFailure(RoleState role) {
failed = role;
}
@Override
public void setAgent(OpenFlowAgent agent) {
}
@Override
public void setRoleHandler(RoleHandler roleHandler) {
}
@Override
public void reassertRole() {
}
@Override
public boolean handleRoleError(OFErrorMsg error) {
return false;
}
@Override
public void handleNiciraRole(OFMessage m) throws SwitchStateException {
}
@Override
public void handleRole(OFMessage m) throws SwitchStateException {
}
@Override
public void startDriverHandshake() {
}
@Override
public boolean isDriverHandshakeComplete() {
return false;
}
@Override
public void processDriverHandshakeMessage(OFMessage m) {
}
@Override
public boolean connectSwitch() {
return false;
}
@Override
public boolean activateMasterSwitch() {
return false;
}
@Override
public boolean activateEqualSwitch() {
return false;
}
@Override
public void transitionToEqualSwitch() {
}
@Override
public void transitionToMasterSwitch() {
}
@Override
public void removeConnectedSwitch() {
}
@Override
public void setPortDescReply(OFPortDescStatsReply portDescReply) {
}
@Override
public void setFeaturesReply(OFFeaturesReply featuresReply) {
}
@Override
public void setSwitchDescription(OFDescStatsReply desc) {
}
@Override
public int getNextTransactionId() {
return (int) XID;
}
@Override
public Boolean supportNxRole() {
return true;
}
@Override
public void setOFVersion(OFVersion ofV) {
}
@Override
public void setTableFull(boolean full) {
}
@Override
public void setChannel(Channel channel) {
}
@Override
public void setConnected(boolean connected) {
}
@Override
public boolean isConnected() {
return false;
}
@Override
public void write(OFMessage msg) {
}
@Override
public void write(List<OFMessage> msgs) {
}
}
}