182 lines
6.3 KiB
Rust
182 lines
6.3 KiB
Rust
|
mod message_preparation {
|
||
|
use remote_signer_consumer::Error;
|
||
|
use remote_signer_test::*;
|
||
|
use types::Domain;
|
||
|
|
||
|
#[test]
|
||
|
fn beacon_block_and_bls_domain_mismatch() {
|
||
|
let (test_signer, _tmp_dir) = set_up_api_test_signer_to_sign_message();
|
||
|
let test_client = set_up_test_consumer(&test_signer.address);
|
||
|
|
||
|
macro_rules! test_case {
|
||
|
($f: expr, $bls_domain: expr, $msg: expr) => {
|
||
|
match do_sign_request(&test_client, get_input_data_and_set_domain($f, $bls_domain))
|
||
|
.unwrap_err()
|
||
|
{
|
||
|
Error::InvalidParameter(message) => assert_eq!(message, $msg),
|
||
|
e => panic!("{:?}", e),
|
||
|
}
|
||
|
};
|
||
|
}
|
||
|
|
||
|
test_case!(
|
||
|
get_input_data_block,
|
||
|
Domain::BeaconAttester,
|
||
|
"Domain mismatch for the BeaconBlock object. Expected BeaconProposer, got BeaconAttester"
|
||
|
);
|
||
|
test_case!(
|
||
|
get_input_data_block,
|
||
|
Domain::Randao,
|
||
|
"Domain mismatch for the BeaconBlock object. Expected BeaconProposer, got Randao"
|
||
|
);
|
||
|
test_case!(
|
||
|
get_input_data_attestation,
|
||
|
Domain::BeaconProposer,
|
||
|
"Domain mismatch for the AttestationData object. Expected BeaconAttester, got BeaconProposer"
|
||
|
);
|
||
|
test_case!(
|
||
|
get_input_data_attestation,
|
||
|
Domain::Randao,
|
||
|
"Domain mismatch for the AttestationData object. Expected BeaconAttester, got Randao"
|
||
|
);
|
||
|
test_case!(
|
||
|
get_input_data_randao,
|
||
|
Domain::BeaconProposer,
|
||
|
"Domain mismatch for the Epoch object. Expected Randao, got BeaconProposer"
|
||
|
);
|
||
|
test_case!(
|
||
|
get_input_data_randao,
|
||
|
Domain::BeaconAttester,
|
||
|
"Domain mismatch for the Epoch object. Expected Randao, got BeaconAttester"
|
||
|
);
|
||
|
|
||
|
test_signer.shutdown();
|
||
|
}
|
||
|
|
||
|
#[test]
|
||
|
fn empty_public_key_parameter() {
|
||
|
let (test_signer, _tmp_dir) = set_up_api_test_signer_to_sign_message();
|
||
|
let test_client = set_up_test_consumer(&test_signer.address);
|
||
|
|
||
|
macro_rules! test_case {
|
||
|
($f: expr, $p: expr, $msg: expr) => {
|
||
|
match do_sign_request(&test_client, get_input_data_and_set_public_key($f, $p))
|
||
|
.unwrap_err()
|
||
|
{
|
||
|
Error::InvalidParameter(message) => assert_eq!(message, $msg),
|
||
|
e => panic!("{:?}", e),
|
||
|
}
|
||
|
};
|
||
|
}
|
||
|
|
||
|
test_case!(get_input_data_block, "", "Empty parameter public_key");
|
||
|
test_case!(get_input_data_attestation, "", "Empty parameter public_key");
|
||
|
test_case!(get_input_data_randao, "", "Empty parameter public_key");
|
||
|
|
||
|
test_signer.shutdown();
|
||
|
}
|
||
|
|
||
|
#[test]
|
||
|
fn invalid_public_key_param() {
|
||
|
let (test_signer, _tmp_dir) = set_up_api_test_signer_to_sign_message();
|
||
|
let test_client = set_up_test_consumer(&test_signer.address);
|
||
|
|
||
|
macro_rules! test_case {
|
||
|
($f: expr, $p: expr, $msg: expr) => {
|
||
|
match do_sign_request(&test_client, get_input_data_and_set_public_key($f, $p))
|
||
|
.unwrap_err()
|
||
|
{
|
||
|
Error::ServerMessage(message) => assert_eq!(message, $msg),
|
||
|
e => panic!("{:?}", e),
|
||
|
}
|
||
|
};
|
||
|
}
|
||
|
|
||
|
test_case!(get_input_data_block, "/", "Invalid public key: %2F");
|
||
|
test_case!(get_input_data_attestation, "/", "Invalid public key: %2F");
|
||
|
test_case!(get_input_data_randao, "/", "Invalid public key: %2F");
|
||
|
test_case!(get_input_data_block, "//", "Invalid public key: %2F%2F");
|
||
|
test_case!(get_input_data_block, "///", "Invalid public key: %2F%2F%2F");
|
||
|
test_case!(
|
||
|
get_input_data_block,
|
||
|
"/?'or 1 = 1 --",
|
||
|
"Invalid public key: %2F%3F\'or%201%20=%201%20--"
|
||
|
);
|
||
|
|
||
|
test_signer.shutdown();
|
||
|
}
|
||
|
|
||
|
#[test]
|
||
|
fn unsupported_bls_domain() {
|
||
|
let (test_signer, _tmp_dir) = set_up_api_test_signer_to_sign_message();
|
||
|
let test_client = set_up_test_consumer(&test_signer.address);
|
||
|
|
||
|
let test_case = |bls_domain, msg| {
|
||
|
let mut test_input = get_input_data_block(0xc137);
|
||
|
test_input.bls_domain = bls_domain;
|
||
|
let signature = do_sign_request(&test_client, test_input);
|
||
|
|
||
|
match signature.unwrap_err() {
|
||
|
Error::InvalidParameter(message) => assert_eq!(message, msg),
|
||
|
e => panic!("{:?}", e),
|
||
|
}
|
||
|
};
|
||
|
|
||
|
test_case(Domain::Deposit, "Unsupported BLS Domain: Deposit");
|
||
|
test_case(
|
||
|
Domain::VoluntaryExit,
|
||
|
"Unsupported BLS Domain: VoluntaryExit",
|
||
|
);
|
||
|
test_case(
|
||
|
Domain::SelectionProof,
|
||
|
"Unsupported BLS Domain: SelectionProof",
|
||
|
);
|
||
|
test_case(
|
||
|
Domain::AggregateAndProof,
|
||
|
"Unsupported BLS Domain: AggregateAndProof",
|
||
|
);
|
||
|
|
||
|
test_signer.shutdown();
|
||
|
}
|
||
|
|
||
|
#[test]
|
||
|
fn invalid_public_key_param_additional_path_segments() {
|
||
|
let (test_signer, _tmp_dir) = set_up_api_test_signer_to_sign_message();
|
||
|
let test_client = set_up_test_consumer(&test_signer.address);
|
||
|
|
||
|
macro_rules! test_case {
|
||
|
($f: expr, $p: expr, $msg: expr) => {
|
||
|
match do_sign_request(&test_client, get_input_data_and_set_public_key($f, $p))
|
||
|
.unwrap_err()
|
||
|
{
|
||
|
Error::ServerMessage(message) => assert_eq!(message, $msg),
|
||
|
e => panic!("{:?}", e),
|
||
|
}
|
||
|
};
|
||
|
}
|
||
|
|
||
|
test_case!(
|
||
|
get_input_data_block,
|
||
|
"this/receipt",
|
||
|
"Invalid public key: this%2Freceipt"
|
||
|
);
|
||
|
test_case!(
|
||
|
get_input_data_attestation,
|
||
|
"/this/receipt/please",
|
||
|
"Invalid public key: %2Fthis%2Freceipt%2Fplease"
|
||
|
);
|
||
|
test_case!(
|
||
|
get_input_data_randao,
|
||
|
"this/receipt/please?",
|
||
|
"Invalid public key: this%2Freceipt%2Fplease%3F"
|
||
|
);
|
||
|
test_case!(
|
||
|
get_input_data_block,
|
||
|
&format!("{}/valid/pk", PUBLIC_KEY_1),
|
||
|
format!("Invalid public key: {}%2Fvalid%2Fpk", PUBLIC_KEY_1)
|
||
|
);
|
||
|
|
||
|
test_signer.shutdown();
|
||
|
}
|
||
|
}
|