1- use crate :: utils:: consumer;
1+ use crate :: utils:: admin:: { create_admin_client, create_topic} ;
2+ use crate :: utils:: consumer:: { create_consumer, poll_x_times_for_messages} ;
23use crate :: utils:: containers:: KafkaContext ;
34use crate :: utils:: logging:: init_test_logger;
4- use crate :: utils:: producer:: create_base_producer;
5- use crate :: utils:: rand:: { rand_test_group, rand_test_topic} ;
6- use anyhow:: Context ;
7- use rdkafka:: config:: FromClientConfig ;
8- use rdkafka:: consumer:: BaseConsumer ;
9- use rdkafka:: producer:: { BaseProducer , BaseRecord , Producer } ;
10- use rdkafka:: util:: Timeout ;
11- use rdkafka:: { ClientConfig , Message } ;
12- use std:: time:: Duration ;
5+ use crate :: utils:: producer:: { create_producer, poll_and_flush} ;
6+ use crate :: utils:: rand:: rand_test_topic;
7+ use rdkafka:: producer:: BaseRecord ;
8+ use rdkafka:: Message ;
139
10+ #[ path = "utils/mod.rs" ]
1411mod utils;
1512
1613#[ tokio:: test]
1714pub async fn test_basic_produce ( ) {
1815 init_test_logger ( ) ;
1916
20- // Get Kafka container context.
2117 let kafka_context_result = KafkaContext :: shared ( ) . await ;
2218 let Ok ( kafka_context) = kafka_context_result else {
2319 panic ! (
@@ -27,13 +23,29 @@ pub async fn test_basic_produce() {
2723 } ;
2824 let test_topic_name = rand_test_topic ( "testing-topic" ) ;
2925
26+ let admin_client_result = create_admin_client ( & kafka_context. bootstrap_servers ) . await ;
27+ let Ok ( admin_client) = admin_client_result else {
28+ panic ! (
29+ "could not create admin client: {}" ,
30+ admin_client_result. unwrap_err( )
31+ ) ;
32+ } ;
33+ let create_topic_result = create_topic ( & admin_client, & test_topic_name) . await ;
34+ if create_topic_result. is_err ( ) {
35+ panic ! (
36+ "could not create topic: {}" ,
37+ create_topic_result. unwrap_err( )
38+ ) ;
39+ }
40+
3041 let consumer_result = create_consumer ( & kafka_context. bootstrap_servers , & test_topic_name) . await ;
3142 let Ok ( consumer) = consumer_result else {
3243 panic ! (
3344 "could not create consumer: {}" ,
3445 consumer_result. unwrap_err( )
3546 ) ;
3647 } ;
48+
3749 let create_producer_result = create_producer ( & kafka_context. bootstrap_servers ) . await ;
3850 let Ok ( base_producer) = create_producer_result else {
3951 panic ! (
@@ -50,20 +62,19 @@ pub async fn test_basic_produce() {
5062 if send_result. is_err ( ) {
5163 panic ! ( "could not produce record: {:?}" , send_result. unwrap_err( ) ) ;
5264 }
53- let flush_result = base_producer. flush ( Timeout :: After ( Duration :: from_secs ( 10 ) ) ) ;
54- if let Err ( flush_error) = flush_result {
55- panic ! ( "timed out waiting for producer flush: {}" , flush_error) ;
65+ if poll_and_flush ( & base_producer) . is_err ( ) {
66+ panic ! ( "could not poll and flush base producer" )
5667 }
5768
58- let Some ( next_message_result) = consumer. poll ( Duration :: from_secs ( 2 ) ) else {
59- panic ! ( "there is no next message on the topic: {}" , test_topic_name) ;
60- } ;
61- let Ok ( borrowed_next_message) = next_message_result else {
62- panic ! (
63- "could not get next message from based_consumer: {}" ,
64- next_message_result. unwrap_err( )
65- ) ;
69+ let messages_result = poll_x_times_for_messages ( & consumer, 10 ) . await ;
70+ let Ok ( messages) = messages_result else {
71+ panic ! ( "could not get messages from consumer" ) ;
6672 } ;
73+ if messages. len ( ) != 1 {
74+ panic ! ( "expected exactly one message" ) ;
75+ }
76+ let borrowed_next_message = messages. get ( 0 ) . unwrap ( ) ;
77+
6778 let owned_next_message = borrowed_next_message. detach ( ) ;
6879 let Some ( message_payload) = owned_next_message. payload ( ) else {
6980 panic ! ( "message payload is empty" ) ;
@@ -75,42 +86,3 @@ pub async fn test_basic_produce() {
7586
7687 assert ! ( message_string. contains( "content" ) ) ;
7788}
78-
79- async fn create_consumer (
80- bootstrap_servers : & str ,
81- test_topic : & str ,
82- ) -> anyhow:: Result < BaseConsumer > {
83- let mut consumer_client_config = ClientConfig :: default ( ) ;
84- consumer_client_config. set ( "group.id" , rand_test_group ( ) ) ;
85- consumer_client_config. set ( "client.id" , "rdkafka_integration_test_client" ) ;
86- consumer_client_config. set ( "bootstrap.servers" , bootstrap_servers) ;
87- consumer_client_config. set ( "enable.partition.eof" , "false" ) ;
88- consumer_client_config. set ( "session.timeout.ms" , "6000" ) ;
89- consumer_client_config. set ( "enable.auto.commit" , "false" ) ;
90- consumer_client_config. set ( "debug" , "all" ) ;
91- consumer_client_config. set ( "auto.offset.reset" , "earliest" ) ;
92-
93- let base_consumer_result =
94- consumer:: create_subscribed_base ( consumer_client_config, & [ & test_topic] ) . await ;
95- let Ok ( base_consumer) = base_consumer_result else {
96- panic ! (
97- "could not create base consumer: {}" ,
98- base_consumer_result. unwrap_err( )
99- )
100- } ;
101-
102- Ok ( base_consumer)
103- }
104-
105- async fn create_producer ( bootstrap_servers : & str ) -> anyhow:: Result < BaseProducer > {
106- let mut producer_client_config = ClientConfig :: default ( ) ;
107- producer_client_config. set ( "bootstrap.servers" , bootstrap_servers) ;
108- let base_producer_result = create_base_producer ( & producer_client_config) ;
109- let Ok ( base_producer) = base_producer_result else {
110- panic ! (
111- "could not create based_producer: {}" ,
112- base_producer_result. unwrap_err( )
113- ) ;
114- } ;
115- Ok ( base_producer)
116- }
0 commit comments