use pocketstation::{SidecarMessage, SidecarMessageKind, SidecarProtocolLimits};
const PKSS_V1_SIGNAL_VECTOR: &[u8] = &[
0x50, 0x4b, 0x53, 0x53, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x64, 0x65, 0x76, 0x2e, 0x70, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x74,
0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x66, 0x69, 0x78, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x76, 0x31,
0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x75, 0x72, 0x6e, 0x3a,
0x70, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x66, 0x69,
0x78, 0x74, 0x75, 0x72, 0x65, 0x3a, 0x76, 0x31, 0x01, 0x02, 0x03,
];
#[test]
fn given_pkss_v1_signal_when_encoded_then_bytes_remain_stable() {
let message = SidecarMessage {
kind: SidecarMessageKind::Signal,
terminal: true,
stream_id: 7,
sequence_number: 11,
timestamp_ns: 13,
signal_id: "dev.pocketstation.fixture.v1".to_owned(),
role: Some("result.final".to_owned()),
schema: Some("urn:pocketstation:fixture:v1".to_owned()),
payload: vec![1, 2, 3],
};
let limits = SidecarProtocolLimits::default();
let encoded = message.encode(limits).expect("encode PKSS 1.0 vector");
assert_eq!(encoded, PKSS_V1_SIGNAL_VECTOR);
assert_eq!(
SidecarMessage::decode(PKSS_V1_SIGNAL_VECTOR, limits),
Ok(message)
);
}
#[test]
fn given_pkss_v1_message_kinds_when_projected_then_values_remain_stable() {
let kinds = [
(SidecarMessageKind::Signal, 1),
(SidecarMessageKind::Ready, 2),
(SidecarMessageKind::Error, 3),
(SidecarMessageKind::Cancel, 4),
(SidecarMessageKind::Close, 5),
(SidecarMessageKind::Hello, 6),
(SidecarMessageKind::Manifest, 7),
(SidecarMessageKind::Configure, 8),
(SidecarMessageKind::Observation, 9),
(SidecarMessageKind::Closed, 10),
];
for (kind, expected) in kinds {
assert_eq!(kind as u8, expected);
}
}