Resolve #103 - Implement issuer override tests
This commit is contained in:
parent
bb71e1933b
commit
cc767bbc7e
3 changed files with 78 additions and 0 deletions
|
|
@ -461,6 +461,25 @@ const asset_object& database_fixture::create_user_issued_asset( const string& na
|
|||
return db.get<asset_object>(ptx.operation_results[0].get<object_id_type>());
|
||||
}
|
||||
|
||||
const asset_object& database_fixture::create_user_issued_asset( const string& name, const account_object& issuer, uint16_t flags )
|
||||
{
|
||||
asset_create_operation creator;
|
||||
creator.issuer = issuer.id;
|
||||
creator.fee = asset();
|
||||
creator.symbol = name;
|
||||
creator.common_options.max_supply = 0;
|
||||
creator.precision = 2;
|
||||
creator.common_options.core_exchange_rate = price({asset(1,1),asset(1)});
|
||||
creator.common_options.max_supply = GRAPHENE_MAX_SHARE_SUPPLY;
|
||||
creator.common_options.flags = flags;
|
||||
creator.common_options.issuer_permissions = flags;
|
||||
trx.operations.push_back(std::move(creator));
|
||||
trx.validate();
|
||||
processed_transaction ptx = db.push_transaction(trx, ~0);
|
||||
trx.operations.clear();
|
||||
return db.get<asset_object>(ptx.operation_results[0].get<object_id_type>());
|
||||
}
|
||||
|
||||
void database_fixture::issue_uia( const account_object& recipient, asset amount )
|
||||
{
|
||||
asset_issue_operation op({asset(),amount.asset_id(db).issuer, amount, recipient.id});
|
||||
|
|
|
|||
|
|
@ -165,6 +165,9 @@ struct database_fixture {
|
|||
uint16_t market_fee_percent = 100 /*1%*/,
|
||||
uint16_t flags = charge_market_fee);
|
||||
const asset_object& create_user_issued_asset( const string& name );
|
||||
const asset_object& create_user_issued_asset( const string& name,
|
||||
const account_object& issuer,
|
||||
uint16_t flags );
|
||||
void issue_uia( const account_object& recipient, asset amount );
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -70,6 +70,62 @@ BOOST_AUTO_TEST_CASE( create_advanced_uia )
|
|||
}
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE( override_transfer_test )
|
||||
{ try {
|
||||
ACTORS( (dan)(eric)(sam) );
|
||||
const asset_object& advanced = create_user_issued_asset( "ADVANCED", sam, override_authority );
|
||||
issue_uia( dan, advanced.amount( 1000 ) );
|
||||
trx.validate();
|
||||
db.push_transaction(trx, ~0);
|
||||
trx.operations.clear();
|
||||
BOOST_REQUIRE_EQUAL( get_balance( dan, advanced ), 1000 );
|
||||
|
||||
trx.operations.clear();
|
||||
override_transfer_operation otrans{ asset(), advanced.issuer, dan.id, eric.id, advanced.amount(100) };
|
||||
trx.operations.push_back(otrans);
|
||||
|
||||
BOOST_TEST_MESSAGE( "Require throwing without signature" );
|
||||
BOOST_REQUIRE_THROW( PUSH_TX( db, trx, 0 ), fc::exception);
|
||||
BOOST_TEST_MESSAGE( "Require throwing with dan's signature" );
|
||||
trx.sign( dan_private_key );
|
||||
BOOST_REQUIRE_THROW( PUSH_TX( db, trx, 0 ), fc::exception);
|
||||
BOOST_TEST_MESSAGE( "Pass with issuer's signature" );
|
||||
trx.signatures.clear();
|
||||
trx.sign( sam_private_key );
|
||||
PUSH_TX( db, trx, 0 );
|
||||
|
||||
BOOST_REQUIRE_EQUAL( get_balance( dan, advanced ), 900 );
|
||||
BOOST_REQUIRE_EQUAL( get_balance( eric, advanced ), 100 );
|
||||
} FC_LOG_AND_RETHROW() }
|
||||
|
||||
BOOST_AUTO_TEST_CASE( override_transfer_test2 )
|
||||
{ try {
|
||||
ACTORS( (dan)(eric)(sam) );
|
||||
const asset_object& advanced = create_user_issued_asset( "ADVANCED", sam, 0 );
|
||||
issue_uia( dan, advanced.amount( 1000 ) );
|
||||
trx.validate();
|
||||
db.push_transaction(trx, ~0);
|
||||
trx.operations.clear();
|
||||
BOOST_REQUIRE_EQUAL( get_balance( dan, advanced ), 1000 );
|
||||
|
||||
trx.operations.clear();
|
||||
override_transfer_operation otrans{ asset(), advanced.issuer, dan.id, eric.id, advanced.amount(100) };
|
||||
trx.operations.push_back(otrans);
|
||||
|
||||
BOOST_TEST_MESSAGE( "Require throwing without signature" );
|
||||
BOOST_REQUIRE_THROW( PUSH_TX( db, trx, 0 ), fc::exception);
|
||||
BOOST_TEST_MESSAGE( "Require throwing with dan's signature" );
|
||||
trx.sign( dan_private_key );
|
||||
BOOST_REQUIRE_THROW( PUSH_TX( db, trx, 0 ), fc::exception);
|
||||
BOOST_TEST_MESSAGE( "Fail because overide_authority flag is not set" );
|
||||
trx.signatures.clear();
|
||||
trx.sign( sam_private_key );
|
||||
BOOST_REQUIRE_THROW( PUSH_TX( db, trx, 0 ), fc::exception );
|
||||
|
||||
BOOST_REQUIRE_EQUAL( get_balance( dan, advanced ), 1000 );
|
||||
BOOST_REQUIRE_EQUAL( get_balance( eric, advanced ), 0 );
|
||||
} FC_LOG_AND_RETHROW() }
|
||||
|
||||
BOOST_AUTO_TEST_CASE( issue_whitelist_uia )
|
||||
{
|
||||
try {
|
||||
|
|
|
|||
Loading…
Reference in a new issue