@@ -15,10 +15,14 @@ use rdkafka::error::KafkaError;
1515use rdkafka:: topic_partition_list:: { Offset , TopicPartitionList } ;
1616use rdkafka:: util:: current_time_millis;
1717use rdkafka:: { Message , Timestamp } ;
18+ use rdkafka:: admin:: AdminOptions ;
1819use rdkafka_sys:: types:: RDKafkaConfRes ;
1920
21+ use crate :: utils:: containers:: KafkaContext ;
22+ use crate :: utils:: logging:: init_test_logger;
2023use crate :: utils:: rand:: * ;
2124use crate :: utils:: * ;
25+ use crate :: utils:: admin:: new_topic_vec;
2226
2327mod utils;
2428
@@ -71,27 +75,52 @@ async fn test_invalid_max_poll_interval() {
7175// All produced messages should be consumed.
7276#[ tokio:: test( flavor = "multi_thread" ) ]
7377async fn test_produce_consume_base ( ) {
74- let _r = env_logger:: try_init ( ) ;
78+ init_test_logger ( ) ;
79+
80+ // Get Kafka container context.
81+ let kafka_context = KafkaContext :: shared ( )
82+ . await
83+ . expect ( "could not create kafka context" ) ;
7584
85+ let producer = producer:: future_producer:: create_producer ( & kafka_context. bootstrap_servers )
86+ . await
87+ . expect ( "Could not create Future producer" ) ;
88+
89+ let num_of_messages_to_send = 100usize ;
7690 let start_time = current_time_millis ( ) ;
7791 let topic_name = rand_test_topic ( "test_produce_consume_base" ) ;
78- let message_map = populate_topic ( & topic_name, 100 , & value_fn, & key_fn, None , None ) . await ;
79- let consumer = create_stream_consumer ( & rand_test_group ( ) , None ) ;
80- consumer. subscribe ( & [ topic_name. as_str ( ) ] ) . unwrap ( ) ;
92+ let message_map = topics:: populate_topic_using_future_producer (
93+ & producer,
94+ & topic_name,
95+ num_of_messages_to_send,
96+ None ,
97+ )
98+ . await
99+ . expect ( "Could not populate topic using Future producer" ) ;
100+ // let message_map = populate_topic(&topic_name, 100, &value_fn, &key_fn, None, None).await;
101+ let consumer = utils:: consumer:: stream_consumer:: create_stream_consumer (
102+ & kafka_context. bootstrap_servers ,
103+ Some ( & rand_test_group ( ) ) ,
104+ )
105+ . await
106+ . expect ( "could not create stream consumer" ) ;
107+ consumer
108+ . subscribe ( & [ topic_name. as_str ( ) ] )
109+ . expect ( "could not subscribe to kafka topic" ) ;
81110
82- let _consumer_future = consumer
111+ consumer
83112 . stream ( )
84- . take ( 100 )
113+ . take ( num_of_messages_to_send )
85114 . for_each ( |message| {
86115 match message {
87116 Ok ( m) => {
88117 let id = message_map[ & ( m. partition ( ) , m. offset ( ) ) ] ;
89118 match m. timestamp ( ) {
90119 Timestamp :: CreateTime ( timestamp) => assert ! ( timestamp >= start_time) ,
91- _ => panic ! ( "Expected createtime for message timestamp" ) ,
120+ _ => panic ! ( "Expected create time for message timestamp" ) ,
92121 } ;
93- assert_eq ! ( m. payload_view:: <str >( ) . unwrap( ) . unwrap( ) , value_fn ( id ) ) ;
94- assert_eq ! ( m. key_view:: <str >( ) . unwrap( ) . unwrap( ) , key_fn ( id ) ) ;
122+ assert_eq ! ( m. payload_view:: <str >( ) . unwrap( ) . unwrap( ) , id . to_string ( ) ) ;
123+ assert_eq ! ( m. key_view:: <str >( ) . unwrap( ) . unwrap( ) , id . to_string ( ) ) ;
95124 assert_eq ! ( m. topic( ) , topic_name. as_str( ) ) ;
96125 }
97126 Err ( e) => panic ! ( "Error receiving message: {:?}" , e) ,
@@ -107,13 +136,39 @@ async fn test_produce_consume_base() {
107136/// waker slot.
108137#[ tokio:: test( flavor = "multi_thread" ) ]
109138async fn test_produce_consume_base_concurrent ( ) {
110- let _r = env_logger :: try_init ( ) ;
139+ init_test_logger ( ) ;
111140
112- let topic_name = rand_test_topic ( "test_produce_consume_base_concurrent" ) ;
113- populate_topic ( & topic_name, 100 , & value_fn, & key_fn, None , None ) . await ;
141+ // Get Kafka container context.
142+ let kafka_context = KafkaContext :: shared ( )
143+ . await
144+ . expect ( "could not create kafka context" ) ;
114145
115- let consumer = Arc :: new ( create_stream_consumer ( & rand_test_group ( ) , None ) ) ;
116- consumer. subscribe ( & [ topic_name. as_str ( ) ] ) . unwrap ( ) ;
146+ let producer = producer:: future_producer:: create_producer ( & kafka_context. bootstrap_servers )
147+ . await
148+ . expect ( "Could not create Future producer" ) ;
149+
150+ let num_of_messages_to_send = 100usize ;
151+ let topic_name = rand_test_topic ( "test_produce_consume_base_concurrent" ) ;
152+ topics:: populate_topic_using_future_producer (
153+ & producer,
154+ & topic_name,
155+ num_of_messages_to_send,
156+ None ,
157+ )
158+ . await
159+ . expect ( "Could not populate topic using Future producer" ) ;
160+ // let message_map = populate_topic(&topic_name, 100, &value_fn, &key_fn, None, None).await;
161+ let consumer = Arc :: new (
162+ consumer:: stream_consumer:: create_stream_consumer (
163+ & kafka_context. bootstrap_servers ,
164+ Some ( & rand_test_group ( ) ) ,
165+ )
166+ . await
167+ . expect ( "could not create stream consumer" ) ,
168+ ) ;
169+ consumer
170+ . subscribe ( & [ topic_name. as_str ( ) ] )
171+ . expect ( "could not subscribe to kafka topic" ) ;
117172
118173 let mk_task = || {
119174 let consumer = consumer. clone ( ) ;
@@ -137,13 +192,55 @@ async fn test_produce_consume_base_concurrent() {
137192// All produced messages should be consumed.
138193#[ tokio:: test( flavor = "multi_thread" ) ]
139194async fn test_produce_consume_base_assign ( ) {
140- let _r = env_logger:: try_init ( ) ;
195+ init_test_logger ( ) ;
196+
197+ // Get Kafka container context.
198+ let kafka_context = KafkaContext :: shared ( )
199+ . await
200+ . expect ( "could not create kafka context" ) ;
141201
142202 let topic_name = rand_test_topic ( "test_produce_consume_base_assign" ) ;
143- populate_topic ( & topic_name, 10 , & value_fn, & key_fn, Some ( 0 ) , None ) . await ;
144- populate_topic ( & topic_name, 10 , & value_fn, & key_fn, Some ( 1 ) , None ) . await ;
145- populate_topic ( & topic_name, 10 , & value_fn, & key_fn, Some ( 2 ) , None ) . await ;
146- let consumer = create_stream_consumer ( & rand_test_group ( ) , None ) ;
203+ let admin_client = admin:: create_admin_client ( & kafka_context. bootstrap_servers )
204+ . await
205+ . expect ( "Could not create admin client" ) ;
206+ admin_client. create_topics ( & new_topic_vec ( & topic_name, Some ( 3 ) ) , & AdminOptions :: default ( ) ) . await . expect ( "could not create topics" ) ;
207+
208+ let producer = producer:: future_producer:: create_producer ( & kafka_context. bootstrap_servers )
209+ . await
210+ . expect ( "Could not create Future producer" ) ;
211+
212+ let num_of_messages_to_send = 10usize ;
213+ topics:: populate_topic_using_future_producer (
214+ & producer,
215+ & topic_name,
216+ num_of_messages_to_send,
217+ Some ( 0 ) ,
218+ )
219+ . await
220+ . expect ( "Could not populate topic using Future producer" ) ;
221+ topics:: populate_topic_using_future_producer (
222+ & producer,
223+ & topic_name,
224+ num_of_messages_to_send,
225+ Some ( 1 ) ,
226+ )
227+ . await
228+ . expect ( "Could not populate topic using Future producer" ) ;
229+ topics:: populate_topic_using_future_producer (
230+ & producer,
231+ & topic_name,
232+ num_of_messages_to_send,
233+ Some ( 2 ) ,
234+ )
235+ . await
236+ . expect ( "Could not populate topic using Future producer" ) ;
237+
238+ let consumer = utils:: consumer:: stream_consumer:: create_stream_consumer (
239+ & kafka_context. bootstrap_servers ,
240+ Some ( & rand_test_group ( ) ) ,
241+ )
242+ . await
243+ . expect ( "could not create stream consumer" ) ;
147244 let mut tpl = TopicPartitionList :: new ( ) ;
148245 tpl. add_partition_offset ( & topic_name, 0 , Offset :: Beginning )
149246 . unwrap ( ) ;
0 commit comments