http_tunnel_common/utils/
encoding.rs1use base64::{Engine as _, engine::general_purpose::STANDARD};
2
3pub fn encode_body(body: &[u8]) -> String {
5 STANDARD.encode(body)
6}
7
8pub fn decode_body(encoded: &str) -> Result<Vec<u8>, base64::DecodeError> {
10 STANDARD.decode(encoded)
11}
12
13#[cfg(test)]
14mod tests {
15 use super::*;
16
17 #[test]
18 fn test_encode_empty() {
19 let empty: &[u8] = &[];
20 let encoded = encode_body(empty);
21 assert_eq!(encoded, "");
22 }
23
24 #[test]
25 fn test_encode_simple_text() {
26 let text = b"Hello, World!";
27 let encoded = encode_body(text);
28 assert_eq!(encoded, "SGVsbG8sIFdvcmxkIQ==");
29 }
30
31 #[test]
32 fn test_encode_json() {
33 let json = br#"{"name":"test","value":123}"#;
34 let encoded = encode_body(json);
35 assert_eq!(encoded, "eyJuYW1lIjoidGVzdCIsInZhbHVlIjoxMjN9");
36 }
37
38 #[test]
39 fn test_encode_binary_data() {
40 let binary = vec![0x00, 0x01, 0x02, 0xFF, 0xFE];
41 let encoded = encode_body(&binary);
42 assert_eq!(encoded, "AAEC//4=");
43 }
44
45 #[test]
46 fn test_decode_empty() {
47 let decoded = decode_body("").unwrap();
48 assert_eq!(decoded, Vec::<u8>::new());
49 }
50
51 #[test]
52 fn test_decode_simple_text() {
53 let decoded = decode_body("SGVsbG8sIFdvcmxkIQ==").unwrap();
54 assert_eq!(decoded, b"Hello, World!");
55 assert_eq!(String::from_utf8(decoded).unwrap(), "Hello, World!");
56 }
57
58 #[test]
59 fn test_decode_json() {
60 let decoded = decode_body("eyJuYW1lIjoidGVzdCIsInZhbHVlIjoxMjN9").unwrap();
61 assert_eq!(decoded, br#"{"name":"test","value":123}"#);
62 }
63
64 #[test]
65 fn test_decode_binary_data() {
66 let decoded = decode_body("AAEC//4=").unwrap();
67 assert_eq!(decoded, vec![0x00, 0x01, 0x02, 0xFF, 0xFE]);
68 }
69
70 #[test]
71 fn test_roundtrip_text() {
72 let original = b"This is a test message with special chars: \n\t\r!@#$%^&*()";
73 let encoded = encode_body(original);
74 let decoded = decode_body(&encoded).unwrap();
75 assert_eq!(decoded, original);
76 }
77
78 #[test]
79 fn test_roundtrip_binary() {
80 let original: Vec<u8> = (0..=255).collect();
81 let encoded = encode_body(&original);
82 let decoded = decode_body(&encoded).unwrap();
83 assert_eq!(decoded, original);
84 }
85
86 #[test]
87 fn test_roundtrip_large_data() {
88 let original = vec![0xAB; 10000]; let encoded = encode_body(&original);
90 let decoded = decode_body(&encoded).unwrap();
91 assert_eq!(decoded, original);
92 }
93
94 #[test]
95 fn test_decode_invalid_base64() {
96 let result = decode_body("This is not valid base64!!!");
97 assert!(result.is_err());
98 }
99
100 #[test]
101 fn test_decode_invalid_padding() {
102 let result = decode_body("SGVsbG8"); assert!(result.is_err());
104 }
105
106 #[test]
107 fn test_encode_utf8_text() {
108 let utf8_text = "Hello δΈη π".as_bytes();
109 let encoded = encode_body(utf8_text);
110 let decoded = decode_body(&encoded).unwrap();
111 assert_eq!(decoded, utf8_text);
112 assert_eq!(String::from_utf8(decoded).unwrap(), "Hello δΈη π");
113 }
114}