Skip to content

Commit

Permalink
fix tests
Browse files Browse the repository at this point in the history
  • Loading branch information
alexytsu committed Jun 22, 2023
1 parent c2a5cdc commit ddc6934
Show file tree
Hide file tree
Showing 4 changed files with 149 additions and 18 deletions.
43 changes: 39 additions & 4 deletions actors/market/tests/activate_deal_failures.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
// Copyright 2019-2022 ChainSafe Systems
// SPDX-License-Identifier: Apache-2.0, MIT

use fil_actor_market::BatchActivateDealsParams;
use fil_actor_market::{Actor as MarketActor, Method, SectorDeals, State, EX_DEAL_EXPIRED};
use fil_actor_market::{BatchActivateDealsParams, BatchActivateDealsResult};
use fil_actors_runtime::network::EPOCHS_IN_DAY;
use fil_actors_runtime::runtime::builtins::Type;
use fil_actors_runtime::test_utils::*;
Expand All @@ -29,7 +29,18 @@ fn fail_when_caller_is_not_the_provider_of_the_deal() {
let addrs = MinerAddresses { provider: provider2_addr, ..MinerAddresses::default() };
let deal_id = generate_and_publish_deal(&rt, CLIENT_ADDR, &addrs, start_epoch, end_epoch);

let res = batch_activate_deals(&rt, PROVIDER_ADDR, &[(sector_expiry, vec![deal_id])]);
let res = batch_activate_deals_raw(
&rt,
PROVIDER_ADDR,
vec![SectorDeals {
sector_expiry,
sector_type: RegisteredSealProof::StackedDRG8MiBV1,
deal_ids: vec![deal_id],
}],
)
.unwrap();
let res: BatchActivateDealsResult =
res.unwrap().deserialize().expect("BatchActivateDealsResult failed to deserialize");

assert_eq!(res.activation_results.codes(), vec![ExitCode::USR_FORBIDDEN]);

Expand Down Expand Up @@ -66,7 +77,19 @@ fn fail_when_caller_is_not_a_storage_miner_actor() {
fn fail_when_deal_has_not_been_published_before() {
let rt = setup();

let res = batch_activate_deals(&rt, PROVIDER_ADDR, &[(0, vec![DealID::from(42u32)])]);
let res = batch_activate_deals_raw(
&rt,
PROVIDER_ADDR,
vec![SectorDeals {
sector_type: RegisteredSealProof::StackedDRG8MiBV1,
sector_expiry: EPOCHS_IN_DAY,
deal_ids: vec![DealID::from(42u32)],
}],
)
.unwrap();
let res: BatchActivateDealsResult =
res.unwrap().deserialize().expect("BatchActivateDealsResult failed to deserialize");

assert_eq!(res.activation_results.codes(), vec![ExitCode::USR_NOT_FOUND]);

rt.verify();
Expand All @@ -89,7 +112,19 @@ fn fail_when_deal_has_already_been_activated() {
);
activate_deals(&rt, sector_expiry, PROVIDER_ADDR, 0, &[deal_id]);

let res = batch_activate_deals(&rt, PROVIDER_ADDR, &[(sector_expiry, vec![deal_id])]);
let res = batch_activate_deals_raw(
&rt,
PROVIDER_ADDR,
vec![SectorDeals {
sector_type: RegisteredSealProof::StackedDRG8MiBV1,
sector_expiry,
deal_ids: vec![deal_id],
}],
)
.unwrap();
let res: BatchActivateDealsResult =
res.unwrap().deserialize().expect("BatchActivateDealsResult failed to deserialize");

assert_eq!(res.activation_results.codes(), vec![ExitCode::USR_ILLEGAL_ARGUMENT]);

rt.verify();
Expand Down
63 changes: 61 additions & 2 deletions actors/market/tests/batch_activate_deals.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,7 @@ mod harness;
use harness::*;

const START_EPOCH: ChainEpoch = 10;
const CURR_EPOCH: ChainEpoch = START_EPOCH;
const END_EPOCH: ChainEpoch = 200 * EPOCHS_IN_DAY;
const SECTOR_EXPIRY: ChainEpoch = END_EPOCH + 200;
const MINER_ADDRESSES: MinerAddresses = MinerAddresses {
owner: OWNER_ADDR,
worker: WORKER_ADDR,
Expand Down Expand Up @@ -189,3 +187,64 @@ fn handles_sectors_empty_of_deals_gracefully() {

check_state(&rt);
}

#[test]
fn fails_to_activate_sectors_containing_duplicate_deals() {
let rt = setup();
let deal_1 = create_deal(&rt, CLIENT_ADDR, &MINER_ADDRESSES, START_EPOCH, END_EPOCH, false);
let deal_2 = create_deal(&rt, CLIENT_ADDR, &MINER_ADDRESSES, START_EPOCH + 1, END_EPOCH, false);
let deal_3 = create_deal(&rt, CLIENT_ADDR, &MINER_ADDRESSES, START_EPOCH + 2, END_EPOCH, false);

let next_allocation_id = 1;
rt.set_caller(*ACCOUNT_ACTOR_CODE_ID, WORKER_ADDR);
let deal_ids = publish_deals(
&rt,
&MINER_ADDRESSES,
&[deal_1, deal_2, deal_3],
TokenAmount::zero(),
next_allocation_id,
);
assert_eq!(3, deal_ids.len());

let id_1 = deal_ids[0];
let id_2 = deal_ids[1];
let id_3 = deal_ids[2];

let sector_type = RegisteredSealProof::StackedDRG8MiBV1;
// group into sectors
let sectors_deals = vec![
// activate deal 1
SectorDeals { deal_ids: vec![id_1], sector_type, sector_expiry: END_EPOCH },
// duplicate id_1 so no deals activated here
SectorDeals { deal_ids: vec![id_3, id_1, id_2], sector_type, sector_expiry: END_EPOCH }, // duplicate with sector 1 so all fail
// since id_3 wasn't activated earlier this is a valid request
SectorDeals { deal_ids: vec![id_3], sector_type, sector_expiry: END_EPOCH },
];

let res = batch_activate_deals_raw(&rt, PROVIDER_ADDR, sectors_deals).unwrap();
let res: BatchActivateDealsResult =
res.unwrap().deserialize().expect("VerifyDealsForActivation failed!");

// all sectors should succeed
assert_eq!(
vec![ExitCode::OK, ExitCode::USR_ILLEGAL_ARGUMENT, ExitCode::OK],
res.activation_results.codes()
);
// should treat empty sectors as success
assert_eq!(2, res.activation_results.success_count);

// deal should have activated
let deal_1 = get_deal_state(&rt, id_1);
assert_eq!(0, deal_1.sector_start_epoch);

let deal_3 = get_deal_state(&rt, id_3);
assert_eq!(0, deal_3.sector_start_epoch);

// no state for deal2 means deal2 was not activated
let st: State = rt.get_state();
let states = DealMetaArray::load(&st.states, &rt.store).unwrap();
let s = states.get(id_2).unwrap();
assert!(s.is_none());

check_state(&rt);
}
58 changes: 48 additions & 10 deletions actors/market/tests/market_actor_test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,11 @@
use fil_actor_market::balance_table::BALANCE_TABLE_BITWIDTH;
use fil_actor_market::policy::detail::DEAL_MAX_LABEL_SIZE;
use fil_actor_market::{
deal_id_key, ext, next_update_epoch, Actor as MarketActor, ClientDealProposal, DealArray,
DealMetaArray, Label, MarketNotifyDealParams, Method, PublishStorageDealsParams,
PublishStorageDealsReturn, State, WithdrawBalanceParams, EX_DEAL_EXPIRED,
MARKET_NOTIFY_DEAL_METHOD, NO_ALLOCATION_ID, PROPOSALS_AMT_BITWIDTH, STATES_AMT_BITWIDTH,
deal_id_key, ext, next_update_epoch, Actor as MarketActor, BatchActivateDealsResult,
ClientDealProposal, DealArray, DealMetaArray, Label, MarketNotifyDealParams, Method,
PublishStorageDealsParams, PublishStorageDealsReturn, SectorDeals, State,
WithdrawBalanceParams, EX_DEAL_EXPIRED, MARKET_NOTIFY_DEAL_METHOD, NO_ALLOCATION_ID,
PROPOSALS_AMT_BITWIDTH, STATES_AMT_BITWIDTH,
};
use fil_actors_runtime::cbor::{deserialize, serialize};
use fil_actors_runtime::network::EPOCHS_IN_DAY;
Expand All @@ -28,7 +29,7 @@ use fvm_shared::deal::DealID;
use fvm_shared::econ::TokenAmount;
use fvm_shared::error::ExitCode;
use fvm_shared::piece::PaddedPieceSize;
use fvm_shared::sector::StoragePower;
use fvm_shared::sector::{RegisteredSealProof, StoragePower};
use fvm_shared::{MethodNum, HAMT_BIT_WIDTH, METHOD_CONSTRUCTOR, METHOD_SEND};
use regex::Regex;
use std::cell::RefCell;
Expand Down Expand Up @@ -1688,7 +1689,20 @@ fn fail_when_current_epoch_greater_than_start_epoch_of_deal() {
);

rt.set_epoch(start_epoch + 1);
let res = batch_activate_deals(&rt, PROVIDER_ADDR, &[(sector_expiry, vec![deal_id])]);
let res = batch_activate_deals_raw(
&rt,
PROVIDER_ADDR,
vec![SectorDeals {
sector_expiry,
sector_type: RegisteredSealProof::StackedDRG8MiBV1,
deal_ids: vec![deal_id],
}],
)
.unwrap();

let res: BatchActivateDealsResult =
res.unwrap().deserialize().expect("VerifyDealsForActivation failed!");

assert_eq!(res.activation_results.codes(), vec![ExitCode::USR_ILLEGAL_ARGUMENT]);

rt.verify();
Expand All @@ -1709,7 +1723,20 @@ fn fail_when_end_epoch_of_deal_greater_than_sector_expiry() {
end_epoch,
);

let res = batch_activate_deals(&rt, PROVIDER_ADDR, &[(end_epoch - 1, vec![deal_id])]);
let res = batch_activate_deals_raw(
&rt,
PROVIDER_ADDR,
vec![SectorDeals {
sector_expiry: end_epoch - 1,
sector_type: RegisteredSealProof::StackedDRG8MiBV1,
deal_ids: vec![deal_id],
}],
)
.unwrap();

let res: BatchActivateDealsResult =
res.unwrap().deserialize().expect("VerifyDealsForActivation failed!");

assert_eq!(res.activation_results.codes(), vec![ExitCode::USR_ILLEGAL_ARGUMENT]);

rt.verify();
Expand All @@ -1731,7 +1758,7 @@ fn fail_to_activate_all_deals_if_one_deal_fails() {
start_epoch,
end_epoch,
);
activate_deals(&rt, sector_expiry, PROVIDER_ADDR, 0, &[deal_id1]);
batch_activate_deals(&rt, PROVIDER_ADDR, &[(sector_expiry, vec![deal_id1])]);

let deal_id2 = generate_and_publish_deal(
&rt,
Expand All @@ -1741,8 +1768,19 @@ fn fail_to_activate_all_deals_if_one_deal_fails() {
end_epoch + 1,
);

let res =
batch_activate_deals(&rt, PROVIDER_ADDR, &[(sector_expiry, vec![deal_id1, deal_id2])]);
let res = batch_activate_deals_raw(
&rt,
PROVIDER_ADDR,
vec![SectorDeals {
sector_expiry,
sector_type: RegisteredSealProof::StackedDRG8MiBV1,
deal_ids: vec![deal_id1, deal_id2],
}],
)
.unwrap();
let res: BatchActivateDealsResult =
res.unwrap().deserialize().expect("VerifyDealsForActivation failed!");

assert_eq!(res.activation_results.codes(), vec![ExitCode::USR_ILLEGAL_ARGUMENT]);
rt.verify();

Expand Down
3 changes: 1 addition & 2 deletions actors/miner/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4992,8 +4992,7 @@ fn batch_activate_deals_and_claim_allocations(
})?,
TokenAmount::zero(),
))?;
let batch_res: ext::market::BatchActivateDealsResult = deserialize_block(activate_raw)?;
batch_res
deserialize_block::<ext::market::BatchActivateDealsResult>(activate_raw)?
}
};

Expand Down

0 comments on commit ddc6934

Please sign in to comment.