private void sendWithCallback(Message message, MessageCallback callback) { callbacks.put(message.getAcknowledgementId(), callback); send(message); }
public void process(Agent agent, Message msg) throws Exception { try { processWithoutAcknowledgement(agent, msg); } finally { agent.send(new Message(Action.acknowledge, MessageEncoding.encodeData(msg.getAcknowledgementId()))); } }
@Override public void run() { handler.acknowledge(new Message(Action.acknowledge, message.getAcknowledgementId())); } }));
@Test public void shouldSendAgentRuntimeInfoWhenWorkIsCalled() throws Exception { when(sslInfrastructureService.isRegistered()).thenReturn(true); when(webSocketSessionHandler.isNotRunning()).thenReturn(false); ArgumentCaptor<Message> argumentCaptor = ArgumentCaptor.forClass(Message.class); agentController = createAgentController(); agentController.init(); agentController.work(); verify(webSocketSessionHandler).sendAndWaitForAcknowledgement(argumentCaptor.capture()); Message message = argumentCaptor.getValue(); assertThat(message.getAcknowledgementId(), notNullValue()); assertThat(message.getAction(), is(Action.ping)); assertThat(message.getData(), is(MessageEncoding.encodeData(agentController.getAgentRuntimeInfo()))); }
@Test public void processAssignWorkAction() throws IOException, InterruptedException { 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(1)).sendAndWaitForAcknowledgement(argumentCaptor.capture()); verify(artifactsManipulator).setProperty(null, new Property("work1_result", "done")); Message message = argumentCaptor.getAllValues().get(0); assertThat(message.getAcknowledgementId(), notNullValue()); assertThat(message.getAction(), is(Action.ping)); assertThat(message.getData(), is(MessageEncoding.encodeData(agentController.getAgentRuntimeInfo()))); }
@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); }
assertThat(message.getAcknowledgementId(), notNullValue()); assertThat(message.getAction(), is(Action.reportCurrentStatus)); assertThat(message.getData(), is(MessageEncoding.encodeData(new Report(agentRuntimeInfo, "b001", JobState.Building, null)))); assertThat(jobCompletedMessage.getAcknowledgementId(), notNullValue()); assertThat(jobCompletedMessage.getAction(), is(Action.reportCompleted)); assertThat(jobCompletedMessage.getData(), is(MessageEncoding.encodeData(new Report(agentRuntimeInfo, "b001", null, JobResult.Passed))));
assertThat(consoleOutMsg.getAcknowledgementId(), notNullValue()); assertThat(consoleOutMsg.getAction(), is(Action.consoleOut)); ConsoleTransmission ct = MessageEncoding.decodeData(consoleOutMsg.getData(), ConsoleTransmission.class); assertThat(message.getAcknowledgementId(), notNullValue()); assertThat(message.getAction(), is(Action.reportCurrentStatus)); assertThat(message.getData(), is(MessageEncoding.encodeData(new Report(agentRuntimeInfo, "b001", JobState.Building, null)))); assertThat(jobCompletedMessage.getAcknowledgementId(), notNullValue()); assertThat(jobCompletedMessage.getAction(), is(Action.reportCompleted)); assertThat(jobCompletedMessage.getData(), is(MessageEncoding.encodeData(new Report(agentRuntimeInfo, "b001", null, JobResult.Passed))));
assertThat(message.getAcknowledgementId(), notNullValue()); assertThat(message.getAction(), is(Action.reportCompleted)); assertThat(message.getData(), is(MessageEncoding.encodeData(new Report(agentRuntimeInfo, "b001", null, JobResult.Cancelled))));