Skip to main content

oxirs_stream/
serialization_tests.rs

1//! Unit tests for the serialization subsystem.
2
3#[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        // Serialize to JSON
105        let json_serializer = EventSerializer::new(SerializationFormat::Json);
106        let json_data = json_serializer.serialize(&event).await.unwrap();
107
108        // Convert to MessagePack
109        let converter =
110            FormatConverter::new(SerializationFormat::Json, SerializationFormat::MessagePack);
111        let msgpack_data = converter.convert(&json_data).await.unwrap();
112
113        // Verify by deserializing
114        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}