()
| 401 | |
| 402 | #[test] |
| 403 | fn system_restore() { |
| 404 | let TestEnv { |
| 405 | env, canister_ids, .. |
| 406 | } = setup_new_env(); |
| 407 | |
| 408 | let system_info = get_system_info(&env, WALLET_ADMIN_USER, canister_ids.station); |
| 409 | let upgrader_id = system_info.upgrader_id; |
| 410 | |
| 411 | for target in [ |
| 412 | SystemRestoreTargetDTO::RestoreStation, |
| 413 | SystemRestoreTargetDTO::RestoreUpgrader, |
| 414 | ] { |
| 415 | let target_canister_id = match target { |
| 416 | SystemRestoreTargetDTO::RestoreStation => canister_ids.station, |
| 417 | SystemRestoreTargetDTO::RestoreUpgrader => upgrader_id, |
| 418 | }; |
| 419 | let controller = match target { |
| 420 | SystemRestoreTargetDTO::RestoreStation => upgrader_id, |
| 421 | SystemRestoreTargetDTO::RestoreUpgrader => canister_ids.station, |
| 422 | }; |
| 423 | let snapshot = env |
| 424 | .take_canister_snapshot(target_canister_id, Some(controller), None) |
| 425 | .unwrap(); |
| 426 | |
| 427 | let system_restore = RequestOperationInput::SystemRestore(SystemRestoreOperationInput { |
| 428 | target: target.clone(), |
| 429 | snapshot_id: hex::encode(&snapshot.id), |
| 430 | }); |
| 431 | |
| 432 | match target { |
| 433 | SystemRestoreTargetDTO::RestoreStation => { |
| 434 | let system_restore_request = submit_request( |
| 435 | &env, |
| 436 | WALLET_ADMIN_USER, |
| 437 | canister_ids.station, |
| 438 | system_restore, |
| 439 | ); |
| 440 | // wait until the station is restored (to a state before the restore request) at which point the restore request is not found anymore |
| 441 | loop { |
| 442 | env.tick(); |
| 443 | env.advance_time(Duration::from_secs(5)); |
| 444 | match try_get_request( |
| 445 | &env, |
| 446 | WALLET_ADMIN_USER, |
| 447 | canister_ids.station, |
| 448 | system_restore_request.clone(), |
| 449 | ) { |
| 450 | Err(err) => assert!( |
| 451 | err.reject_message.contains(&format!( |
| 452 | "Canister {} is not running", |
| 453 | canister_ids.station |
| 454 | )) || err |
| 455 | .reject_message |
| 456 | .contains(&format!("Canister {} is stopped", canister_ids.station)) |
| 457 | ), |
| 458 | Ok(Err(err)) => { |
| 459 | assert_eq!(err.code, "NOT_FOUND"); |
| 460 | break; |
nothing calls this directly
no test coverage detected