summary refs log tree commit diff
path: root/msg_socket/tests/enum.rs
blob: 9134f6ed3d933e458f16049bfc66562e677618f5 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
extern crate msg_on_socket_derive;
extern crate msg_socket;
extern crate sys_util;

use sys_util::EventFd;

use msg_socket::*;

#[derive(MsgOnSocket)]
struct DummyRequest {}

#[derive(MsgOnSocket)]
enum Response {
    A(u8),
    B,
    C(u32, EventFd),
    D([u8; 4]),
    E { f0: u8, f1: u32 },
}

#[test]
fn sock_send_recv_enum() {
    let (req, res) = pair::<DummyRequest, Response>().unwrap();
    let e0 = EventFd::new().unwrap();
    let e1 = e0.try_clone().unwrap();
    res.send(&Response::C(0xf0f0, e0)).unwrap();
    let r = req.recv().unwrap();
    match r {
        Response::C(v, efd) => {
            assert_eq!(v, 0xf0f0);
            efd.write(0x0f0f).unwrap();
        }
        _ => panic!("wrong type"),
    };
    assert_eq!(e1.read().unwrap(), 0x0f0f);

    res.send(&Response::B).unwrap();
    match req.recv().unwrap() {
        Response::B => {}
        _ => panic!("Wrong enum type"),
    };

    res.send(&Response::A(0x3)).unwrap();
    match req.recv().unwrap() {
        Response::A(v) => assert_eq!(v, 0x3),
        _ => panic!("Wrong enum type"),
    };

    res.send(&Response::D([0, 1, 2, 3])).unwrap();
    match req.recv().unwrap() {
        Response::D(v) => assert_eq!(v, [0, 1, 2, 3]),
        _ => panic!("Wrong enum type"),
    };

    res.send(&Response::E {
        f0: 0x12,
        f1: 0x0f0f,
    })
    .unwrap();
    match req.recv().unwrap() {
        Response::E { f0, f1 } => {
            assert_eq!(f0, 0x12);
            assert_eq!(f1, 0x0f0f);
        }
        _ => panic!("Wrong enum type"),
    };
}