/*! Unit tests that require access to the testing-only function BridgeLine::random() or private fields */ use super::bridge_table::BridgeLine; use super::*; #[test] fn test_open_invite() { // Create a BridegDb let bdb = BridgeDb::new(20); // Create a BridgeAuth let mut ba = BridgeAuth::new(bdb.pubkey); // Make 20 buckets with one random bridge each for _ in 0..20 { let bucket: [BridgeLine; 3] = [BridgeLine::random(), Default::default(), Default::default()]; ba.bridge_table.new_bucket(bucket); } // And 20 more with three random bridges each for _ in 0..20 { let bucket: [BridgeLine; 3] = [ BridgeLine::random(), BridgeLine::random(), BridgeLine::random(), ]; ba.bridge_table.new_bucket(bucket); } // Create the encrypted bridge table ba.bridge_table.encrypt_table(); // Issue an open invitation let inv = bdb.invite(); // Use it to get a Lox credential let (req, state) = open_invite::request(&inv); let resp = ba.handle_open_invite(req).unwrap(); let cred = open_invite::handle_response(state, resp, &ba.lox_pub, &ba.migration_pub).unwrap(); // Check that we can use the credential to read a bucket let (id, key) = bridge_table::from_scalar(cred.bucket).unwrap(); let bucket = ba.bridge_table.decrypt_bucket_id(id, &key).unwrap(); println!("cred = {:?}", cred); println!("bucket = {:?}", bucket); } #[test] fn test_trust_promotion() { // Create a BridegDb let bdb = BridgeDb::new(15); // Create a BridgeAuth let mut ba = BridgeAuth::new(bdb.pubkey); // Make 15 buckets with one random bridge each for _ in 0..15 { let bucket: [BridgeLine; 3] = [BridgeLine::random(), Default::default(), Default::default()]; ba.bridge_table.new_bucket(bucket); } // Make 5 more buckets, each containing 3 of the previously // created bridges for i in 0u32..5 { let iusize = i as usize; let bucket: [BridgeLine; 3] = [ ba.bridge_table.buckets[3 * iusize][0], ba.bridge_table.buckets[3 * iusize + 1][0], ba.bridge_table.buckets[3 * iusize + 2][0], ]; ba.bridge_table.new_bucket(bucket); // Add the allowed migrations to the migration table ba.migration_table.table.push((3 * i, 15 + i)); ba.migration_table.table.push((3 * i + 1, 15 + i)); ba.migration_table.table.push((3 * i + 2, 15 + i)); } // Create the encrypted bridge table ba.bridge_table.encrypt_table(); // Issue an open invitation let inv = bdb.invite(); // Use it to get a Lox credential let (req, state) = open_invite::request(&inv); let resp = ba.handle_open_invite(req).unwrap(); let cred = open_invite::handle_response(state, resp, &ba.lox_pub, &ba.migration_pub).unwrap(); // Time passes ba.advance_days(40); let (promreq, promstate) = trust_promotion::request(&cred, &ba.lox_pub, ba.today()).unwrap(); }