integration.rs 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. static WASM: &[u8] = include_bytes!("../../../target/wasm32-unknown-unknown/release/wormhole.wasm");
  2. use cosmwasm_std::{
  3. from_slice,
  4. Coin,
  5. Env,
  6. HumanAddr,
  7. InitResponse,
  8. };
  9. use cosmwasm_storage::to_length_prefixed;
  10. use cosmwasm_vm::{
  11. testing::{
  12. init,
  13. mock_env,
  14. mock_instance,
  15. MockApi,
  16. MockQuerier,
  17. MockStorage,
  18. },
  19. Api,
  20. Instance,
  21. Storage,
  22. };
  23. use wormhole::{
  24. msg::InitMsg,
  25. state::{
  26. ConfigInfo,
  27. GuardianAddress,
  28. GuardianSetInfo,
  29. CONFIG_KEY,
  30. },
  31. };
  32. use hex;
  33. enum TestAddress {
  34. INITIALIZER,
  35. }
  36. impl TestAddress {
  37. fn value(&self) -> HumanAddr {
  38. match self {
  39. TestAddress::INITIALIZER => HumanAddr::from("initializer"),
  40. }
  41. }
  42. }
  43. fn mock_env_height(signer: &HumanAddr, height: u64, time: u64) -> Env {
  44. let mut env = mock_env(signer, &[]);
  45. env.block.height = height;
  46. env.block.time = time;
  47. env
  48. }
  49. fn get_config_info<S: Storage>(storage: &S) -> ConfigInfo {
  50. let key = to_length_prefixed(CONFIG_KEY);
  51. let data = storage
  52. .get(&key)
  53. .0
  54. .expect("error getting data")
  55. .expect("data should exist");
  56. from_slice(&data).expect("invalid data")
  57. }
  58. fn do_init(
  59. height: u64,
  60. guardians: &Vec<GuardianAddress>,
  61. ) -> Instance<MockStorage, MockApi, MockQuerier> {
  62. let mut deps = mock_instance(WASM, &[]);
  63. let init_msg = InitMsg {
  64. initial_guardian_set: GuardianSetInfo {
  65. addresses: guardians.clone(),
  66. expiration_time: 100,
  67. },
  68. guardian_set_expirity: 50,
  69. wrapped_asset_code_id: 999,
  70. };
  71. let env = mock_env_height(&TestAddress::INITIALIZER.value(), height, 0);
  72. let owner = deps
  73. .api
  74. .canonical_address(&TestAddress::INITIALIZER.value())
  75. .0
  76. .unwrap();
  77. let res: InitResponse = init(&mut deps, env, init_msg).unwrap();
  78. assert_eq!(0, res.messages.len());
  79. // query the store directly
  80. deps.with_storage(|storage| {
  81. assert_eq!(
  82. get_config_info(storage),
  83. ConfigInfo {
  84. guardian_set_index: 0,
  85. guardian_set_expirity: 50,
  86. wrapped_asset_code_id: 999,
  87. owner,
  88. fee: Coin::new(10000, "uluna"),
  89. }
  90. );
  91. Ok(())
  92. })
  93. .unwrap();
  94. deps
  95. }
  96. #[test]
  97. fn init_works() {
  98. let guardians = vec![GuardianAddress::from(GuardianAddress {
  99. bytes: hex::decode("beFA429d57cD18b7F8A4d91A2da9AB4AF05d0FBe")
  100. .expect("Decoding failed")
  101. .into(),
  102. })];
  103. let _deps = do_init(111, &guardians);
  104. }