From f5a0f735e7bb47aa48bada5e0bbfd47e5e104ea2 Mon Sep 17 00:00:00 2001 From: Yunze Xu Date: Thu, 1 Dec 2022 10:41:14 +0800 Subject: [PATCH 1/4] Fix gtest failure From fdd7b878e82554311b439e3708e238fe8402e157 Mon Sep 17 00:00:00 2001 From: Yunze Xu Date: Thu, 1 Dec 2022 12:27:57 +0800 Subject: [PATCH 2/4] Add operator<< for const reference --- tests/KeyValueSchemaTest.cc | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/tests/KeyValueSchemaTest.cc b/tests/KeyValueSchemaTest.cc index 02b55ee4..19295b64 100644 --- a/tests/KeyValueSchemaTest.cc +++ b/tests/KeyValueSchemaTest.cc @@ -25,6 +25,12 @@ using namespace pulsar; static const std::string lookupUrl = "pulsar://localhost:6650"; +// NOTE: the default operator<< for KeyValueEncodingType (value, not const reference) might not work on some +// GTest implementations. We need to implement the operator<< for const reference. +inline std::ostream& operator<<(std::ostream& os, const KeyValueEncodingType& encodingType) { + return (os << strEncodingType(encodingType)); +} + class KeyValueSchemaTest : public ::testing::TestWithParam { public: void TearDown() override { client.close(); } @@ -85,5 +91,5 @@ TEST_P(KeyValueSchemaTest, testKeyValueSchema) { ASSERT_EQ(keyValueData.getValueAsString(), valueData); } -INSTANTIATE_TEST_CASE_P(Pulsar, KeyValueSchemaTest, - ::testing::Values(KeyValueEncodingType::INLINE, KeyValueEncodingType::SEPARATED)); +INSTANTIATE_TEST_SUITE_P(Pulsar, KeyValueSchemaTest, + ::testing::Values(KeyValueEncodingType::INLINE, KeyValueEncodingType::SEPARATED)); From 53eea1ddb438bc453ad005d641e439b8d1b1c873 Mon Sep 17 00:00:00 2001 From: Yunze Xu Date: Thu, 1 Dec 2022 13:31:02 +0800 Subject: [PATCH 3/4] stick to ubuntu-22.04 runner image --- .github/workflows/ci-pr-validation.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci-pr-validation.yaml b/.github/workflows/ci-pr-validation.yaml index db0667aa..8abdee58 100644 --- a/.github/workflows/ci-pr-validation.yaml +++ b/.github/workflows/ci-pr-validation.yaml @@ -31,7 +31,7 @@ jobs: unit-tests: name: Run unit tests - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 timeout-minutes: 120 steps: From 8b20a6949cd166910f10d5565fbad6d966b9663f Mon Sep 17 00:00:00 2001 From: Yunze Xu Date: Thu, 1 Dec 2022 14:09:49 +0800 Subject: [PATCH 4/4] Pass int to TestWithParam --- tests/KeyValueSchemaTest.cc | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/tests/KeyValueSchemaTest.cc b/tests/KeyValueSchemaTest.cc index 19295b64..d0375b96 100644 --- a/tests/KeyValueSchemaTest.cc +++ b/tests/KeyValueSchemaTest.cc @@ -25,16 +25,14 @@ using namespace pulsar; static const std::string lookupUrl = "pulsar://localhost:6650"; -// NOTE: the default operator<< for KeyValueEncodingType (value, not const reference) might not work on some -// GTest implementations. We need to implement the operator<< for const reference. -inline std::ostream& operator<<(std::ostream& os, const KeyValueEncodingType& encodingType) { - return (os << strEncodingType(encodingType)); -} - -class KeyValueSchemaTest : public ::testing::TestWithParam { +// NOTE: Here we use int instead of KeyValueEncodingType because of a bug of GTest with GCC 11, see +// https://github.com/google/googletest/issues/4079 +class KeyValueSchemaTest : public ::testing::TestWithParam { public: void TearDown() override { client.close(); } + KeyValueEncodingType getEncodingType() const { return static_cast(GetParam()); } + void createProducer(const std::string& topic, Producer& producer) { ProducerConfiguration configProducer; configProducer.setSchema(getKeyValueSchema()); @@ -51,7 +49,7 @@ class KeyValueSchemaTest : public ::testing::TestWithParam SchemaInfo getKeyValueSchema() { SchemaInfo keySchema(JSON, "key-json", jsonSchema); SchemaInfo valueSchema(JSON, "value-json", jsonSchema); - return SchemaInfo(keySchema, valueSchema, GetParam()); + return SchemaInfo(keySchema, valueSchema, getEncodingType()); } private: @@ -61,7 +59,7 @@ class KeyValueSchemaTest : public ::testing::TestWithParam }; TEST_P(KeyValueSchemaTest, testKeyValueSchema) { - auto encodingType = GetParam(); + auto encodingType = getEncodingType(); const std::string topicName = "testKeyValueSchema-" + std::string(strEncodingType(encodingType)) + std::to_string(time(nullptr));