void acknowledge(Message message) { String acknowledgementId = MessageEncoding.decodeData(message.getData(), String.class); LOG.debug("Acknowledging {}", acknowledgementId); callbacks.remove(acknowledgementId).call(); }
private AgentRuntimeInfo cloneAgentRuntimeInfo(AgentRuntimeInfo agentRuntimeInfo) { return MessageEncoding.decodeData(MessageEncoding.encodeData(agentRuntimeInfo), AgentRuntimeInfo.class); }
public void processWithoutAcknowledgement(Agent agent, Message msg) throws Exception { switch (msg.getAction()) { case ping: AgentRuntimeInfo info = MessageEncoding.decodeData(msg.getData(), AgentRuntimeInfo.class); if (!sessionIds.containsKey(agent)) { LOGGER.info("{} is connected with websocket {}", info.getIdentifier(), agent); Report report = MessageEncoding.decodeData(msg.getData(), Report.class); buildRepositoryRemote.reportCurrentStatus(report.getAgentRuntimeInfo(), findJobIdentifier(report), report.getJobState()); break; case reportCompleting: report = MessageEncoding.decodeData(msg.getData(), Report.class); buildRepositoryRemote.reportCompleting(report.getAgentRuntimeInfo(), findJobIdentifier(report), report.getResult()); break; case reportCompleted: report = MessageEncoding.decodeData(msg.getData(), Report.class); buildRepositoryRemote.reportCompleted(report.getAgentRuntimeInfo(), findJobIdentifier(report), report.getResult()); break; case consoleOut: ConsoleTransmission consoleTransmission = MessageEncoding.decodeData(msg.getData(), ConsoleTransmission.class); File consoleLogFile = consoleService.consoleLogFile(findJobIdentifier(consoleTransmission)); consoleService.updateConsoleLog(consoleLogFile, consoleTransmission.getLineAsStream());
@Test public void encodeAndDecodeSetCookie() { byte[] msg = MessageEncoding.encodeMessage(new Message(Action.setCookie, MessageEncoding.encodeData("cookie"))); Message decoded = MessageEncoding.decodeMessage(new ByteArrayInputStream(msg)); assertThat(MessageEncoding.decodeData(decoded.getData(), String.class), is("cookie")); }
@Test public void dataMapEncodingAndDecoding() { AgentRuntimeInfo info = new ElasticAgentRuntimeInfo(new AgentIdentifier("localhost", "127.0.0.1", "uuid"), AgentRuntimeStatus.Idle, "/foo/one", null, "42", "go.cd.elastic-agent-plugin.docker"); AgentRuntimeInfo clonedInfo = MessageEncoding.decodeData(MessageEncoding.encodeData(info), AgentRuntimeInfo.class); assertThat(clonedInfo, is(info)); }
@Test public void dataMapEncodingAndDecoding() { AgentRuntimeInfo info = new AgentRuntimeInfo(new AgentIdentifier("go02", "10.10.10.1", "uuid"), AgentRuntimeStatus.Idle, currentWorkingDirectory(), "cookie", true); AgentRuntimeInfo clonedInfo = MessageEncoding.decodeData(MessageEncoding.encodeData(info), AgentRuntimeInfo.class); assertThat(clonedInfo, is(info)); } }
@Test public void encodeAndDecodeAsMessageData() throws Exception { AgentRuntimeInfo info = new AgentRuntimeInfo(new AgentIdentifier("HostName", "ipAddress", "uuid"), AgentRuntimeStatus.Idle, null, null, true); JobIdentifier jobIdentifier = new JobIdentifier("pipeline", 1, "pipelinelabel", "stagename", "1", "job", 1L); Report report = new Report(info, jobIdentifier, JobResult.Passed); assertThat(MessageEncoding.decodeData(MessageEncoding.encodeData(report), Report.class), is(report)); } }
break; case setCookie: String cookie = MessageEncoding.decodeData(message.getData(), String.class); getAgentRuntimeInfo().setCookie(cookie); LOG.info("Got cookie: {}", cookie); case build: cancelBuild(); BuildSettings buildSettings = MessageEncoding.decodeData(message.getData(), BuildSettings.class); runBuild(buildSettings); break;
@Test public void encodeAndDecodePingMessage() { AgentRuntimeInfo info = new AgentRuntimeInfo(new AgentIdentifier("hostName", "ipAddress", "uuid"), null, null, null, false); byte[] msg = MessageEncoding.encodeMessage(new Message(Action.ping, MessageEncoding.encodeData(info))); Message decoded = MessageEncoding.decodeMessage(new ByteArrayInputStream(msg)); AgentRuntimeInfo decodedInfo = MessageEncoding.decodeData(decoded.getData(), AgentRuntimeInfo.class); assertThat(decodedInfo.getIdentifier(), is(info.getIdentifier())); }
@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(consoleOutMsg.getAcknowledgementId(), notNullValue()); assertThat(consoleOutMsg.getAction(), is(Action.consoleOut)); ConsoleTransmission ct = MessageEncoding.decodeData(consoleOutMsg.getData(), ConsoleTransmission.class); assertThat(ct.getLine(), RegexMatcher.matches("building")); assertEquals(ct.getBuildId(), "b001");
@Test public void encodeDecode() { BuildCommand bc = BuildCommand.compose(new BuildCommand("bar1", map("arg1", "1", "arg2", "2")), BuildCommand.compose(new BuildCommand("barz"))); bc.setRunIfConfig("any"); bc.setTest(new BuildCommand("t", map("k1", "v1"))); bc.setOnCancel(BuildCommand.compose(BuildCommand.echo("foo"), BuildCommand.echo("bar"))); assertThat(MessageEncoding.decodeData(MessageEncoding.encodeData(bc), BuildCommand.class), is(bc)); } }