/** * Tests a situation where a plugin returns a DISCONNECT result. This means * we should disconnect the connection and the state should not change. * * @throws Exception */ @Test public void failedAppHandshake() throws Exception { moveToWaitAppHandshakeState(); assertThat(switchHandler.getStateForTesting(), CoreMatchers.instanceOf(WaitAppHandshakeState.class)); WaitAppHandshakeState state = (WaitAppHandshakeState) switchHandler.getStateForTesting(); assertThat(state.getCurrentPlugin(), CoreMatchers.<OFSwitchAppHandshakePlugin>equalTo(handshakePlugin)); PluginResult result = new PluginResult(PluginResultType.DISCONNECT); handshakePlugin.exitPlugin(result); assertThat(connection.isConnected(), equalTo(false)); }
@Override @Test public void moveToWaitInitialRole() throws Exception { moveToWaitAppHandshakeState(); assertThat(switchHandler.getStateForTesting(), CoreMatchers.instanceOf(WaitAppHandshakeState.class)); reset(sw); expect(sw.getAttribute(IOFSwitchBackend.SWITCH_SUPPORTS_NX_ROLE)).andReturn(true).anyTimes(); replay(sw); reset(roleManager); expect(roleManager.getOFControllerRole()).andReturn(OFControllerRole.ROLE_MASTER).anyTimes(); replay(roleManager); WaitAppHandshakeState state = (WaitAppHandshakeState) switchHandler.getStateForTesting(); PluginResult result = new PluginResult(PluginResultType.CONTINUE); state.exitPlugin(result); assertThat(connection.retrieveMessage(), instanceOf(getRoleRequestClass())); assertThat(switchHandler.getStateForTesting(), CoreMatchers.instanceOf(OFSwitchHandshakeHandler.WaitInitialRoleState.class)); }
@Override @Test public void moveToWaitInitialRole() throws Exception { moveToWaitAppHandshakeState(); assertThat(switchHandler.getStateForTesting(), CoreMatchers.instanceOf(WaitAppHandshakeState.class)); reset(sw); expect(sw.getAttribute(IOFSwitchBackend.SWITCH_SUPPORTS_NX_ROLE)).andReturn(true).anyTimes(); replay(sw); reset(roleManager); expect(roleManager.getOFControllerRole(null)).andReturn(OFControllerRole.ROLE_MASTER).anyTimes(); replay(roleManager); WaitAppHandshakeState state = (WaitAppHandshakeState) switchHandler.getStateForTesting(); PluginResult result = new PluginResult(PluginResultType.CONTINUE); state.exitPlugin(result); assertThat(connection.retrieveMessage(), instanceOf(getRoleRequestClass())); assertThat(switchHandler.getStateForTesting(), CoreMatchers.instanceOf(OFSwitchHandshakeHandler.WaitInitialRoleState.class)); }
/** * Called by handshake plugins to signify that they have finished their * sub handshake. * * @param result * the result of the sub handshake */ void exitPlugin(PluginResult result) { // Proceed if (result.getResultType() == PluginResultType.CONTINUE) { if (log.isDebugEnabled()) { log.debug("Switch " + getSwitchInfoString() + " app handshake plugin {} returned {}." + " Proceeding normally..", this.plugin.getClass().getSimpleName(), result); } enterNextPlugin(); // Stop } else if (result.getResultType() == PluginResultType.DISCONNECT) { log.error("Switch " + getSwitchInfoString() + " app handshake plugin {} returned {}. " + "Disconnecting switch.", this.plugin.getClass().getSimpleName(), result); mainConnection.disconnect(); } else if (result.getResultType() == PluginResultType.QUARANTINE) { log.warn("Switch " + getSwitchInfoString() + " app handshake plugin {} returned {}. " + "Putting switch into quarantine state.", this.plugin.getClass().getSimpleName(), result); setState(new QuarantineState(result.getReason())); } }
public PluginResult(@Nonnull PluginResultType result, String reason) { Preconditions.checkNotNull(result, "result must not be null"); if(result != PluginResultType.QUARANTINE && reason != null) throw new IllegalStateException("Reason can only be set for Quarantine PluginResult"); this.result = result; this.reason = reason; }
public void setUpFeaturesReply() { getFeaturesReply(); this.featuresReply = getFeaturesReply(); // Plugin set IAppHandshakePluginFactory factory = createMock(IAppHandshakePluginFactory.class); PluginResult result = new PluginResult(PluginResultType.QUARANTINE, "test quarantine"); handshakePlugin = new TestHandshakePlugin(result, 5); expect(factory.createPlugin()).andReturn(handshakePlugin).anyTimes(); replay(factory); plugins = ImmutableList.of(factory); }
/** * Tests a situation where a switch returns a QUARANTINE result. This means * we should move the handshake handler to a quarantine state and also * quarantine the switch in the controller. * * @throws Exception */ @Test public void moveQuarantine() throws Exception { moveToWaitAppHandshakeState(); reset(switchManager); switchManager.switchStatusChanged(sw, SwitchStatus.HANDSHAKE, SwitchStatus.QUARANTINED); expectLastCall().once(); replay(switchManager); assertThat(switchHandler.getStateForTesting(), CoreMatchers.instanceOf(WaitAppHandshakeState.class)); WaitAppHandshakeState state = (WaitAppHandshakeState) switchHandler.getStateForTesting(); assertThat(state.getCurrentPlugin(), CoreMatchers.<OFSwitchAppHandshakePlugin>equalTo(handshakePlugin)); reset(sw); expect(sw.getStatus()).andReturn(SwitchStatus.HANDSHAKE); sw.setStatus(SwitchStatus.QUARANTINED); expectLastCall().once(); replay(sw); PluginResult result = new PluginResult(PluginResultType.QUARANTINE, "test quarantine"); handshakePlugin.exitPlugin(result); assertThat(switchHandler.getStateForTesting(), CoreMatchers.instanceOf(QuarantineState.class)); verify(switchManager); }
@Test public void validAppHandshakePluginReason() throws Exception { try{ new PluginResult(PluginResultType.QUARANTINE,"This should not cause an exception"); }catch(IllegalStateException e) { fail("This should cause an illegal state exception"); } }
@Before public void setUpFeaturesReply() { getFeaturesReply(); this.featuresReply = getFeaturesReply(); // Plugin set IAppHandshakePluginFactory factory = createMock(IAppHandshakePluginFactory.class); PluginResult result = new PluginResult(PluginResultType.QUARANTINE, "test quarantine"); handshakePlugin = new TestHandshakePlugin(result, 5); expect(factory.createPlugin()).andReturn(handshakePlugin).anyTimes(); replay(factory); plugins = ImmutableList.of(factory); }