extern crate unbase;
use unbase::SubjectHandle;
use std::{thread, time};
#[test]
fn remote_traversal_simulated() {
let net = unbase::Network::create_new_system();
let mut simulator = unbase::network::transport::Simulator::new();
net.add_transport( Box::new(simulator.clone()) );
simulator.metronome(50);
let context_a = unbase::Slab::new(&net).create_context();
let _context_b = unbase::Slab::new(&net).create_context();
let rec_a1 = SubjectHandle::new_kv(&context_a, "animal_sound", "Moo").unwrap();
rec_a1.set_value("animal_sound","Woof").unwrap();
rec_a1.set_value("animal_sound","Meow").unwrap();
simulator.wait_ticks(3);
context_a.slab.remotize_memo_ids( &rec_a1.get_all_memo_ids() ).expect("failed to remotize memos");
simulator.wait_ticks(1);
assert_eq!(rec_a1.get_value("animal_sound").unwrap(), "Meow");
}
#[test]
fn remote_traversal_nondeterministic_direct() {
let net = unbase::Network::create_new_system();
let context_a = unbase::Slab::new(&net).create_context();
let _context_b = unbase::Slab::new(&net).create_context();
let rec_a1 = SubjectHandle::new_kv(&context_a, "animal_sound", "Moo").unwrap();
rec_a1.set_value("animal_sound","Woof").unwrap();
rec_a1.set_value("animal_sound","Meow").unwrap();
thread::sleep(time::Duration::from_millis(50));
context_a.slab.remotize_memo_ids_wait( &rec_a1.get_all_memo_ids(), 1000 ).expect("failed to remotize memos");
thread::sleep(time::Duration::from_millis(50));
assert_eq!(rec_a1.get_value("animal_sound").unwrap(), "Meow");
}
#[test]
fn remote_traversal_nondeterministic_udp() {
let t1 = thread::spawn(|| {
let net1 = unbase::Network::create_new_system();
let udp1 = unbase::network::transport::TransportUDP::new("127.0.0.1:12011".to_string());
net1.add_transport( Box::new(udp1) );
let context_a = unbase::Slab::new(&net1).create_context();
let rec_a1 = SubjectHandle::new_kv(&context_a, "animal_sound", "Moo").unwrap();
rec_a1.set_value("animal_sound","Woof").unwrap();
rec_a1.set_value("animal_sound","Meow").unwrap();
context_a.slab.remotize_memo_ids_wait( &rec_a1.get_all_memo_ids(), 1000 ).expect("remotize memos");
thread::sleep(time::Duration::from_millis(50));
assert_eq!(rec_a1.get_value("animal_sound").unwrap(), "Meow");
thread::sleep(time::Duration::from_millis(500));
});
thread::sleep( time::Duration::from_millis(50) );
let t2 = thread::spawn(|| {
let net2 = unbase::Network::new();
net2.hack_set_next_slab_id(200);
let udp2 = unbase::network::transport::TransportUDP::new("127.0.0.1:12012".to_string());
net2.add_transport( Box::new(udp2.clone()) );
let slab_b = unbase::Slab::new(&net2);
udp2.seed_address_from_string( "127.0.0.1:12011".to_string() );
thread::sleep( time::Duration::from_millis(50) );
let _context_b = slab_b.create_context();
thread::sleep(time::Duration::from_millis(1500));
});
t2.join().expect("thread2.join");
t1.join().expect("thread1.join");
}