sark-h2 0.26.0

Fiber-free HTTP/2 protocol primitives and manifold server for sark
use common::hpack::Encoded;
pub mod common;

use sark_h2::hpack::decode::Decoder;

#[test]
fn literal_with_index() {
    let bytes: &[u8] = &[
        0x40, 0x0a, b'c', b'u', b's', b't', b'o', b'm', b'-', b'k', b'e', b'y', 0x0d, b'c', b'u',
        b's', b't', b'o', b'm', b'-', b'h', b'e', b'a', b'd', b'e', b'r',
    ];
    let dec = Decoder::try_new(4096).expect("HPACK decoder capacity");
    let (dec, got) = Encoded::new(bytes)
        .try_collect(dec)
        .expect("valid HPACK fixture");
    assert_eq!(got.len(), 1);
    assert_eq!(got[0].0, b"custom-key");
    assert_eq!(got[0].1, b"custom-header");
    assert_eq!(dec.dyn_size(), 55);
    assert_eq!(dec.dyn_len(), 1);
    let (n, v) = dec.dyn_get(0).expect("valid HPACK fixture");
    assert!(n.is_equal(b"custom-key"));
    assert!(v.is_equal(b"custom-header"));
}

#[test]
fn literal_without_index() {
    let bytes: &[u8] = &[
        0x04, 0x0c, b'/', b's', b'a', b'm', b'p', b'l', b'e', b'/', b'p', b'a', b't', b'h',
    ];
    let dec = Decoder::try_new(4096).expect("HPACK decoder capacity");
    let (dec, got) = Encoded::new(bytes)
        .try_collect(dec)
        .expect("valid HPACK fixture");
    assert_eq!(got.len(), 1);
    assert_eq!(got[0].0, b":path");
    assert_eq!(got[0].1, b"/sample/path");
    assert_eq!(dec.dyn_size(), 0);
    assert_eq!(dec.dyn_len(), 0);
}

#[test]
fn literal_never_indexed() {
    let bytes: &[u8] = &[
        0x10, 0x08, b'p', b'a', b's', b's', b'w', b'o', b'r', b'd', 0x06, b's', b'e', b'c', b'r',
        b'e', b't',
    ];
    let dec = Decoder::try_new(4096).expect("HPACK decoder capacity");
    let (dec, got) = Encoded::new(bytes)
        .try_collect(dec)
        .expect("valid HPACK fixture");
    assert_eq!(got.len(), 1);
    assert_eq!(got[0].0, b"password");
    assert_eq!(got[0].1, b"secret");
    assert_eq!(dec.dyn_size(), 0);
}