use zenoh_buffers::{reader::HasReader, writer::HasWriter};
use zenoh_codec::{RCodec, WCodec, Zenoh080, Zenoh080Bounded};
use zenoh_protocol::{
core::{Locator, WhatAmI, ZenohIdProto},
scouting::{HelloProto, ScoutingMessage},
};
fn fixed_zid() -> ZenohIdProto {
ZenohIdProto::try_from([0x14, 0x20, 0x30, 0xff].as_slice()).expect("fixed zid must be valid")
}
#[test]
fn bounded_string_rejects_declared_length_larger_than_input() {
let bytes = [2, b'a'];
let codec = Zenoh080Bounded::<usize>::new();
let mut reader = bytes.as_slice().reader();
let decoded: Result<String, _> = codec.read(&mut reader);
assert!(decoded.is_err());
}
#[test]
fn hello_rejects_locator_count_larger_than_remaining_input() {
let hello = HelloProto {
version: 1,
whatami: WhatAmI::Client,
zid: fixed_zid(),
locators: vec![Locator::new("tcp", "127.0.0.1:7447", "").expect("locator must be valid")],
};
let codec = Zenoh080::new();
let mut bytes = vec![];
let mut writer = bytes.writer();
codec
.write(&mut writer, &ScoutingMessage::from(hello))
.unwrap();
bytes.splice(7..8, [255, 255, 255, 255, 255, 255, 255, 255, 0]);
let mut reader = bytes.as_slice().reader();
let decoded: Result<ScoutingMessage, _> = codec.read(&mut reader);
assert!(decoded.is_err());
}