Skip to content

Commit

Permalink
update tests and allow lower_id with zero value
Browse files Browse the repository at this point in the history
  • Loading branch information
MBrozhko34 committed Apr 5, 2024
1 parent b8024f3 commit 8eceeaf
Show file tree
Hide file tree
Showing 4 changed files with 116 additions and 10 deletions.
14 changes: 9 additions & 5 deletions pallets/token-manager/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,6 @@ mod test_deferred_lower;
mod test_growth;
#[cfg(test)]
mod test_lower_proof_generation;

#[cfg(test)]
mod test_non_avt_tokens;
#[cfg(test)]
Expand Down Expand Up @@ -918,10 +917,15 @@ impl<T: Config> Pallet<T> {
let event_validity = T::ProcessedEventsChecker::check_event(event_id);
ensure!(event_validity, Error::<T>::NoTier1EventForLogLowerClaimed);

if !data.is_valid() {
Err(Error::<T>::InvalidLowerId)?
}
ensure!(
LowersReadyToClaim::<T>::contains_key(data.lower_id) == true,
Error::<T>::InvalidLowerId
);
LowersReadyToClaim::<T>::remove(data.lower_id);
ensure!(
LowersReadyToClaim::<T>::contains_key(data.lower_id) == false,
Error::<T>::InvalidLowerId
);

Self::deposit_event(Event::<T>::AvtLowerClaimed { lower_id: data.lower_id });

Expand Down Expand Up @@ -971,7 +975,7 @@ impl<T: Config> Pallet<T> {
.map_err(|_| Error::<T>::InvalidLowerCall)?,
)?;

<LowerNonce<T>>::mutate(|mut nonce| *nonce += 1);
<LowerNonce<T>>::mutate(|nonce| *nonce += 1);

Self::deposit_event(Event::<T>::LowerRequested {
token_id,
Expand Down
8 changes: 8 additions & 0 deletions pallets/token-manager/src/mock.rs
Original file line number Diff line number Diff line change
Expand Up @@ -529,6 +529,7 @@ pub struct MockData {
pub avt_token_lift_event: EthEvent,
pub non_avt_token_lift_event: EthEvent,
pub empty_data_lift_event: EthEvent,
pub lower_claimed_event: EthEvent,
pub receiver_account_id: <TestRuntime as system::Config>::AccountId,
pub token_balance_123_tokens: <TestRuntime as Config>::TokenBalance,
}
Expand Down Expand Up @@ -571,6 +572,13 @@ impl MockData {
},
event_data: EventData::EmptyEvent,
},
lower_claimed_event: EthEvent {
event_id: EthEventId {
signature: ValidEvents::AvtLowerClaimed.signature(),
transaction_hash: H256::random(),
},
event_data: EventData::LogLowerClaimed(AvtLowerClaimedData { lower_id: 0 }),
},
receiver_account_id,
token_balance_123_tokens: Self::get_token_balance(AMOUNT_123_TOKEN),
}
Expand Down
99 changes: 99 additions & 0 deletions pallets/token-manager/src/test_avt_tokens.rs
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,61 @@ use pallet_balances::Error as BalancesError;
const USE_RECEIVER_WITH_EXISTING_AMOUNT: bool = true;
const USE_RECEIVER_WITH_0_AMOUNT: bool = false;

fn schedule_lower(
from: AccountId,
amount: u128,
t1_recipient: H160,
expected_lower_id: u32,
burn_acc: AccountId,
) {
assert_ok!(TokenManager::schedule_direct_lower(
RuntimeOrigin::signed(from),
from,
AVT_TOKEN_CONTRACT,
amount,
t1_recipient
));

// execute lower
fast_forward_to_block(get_expected_execution_block());

// Event emitted
assert!(System::events().iter().any(|a| a.event ==
RuntimeEvent::TokenManager(crate::Event::<TestRuntime>::AvtLowered {
sender: from,
recipient: burn_acc,
amount,
t1_recipient,
lower_id: expected_lower_id
})));
}

fn perform_lower_setup(lower_id: u32) {
let (_, from, burn_acc, t1_recipient) = MockData::setup_lower_request_data();
let pre_lower_balance = <TokenManager as Store>::Balances::get((NON_AVT_TOKEN_ID, from));
let amount = pre_lower_balance;

let expected_lower_id = lower_id;
schedule_lower(from, amount, t1_recipient, expected_lower_id, burn_acc);
assert!(<LowersPendingProof<TestRuntime>>::get(expected_lower_id).is_some());

let test_proof_data: Vec<u8> = "lowerProofReady".to_string().into();
// Simulate the response from eth-bridge
assert_ok!(TokenManager::process_lower_proof_result(
expected_lower_id,
PALLET_ID.to_vec(),
Ok(test_proof_data.clone())
));

// Generated proof should be stored in LowerReadyToClaim
assert_eq!(
<LowersReadyToClaim<TestRuntime>>::get(expected_lower_id)
.unwrap()
.encoded_lower_data,
test_proof_data
);
}

#[test]
fn avn_test_lift_to_zero_balance_account_should_succeed() {
let mut ext = ExtBuilder::build_default()
Expand Down Expand Up @@ -341,3 +396,47 @@ fn avn_test_avt_token_total_lowered_amount_greater_than_balance_max_value_ok() {
})));
});
}

#[test]
fn avt_lower_claimed_succesfully() {
let mut ext = ExtBuilder::build_default()
.with_genesis_config()
.with_balances()
.as_externality();

ext.execute_with(|| {
let mock_data = MockData::setup(AMOUNT_123_TOKEN, USE_RECEIVER_WITH_0_AMOUNT);
let mock_event = &mock_data.lower_claimed_event;
insert_to_mock_processed_events(&mock_event.event_id);

let lower_id = 0;

perform_lower_setup(lower_id);

assert_ok!(TokenManager::on_event_processed(&mock_event));

assert!(System::events().iter().any(|a| a.event ==
RuntimeEvent::TokenManager(crate::Event::<TestRuntime>::AvtLowerClaimed {
lower_id
})));
});
}

#[test]
fn avt_lower_claimed_fails_due_with_invalid_lower_id() {
let mut ext = ExtBuilder::build_default()
.with_genesis_config()
.with_balances()
.as_externality();

ext.execute_with(|| {
let mock_data = MockData::setup(AMOUNT_123_TOKEN, USE_RECEIVER_WITH_0_AMOUNT);
let mock_event = &mock_data.lower_claimed_event;
insert_to_mock_processed_events(&mock_event.event_id);

assert_noop!(
TokenManager::on_event_processed(&mock_event),
Error::<TestRuntime>::InvalidLowerId
);
});
}
5 changes: 0 additions & 5 deletions primitives/avn-common/src/event_types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -581,10 +581,6 @@ pub struct AvtLowerClaimedData {
impl AvtLowerClaimedData {
const TOPIC_LOWER_ID: usize = 1;

pub fn is_valid(&self) -> bool {
return !self.lower_id.is_zero()
}

pub fn parse_bytes(data: Option<Vec<u8>>, topics: Vec<Vec<u8>>) -> Result<Self, Error> {
if data.is_some() {
return Err(Error::AvtLowerClaimedEventMissingData)
Expand Down Expand Up @@ -632,7 +628,6 @@ impl EventData {
EventData::LogNftCancelListing(d) => d.is_valid(),
EventData::LogNftEndBatchListing(d) => d.is_valid(),
EventData::LogAvtGrowthLifted(d) => d.is_valid(),
EventData::LogLowerClaimed(d) => d.is_valid(),
EventData::EmptyEvent => true,
_ => false,
}
Expand Down

0 comments on commit 8eceeaf

Please sign in to comment.