Resolve #103 - Implement issuer override tests

This commit is contained in:
Daniel Larimer 2015-07-01 16:57:22 -04:00
parent bb71e1933b
commit cc767bbc7e
3 changed files with 78 additions and 0 deletions

View file

@ -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});

View file

@ -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 );

View file

@ -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 {