@Test public void handleUnsubscribe() { given(this.brokerChannel.send(Mockito.any(Message.class))).willReturn(true); this.handler.handleMessage(createWith(SimpMessageType.UNSUBSCRIBE, "joe", "123", "/user/queue/foo")); ArgumentCaptor<Message> captor = ArgumentCaptor.forClass(Message.class); Mockito.verify(this.brokerChannel).send(captor.capture()); Message message = captor.getValue(); assertEquals("/queue/foo-user123", SimpMessageHeaderAccessor.getDestination(message.getHeaders())); }
@Test public void handleSubscribe() { given(this.brokerChannel.send(Mockito.any(Message.class))).willReturn(true); this.handler.handleMessage(createWith(SimpMessageType.SUBSCRIBE, "joe", SESSION_ID, "/user/queue/foo")); ArgumentCaptor<Message> captor = ArgumentCaptor.forClass(Message.class); Mockito.verify(this.brokerChannel).send(captor.capture()); Message message = captor.getValue(); assertEquals("/queue/foo-user123", SimpMessageHeaderAccessor.getDestination(message.getHeaders())); }
@Test public void handleMessageWithoutActiveSession() { this.handler.setBroadcastDestination("/topic/unresolved"); given(this.brokerChannel.send(Mockito.any(Message.class))).willReturn(true); this.handler.handleMessage(createWith(SimpMessageType.MESSAGE, "joe", "123", "/user/joe/queue/foo")); ArgumentCaptor<Message> captor = ArgumentCaptor.forClass(Message.class); Mockito.verify(this.brokerChannel).send(captor.capture()); Message message = captor.getValue(); SimpMessageHeaderAccessor accessor = SimpMessageHeaderAccessor.wrap(message); assertEquals("/topic/unresolved", accessor.getDestination()); assertEquals("/user/joe/queue/foo", accessor.getFirstNativeHeader(ORIGINAL_DESTINATION)); // Should ignore our own broadcast to brokerChannel this.handler.handleMessage(message); Mockito.verifyNoMoreInteractions(this.brokerChannel); }
@Test public void handleMessage() { TestSimpUser simpUser = new TestSimpUser("joe"); simpUser.addSessions(new TestSimpSession("123")); when(this.registry.getUser("joe")).thenReturn(simpUser); given(this.brokerChannel.send(Mockito.any(Message.class))).willReturn(true); this.handler.handleMessage(createWith(SimpMessageType.MESSAGE, "joe", "123", "/user/joe/queue/foo")); ArgumentCaptor<Message> captor = ArgumentCaptor.forClass(Message.class); Mockito.verify(this.brokerChannel).send(captor.capture()); SimpMessageHeaderAccessor accessor = SimpMessageHeaderAccessor.wrap(captor.getValue()); assertEquals("/queue/foo-user123", accessor.getDestination()); assertEquals("/user/queue/foo", accessor.getFirstNativeHeader(ORIGINAL_DESTINATION)); }
@Test public void handleMessageFromBrokerWithActiveSession() { TestSimpUser simpUser = new TestSimpUser("joe"); simpUser.addSessions(new TestSimpSession("123")); when(this.registry.getUser("joe")).thenReturn(simpUser); this.handler.setBroadcastDestination("/topic/unresolved"); given(this.brokerChannel.send(Mockito.any(Message.class))).willReturn(true); StompHeaderAccessor accessor = StompHeaderAccessor.create(StompCommand.MESSAGE); accessor.setSessionId("system123"); accessor.setDestination("/topic/unresolved"); accessor.setNativeHeader(ORIGINAL_DESTINATION, "/user/joe/queue/foo"); accessor.setNativeHeader("customHeader", "customHeaderValue"); accessor.setLeaveMutable(true); byte[] payload = "payload".getBytes(StandardCharsets.UTF_8); this.handler.handleMessage(MessageBuilder.createMessage(payload, accessor.getMessageHeaders())); ArgumentCaptor<Message> captor = ArgumentCaptor.forClass(Message.class); Mockito.verify(this.brokerChannel).send(captor.capture()); assertNotNull(captor.getValue()); SimpMessageHeaderAccessor headers = SimpMessageHeaderAccessor.wrap(captor.getValue()); assertEquals("/queue/foo-user123", headers.getDestination()); assertEquals("/user/queue/foo", headers.getFirstNativeHeader(ORIGINAL_DESTINATION)); assertEquals("customHeaderValue", headers.getFirstNativeHeader("customHeader")); assertArrayEquals(payload, (byte[]) captor.getValue().getPayload()); }
@Test public void handleMessageFromBrokerWithoutActiveSession() { this.handler.setBroadcastDestination("/topic/unresolved"); given(this.brokerChannel.send(Mockito.any(Message.class))).willReturn(true); StompHeaderAccessor accessor = StompHeaderAccessor.create(StompCommand.MESSAGE); accessor.setSessionId("system123"); accessor.setDestination("/topic/unresolved"); accessor.setNativeHeader(ORIGINAL_DESTINATION, "/user/joe/queue/foo"); accessor.setLeaveMutable(true); byte[] payload = "payload".getBytes(StandardCharsets.UTF_8); this.handler.handleMessage(MessageBuilder.createMessage(payload, accessor.getMessageHeaders())); // No re-broadcast verifyNoMoreInteractions(this.brokerChannel); }
@Test @SuppressWarnings({ "unchecked", "rawtypes" }) public void completableFutureFailure() { Message emptyMessage = MessageBuilder.withPayload(new byte[0]).build(); given(this.channel.send(any(Message.class))).willReturn(true); given(this.converter.toMessage(any(), any(MessageHeaders.class))).willReturn(emptyMessage); CompletableFutureController controller = new CompletableFutureController(); this.messageHandler.registerHandler(controller); this.messageHandler.setDestinationPrefixes(Arrays.asList("/app1", "/app2/")); Message<?> message = createMessage("/app1/completable-future"); this.messageHandler.handleMessage(message); controller.future.completeExceptionally(new IllegalStateException()); assertTrue(controller.exceptionCaught); }
@Test @SuppressWarnings({ "unchecked", "rawtypes" }) public void completableFutureSuccess() { Message emptyMessage = MessageBuilder.withPayload(new byte[0]).build(); given(this.channel.send(any(Message.class))).willReturn(true); given(this.converter.toMessage(any(), any(MessageHeaders.class))).willReturn(emptyMessage); CompletableFutureController controller = new CompletableFutureController(); this.messageHandler.registerHandler(controller); this.messageHandler.setDestinationPrefixes(Arrays.asList("/app1", "/app2/")); Message<?> message = createMessage("/app1/completable-future"); this.messageHandler.handleMessage(message); assertNotNull(controller.future); controller.future.complete("foo"); verify(this.converter).toMessage(this.payloadCaptor.capture(), any(MessageHeaders.class)); assertEquals("foo", this.payloadCaptor.getValue()); }
@Test @SuppressWarnings({ "unchecked", "rawtypes" }) public void listenableFutureSuccess() { Message emptyMessage = MessageBuilder.withPayload(new byte[0]).build(); given(this.channel.send(any(Message.class))).willReturn(true); given(this.converter.toMessage(any(), any(MessageHeaders.class))).willReturn(emptyMessage); ListenableFutureController controller = new ListenableFutureController(); this.messageHandler.registerHandler(controller); this.messageHandler.setDestinationPrefixes(Arrays.asList("/app1", "/app2/")); Message<?> message = createMessage("/app1/listenable-future/success"); this.messageHandler.handleMessage(message); assertNotNull(controller.future); controller.future.run(); verify(this.converter).toMessage(this.payloadCaptor.capture(), any(MessageHeaders.class)); assertEquals("foo", this.payloadCaptor.getValue()); }
@Test @SuppressWarnings({ "unchecked", "rawtypes" }) public void monoFailure() { Message emptyMessage = MessageBuilder.withPayload(new byte[0]).build(); given(this.channel.send(any(Message.class))).willReturn(true); given(this.converter.toMessage(any(), any(MessageHeaders.class))).willReturn(emptyMessage); ReactiveController controller = new ReactiveController(); this.messageHandler.registerHandler(controller); this.messageHandler.setDestinationPrefixes(Arrays.asList("/app1", "/app2/")); Message<?> message = createMessage("/app1/mono"); this.messageHandler.handleMessage(message); controller.mono.onError(new IllegalStateException()); assertTrue(controller.exceptionCaught); }
@Test @SuppressWarnings({ "unchecked", "rawtypes" }) public void monoSuccess() { Message emptyMessage = MessageBuilder.withPayload(new byte[0]).build(); given(this.channel.send(any(Message.class))).willReturn(true); given(this.converter.toMessage(any(), any(MessageHeaders.class))).willReturn(emptyMessage); ReactiveController controller = new ReactiveController(); this.messageHandler.registerHandler(controller); this.messageHandler.setDestinationPrefixes(Arrays.asList("/app1", "/app2/")); Message<?> message = createMessage("/app1/mono"); this.messageHandler.handleMessage(message); assertNotNull(controller.mono); controller.mono.onNext("foo"); verify(this.converter).toMessage(this.payloadCaptor.capture(), any(MessageHeaders.class)); assertEquals("foo", this.payloadCaptor.getValue()); }
@Test @SuppressWarnings({ "unchecked", "rawtypes" }) public void listenableFutureFailure() { Message emptyMessage = MessageBuilder.withPayload(new byte[0]).build(); given(this.channel.send(any(Message.class))).willReturn(true); given(this.converter.toMessage(any(), any(MessageHeaders.class))).willReturn(emptyMessage); ListenableFutureController controller = new ListenableFutureController(); this.messageHandler.registerHandler(controller); this.messageHandler.setDestinationPrefixes(Arrays.asList("/app1", "/app2/")); Message<?> message = createMessage("/app1/listenable-future/failure"); this.messageHandler.handleMessage(message); controller.future.run(); assertTrue(controller.exceptionCaught); }
private void sendToProcessingChannel(final ResourceModifiedMessage theMessage) { ourLog.trace("Sending resource modified message to processing channel"); Validate.notNull(myProcessingChannel, "A SubscriptionMatcherInterceptor has been registered without calling start() on it."); myProcessingChannel.send(new ResourceModifiedJsonMessage(theMessage)); }
@Test @SuppressWarnings({ "unchecked", "rawtypes" }) public void fluxNotHandled() { Message emptyMessage = MessageBuilder.withPayload(new byte[0]).build(); given(this.channel.send(any(Message.class))).willReturn(true); given(this.converter.toMessage(any(), any(MessageHeaders.class))).willReturn(emptyMessage); ReactiveController controller = new ReactiveController(); this.messageHandler.registerHandler(controller); this.messageHandler.setDestinationPrefixes(Arrays.asList("/app1", "/app2/")); Message<?> message = createMessage("/app1/flux"); this.messageHandler.handleMessage(message); assertNotNull(controller.flux); controller.flux.onNext("foo"); verify(this.converter, never()).toMessage(any(), any(MessageHeaders.class)); }
private void testOutboundUsingConfig() { Message<String> message = MessageBuilder.withPayload("test").build(); requestChannel.send(message); byte[] bytes = (byte[]) replyChannel.receive().getPayload(); assertEquals("echo:test", new String(bytes).trim()); }
@Test public void testUgly() { context.setId("context"); try { ugly.send(new GenericMessage<String>("foo")); fail("Expected exception"); } catch (Exception e) { assertThat(e.getCause().getMessage(), containsString("Dispatcher has no subscribers for channel 'context.baz'.")); } }
@Test public void sendMessage() { input.send(MessageBuilder.withPayload(new AtomicInteger(0)).build()); Message<?> reply = output.receive(1000); assertEquals(111, ((Integer) reply.getPayload()).intValue()); }
@Test public void testBad() { bad.send(new GenericMessage<String>("foo")); Message<?> reply = this.reply.receive(0); assertNotNull(reply); assertEquals("error:foo", reply.getPayload()); }
@Test public void validateGatewayInTheChainViaChannel() { output.subscribe(message -> { Assert.assertEquals("echo:echo:echo:hello", message.getPayload()); Assert.assertEquals("foo", message.getHeaders().get("foo")); Assert.assertEquals("oleg", message.getHeaders().get("name")); }); channel.send(new GenericMessage<String>("hello")); }
@Test public void testFindByPayloadType() throws Exception { this.handler = message -> { assertThat(message.getPayload(), Matchers.instanceOf(StudentDomain.class)); StudentDomain student = (StudentDomain) message.getPayload(); assertEquals("First Two", student.getFirstName()); }; this.responseChannel.subscribe(this.handler); StudentDomain payload = new StudentDomain(); payload.setRollNumber(1002L); Message<StudentDomain> message = MessageBuilder.withPayload(payload).build(); this.findByPayloadTypeChannel.send(message); }