mirror of
				https://github.com/Telecominfraproject/wlan-cloud-lib-cppkafka.git
				synced 2025-10-31 18:47:48 +00:00 
			
		
		
		
	 46c396f729
			
		
	
	46c396f729
	
	
	
		
			
			* Pause a consumer by topic * Changes per review comments * convert rvalue to value * Refactored code to provide a more generic way of getting partition subsets * Changes per code review and added test cases * Modified loop to use binary search instead of linear * Simplify find_matches test cases
		
			
				
	
	
		
			88 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			88 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #include <sstream>
 | |
| #include <catch.hpp>
 | |
| #include "cppkafka/topic_partition_list.h"
 | |
| #include "cppkafka/topic_partition.h"
 | |
| 
 | |
| using std::ostringstream;
 | |
| using std::set;
 | |
| using std::string;
 | |
| 
 | |
| using namespace cppkafka;
 | |
| 
 | |
| TEST_CASE("rdkafka conversion", "[topic_partition]") {
 | |
|     TopicPartitionList list1;
 | |
|     list1.push_back("foo");
 | |
|     list1.push_back({ "bar", 2 });
 | |
|     list1.push_back({ "asd", 2, TopicPartition::OFFSET_BEGINNING });
 | |
| 
 | |
|     TopicPartitionList list2 = convert(convert(list1));
 | |
| 
 | |
|     CHECK(list1.size() == list2.size());
 | |
|     for (size_t i = 0; i < list1.size(); ++i) {
 | |
|         const auto& item1 = list1[i];
 | |
|         const auto& item2 = list2[i];
 | |
|         CHECK(item1.get_topic() == item2.get_topic());
 | |
|         CHECK(item1.get_partition() == item2.get_partition());
 | |
|         CHECK(item1.get_offset() == item2.get_offset());
 | |
|     }
 | |
| }
 | |
| 
 | |
| TEST_CASE("topic partition to string", "[topic_partition]") {
 | |
|     ostringstream output;
 | |
|     TopicPartition topic_partition("foo", 5);
 | |
|     output << topic_partition;
 | |
|     CHECK(output.str() == "foo[5:#]");
 | |
| }
 | |
| 
 | |
| TEST_CASE("topic partition list to string", "[topic_partition]") {
 | |
|     ostringstream output;
 | |
|     TopicPartitionList list;
 | |
|     list.push_back("foo");
 | |
|     list.push_back({ "bar", 2 });
 | |
|     list.push_back({ "foobar", 3, 4 });
 | |
| 
 | |
|     output << list;
 | |
|     CHECK(output.str() == "[ foo[-1:#], bar[2:#], foobar[3:4] ]");
 | |
| }
 | |
| 
 | |
| TEST_CASE("find matches by topic", "[topic_partition]") {
 | |
|     const TopicPartitionList list = {
 | |
|         { "foo", 0 },
 | |
|         { "bar", 3 },
 | |
|         { "fb",  1 },
 | |
|         { "foo", 1 },
 | |
|         { "fb",  2 },
 | |
|         { "other", 1 },
 | |
|         { "a",   1 }
 | |
|     };
 | |
| 
 | |
|     const TopicPartitionList expected = {
 | |
|         { "foo", 0 },  
 | |
|         { "fb", 1 },
 | |
|         { "foo", 1 },
 | |
|         { "fb", 2 },
 | |
|     };
 | |
|     const TopicPartitionList subset = find_matches(list, set<string>{"foo", "fb"});
 | |
|     CHECK(subset == expected);
 | |
| }
 | |
| 
 | |
| TEST_CASE("find matches by id", "[topic_partition]") {
 | |
|     const TopicPartitionList list = {
 | |
|         { "foo", 2 },
 | |
|         { "foo", 3 },
 | |
|         { "foo", 4 },
 | |
|         { "foo", 5 },
 | |
|         { "foo", 6 },
 | |
|         { "foo", 7 },
 | |
|         { "foo", 8 }
 | |
|     };
 | |
| 
 | |
|     const TopicPartitionList expected = {
 | |
|         { "foo", 2 },
 | |
|         { "foo", 5 },
 | |
|         { "foo", 8 },
 | |
|     };
 | |
|     const TopicPartitionList subset = find_matches(list, set<int>{2,5,8});
 | |
|     CHECK(subset == expected);
 | |
| }
 |