removing dev branch, many changes
This commit is contained in:
@@ -1,5 +1,4 @@
|
||||
pub mod test_host_interface;
|
||||
pub mod test_protected_store;
|
||||
pub mod test_table_store;
|
||||
pub mod test_veilid_config;
|
||||
pub mod test_veilid_core;
|
||||
|
@@ -1,170 +0,0 @@
|
||||
use super::test_veilid_config::*;
|
||||
use crate::*;
|
||||
|
||||
async fn startup() -> VeilidAPI {
|
||||
trace!("test_table_store: starting");
|
||||
let (update_callback, config_callback) = setup_veilid_core();
|
||||
api_startup(update_callback, config_callback)
|
||||
.await
|
||||
.expect("startup failed")
|
||||
}
|
||||
|
||||
async fn shutdown(api: VeilidAPI) {
|
||||
trace!("test_table_store: shutting down");
|
||||
api.shutdown().await;
|
||||
trace!("test_table_store: finished");
|
||||
}
|
||||
|
||||
pub async fn test_delete_open_delete(ts: TableStore) {
|
||||
trace!("test_delete_open_delete");
|
||||
|
||||
let _ = ts.delete("test");
|
||||
let db = ts.open("test", 3).await.expect("should have opened");
|
||||
assert!(
|
||||
ts.delete("test").await.is_err(),
|
||||
"should fail because file is opened"
|
||||
);
|
||||
drop(db);
|
||||
assert!(
|
||||
ts.delete("test").await.is_ok(),
|
||||
"should succeed because file is closed"
|
||||
);
|
||||
let db = ts.open("test", 3).await.expect("should have opened");
|
||||
assert!(
|
||||
ts.delete("test").await.is_err(),
|
||||
"should fail because file is opened"
|
||||
);
|
||||
drop(db);
|
||||
let db = ts.open("test", 3).await.expect("should have opened");
|
||||
assert!(
|
||||
ts.delete("test").await.is_err(),
|
||||
"should fail because file is opened"
|
||||
);
|
||||
drop(db);
|
||||
assert!(
|
||||
ts.delete("test").await.is_ok(),
|
||||
"should succeed because file is closed"
|
||||
);
|
||||
}
|
||||
|
||||
pub async fn test_store_delete_load(ts: TableStore) {
|
||||
trace!("test_store_delete_load");
|
||||
|
||||
let _ = ts.delete("test");
|
||||
let db = ts.open("test", 3).await.expect("should have opened");
|
||||
assert!(
|
||||
ts.delete("test").await.is_err(),
|
||||
"should fail because file is opened"
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
db.load(0, b"foo").unwrap(),
|
||||
None,
|
||||
"should not load missing key"
|
||||
);
|
||||
assert!(
|
||||
db.store(1, b"foo", b"1234567890").await.is_ok(),
|
||||
"should store new key"
|
||||
);
|
||||
assert_eq!(
|
||||
db.load(0, b"foo").unwrap(),
|
||||
None,
|
||||
"should not load missing key"
|
||||
);
|
||||
assert_eq!(db.load(1, b"foo").unwrap(), Some(b"1234567890".to_vec()));
|
||||
|
||||
assert!(
|
||||
db.store(1, b"bar", b"FNORD").await.is_ok(),
|
||||
"should store new key"
|
||||
);
|
||||
assert!(
|
||||
db.store(0, b"bar", b"ABCDEFGHIJKLMNOPQRSTUVWXYZ")
|
||||
.await
|
||||
.is_ok(),
|
||||
"should store new key"
|
||||
);
|
||||
assert!(
|
||||
db.store(2, b"bar", b"FNORD").await.is_ok(),
|
||||
"should store new key"
|
||||
);
|
||||
assert!(
|
||||
db.store(2, b"baz", b"QWERTY").await.is_ok(),
|
||||
"should store new key"
|
||||
);
|
||||
assert!(
|
||||
db.store(2, b"bar", b"QWERTYUIOP").await.is_ok(),
|
||||
"should store new key"
|
||||
);
|
||||
|
||||
assert_eq!(db.load(1, b"bar").unwrap(), Some(b"FNORD".to_vec()));
|
||||
assert_eq!(
|
||||
db.load(0, b"bar").unwrap(),
|
||||
Some(b"ABCDEFGHIJKLMNOPQRSTUVWXYZ".to_vec())
|
||||
);
|
||||
assert_eq!(db.load(2, b"bar").unwrap(), Some(b"QWERTYUIOP".to_vec()));
|
||||
assert_eq!(db.load(2, b"baz").unwrap(), Some(b"QWERTY".to_vec()));
|
||||
|
||||
assert_eq!(db.delete(1, b"bar").await.unwrap(), true);
|
||||
assert_eq!(db.delete(1, b"bar").await.unwrap(), false);
|
||||
assert!(
|
||||
db.delete(4, b"bar").await.is_err(),
|
||||
"can't delete from column that doesn't exist"
|
||||
);
|
||||
|
||||
drop(db);
|
||||
let db = ts.open("test", 3).await.expect("should have opened");
|
||||
|
||||
assert_eq!(db.load(1, b"bar").unwrap(), None);
|
||||
assert_eq!(
|
||||
db.load(0, b"bar").unwrap(),
|
||||
Some(b"ABCDEFGHIJKLMNOPQRSTUVWXYZ".to_vec())
|
||||
);
|
||||
assert_eq!(db.load(2, b"bar").unwrap(), Some(b"QWERTYUIOP".to_vec()));
|
||||
assert_eq!(db.load(2, b"baz").unwrap(), Some(b"QWERTY".to_vec()));
|
||||
}
|
||||
|
||||
pub async fn test_frozen(vcrypto: CryptoSystemVersion, ts: TableStore) {
|
||||
trace!("test_frozen");
|
||||
|
||||
let _ = ts.delete("test");
|
||||
let db = ts.open("test", 3).await.expect("should have opened");
|
||||
let keypair = vcrypto.generate_keypair();
|
||||
|
||||
assert!(db.store_rkyv(0, b"asdf", &keypair).await.is_ok());
|
||||
|
||||
assert_eq!(db.load_rkyv::<KeyPair>(0, b"qwer").unwrap(), None);
|
||||
|
||||
let d = match db.load_rkyv::<KeyPair>(0, b"asdf") {
|
||||
Ok(x) => x,
|
||||
Err(e) => {
|
||||
panic!("couldn't decode: {}", e);
|
||||
}
|
||||
};
|
||||
assert_eq!(d, Some(keypair), "keys should be equal");
|
||||
|
||||
assert!(
|
||||
db.store(1, b"foo", b"1234567890").await.is_ok(),
|
||||
"should store new key"
|
||||
);
|
||||
|
||||
assert!(
|
||||
db.load_rkyv::<TypedKey>(1, b"foo").is_err(),
|
||||
"should fail to unfreeze"
|
||||
);
|
||||
}
|
||||
|
||||
pub async fn test_all() {
|
||||
let api = startup().await;
|
||||
let crypto = api.crypto().unwrap();
|
||||
let ts = api.table_store().unwrap();
|
||||
|
||||
for ck in VALID_CRYPTO_KINDS {
|
||||
let vcrypto = crypto.get(ck).unwrap();
|
||||
test_delete_open_delete(ts.clone()).await;
|
||||
test_store_delete_load(ts.clone()).await;
|
||||
test_frozen(vcrypto, ts.clone()).await;
|
||||
let _ = ts.delete("test").await;
|
||||
}
|
||||
|
||||
shutdown(api).await;
|
||||
}
|
@@ -166,7 +166,7 @@ pub fn setup_veilid_core() -> (UpdateCallback, ConfigCallback) {
|
||||
|
||||
fn config_callback(key: String) -> ConfigCallbackReturn {
|
||||
match key.as_str() {
|
||||
"program_name" => Ok(Box::new(String::from("Veilid"))),
|
||||
"program_name" => Ok(Box::new(String::from("VeilidCoreTests"))),
|
||||
"namespace" => Ok(Box::new(String::from(""))),
|
||||
"capabilities.protocol_udp" => Ok(Box::new(true)),
|
||||
"capabilities.protocol_connect_tcp" => Ok(Box::new(true)),
|
||||
@@ -176,13 +176,17 @@ fn config_callback(key: String) -> ConfigCallbackReturn {
|
||||
"capabilities.protocol_connect_wss" => Ok(Box::new(true)),
|
||||
"capabilities.protocol_accept_wss" => Ok(Box::new(true)),
|
||||
"table_store.directory" => Ok(Box::new(get_table_store_path())),
|
||||
"table_store.delete" => Ok(Box::new(false)),
|
||||
"table_store.delete" => Ok(Box::new(true)),
|
||||
"block_store.directory" => Ok(Box::new(get_block_store_path())),
|
||||
"block_store.delete" => Ok(Box::new(false)),
|
||||
"block_store.delete" => Ok(Box::new(true)),
|
||||
"protected_store.allow_insecure_fallback" => Ok(Box::new(true)),
|
||||
"protected_store.always_use_insecure_storage" => Ok(Box::new(false)),
|
||||
"protected_store.insecure_fallback_directory" => Ok(Box::new(get_protected_store_path())),
|
||||
"protected_store.delete" => Ok(Box::new(false)),
|
||||
"protected_store.directory" => Ok(Box::new(get_protected_store_path())),
|
||||
"protected_store.delete" => Ok(Box::new(true)),
|
||||
"protected_store.device_encryption_key_password" => Ok(Box::new("".to_owned())),
|
||||
"protected_store.new_device_encryption_key_password" => {
|
||||
Ok(Box::new(Option::<String>::None))
|
||||
}
|
||||
"network.connection_initial_timeout_ms" => Ok(Box::new(2_000u32)),
|
||||
"network.connection_inactivity_timeout_ms" => Ok(Box::new(60_000u32)),
|
||||
"network.max_connections_per_ip4" => Ok(Box::new(8u32)),
|
||||
@@ -204,22 +208,28 @@ fn config_callback(key: String) -> ConfigCallbackReturn {
|
||||
"network.rpc.queue_size" => Ok(Box::new(1024u32)),
|
||||
"network.rpc.max_timestamp_behind_ms" => Ok(Box::new(Some(10_000u32))),
|
||||
"network.rpc.max_timestamp_ahead_ms" => Ok(Box::new(Some(10_000u32))),
|
||||
"network.rpc.timeout_ms" => Ok(Box::new(10_000u32)),
|
||||
"network.rpc.timeout_ms" => Ok(Box::new(5_000u32)),
|
||||
"network.rpc.max_route_hop_count" => Ok(Box::new(4u8)),
|
||||
"network.rpc.default_route_hop_count" => Ok(Box::new(1u8)),
|
||||
"network.dht.resolve_node_timeout_ms" => Ok(Box::new(Option::<u32>::None)),
|
||||
"network.dht.resolve_node_count" => Ok(Box::new(20u32)),
|
||||
"network.dht.resolve_node_fanout" => Ok(Box::new(3u32)),
|
||||
"network.dht.max_find_node_count" => Ok(Box::new(20u32)),
|
||||
"network.dht.get_value_timeout_ms" => Ok(Box::new(Option::<u32>::None)),
|
||||
"network.dht.get_value_count" => Ok(Box::new(20u32)),
|
||||
"network.dht.get_value_fanout" => Ok(Box::new(3u32)),
|
||||
"network.dht.set_value_timeout_ms" => Ok(Box::new(Option::<u32>::None)),
|
||||
"network.dht.set_value_count" => Ok(Box::new(20u32)),
|
||||
"network.dht.set_value_fanout" => Ok(Box::new(5u32)),
|
||||
"network.dht.resolve_node_timeout_ms" => Ok(Box::new(10_000u32)),
|
||||
"network.dht.resolve_node_count" => Ok(Box::new(1u32)),
|
||||
"network.dht.resolve_node_fanout" => Ok(Box::new(4u32)),
|
||||
"network.dht.get_value_timeout_ms" => Ok(Box::new(10_000u32)),
|
||||
"network.dht.get_value_count" => Ok(Box::new(3u32)),
|
||||
"network.dht.get_value_fanout" => Ok(Box::new(4u32)),
|
||||
"network.dht.set_value_timeout_ms" => Ok(Box::new(10_000u32)),
|
||||
"network.dht.set_value_count" => Ok(Box::new(5u32)),
|
||||
"network.dht.set_value_fanout" => Ok(Box::new(4u32)),
|
||||
"network.dht.min_peer_count" => Ok(Box::new(20u32)),
|
||||
"network.dht.min_peer_refresh_time_ms" => Ok(Box::new(2_000u32)),
|
||||
"network.dht.validate_dial_info_receipt_time_ms" => Ok(Box::new(5_000u32)),
|
||||
"network.dht.local_subkey_cache_size" => Ok(Box::new(128u32)),
|
||||
"network.dht.local_max_subkey_cache_memory_mb" => Ok(Box::new(256u32)),
|
||||
"network.dht.remote_subkey_cache_size" => Ok(Box::new(1024u32)),
|
||||
"network.dht.remote_max_records" => Ok(Box::new(4096u32)),
|
||||
"network.dht.remote_max_subkey_cache_memory_mb" => Ok(Box::new(64u32)),
|
||||
"network.dht.remote_max_storage_space_mb" => Ok(Box::new(64u32)),
|
||||
"network.upnp" => Ok(Box::new(false)),
|
||||
"network.detect_address_changes" => Ok(Box::new(true)),
|
||||
"network.restricted_nat_retries" => Ok(Box::new(3u32)),
|
||||
@@ -286,7 +296,7 @@ pub async fn test_config() {
|
||||
}
|
||||
|
||||
let inner = vc.get();
|
||||
assert_eq!(inner.program_name, String::from("Veilid"));
|
||||
assert_eq!(inner.program_name, String::from("VeilidCoreTests"));
|
||||
assert_eq!(inner.namespace, String::from(""));
|
||||
assert_eq!(inner.capabilities.protocol_udp, true);
|
||||
assert_eq!(inner.capabilities.protocol_connect_tcp, true);
|
||||
@@ -296,16 +306,21 @@ pub async fn test_config() {
|
||||
assert_eq!(inner.capabilities.protocol_connect_wss, true);
|
||||
assert_eq!(inner.capabilities.protocol_accept_wss, true);
|
||||
assert_eq!(inner.table_store.directory, get_table_store_path());
|
||||
assert_eq!(inner.table_store.delete, false);
|
||||
assert_eq!(inner.table_store.delete, true);
|
||||
assert_eq!(inner.block_store.directory, get_block_store_path());
|
||||
assert_eq!(inner.block_store.delete, false);
|
||||
assert_eq!(inner.block_store.delete, true);
|
||||
assert_eq!(inner.protected_store.allow_insecure_fallback, true);
|
||||
assert_eq!(inner.protected_store.always_use_insecure_storage, false);
|
||||
assert_eq!(inner.protected_store.directory, get_protected_store_path());
|
||||
assert_eq!(inner.protected_store.delete, true);
|
||||
assert_eq!(
|
||||
inner.protected_store.insecure_fallback_directory,
|
||||
get_protected_store_path()
|
||||
inner.protected_store.device_encryption_key_password,
|
||||
"".to_owned()
|
||||
);
|
||||
assert_eq!(
|
||||
inner.protected_store.new_device_encryption_key_password,
|
||||
Option::<String>::None
|
||||
);
|
||||
assert_eq!(inner.protected_store.delete, false);
|
||||
assert_eq!(inner.network.connection_initial_timeout_ms, 2_000u32);
|
||||
assert_eq!(inner.network.connection_inactivity_timeout_ms, 60_000u32);
|
||||
assert_eq!(inner.network.max_connections_per_ip4, 8u32);
|
||||
@@ -317,7 +332,7 @@ pub async fn test_config() {
|
||||
assert_eq!(inner.network.hole_punch_receipt_time_ms, 5_000u32);
|
||||
assert_eq!(inner.network.rpc.concurrency, 2u32);
|
||||
assert_eq!(inner.network.rpc.queue_size, 1024u32);
|
||||
assert_eq!(inner.network.rpc.timeout_ms, 10_000u32);
|
||||
assert_eq!(inner.network.rpc.timeout_ms, 5_000u32);
|
||||
assert_eq!(inner.network.rpc.max_route_hop_count, 4u8);
|
||||
assert_eq!(inner.network.rpc.default_route_hop_count, 1u8);
|
||||
assert_eq!(inner.network.routing_table.node_id.len(), 0);
|
||||
@@ -329,18 +344,16 @@ pub async fn test_config() {
|
||||
assert_eq!(inner.network.routing_table.limit_attached_good, 8u32);
|
||||
assert_eq!(inner.network.routing_table.limit_attached_weak, 4u32);
|
||||
|
||||
assert_eq!(
|
||||
inner.network.dht.resolve_node_timeout_ms,
|
||||
Option::<u32>::None
|
||||
);
|
||||
assert_eq!(inner.network.dht.resolve_node_count, 20u32);
|
||||
assert_eq!(inner.network.dht.resolve_node_fanout, 3u32);
|
||||
assert_eq!(inner.network.dht.get_value_timeout_ms, Option::<u32>::None);
|
||||
assert_eq!(inner.network.dht.get_value_count, 20u32);
|
||||
assert_eq!(inner.network.dht.get_value_fanout, 3u32);
|
||||
assert_eq!(inner.network.dht.set_value_timeout_ms, Option::<u32>::None);
|
||||
assert_eq!(inner.network.dht.set_value_count, 20u32);
|
||||
assert_eq!(inner.network.dht.set_value_fanout, 5u32);
|
||||
assert_eq!(inner.network.dht.max_find_node_count, 20u32);
|
||||
assert_eq!(inner.network.dht.resolve_node_timeout_ms, 10_000u32);
|
||||
assert_eq!(inner.network.dht.resolve_node_count, 1u32);
|
||||
assert_eq!(inner.network.dht.resolve_node_fanout, 4u32);
|
||||
assert_eq!(inner.network.dht.get_value_timeout_ms, 10_000u32);
|
||||
assert_eq!(inner.network.dht.get_value_count, 3u32);
|
||||
assert_eq!(inner.network.dht.get_value_fanout, 4u32);
|
||||
assert_eq!(inner.network.dht.set_value_timeout_ms, 10_000u32);
|
||||
assert_eq!(inner.network.dht.set_value_count, 5u32);
|
||||
assert_eq!(inner.network.dht.set_value_fanout, 4u32);
|
||||
assert_eq!(inner.network.dht.min_peer_count, 20u32);
|
||||
assert_eq!(inner.network.dht.min_peer_refresh_time_ms, 2_000u32);
|
||||
assert_eq!(
|
||||
|
@@ -42,169 +42,7 @@ pub async fn test_attach_detach() {
|
||||
api.shutdown().await;
|
||||
}
|
||||
|
||||
pub async fn test_signed_node_info() {
|
||||
info!("--- test_signed_node_info ---");
|
||||
|
||||
let (update_callback, config_callback) = setup_veilid_core();
|
||||
let api = api_startup(update_callback, config_callback)
|
||||
.await
|
||||
.expect("startup failed");
|
||||
|
||||
let crypto = api.crypto().unwrap();
|
||||
for ck in VALID_CRYPTO_KINDS {
|
||||
let vcrypto = crypto.get(ck).unwrap();
|
||||
|
||||
// Test direct
|
||||
let node_info = NodeInfo {
|
||||
network_class: NetworkClass::InboundCapable,
|
||||
outbound_protocols: ProtocolTypeSet::all(),
|
||||
address_types: AddressTypeSet::all(),
|
||||
envelope_support: VALID_ENVELOPE_VERSIONS.to_vec(),
|
||||
crypto_support: VALID_CRYPTO_KINDS.to_vec(),
|
||||
dial_info_detail_list: vec![DialInfoDetail {
|
||||
class: DialInfoClass::Mapped,
|
||||
dial_info: DialInfo::udp(SocketAddress::default()),
|
||||
}],
|
||||
};
|
||||
|
||||
// Test correct validation
|
||||
let keypair = vcrypto.generate_keypair();
|
||||
let sni = SignedDirectNodeInfo::make_signatures(
|
||||
crypto.clone(),
|
||||
vec![TypedKeyPair::new(ck, keypair)],
|
||||
node_info.clone(),
|
||||
)
|
||||
.unwrap();
|
||||
let mut tks: TypedKeySet = TypedKey::new(ck, keypair.key).into();
|
||||
let oldtkslen = tks.len();
|
||||
let _ = SignedDirectNodeInfo::new(
|
||||
crypto.clone(),
|
||||
&mut tks,
|
||||
node_info.clone(),
|
||||
sni.timestamp,
|
||||
sni.signatures.clone(),
|
||||
)
|
||||
.unwrap();
|
||||
assert_eq!(tks.len(), oldtkslen);
|
||||
assert_eq!(tks.len(), sni.signatures.len());
|
||||
|
||||
// Test incorrect validation
|
||||
let keypair1 = vcrypto.generate_keypair();
|
||||
let mut tks1: TypedKeySet = TypedKey::new(ck, keypair1.key).into();
|
||||
let oldtks1len = tks1.len();
|
||||
let _ = SignedDirectNodeInfo::new(
|
||||
crypto.clone(),
|
||||
&mut tks1,
|
||||
node_info.clone(),
|
||||
sni.timestamp,
|
||||
sni.signatures.clone(),
|
||||
)
|
||||
.unwrap_err();
|
||||
assert_eq!(tks1.len(), oldtks1len);
|
||||
assert_eq!(tks1.len(), sni.signatures.len());
|
||||
|
||||
// Test unsupported cryptosystem validation
|
||||
let fake_crypto_kind: CryptoKind = FourCC::from([0, 1, 2, 3]);
|
||||
let mut tksfake: TypedKeySet = TypedKey::new(fake_crypto_kind, PublicKey::default()).into();
|
||||
let mut sigsfake = sni.signatures.clone();
|
||||
sigsfake.push(TypedSignature::new(fake_crypto_kind, Signature::default()));
|
||||
tksfake.add(TypedKey::new(ck, keypair.key));
|
||||
let sdnifake = SignedDirectNodeInfo::new(
|
||||
crypto.clone(),
|
||||
&mut tksfake,
|
||||
node_info.clone(),
|
||||
sni.timestamp,
|
||||
sigsfake.clone(),
|
||||
)
|
||||
.unwrap();
|
||||
assert_eq!(tksfake.len(), 1);
|
||||
assert_eq!(sdnifake.signatures.len(), sigsfake.len());
|
||||
|
||||
// Test relayed
|
||||
let node_info2 = NodeInfo {
|
||||
network_class: NetworkClass::OutboundOnly,
|
||||
outbound_protocols: ProtocolTypeSet::all(),
|
||||
address_types: AddressTypeSet::all(),
|
||||
envelope_support: VALID_ENVELOPE_VERSIONS.to_vec(),
|
||||
crypto_support: VALID_CRYPTO_KINDS.to_vec(),
|
||||
dial_info_detail_list: vec![DialInfoDetail {
|
||||
class: DialInfoClass::Blocked,
|
||||
dial_info: DialInfo::udp(SocketAddress::default()),
|
||||
}],
|
||||
};
|
||||
|
||||
// Test correct validation
|
||||
let keypair2 = vcrypto.generate_keypair();
|
||||
let mut tks2: TypedKeySet = TypedKey::new(ck, keypair2.key).into();
|
||||
let oldtks2len = tks2.len();
|
||||
|
||||
let sni2 = SignedRelayedNodeInfo::make_signatures(
|
||||
crypto.clone(),
|
||||
vec![TypedKeyPair::new(ck, keypair2)],
|
||||
node_info2.clone(),
|
||||
tks.clone(),
|
||||
sni.clone(),
|
||||
)
|
||||
.unwrap();
|
||||
let _ = SignedRelayedNodeInfo::new(
|
||||
crypto.clone(),
|
||||
&mut tks2,
|
||||
node_info2.clone(),
|
||||
tks.clone(),
|
||||
sni.clone(),
|
||||
sni2.timestamp,
|
||||
sni2.signatures.clone(),
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
assert_eq!(tks2.len(), oldtks2len);
|
||||
assert_eq!(tks2.len(), sni2.signatures.len());
|
||||
|
||||
// Test incorrect validation
|
||||
let keypair3 = vcrypto.generate_keypair();
|
||||
let mut tks3: TypedKeySet = TypedKey::new(ck, keypair3.key).into();
|
||||
let oldtks3len = tks3.len();
|
||||
|
||||
let _ = SignedRelayedNodeInfo::new(
|
||||
crypto.clone(),
|
||||
&mut tks3,
|
||||
node_info2.clone(),
|
||||
tks.clone(),
|
||||
sni.clone(),
|
||||
sni2.timestamp,
|
||||
sni2.signatures.clone(),
|
||||
)
|
||||
.unwrap_err();
|
||||
|
||||
assert_eq!(tks3.len(), oldtks3len);
|
||||
assert_eq!(tks3.len(), sni2.signatures.len());
|
||||
|
||||
// Test unsupported cryptosystem validation
|
||||
let fake_crypto_kind: CryptoKind = FourCC::from([0, 1, 2, 3]);
|
||||
let mut tksfake3: TypedKeySet =
|
||||
TypedKey::new(fake_crypto_kind, PublicKey::default()).into();
|
||||
let mut sigsfake3 = sni2.signatures.clone();
|
||||
sigsfake3.push(TypedSignature::new(fake_crypto_kind, Signature::default()));
|
||||
tksfake3.add(TypedKey::new(ck, keypair2.key));
|
||||
let srnifake = SignedRelayedNodeInfo::new(
|
||||
crypto.clone(),
|
||||
&mut tksfake3,
|
||||
node_info2.clone(),
|
||||
tks.clone(),
|
||||
sni.clone(),
|
||||
sni2.timestamp,
|
||||
sigsfake3.clone(),
|
||||
)
|
||||
.unwrap();
|
||||
assert_eq!(tksfake3.len(), 1);
|
||||
assert_eq!(srnifake.signatures.len(), sigsfake3.len());
|
||||
}
|
||||
|
||||
api.shutdown().await;
|
||||
}
|
||||
|
||||
pub async fn test_all() {
|
||||
test_startup_shutdown().await;
|
||||
test_attach_detach().await;
|
||||
test_signed_node_info().await;
|
||||
}
|
||||
|
@@ -12,3 +12,6 @@ use super::*;
|
||||
pub use common::*;
|
||||
pub use crypto::tests::*;
|
||||
pub use network_manager::tests::*;
|
||||
pub use routing_table::tests::test_serialize as test_routing_table_serialize;
|
||||
pub use table_store::tests::*;
|
||||
pub use veilid_api::tests::*;
|
||||
|
@@ -2,16 +2,20 @@
|
||||
#![cfg(not(target_arch = "wasm32"))]
|
||||
use crate::crypto::tests::*;
|
||||
use crate::network_manager::tests::*;
|
||||
use crate::routing_table;
|
||||
use crate::table_store::tests::*;
|
||||
use crate::tests::common::*;
|
||||
use crate::veilid_api;
|
||||
use crate::*;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#[allow(dead_code)]
|
||||
pub async fn run_all_tests() {
|
||||
// iOS and Android tests also run these.
|
||||
info!("TEST: test_host_interface");
|
||||
test_host_interface::test_all().await;
|
||||
info!("TEST: test_dht_key");
|
||||
info!("TEST: test_types");
|
||||
test_types::test_all().await;
|
||||
info!("TEST: test_veilid_core");
|
||||
test_veilid_core::test_all().await;
|
||||
@@ -19,6 +23,8 @@ pub async fn run_all_tests() {
|
||||
test_veilid_config::test_all().await;
|
||||
info!("TEST: test_connection_table");
|
||||
test_connection_table::test_all().await;
|
||||
info!("TEST: test_signed_node_info");
|
||||
test_signed_node_info::test_all().await;
|
||||
info!("TEST: test_table_store");
|
||||
test_table_store::test_all().await;
|
||||
info!("TEST: test_protected_store");
|
||||
@@ -27,6 +33,10 @@ pub async fn run_all_tests() {
|
||||
test_crypto::test_all().await;
|
||||
info!("TEST: test_envelope_receipt");
|
||||
test_envelope_receipt::test_all().await;
|
||||
info!("TEST: veilid_api::test_serialize");
|
||||
veilid_api::tests::test_serialize_rkyv::test_all().await;
|
||||
info!("TEST: routing_table::test_serialize");
|
||||
routing_table::tests::test_serialize::test_all().await;
|
||||
|
||||
info!("Finished unit tests");
|
||||
}
|
||||
@@ -116,6 +126,15 @@ cfg_if! {
|
||||
})
|
||||
}
|
||||
|
||||
#[test]
|
||||
#[serial]
|
||||
fn run_test_signed_node_info() {
|
||||
setup();
|
||||
block_on(async {
|
||||
test_signed_node_info::test_all().await;
|
||||
})
|
||||
}
|
||||
|
||||
#[test]
|
||||
#[serial]
|
||||
fn run_test_table_store() {
|
||||
@@ -152,5 +171,22 @@ cfg_if! {
|
||||
})
|
||||
}
|
||||
|
||||
#[test]
|
||||
#[serial]
|
||||
fn run_test_serialize_rkyv() {
|
||||
setup();
|
||||
block_on(async {
|
||||
veilid_api::tests::test_serialize_rkyv::test_all().await;
|
||||
})
|
||||
}
|
||||
|
||||
#[test]
|
||||
#[serial]
|
||||
fn run_test_routing_table_serialize() {
|
||||
setup();
|
||||
block_on(async {
|
||||
routing_table::tests::test_serialize::test_all().await;
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user