Skip to content

Commit 32b8580

Browse files
committed
Test non-ASCII characters in entity names
1 parent cd4a573 commit 32b8580

File tree

2 files changed

+23
-10
lines changed

2 files changed

+23
-10
lines changed

src/main/qpid/org/apache/qpid/protonj2/codec/decoders/ProtonDecoderState.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ private static String internalDecodeUTF8(final ProtonBuffer buffer, final int le
128128

129129
// Create a buffer from the remaining portion of the buffer and then use the decoder to complete the work
130130
// remember to move the main buffer position to consume the data processed.
131-
ByteBuffer byteBuffer = ByteBuffer.allocate(buffer.getReadableBytes());
131+
ByteBuffer byteBuffer = ByteBuffer.allocate(length - offset);
132132

133133
buffer.copyInto(buffer.getReadOffset(), byteBuffer, 0, length - offset);
134134
buffer.advanceReadOffset(length - offset);

src/test/java/com/rabbitmq/client/amqp/impl/AmqpTest.java

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
import org.junit.jupiter.api.*;
4545
import org.junit.jupiter.api.extension.ExtendWith;
4646
import org.junit.jupiter.params.ParameterizedTest;
47+
import org.junit.jupiter.params.provider.CsvSource;
4748
import org.junit.jupiter.params.provider.ValueSource;
4849

4950
@ExtendWith(AmqpTestInfrastructureExtension.class)
@@ -79,8 +80,9 @@ void queueInfoTest() {
7980
}
8081
}
8182

82-
@Test
83-
void queueDeclareDeletePublishConsume() {
83+
@ParameterizedTest
84+
@ValueSource(strings = {"foobar", "фообар"})
85+
void queueDeclareDeletePublishConsume(String subject) {
8486
try {
8587
connection.management().queue().name(name).quorum().queue().declare();
8688
Publisher publisher = connection.publisherBuilder().queue(name).build();
@@ -92,7 +94,10 @@ void queueDeclareDeletePublishConsume() {
9294
ignored -> {
9395
UUID messageId = UUID.randomUUID();
9496
publisher.publish(
95-
publisher.message("hello".getBytes(UTF_8)).messageId(messageId),
97+
publisher
98+
.message("hello".getBytes(UTF_8))
99+
.messageId(messageId)
100+
.subject(subject),
96101
acceptedCallback(confirmSync));
97102
});
98103

@@ -101,18 +106,21 @@ void queueDeclareDeletePublishConsume() {
101106
Management.QueueInfo queueInfo = connection.management().queueInfo(name);
102107
assertThat(queueInfo).hasName(name).hasNoConsumers().hasMessageCount(messageCount);
103108

109+
AtomicReference<String> receivedSubject = new AtomicReference<>();
104110
CountDownLatch consumeLatch = new CountDownLatch(messageCount);
105111
com.rabbitmq.client.amqp.Consumer consumer =
106112
connection
107113
.consumerBuilder()
108114
.queue(name)
109115
.messageHandler(
110116
(context, message) -> {
117+
receivedSubject.set(message.subject());
111118
context.accept();
112119
consumeLatch.countDown();
113120
})
114121
.build();
115122
Assertions.assertThat(consumeLatch).is(completed());
123+
assertThat(receivedSubject).doesNotHaveNullValue().hasValue(subject);
116124

117125
queueInfo = connection.management().queueInfo(name);
118126
assertThat(queueInfo).hasConsumerCount(1).isEmpty();
@@ -125,12 +133,17 @@ void queueDeclareDeletePublishConsume() {
125133
}
126134

127135
@ParameterizedTest
128-
@ValueSource(booleans = {false, true})
129-
void binding(boolean addBindingArguments, TestInfo info) {
130-
String e1 = TestUtils.name(info);
131-
String e2 = TestUtils.name(info);
132-
String q = TestUtils.name(info);
133-
String rk = "foo";
136+
@CsvSource({
137+
"foo,false",
138+
"foo,true",
139+
"фообар,true",
140+
"фообар,false",
141+
})
142+
void binding(String prefix, boolean addBindingArguments, TestInfo info) {
143+
String e1 = prefix + "-" + TestUtils.name(info);
144+
String e2 = prefix + "-" + TestUtils.name(info);
145+
String q = prefix + "-" + TestUtils.name(info);
146+
String rk = prefix + "-" + "foo";
134147
Map<String, Object> bindingArguments =
135148
addBindingArguments ? singletonMap("foo", "bar") : emptyMap();
136149
Management management = connection.management();

0 commit comments

Comments
 (0)