Update tests for obliteration
This commit is contained in:
parent
4429564974
commit
b5bd076f1e
@ -509,7 +509,7 @@ mod tests {
|
|||||||
|
|
||||||
use serde_json::json;
|
use serde_json::json;
|
||||||
use sp_client::{
|
use sp_client::{
|
||||||
bitcoin::{secp256k1::SecretKey, Network}, silentpayments::utils::SilentPaymentAddress, spclient::{SpClient, SpWallet, SpendKey}
|
bitcoin::{secp256k1::SecretKey, Network, Txid}, silentpayments::utils::SilentPaymentAddress, spclient::{SpClient, SpWallet, SpendKey}
|
||||||
};
|
};
|
||||||
|
|
||||||
use crate::pcd::{Member, ValidationRule};
|
use crate::pcd::{Member, ValidationRule};
|
||||||
@ -588,10 +588,35 @@ mod tests {
|
|||||||
.unwrap()
|
.unwrap()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn create_dave_wallet() -> SpWallet {
|
||||||
|
SpWallet::new(
|
||||||
|
SpClient::new(
|
||||||
|
"default".to_owned(),
|
||||||
|
SecretKey::from_str(
|
||||||
|
"261d5f9ae4d2b0d8b17ed0c52bd2be7dbce14d9ac1f0f1d4904d3ca7df03766d",
|
||||||
|
)
|
||||||
|
.unwrap(),
|
||||||
|
SpendKey::Secret(
|
||||||
|
SecretKey::from_str(
|
||||||
|
"8441e2adbb39736f384617fafc61e0d894bf3a5c2b69801fd4476bdcce04fb59",
|
||||||
|
)
|
||||||
|
.unwrap(),
|
||||||
|
),
|
||||||
|
None,
|
||||||
|
Network::Signet,
|
||||||
|
)
|
||||||
|
.unwrap(),
|
||||||
|
None,
|
||||||
|
vec![],
|
||||||
|
)
|
||||||
|
.unwrap()
|
||||||
|
}
|
||||||
|
|
||||||
fn dummy_process_state() -> ProcessState {
|
fn dummy_process_state() -> ProcessState {
|
||||||
let alice_wallet = create_alice_wallet();
|
let alice_wallet = create_alice_wallet();
|
||||||
let bob_wallet = create_bob_wallet();
|
let bob_wallet = create_bob_wallet();
|
||||||
let carol_wallet = create_carol_wallet();
|
let carol_wallet = create_carol_wallet();
|
||||||
|
let dave_wallet = create_dave_wallet();
|
||||||
|
|
||||||
let alice_address =
|
let alice_address =
|
||||||
SilentPaymentAddress::try_from(alice_wallet.get_client().get_receiving_address())
|
SilentPaymentAddress::try_from(alice_wallet.get_client().get_receiving_address())
|
||||||
@ -602,15 +627,20 @@ mod tests {
|
|||||||
let carol_address =
|
let carol_address =
|
||||||
SilentPaymentAddress::try_from(carol_wallet.get_client().get_receiving_address())
|
SilentPaymentAddress::try_from(carol_wallet.get_client().get_receiving_address())
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
let dave_address =
|
||||||
|
SilentPaymentAddress::try_from(dave_wallet.get_client().get_receiving_address())
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
let alice_bob = Member::new(vec![alice_address, bob_address]).unwrap();
|
let alice_bob = Member::new(vec![alice_address, bob_address]).unwrap();
|
||||||
let carol = Member::new(vec![carol_address]).unwrap();
|
let carol = Member::new(vec![carol_address]).unwrap();
|
||||||
|
let dave = Member::new(vec![dave_address]).unwrap();
|
||||||
|
|
||||||
let validation_rule1 =
|
let validation_rule1 =
|
||||||
ValidationRule::new(1.0, vec!["field1".to_owned()], 0.5).unwrap();
|
ValidationRule::new(1.0, vec!["field1".to_owned()], 0.5).unwrap();
|
||||||
let validation_rule2 = ValidationRule::new(1.0, vec!["field2".to_owned()], 0.5).unwrap();
|
let validation_rule2 = ValidationRule::new(1.0, vec!["field2".to_owned()], 0.5).unwrap();
|
||||||
let validation_rule3 = ValidationRule::new(1.0, vec!["roles".to_owned()], 0.5).unwrap();
|
let validation_rule3 = ValidationRule::new(1.0, vec!["roles".to_owned()], 0.5).unwrap();
|
||||||
let validation_rule4 = ValidationRule::new(1.0, vec!["public1".to_owned(), "public2".to_owned()], 0.5).unwrap();
|
let validation_rule4 = ValidationRule::new(1.0, vec!["public1".to_owned(), "public2".to_owned()], 0.5).unwrap();
|
||||||
|
let apophis_rule = ValidationRule::new(1.0, vec!["".to_owned()], 1.0).unwrap();
|
||||||
|
|
||||||
let role_def1 = RoleDefinition {
|
let role_def1 = RoleDefinition {
|
||||||
members: vec![alice_bob.clone()],
|
members: vec![alice_bob.clone()],
|
||||||
@ -635,11 +665,18 @@ mod tests {
|
|||||||
storages: vec![]
|
storages: vec![]
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let role_def_apophis = RoleDefinition {
|
||||||
|
members: vec![dave],
|
||||||
|
validation_rules: vec![apophis_rule],
|
||||||
|
storages: vec![]
|
||||||
|
};
|
||||||
|
|
||||||
let roles: BTreeMap<String, RoleDefinition> = BTreeMap::from([
|
let roles: BTreeMap<String, RoleDefinition> = BTreeMap::from([
|
||||||
("role1".to_owned(), role_def1),
|
("role1".to_owned(), role_def1),
|
||||||
("role2".to_owned(), role_def2),
|
("role2".to_owned(), role_def2),
|
||||||
("role_roles".to_owned(), role_def_roles),
|
("role_roles".to_owned(), role_def_roles),
|
||||||
("role_public_data".to_owned(), role_def_public_data)
|
("role_public_data".to_owned(), role_def_public_data),
|
||||||
|
("apophis".to_owned(), role_def_apophis)
|
||||||
]);
|
]);
|
||||||
|
|
||||||
let clear_pcd: BTreeMap<String, Value> = serde_json::from_value(json!({
|
let clear_pcd: BTreeMap<String, Value> = serde_json::from_value(json!({
|
||||||
@ -766,6 +803,62 @@ mod tests {
|
|||||||
assert!(result.is_ok());
|
assert!(result.is_ok());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
/// Carol tries to obliterate the process but she's not apophis
|
||||||
|
fn test_error_invalid_obliteration() {
|
||||||
|
let mut state = dummy_process_state();
|
||||||
|
let mut process = Process::new(state.commited_in);
|
||||||
|
process.insert_concurrent_state(state.clone()).unwrap();
|
||||||
|
// We simulate a first commitment
|
||||||
|
process.update_states_tip(
|
||||||
|
OutPoint::new(
|
||||||
|
Txid::from_str(
|
||||||
|
"cbeb4455f8d11848809bacd59bfd570243dbe7c4e9a340fa949aae3020fdb127"
|
||||||
|
).unwrap()
|
||||||
|
, 0
|
||||||
|
)
|
||||||
|
).unwrap();
|
||||||
|
// Now we take the last empty state and try to invalidate it
|
||||||
|
let empty_state = process.get_state_for_id(&[0u8; 32]).unwrap();
|
||||||
|
let carol_key: SecretKey = create_carol_wallet()
|
||||||
|
.get_client()
|
||||||
|
.get_spend_key()
|
||||||
|
.try_into()
|
||||||
|
.unwrap();
|
||||||
|
let message_hash = empty_state.get_message_hash(true).unwrap();
|
||||||
|
state.validation_tokens.push(Proof::new(message_hash, carol_key));
|
||||||
|
let result = state.is_valid(None);
|
||||||
|
assert!(result.is_err());
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
/// Dave signs to obliterate the process
|
||||||
|
fn test_valid_obliteration() {
|
||||||
|
let mut state = dummy_process_state();
|
||||||
|
let mut process = Process::new(state.commited_in);
|
||||||
|
process.insert_concurrent_state(state.clone()).unwrap();
|
||||||
|
// We simulate a first commitment
|
||||||
|
process.update_states_tip(
|
||||||
|
OutPoint::new(
|
||||||
|
Txid::from_str(
|
||||||
|
"cbeb4455f8d11848809bacd59bfd570243dbe7c4e9a340fa949aae3020fdb127"
|
||||||
|
).unwrap()
|
||||||
|
, 0
|
||||||
|
)
|
||||||
|
).unwrap();
|
||||||
|
// Now we take the last empty state and try to invalidate it
|
||||||
|
let empty_state = process.get_state_for_id(&[0u8; 32]).unwrap();
|
||||||
|
let dave_key: SecretKey = create_dave_wallet()
|
||||||
|
.get_client()
|
||||||
|
.get_spend_key()
|
||||||
|
.try_into()
|
||||||
|
.unwrap();
|
||||||
|
let message_hash = empty_state.get_message_hash(true).unwrap();
|
||||||
|
state.validation_tokens.push(Proof::new(message_hash, dave_key));
|
||||||
|
let result = state.is_valid(None);
|
||||||
|
assert!(result.is_ok());
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
/// Carol refuses change for her part
|
/// Carol refuses change for her part
|
||||||
fn test_error_carol_votes_no() {
|
fn test_error_carol_votes_no() {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user