oxirs_stream/
serialization_tests.rs1#[cfg(test)]
4mod tests {
5 use crate::serialization_encoder::{EventSerializer, FormatConverter};
6 use crate::serialization_types::SerializationFormat;
7 use crate::{CompressionType, EventMetadata, StreamEvent};
8
9 #[tokio::test]
10 async fn test_json_serialization() {
11 let event = StreamEvent::Heartbeat {
12 timestamp: chrono::Utc::now(),
13 source: "test".to_string(),
14 metadata: crate::event::EventMetadata::default(),
15 };
16
17 let serializer = EventSerializer::new(SerializationFormat::Json);
18 let serialized = serializer.serialize(&event).await.unwrap();
19 let deserialized = serializer.deserialize(&serialized).await.unwrap();
20
21 match deserialized {
22 StreamEvent::Heartbeat { source, .. } => {
23 assert_eq!(source, "test");
24 }
25 _ => panic!("Wrong event type"),
26 }
27 }
28
29 #[tokio::test]
30 async fn test_format_detection() {
31 let json_data = b"{\"test\": \"data\"}";
32 assert_eq!(
33 SerializationFormat::detect(json_data),
34 Some(SerializationFormat::Json)
35 );
36
37 let magic_data = b"PB03some_data";
38 assert_eq!(
39 SerializationFormat::detect(magic_data),
40 Some(SerializationFormat::Protobuf)
41 );
42 }
43
44 #[tokio::test]
45 async fn test_compression() {
46 let event = StreamEvent::Heartbeat {
47 timestamp: chrono::Utc::now(),
48 source: "test".to_string(),
49 metadata: crate::event::EventMetadata::default(),
50 };
51
52 let serializer =
53 EventSerializer::new(SerializationFormat::Json).with_compression(CompressionType::Gzip);
54
55 let serialized = serializer.serialize(&event).await.unwrap();
56 let deserialized = serializer.deserialize(&serialized).await.unwrap();
57
58 match deserialized {
59 StreamEvent::Heartbeat { source, .. } => {
60 assert_eq!(source, "test");
61 }
62 _ => panic!("Wrong event type"),
63 }
64 }
65
66 #[tokio::test]
67 async fn test_messagepack_serialization() {
68 let metadata = EventMetadata::default();
69 let event = StreamEvent::TripleAdded {
70 subject: "http://example.org/subject".to_string(),
71 predicate: "http://example.org/predicate".to_string(),
72 object: "http://example.org/object".to_string(),
73 graph: None,
74 metadata,
75 };
76
77 let serializer = EventSerializer::new(SerializationFormat::MessagePack);
78 let serialized = serializer.serialize(&event).await.unwrap();
79 let deserialized = serializer.deserialize(&serialized).await.unwrap();
80
81 match deserialized {
82 StreamEvent::TripleAdded {
83 subject,
84 predicate,
85 object,
86 ..
87 } => {
88 assert_eq!(subject, "http://example.org/subject");
89 assert_eq!(predicate, "http://example.org/predicate");
90 assert_eq!(object, "http://example.org/object");
91 }
92 _ => panic!("Wrong event type"),
93 }
94 }
95
96 #[tokio::test]
97 async fn test_format_conversion() {
98 let event = StreamEvent::Heartbeat {
99 timestamp: chrono::Utc::now(),
100 source: "test".to_string(),
101 metadata: crate::event::EventMetadata::default(),
102 };
103
104 let json_serializer = EventSerializer::new(SerializationFormat::Json);
106 let json_data = json_serializer.serialize(&event).await.unwrap();
107
108 let converter =
110 FormatConverter::new(SerializationFormat::Json, SerializationFormat::MessagePack);
111 let msgpack_data = converter.convert(&json_data).await.unwrap();
112
113 let msgpack_serializer = EventSerializer::new(SerializationFormat::MessagePack);
115 let deserialized = msgpack_serializer.deserialize(&msgpack_data).await.unwrap();
116
117 match deserialized {
118 StreamEvent::Heartbeat { source, .. } => {
119 assert_eq!(source, "test");
120 }
121 _ => panic!("Wrong event type"),
122 }
123 }
124}