Files
serai/coins/monero/tests/scan.rs
2023-01-04 16:26:25 +03:00

225 lines
7.5 KiB
Rust

use rand::RngCore;
use monero_serai::transaction::Transaction;
mod runner;
test!(
scan_standard_address,
(
|_, mut builder: Builder, _| async move {
let mut scanner =
Scanner::from_view(runner::random_address().1, Network::Mainnet, Some(HashSet::new()));
builder.add_payment(scanner.address(AddressSpec::Standard), 5);
(builder.build().unwrap(), (scanner,))
},
|_, tx: Transaction, _, mut state: (Scanner,)| async move {
let output = state.0.scan_transaction(&tx).not_locked().swap_remove(0);
assert_eq!(output.commitment().amount, 5);
},
),
);
test!(
scan_subaddress,
(
|_, mut builder: Builder, _| async move {
let mut scanner =
Scanner::from_view(runner::random_address().1, Network::Mainnet, Some(HashSet::new()));
let subaddress_index = (0, 1);
builder.add_payment(
scanner.address(AddressSpec::Subaddress(subaddress_index.0, subaddress_index.1)),
5,
);
(builder.build().unwrap(), (scanner, subaddress_index))
},
|_, tx: Transaction, _, mut state: (Scanner, (u32, u32))| async move {
let output = state.0.scan_transaction(&tx).not_locked().swap_remove(0);
assert_eq!(output.commitment().amount, 5);
assert_eq!(output.metadata.subaddress, state.1);
},
),
);
test!(
scan_integrated_address,
(
|_, mut builder: Builder, _| async move {
let mut scanner =
Scanner::from_view(runner::random_address().1, Network::Mainnet, Some(HashSet::new()));
let mut payment_id = [0u8; 8];
OsRng.fill_bytes(&mut payment_id);
builder.add_payment(scanner.address(AddressSpec::Integrated(payment_id)), 5);
(builder.build().unwrap(), (scanner, payment_id))
},
|_, tx: Transaction, _, mut state: (Scanner, [u8; 8])| async move {
let output = state.0.scan_transaction(&tx).not_locked().swap_remove(0);
assert_eq!(output.commitment().amount, 5);
assert_eq!(output.metadata.payment_id, state.1);
},
),
);
test!(
scan_featured_standard,
(
|_, mut builder: Builder, _| async move {
let mut scanner =
Scanner::from_view(runner::random_address().1, Network::Mainnet, Some(HashSet::new()));
builder.add_payment(scanner.address(AddressSpec::Featured(None, None, false)), 5);
(builder.build().unwrap(), (scanner,))
},
|_, tx: Transaction, _, mut state: (Scanner,)| async move {
let output = state.0.scan_transaction(&tx).not_locked().swap_remove(0);
assert_eq!(output.commitment().amount, 5);
},
),
);
test!(
scan_featured_subaddress,
(
|_, mut builder: Builder, _| async move {
let mut scanner =
Scanner::from_view(runner::random_address().1, Network::Mainnet, Some(HashSet::new()));
let subaddress_index = (0, 2);
builder.add_payment(
scanner.address(AddressSpec::Featured(Some(subaddress_index), None, false)),
5,
);
(builder.build().unwrap(), (scanner, subaddress_index))
},
|_, tx: Transaction, _, mut state: (Scanner, (u32, u32))| async move {
let output = state.0.scan_transaction(&tx).not_locked().swap_remove(0);
assert_eq!(output.commitment().amount, 5);
assert_eq!(output.metadata.subaddress, state.1);
},
),
);
test!(
scan_featured_integrated,
(
|_, mut builder: Builder, _| async move {
let mut scanner =
Scanner::from_view(runner::random_address().1, Network::Mainnet, Some(HashSet::new()));
let mut payment_id = [0u8; 8];
OsRng.fill_bytes(&mut payment_id);
builder.add_payment(scanner.address(AddressSpec::Featured(None, Some(payment_id), false)), 5);
(builder.build().unwrap(), (scanner, payment_id))
},
|_, tx: Transaction, _, mut state: (Scanner, [u8; 8])| async move {
let output = state.0.scan_transaction(&tx).not_locked().swap_remove(0);
assert_eq!(output.commitment().amount, 5);
assert_eq!(output.metadata.payment_id, state.1);
},
),
);
test!(
scan_featured_integrated_subaddress,
(
|_, mut builder: Builder, _| async move {
let mut scanner =
Scanner::from_view(runner::random_address().1, Network::Mainnet, Some(HashSet::new()));
let subaddress_index = (0, 3);
let mut payment_id = [0u8; 8];
OsRng.fill_bytes(&mut payment_id);
builder.add_payment(
scanner.address(AddressSpec::Featured(Some(subaddress_index), Some(payment_id), false)),
5,
);
(builder.build().unwrap(), (scanner, payment_id, subaddress_index))
},
|_, tx: Transaction, _, mut state: (Scanner, [u8; 8], (u32, u32))| async move {
let output = state.0.scan_transaction(&tx).not_locked().swap_remove(0);
assert_eq!(output.commitment().amount, 5);
assert_eq!(output.metadata.payment_id, state.1);
assert_eq!(output.metadata.subaddress, state.2);
},
),
);
test!(
scan_guaranteed_standard,
(
|_, mut builder: Builder, _| async move {
let mut scanner = Scanner::from_view(runner::random_address().1, Network::Mainnet, None);
builder.add_payment(scanner.address(AddressSpec::Featured(None, None, true)), 5);
(builder.build().unwrap(), (scanner,))
},
|_, tx: Transaction, _, mut state: (Scanner,)| async move {
let output = state.0.scan_transaction(&tx).not_locked().swap_remove(0);
assert_eq!(output.commitment().amount, 5);
},
),
);
test!(
scan_guaranteed_subaddress,
(
|_, mut builder: Builder, _| async move {
let mut scanner = Scanner::from_view(runner::random_address().1, Network::Mainnet, None);
let subaddress_index = (0, 1);
builder
.add_payment(scanner.address(AddressSpec::Featured(Some(subaddress_index), None, true)), 5);
(builder.build().unwrap(), (scanner, subaddress_index))
},
|_, tx: Transaction, _, mut state: (Scanner, (u32, u32))| async move {
let output = state.0.scan_transaction(&tx).not_locked().swap_remove(0);
assert_eq!(output.commitment().amount, 5);
assert_eq!(output.metadata.subaddress, state.1);
},
),
);
test!(
scan_guaranteed_integrated,
(
|_, mut builder: Builder, _| async move {
let mut scanner = Scanner::from_view(runner::random_address().1, Network::Mainnet, None);
let mut payment_id = [0u8; 8];
OsRng.fill_bytes(&mut payment_id);
builder.add_payment(scanner.address(AddressSpec::Featured(None, Some(payment_id), true)), 5);
(builder.build().unwrap(), (scanner, payment_id))
},
|_, tx: Transaction, _, mut state: (Scanner, [u8; 8])| async move {
let output = state.0.scan_transaction(&tx).not_locked().swap_remove(0);
assert_eq!(output.commitment().amount, 5);
assert_eq!(output.metadata.payment_id, state.1);
},
),
);
test!(
scan_guaranteed_integrated_subaddress,
(
|_, mut builder: Builder, _| async move {
let mut scanner = Scanner::from_view(runner::random_address().1, Network::Mainnet, None);
let subaddress_index = (0, 2);
let mut payment_id = [0u8; 8];
OsRng.fill_bytes(&mut payment_id);
builder.add_payment(
scanner.address(AddressSpec::Featured(Some(subaddress_index), Some(payment_id), true)),
5,
);
(builder.build().unwrap(), (scanner, payment_id, subaddress_index))
},
|_, tx: Transaction, _, mut state: (Scanner, [u8; 8], (u32, u32))| async move {
let output = state.0.scan_transaction(&tx).not_locked().swap_remove(0);
assert_eq!(output.commitment().amount, 5);
assert_eq!(output.metadata.payment_id, state.1);
assert_eq!(output.metadata.subaddress, state.2);
},
),
);