@Test
public void processAssignWorkActionWithConsoleLogsThroughWebSockets() throws IOException, InterruptedException {
SystemEnvironment env = new SystemEnvironment();
env.set(SystemEnvironment.WEBSOCKET_ENABLED, true);
env.set(SystemEnvironment.CONSOLE_LOGS_THROUGH_WEBSOCKET_ENABLED, true);
ArgumentCaptor<Message> argumentCaptor = ArgumentCaptor.forClass(Message.class);
agentController = createAgentController();
agentController.init();
agentController.process(new Message(Action.assignWork, MessageEncoding.encodeWork(new SleepWork("work1", 0))));
assertThat(agentController.getAgentRuntimeInfo().getRuntimeStatus(), is(AgentRuntimeStatus.Idle));
verify(webSocketSessionHandler, times(2)).sendAndWaitForAcknowledgement(argumentCaptor.capture());
verify(artifactsManipulator).setProperty(null, new Property("work1_result", "done"));
Message message = argumentCaptor.getAllValues().get(1);
assertThat(message.getAcknowledgementId(), notNullValue());
assertThat(message.getAction(), is(Action.ping));
assertThat(message.getData(), is(MessageEncoding.encodeData(agentController.getAgentRuntimeInfo())));
Message message2 = argumentCaptor.getAllValues().get(0);
assertThat(message2.getAcknowledgementId(), notNullValue());
assertThat(message2.getAction(), is(Action.consoleOut));
ConsoleTransmission ct = MessageEncoding.decodeData(message2.getData(), ConsoleTransmission.class);
assertThat(ct.getLine(), RegexMatcher.matches("Sleeping for 0 milliseconds"));
env.set(SystemEnvironment.WEBSOCKET_ENABLED, false);
env.set(SystemEnvironment.CONSOLE_LOGS_THROUGH_WEBSOCKET_ENABLED, false);
}