@@ -60,4 +60,96 @@ pub async fn consumer_loop(rx: &mut mpsc::UnboundedReceiver<LogRecord>, config:
6060 println ! ( "Producer dropped, consumer exiting" ) ;
6161}
6262
63- mod tests { }
63+ #[ cfg( test) ]
64+ mod tests {
65+ use super :: * ;
66+ use serde:: { Deserialize , Serialize } ;
67+
68+ #[ derive( Debug , Clone , Serialize , Deserialize , PartialEq ) ]
69+ struct DummyLog {
70+ msg : String ,
71+ level : String ,
72+ }
73+
74+ // Implement LogRecord for test if not already present
75+ impl From < DummyLog > for LogRecord {
76+ fn from ( d : DummyLog ) -> Self {
77+ // Adjust this conversion as per your actual LogRecord struct
78+ LogRecord {
79+ elapsed : crate :: redis_logs:: Elapsed {
80+ repr : "" . into ( ) ,
81+ seconds : 0.0 ,
82+ } ,
83+ exception : None ,
84+ extra : { } . into ( ) ,
85+ file : crate :: redis_logs:: File {
86+ name : "" . into ( ) ,
87+ path : "" . into ( ) ,
88+ } ,
89+ function : "" . into ( ) ,
90+ level : crate :: redis_logs:: LogLevel {
91+ icon : "" . into ( ) ,
92+ name : d. level ,
93+ no : 100 ,
94+ } ,
95+ line : 0 ,
96+ message : d. msg ,
97+ module : "" . into ( ) ,
98+ name : "" . into ( ) ,
99+ process : crate :: redis_logs:: NameId {
100+ name : "" . into ( ) ,
101+ id : 0 ,
102+ } ,
103+ thread : crate :: redis_logs:: NameId {
104+ name : "" . into ( ) ,
105+ id : 0 ,
106+ } ,
107+ time : crate :: redis_logs:: Timestamp {
108+ repr : "" . into ( ) ,
109+ timestamp : 0.0 ,
110+ } ,
111+ }
112+ }
113+ }
114+
115+ #[ test]
116+ fn test_make_docs_values_empty ( ) {
117+ let records: Vec < LogRecord > = vec ! [ ] ;
118+ let docs = make_docs_values ( & records) . unwrap ( ) ;
119+ assert ! ( docs. is_empty( ) ) ;
120+ }
121+
122+ #[ test]
123+ fn test_make_docs_values_single ( ) {
124+ let record: LogRecord = DummyLog {
125+ msg : "hello" . to_string ( ) ,
126+ level : "info" . to_string ( ) ,
127+ }
128+ . into ( ) ;
129+ let docs = make_docs_values ( & vec ! [ record. clone( ) ] ) . unwrap ( ) ;
130+ // Each record should produce two JSON bodies (action + doc)
131+ assert_eq ! ( docs. len( ) , 2 ) ;
132+ }
133+
134+ #[ test]
135+ fn test_make_docs_values_multiple ( ) {
136+ let record1: LogRecord = DummyLog {
137+ msg : "a" . to_string ( ) ,
138+ level : "info" . to_string ( ) ,
139+ }
140+ . into ( ) ;
141+ let record2: LogRecord = DummyLog {
142+ msg : "b" . to_string ( ) ,
143+ level : "warn" . to_string ( ) ,
144+ }
145+ . into ( ) ;
146+ let docs = make_docs_values ( & vec ! [ record1, record2] ) . unwrap ( ) ;
147+ assert_eq ! ( docs. len( ) , 4 ) ;
148+ }
149+
150+ #[ test]
151+ fn test_elastic_client_invalid_url ( ) {
152+ let result = elastic_client ( "not a url" , "apikey" ) ;
153+ assert ! ( result. is_err( ) ) ;
154+ }
155+ }
0 commit comments