Files @ 9154f8a5674d
Branch filter:

Location: CSY/reowolf/src/test/connector.rs - annotation

9154f8a5674d 5.4 KiB application/rls-services+xml Show Source Show as Raw Download as Raw
Hans-Dieter Hiep
Merge branch 'master' of github.com:sirkibsirkib/Reowolf
06f259bf8031
06f259bf8031
06f259bf8031
06f259bf8031
06f259bf8031
06f259bf8031
06f259bf8031
06f259bf8031
06f259bf8031
06f259bf8031
06f259bf8031
58e19b42641f
06f259bf8031
63a9f085c357
63a9f085c357
63a9f085c357
63a9f085c357
06f259bf8031
91c57e99c66e
91c57e99c66e
63a9f085c357
63a9f085c357
63a9f085c357
63a9f085c357
63a9f085c357
63a9f085c357
63a9f085c357
63a9f085c357
63a9f085c357
06f259bf8031
63a9f085c357
06f259bf8031
06f259bf8031
91c57e99c66e
06f259bf8031
06f259bf8031
91c57e99c66e
91c57e99c66e
63a9f085c357
63a9f085c357
63a9f085c357
63a9f085c357
63a9f085c357
63a9f085c357
63a9f085c357
63a9f085c357
63a9f085c357
63a9f085c357
06f259bf8031
06f259bf8031
91c57e99c66e
06f259bf8031
06f259bf8031
06f259bf8031
06f259bf8031
b788ae5c2251
b788ae5c2251
58e19b42641f
b788ae5c2251
63a9f085c357
b788ae5c2251
b788ae5c2251
91c57e99c66e
91c57e99c66e
63a9f085c357
63a9f085c357
63a9f085c357
b788ae5c2251
b788ae5c2251
b788ae5c2251
b788ae5c2251
63a9f085c357
63a9f085c357
63a9f085c357
63a9f085c357
91c57e99c66e
91c57e99c66e
91c57e99c66e
b788ae5c2251
b788ae5c2251
b788ae5c2251
b788ae5c2251
63a9f085c357
63a9f085c357
63a9f085c357
b788ae5c2251
b788ae5c2251
b788ae5c2251
91c57e99c66e
91c57e99c66e
63a9f085c357
63a9f085c357
63a9f085c357
63a9f085c357
63a9f085c357
63a9f085c357
63a9f085c357
63a9f085c357
63a9f085c357
63a9f085c357
63a9f085c357
63a9f085c357
b788ae5c2251
91c57e99c66e
91c57e99c66e
91c57e99c66e
b788ae5c2251
b788ae5c2251
b788ae5c2251
b788ae5c2251
63a9f085c357
63a9f085c357
63a9f085c357
b788ae5c2251
b788ae5c2251
b788ae5c2251
b788ae5c2251
58e19b42641f
58e19b42641f
58e19b42641f
58e19b42641f
58e19b42641f
58e19b42641f
58e19b42641f
58e19b42641f
58e19b42641f
58e19b42641f
58e19b42641f
58e19b42641f
58e19b42641f
58e19b42641f
58e19b42641f
58e19b42641f
58e19b42641f
58e19b42641f
58e19b42641f
58e19b42641f
58e19b42641f
58e19b42641f
58e19b42641f
58e19b42641f
58e19b42641f
58e19b42641f
58e19b42641f
58e19b42641f
58e19b42641f
58e19b42641f
58e19b42641f
58e19b42641f
58e19b42641f
58e19b42641f
58e19b42641f
58e19b42641f
58e19b42641f
58e19b42641f
58e19b42641f
58e19b42641f
58e19b42641f
58e19b42641f
58e19b42641f
58e19b42641f
58e19b42641f
58e19b42641f
58e19b42641f
58e19b42641f
58e19b42641f
58e19b42641f
58e19b42641f
58e19b42641f
58e19b42641f
extern crate test_generator;

use super::*;

use std::fs;
use std::path::Path;
use std::thread;
use test_generator::test_resources;

use crate::common::*;
use crate::runtime::*;
use crate::runtime::errors::*;

#[test]
fn incremental() {
    let timeout = Duration::from_millis(1_500);
    let addrs = ["127.0.0.1:7010".parse().unwrap(), "127.0.0.1:7011".parse().unwrap()];
    let a = thread::spawn(move || {
        let controller_id = 0;
        let mut x = Connector::Unconfigured(Unconfigured { controller_id });
        x.configure(
            b"primitive main(out a, out b) {
            synchronous {
                msg m = create(0);
                put(a, m);
            }
        }",
        )
        .unwrap();
        x.bind_port(0, PortBinding::Passive(addrs[0])).unwrap();
        x.bind_port(1, PortBinding::Passive(addrs[1])).unwrap();
        x.connect(timeout).unwrap();
        assert_eq!(0, x.sync(timeout).unwrap());
        println!("\n---------\nLOG CID={}\n{}", controller_id, x.get_mut_logger().unwrap());
    });
    let b = thread::spawn(move || {
        let controller_id = 1;
        let mut x = Connector::Unconfigured(Unconfigured { controller_id });
        x.configure(
            b"primitive main(in a, in b) {
            synchronous {
                get(a);
            }
        }",
        )
        .unwrap();
        x.bind_port(0, PortBinding::Active(addrs[0])).unwrap();
        x.bind_port(1, PortBinding::Active(addrs[1])).unwrap();
        x.connect(timeout).unwrap();
        assert_eq!(0, x.sync(timeout).unwrap());
        println!("\n---------\nLOG CID={}\n{}", controller_id, x.get_mut_logger().unwrap());
    });
    handle(a.join());
    handle(b.join());
}

#[test]
fn duo_positive() {
    let timeout = Duration::from_millis(1_500);
    let addrs = ["127.0.0.1:7012".parse().unwrap(), "127.0.0.1:7013".parse().unwrap()];
    let a = thread::spawn(move || {
        let mut x = Connector::Unconfigured(Unconfigured { controller_id: 0 });
        x.configure(
            b"
        primitive main(out a, out b) {
            synchronous {}
            synchronous {}
            synchronous {
                msg m = create(0);
                put(a, m);
            }
            synchronous {
                msg m = create(0);
                put(b, m);
            }
        }",
        )
        .unwrap();
        x.bind_port(0, PortBinding::Passive(addrs[0])).unwrap();
        x.bind_port(1, PortBinding::Passive(addrs[1])).unwrap();
        x.connect(timeout).unwrap();
        assert_eq!(0, x.sync(timeout).unwrap());
        assert_eq!(0, x.sync(timeout).unwrap());
        assert_eq!(0, x.sync(timeout).unwrap());
        assert_eq!(0, x.sync(timeout).unwrap());
    });
    let b = thread::spawn(move || {
        let mut x = Connector::Unconfigured(Unconfigured { controller_id: 1 });
        x.configure(
            b"
        primitive main(in a, in b) {
            while (true) {
                synchronous {
                    if (fires(a)) {
                        get(a);
                    }
                }
                synchronous {
                    if (fires(b)) {
                        get(b);
                    }
                }
            }
        }",
        )
        .unwrap();
        x.bind_port(0, PortBinding::Active(addrs[0])).unwrap();
        x.bind_port(1, PortBinding::Active(addrs[1])).unwrap();
        x.connect(timeout).unwrap();
        assert_eq!(0, x.sync(timeout).unwrap());
        assert_eq!(0, x.sync(timeout).unwrap());
        assert_eq!(0, x.sync(timeout).unwrap());
        assert_eq!(0, x.sync(timeout).unwrap());
    });
    handle(a.join());
    handle(b.join());
}

#[test]
fn duo_negative() {
    let timeout = Duration::from_millis(500);
    let addrs = ["127.0.0.1:7012".parse().unwrap(), "127.0.0.1:7013".parse().unwrap()];
    let a = thread::spawn(move || {
        let mut x = Connector::Unconfigured(Unconfigured { controller_id: 0 });
        x.configure(b"
        primitive main(out a, out b) {
            synchronous {}
            synchronous {
                msg m = create(0);
                put(a, m); // fires a on second round
            }
        }").unwrap();
        x.bind_port(0, PortBinding::Passive(addrs[0])).unwrap();
        x.bind_port(1, PortBinding::Passive(addrs[1])).unwrap();
        x.connect(timeout).unwrap();
        assert_eq!(0, x.sync(timeout).unwrap());
        match x.sync(timeout) {
            Err(SyncErr::Timeout) => {}
            x => unreachable!("{:?}", x)
        }
    });
    let b = thread::spawn(move || {
        let mut x = Connector::Unconfigured(Unconfigured { controller_id: 1 });
        x.configure(b"
        primitive main(in a, in b) {
            while (true) {
                synchronous {
                    if (fires(a)) {
                        get(a);
                    }
                }
                synchronous {
                    if (fires(b)) { // never fire a on even round
                        get(b);
                    }
                }
            }
        }").unwrap();
        x.bind_port(0, PortBinding::Active(addrs[0])).unwrap();
        x.bind_port(1, PortBinding::Active(addrs[1])).unwrap();
        x.connect(timeout).unwrap();
        assert_eq!(0, x.sync(timeout).unwrap());
        match x.sync(timeout) {
            Err(SyncErr::Timeout) => {}
            x => unreachable!("{:?}", x)
        }
    });
    handle(a.join());
    handle(b.join());
}