diff --git a/pallets/smith-members/src/tests.rs b/pallets/smith-members/src/tests.rs index 0ac9ba7ed63137d4519d484f20523a607cc6c329..c04bd2d17b8392e85ef138e5f6e1f409dd3b6cf4 100644 --- a/pallets/smith-members/src/tests.rs +++ b/pallets/smith-members/src/tests.rs @@ -628,6 +628,49 @@ fn certifying_an_online_smith() { }); } +/// Shows that scheduled expiration stay scheduled forever, even in the past +/// This is harmful for storage because we store unnecessary data +#[test] +fn expires_on_keeps_growing() { + new_test_ext(GenesisConfig { + initial_smiths: btreemap![ + 1 => (true, vec![2, 3]), + 2 => (true, vec![1,3]), + 3 => (true, vec![1,2]), + ], + }) + .execute_with(|| { + // Alice goes offline, and is set to expire + Pallet::<Runtime>::on_smith_goes_offline(1); + // The expiration block is present in smith data + assert_eq!( + Smiths::<Runtime>::get(1), + Some(SmithMeta { + status: Smith, + expires_on: Some(5), + issued_certs: vec![2, 3], + received_certs: vec![2, 3] + }) + ); + // It is also present in ExpiresOn schedule + assert_eq!(ExpiresOn::<Runtime>::get(5), Some(vec![1])); + // Go to expiration session + Pallet::<Runtime>::on_new_session(5); + // Alice is expired + assert_eq!( + Smiths::<Runtime>::get(1), + Some(SmithMeta { + status: Excluded, + expires_on: None, + issued_certs: vec![2, 3], + received_certs: vec![] + }) + ); + // but ExpiresOn schedule is still there (and will stay forever) + assert_eq!(ExpiresOn::<Runtime>::get(5), Some(vec![1])); + }); +} + #[test] fn invitation_on_non_wot_member() { new_test_ext(GenesisConfig {