@Override public void send(final Message msg) { LOGGER.debug("{} send message: {}", sessionName(), msg); session.getRemote().sendBytesByFuture(ByteBuffer.wrap(MessageEncoding.encodeMessage(msg))); }
private void send(Message message) { for (int retries = 1; retries <= systemEnvironment.getWebsocketSendRetryCount(); retries++) { try { LOG.debug("{} attempt {} to send message: {}", sessionName(), retries, message); session.getRemote().sendBytesByFuture(ByteBuffer.wrap(MessageEncoding.encodeMessage(message))); break; } catch (Throwable e) { try { LOG.debug("{} attempt {} failed to send message: {}.", sessionName(), retries, message); if (retries == systemEnvironment.getWebsocketSendRetryCount()) { bomb(e); } Thread.sleep(2000L); } catch (InterruptedException ignored) { } } } }
@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 encodeAndDecodeMessageWithoutData() { byte[] msg = MessageEncoding.encodeMessage(new Message(Action.ping)); Message decoded = MessageEncoding.decodeMessage(new ByteArrayInputStream(msg)); assertThat(decoded.getAction(), is(Action.ping)); assertNull(decoded.getData()); assertEquals(decoded, MessageEncoding.decodeMessage(new ByteArrayInputStream(msg))); }
@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 encodeAndDecodeAssignWorkWithDifferentBuilders() throws Exception { File workingDir = new File(CruiseConfig.WORKING_BASE_DIR + "pipelineName"); Materials materials = MaterialsMother.defaultMaterials(); MaterialRevisions revisions = ModificationsMother.modifyOneFile(materials, ModificationsMother.nextRevision()); BuildCause buildCause = BuildCause.createWithModifications(revisions, ""); List<Builder> builder = new ArrayList<>(); builder.add(new CommandBuilder("command", "args", workingDir, new RunIfConfigs(), new NullBuilder(), "desc")); builder.add(new BuilderForKillAllChildTask()); builder.add(new CommandBuilderWithArgList("command", new String[]{"arg1", "arg2"}, workingDir, new RunIfConfigs(), new NullBuilder(), "desc")); builder.add(new FetchArtifactBuilder(new RunIfConfigs(), new NullBuilder(), "desc", jobPlan().getIdentifier(), "srcdir", "dest", new FileHandler(workingDir, "src"), new ChecksumFileHandler(workingDir))); BuildAssignment assignment = BuildAssignment.create(jobPlan(), buildCause, builder, workingDir, new EnvironmentVariableContext(), new ArtifactStores()); BuildWork work = new BuildWork(assignment, "utf-8"); byte[] msg = MessageEncoding.encodeMessage(new Message(Action.assignWork, MessageEncoding.encodeWork(work))); Message decodedMsg = MessageEncoding.decodeMessage(new ByteArrayInputStream(msg)); BuildWork decodedWork = (BuildWork) MessageEncoding.decodeWork(decodedMsg.getData()); assertThat(decodedWork.getAssignment().getJobIdentifier().getPipelineName(), is("pipelineName")); }