BewareMyPower commented on a change in pull request #10968:
URL: https://github.com/apache/pulsar/pull/10968#discussion_r654347222
##########
File path:
pulsar-client/src/test/java/org/apache/pulsar/client/impl/MessageImplTest.java
##########
@@ -483,4 +483,55 @@ public void
testMessageBrokerAndEntryMetadataTimestampMissed() {
fail();
}
}
+
+ @Test(timeOut = 30000)
+ public void testParseMessageMetadataWithBrokerEntryMetadata() {
+ int MOCK_BATCH_SIZE = 10;
+ String data = "test-message";
+ ByteBuf byteBuf = PulsarByteBufAllocator.DEFAULT.buffer(data.length(),
data.length());
+ byteBuf.writeBytes(data.getBytes(StandardCharsets.UTF_8));
+
+ // first, build a message with broker entry metadata
+
+ // build message metadata
+ MessageMetadata messageMetadata = new MessageMetadata()
+ .setPublishTime(1)
+ .setProducerName("test")
+ .setSequenceId(1);
+ byteBuf =
Commands.serializeMetadataAndPayload(Commands.ChecksumType.Crc32c,
messageMetadata, byteBuf);
+
+ // build broker entry metadata
+ BrokerEntryMetadata brokerMetadata = new BrokerEntryMetadata()
+ .setIndex(MOCK_BATCH_SIZE - 1);
+
+ // build final data which contains broker entry metadata
+ int brokerMetaSize = brokerMetadata.getSerializedSize();
+ ByteBuf brokerMeta =
PulsarByteBufAllocator.DEFAULT.buffer(brokerMetaSize + 6, brokerMetaSize + 6);
+ brokerMeta.writeShort(Commands.magicBrokerEntryMetadata);
+ brokerMeta.writeInt(brokerMetaSize);
+ brokerMetadata.writeTo(brokerMeta);
+
+ CompositeByteBuf compositeByteBuf =
PulsarByteBufAllocator.DEFAULT.compositeBuffer();
+ compositeByteBuf.addComponents(true, brokerMeta, byteBuf);
+
+ CompositeByteBuf dupCompositeByteBuf =
PulsarByteBufAllocator.DEFAULT.compositeBuffer();
+ dupCompositeByteBuf.addComponents(true, brokerMeta, byteBuf);
+
+ //second, parse message metadata without skip broker entry metadata
+ try {
+ Commands.skipChecksumIfPresent(compositeByteBuf);
+ int metadataSize = (int) compositeByteBuf.readUnsignedInt();
+ MessageMetadata md = new MessageMetadata();
+ md.parseFrom(compositeByteBuf, metadataSize);
+ Assert.fail("Parse operation should be failed.");
+ } catch (Exception e) {
+ // expected
+ }
Review comment:
In addition, I think it's better to make some invocations outside the
try block like
```java
Commands.skipChecksumIfPresent(compositeByteBuf);
int metadataSize = (int) compositeByteBuf.readUnsignedInt();
MessageMetadata md = new MessageMetadata();
try {
md.parseFrom(compositeByteBuf, metadataSize);
Assert.fail("Parse operation should be failed.");
} catch (IllegalArgumentException e) {
// expected
}
```
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]