felixctl 0.6.0

Command-line tool for Felix: publish, subscribe, read caches, manage the control plane and run benchmarks
use super::*;

fn printer(format: FormatArg) -> Printer {
    Printer {
        out: Output { json: false },
        format,
        stream: "orders".into(),
    }
}

#[test]
fn raw_prints_the_payload_only() {
    assert_eq!(printer(FormatArg::Raw).line(Some(1), Some(7), b"hi"), b"hi");
}

#[test]
fn offsets_prefix_the_shard_and_offset() {
    assert_eq!(
        printer(FormatArg::Offsets).line(Some(1), Some(7), b"hi"),
        b"1\t7\thi"
    );
    assert_eq!(
        printer(FormatArg::Offsets).line(None, None, b"hi"),
        b"-\t-\thi"
    );
}

#[test]
fn json_is_one_object_per_message() {
    let line = printer(FormatArg::Json).line(Some(0), Some(3), b"hi");
    let value: serde_json::Value = serde_json::from_slice(&line).expect("json");
    assert_eq!(
        value,
        serde_json::json!({"stream": "orders", "shard": 0, "offset": 3, "payload": "hi"})
    );
    let line = printer(FormatArg::Json).line(Some(0), None, &[0xff]);
    let value: serde_json::Value = serde_json::from_slice(&line).expect("json");
    assert_eq!(value["payload_base64"], "/w==");
    assert_eq!(value["offset"], serde_json::Value::Null);
}

#[test]
fn from_maps_onto_start_positions() {
    assert_eq!(start_position(StartArg::Latest), None);
    assert_eq!(
        start_position(StartArg::Earliest),
        Some(StartPosition::Earliest)
    );
    assert_eq!(
        start_position(StartArg::Offset(9)),
        Some(StartPosition::Offset(9))
    );
}