@Test public void testTimestampOverwritten() throws Exception { MessageHeaders headers1 = new MessageHeaders(null); Thread.sleep(50L); MessageHeaders headers2 = new MessageHeaders(headers1); assertNotSame(headers1.getTimestamp(), headers2.getTimestamp()); }
@Override public <T> EventMessage<T> convertFromInboundMessage(Message<T> message) { MessageHeaders headers = message.getHeaders(); Map<String, ?> metaData = headers.entrySet() .stream() .filter(entry -> !entry.getKey().startsWith(AXON_MESSAGE_PREFIX)) .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); String messageId = Objects.toString(headers.get(MESSAGE_ID)); Long timestamp = headers.getTimestamp(); org.axonframework.messaging.GenericMessage<T> genericMessage = new org.axonframework.messaging.GenericMessage<>(messageId, message.getPayload(), metaData); if (headers.containsKey(AGGREGATE_ID)) { return new GenericDomainEventMessage<>(Objects.toString(headers.get(AGGREGATE_TYPE)), Objects.toString(headers.get(AGGREGATE_ID)), NumberUtils.convertNumberToTargetClass(headers.get(AGGREGATE_SEQ, Number.class), Long.class), genericMessage, () -> Instant.ofEpochMilli(timestamp)); } else { return new GenericEventMessage<>(genericMessage, () -> Instant.ofEpochMilli(timestamp)); } }
@Test public void testTimestampProvidedNullValue() throws Exception { Map<String, Object> input = Collections.<String, Object>singletonMap(MessageHeaders.TIMESTAMP, 1L); MessageHeaders headers = new MessageHeaders(input, null, null); assertNotNull(headers.getTimestamp()); }
@Test public void testTimestampProvided() throws Exception { MessageHeaders headers = new MessageHeaders(null, null, 10L); assertEquals(10L, (long) headers.getTimestamp()); }
@Test public void testTimestamp() { MessageHeaders headers = new MessageHeaders(null); assertNotNull(headers.getTimestamp()); }
@Test public void testTimestampNone() throws Exception { MessageHeaders headers = new MessageHeaders(null, null, -1L); assertNull(headers.getTimestamp()); }
@Test public void toMessageWithHeaders() { Map<String, Object> map = new HashMap<>(); map.put("foo", "bar"); MessageHeaders headers = new MessageHeaders(map); Message<?> message = this.converter.toMessage("ABC", headers); assertNotNull(message.getHeaders().getId()); assertNotNull(message.getHeaders().getTimestamp()); assertEquals(MimeTypeUtils.TEXT_PLAIN, message.getHeaders().get(MessageHeaders.CONTENT_TYPE)); assertEquals("bar", message.getHeaders().get("foo")); }
@Test public void timestampDefaultBehavior() { MessageHeaderAccessor accessor = new MessageHeaderAccessor(); assertNull(accessor.getMessageHeaders().getTimestamp()); }
@Test public void testBuildMessageWithoutIdAndTimestamp() { MessageHeaderAccessor headerAccessor = new MessageHeaderAccessor(); headerAccessor.setIdGenerator(new IdGenerator() { @Override public UUID generateId() { return MessageHeaders.ID_VALUE_NONE; } }); Message<?> message = MessageBuilder.createMessage("foo", headerAccessor.getMessageHeaders()); assertNull(message.getHeaders().getId()); assertNull(message.getHeaders().getTimestamp()); }
@Test public void timestampEnabled() { MessageHeaderAccessor accessor = new MessageHeaderAccessor(); accessor.setEnableTimestamp(true); assertNotNull(accessor.getMessageHeaders().getTimestamp()); }
@Test public void toMessageWithMutableMessageHeaders() { SimpMessageHeaderAccessor accessor = SimpMessageHeaderAccessor.create(SimpMessageType.MESSAGE); accessor.setHeader("foo", "bar"); accessor.setNativeHeader("fooNative", "barNative"); accessor.setLeaveMutable(true); MessageHeaders headers = accessor.getMessageHeaders(); Message<?> message = this.converter.toMessage("ABC", headers); assertSame(headers, message.getHeaders()); assertNull(message.getHeaders().getId()); assertNull(message.getHeaders().getTimestamp()); assertEquals(MimeTypeUtils.TEXT_PLAIN, message.getHeaders().get(MessageHeaders.CONTENT_TYPE)); }
@Test public void messageIdAndTimestampDefaultBehavior() { StompHeaderAccessor headerAccessor = StompHeaderAccessor.create(StompCommand.SEND); MessageHeaders headers = headerAccessor.getMessageHeaders(); assertNull(headers.getId()); assertNull(headers.getTimestamp()); }
@Test public void idTimestampWithMutableHeaders() { MessageHeaderAccessor accessor = new MessageHeaderAccessor(); accessor.setIdGenerator(() -> MessageHeaders.ID_VALUE_NONE); accessor.setEnableTimestamp(false); accessor.setLeaveMutable(true); MessageHeaders headers = accessor.getMessageHeaders(); assertNull(headers.getId()); assertNull(headers.getTimestamp()); final UUID id = new UUID(0L, 23L); accessor.setIdGenerator(() -> id); accessor.setEnableTimestamp(true); accessor.setImmutable(); assertSame(id, accessor.getMessageHeaders().getId()); assertNotNull(headers.getTimestamp()); }
@Test public void messageIdAndTimestampEnabled() { IdTimestampMessageHeaderInitializer headerInitializer = new IdTimestampMessageHeaderInitializer(); headerInitializer.setIdGenerator(new AlternativeJdkIdGenerator()); headerInitializer.setEnableTimestamp(true); StompHeaderAccessor headerAccessor = StompHeaderAccessor.create(StompCommand.SEND); headerInitializer.initHeaders(headerAccessor); assertNotNull(headerAccessor.getMessageHeaders().getId()); assertNotNull(headerAccessor.getMessageHeaders().getTimestamp()); }
@Override public boolean accept(Message<?> message) { String key = this.keyStrategy.processMessage(message); Long timestamp = message.getHeaders().getTimestamp(); String value = (this.valueStrategy != null) ? this.valueStrategy.processMessage(message) : (timestamp == null ? "0" : Long.toString(timestamp)); return this.metadataStore.putIfAbsent(key, value) == null; }
@Override public MessageMetadata getMessageMetadata(UUID id) { Message<?> message = getMessage(id); if (message != null) { MessageMetadata messageMetadata = new MessageMetadata(id); Long timestamp = message.getHeaders().getTimestamp(); messageMetadata.setTimestamp(timestamp == null ? 0L : timestamp); return messageMetadata; } else { return null; } }
@Test public void testTimestampOverwritten() throws Exception { MessageHeaders headers1 = new MessageHeaders(null); Thread.sleep(50L); MessageHeaders headers2 = new MessageHeaders(headers1); assertNotSame(headers1.getTimestamp(), headers2.getTimestamp()); }
@Test public void fromHeadersFallbackIdTimestamp() { DefaultAmqpHeaderMapper headerMapper = DefaultAmqpHeaderMapper.outboundMapper(); org.springframework.messaging.Message<?> message = new GenericMessage<>(""); MessageProperties messageProperties = new MessageProperties(); headerMapper.fromHeadersToRequest(message.getHeaders(), messageProperties); assertThat(message.getHeaders().getId().toString()).isEqualTo(messageProperties.getMessageId()); assertThat(message.getHeaders().getTimestamp()).isEqualTo(messageProperties.getTimestamp().getTime()); }
@Test public void testTimestamp() { MessageHeaders headers = new MessageHeaders(null); assertNotNull(headers.getTimestamp()); }
@Test public void testFromMessageWithHeadersAndBeanPayload() throws Exception { TestBean payload = new TestBean(); Message<TestBean> testMessage = MessageBuilder.withPayload(payload).build(); JsonOutboundMessageMapper mapper = new JsonOutboundMessageMapper(); String result = mapper.fromMessage(testMessage); assertTrue(result.contains("\"headers\":{")); assertTrue(result.contains("\"timestamp\":" + testMessage.getHeaders().getTimestamp())); assertTrue(result.contains("\"id\":\"" + testMessage.getHeaders().getId() + "\"")); TestBean parsedPayload = extractJsonPayloadToTestBean(result); assertEquals(payload, parsedPayload); }