mitrid_core 0.9.4

Core library of the Mitrid framework
use mitrid_core::base::Sizable;
use mitrid_core::base::Serializable;
use mitrid_core::io::Permission;
use mitrid_core::io::network::Method;

#[test]
fn test_method_parse() {
    let valid_method_strs = vec!["ping",
                                 "session",
                                 "count",
                                 "list",
                                 "lookup",
                                 "get",
                                 "create",
                                 "update",
                                 "upsert",
                                 "delete",
                                 "eval",
                                 "evalmut"];

    let invalid_method_str = "put";

    for method_str in valid_method_strs.iter() {
        let res = Method::parse(method_str);
        assert!(res.is_ok());
    }

    let res = Method::parse(invalid_method_str);
    assert!(res.is_err());
}

#[test]
fn test_method_display() {
    let method_strs = vec!["ping",
                           "session",
                           "count",
                           "list",
                           "lookup",
                           "get",
                           "create",
                           "update",
                           "upsert",
                           "delete",
                           "eval",
                           "evalmut"];

    for method_str in method_strs.iter() {
        let method = Method::parse(method_str).unwrap();
        assert_eq!(format!("{}", method), String::from(*method_str));
    }
}

#[test]
fn test_method_check_permission() {
    let none_permission = Permission::None;
    let read_permission = Permission::Read;
    let write_permission = Permission::Write;

    let none_method_strs = vec!["ping", "session"];
    let read_method_strs = vec!["session", "count", "list", "lookup", "list", "eval"];
    let write_method_strs = vec!["session", "create", "update", "upsert", "delete", "evalmut"];

    for method_str in none_method_strs.iter() {
        let method = Method::parse(method_str).unwrap();

        let res = method.check_permission(&none_permission);
        assert!(res.is_ok());

        let res = method.check_permission(&read_permission);
        if method_str != &"session" {
            assert!(res.is_err());
        } else {
            assert!(res.is_ok());
        }

        let res = method.check_permission(&write_permission);
        if method_str != &"session" {
            assert!(res.is_err());
        } else {
            assert!(res.is_ok());
        }
    }

    for method_str in read_method_strs.iter() {
        let method = Method::parse(method_str).unwrap();

        let res = method.check_permission(&read_permission);
        assert!(res.is_ok());

        let res = method.check_permission(&write_permission);
        if method_str != &"session" {
            assert!(res.is_err());
        } else {
            assert!(res.is_ok());
        }

        let res = method.check_permission(&none_permission);
        if method_str != &"session" {
            assert!(res.is_err());
        } else {
            assert!(res.is_ok());
        }
    }

    for method_str in write_method_strs.iter() {
        let method = Method::parse(method_str).unwrap();

        let res = method.check_permission(&write_permission);
        assert!(res.is_ok());

        let res = method.check_permission(&none_permission);
        if method_str != &"session" {
            assert!(res.is_err());
        } else {
            assert!(res.is_ok());
        }

        let res = method.check_permission(&read_permission);
        if method_str != &"session" {
            assert!(res.is_err());
        } else {
            assert!(res.is_ok());
        }
    }
}

#[test]
fn test_method_default() {
    let method = Method::default();
    assert_eq!(method, Method::Ping);
}

#[test]
fn test_method_size() {
    let method = Method::default();
    let method_size = (method as u8).size();
    assert_eq!(method.size(), method_size)
}

#[test]
fn test_method_serialize_json() {
    let method_a = Method::default();
    let res = method_a.to_json();
    assert!(res.is_ok());

    let method_a_json = res.unwrap();
    let res = Method::from_json(&method_a_json);
    assert!(res.is_ok());

    let method_b = res.unwrap();
    assert_eq!(method_a, method_b);
}

#[test]
fn test_method_serialize_bytes() {
    let method_a = Method::default();
    let res = method_a.to_bytes();
    assert!(res.is_ok());

    let method_a_bytes = res.unwrap();
    let res = Method::from_bytes(&method_a_bytes);
    assert!(res.is_ok());

    let method_b = res.unwrap();
    assert_eq!(method_a, method_b);
}

#[test]
fn test_method_serialize_hex() {
    let method_a = Method::default();
    let res = method_a.to_hex();
    assert!(res.is_ok());

    let method_a_hex = res.unwrap();
    let res = Method::from_hex(&method_a_hex);
    assert!(res.is_ok());

    let method_b = res.unwrap();
    assert_eq!(method_a, method_b);
}