|
1 | 1 | /*
|
2 |
| - * Copyright 2002-2018 the original author or authors. |
| 2 | + * Copyright 2002-2019 the original author or authors. |
3 | 3 | *
|
4 | 4 | * Licensed under the Apache License, Version 2.0 (the "License");
|
5 | 5 | * you may not use this file except in compliance with the License.
|
|
17 | 17 | package org.springframework.messaging.simp.stomp;
|
18 | 18 |
|
19 | 19 | import java.nio.charset.StandardCharsets;
|
| 20 | +import java.util.Arrays; |
20 | 21 | import java.util.Date;
|
21 | 22 | import java.util.Map;
|
22 | 23 | import java.util.concurrent.ScheduledFuture;
|
|
34 | 35 |
|
35 | 36 | import org.springframework.messaging.Message;
|
36 | 37 | import org.springframework.messaging.MessageDeliveryException;
|
| 38 | +import org.springframework.messaging.converter.ByteArrayMessageConverter; |
| 39 | +import org.springframework.messaging.converter.CompositeMessageConverter; |
37 | 40 | import org.springframework.messaging.converter.MessageConversionException;
|
38 | 41 | import org.springframework.messaging.converter.StringMessageConverter;
|
39 | 42 | import org.springframework.messaging.simp.stomp.StompSession.Receiptable;
|
|
46 | 49 | import org.springframework.util.MimeTypeUtils;
|
47 | 50 | import org.springframework.util.concurrent.SettableListenableFuture;
|
48 | 51 |
|
49 |
| -import static org.hamcrest.Matchers.*; |
50 |
| -import static org.junit.Assert.*; |
| 52 | +import static org.hamcrest.Matchers.containsInAnyOrder; |
| 53 | +import static org.junit.Assert.assertArrayEquals; |
| 54 | +import static org.junit.Assert.assertEquals; |
| 55 | +import static org.junit.Assert.assertFalse; |
| 56 | +import static org.junit.Assert.assertNotNull; |
| 57 | +import static org.junit.Assert.assertNull; |
| 58 | +import static org.junit.Assert.assertThat; |
| 59 | +import static org.junit.Assert.assertTrue; |
51 | 60 | import static org.mockito.Mockito.any;
|
52 |
| -import static org.mockito.Mockito.*; |
| 61 | +import static org.mockito.Mockito.eq; |
| 62 | +import static org.mockito.Mockito.mock; |
| 63 | +import static org.mockito.Mockito.notNull; |
| 64 | +import static org.mockito.Mockito.reset; |
| 65 | +import static org.mockito.Mockito.same; |
| 66 | +import static org.mockito.Mockito.verify; |
| 67 | +import static org.mockito.Mockito.verifyNoMoreInteractions; |
| 68 | +import static org.mockito.Mockito.when; |
53 | 69 |
|
54 | 70 | /**
|
55 | 71 | * Unit tests for {@link DefaultStompSession}.
|
@@ -82,7 +98,9 @@ public void setUp() {
|
82 | 98 | this.sessionHandler = mock(StompSessionHandler.class);
|
83 | 99 | this.connectHeaders = new StompHeaders();
|
84 | 100 | this.session = new DefaultStompSession(this.sessionHandler, this.connectHeaders);
|
85 |
| - this.session.setMessageConverter(new StringMessageConverter()); |
| 101 | + this.session.setMessageConverter( |
| 102 | + new CompositeMessageConverter( |
| 103 | + Arrays.asList(new StringMessageConverter(), new ByteArrayMessageConverter()))); |
86 | 104 |
|
87 | 105 | SettableListenableFuture<Void> future = new SettableListenableFuture<>();
|
88 | 106 | future.set(null);
|
@@ -110,7 +128,7 @@ public void afterConnected() {
|
110 | 128 | @Test // SPR-16844
|
111 | 129 | public void afterConnectedWithSpecificVersion() {
|
112 | 130 | assertFalse(this.session.isConnected());
|
113 |
| - this.connectHeaders.setAcceptVersion(new String[] {"1.1"}); |
| 131 | + this.connectHeaders.setAcceptVersion("1.1"); |
114 | 132 |
|
115 | 133 | this.session.afterConnected(this.connection);
|
116 | 134 |
|
@@ -388,6 +406,26 @@ public void sendWithReceipt() {
|
388 | 406 | assertEquals("my-receipt", accessor.getReceipt());
|
389 | 407 | }
|
390 | 408 |
|
| 409 | + @Test // gh-23358 |
| 410 | + public void sendByteArray() { |
| 411 | + this.session.afterConnected(this.connection); |
| 412 | + assertTrue(this.session.isConnected()); |
| 413 | + |
| 414 | + String destination = "/topic/foo"; |
| 415 | + String payload = "sample payload"; |
| 416 | + this.session.send(destination, payload.getBytes(StandardCharsets.UTF_8)); |
| 417 | + |
| 418 | + Message<byte[]> message = this.messageCaptor.getValue(); |
| 419 | + StompHeaderAccessor accessor = MessageHeaderAccessor.getAccessor(message, StompHeaderAccessor.class); |
| 420 | + |
| 421 | + StompHeaders stompHeaders = StompHeaders.readOnlyStompHeaders(accessor.getNativeHeaders()); |
| 422 | + assertEquals(stompHeaders.toString(), 2, stompHeaders.size()); |
| 423 | + |
| 424 | + assertEquals(destination, stompHeaders.getDestination()); |
| 425 | + assertEquals(MimeTypeUtils.APPLICATION_OCTET_STREAM, stompHeaders.getContentType()); |
| 426 | + assertEquals(payload, new String(message.getPayload(), StandardCharsets.UTF_8)); |
| 427 | + } |
| 428 | + |
391 | 429 | @Test
|
392 | 430 | public void sendWithConversionException() {
|
393 | 431 | this.session.afterConnected(this.connection);
|
|
0 commit comments