@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,180 @@
|
|
|
1
|
+
use soroban_sdk::{testutils::Address as _, vec, Address};
|
|
2
|
+
|
|
3
|
+
use crate::{
|
|
4
|
+
errors::EndpointError, events::DefaultSendLibrarySet, storage, tests::endpoint_setup::setup, MessageLibType,
|
|
5
|
+
};
|
|
6
|
+
use utils::testing_utils::assert_event;
|
|
7
|
+
|
|
8
|
+
// Integration tests for set_default_send_library
|
|
9
|
+
#[test]
|
|
10
|
+
fn test_set_default_send_library_unsupported_eid() {
|
|
11
|
+
let context = setup();
|
|
12
|
+
let env = &context.env;
|
|
13
|
+
let endpoint_client = &context.endpoint_client;
|
|
14
|
+
|
|
15
|
+
let unsupported_eid = context.eid + 1;
|
|
16
|
+
|
|
17
|
+
// Create and register a send lib that only supports TEST_context.eid
|
|
18
|
+
let send_lib = context.setup_mock_message_lib(MessageLibType::Send, vec![env, context.eid]);
|
|
19
|
+
|
|
20
|
+
// Mock owner auth for register_library
|
|
21
|
+
context.mock_owner_auth("register_library", (&send_lib,));
|
|
22
|
+
endpoint_client.register_library(&send_lib);
|
|
23
|
+
|
|
24
|
+
// Mock owner auth for set_default_send_library
|
|
25
|
+
context.mock_owner_auth("set_default_send_library", (&unsupported_eid, &send_lib));
|
|
26
|
+
|
|
27
|
+
// Try to set it as default for unsupported eid
|
|
28
|
+
let result = endpoint_client.try_set_default_send_library(&unsupported_eid, &send_lib);
|
|
29
|
+
|
|
30
|
+
assert_eq!(result.err().unwrap().ok().unwrap(), EndpointError::UnsupportedEid.into());
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
#[test]
|
|
34
|
+
fn test_set_default_send_library_wrong_lib_type() {
|
|
35
|
+
let context = setup();
|
|
36
|
+
let env = &context.env;
|
|
37
|
+
let endpoint_client = &context.endpoint_client;
|
|
38
|
+
|
|
39
|
+
// Create and register a receive-only lib that supports eid 1
|
|
40
|
+
let receive_lib = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, context.eid]);
|
|
41
|
+
|
|
42
|
+
// Mock owner auth for register_library
|
|
43
|
+
context.mock_owner_auth("register_library", (&receive_lib,));
|
|
44
|
+
endpoint_client.register_library(&receive_lib);
|
|
45
|
+
|
|
46
|
+
// Mock owner auth for set_default_send_library
|
|
47
|
+
context.mock_owner_auth("set_default_send_library", (&context.eid, &receive_lib));
|
|
48
|
+
|
|
49
|
+
// Try to set it as default send library
|
|
50
|
+
let result = endpoint_client.try_set_default_send_library(&context.eid, &receive_lib);
|
|
51
|
+
|
|
52
|
+
assert_eq!(result.err().unwrap().ok().unwrap(), EndpointError::OnlySendLib.into());
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
#[test]
|
|
56
|
+
fn test_set_default_send_library_unregistered_lib() {
|
|
57
|
+
let context = setup();
|
|
58
|
+
let env = &context.env;
|
|
59
|
+
let endpoint_client = &context.endpoint_client;
|
|
60
|
+
|
|
61
|
+
// Create but don't register a valid send lib
|
|
62
|
+
let send_lib = context.setup_mock_message_lib(MessageLibType::Send, vec![env, context.eid]);
|
|
63
|
+
|
|
64
|
+
// Mock owner auth for set_default_send_library
|
|
65
|
+
context.mock_owner_auth("set_default_send_library", (&context.eid, &send_lib));
|
|
66
|
+
|
|
67
|
+
// Try to set it as default without registering
|
|
68
|
+
let result = endpoint_client.try_set_default_send_library(&context.eid, &send_lib);
|
|
69
|
+
|
|
70
|
+
assert_eq!(result.err().unwrap().ok().unwrap(), EndpointError::OnlyRegisteredLib.into());
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
#[test]
|
|
74
|
+
fn test_set_default_send_library_non_deployed_lib() {
|
|
75
|
+
let context = setup();
|
|
76
|
+
let env = &context.env;
|
|
77
|
+
let endpoint_client = &context.endpoint_client;
|
|
78
|
+
|
|
79
|
+
// Address without any contract deployed
|
|
80
|
+
let non_existent_lib = Address::generate(env);
|
|
81
|
+
|
|
82
|
+
// Mock owner auth for set_default_send_library
|
|
83
|
+
context.mock_owner_auth("set_default_send_library", (&context.eid, &non_existent_lib));
|
|
84
|
+
|
|
85
|
+
// Try to set a non-existent contract as default
|
|
86
|
+
let result = endpoint_client.try_set_default_send_library(&context.eid, &non_existent_lib);
|
|
87
|
+
|
|
88
|
+
assert!(result.is_err());
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
#[test]
|
|
92
|
+
fn test_set_default_send_library_success() {
|
|
93
|
+
let context = setup();
|
|
94
|
+
let env = &context.env;
|
|
95
|
+
let endpoint_client = &context.endpoint_client;
|
|
96
|
+
|
|
97
|
+
// Create and register a valid send lib that supports eid 1
|
|
98
|
+
let send_lib = context.setup_mock_message_lib(MessageLibType::Send, vec![env, context.eid]);
|
|
99
|
+
|
|
100
|
+
// Mock owner auth for register_library
|
|
101
|
+
context.mock_owner_auth("register_library", (&send_lib,));
|
|
102
|
+
endpoint_client.register_library(&send_lib);
|
|
103
|
+
|
|
104
|
+
// Verify initial state - default send library should not be set
|
|
105
|
+
assert_eq!(endpoint_client.default_send_library(&context.eid), None);
|
|
106
|
+
let initial_lib =
|
|
107
|
+
env.as_contract(&endpoint_client.address, || storage::EndpointStorage::default_send_library(env, context.eid));
|
|
108
|
+
assert_eq!(initial_lib, None, "Initial default send library should be None");
|
|
109
|
+
|
|
110
|
+
// Mock owner auth for set_default_send_library
|
|
111
|
+
context.mock_owner_auth("set_default_send_library", (&context.eid, &send_lib));
|
|
112
|
+
|
|
113
|
+
// Should succeed
|
|
114
|
+
endpoint_client.set_default_send_library(&context.eid, &send_lib);
|
|
115
|
+
|
|
116
|
+
// Verify the event was published
|
|
117
|
+
assert_event(
|
|
118
|
+
env,
|
|
119
|
+
&endpoint_client.address,
|
|
120
|
+
DefaultSendLibrarySet { dst_eid: context.eid, new_lib: send_lib.clone() },
|
|
121
|
+
);
|
|
122
|
+
|
|
123
|
+
// Verify it was set correctly via public interface
|
|
124
|
+
assert_eq!(endpoint_client.default_send_library(&context.eid), Some(send_lib.clone()));
|
|
125
|
+
|
|
126
|
+
// Assert storage change directly
|
|
127
|
+
let stored_lib =
|
|
128
|
+
env.as_contract(&endpoint_client.address, || storage::EndpointStorage::default_send_library(env, context.eid));
|
|
129
|
+
assert_eq!(stored_lib, Some(send_lib), "Storage should contain the default send library");
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
#[test]
|
|
133
|
+
#[should_panic(expected = "Error(Auth, InvalidAction)")]
|
|
134
|
+
fn test_set_default_send_library_requires_owner_auth() {
|
|
135
|
+
let context = setup();
|
|
136
|
+
let env = &context.env;
|
|
137
|
+
let endpoint_client = &context.endpoint_client;
|
|
138
|
+
|
|
139
|
+
let non_owner = Address::generate(env);
|
|
140
|
+
|
|
141
|
+
// Create and register a valid send lib
|
|
142
|
+
let send_lib = context.setup_mock_message_lib(MessageLibType::Send, vec![env, context.eid]);
|
|
143
|
+
|
|
144
|
+
// Mock owner auth for register_library
|
|
145
|
+
context.mock_owner_auth("register_library", (&send_lib,));
|
|
146
|
+
endpoint_client.register_library(&send_lib);
|
|
147
|
+
|
|
148
|
+
// Mock auth for the non-owner (not the owner)
|
|
149
|
+
context.mock_auth(&non_owner, "set_default_send_library", (&context.eid, &send_lib));
|
|
150
|
+
|
|
151
|
+
// Should fail when non-owner tries to set
|
|
152
|
+
endpoint_client.set_default_send_library(&context.eid, &send_lib);
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
#[test]
|
|
156
|
+
fn test_set_default_send_library_same_value() {
|
|
157
|
+
let context = setup();
|
|
158
|
+
let env = &context.env;
|
|
159
|
+
let endpoint_client = &context.endpoint_client;
|
|
160
|
+
|
|
161
|
+
// Create and register a valid send lib that supports eid 1
|
|
162
|
+
let send_lib = context.setup_mock_message_lib(MessageLibType::Send, vec![env, context.eid]);
|
|
163
|
+
|
|
164
|
+
// Mock owner auth for register_library
|
|
165
|
+
context.mock_owner_auth("register_library", (&send_lib,));
|
|
166
|
+
endpoint_client.register_library(&send_lib);
|
|
167
|
+
|
|
168
|
+
// Mock owner auth for set_default_send_library
|
|
169
|
+
context.mock_owner_auth("set_default_send_library", (&context.eid, &send_lib));
|
|
170
|
+
|
|
171
|
+
// Should succeed
|
|
172
|
+
endpoint_client.set_default_send_library(&context.eid, &send_lib);
|
|
173
|
+
|
|
174
|
+
context.mock_owner_auth("set_default_send_library", (&context.eid, &send_lib));
|
|
175
|
+
|
|
176
|
+
// Try to set same library again
|
|
177
|
+
let result = endpoint_client.try_set_default_send_library(&context.eid, &send_lib);
|
|
178
|
+
|
|
179
|
+
assert_eq!(result.err().unwrap().ok().unwrap(), EndpointError::SameValue.into());
|
|
180
|
+
}
|
|
@@ -0,0 +1,405 @@
|
|
|
1
|
+
use soroban_sdk::{
|
|
2
|
+
testutils::{Address as _, Ledger, MockAuth, MockAuthInvoke},
|
|
3
|
+
vec, Address, IntoVal,
|
|
4
|
+
};
|
|
5
|
+
|
|
6
|
+
use crate::{
|
|
7
|
+
errors::EndpointError,
|
|
8
|
+
events::{ReceiveLibrarySet, ReceiveLibraryTimeoutSet},
|
|
9
|
+
storage,
|
|
10
|
+
tests::endpoint_setup::setup,
|
|
11
|
+
MessageLibType, Timeout,
|
|
12
|
+
};
|
|
13
|
+
use utils::testing_utils::assert_event;
|
|
14
|
+
|
|
15
|
+
// Tests for set_receive_library
|
|
16
|
+
#[test]
|
|
17
|
+
fn test_set_receive_library_requires_oapp_auth() {
|
|
18
|
+
let context = setup();
|
|
19
|
+
let env = &context.env;
|
|
20
|
+
let endpoint_client = &context.endpoint_client;
|
|
21
|
+
|
|
22
|
+
let oapp = Address::generate(env);
|
|
23
|
+
let unauthorized_caller = Address::generate(env);
|
|
24
|
+
|
|
25
|
+
// Create and register a valid receive lib
|
|
26
|
+
let receive_lib = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, context.eid]);
|
|
27
|
+
|
|
28
|
+
// Register the library with owner auth
|
|
29
|
+
context.mock_owner_auth("register_library", (&receive_lib,));
|
|
30
|
+
endpoint_client.register_library(&receive_lib);
|
|
31
|
+
|
|
32
|
+
// Mock auth for unauthorized caller (not the oapp or its delegate)
|
|
33
|
+
env.mock_auths(&[MockAuth {
|
|
34
|
+
address: &unauthorized_caller,
|
|
35
|
+
invoke: &MockAuthInvoke {
|
|
36
|
+
contract: &endpoint_client.address,
|
|
37
|
+
fn_name: "set_receive_library",
|
|
38
|
+
args: (&unauthorized_caller, &oapp, &context.eid, &Some(receive_lib.clone()), &0u64).into_val(env),
|
|
39
|
+
sub_invokes: &[],
|
|
40
|
+
},
|
|
41
|
+
}]);
|
|
42
|
+
|
|
43
|
+
// Should fail with Unauthorized error
|
|
44
|
+
let result =
|
|
45
|
+
endpoint_client.try_set_receive_library(&unauthorized_caller, &oapp, &context.eid, &Some(receive_lib), &0u64);
|
|
46
|
+
assert_eq!(result.err().unwrap().ok().unwrap(), EndpointError::Unauthorized.into());
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
#[test]
|
|
50
|
+
fn test_set_receive_library_unregistered_lib() {
|
|
51
|
+
let context = setup();
|
|
52
|
+
let env = &context.env;
|
|
53
|
+
let endpoint_client = &context.endpoint_client;
|
|
54
|
+
|
|
55
|
+
let oapp = Address::generate(env);
|
|
56
|
+
|
|
57
|
+
// Create but don't register a valid receive lib
|
|
58
|
+
let receive_lib = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, context.eid]);
|
|
59
|
+
|
|
60
|
+
// Mock auth for oapp
|
|
61
|
+
env.mock_auths(&[MockAuth {
|
|
62
|
+
address: &oapp,
|
|
63
|
+
invoke: &MockAuthInvoke {
|
|
64
|
+
contract: &endpoint_client.address,
|
|
65
|
+
fn_name: "set_receive_library",
|
|
66
|
+
args: (&oapp, &oapp, &context.eid, &Some(receive_lib.clone()), &0u64).into_val(env),
|
|
67
|
+
sub_invokes: &[],
|
|
68
|
+
},
|
|
69
|
+
}]);
|
|
70
|
+
|
|
71
|
+
// Should fail with unregistered library error
|
|
72
|
+
let result = endpoint_client.try_set_receive_library(&oapp, &oapp, &context.eid, &Some(receive_lib), &0u64);
|
|
73
|
+
assert_eq!(result.err().unwrap().ok().unwrap(), EndpointError::OnlyRegisteredLib.into());
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
#[test]
|
|
77
|
+
fn test_set_receive_library_wrong_lib_type() {
|
|
78
|
+
let context = setup();
|
|
79
|
+
let env = &context.env;
|
|
80
|
+
let endpoint_client = &context.endpoint_client;
|
|
81
|
+
|
|
82
|
+
let oapp = Address::generate(env);
|
|
83
|
+
|
|
84
|
+
// Create and register a send-only lib
|
|
85
|
+
let send_lib = context.setup_mock_message_lib(MessageLibType::Send, vec![env, context.eid]);
|
|
86
|
+
|
|
87
|
+
// Register the library with owner auth
|
|
88
|
+
context.mock_owner_auth("register_library", (&send_lib,));
|
|
89
|
+
endpoint_client.register_library(&send_lib);
|
|
90
|
+
|
|
91
|
+
// Mock auth for oapp
|
|
92
|
+
env.mock_auths(&[MockAuth {
|
|
93
|
+
address: &oapp,
|
|
94
|
+
invoke: &MockAuthInvoke {
|
|
95
|
+
contract: &endpoint_client.address,
|
|
96
|
+
fn_name: "set_receive_library",
|
|
97
|
+
args: (&oapp, &oapp, &context.eid, &Some(send_lib.clone()), &0u64).into_val(env),
|
|
98
|
+
sub_invokes: &[],
|
|
99
|
+
},
|
|
100
|
+
}]);
|
|
101
|
+
|
|
102
|
+
// Should fail with wrong library type error
|
|
103
|
+
let result = endpoint_client.try_set_receive_library(&oapp, &oapp, &context.eid, &Some(send_lib), &0u64);
|
|
104
|
+
assert_eq!(result.err().unwrap().ok().unwrap(), EndpointError::OnlyReceiveLib.into());
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
#[test]
|
|
108
|
+
fn test_set_receive_library_unsupported_eid() {
|
|
109
|
+
let context = setup();
|
|
110
|
+
let env = &context.env;
|
|
111
|
+
let endpoint_client = &context.endpoint_client;
|
|
112
|
+
|
|
113
|
+
let oapp = Address::generate(env);
|
|
114
|
+
let unsupported_eid = context.eid + 1;
|
|
115
|
+
|
|
116
|
+
// Create and register a receive lib that only supports TEST_context.eid
|
|
117
|
+
let receive_lib = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, context.eid]);
|
|
118
|
+
|
|
119
|
+
// Register the library with owner auth
|
|
120
|
+
context.mock_owner_auth("register_library", (&receive_lib,));
|
|
121
|
+
endpoint_client.register_library(&receive_lib);
|
|
122
|
+
|
|
123
|
+
// Mock auth for oapp
|
|
124
|
+
env.mock_auths(&[MockAuth {
|
|
125
|
+
address: &oapp,
|
|
126
|
+
invoke: &MockAuthInvoke {
|
|
127
|
+
contract: &endpoint_client.address,
|
|
128
|
+
fn_name: "set_receive_library",
|
|
129
|
+
args: (&oapp, &oapp, &unsupported_eid, &Some(receive_lib.clone()), &0u64).into_val(env),
|
|
130
|
+
sub_invokes: &[],
|
|
131
|
+
},
|
|
132
|
+
}]);
|
|
133
|
+
|
|
134
|
+
// Should fail with unsupported eid error
|
|
135
|
+
let result = endpoint_client.try_set_receive_library(&oapp, &oapp, &unsupported_eid, &Some(receive_lib), &0u64);
|
|
136
|
+
assert_eq!(result.err().unwrap().ok().unwrap(), EndpointError::UnsupportedEid.into());
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
#[test]
|
|
140
|
+
fn test_set_receive_library_same_value() {
|
|
141
|
+
let context = setup();
|
|
142
|
+
let env = &context.env;
|
|
143
|
+
let endpoint_client = &context.endpoint_client;
|
|
144
|
+
|
|
145
|
+
let oapp = Address::generate(env);
|
|
146
|
+
|
|
147
|
+
// Create and register a valid receive lib
|
|
148
|
+
let receive_lib = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, context.eid]);
|
|
149
|
+
|
|
150
|
+
// Register the library with owner auth
|
|
151
|
+
context.mock_owner_auth("register_library", (&receive_lib,));
|
|
152
|
+
endpoint_client.register_library(&receive_lib);
|
|
153
|
+
|
|
154
|
+
// First set with oapp auth
|
|
155
|
+
env.mock_auths(&[MockAuth {
|
|
156
|
+
address: &oapp,
|
|
157
|
+
invoke: &MockAuthInvoke {
|
|
158
|
+
contract: &endpoint_client.address,
|
|
159
|
+
fn_name: "set_receive_library",
|
|
160
|
+
args: (&oapp, &oapp, &context.eid, &Some(receive_lib.clone()), &0u64).into_val(env),
|
|
161
|
+
sub_invokes: &[],
|
|
162
|
+
},
|
|
163
|
+
}]);
|
|
164
|
+
endpoint_client.set_receive_library(&oapp, &oapp, &context.eid, &Some(receive_lib.clone()), &0u64);
|
|
165
|
+
|
|
166
|
+
// Try to set the same library again
|
|
167
|
+
env.mock_auths(&[MockAuth {
|
|
168
|
+
address: &oapp,
|
|
169
|
+
invoke: &MockAuthInvoke {
|
|
170
|
+
contract: &endpoint_client.address,
|
|
171
|
+
fn_name: "set_receive_library",
|
|
172
|
+
args: (&oapp, &oapp, &context.eid, &Some(receive_lib.clone()), &0u64).into_val(env),
|
|
173
|
+
sub_invokes: &[],
|
|
174
|
+
},
|
|
175
|
+
}]);
|
|
176
|
+
|
|
177
|
+
let result = endpoint_client.try_set_receive_library(&oapp, &oapp, &context.eid, &Some(receive_lib), &0u64);
|
|
178
|
+
assert_eq!(result.err().unwrap().ok().unwrap(), EndpointError::SameValue.into());
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
#[test]
|
|
182
|
+
fn test_set_receive_library_success_no_grace_period() {
|
|
183
|
+
let context = setup();
|
|
184
|
+
let env = &context.env;
|
|
185
|
+
let endpoint_client = &context.endpoint_client;
|
|
186
|
+
|
|
187
|
+
let oapp = Address::generate(env);
|
|
188
|
+
|
|
189
|
+
// Create and register a valid receive lib
|
|
190
|
+
let receive_lib = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, context.eid]);
|
|
191
|
+
|
|
192
|
+
// Register the library with owner auth
|
|
193
|
+
context.mock_owner_auth("register_library", (&receive_lib,));
|
|
194
|
+
endpoint_client.register_library(&receive_lib);
|
|
195
|
+
|
|
196
|
+
// Verify it was not set
|
|
197
|
+
assert_eq!(
|
|
198
|
+
env.as_contract(&endpoint_client.address, || storage::EndpointStorage::receive_library(
|
|
199
|
+
env,
|
|
200
|
+
&oapp,
|
|
201
|
+
context.eid
|
|
202
|
+
)),
|
|
203
|
+
None
|
|
204
|
+
);
|
|
205
|
+
|
|
206
|
+
// Set with oapp auth
|
|
207
|
+
env.mock_auths(&[MockAuth {
|
|
208
|
+
address: &oapp,
|
|
209
|
+
invoke: &MockAuthInvoke {
|
|
210
|
+
contract: &endpoint_client.address,
|
|
211
|
+
fn_name: "set_receive_library",
|
|
212
|
+
args: (&oapp, &oapp, &context.eid, &Some(receive_lib.clone()), &0u64).into_val(env),
|
|
213
|
+
sub_invokes: &[],
|
|
214
|
+
},
|
|
215
|
+
}]);
|
|
216
|
+
|
|
217
|
+
endpoint_client.set_receive_library(&oapp, &oapp, &context.eid, &Some(receive_lib.clone()), &0u64);
|
|
218
|
+
|
|
219
|
+
assert_event(
|
|
220
|
+
env,
|
|
221
|
+
&endpoint_client.address,
|
|
222
|
+
ReceiveLibraryTimeoutSet { receiver: oapp.clone(), eid: context.eid, timeout: None },
|
|
223
|
+
);
|
|
224
|
+
|
|
225
|
+
// Verify it was set correctly
|
|
226
|
+
assert_eq!(
|
|
227
|
+
env.as_contract(&endpoint_client.address, || storage::EndpointStorage::receive_library(
|
|
228
|
+
env,
|
|
229
|
+
&oapp,
|
|
230
|
+
context.eid
|
|
231
|
+
)),
|
|
232
|
+
Some(receive_lib)
|
|
233
|
+
);
|
|
234
|
+
assert_eq!(endpoint_client.receive_library_timeout(&oapp, &context.eid), None);
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
#[test]
|
|
238
|
+
fn test_set_receive_library_success_with_grace_period() {
|
|
239
|
+
let context = setup();
|
|
240
|
+
let env = &context.env;
|
|
241
|
+
let endpoint_client = &context.endpoint_client;
|
|
242
|
+
|
|
243
|
+
let oapp = Address::generate(env);
|
|
244
|
+
let current_timestamp = 1_700_000_000;
|
|
245
|
+
let grace_period = 1000;
|
|
246
|
+
|
|
247
|
+
// Set the ledger timestamp
|
|
248
|
+
env.ledger().with_mut(|li| {
|
|
249
|
+
li.timestamp = current_timestamp;
|
|
250
|
+
});
|
|
251
|
+
|
|
252
|
+
// Create and register two valid receive libs
|
|
253
|
+
let old_receive_lib = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, context.eid]);
|
|
254
|
+
let new_receive_lib = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, context.eid]);
|
|
255
|
+
|
|
256
|
+
// Register both libraries with owner auth
|
|
257
|
+
context.mock_owner_auth("register_library", (&old_receive_lib,));
|
|
258
|
+
endpoint_client.register_library(&old_receive_lib);
|
|
259
|
+
context.mock_owner_auth("register_library", (&new_receive_lib,));
|
|
260
|
+
endpoint_client.register_library(&new_receive_lib);
|
|
261
|
+
|
|
262
|
+
// First set the old library without grace period
|
|
263
|
+
env.mock_auths(&[MockAuth {
|
|
264
|
+
address: &oapp,
|
|
265
|
+
invoke: &MockAuthInvoke {
|
|
266
|
+
contract: &endpoint_client.address,
|
|
267
|
+
fn_name: "set_receive_library",
|
|
268
|
+
args: (&oapp, &oapp, &context.eid, &Some(old_receive_lib.clone()), &0u64).into_val(env),
|
|
269
|
+
sub_invokes: &[],
|
|
270
|
+
},
|
|
271
|
+
}]);
|
|
272
|
+
endpoint_client.set_receive_library(&oapp, &oapp, &context.eid, &Some(old_receive_lib.clone()), &0u64);
|
|
273
|
+
|
|
274
|
+
// Now set the new library with grace period
|
|
275
|
+
env.mock_auths(&[MockAuth {
|
|
276
|
+
address: &oapp,
|
|
277
|
+
invoke: &MockAuthInvoke {
|
|
278
|
+
contract: &endpoint_client.address,
|
|
279
|
+
fn_name: "set_receive_library",
|
|
280
|
+
args: (&oapp, &oapp, &context.eid, &Some(new_receive_lib.clone()), &grace_period).into_val(env),
|
|
281
|
+
sub_invokes: &[],
|
|
282
|
+
},
|
|
283
|
+
}]);
|
|
284
|
+
endpoint_client.set_receive_library(&oapp, &oapp, &context.eid, &Some(new_receive_lib.clone()), &grace_period);
|
|
285
|
+
|
|
286
|
+
let expected_timeout = Some(Timeout { lib: old_receive_lib.clone(), expiry: current_timestamp + grace_period });
|
|
287
|
+
|
|
288
|
+
// Verify the events were published
|
|
289
|
+
assert_event(
|
|
290
|
+
env,
|
|
291
|
+
&endpoint_client.address,
|
|
292
|
+
ReceiveLibraryTimeoutSet { receiver: oapp.clone(), eid: context.eid, timeout: expected_timeout.clone() },
|
|
293
|
+
);
|
|
294
|
+
assert_event(
|
|
295
|
+
env,
|
|
296
|
+
&endpoint_client.address,
|
|
297
|
+
ReceiveLibrarySet { receiver: oapp.clone(), src_eid: context.eid, new_lib: Some(new_receive_lib.clone()) },
|
|
298
|
+
);
|
|
299
|
+
|
|
300
|
+
// Verify the library was updated
|
|
301
|
+
assert_eq!(
|
|
302
|
+
env.as_contract(&endpoint_client.address, || storage::EndpointStorage::receive_library(
|
|
303
|
+
env,
|
|
304
|
+
&oapp,
|
|
305
|
+
context.eid
|
|
306
|
+
)),
|
|
307
|
+
Some(new_receive_lib)
|
|
308
|
+
);
|
|
309
|
+
|
|
310
|
+
// Verify the timeout was set correctly
|
|
311
|
+
assert_eq!(endpoint_client.receive_library_timeout(&oapp, &context.eid), expected_timeout);
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
#[test]
|
|
315
|
+
fn test_set_receive_library_grace_period_requires_both_libs() {
|
|
316
|
+
let context = setup();
|
|
317
|
+
let env = &context.env;
|
|
318
|
+
let endpoint_client = &context.endpoint_client;
|
|
319
|
+
|
|
320
|
+
let oapp = Address::generate(env);
|
|
321
|
+
let grace_period = 1000;
|
|
322
|
+
|
|
323
|
+
// Create and register a valid receive lib
|
|
324
|
+
let receive_lib = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, context.eid]);
|
|
325
|
+
|
|
326
|
+
// Register the library with owner auth
|
|
327
|
+
context.mock_owner_auth("register_library", (&receive_lib,));
|
|
328
|
+
endpoint_client.register_library(&receive_lib);
|
|
329
|
+
|
|
330
|
+
// Try to set library with grace period when there's no existing library
|
|
331
|
+
env.mock_auths(&[MockAuth {
|
|
332
|
+
address: &oapp,
|
|
333
|
+
invoke: &MockAuthInvoke {
|
|
334
|
+
contract: &endpoint_client.address,
|
|
335
|
+
fn_name: "set_receive_library",
|
|
336
|
+
args: (&oapp, &oapp, &context.eid, &Some(receive_lib.clone()), &grace_period).into_val(env),
|
|
337
|
+
sub_invokes: &[],
|
|
338
|
+
},
|
|
339
|
+
}]);
|
|
340
|
+
|
|
341
|
+
let result = endpoint_client.try_set_receive_library(&oapp, &oapp, &context.eid, &Some(receive_lib), &grace_period);
|
|
342
|
+
assert_eq!(result.err().unwrap().ok().unwrap(), EndpointError::OnlyNonDefaultLib.into());
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
#[test]
|
|
346
|
+
fn test_set_receive_library_clear_library() {
|
|
347
|
+
let context = setup();
|
|
348
|
+
let env = &context.env;
|
|
349
|
+
let endpoint_client = &context.endpoint_client;
|
|
350
|
+
|
|
351
|
+
let oapp = Address::generate(env);
|
|
352
|
+
|
|
353
|
+
// Create and register a valid receive lib
|
|
354
|
+
let receive_lib = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, context.eid]);
|
|
355
|
+
|
|
356
|
+
// Register the library with owner auth
|
|
357
|
+
context.mock_owner_auth("register_library", (&receive_lib,));
|
|
358
|
+
endpoint_client.register_library(&receive_lib);
|
|
359
|
+
|
|
360
|
+
// First set a library
|
|
361
|
+
env.mock_auths(&[MockAuth {
|
|
362
|
+
address: &oapp,
|
|
363
|
+
invoke: &MockAuthInvoke {
|
|
364
|
+
contract: &endpoint_client.address,
|
|
365
|
+
fn_name: "set_receive_library",
|
|
366
|
+
args: (&oapp, &oapp, &context.eid, &Some(receive_lib.clone()), &0u64).into_val(env),
|
|
367
|
+
sub_invokes: &[],
|
|
368
|
+
},
|
|
369
|
+
}]);
|
|
370
|
+
endpoint_client.set_receive_library(&oapp, &oapp, &context.eid, &Some(receive_lib.clone()), &0u64);
|
|
371
|
+
|
|
372
|
+
// Now clear the library by setting to None
|
|
373
|
+
env.mock_auths(&[MockAuth {
|
|
374
|
+
address: &oapp,
|
|
375
|
+
invoke: &MockAuthInvoke {
|
|
376
|
+
contract: &endpoint_client.address,
|
|
377
|
+
fn_name: "set_receive_library",
|
|
378
|
+
args: (&oapp, &oapp, &context.eid, &None::<Address>, &0u64).into_val(env),
|
|
379
|
+
sub_invokes: &[],
|
|
380
|
+
},
|
|
381
|
+
}]);
|
|
382
|
+
endpoint_client.set_receive_library(&oapp, &oapp, &context.eid, &None, &0u64);
|
|
383
|
+
|
|
384
|
+
// Verify the event was published with None for both receive_library_set and receive_library_timeout_set
|
|
385
|
+
assert_event(
|
|
386
|
+
env,
|
|
387
|
+
&endpoint_client.address,
|
|
388
|
+
ReceiveLibrarySet { receiver: oapp.clone(), src_eid: context.eid, new_lib: None },
|
|
389
|
+
);
|
|
390
|
+
assert_event(
|
|
391
|
+
env,
|
|
392
|
+
&endpoint_client.address,
|
|
393
|
+
ReceiveLibraryTimeoutSet { receiver: oapp.clone(), eid: context.eid, timeout: None },
|
|
394
|
+
);
|
|
395
|
+
|
|
396
|
+
// Verify it was cleared
|
|
397
|
+
assert_eq!(
|
|
398
|
+
env.as_contract(&endpoint_client.address, || storage::EndpointStorage::receive_library(
|
|
399
|
+
env,
|
|
400
|
+
&oapp,
|
|
401
|
+
context.eid
|
|
402
|
+
)),
|
|
403
|
+
None
|
|
404
|
+
);
|
|
405
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
use soroban_sdk::{
|
|
2
|
+
testutils::{Address as _, Ledger, MockAuth, MockAuthInvoke},
|
|
3
|
+
vec, Address, IntoVal,
|
|
4
|
+
};
|
|
5
|
+
|
|
6
|
+
use crate::{events::ReceiveLibraryTimeoutSet, storage, tests::endpoint_setup::setup, MessageLibType, Timeout};
|
|
7
|
+
use utils::testing_utils::assert_event;
|
|
8
|
+
|
|
9
|
+
// Tests for set_receive_library_timeout (OApp-level control)
|
|
10
|
+
#[test]
|
|
11
|
+
fn test_set_receive_library_timeout_success() {
|
|
12
|
+
let context = setup();
|
|
13
|
+
let env = &context.env;
|
|
14
|
+
let endpoint_client = &context.endpoint_client;
|
|
15
|
+
|
|
16
|
+
let oapp = Address::generate(env);
|
|
17
|
+
let current_timestamp = 1_700_000_000;
|
|
18
|
+
let grace_period = 1000;
|
|
19
|
+
|
|
20
|
+
// Set the ledger timestamp
|
|
21
|
+
env.ledger().with_mut(|li| {
|
|
22
|
+
li.timestamp = current_timestamp;
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
// Create and register a valid receive lib
|
|
26
|
+
let receive_lib = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, context.eid]);
|
|
27
|
+
|
|
28
|
+
// Register the library with owner auth
|
|
29
|
+
context.mock_owner_auth("register_library", (&receive_lib,));
|
|
30
|
+
endpoint_client.register_library(&receive_lib);
|
|
31
|
+
|
|
32
|
+
// First set a receive library (non-default) to satisfy the requirement
|
|
33
|
+
env.mock_auths(&[MockAuth {
|
|
34
|
+
address: &oapp,
|
|
35
|
+
invoke: &MockAuthInvoke {
|
|
36
|
+
contract: &endpoint_client.address,
|
|
37
|
+
fn_name: "set_receive_library",
|
|
38
|
+
args: (&oapp, &oapp, &context.eid, &Some(receive_lib.clone()), &0u64).into_val(env),
|
|
39
|
+
sub_invokes: &[],
|
|
40
|
+
},
|
|
41
|
+
}]);
|
|
42
|
+
endpoint_client.set_receive_library(&oapp, &oapp, &context.eid, &Some(receive_lib.clone()), &0u64);
|
|
43
|
+
|
|
44
|
+
// Create a timeout
|
|
45
|
+
let timeout = Some(Timeout { lib: receive_lib.clone(), expiry: current_timestamp + grace_period });
|
|
46
|
+
|
|
47
|
+
// Verify initial state - timeout should not be set
|
|
48
|
+
let initial_timeout = env.as_contract(&endpoint_client.address, || {
|
|
49
|
+
storage::EndpointStorage::receive_library_timeout(env, &oapp, context.eid)
|
|
50
|
+
});
|
|
51
|
+
assert_eq!(initial_timeout, None, "Initial receive library timeout should be None");
|
|
52
|
+
|
|
53
|
+
// Set the timeout with oapp auth
|
|
54
|
+
env.mock_auths(&[MockAuth {
|
|
55
|
+
address: &oapp,
|
|
56
|
+
invoke: &MockAuthInvoke {
|
|
57
|
+
contract: &endpoint_client.address,
|
|
58
|
+
fn_name: "set_receive_library_timeout",
|
|
59
|
+
args: (&oapp, &oapp, &context.eid, &timeout).into_val(env),
|
|
60
|
+
sub_invokes: &[],
|
|
61
|
+
},
|
|
62
|
+
}]);
|
|
63
|
+
endpoint_client.set_receive_library_timeout(&oapp, &oapp, &context.eid, &timeout);
|
|
64
|
+
|
|
65
|
+
// Verify the event was published
|
|
66
|
+
assert_event(
|
|
67
|
+
env,
|
|
68
|
+
&endpoint_client.address,
|
|
69
|
+
ReceiveLibraryTimeoutSet { receiver: oapp.clone(), eid: context.eid, timeout: timeout.clone() },
|
|
70
|
+
);
|
|
71
|
+
|
|
72
|
+
// Verify storage was updated via public interface
|
|
73
|
+
assert_eq!(endpoint_client.receive_library_timeout(&oapp, &context.eid), timeout.clone());
|
|
74
|
+
|
|
75
|
+
// Assert storage change directly
|
|
76
|
+
let stored_timeout = env.as_contract(&endpoint_client.address, || {
|
|
77
|
+
storage::EndpointStorage::receive_library_timeout(env, &oapp, context.eid)
|
|
78
|
+
});
|
|
79
|
+
assert_eq!(stored_timeout, timeout, "Storage should contain the receive library timeout");
|
|
80
|
+
}
|