testground 0.4.0

The Rust SDK for developing Testground test plans.
Documentation
use serde::Serialize;

use crate::{events::EventType, network_conf::NetworkConfiguration};

#[derive(Serialize, Debug)]
pub struct Request {
    pub id: String,

    pub is_cancel: bool,

    #[serde(flatten)]
    pub request: RequestType,
}

#[derive(Serialize, Debug)]
#[serde(untagged)]
pub enum PayloadType {
    Event(EventType),

    Json(serde_json::Value),

    Config(NetworkConfiguration),
}

#[derive(Serialize, Debug)]
pub enum RequestType {
    #[serde(rename = "signal_entry")]
    SignalEntry { state: String },
    #[serde(rename = "barrier")]
    Barrier { state: String, target: u64 },
    #[serde(rename = "publish")]
    Publish { topic: String, payload: PayloadType },
    #[serde(rename = "subscribe")]
    Subscribe { topic: String },
}

#[cfg(test)]
mod tests {

    use std::net::Ipv4Addr;

    use ipnetwork::Ipv4Network;

    use crate::{events::EventType, network_conf::*};

    use super::*;

    #[test]
    fn serde_test() {
        let _network_conf = NetworkConfiguration {
            network: DEFAULT_DATA_NETWORK.to_owned(),
            ipv4: Some(Ipv4Network::new(Ipv4Addr::new(16, 0, 1, 1), 24).unwrap()),
            ipv6: None,
            enable: true,
            default: LinkShape {
                latency: 10000000,
                jitter: 0,
                bandwidth: 1048576,
                filter: FilterAction::Accept,
                loss: 0.0,
                corrupt: 0.0,
                corrupt_corr: 0.0,
                reorder: 0.0,
                reorder_corr: 0.0,
                duplicate: 0.0,
                duplicate_corr: 0.0,
            },
            rules: None,
            callback_state: "latency-reduced".to_owned(),
            callback_target: None,
            routing_policy: RoutingPolicyType::DenyAll,
        };

        let event = EventType::StageStart {
            name: "network-initialized".to_owned(),
            group: "single".to_owned(),
        };

        let _msg = "123QM 192.168.1.1/25".to_owned();

        let req = Request {
            id: "0".to_owned(),
            is_cancel: false,
            request: RequestType::Publish {
                topic: "run:abcd1234:plan:live_streming:case:quickstart:topics:network:hostname"
                    .to_owned(),
                payload: PayloadType::Event(event),
            },
        };

        let json_req = serde_json::to_string_pretty(&req).unwrap();

        println!("{}", json_req);
    }
}