@@ -1940,14 +1940,15 @@ impl UpgradePath {
19401940 . or_default ( )
19411941 . entry ( from)
19421942 {
1943- Entry :: Occupied ( occupied) => {
1943+ Entry :: Occupied ( mut occupied) => {
19441944 println ! (
19451945 "Special Entry for {} from {:?} to {:?} is being overwritten with new value {:?}" ,
19461946 sns_governance_canister_id,
19471947 occupied. key( ) ,
19481948 occupied. get( ) ,
19491949 to
19501950 ) ;
1951+ occupied. insert ( to) ;
19511952 }
19521953 Entry :: Vacant ( vacant) => {
19531954 vacant. insert ( to) ;
@@ -5646,4 +5647,45 @@ mod test {
56465647 ) ;
56475648 }
56485649 }
5650+
5651+ #[ test]
5652+ fn test_insert_sns_specific_upgrade_path_entry_overwrites_existing_entry ( ) {
5653+ let sns_governance_canister_id = CanisterId :: from_u64 ( 1000 ) ;
5654+ let from_version = SnsVersion {
5655+ governance_wasm_hash : vec ! [ 1 ] ,
5656+ ..Default :: default ( )
5657+ } ;
5658+ let first_to_version = SnsVersion {
5659+ governance_wasm_hash : vec ! [ 2 ] ,
5660+ ..Default :: default ( )
5661+ } ;
5662+ let second_to_version = SnsVersion {
5663+ governance_wasm_hash : vec ! [ 3 ] ,
5664+ ..Default :: default ( )
5665+ } ;
5666+
5667+ let mut upgrade_path = UpgradePath :: default ( ) ;
5668+ upgrade_path. insert_sns_specific_upgrade_path_entry (
5669+ from_version. clone ( ) ,
5670+ first_to_version. clone ( ) ,
5671+ sns_governance_canister_id,
5672+ ) ;
5673+ assert_eq ! (
5674+ upgrade_path. get_next_version( from_version. clone( ) , sns_governance_canister_id. get( ) ) ,
5675+ Some ( first_to_version)
5676+ ) ;
5677+
5678+ // Run code under test: reconfigure the same `from_version` entry with a new target.
5679+ upgrade_path. insert_sns_specific_upgrade_path_entry (
5680+ from_version. clone ( ) ,
5681+ second_to_version. clone ( ) ,
5682+ sns_governance_canister_id,
5683+ ) ;
5684+
5685+ // The entry must reflect the new target, not the stale first one.
5686+ assert_eq ! (
5687+ upgrade_path. get_next_version( from_version, sns_governance_canister_id. get( ) ) ,
5688+ Some ( second_to_version)
5689+ ) ;
5690+ }
56495691}
0 commit comments