@layerzerolabs/protocol-stellar-v2 0.2.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +727 -0
- package/.turbo/turbo-lint.log +158 -0
- package/.turbo/turbo-test.log +796 -0
- package/Cargo.lock +2237 -0
- package/Cargo.toml +63 -0
- package/clippy.toml +7 -0
- package/contracts/common-macros/Cargo.toml +20 -0
- package/contracts/common-macros/src/error.rs +53 -0
- package/contracts/common-macros/src/event.rs +16 -0
- package/contracts/common-macros/src/lib.rs +255 -0
- package/contracts/common-macros/src/ownable.rs +63 -0
- package/contracts/common-macros/src/snapshots/common_macros__tests__tests__snapshot_generated_storage_code.snap +310 -0
- package/contracts/common-macros/src/storage.rs +439 -0
- package/contracts/common-macros/src/tests.rs +287 -0
- package/contracts/common-macros/src/ttl_configurable.rs +60 -0
- package/contracts/endpoint-v2/ARCHITECTURE.md +233 -0
- package/contracts/endpoint-v2/Cargo.toml +30 -0
- package/contracts/endpoint-v2/src/constants.rs +52 -0
- package/contracts/endpoint-v2/src/endpoint_v2.rs +305 -0
- package/contracts/endpoint-v2/src/errors.rs +29 -0
- package/contracts/endpoint-v2/src/events.rs +207 -0
- package/contracts/endpoint-v2/src/interfaces/layerzero_composer.rs +26 -0
- package/contracts/endpoint-v2/src/interfaces/layerzero_endpoint_v2.rs +170 -0
- package/contracts/endpoint-v2/src/interfaces/layerzero_receiver.rs +43 -0
- package/contracts/endpoint-v2/src/interfaces/message_lib.rs +62 -0
- package/contracts/endpoint-v2/src/interfaces/message_lib_manager.rs +220 -0
- package/contracts/endpoint-v2/src/interfaces/messaging_channel.rs +121 -0
- package/contracts/endpoint-v2/src/interfaces/messaging_composer.rs +63 -0
- package/contracts/endpoint-v2/src/interfaces/mod.rs +17 -0
- package/contracts/endpoint-v2/src/interfaces/send_lib.rs +70 -0
- package/contracts/endpoint-v2/src/lib.rs +22 -0
- package/contracts/endpoint-v2/src/message_lib_manager.rs +315 -0
- package/contracts/endpoint-v2/src/messaging_channel.rs +218 -0
- package/contracts/endpoint-v2/src/messaging_composer.rs +76 -0
- package/contracts/endpoint-v2/src/storage.rs +78 -0
- package/contracts/endpoint-v2/src/tests/endpoint_setup.rs +131 -0
- package/contracts/endpoint-v2/src/tests/endpoint_v2/clear.rs +237 -0
- package/contracts/endpoint-v2/src/tests/endpoint_v2/delegate.rs +42 -0
- package/contracts/endpoint-v2/src/tests/endpoint_v2/initializable.rs +76 -0
- package/contracts/endpoint-v2/src/tests/endpoint_v2/lz_receive_alert.rs +211 -0
- package/contracts/endpoint-v2/src/tests/endpoint_v2/mod.rs +18 -0
- package/contracts/endpoint-v2/src/tests/endpoint_v2/native_token.rs +10 -0
- package/contracts/endpoint-v2/src/tests/endpoint_v2/owner.rs +10 -0
- package/contracts/endpoint-v2/src/tests/endpoint_v2/pay_messaging_fees.rs +424 -0
- package/contracts/endpoint-v2/src/tests/endpoint_v2/quote.rs +144 -0
- package/contracts/endpoint-v2/src/tests/endpoint_v2/recover_token.rs +72 -0
- package/contracts/endpoint-v2/src/tests/endpoint_v2/require_oapp_auth.rs +29 -0
- package/contracts/endpoint-v2/src/tests/endpoint_v2/send.rs +513 -0
- package/contracts/endpoint-v2/src/tests/endpoint_v2/set_delegate.rs +43 -0
- package/contracts/endpoint-v2/src/tests/endpoint_v2/set_zro.rs +27 -0
- package/contracts/endpoint-v2/src/tests/endpoint_v2/transfer_ownership.rs +30 -0
- package/contracts/endpoint-v2/src/tests/endpoint_v2/ttl_config.rs +202 -0
- package/contracts/endpoint-v2/src/tests/endpoint_v2/verifiable.rs +59 -0
- package/contracts/endpoint-v2/src/tests/endpoint_v2/verify.rs +172 -0
- package/contracts/endpoint-v2/src/tests/endpoint_v2/zro.rs +23 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/mod.rs +10 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/register_library.rs +131 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/require_registered.rs +35 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/require_supported_eid.rs +28 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/set_config.rs +79 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/set_default_receive_lib_timeout.rs +246 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/set_default_receive_library.rs +285 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/set_default_send_library.rs +180 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/set_receive_library.rs +405 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/set_receive_library_timeout.rs +80 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/set_send_library.rs +131 -0
- package/contracts/endpoint-v2/src/tests/messaging_channel/burn.rs +358 -0
- package/contracts/endpoint-v2/src/tests/messaging_channel/clear.rs +316 -0
- package/contracts/endpoint-v2/src/tests/messaging_channel/inbound_nonce.rs +288 -0
- package/contracts/endpoint-v2/src/tests/messaging_channel/inbound_payload_hash.rs +316 -0
- package/contracts/endpoint-v2/src/tests/messaging_channel/internal.rs +388 -0
- package/contracts/endpoint-v2/src/tests/messaging_channel/lazy_inbound_nonce.rs +307 -0
- package/contracts/endpoint-v2/src/tests/messaging_channel/mod.rs +10 -0
- package/contracts/endpoint-v2/src/tests/messaging_channel/next_guid.rs +239 -0
- package/contracts/endpoint-v2/src/tests/messaging_channel/nilify.rs +324 -0
- package/contracts/endpoint-v2/src/tests/messaging_channel/outbound_nonce.rs +242 -0
- package/contracts/endpoint-v2/src/tests/messaging_channel/skip.rs +232 -0
- package/contracts/endpoint-v2/src/tests/messaging_composer/clear_compose.rs +212 -0
- package/contracts/endpoint-v2/src/tests/messaging_composer/compose_queue.rs +213 -0
- package/contracts/endpoint-v2/src/tests/messaging_composer/lz_compose_alert.rs +269 -0
- package/contracts/endpoint-v2/src/tests/messaging_composer/mod.rs +4 -0
- package/contracts/endpoint-v2/src/tests/messaging_composer/send_compose.rs +173 -0
- package/contracts/endpoint-v2/src/tests/mock.rs +132 -0
- package/contracts/endpoint-v2/src/tests/mod.rs +12 -0
- package/contracts/endpoint-v2/src/tests/util/build_payload.rs +126 -0
- package/contracts/endpoint-v2/src/tests/util/compute_guid.rs +82 -0
- package/contracts/endpoint-v2/src/tests/util/keccak256.rs +115 -0
- package/contracts/endpoint-v2/src/tests/util/mod.rs +3 -0
- package/contracts/endpoint-v2/src/util.rs +52 -0
- package/contracts/message-libs/Cargo.toml +12 -0
- package/contracts/message-libs/block-message-lib/Cargo.toml +19 -0
- package/contracts/message-libs/block-message-lib/src/lib.rs +70 -0
- package/contracts/message-libs/lib.rs +2 -0
- package/contracts/message-libs/message-lib-common/Cargo.toml +24 -0
- package/contracts/message-libs/message-lib-common/src/errors.rs +20 -0
- package/contracts/message-libs/message-lib-common/src/interfaces/dvn.rs +55 -0
- package/contracts/message-libs/message-lib-common/src/interfaces/executor.rs +46 -0
- package/contracts/message-libs/message-lib-common/src/interfaces/mod.rs +7 -0
- package/contracts/message-libs/message-lib-common/src/interfaces/treasury.rs +17 -0
- package/contracts/message-libs/message-lib-common/src/lib.rs +14 -0
- package/contracts/message-libs/message-lib-common/src/packet_codec_v1.rs +99 -0
- package/contracts/message-libs/message-lib-common/src/testing_utils.rs +27 -0
- package/contracts/message-libs/message-lib-common/src/tests/mod.rs +2 -0
- package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1.rs +162 -0
- package/contracts/message-libs/message-lib-common/src/tests/worker_options.rs +319 -0
- package/contracts/message-libs/message-lib-common/src/worker_options.rs +190 -0
- package/contracts/message-libs/simple-message-lib/Cargo.toml +26 -0
- package/contracts/message-libs/simple-message-lib/src/errors.rs +11 -0
- package/contracts/message-libs/simple-message-lib/src/lib.rs +14 -0
- package/contracts/message-libs/simple-message-lib/src/simple_message_lib.rs +136 -0
- package/contracts/message-libs/simple-message-lib/src/storage.rs +27 -0
- package/contracts/message-libs/simple-message-lib/src/test.rs +280 -0
- package/contracts/message-libs/treasury/Cargo.toml +27 -0
- package/contracts/message-libs/treasury/src/errors.rs +10 -0
- package/contracts/message-libs/treasury/src/events.rs +28 -0
- package/contracts/message-libs/treasury/src/interfaces/mod.rs +3 -0
- package/contracts/message-libs/treasury/src/interfaces/zro_fee_lib.rs +20 -0
- package/contracts/message-libs/treasury/src/lib.rs +20 -0
- package/contracts/message-libs/treasury/src/storage.rs +18 -0
- package/contracts/message-libs/treasury/src/tests/mod.rs +2 -0
- package/contracts/message-libs/treasury/src/tests/setup.rs +112 -0
- package/contracts/message-libs/treasury/src/tests/treasury_tests.rs +562 -0
- package/contracts/message-libs/treasury/src/treasury.rs +140 -0
- package/contracts/message-libs/uln-302/Cargo.toml +28 -0
- package/contracts/message-libs/uln-302/src/config_validation.rs +173 -0
- package/contracts/message-libs/uln-302/src/errors.rs +29 -0
- package/contracts/message-libs/uln-302/src/events.rs +72 -0
- package/contracts/message-libs/uln-302/src/interfaces/mod.rs +5 -0
- package/contracts/message-libs/uln-302/src/interfaces/receive.rs +82 -0
- package/contracts/message-libs/uln-302/src/interfaces/send.rs +159 -0
- package/contracts/message-libs/uln-302/src/lib.rs +20 -0
- package/contracts/message-libs/uln-302/src/receive.rs +199 -0
- package/contracts/message-libs/uln-302/src/send.rs +349 -0
- package/contracts/message-libs/uln-302/src/storage.rs +47 -0
- package/contracts/message-libs/uln-302/src/tests/config/mod.rs +2 -0
- package/contracts/message-libs/uln-302/src/tests/config/oapp_uln_config.rs +291 -0
- package/contracts/message-libs/uln-302/src/tests/config/uln_config.rs +163 -0
- package/contracts/message-libs/uln-302/src/tests/mod.rs +7 -0
- package/contracts/message-libs/uln-302/src/tests/receive_uln302/commit_verification.rs +183 -0
- package/contracts/message-libs/uln-302/src/tests/receive_uln302/confirmations.rs +128 -0
- package/contracts/message-libs/uln-302/src/tests/receive_uln302/effective_receive_uln_config.rs +104 -0
- package/contracts/message-libs/uln-302/src/tests/receive_uln302/mod.rs +66 -0
- package/contracts/message-libs/uln-302/src/tests/receive_uln302/set_default_receive_uln_configs.rs +79 -0
- package/contracts/message-libs/uln-302/src/tests/receive_uln302/verifiable.rs +463 -0
- package/contracts/message-libs/uln-302/src/tests/receive_uln302/verify.rs +173 -0
- package/contracts/message-libs/uln-302/src/tests/send_uln302/effective_executor_config.rs +132 -0
- package/contracts/message-libs/uln-302/src/tests/send_uln302/effective_send_uln_config.rs +117 -0
- package/contracts/message-libs/uln-302/src/tests/send_uln302/mod.rs +6 -0
- package/contracts/message-libs/uln-302/src/tests/send_uln302/quote.rs +586 -0
- package/contracts/message-libs/uln-302/src/tests/send_uln302/send.rs +834 -0
- package/contracts/message-libs/uln-302/src/tests/send_uln302/set_default_executor_configs.rs +95 -0
- package/contracts/message-libs/uln-302/src/tests/send_uln302/set_default_send_uln_configs.rs +80 -0
- package/contracts/message-libs/uln-302/src/tests/setup.rs +268 -0
- package/contracts/message-libs/uln-302/src/tests/testing_utils.rs +47 -0
- package/contracts/message-libs/uln-302/src/tests/uln302/get_app_receive_uln_config.rs +51 -0
- package/contracts/message-libs/uln-302/src/tests/uln302/get_app_send_uln_config.rs +51 -0
- package/contracts/message-libs/uln-302/src/tests/uln302/get_oapp_executor_config.rs +48 -0
- package/contracts/message-libs/uln-302/src/tests/uln302/mod.rs +4 -0
- package/contracts/message-libs/uln-302/src/tests/uln302/set_config.rs +998 -0
- package/contracts/message-libs/uln-302/src/uln302.rs +117 -0
- package/contracts/oapp-macros/Cargo.toml +21 -0
- package/contracts/oapp-macros/src/lib.rs +408 -0
- package/contracts/oapp-macros/src/oapp_core.rs +49 -0
- package/contracts/oapp-macros/src/oapp_full.rs +15 -0
- package/contracts/oapp-macros/src/oapp_options_type3.rs +46 -0
- package/contracts/oapp-macros/src/oapp_receiver.rs +67 -0
- package/contracts/oapp-macros/src/oapp_sender.rs +23 -0
- package/contracts/oapp-macros/src/util.rs +103 -0
- package/contracts/oapp-macros/tests/test_macros.rs +522 -0
- package/contracts/oapps/Cargo.toml +12 -0
- package/contracts/oapps/counter/Cargo.toml +24 -0
- package/contracts/oapps/counter/integration_tests/mod.rs +3 -0
- package/contracts/oapps/counter/integration_tests/setup.rs +201 -0
- package/contracts/oapps/counter/integration_tests/test_with_sml.rs +166 -0
- package/contracts/oapps/counter/integration_tests/utils.rs +144 -0
- package/contracts/oapps/counter/src/codec.rs +63 -0
- package/contracts/oapps/counter/src/counter.rs +235 -0
- package/contracts/oapps/counter/src/errors.rs +9 -0
- package/contracts/oapps/counter/src/lib.rs +16 -0
- package/contracts/oapps/counter/src/options.rs +30 -0
- package/contracts/oapps/counter/src/storage.rs +33 -0
- package/contracts/oapps/counter/src/tests/mod.rs +37 -0
- package/contracts/oapps/counter/src/tests/test_codec.rs +64 -0
- package/contracts/oapps/counter/src/tests/test_counter.rs +390 -0
- package/contracts/oapps/counter/src/u256_ext.rs +21 -0
- package/contracts/oapps/lib.rs +2 -0
- package/contracts/oapps/oapp/Cargo.toml +21 -0
- package/contracts/oapps/oapp/src/errors.rs +9 -0
- package/contracts/oapps/oapp/src/lib.rs +10 -0
- package/contracts/oapps/oapp/src/oapp_core.rs +92 -0
- package/contracts/oapps/oapp/src/oapp_options_type3.rs +89 -0
- package/contracts/oapps/oapp/src/oapp_receiver.rs +72 -0
- package/contracts/oapps/oapp/src/oapp_sender.rs +66 -0
- package/contracts/oapps/oapp/src/tests/mod.rs +4 -0
- package/contracts/oapps/oapp/src/tests/test_oapp_core.rs +162 -0
- package/contracts/oapps/oapp/src/tests/test_oapp_options_type3.rs +180 -0
- package/contracts/oapps/oapp/src/tests/test_oapp_receiver.rs +157 -0
- package/contracts/oapps/oapp/src/tests/test_oapp_sender.rs +283 -0
- package/contracts/utils/Cargo.toml +21 -0
- package/contracts/utils/src/buffer_reader.rs +143 -0
- package/contracts/utils/src/buffer_writer.rs +117 -0
- package/contracts/utils/src/bytes_ext.rs +19 -0
- package/contracts/utils/src/errors.rs +30 -0
- package/contracts/utils/src/lib.rs +15 -0
- package/contracts/utils/src/option_ext.rs +38 -0
- package/contracts/utils/src/ownable.rs +88 -0
- package/contracts/utils/src/testing_utils.rs +100 -0
- package/contracts/utils/src/tests/buffer_reader.rs +1006 -0
- package/contracts/utils/src/tests/buffer_writer.rs +330 -0
- package/contracts/utils/src/tests/bytes_ext.rs +77 -0
- package/contracts/utils/src/tests/mod.rs +4 -0
- package/contracts/utils/src/tests/ownable.rs +149 -0
- package/contracts/utils/src/ttl.rs +164 -0
- package/contracts/workers/Cargo.toml +13 -0
- package/contracts/workers/executor/Cargo.toml +26 -0
- package/contracts/workers/executor/src/events.rs +22 -0
- package/contracts/workers/executor/src/executor.rs +347 -0
- package/contracts/workers/executor/src/interfaces/executor.rs +40 -0
- package/contracts/workers/executor/src/interfaces/mod.rs +5 -0
- package/contracts/workers/executor/src/interfaces/types.rs +51 -0
- package/contracts/workers/executor/src/lib.rs +10 -0
- package/contracts/workers/executor/src/storage.rs +23 -0
- package/contracts/workers/lib.rs +2 -0
- package/contracts/workers/worker-common/Cargo.toml +18 -0
- package/contracts/workers/worker-common/src/constants.rs +17 -0
- package/contracts/workers/worker-common/src/errors.rs +6 -0
- package/contracts/workers/worker-common/src/events.rs +34 -0
- package/contracts/workers/worker-common/src/interfaces/executor_fee_lib.rs +35 -0
- package/contracts/workers/worker-common/src/interfaces/mod.rs +7 -0
- package/contracts/workers/worker-common/src/interfaces/price_feed.rs +40 -0
- package/contracts/workers/worker-common/src/interfaces/worker.rs +60 -0
- package/contracts/workers/worker-common/src/lib.rs +19 -0
- package/contracts/workers/worker-common/src/storage.rs +32 -0
- package/contracts/workers/worker-common/src/worker_common.rs +166 -0
- package/package.json +25 -0
- package/rust-toolchain.toml +4 -0
- package/rustfmt.toml +17 -0
- package/sdk/.turbo/turbo-build.log +4 -0
- package/sdk/dist/generated/bml.d.ts +452 -0
- package/sdk/dist/generated/bml.js +72 -0
- package/sdk/dist/generated/counter.d.ts +824 -0
- package/sdk/dist/generated/counter.js +125 -0
- package/sdk/dist/generated/endpoint.d.ts +1676 -0
- package/sdk/dist/generated/endpoint.js +216 -0
- package/sdk/dist/generated/sml.d.ts +810 -0
- package/sdk/dist/generated/sml.js +132 -0
- package/sdk/dist/generated/uln302.d.ts +1227 -0
- package/sdk/dist/generated/uln302.js +185 -0
- package/sdk/dist/index.d.ts +5 -0
- package/sdk/dist/index.js +5 -0
- package/sdk/node_modules/.bin/tsc +21 -0
- package/sdk/node_modules/.bin/tsserver +21 -0
- package/sdk/node_modules/.bin/vitest +21 -0
- package/sdk/node_modules/.bin/zx +21 -0
- package/sdk/package.json +40 -0
- package/sdk/src/index.ts +5 -0
- package/sdk/test/index.test.ts +271 -0
- package/sdk/test/suites/constants.ts +13 -0
- package/sdk/test/suites/deploy.ts +277 -0
- package/sdk/test/suites/localnet.ts +42 -0
- package/sdk/test/suites/scan.ts +189 -0
- package/sdk/tsconfig.json +106 -0
- package/tools/ts-bindings-gen/Cargo.toml +14 -0
- package/tools/ts-bindings-gen/src/main.rs +147 -0
- package/turbo.json +12 -0
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
use soroban_sdk::{
|
|
2
|
+
testutils::{Address as _, MockAuth, MockAuthInvoke},
|
|
3
|
+
vec, Address, IntoVal, Vec,
|
|
4
|
+
};
|
|
5
|
+
|
|
6
|
+
use crate::{tests::endpoint_setup::setup, SetConfigParam};
|
|
7
|
+
|
|
8
|
+
// Tests for set_config
|
|
9
|
+
// Note: set_config is a pass-through method that delegates to MessageLibClient.
|
|
10
|
+
// Since mock message libs don't implement set_config, we focus on testing authorization.
|
|
11
|
+
// The actual config setting is tested in the message library contract tests.
|
|
12
|
+
|
|
13
|
+
#[test]
|
|
14
|
+
fn test_set_config_oapp_auth() {
|
|
15
|
+
let context = setup();
|
|
16
|
+
let env = &context.env;
|
|
17
|
+
let endpoint_client = &context.endpoint_client;
|
|
18
|
+
|
|
19
|
+
let oapp = Address::generate(env);
|
|
20
|
+
let message_lib = Address::generate(env); // Just use an address, won't actually call it
|
|
21
|
+
|
|
22
|
+
let params: Vec<SetConfigParam> = vec![env];
|
|
23
|
+
|
|
24
|
+
// Try with oapp auth - should pass authorization check
|
|
25
|
+
// (will fail on lib call since it's not a real lib, but that's after auth)
|
|
26
|
+
env.mock_auths(&[MockAuth {
|
|
27
|
+
address: &oapp,
|
|
28
|
+
invoke: &MockAuthInvoke {
|
|
29
|
+
contract: &endpoint_client.address,
|
|
30
|
+
fn_name: "set_config",
|
|
31
|
+
args: (&oapp, &oapp, &message_lib, ¶ms).into_val(env),
|
|
32
|
+
sub_invokes: &[],
|
|
33
|
+
},
|
|
34
|
+
}]);
|
|
35
|
+
|
|
36
|
+
// Call will fail at library invocation, but we verify auth works
|
|
37
|
+
let _ = endpoint_client.try_set_config(&oapp, &oapp, &message_lib, ¶ms);
|
|
38
|
+
// We're just verifying the auth part - the library call failure is expected
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
#[test]
|
|
42
|
+
fn test_set_config_delegate_auth() {
|
|
43
|
+
let context = setup();
|
|
44
|
+
let env = &context.env;
|
|
45
|
+
let endpoint_client = &context.endpoint_client;
|
|
46
|
+
|
|
47
|
+
let oapp = Address::generate(env);
|
|
48
|
+
let delegate = Address::generate(env);
|
|
49
|
+
|
|
50
|
+
// Set delegate for oapp
|
|
51
|
+
let delegate_option = Some(delegate.clone());
|
|
52
|
+
env.mock_auths(&[MockAuth {
|
|
53
|
+
address: &oapp,
|
|
54
|
+
invoke: &MockAuthInvoke {
|
|
55
|
+
contract: &endpoint_client.address,
|
|
56
|
+
fn_name: "set_delegate",
|
|
57
|
+
args: (&oapp, &delegate_option).into_val(env),
|
|
58
|
+
sub_invokes: &[],
|
|
59
|
+
},
|
|
60
|
+
}]);
|
|
61
|
+
endpoint_client.set_delegate(&oapp, &delegate_option);
|
|
62
|
+
|
|
63
|
+
let message_lib = Address::generate(env);
|
|
64
|
+
let params: Vec<SetConfigParam> = vec![env];
|
|
65
|
+
|
|
66
|
+
// Try with delegate auth - should pass authorization check
|
|
67
|
+
env.mock_auths(&[MockAuth {
|
|
68
|
+
address: &delegate,
|
|
69
|
+
invoke: &MockAuthInvoke {
|
|
70
|
+
contract: &endpoint_client.address,
|
|
71
|
+
fn_name: "set_config",
|
|
72
|
+
args: (&delegate, &oapp, &message_lib, ¶ms).into_val(env),
|
|
73
|
+
sub_invokes: &[],
|
|
74
|
+
},
|
|
75
|
+
}]);
|
|
76
|
+
|
|
77
|
+
// Call will fail at library invocation, but we verify delegate auth works
|
|
78
|
+
let _ = endpoint_client.try_set_config(&delegate, &oapp, &message_lib, ¶ms);
|
|
79
|
+
}
|
package/contracts/endpoint-v2/src/tests/message_lib_manager/set_default_receive_lib_timeout.rs
ADDED
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
use soroban_sdk::{testutils::Address as _, testutils::Ledger, vec, Address};
|
|
2
|
+
|
|
3
|
+
use crate::{
|
|
4
|
+
errors::EndpointError, events::DefaultReceiveLibraryTimeoutSet, storage, tests::endpoint_setup::setup,
|
|
5
|
+
MessageLibType, Timeout,
|
|
6
|
+
};
|
|
7
|
+
use utils::testing_utils::assert_event;
|
|
8
|
+
|
|
9
|
+
// Tests for set_default_receive_lib_timeout
|
|
10
|
+
#[test]
|
|
11
|
+
#[should_panic(expected = "Error(Auth, InvalidAction)")]
|
|
12
|
+
fn test_set_default_receive_lib_timeout_requires_owner_auth() {
|
|
13
|
+
let context = setup();
|
|
14
|
+
let env = &context.env;
|
|
15
|
+
let endpoint_client = &context.endpoint_client;
|
|
16
|
+
|
|
17
|
+
let non_owner = Address::generate(env);
|
|
18
|
+
|
|
19
|
+
// Create a valid timeout
|
|
20
|
+
let receive_lib = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, context.eid]);
|
|
21
|
+
let timeout = Some(Timeout { lib: receive_lib, expiry: env.ledger().timestamp() + 1000 });
|
|
22
|
+
|
|
23
|
+
// Mock auth for non-owner
|
|
24
|
+
context.mock_auth(&non_owner, "set_default_receive_lib_timeout", (&context.eid, &timeout));
|
|
25
|
+
|
|
26
|
+
// Should fail when non-owner tries to set
|
|
27
|
+
endpoint_client.set_default_receive_lib_timeout(&context.eid, &timeout);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
#[test]
|
|
31
|
+
fn test_set_default_receive_lib_timeout_unregistered_lib() {
|
|
32
|
+
let context = setup();
|
|
33
|
+
let env = &context.env;
|
|
34
|
+
let endpoint_client = &context.endpoint_client;
|
|
35
|
+
|
|
36
|
+
// Create but don't register a valid receive lib
|
|
37
|
+
let receive_lib = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, context.eid]);
|
|
38
|
+
let timeout = Some(Timeout { lib: receive_lib, expiry: env.ledger().timestamp() + 1000 });
|
|
39
|
+
|
|
40
|
+
// Mock owner auth
|
|
41
|
+
context.mock_owner_auth("set_default_receive_lib_timeout", (&context.eid, &timeout));
|
|
42
|
+
|
|
43
|
+
// Should fail with unregistered library
|
|
44
|
+
let result = endpoint_client.try_set_default_receive_lib_timeout(&context.eid, &timeout);
|
|
45
|
+
|
|
46
|
+
assert_eq!(result.err().unwrap().ok().unwrap(), EndpointError::OnlyRegisteredLib.into());
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
#[test]
|
|
50
|
+
fn test_set_default_receive_lib_timeout_wrong_lib_type() {
|
|
51
|
+
let context = setup();
|
|
52
|
+
let env = &context.env;
|
|
53
|
+
let endpoint_client = &context.endpoint_client;
|
|
54
|
+
|
|
55
|
+
// Create and register a send-only lib
|
|
56
|
+
let send_lib = context.setup_mock_message_lib(MessageLibType::Send, vec![env, context.eid]);
|
|
57
|
+
|
|
58
|
+
// Register the library
|
|
59
|
+
context.mock_owner_auth("register_library", (&send_lib,));
|
|
60
|
+
endpoint_client.register_library(&send_lib);
|
|
61
|
+
|
|
62
|
+
let timeout = Some(Timeout { lib: send_lib, expiry: env.ledger().timestamp() + 1000 });
|
|
63
|
+
|
|
64
|
+
// Mock owner auth
|
|
65
|
+
context.mock_owner_auth("set_default_receive_lib_timeout", (&context.eid, &timeout));
|
|
66
|
+
|
|
67
|
+
// Should fail with send-only library
|
|
68
|
+
let result = endpoint_client.try_set_default_receive_lib_timeout(&context.eid, &timeout);
|
|
69
|
+
|
|
70
|
+
assert_eq!(result.err().unwrap().ok().unwrap(), EndpointError::OnlyReceiveLib.into());
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
#[test]
|
|
74
|
+
fn test_set_default_receive_lib_timeout_unsupported_eid() {
|
|
75
|
+
let context = setup();
|
|
76
|
+
let env = &context.env;
|
|
77
|
+
let endpoint_client = &context.endpoint_client;
|
|
78
|
+
|
|
79
|
+
let unsupported_eid = context.eid + 1;
|
|
80
|
+
|
|
81
|
+
// Create and register a receive lib that only supports TEST_EID
|
|
82
|
+
let receive_lib = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, context.eid]);
|
|
83
|
+
|
|
84
|
+
// Register the library
|
|
85
|
+
context.mock_owner_auth("register_library", (&receive_lib,));
|
|
86
|
+
endpoint_client.register_library(&receive_lib);
|
|
87
|
+
|
|
88
|
+
let timeout = Some(Timeout { lib: receive_lib, expiry: env.ledger().timestamp() + 1000 });
|
|
89
|
+
|
|
90
|
+
// Mock owner auth
|
|
91
|
+
context.mock_owner_auth("set_default_receive_lib_timeout", (&unsupported_eid, &timeout));
|
|
92
|
+
|
|
93
|
+
// Should fail with unsupported eid
|
|
94
|
+
let result = endpoint_client.try_set_default_receive_lib_timeout(&unsupported_eid, &timeout);
|
|
95
|
+
|
|
96
|
+
assert_eq!(result.err().unwrap().ok().unwrap(), EndpointError::UnsupportedEid.into());
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
#[test]
|
|
100
|
+
fn test_set_default_receive_lib_timeout_invalid_expiry() {
|
|
101
|
+
let context = setup();
|
|
102
|
+
let env = &context.env;
|
|
103
|
+
let endpoint_client = &context.endpoint_client;
|
|
104
|
+
|
|
105
|
+
let current_timestamp = 1_700_000_000;
|
|
106
|
+
// Set the ledger timestamp
|
|
107
|
+
env.ledger().with_mut(|li| {
|
|
108
|
+
li.timestamp = current_timestamp;
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
// Create and register a valid receive lib
|
|
112
|
+
let receive_lib = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, context.eid]);
|
|
113
|
+
|
|
114
|
+
// Register the library
|
|
115
|
+
context.mock_owner_auth("register_library", (&receive_lib,));
|
|
116
|
+
endpoint_client.register_library(&receive_lib);
|
|
117
|
+
|
|
118
|
+
// Create timeout with expiry in the past
|
|
119
|
+
let timeout = Some(Timeout {
|
|
120
|
+
lib: receive_lib,
|
|
121
|
+
expiry: current_timestamp - 100, // Past expiry
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
// Mock owner auth
|
|
125
|
+
context.mock_owner_auth("set_default_receive_lib_timeout", (&context.eid, &timeout));
|
|
126
|
+
|
|
127
|
+
// Should fail with invalid expiry
|
|
128
|
+
let result = endpoint_client.try_set_default_receive_lib_timeout(&context.eid, &timeout);
|
|
129
|
+
|
|
130
|
+
assert_eq!(result.err().unwrap().ok().unwrap(), EndpointError::InvalidExpiry.into());
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
#[test]
|
|
134
|
+
fn test_set_default_receive_lib_timeout_invalid_expiry_equal_timestamp() {
|
|
135
|
+
let context = setup();
|
|
136
|
+
let env = &context.env;
|
|
137
|
+
let endpoint_client = &context.endpoint_client;
|
|
138
|
+
|
|
139
|
+
let current_timestamp = 1_700_000_000;
|
|
140
|
+
// Set the ledger timestamp
|
|
141
|
+
env.ledger().with_mut(|li| {
|
|
142
|
+
li.timestamp = current_timestamp;
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
// Create and register a valid receive lib
|
|
146
|
+
let receive_lib = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, context.eid]);
|
|
147
|
+
|
|
148
|
+
// Register the library
|
|
149
|
+
context.mock_owner_auth("register_library", (&receive_lib,));
|
|
150
|
+
endpoint_client.register_library(&receive_lib);
|
|
151
|
+
|
|
152
|
+
// Create timeout with expiry equal to current timestamp
|
|
153
|
+
let timeout = Some(Timeout {
|
|
154
|
+
lib: receive_lib,
|
|
155
|
+
expiry: current_timestamp, // Equal to current
|
|
156
|
+
});
|
|
157
|
+
|
|
158
|
+
// Mock owner auth
|
|
159
|
+
context.mock_owner_auth("set_default_receive_lib_timeout", (&context.eid, &timeout));
|
|
160
|
+
|
|
161
|
+
// Should fail with invalid expiry (must be greater than current timestamp)
|
|
162
|
+
let result = endpoint_client.try_set_default_receive_lib_timeout(&context.eid, &timeout);
|
|
163
|
+
|
|
164
|
+
assert_eq!(result.err().unwrap().ok().unwrap(), EndpointError::InvalidExpiry.into());
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
#[test]
|
|
168
|
+
fn test_set_default_receive_lib_timeout_success() {
|
|
169
|
+
let context = setup();
|
|
170
|
+
let env = &context.env;
|
|
171
|
+
let endpoint_client = &context.endpoint_client;
|
|
172
|
+
|
|
173
|
+
let current_timestamp = 1_700_000_000;
|
|
174
|
+
let grace_period = 1000;
|
|
175
|
+
|
|
176
|
+
// Set the ledger timestamp
|
|
177
|
+
env.ledger().with_mut(|li| {
|
|
178
|
+
li.timestamp = current_timestamp;
|
|
179
|
+
});
|
|
180
|
+
|
|
181
|
+
// Create and register a valid receive lib
|
|
182
|
+
let receive_lib = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, context.eid]);
|
|
183
|
+
|
|
184
|
+
// Register the library
|
|
185
|
+
context.mock_owner_auth("register_library", (&receive_lib,));
|
|
186
|
+
endpoint_client.register_library(&receive_lib);
|
|
187
|
+
|
|
188
|
+
let timeout = Some(Timeout { lib: receive_lib.clone(), expiry: current_timestamp + grace_period });
|
|
189
|
+
|
|
190
|
+
// Verify initial state - timeout should not be set
|
|
191
|
+
let initial_timeout = env.as_contract(&endpoint_client.address, || {
|
|
192
|
+
storage::EndpointStorage::default_receive_library_timeout(env, context.eid)
|
|
193
|
+
});
|
|
194
|
+
assert_eq!(initial_timeout, None, "Initial default receive library timeout should be None");
|
|
195
|
+
|
|
196
|
+
// Mock owner auth
|
|
197
|
+
context.mock_owner_auth("set_default_receive_lib_timeout", (&context.eid, &timeout));
|
|
198
|
+
|
|
199
|
+
// Should succeed
|
|
200
|
+
endpoint_client.set_default_receive_lib_timeout(&context.eid, &timeout);
|
|
201
|
+
|
|
202
|
+
// Verify the event was published
|
|
203
|
+
assert_event(
|
|
204
|
+
env,
|
|
205
|
+
&endpoint_client.address,
|
|
206
|
+
DefaultReceiveLibraryTimeoutSet { src_eid: context.eid, timeout: timeout.clone() },
|
|
207
|
+
);
|
|
208
|
+
|
|
209
|
+
// Verify it was set correctly via public interface
|
|
210
|
+
assert_eq!(endpoint_client.default_receive_library_timeout(&context.eid), timeout.clone());
|
|
211
|
+
|
|
212
|
+
// Assert storage change directly
|
|
213
|
+
let stored_timeout = env.as_contract(&endpoint_client.address, || {
|
|
214
|
+
storage::EndpointStorage::default_receive_library_timeout(env, context.eid)
|
|
215
|
+
});
|
|
216
|
+
assert_eq!(stored_timeout, timeout, "Storage should contain the timeout");
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
#[test]
|
|
220
|
+
fn test_set_default_receive_lib_timeout_success_with_none() {
|
|
221
|
+
let context = setup();
|
|
222
|
+
let env = &context.env;
|
|
223
|
+
let endpoint_client = &context.endpoint_client;
|
|
224
|
+
|
|
225
|
+
// Mock owner auth
|
|
226
|
+
context.mock_owner_auth("set_default_receive_lib_timeout", (&context.eid, &None::<Timeout>));
|
|
227
|
+
|
|
228
|
+
// Should succeed with None (clears the timeout)
|
|
229
|
+
endpoint_client.set_default_receive_lib_timeout(&context.eid, &None);
|
|
230
|
+
|
|
231
|
+
// Verify the event was published
|
|
232
|
+
assert_event(
|
|
233
|
+
env,
|
|
234
|
+
&endpoint_client.address,
|
|
235
|
+
DefaultReceiveLibraryTimeoutSet { src_eid: context.eid, timeout: None },
|
|
236
|
+
);
|
|
237
|
+
|
|
238
|
+
// Verify it was cleared via public interface
|
|
239
|
+
assert_eq!(endpoint_client.default_receive_library_timeout(&context.eid), None);
|
|
240
|
+
|
|
241
|
+
// Assert storage change directly
|
|
242
|
+
let stored_timeout = env.as_contract(&endpoint_client.address, || {
|
|
243
|
+
storage::EndpointStorage::default_receive_library_timeout(env, context.eid)
|
|
244
|
+
});
|
|
245
|
+
assert_eq!(stored_timeout, None, "Storage should have timeout removed");
|
|
246
|
+
}
|
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
use soroban_sdk::{
|
|
2
|
+
testutils::{Address as _, Ledger},
|
|
3
|
+
vec, Address,
|
|
4
|
+
};
|
|
5
|
+
|
|
6
|
+
use crate::{
|
|
7
|
+
errors::EndpointError,
|
|
8
|
+
events::{DefaultReceiveLibrarySet, DefaultReceiveLibraryTimeoutSet},
|
|
9
|
+
storage,
|
|
10
|
+
tests::endpoint_setup::setup,
|
|
11
|
+
MessageLibType, Timeout,
|
|
12
|
+
};
|
|
13
|
+
use utils::testing_utils::assert_event;
|
|
14
|
+
|
|
15
|
+
// Integration tests for set_default_receive_library
|
|
16
|
+
#[test]
|
|
17
|
+
fn test_set_default_receive_library_unsupported_eid() {
|
|
18
|
+
let context = setup();
|
|
19
|
+
let env = &context.env;
|
|
20
|
+
let endpoint_client = &context.endpoint_client;
|
|
21
|
+
|
|
22
|
+
let unsupported_eid = context.eid + 1;
|
|
23
|
+
|
|
24
|
+
// Create and register a receive lib that only supports TEST_context.eid
|
|
25
|
+
let receive_lib = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, context.eid]);
|
|
26
|
+
|
|
27
|
+
// Mock owner auth for register_library
|
|
28
|
+
context.mock_owner_auth("register_library", (&receive_lib,));
|
|
29
|
+
endpoint_client.register_library(&receive_lib);
|
|
30
|
+
|
|
31
|
+
// Mock owner auth for set_default_receive_library
|
|
32
|
+
context.mock_owner_auth("set_default_receive_library", (&unsupported_eid, &receive_lib, &0u64));
|
|
33
|
+
|
|
34
|
+
// Try to set it as default for unsupported eid
|
|
35
|
+
let result = endpoint_client.try_set_default_receive_library(&unsupported_eid, &receive_lib, &0u64);
|
|
36
|
+
|
|
37
|
+
assert_eq!(result.err().unwrap().ok().unwrap(), EndpointError::UnsupportedEid.into());
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
#[test]
|
|
41
|
+
fn test_set_default_receive_library_wrong_lib_type() {
|
|
42
|
+
let context = setup();
|
|
43
|
+
let env = &context.env;
|
|
44
|
+
let endpoint_client = &context.endpoint_client;
|
|
45
|
+
|
|
46
|
+
// Create and register a send-only lib that supports eid 1
|
|
47
|
+
let send_lib = context.setup_mock_message_lib(MessageLibType::Send, vec![env, context.eid]);
|
|
48
|
+
|
|
49
|
+
// Mock owner auth for register_library
|
|
50
|
+
context.mock_owner_auth("register_library", (&send_lib,));
|
|
51
|
+
endpoint_client.register_library(&send_lib);
|
|
52
|
+
|
|
53
|
+
// Mock owner auth for set_default_receive_library
|
|
54
|
+
context.mock_owner_auth("set_default_receive_library", (&context.eid, &send_lib, &0u64));
|
|
55
|
+
|
|
56
|
+
// Try to set it as default receive library
|
|
57
|
+
let result = endpoint_client.try_set_default_receive_library(&context.eid, &send_lib, &0u64);
|
|
58
|
+
|
|
59
|
+
assert_eq!(result.err().unwrap().ok().unwrap(), EndpointError::OnlyReceiveLib.into());
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
#[test]
|
|
63
|
+
fn test_set_default_receive_library_unregistered_lib() {
|
|
64
|
+
let context = setup();
|
|
65
|
+
let env = &context.env;
|
|
66
|
+
let endpoint_client = &context.endpoint_client;
|
|
67
|
+
|
|
68
|
+
// Create but don't register a valid receive lib
|
|
69
|
+
let receive_lib = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, context.eid]);
|
|
70
|
+
|
|
71
|
+
// Mock owner auth for set_default_receive_library
|
|
72
|
+
context.mock_owner_auth("set_default_receive_library", (&context.eid, &receive_lib, &0u64));
|
|
73
|
+
|
|
74
|
+
// Try to set it as default without registering
|
|
75
|
+
let result = endpoint_client.try_set_default_receive_library(&context.eid, &receive_lib, &0u64);
|
|
76
|
+
|
|
77
|
+
assert_eq!(result.err().unwrap().ok().unwrap(), EndpointError::OnlyRegisteredLib.into());
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
#[test]
|
|
81
|
+
fn test_set_default_receive_library_non_deployed_lib() {
|
|
82
|
+
let context = setup();
|
|
83
|
+
let env = &context.env;
|
|
84
|
+
let endpoint_client = &context.endpoint_client;
|
|
85
|
+
|
|
86
|
+
// Address without any contract deployed
|
|
87
|
+
let non_existent_lib = Address::generate(env);
|
|
88
|
+
|
|
89
|
+
// Mock owner auth for set_default_receive_library
|
|
90
|
+
context.mock_owner_auth("set_default_receive_library", (&context.eid, &non_existent_lib, &0u64));
|
|
91
|
+
|
|
92
|
+
// Try to set a non-existent contract as default
|
|
93
|
+
let result = endpoint_client.try_set_default_receive_library(&context.eid, &non_existent_lib, &0u64);
|
|
94
|
+
|
|
95
|
+
assert!(result.is_err());
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
#[test]
|
|
99
|
+
fn test_set_default_receive_library_success() {
|
|
100
|
+
let context = setup();
|
|
101
|
+
let env = &context.env;
|
|
102
|
+
let endpoint_client = &context.endpoint_client;
|
|
103
|
+
|
|
104
|
+
// Create and register a valid receive lib that supports eid 1
|
|
105
|
+
let receive_lib = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, context.eid]);
|
|
106
|
+
|
|
107
|
+
// Mock owner auth for register_library
|
|
108
|
+
context.mock_owner_auth("register_library", (&receive_lib,));
|
|
109
|
+
endpoint_client.register_library(&receive_lib);
|
|
110
|
+
|
|
111
|
+
// Verify initial state - default receive library should not be set
|
|
112
|
+
assert_eq!(endpoint_client.default_receive_library(&context.eid), None);
|
|
113
|
+
let initial_lib = env
|
|
114
|
+
.as_contract(&endpoint_client.address, || storage::EndpointStorage::default_receive_library(env, context.eid));
|
|
115
|
+
assert_eq!(initial_lib, None, "Initial default receive library should be None");
|
|
116
|
+
|
|
117
|
+
let initial_timeout = env.as_contract(&endpoint_client.address, || {
|
|
118
|
+
storage::EndpointStorage::default_receive_library_timeout(env, context.eid)
|
|
119
|
+
});
|
|
120
|
+
assert_eq!(initial_timeout, None, "Initial default receive library timeout should be None");
|
|
121
|
+
|
|
122
|
+
// Mock owner auth for set_default_receive_library
|
|
123
|
+
context.mock_owner_auth("set_default_receive_library", (&context.eid, &receive_lib, &0u64));
|
|
124
|
+
|
|
125
|
+
// Should succeed
|
|
126
|
+
endpoint_client.set_default_receive_library(&context.eid, &receive_lib, &0u64);
|
|
127
|
+
|
|
128
|
+
// Verify the events were published
|
|
129
|
+
assert_event(
|
|
130
|
+
env,
|
|
131
|
+
&endpoint_client.address,
|
|
132
|
+
DefaultReceiveLibrarySet { src_eid: context.eid, new_lib: receive_lib.clone() },
|
|
133
|
+
);
|
|
134
|
+
assert_event(
|
|
135
|
+
env,
|
|
136
|
+
&endpoint_client.address,
|
|
137
|
+
DefaultReceiveLibraryTimeoutSet { src_eid: context.eid, timeout: None },
|
|
138
|
+
);
|
|
139
|
+
|
|
140
|
+
// Verify it was set correctly via public interface
|
|
141
|
+
assert_eq!(endpoint_client.default_receive_library(&context.eid), Some(receive_lib.clone()));
|
|
142
|
+
|
|
143
|
+
// Assert storage changes directly
|
|
144
|
+
let stored_lib = env
|
|
145
|
+
.as_contract(&endpoint_client.address, || storage::EndpointStorage::default_receive_library(env, context.eid));
|
|
146
|
+
assert_eq!(stored_lib, Some(receive_lib), "Storage should contain the default receive library");
|
|
147
|
+
|
|
148
|
+
let stored_timeout = env.as_contract(&endpoint_client.address, || {
|
|
149
|
+
storage::EndpointStorage::default_receive_library_timeout(env, context.eid)
|
|
150
|
+
});
|
|
151
|
+
assert_eq!(stored_timeout, None, "Storage timeout should be None when grace_period is 0");
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
#[test]
|
|
155
|
+
fn test_set_default_receive_library_success_with_grace_period() {
|
|
156
|
+
let context = setup();
|
|
157
|
+
let env = &context.env;
|
|
158
|
+
let endpoint_client = &context.endpoint_client;
|
|
159
|
+
|
|
160
|
+
let current_timestamp = 1_700_000_000;
|
|
161
|
+
let grace_period = 1000;
|
|
162
|
+
// Set an arbitrary unix timestamp (seconds)
|
|
163
|
+
env.ledger().with_mut(|li| {
|
|
164
|
+
li.timestamp = current_timestamp;
|
|
165
|
+
});
|
|
166
|
+
|
|
167
|
+
// Create and register a valid receive lib that supports eid 1
|
|
168
|
+
let receive_lib = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, context.eid]);
|
|
169
|
+
let new_receive_lib = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, context.eid]);
|
|
170
|
+
|
|
171
|
+
// Mock owner auth for register_library
|
|
172
|
+
context.mock_owner_auth("register_library", (&receive_lib,));
|
|
173
|
+
endpoint_client.register_library(&receive_lib);
|
|
174
|
+
context.mock_owner_auth("register_library", (&new_receive_lib,));
|
|
175
|
+
endpoint_client.register_library(&new_receive_lib);
|
|
176
|
+
|
|
177
|
+
// first set the default receive library
|
|
178
|
+
context.mock_owner_auth("set_default_receive_library", (&context.eid, &receive_lib, &0u64));
|
|
179
|
+
endpoint_client.set_default_receive_library(&context.eid, &receive_lib, &0u64);
|
|
180
|
+
|
|
181
|
+
// then set the default receive library with the grace period
|
|
182
|
+
context.mock_owner_auth("set_default_receive_library", (&context.eid, &new_receive_lib, &grace_period));
|
|
183
|
+
endpoint_client.set_default_receive_library(&context.eid, &new_receive_lib, &grace_period);
|
|
184
|
+
|
|
185
|
+
let expected_timeout = Some(Timeout { lib: receive_lib.clone(), expiry: current_timestamp + grace_period });
|
|
186
|
+
|
|
187
|
+
// Verify the events were published
|
|
188
|
+
assert_event(
|
|
189
|
+
env,
|
|
190
|
+
&endpoint_client.address,
|
|
191
|
+
DefaultReceiveLibrarySet { src_eid: context.eid, new_lib: new_receive_lib.clone() },
|
|
192
|
+
);
|
|
193
|
+
assert_event(
|
|
194
|
+
env,
|
|
195
|
+
&endpoint_client.address,
|
|
196
|
+
DefaultReceiveLibraryTimeoutSet { src_eid: context.eid, timeout: expected_timeout.clone() },
|
|
197
|
+
);
|
|
198
|
+
|
|
199
|
+
// Verify it was set correctly via public interface
|
|
200
|
+
assert_eq!(endpoint_client.default_receive_library(&context.eid), Some(new_receive_lib.clone()));
|
|
201
|
+
assert_eq!(endpoint_client.default_receive_library_timeout(&context.eid), expected_timeout.clone());
|
|
202
|
+
|
|
203
|
+
// Assert storage changes directly
|
|
204
|
+
let stored_lib = env
|
|
205
|
+
.as_contract(&endpoint_client.address, || storage::EndpointStorage::default_receive_library(env, context.eid));
|
|
206
|
+
assert_eq!(stored_lib, Some(new_receive_lib), "Storage should contain the new default receive library");
|
|
207
|
+
|
|
208
|
+
let stored_timeout = env.as_contract(&endpoint_client.address, || {
|
|
209
|
+
storage::EndpointStorage::default_receive_library_timeout(env, context.eid)
|
|
210
|
+
});
|
|
211
|
+
assert_eq!(stored_timeout, expected_timeout, "Storage should contain the timeout");
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
#[test]
|
|
215
|
+
#[should_panic(expected = "Error(Auth, InvalidAction)")]
|
|
216
|
+
fn test_set_default_receive_library_requires_owner_auth() {
|
|
217
|
+
let context = setup();
|
|
218
|
+
let env = &context.env;
|
|
219
|
+
let endpoint_client = &context.endpoint_client;
|
|
220
|
+
|
|
221
|
+
let non_owner = Address::generate(env);
|
|
222
|
+
|
|
223
|
+
// Create and register a valid receive lib
|
|
224
|
+
let receive_lib = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, context.eid]);
|
|
225
|
+
|
|
226
|
+
// Mock owner auth for register_library
|
|
227
|
+
context.mock_owner_auth("register_library", (&receive_lib,));
|
|
228
|
+
endpoint_client.register_library(&receive_lib);
|
|
229
|
+
|
|
230
|
+
// Mock auth for the non-owner (not the owner)
|
|
231
|
+
context.mock_auth(&non_owner, "set_default_receive_library", (&context.eid, &receive_lib, &0u64));
|
|
232
|
+
|
|
233
|
+
// Should fail when non-owner tries to set
|
|
234
|
+
endpoint_client.set_default_receive_library(&context.eid, &receive_lib, &0u64);
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
#[test]
|
|
238
|
+
fn test_set_default_receive_library_same_value() {
|
|
239
|
+
let context = setup();
|
|
240
|
+
let env = &context.env;
|
|
241
|
+
let endpoint_client = &context.endpoint_client;
|
|
242
|
+
|
|
243
|
+
// Create and register a valid receive lib that supports eid 1
|
|
244
|
+
let receive_lib = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, context.eid]);
|
|
245
|
+
|
|
246
|
+
// Mock owner auth for register_library
|
|
247
|
+
context.mock_owner_auth("register_library", (&receive_lib,));
|
|
248
|
+
endpoint_client.register_library(&receive_lib);
|
|
249
|
+
|
|
250
|
+
// Mock owner auth for first set_default_receive_library
|
|
251
|
+
context.mock_owner_auth("set_default_receive_library", (&context.eid, &receive_lib, &0u64));
|
|
252
|
+
endpoint_client.set_default_receive_library(&context.eid, &receive_lib, &0u64);
|
|
253
|
+
|
|
254
|
+
// Mock owner auth for second set_default_receive_library (same value)
|
|
255
|
+
context.mock_owner_auth("set_default_receive_library", (&context.eid, &receive_lib, &0u64));
|
|
256
|
+
|
|
257
|
+
// Try to set the same library again
|
|
258
|
+
let result = endpoint_client.try_set_default_receive_library(&context.eid, &receive_lib, &0u64);
|
|
259
|
+
|
|
260
|
+
assert_eq!(result.err().unwrap().ok().unwrap(), EndpointError::SameValue.into());
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
// Test with SendAndReceive library type (valid for receive)
|
|
264
|
+
#[test]
|
|
265
|
+
fn test_set_default_receive_library_with_send_and_receive_type() {
|
|
266
|
+
let context = setup();
|
|
267
|
+
let env = &context.env;
|
|
268
|
+
let endpoint_client = &context.endpoint_client;
|
|
269
|
+
|
|
270
|
+
// Create and register a SendAndReceive lib that supports eid 1
|
|
271
|
+
let send_and_receive_lib = context.setup_mock_message_lib(MessageLibType::SendAndReceive, vec![env, context.eid]);
|
|
272
|
+
|
|
273
|
+
// Mock owner auth for register_library
|
|
274
|
+
context.mock_owner_auth("register_library", (&send_and_receive_lib,));
|
|
275
|
+
endpoint_client.register_library(&send_and_receive_lib);
|
|
276
|
+
|
|
277
|
+
// Mock owner auth for set_default_receive_library
|
|
278
|
+
context.mock_owner_auth("set_default_receive_library", (&context.eid, &send_and_receive_lib, &0u64));
|
|
279
|
+
|
|
280
|
+
// Should succeed with SendAndReceive type
|
|
281
|
+
endpoint_client.set_default_receive_library(&context.eid, &send_and_receive_lib, &0u64);
|
|
282
|
+
|
|
283
|
+
// Verify it was set correctly
|
|
284
|
+
assert_eq!(endpoint_client.default_receive_library(&context.eid), Some(send_and_receive_lib));
|
|
285
|
+
}
|