@@ -59,17 +59,30 @@ async fn basic() {
5959 } ;
6060 update_settings ( & arg) . await . unwrap ( ) ;
6161
62+ // wat2wasm "(module (@custom "icp:public X" "content of X"))"
63+ let wasm_module = b"\x00 asm\x01 \x00 \x00 \x00 \x00 \x19 \x0c \
64+ icp:public\x20 Xcontent\x20 of\x20 X"
65+ . to_vec ( ) ;
66+
6267 // install_code
6368 let arg = InstallCodeArgs {
6469 mode : CanisterInstallMode :: Install ,
6570 canister_id,
6671 // A minimal valid wasm module
6772 // wat2wasm "(module)"
68- wasm_module : b" \x00 asm \x01 \x00 \x00 \x00 " . to_vec ( ) ,
73+ wasm_module,
6974 arg : vec ! [ ] ,
7075 } ;
7176 install_code ( & arg) . await . unwrap ( ) ;
7277
78+ // canister_metadata
79+ let arg = CanisterMetadataArgs {
80+ canister_id,
81+ name : "X" . to_string ( ) ,
82+ } ;
83+ let result = canister_metadata ( & arg) . await . unwrap ( ) ;
84+ assert_eq ! ( result. value, b"content of X" . to_vec( ) ) ;
85+
7386 // uninstall_code
7487 let arg = UninstallCodeArgs { canister_id } ;
7588 uninstall_code ( & arg) . await . unwrap ( ) ;
@@ -307,12 +320,13 @@ async fn snapshots() {
307320
308321 // Cannot take a snapshot of a canister that is empty.
309322 // So we install a minimal wasm module.
323+ // A minimal valid wasm module
324+ // wat2wasm "(module)"
325+ let wasm_module = b"\x00 asm\x01 \x00 \x00 \x00 " . to_vec ( ) ;
310326 let arg = InstallCodeArgs {
311327 mode : CanisterInstallMode :: Install ,
312328 canister_id,
313- // A minimal valid wasm module
314- // wat2wasm "(module)"
315- wasm_module : b"\x00 asm\x01 \x00 \x00 \x00 " . to_vec ( ) ,
329+ wasm_module : wasm_module. clone ( ) ,
316330 arg : vec ! [ ] ,
317331 } ;
318332 install_code ( & arg) . await . unwrap ( ) ;
@@ -322,25 +336,67 @@ async fn snapshots() {
322336 canister_id,
323337 replace_snapshot : None ,
324338 } ;
325- let snapshot = take_canister_snapshot ( & arg) . await . unwrap ( ) ;
339+ let snapshot1 = take_canister_snapshot ( & arg) . await . unwrap ( ) ;
326340
327341 // load_canister_snapshot
328342 let arg = LoadCanisterSnapshotArgs {
329343 canister_id,
330- snapshot_id : snapshot . id . clone ( ) ,
344+ snapshot_id : snapshot1 . id . clone ( ) ,
331345 } ;
332346 assert ! ( load_canister_snapshot( & arg) . await . is_ok( ) ) ;
333347
348+ // read_canister_snapshot_metadata
349+ let arg = ReadCanisterSnapshotMetadataArgs {
350+ canister_id,
351+ snapshot_id : snapshot1. id . clone ( ) ,
352+ } ;
353+ let snapshot_metadata = read_canister_snapshot_metadata ( & arg) . await . unwrap ( ) ;
354+
355+ // read_canister_snapshot_data
356+ let arg = ReadCanisterSnapshotDataArgs {
357+ canister_id,
358+ snapshot_id : snapshot1. id . clone ( ) ,
359+ kind : SnapshotDataKind :: WasmModule { offset : 0 , size : 8 } ,
360+ } ;
361+ let result = read_canister_snapshot_data ( & arg) . await . unwrap ( ) ;
362+ assert_eq ! ( result. chunk, wasm_module) ;
363+
364+ // upload_canister_snapshot_metadata
365+ let globals = snapshot_metadata. globals . into_iter ( ) . flatten ( ) . collect ( ) ;
366+ let arg = UploadCanisterSnapshotMetadataArgs {
367+ canister_id,
368+ replace_snapshot : None ,
369+ wasm_module_size : snapshot_metadata. wasm_module_size ,
370+ globals,
371+ wasm_memory_size : snapshot_metadata. wasm_memory_size ,
372+ stable_memory_size : snapshot_metadata. stable_memory_size ,
373+ certified_data : snapshot_metadata. certified_data ,
374+ global_timer : snapshot_metadata. global_timer ,
375+ on_low_wasm_memory_hook_status : snapshot_metadata. on_low_wasm_memory_hook_status ,
376+ } ;
377+ let snapshot2 = upload_canister_snapshot_metadata ( & arg) . await . unwrap ( ) ;
378+ assert ! ( !snapshot2. snapshot_id. is_empty( ) ) ;
379+
380+ // upload_canister_snapshot_data
381+ let arg = UploadCanisterSnapshotDataArgs {
382+ canister_id,
383+ snapshot_id : snapshot2. snapshot_id . clone ( ) ,
384+ kind : SnapshotDataOffset :: WasmModule { offset : 0 } ,
385+ chunk : wasm_module. clone ( ) ,
386+ } ;
387+ assert ! ( upload_canister_snapshot_data( & arg) . await . is_ok( ) ) ;
388+
334389 // list_canister_snapshots
335390 let args = ListCanisterSnapshotsArgs { canister_id } ;
336391 let snapshots = list_canister_snapshots ( & args) . await . unwrap ( ) ;
337- assert_eq ! ( snapshots. len( ) , 1 ) ;
338- assert_eq ! ( snapshots[ 0 ] . id, snapshot. id) ;
392+ assert_eq ! ( snapshots. len( ) , 2 ) ;
393+ assert_eq ! ( snapshots[ 0 ] . id, snapshot1. id) ;
394+ assert_eq ! ( snapshots[ 1 ] . id, snapshot2. snapshot_id) ;
339395
340396 // delete_canister_snapshot
341397 let arg = DeleteCanisterSnapshotArgs {
342398 canister_id,
343- snapshot_id : snapshot . id . clone ( ) ,
399+ snapshot_id : snapshot1 . id . clone ( ) ,
344400 } ;
345401 assert ! ( delete_canister_snapshot( & arg) . await . is_ok( ) ) ;
346402
@@ -353,11 +409,11 @@ async fn snapshots() {
353409 assert_eq ! ( canister_info_result. total_num_changes, 3 ) ;
354410 assert_eq ! ( canister_info_result. recent_changes. len( ) , 1 ) ;
355411 if let Change {
356- details : ChangeDetails :: LoadSnapshot ( load_snapshot_record) ,
412+ details : Some ( ChangeDetails :: LoadSnapshot ( load_snapshot_record) ) ,
357413 ..
358414 } = & canister_info_result. recent_changes [ 0 ]
359415 {
360- assert_eq ! ( load_snapshot_record. snapshot_id, snapshot . id) ;
416+ assert_eq ! ( load_snapshot_record. snapshot_id, snapshot1 . id) ;
361417 } else {
362418 panic ! ( "Expected the most recent change to be LoadSnapshot" ) ;
363419 }
0 commit comments