@@ -159,12 +159,12 @@ impl SinkConfig for SocketSinkConfig {
159
159
160
160
#[ cfg( test) ]
161
161
mod test {
162
- #[ cfg( unix) ]
163
- use std:: path:: PathBuf ;
164
162
use std:: {
165
163
future:: ready,
166
164
net:: { SocketAddr , UdpSocket } ,
167
165
} ;
166
+ #[ cfg( unix) ]
167
+ use std:: { os:: unix:: net:: UnixDatagram , path:: PathBuf } ;
168
168
169
169
use futures:: stream:: StreamExt ;
170
170
use futures_util:: stream;
@@ -196,14 +196,42 @@ mod test {
196
196
crate :: test_util:: test_generate_config :: < SocketSinkConfig > ( ) ;
197
197
}
198
198
199
- async fn test_udp ( addr : SocketAddr ) {
200
- let receiver = UdpSocket :: bind ( addr) . unwrap ( ) ;
199
+ enum DatagramSocket {
200
+ Udp ( UdpSocket ) ,
201
+ #[ cfg( unix) ]
202
+ Unix ( UnixDatagram ) ,
203
+ }
204
+
205
+ enum DatagramSocketAddr {
206
+ Udp ( SocketAddr ) ,
207
+ #[ cfg( unix) ]
208
+ Unix ( PathBuf ) ,
209
+ }
210
+
211
+ async fn test_datagram ( datagram_addr : DatagramSocketAddr ) {
212
+ let receiver = match & datagram_addr {
213
+ DatagramSocketAddr :: Udp ( addr) => DatagramSocket :: Udp ( UdpSocket :: bind ( addr) . unwrap ( ) ) ,
214
+ #[ cfg( unix) ]
215
+ DatagramSocketAddr :: Unix ( path) => {
216
+ DatagramSocket :: Unix ( UnixDatagram :: bind ( path) . unwrap ( ) )
217
+ }
218
+ } ;
201
219
202
220
let config = SocketSinkConfig {
203
- mode : Mode :: Udp ( UdpMode {
204
- config : UdpSinkConfig :: from_address ( addr. to_string ( ) ) ,
205
- encoding : JsonSerializerConfig :: default ( ) . into ( ) ,
206
- } ) ,
221
+ mode : match & datagram_addr {
222
+ DatagramSocketAddr :: Udp ( addr) => Mode :: Udp ( UdpMode {
223
+ config : UdpSinkConfig :: from_address ( addr. to_string ( ) ) ,
224
+ encoding : JsonSerializerConfig :: default ( ) . into ( ) ,
225
+ } ) ,
226
+ #[ cfg( unix) ]
227
+ DatagramSocketAddr :: Unix ( path) => Mode :: Unix ( UnixMode {
228
+ config : UnixSinkConfig :: new (
229
+ path. to_path_buf ( ) ,
230
+ crate :: sinks:: util:: service:: net:: UnixMode :: Datagram ,
231
+ ) ,
232
+ encoding : ( None :: < FramingConfig > , JsonSerializerConfig :: default ( ) ) . into ( ) ,
233
+ } ) ,
234
+ } ,
207
235
acknowledgements : Default :: default ( ) ,
208
236
} ;
209
237
@@ -218,9 +246,13 @@ mod test {
218
246
. expect ( "Running sink failed" ) ;
219
247
220
248
let mut buf = [ 0 ; 256 ] ;
221
- let ( size, _src_addr) = receiver
222
- . recv_from ( & mut buf)
223
- . expect ( "Did not receive message" ) ;
249
+ let size = match & receiver {
250
+ DatagramSocket :: Udp ( sock) => {
251
+ sock. recv_from ( & mut buf) . expect ( "Did not receive message" ) . 0
252
+ }
253
+ #[ cfg( unix) ]
254
+ DatagramSocket :: Unix ( sock) => sock. recv ( & mut buf) . expect ( "Did not receive message" ) ,
255
+ } ;
224
256
225
257
let packet = String :: from_utf8 ( buf[ ..size] . to_vec ( ) ) . expect ( "Invalid data received" ) ;
226
258
let data = serde_json:: from_str :: < Value > ( & packet) . expect ( "Invalid JSON received" ) ;
@@ -234,14 +266,25 @@ mod test {
234
266
async fn udp_ipv4 ( ) {
235
267
trace_init ( ) ;
236
268
237
- test_udp ( next_addr ( ) ) . await ;
269
+ test_datagram ( DatagramSocketAddr :: Udp ( next_addr ( ) ) ) . await ;
238
270
}
239
271
240
272
#[ tokio:: test]
241
273
async fn udp_ipv6 ( ) {
242
274
trace_init ( ) ;
243
275
244
- test_udp ( next_addr_v6 ( ) ) . await ;
276
+ test_datagram ( DatagramSocketAddr :: Udp ( next_addr_v6 ( ) ) ) . await ;
277
+ }
278
+
279
+ #[ cfg( unix) ]
280
+ #[ tokio:: test]
281
+ async fn unix_datagram ( ) {
282
+ trace_init ( ) ;
283
+
284
+ test_datagram ( DatagramSocketAddr :: Unix ( temp_uds_path (
285
+ "unix_datagram_socket_test" ,
286
+ ) ) )
287
+ . await ;
245
288
}
246
289
247
290
#[ tokio:: test]
@@ -292,7 +335,10 @@ mod test {
292
335
293
336
let config = SocketSinkConfig {
294
337
mode : Mode :: Unix ( UnixMode {
295
- config : UnixSinkConfig :: new ( out_path) ,
338
+ config : UnixSinkConfig :: new (
339
+ out_path,
340
+ crate :: sinks:: util:: service:: net:: UnixMode :: Stream ,
341
+ ) ,
296
342
encoding : ( None :: < FramingConfig > , NativeJsonSerializerConfig ) . into ( ) ,
297
343
} ) ,
298
344
acknowledgements : Default :: default ( ) ,
0 commit comments