From 64d970091906edd86806e070b003b9eca186f601 Mon Sep 17 00:00:00 2001 From: Hugo Trentesaux <hugo@trentesaux.fr> Date: Mon, 13 Jan 2025 19:41:54 +0100 Subject: [PATCH] reveal bug from #276 --- pallets/smith-members/src/tests.rs | 43 ++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/pallets/smith-members/src/tests.rs b/pallets/smith-members/src/tests.rs index 0ac9ba7ed..c04bd2d17 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 { -- GitLab