Files
imks/tests/engine_io_tests.rs
zhenyi 821537186e refactor(tests): reformat code and update dependency management
- Reorganized import statements in adapter tests for better readability
- Replaced or_insert_with(Vec::new) with or_default() in test closures
- Updated Cargo.lock with new dependency versions and checksums
- Added TLS features to tonic dependency configuration
- Included sqlx, chrono, and uuid dependencies with specific features
- Added jsonwebtoken and arc-swap as project dependencies
- Reformatted assertion statements to comply with line length limits
- Adjusted base64 import order in engine codec module
- Updated protobuf include statement formatting
2026-06-11 12:11:05 +08:00

162 lines
4.8 KiB
Rust

use imks::engine::codec;
use imks::engine::packet::{HandshakeData, Packet, PacketData, PacketType};
#[test]
fn test_engine_io_handshake_encoding() {
let handshake = HandshakeData {
sid: "lv_VI97HAXpY6yYWAAAC".to_string(),
upgrades: vec!["websocket".to_string()],
ping_interval: 25000,
ping_timeout: 20000,
max_payload: 1000000,
};
let packet = Packet::open(&handshake);
let encoded = codec::encode_packet(&packet);
assert!(encoded.starts_with('0'));
assert!(encoded.contains("\"sid\":\"lv_VI97HAXpY6yYWAAAC\""));
assert!(encoded.contains("\"upgrades\":[\"websocket\"]"));
assert!(encoded.contains("\"pingInterval\":25000"));
assert!(encoded.contains("\"pingTimeout\":20000"));
assert!(encoded.contains("\"maxPayload\":1000000"));
}
#[test]
fn test_engine_io_packet_types() {
let open = Packet::open(&HandshakeData {
sid: "test".to_string(),
upgrades: vec![],
ping_interval: 25000,
ping_timeout: 20000,
max_payload: 1000000,
});
assert_eq!(open.packet_type, PacketType::Open);
let close = Packet::close();
assert_eq!(close.packet_type, PacketType::Close);
let ping = Packet::ping("test");
assert_eq!(ping.packet_type, PacketType::Ping);
let pong = Packet::pong("test");
assert_eq!(pong.packet_type, PacketType::Pong);
let msg = Packet::message_text("hello");
assert_eq!(msg.packet_type, PacketType::Message);
let upgrade = Packet::upgrade();
assert_eq!(upgrade.packet_type, PacketType::Upgrade);
let noop = Packet::noop();
assert_eq!(noop.packet_type, PacketType::Noop);
}
#[test]
fn test_engine_io_polling_payload() {
let packets = vec![
Packet::message_text("hello"),
Packet::ping(""),
Packet::message_text("world"),
];
let encoded = codec::encode_payload(&packets);
assert_eq!(encoded, "4hello\x1e2\x1e4world");
let decoded = codec::decode_payload(&encoded).unwrap();
assert_eq!(decoded.len(), 3);
assert_eq!(decoded[0].packet_type, PacketType::Message);
assert_eq!(decoded[1].packet_type, PacketType::Ping);
assert_eq!(decoded[2].packet_type, PacketType::Message);
}
#[test]
fn test_engine_io_binary_encoding() {
let packet = Packet::message_binary(vec![0x01, 0x02, 0x03, 0x04]);
let encoded = codec::encode_packet(&packet);
assert_eq!(encoded, "4bAQIDBA==");
let decoded = codec::decode_packet(&encoded).unwrap();
assert_eq!(decoded.packet_type, PacketType::Message);
assert_eq!(
decoded.data,
PacketData::Binary(vec![0x01, 0x02, 0x03, 0x04])
);
}
#[test]
fn test_engine_io_webtransport_header_encoding() {
let header = codec::encode_webtransport_header(6, false);
assert_eq!(header, vec![0x06]);
let header = codec::encode_webtransport_header(200, true);
assert_eq!(header.len(), 3);
assert_eq!(header[0], 0x80 | 126);
let header = codec::encode_webtransport_header(70000, false);
assert_eq!(header.len(), 9);
assert_eq!(header[0], 127);
}
#[test]
fn test_engine_io_webtransport_header_decoding() {
let header = vec![0x06];
let (len, is_binary) = codec::decode_webtransport_header(&header).unwrap();
assert_eq!(len, 6);
assert!(!is_binary);
let header = vec![0x80 | 126, 0x00, 0xC8];
let (len, is_binary) = codec::decode_webtransport_header(&header).unwrap();
assert_eq!(len, 200);
assert!(is_binary);
}
#[test]
fn test_engine_io_probe_ping_pong() {
let ping = Packet::ping("probe");
let encoded = codec::encode_packet(&ping);
assert_eq!(encoded, "2probe");
let decoded = codec::decode_packet(&encoded).unwrap();
assert_eq!(decoded.packet_type, PacketType::Ping);
assert_eq!(decoded.data, PacketData::Text("probe".to_string()));
let pong = Packet::pong("probe");
let encoded = codec::encode_packet(&pong);
assert_eq!(encoded, "3probe");
let decoded = codec::decode_packet(&encoded).unwrap();
assert_eq!(decoded.packet_type, PacketType::Pong);
assert_eq!(decoded.data, PacketData::Text("probe".to_string()));
}
#[test]
fn test_engine_io_upgrade_packet() {
let upgrade = Packet::upgrade();
let encoded = codec::encode_packet(&upgrade);
assert_eq!(encoded, "5");
let decoded = codec::decode_packet(&encoded).unwrap();
assert_eq!(decoded.packet_type, PacketType::Upgrade);
}
#[test]
fn test_engine_io_noop_packet() {
let noop = Packet::noop();
let encoded = codec::encode_packet(&noop);
assert_eq!(encoded, "6");
let decoded = codec::decode_packet(&encoded).unwrap();
assert_eq!(decoded.packet_type, PacketType::Noop);
}
#[test]
fn test_engine_io_close_packet() {
let close = Packet::close();
let encoded = codec::encode_packet(&close);
assert_eq!(encoded, "1");
let decoded = codec::decode_packet(&encoded).unwrap();
assert_eq!(decoded.packet_type, PacketType::Close);
}