Skip to content

Commit 396e508

Browse files
committed
fix(sns-wasm): actually overwrite existing SNS-specific upgrade path entries
1 parent eb55873 commit 396e508

1 file changed

Lines changed: 43 additions & 1 deletion

File tree

rs/nns/sns-wasm/src/sns_wasm.rs

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)