This is an automated email from the ASF dual-hosted git repository.

xyz pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/pulsar-client-cpp.git


The following commit(s) were added to refs/heads/main by this push:
     new 9bfed6d  Fix testSchemaIncompatibility for Protobuf 3.20.0 or later 
(#282)
9bfed6d is described below

commit 9bfed6d32bb6e281294381da2f7176cffe0aef13
Author: Yunze Xu <[email protected]>
AuthorDate: Tue Jun 13 20:03:04 2023 +0800

    Fix testSchemaIncompatibility for Protobuf 3.20.0 or later (#282)
    
    fixes https://github.com/apache/pulsar-client-cpp/issues/193
    
    ### Motivation
    
    `getExternalMessageDescriptor` returns the descriptor of `TestMessage`
    rather than `ExternalMessage` for Protobuf 3.20.0 or later. And the
    conditional compilation is meaningless here because `GetDescriptor` is
    always a static method while it didn't exist for some early versions of
    Protobuf. The official documentation suggests using `descriptor()`.
    
    ### Modifications
    
    Use `descriptor()` method to get the descriptor of a PB class.
---
 tests/ProtobufNativeSchemaTest.cc | 42 ++++++++-------------------------------
 1 file changed, 8 insertions(+), 34 deletions(-)

diff --git a/tests/ProtobufNativeSchemaTest.cc 
b/tests/ProtobufNativeSchemaTest.cc
index 37bd780..32719bd 100644
--- a/tests/ProtobufNativeSchemaTest.cc
+++ b/tests/ProtobufNativeSchemaTest.cc
@@ -29,33 +29,6 @@ using namespace pulsar;
 
 static std::string lookupUrl = "pulsar://localhost:6650";
 
-const ::google::protobuf::Descriptor* getTestMessageDescriptor() {
-#if GOOGLE_PROTOBUF_VERSION < 3020000
-    ::proto::TestMessage msg;
-    return msg.GetDescriptor();
-#else
-    return ::proto::TestMessage::GetDescriptor();
-#endif
-}
-
-const ::google::protobuf::Descriptor* getExternalMessageDescriptor() {
-#if GOOGLE_PROTOBUF_VERSION < 3020000
-    ::proto::external::ExternalMessage msg;
-    return msg.GetDescriptor();
-#else
-    return ::proto::TestMessage::GetDescriptor();
-#endif
-}
-
-const ::google::protobuf::Descriptor* getDemoPersonDescriptor() {
-#if GOOGLE_PROTOBUF_VERSION < 3020000
-    ::padding::demo::Person p;
-    return p.GetDescriptor();
-#else
-    return ::padding::demo::Person::GetDescriptor();
-#endif
-}
-
 TEST(ProtobufNativeSchemaTest, testSchemaJson) {
     const std::string expectedSchemaJson =
         "{\"fileDescriptorSet\":"
@@ -69,7 +42,7 @@ TEST(ProtobufNativeSchemaTest, testSchemaJson) {
         
"NzYWdlEhMKC3N0cmluZ0ZpZWxkGAEgASgJEhMKC2RvdWJsZUZpZWxkGAIgASgBQjUKJW9yZy5hcGFjaGUucHVsc2FyLmNsaWVudC"
         
"5zY2hlbWEucHJvdG9CDEV4dGVybmFsVGVzdGIGcHJvdG8z\",\"rootMessageTypeName\":\"proto.TestMessage\","
         "\"rootFileDescriptorName\":\"Test.proto\"}";
-    const auto schemaInfo = 
createProtobufNativeSchema(getTestMessageDescriptor());
+    const auto schemaInfo = 
createProtobufNativeSchema(::proto::TestMessage::descriptor());
 
     ASSERT_EQ(schemaInfo.getSchemaType(), pulsar::PROTOBUF_NATIVE);
     ASSERT_TRUE(schemaInfo.getName().empty());
@@ -81,7 +54,7 @@ TEST(ProtobufNativeSchemaTest, testAutoCreateSchema) {
     const std::string topicPrefix = 
"ProtobufNativeSchemaTest-testAutoCreateSchema-";
     Client client(lookupUrl);
 
-    const auto schemaInfo = 
createProtobufNativeSchema(getTestMessageDescriptor());
+    const auto schemaInfo = 
createProtobufNativeSchema(::proto::TestMessage::descriptor());
     Producer producer;
     ASSERT_EQ(ResultOk, client.createProducer(topicPrefix + "producer",
                                               
ProducerConfiguration().setSchema(schemaInfo), producer));
@@ -102,14 +75,15 @@ TEST(ProtobufNativeSchemaTest, testSchemaIncompatibility) {
     };
 
     // Create the protobuf native schema automatically
-    ASSERT_EQ(ResultOk, createProducerResult(getTestMessageDescriptor()));
+    ASSERT_EQ(ResultOk, 
createProducerResult(::proto::TestMessage::descriptor()));
     producer.close();
 
     // Try to create producer with another protobuf generated class
-    ASSERT_EQ(ResultIncompatibleSchema, 
createProducerResult(getExternalMessageDescriptor()));
+    ASSERT_EQ(ResultIncompatibleSchema,
+              
createProducerResult(::proto::external::ExternalMessage::descriptor()));
 
     // Try to create producer with the original schema again
-    ASSERT_EQ(ResultOk, createProducerResult(getTestMessageDescriptor()));
+    ASSERT_EQ(ResultOk, 
createProducerResult(::proto::TestMessage::descriptor()));
 
     // createProtobufNativeSchema() cannot accept a null descriptor
     try {
@@ -125,7 +99,7 @@ TEST(ProtobufNativeSchemaTest, testEndToEnd) {
     const std::string topic = "ProtobufSchemaTest-testEndToEnd";
     Client client(lookupUrl);
 
-    const auto schemaInfo = 
createProtobufNativeSchema(getTestMessageDescriptor());
+    const auto schemaInfo = 
createProtobufNativeSchema(::proto::TestMessage::descriptor());
     Consumer consumer;
     ASSERT_EQ(ResultOk,
               client.subscribe(topic, "my-sub", 
ConsumerConfiguration().setSchema(schemaInfo), consumer));
@@ -156,7 +130,7 @@ TEST(ProtobufNativeSchemaTest, testEndToEnd) {
 }
 
 TEST(ProtobufNativeSchemaTest, testBase64WithPadding) {
-    const auto schemaInfo = 
createProtobufNativeSchema(getDemoPersonDescriptor());
+    const auto schemaInfo = 
createProtobufNativeSchema(::padding::demo::Person::descriptor());
     const auto schemaJson = schemaInfo.getSchema();
     size_t pos = schemaJson.find(R"(","rootMessageTypeName":)");
     ASSERT_NE(pos, std::string::npos);

Reply via email to