Skip to content

Commit cb2c887

Browse files
authored
Move tests to use catch instead of googletest (#56)
* Port buffer test to use Catch2 * Move compacted topic processor test to Catch2 * Move configuration tests to Catch2 * Rename configuration test cases * Move topic partition list test to Catch2 * Move handle base tests to Catch2 * Move producer tests to Catch2 * Move consumer tests to catch2 * Use CHECK on tests when appropriate * Remove googletest * Show tests' progress as they run * Update message when Catch2 is not checked out * Remove references to googletest * Run cppkafka_tests manually on travis * Print amount of time taken by each test case
1 parent 30b3652 commit cb2c887

14 files changed

+512
-514
lines changed

Diff for: .gitmodules

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
[submodule "third_party/googletest"]
2-
path = third_party/googletest
3-
url = https://github.com/google/googletest.git
1+
[submodule "third_party/Catch2"]
2+
path = third_party/Catch2
3+
url = https://github.com/catchorg/Catch2.git

Diff for: .travis.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -40,4 +40,4 @@ script:
4040
- cmake .. -DRDKAFKA_ROOT_DIR=../librdkafka/install/ -DKAFKA_TEST_INSTANCE=localhost:9092
4141
- make examples
4242
- make tests
43-
- ctest -V
43+
- ./tests/cppkafka_tests

Diff for: CMakeLists.txt

+4-20
Original file line numberDiff line numberDiff line change
@@ -62,30 +62,14 @@ if(DOXYGEN_FOUND)
6262
endif(DOXYGEN_FOUND)
6363

6464
if(NOT CPPKAFKA_DISABLE_TESTS)
65-
set(GOOGLETEST_ROOT ${CMAKE_SOURCE_DIR}/third_party/googletest)
66-
if(EXISTS "${GOOGLETEST_ROOT}/CMakeLists.txt")
67-
set(GOOGLETEST_INCLUDE ${GOOGLETEST_ROOT}/googletest/include)
68-
set(GOOGLETEST_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/googletest)
69-
set(GOOGLETEST_LIBRARY ${GOOGLETEST_BINARY_DIR}/googletest)
70-
71-
include(ExternalProject)
72-
73-
ExternalProject_Add(
74-
googletest
75-
DOWNLOAD_COMMAND ""
76-
SOURCE_DIR ${GOOGLETEST_ROOT}
77-
BINARY_DIR ${GOOGLETEST_BINARY_DIR}
78-
CMAKE_CACHE_ARGS "-DBUILD_GTEST:bool=ON" "-DBUILD_GMOCK:bool=OFF"
79-
"-Dgtest_force_shared_crt:bool=ON"
80-
INSTALL_COMMAND ""
81-
)
65+
set(CATCH_ROOT ${CMAKE_SOURCE_DIR}/third_party/Catch2)
66+
if(EXISTS ${CATCH_ROOT}/CMakeLists.txt)
67+
set(CATCH_INCLUDE ${CATCH_ROOT}/single_include)
8268

8369
enable_testing()
8470
add_subdirectory(tests)
85-
# Make sure we build googletest before anything else
86-
add_dependencies(cppkafka googletest)
8771
else()
88-
message(STATUS "Disabling tests because submodule googletest isn't pulled out")
72+
message(STATUS "Disabling tests because submodule Catch2 isn't checked out")
8973
endif()
9074
endif()
9175

Diff for: tests/CMakeLists.txt

+20-20
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,31 @@
1-
include_directories(${GOOGLETEST_INCLUDE})
21
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../include/)
2+
include_directories(SYSTEM ${CATCH_INCLUDE})
33
include_directories(SYSTEM ${Boost_INCLUDE_DIRS} ${RDKAFKA_INCLUDE_DIR})
44

5-
link_directories(${GOOGLETEST_LIBRARY})
6-
link_libraries(cppkafka ${RDKAFKA_LIBRARY} gtest gtest_main pthread)
7-
85
set(KAFKA_TEST_INSTANCE "kafka-vm:9092"
96
CACHE STRING "The kafka instance to which to connect to run tests")
107
add_custom_target(tests)
118

12-
macro(create_test test_name)
13-
add_executable(${test_name}_test EXCLUDE_FROM_ALL "${test_name}_test.cpp")
14-
add_test(${test_name} ${test_name}_test)
15-
add_dependencies(tests ${test_name}_test)
16-
add_dependencies(${test_name}_test cppkafka)
17-
target_link_libraries(${test_name}_test cppkafka-test)
18-
endmacro()
19-
209
include_directories(${CMAKE_CURRENT_SOURCE_DIR})
2110
add_library(cppkafka-test EXCLUDE_FROM_ALL test_utils.cpp)
22-
add_dependencies(cppkafka-test cppkafka)
11+
target_link_libraries(cppkafka-test cppkafka ${RDKAFKA_LIBRARY} pthread)
2312

2413
add_definitions("-DKAFKA_TEST_INSTANCE=\"${KAFKA_TEST_INSTANCE}\"")
25-
create_test(consumer)
26-
create_test(producer)
27-
create_test(kafka_handle_base)
28-
create_test(topic_partition_list)
29-
create_test(configuration)
30-
create_test(buffer)
31-
create_test(compacted_topic_processor)
14+
15+
add_executable(
16+
cppkafka_tests
17+
EXCLUDE_FROM_ALL
18+
buffer_test.cpp
19+
compacted_topic_processor_test.cpp
20+
configuration_test.cpp
21+
topic_partition_list_test.cpp
22+
kafka_handle_base_test.cpp
23+
producer_test.cpp
24+
consumer_test.cpp
25+
26+
# Main file
27+
test_main.cpp
28+
)
29+
target_link_libraries(cppkafka_tests cppkafka-test)
30+
add_dependencies(tests cppkafka_tests)
31+
add_test(cppkafka cppkafka_tests)

Diff for: tests/buffer_test.cpp

+38-48
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#include <string>
22
#include <vector>
33
#include <sstream>
4-
#include <gtest/gtest.h>
4+
#include <catch.hpp>
55
#include "cppkafka/buffer.h"
66

77
using std::string;
@@ -10,69 +10,59 @@ using std::ostringstream;
1010

1111
using namespace cppkafka;
1212

13-
class BufferTest : public testing::Test {
14-
public:
15-
16-
};
13+
TEST_CASE("conversions", "[buffer]") {
14+
const string data = "Hello world!";
15+
const Buffer buffer(data);
16+
const Buffer empty_buffer;
1717

18-
TEST_F(BufferTest, OperatorBool) {
19-
string data = "Hello world!";
20-
Buffer buffer1(data);
21-
Buffer buffer2;
2218

23-
EXPECT_TRUE(buffer1);
24-
EXPECT_FALSE(buffer2);
25-
}
19+
SECTION("bool conversion") {
20+
CHECK(!!buffer == true);
21+
CHECK(!!empty_buffer == false);
22+
}
2623

27-
TEST_F(BufferTest, StringConversion) {
28-
string data = "Hello world!";
29-
Buffer buffer(data);
30-
string buffer_as_string = buffer;
31-
EXPECT_EQ(data, buffer_as_string);
32-
}
24+
SECTION("string conversion") {
25+
CHECK(static_cast<string>(buffer) == data);
26+
CHECK(static_cast<string>(empty_buffer).empty());
27+
}
3328

34-
TEST_F(BufferTest, StringConversionOnEmptyBuffer) {
35-
Buffer buffer;
36-
EXPECT_EQ("", static_cast<string>(buffer));
29+
SECTION("vector conversion") {
30+
const vector<char> buffer_as_vector = buffer;
31+
CHECK(string(buffer_as_vector.begin(), buffer_as_vector.end()) == data);
32+
}
3733
}
3834

39-
TEST_F(BufferTest, VectorConversion) {
40-
string data = "Hello world!";
41-
Buffer buffer(data);
42-
vector<char> buffer_as_vector = buffer;
43-
EXPECT_EQ(data, string(buffer_as_vector.begin(), buffer_as_vector.end()));
44-
}
45-
46-
TEST_F(BufferTest, VectorConstruction) {
35+
TEST_CASE("construction", "[buffer]") {
4736
const string str_data = "Hello world!";
4837
const vector<uint8_t> data(str_data.begin(), str_data.end());
49-
Buffer buffer(data);
50-
EXPECT_EQ(str_data, buffer);
38+
const Buffer buffer(data);
39+
CHECK(str_data == buffer);
5140
}
5241

53-
TEST_F(BufferTest, Equality) {
54-
string data = "Hello world!";
55-
Buffer buffer1(data);
56-
Buffer buffer2(data);
5742

58-
EXPECT_EQ(buffer1, buffer2);
59-
}
43+
TEST_CASE("comparison", "[buffer]") {
44+
const string data = "Hello world!";
45+
const Buffer buffer1(data);
46+
const Buffer buffer2(data);
47+
const Buffer empty_buffer;
6048

61-
TEST_F(BufferTest, InEquality) {
62-
string data1 = "Hello world!";
63-
string data2 = "Hello worldz";
64-
Buffer buffer1(data1);
65-
Buffer buffer2(data2);
49+
SECTION("equality") {
50+
CHECK(buffer1 == buffer2);
51+
CHECK(buffer2 == buffer1);
52+
}
6653

67-
EXPECT_NE(buffer1, buffer2);
54+
SECTION("inequality") {
55+
CHECK(buffer1 != empty_buffer);
56+
CHECK(empty_buffer != buffer1);
57+
}
6858
}
6959

70-
TEST_F(BufferTest, OutputOperator) {
71-
string data = "Hello \x7fwor\x03ld!";
72-
string pretty_string = "Hello \\x7fwor\\x03ld!";
73-
Buffer buffer(data);
60+
TEST_CASE("stream extraction", "[buffer]") {
61+
const string data = "Hello \x7fwor\x03ld!";
62+
const string pretty_string = "Hello \\x7fwor\\x03ld!";
63+
const Buffer buffer(data);
7464

7565
ostringstream output;
7666
output << buffer;
77-
EXPECT_EQ(pretty_string, output.str());
67+
CHECK(output.str() == pretty_string );
7868
}

Diff for: tests/compacted_topic_processor_test.cpp

+23-28
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
#include <set>
55
#include <map>
66
#include <condition_variable>
7-
#include <gtest/gtest.h>
7+
#include <catch.hpp>
88
#include "cppkafka/producer.h"
99
#include "cppkafka/consumer.h"
1010
#include "cppkafka/utils/compacted_topic_processor.h"
@@ -29,28 +29,23 @@ using std::chrono::milliseconds;
2929

3030
using namespace cppkafka;
3131

32-
class CompactedTopicProcessorTest : public testing::Test {
33-
public:
34-
static const string KAFKA_TOPIC;
32+
static const string KAFKA_TOPIC = "cppkafka_test1";
3533

36-
Configuration make_producer_config() {
37-
Configuration config;
38-
config.set("metadata.broker.list", KAFKA_TEST_INSTANCE);
39-
return config;
40-
}
41-
42-
Configuration make_consumer_config() {
43-
Configuration config;
44-
config.set("metadata.broker.list", KAFKA_TEST_INSTANCE);
45-
config.set("enable.auto.commit", false);
46-
config.set("group.id", "compacted_topic_test");
47-
return config;
48-
}
49-
};
34+
static Configuration make_producer_config() {
35+
Configuration config;
36+
config.set("metadata.broker.list", KAFKA_TEST_INSTANCE);
37+
return config;
38+
}
5039

51-
const string CompactedTopicProcessorTest::KAFKA_TOPIC = "cppkafka_test1";
40+
static Configuration make_consumer_config() {
41+
Configuration config;
42+
config.set("metadata.broker.list", KAFKA_TEST_INSTANCE);
43+
config.set("enable.auto.commit", false);
44+
config.set("group.id", "compacted_topic_test");
45+
return config;
46+
}
5247

53-
TEST_F(CompactedTopicProcessorTest, Consume) {
48+
TEST_CASE("consumption", "[consumer][compacted]") {
5449
Consumer consumer(make_consumer_config());
5550
// We'll use ints as the key, strings as the value
5651
using CompactedConsumer = CompactedTopicProcessor<int, string>;
@@ -101,27 +96,27 @@ TEST_F(CompactedTopicProcessorTest, Consume) {
10196

10297
size_t set_count = 0;
10398
size_t delete_count = 0;
104-
ASSERT_FALSE(events.empty());
99+
CHECK(events.empty() == false);
105100
for (const Event& event : events) {
106101
switch (event.get_type()) {
107102
case Event::SET_ELEMENT:
108103
{
109104
auto iter = elements.find(to_string(event.get_key()));
110-
ASSERT_NE(iter, elements.end());
111-
EXPECT_EQ(iter->second.value, event.get_value());
112-
EXPECT_EQ(iter->second.partition, event.get_partition());
105+
REQUIRE(iter != elements.end());
106+
CHECK(iter->second.value == event.get_value());
107+
CHECK(iter->second.partition == event.get_partition());
113108
set_count++;
114109
}
115110
break;
116111
case Event::DELETE_ELEMENT:
117-
EXPECT_EQ(0, event.get_partition());
118-
EXPECT_EQ(42, event.get_key());
112+
CHECK(event.get_partition() == 0);
113+
CHECK(event.get_key() == 42);
119114
delete_count++;
120115
break;
121116
default:
122117
break;
123118
}
124119
}
125-
EXPECT_EQ(2, set_count);
126-
EXPECT_EQ(1, delete_count);
120+
CHECK(set_count == 2);
121+
CHECK(delete_count == 1);
127122
}

0 commit comments

Comments
 (0)