From 3a292c7c42bd1def7d674f5b5f1dcc52c9292a92 Mon Sep 17 00:00:00 2001 From: librelois <c@elo.tf> Date: Sat, 28 May 2022 11:14:00 +0200 Subject: [PATCH] tests(wot): add smith sub-wot tests --- pallets/duniter-wot/src/mock.rs | 98 ++++++++++++++++++++++++++++- pallets/duniter-wot/src/tests.rs | 102 ++++++++++++++++++------------- 2 files changed, 154 insertions(+), 46 deletions(-) diff --git a/pallets/duniter-wot/src/mock.rs b/pallets/duniter-wot/src/mock.rs index 6a5f214e1..abcebb38c 100644 --- a/pallets/duniter-wot/src/mock.rs +++ b/pallets/duniter-wot/src/mock.rs @@ -41,6 +41,9 @@ frame_support::construct_runtime!( Identity: pallet_identity::{Pallet, Call, Config<T>, Storage, Event<T>}, Membership: pallet_membership::<Instance1>::{Pallet, Call, Config<T>, Storage, Event<T>}, Cert: pallet_certification::<Instance1>::{Pallet, Call, Config<T>, Storage, Event<T>}, + SmithsSubWot: pallet_duniter_wot::<Instance2>::{Pallet}, + SmithsMembership: pallet_membership::<Instance2>::{Pallet, Call, Config<T>, Storage, Event<T>}, + SmithsCert: pallet_certification::<Instance2>::{Pallet, Call, Config<T>, Storage, Event<T>}, } ); @@ -122,7 +125,7 @@ impl pallet_identity::Config for Test { // Membership parameter_types! { - pub const MembershipPeriod: u64 = 5; + pub const MembershipPeriod: u64 = 8; pub const PendingMembershipPeriod: u64 = 3; pub const RenewablePeriod: u64 = 2; pub const RevocationPeriod: u64 = 4; @@ -165,10 +168,72 @@ impl pallet_certification::Config<Instance1> for Test { type ValidityPeriod = ValidityPeriod; } +// SMITHS SUB-WOT // + +parameter_types! { + pub const SmithsMinCertForMembership: u32 = 2; + pub const SmithsFirstIssuableOn: u64 = 2; +} + +impl pallet_duniter_wot::Config<Instance2> for Test { + type IsSubWot = frame_support::traits::ConstBool<true>; + type MinCertForMembership = SmithsMinCertForMembership; + type MinCertForCreateIdtyRight = frame_support::traits::ConstU32<0>; + type FirstIssuableOn = SmithsFirstIssuableOn; +} + +// SmithsMembership +parameter_types! { + pub const SmithsMembershipPeriod: u64 = 20; + pub const SmithsPendingMembershipPeriod: u64 = 3; + pub const SmithsRenewablePeriod: u64 = 2; + pub const SmithsRevocationPeriod: u64 = 4; +} + +impl pallet_membership::Config<Instance2> for Test { + type IsIdtyAllowedToRenewMembership = SmithsSubWot; + type IsIdtyAllowedToRequestMembership = SmithsSubWot; + type Event = Event; + type IdtyId = IdtyIndex; + type IdtyIdOf = Identity; + type MembershipPeriod = SmithsMembershipPeriod; + type MetaData = crate::MembershipMetaData<u64>; + type OnEvent = SmithsSubWot; + type PendingMembershipPeriod = SmithsPendingMembershipPeriod; + type RenewablePeriod = SmithsRenewablePeriod; + type RevocationPeriod = SmithsRevocationPeriod; +} + +// SmithsCert +parameter_types! { + pub const SmithsMaxByIssuer: u8 = 8; + pub const SmithsMinReceivedCertToBeAbleToIssueCert: u32 = 2; + pub const SmithsCertRenewablePeriod: u64 = 4; + pub const SmithsCertPeriod: u64 = 2; + pub const SmithsValidityPeriod: u64 = 10; +} + +impl pallet_certification::Config<Instance2> for Test { + type CertPeriod = SmithsCertPeriod; + type Event = Event; + type IdtyIndex = IdtyIndex; + type IdtyIndexOf = Identity; + type IsCertAllowed = DuniterWot; + type MaxByIssuer = SmithsMaxByIssuer; + type MinReceivedCertToBeAbleToIssueCert = SmithsMinReceivedCertToBeAbleToIssueCert; + type OnNewcert = DuniterWot; + type OnRemovedCert = DuniterWot; + type CertRenewablePeriod = SmithsCertRenewablePeriod; + type ValidityPeriod = SmithsValidityPeriod; +} + pub const NAMES: [&str; 6] = ["Alice", "Bob", "Charlie", "Dave", "Eve", "Ferdie"]; // Build genesis storage according to the mock runtime. -pub fn new_test_ext(initial_identities_len: usize) -> sp_io::TestExternalities { +pub fn new_test_ext( + initial_identities_len: usize, + initial_smiths_len: usize, +) -> sp_io::TestExternalities { let mut t = frame_system::GenesisConfig::default() .build_storage::<Test>() .unwrap(); @@ -213,6 +278,29 @@ pub fn new_test_ext(initial_identities_len: usize) -> sp_io::TestExternalities { .assimilate_storage(&mut t) .unwrap(); + pallet_membership::GenesisConfig::<Test, Instance2> { + memberships: (1..=initial_smiths_len) + .map(|i| { + ( + i as u32, + sp_membership::MembershipData { + expire_on: SmithsMembershipPeriod::get(), + renewable_on: SmithsRenewablePeriod::get(), + }, + ) + }) + .collect(), + } + .assimilate_storage(&mut t) + .unwrap(); + + pallet_certification::GenesisConfig::<Test, Instance2> { + certs_by_issuer: clique_wot(initial_smiths_len, ValidityPeriod::get()), + apply_cert_period_at_genesis: true, + } + .assimilate_storage(&mut t) + .unwrap(); + frame_support::BasicExternalities::execute_with_storage(&mut t, || { // manually increment genesis identities sufficient counter // In real world, this should be handle manually by genesis creator @@ -233,6 +321,9 @@ pub fn run_to_block(n: u64) { Identity::on_finalize(System::block_number()); Membership::on_finalize(System::block_number()); Cert::on_finalize(System::block_number()); + SmithsSubWot::on_finalize(System::block_number()); + SmithsMembership::on_finalize(System::block_number()); + SmithsCert::on_finalize(System::block_number()); System::on_finalize(System::block_number()); System::reset_events(); System::set_block_number(System::block_number() + 1); @@ -241,6 +332,9 @@ pub fn run_to_block(n: u64) { Identity::on_initialize(System::block_number()); Membership::on_initialize(System::block_number()); Cert::on_initialize(System::block_number()); + SmithsSubWot::on_initialize(System::block_number()); + SmithsMembership::on_initialize(System::block_number()); + SmithsCert::on_initialize(System::block_number()); } } diff --git a/pallets/duniter-wot/src/tests.rs b/pallets/duniter-wot/src/tests.rs index ab9dca2de..509dc7f07 100644 --- a/pallets/duniter-wot/src/tests.rs +++ b/pallets/duniter-wot/src/tests.rs @@ -24,7 +24,7 @@ use pallet_identity::{IdtyName, IdtyStatus}; #[test] fn test_genesis_build() { - new_test_ext(3).execute_with(|| { + new_test_ext(3, 2).execute_with(|| { run_to_block(1); // Verify state assert_eq!(Identity::identities_count(), 3); @@ -38,7 +38,7 @@ fn test_genesis_build() { #[test] fn test_creator_not_allowed_to_create_idty() { - new_test_ext(3).execute_with(|| { + new_test_ext(3, 2).execute_with(|| { run_to_block(1); // Alice should not be able te create an identity before block #2 @@ -50,9 +50,57 @@ fn test_creator_not_allowed_to_create_idty() { }); } +#[test] +fn test_join_smiths() { + new_test_ext(5, 3).execute_with(|| { + run_to_block(2); + + // Dave shoud be able to requst smith membership + assert_ok!(SmithsMembership::request_membership( + Origin::signed(4), + crate::MembershipMetaData(4) + )); + + run_to_block(3); + + // Then, Alice should be able to send a smith cert to Dave + assert_ok!(SmithsCert::add_cert(Origin::signed(1), 4)); + }); +} + +#[test] +fn test_revoke_smiths_them_rejoin() { + new_test_ext(5, 4).execute_with(|| { + run_to_block(2); + + // Dave shoud be able to revoke is smith membership + assert_ok!(SmithsMembership::revoke_membership( + Origin::signed(4), + Some(4) + )); + + // Dave should not be able te re-request membership before the RevocationPeriod end + run_to_block(3); + assert_err!( + SmithsMembership::request_membership(Origin::signed(4), crate::MembershipMetaData(4)), + pallet_membership::Error::<Test, crate::Instance2>::MembershipRevokedRecently + ); + + // At bloc #6, Dave shoud be able to request smith membership + run_to_block(6); + assert_ok!(SmithsMembership::request_membership( + Origin::signed(4), + crate::MembershipMetaData(4) + )); + + // Then, Alice should be able to send a smith cert to Dave + assert_ok!(SmithsCert::add_cert(Origin::signed(1), 4)); + }); +} + #[test] fn test_create_idty_ok() { - new_test_ext(5).execute_with(|| { + new_test_ext(5, 2).execute_with(|| { run_to_block(2); // Alice should be able te create an identity at block #2 @@ -91,7 +139,7 @@ fn test_create_idty_ok() { #[test] fn test_new_idty_validation() { - new_test_ext(5).execute_with(|| { + new_test_ext(5, 2).execute_with(|| { // Alice create Ferdie identity run_to_block(2); assert_ok!(Identity::create_identity(Origin::signed(1), 6)); @@ -144,7 +192,7 @@ fn test_new_idty_validation() { #[test] fn test_confirm_idty_ok() { - new_test_ext(5).execute_with(|| { + new_test_ext(5, 2).execute_with(|| { run_to_block(2); // Alice create Ferdie identity @@ -186,7 +234,7 @@ fn test_confirm_idty_ok() { #[test] fn test_idty_membership_expire_them_requested() { - new_test_ext(3).execute_with(|| { + new_test_ext(3, 2).execute_with(|| { run_to_block(4); // Alice renew her membership @@ -194,10 +242,11 @@ fn test_idty_membership_expire_them_requested() { // Bob renew his membership assert_ok!(Membership::renew_membership(Origin::signed(2), None)); - // Charlie's membership should expire at block #5 - run_to_block(5); + // Charlie's membership should expire at block #8 + run_to_block(8); assert!(Membership::membership(3).is_none()); let events = System::events(); + println!("{:?}", events); assert_eq!(events.len(), 2); assert_eq!( events[0], @@ -216,7 +265,7 @@ fn test_idty_membership_expire_them_requested() { } ); - // Charlie's identity should be removed at block #5 + // Charlie's identity should be removed at block #8 assert!(Identity::identity(3).is_none()); // Alice can't renew it's cert to Charlie @@ -224,40 +273,5 @@ fn test_idty_membership_expire_them_requested() { Cert::add_cert(Origin::signed(1), 3), pallet_certification::Error::<Test, Instance1>::CertNotAllowed ); - - /*// Charlie should be able to request membership - run_to_block(6); - assert_ok!(Membership::request_membership( - Origin::signed(3), - crate::MembershipMetaData(3) - )); - - // Charlie should re-enter in the wot immediatly - let events = System::events(); - assert_eq!(events.len(), 3); - assert_eq!( - events[0], - EventRecord { - phase: Phase::Initialization, - event: Event::Membership(pallet_membership::Event::MembershipRequested(3)), - topics: vec![], - } - ); - assert_eq!( - events[1], - EventRecord { - phase: Phase::Initialization, - event: Event::Membership(pallet_membership::Event::MembershipAcquired(3)), - topics: vec![], - } - ); - assert_eq!( - events[2], - EventRecord { - phase: Phase::Initialization, - event: Event::Identity(pallet_identity::Event::IdtyValidated(3)), - topics: vec![], - } - );*/ }); } -- GitLab