mirror of
https://github.com/fluencelabs/aquavm
synced 2025-04-01 04:11:03 +00:00
112 lines
3.4 KiB
Rust
112 lines
3.4 KiB
Rust
/*
|
|
* Copyright 2021 Fluence Labs Limited
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
use air::CatchableError;
|
|
use air_test_utils::prelude::*;
|
|
|
|
use fstrings::f;
|
|
use fstrings::format_args_f;
|
|
|
|
use std::rc::Rc;
|
|
|
|
#[test]
|
|
fn fail_with_last_error() {
|
|
let local_peer_id = "local_peer_id";
|
|
let fallible_service_id = "service_id_1";
|
|
let mut vm = create_avm(fallible_call_service(fallible_service_id), local_peer_id);
|
|
|
|
let script = f!(r#"
|
|
(xor
|
|
(call "{local_peer_id}" ("service_id_1" "local_fn_name") [] result_1)
|
|
(fail %last_error%)
|
|
)"#);
|
|
|
|
let result = call_vm!(vm, "", script, "", "");
|
|
|
|
let expected_error =
|
|
CatchableError::LocalServiceError(1, Rc::new(r#""failed result from fallible_call_service""#.to_string()));
|
|
assert!(check_error(&result, expected_error));
|
|
}
|
|
|
|
#[test]
|
|
fn fail_with_literals() {
|
|
let local_peer_id = "local_peer_id";
|
|
let mut vm = create_avm(echo_call_service(), local_peer_id);
|
|
|
|
let script = format!(
|
|
r#"
|
|
(xor
|
|
(fail 1337 "error message")
|
|
(fail %last_error%)
|
|
)"#,
|
|
);
|
|
|
|
let result = call_vm!(vm, "", script, "", "");
|
|
|
|
let expected_error = CatchableError::FailWithoutXorError {
|
|
ret_code: 1337,
|
|
error_message: "error message".to_string(),
|
|
};
|
|
assert!(check_error(&result, expected_error));
|
|
}
|
|
|
|
#[test]
|
|
fn fail_with_last_error_tetraplets() {
|
|
let local_peer_id = "local_peer_id";
|
|
let fallible_service_id = "service_id_1";
|
|
let (host_closure, tetraplet_anchor) = tetraplet_host_function(fallible_call_service(fallible_service_id));
|
|
let mut vm = create_avm(host_closure, local_peer_id);
|
|
|
|
let local_fn_name = "local_fn_name";
|
|
let script = f!(r#"
|
|
(xor
|
|
(xor
|
|
(call "{local_peer_id}" ("{fallible_service_id}" "{local_fn_name}") [] result_1)
|
|
(fail %last_error%)
|
|
)
|
|
(call "{local_peer_id}" ("" "") [%last_error%])
|
|
)
|
|
"#);
|
|
|
|
let _ = checked_call_vm!(vm, local_peer_id, script, "", "");
|
|
assert_eq!(
|
|
tetraplet_anchor.borrow()[0][0],
|
|
SecurityTetraplet::new(local_peer_id, fallible_service_id, local_fn_name, "")
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn fail_with_literals_tetraplets() {
|
|
let local_peer_id = "local_peer_id";
|
|
let (host_closure, tetraplet_anchor) = tetraplet_host_function(echo_call_service());
|
|
let mut vm = create_avm(host_closure, local_peer_id);
|
|
|
|
let script = f!(r#"
|
|
(xor
|
|
(xor
|
|
(fail 1337 "error message")
|
|
(fail %last_error%)
|
|
)
|
|
(call "{local_peer_id}" ("" "") [%last_error%])
|
|
)"#);
|
|
|
|
let _ = checked_call_vm!(vm, local_peer_id, script, "", "");
|
|
assert_eq!(
|
|
tetraplet_anchor.borrow()[0][0],
|
|
SecurityTetraplet::literal_tetraplet(local_peer_id)
|
|
);
|
|
}
|