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>());
|
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 )
|
void database_fixture::issue_uia( const account_object& recipient, asset amount )
|
||||||
{
|
{
|
||||||
asset_issue_operation op({asset(),amount.asset_id(db).issuer, amount, recipient.id});
|
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 market_fee_percent = 100 /*1%*/,
|
||||||
uint16_t flags = charge_market_fee);
|
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 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 );
|
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 )
|
BOOST_AUTO_TEST_CASE( issue_whitelist_uia )
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue