diff --git a/libraries/chain/include/eosio/chain/symbol.hpp b/libraries/chain/include/eosio/chain/symbol.hpp index d88f8a6df6d2a3b666bdb51ae464bd2e854cc373..4dfbf378ac7052b1a0a20cc30b51e8299fb50c75 100644 --- a/libraries/chain/include/eosio/chain/symbol.hpp +++ b/libraries/chain/include/eosio/chain/symbol.hpp @@ -63,10 +63,10 @@ namespace eosio { static constexpr uint8_t max_precision = 18; explicit symbol(uint8_t p, const char* s): m_value(string_to_symbol(p, s)) { - FC_ASSERT(valid(), "invalid symbol"); + FC_ASSERT(valid(), "invalid symbol", ("s",s)); } explicit symbol(uint64_t v = SY(4, EOS)): m_value(v) { - FC_ASSERT(valid(), "invalid symbol"); + FC_ASSERT(valid(), "invalid symbol", ("name",name())); } static symbol from_string(const string& from) { diff --git a/unittests/currency_tests.cpp b/unittests/currency_tests.cpp index fb9cc0dcd0d54cc9d231b26e35e70eb2d081307c..5d614020f07fe2ad211c8c84cde8f526fe0da10c 100644 --- a/unittests/currency_tests.cpp +++ b/unittests/currency_tests.cpp @@ -304,10 +304,8 @@ BOOST_FIXTURE_TEST_CASE(test_symbol, TESTER) try { // invalid - contains lower case characters, no validation { - symbol malformed(SY(6,EoS)); - BOOST_REQUIRE_EQUAL(false, malformed.valid()); - BOOST_REQUIRE_EQUAL("EoS", malformed.name()); - BOOST_REQUIRE_EQUAL(6, malformed.decimals()); + BOOST_CHECK_EXCEPTION(symbol malformed(SY(6,EoS)), + fc::assert_exception, assert_message_contains("invalid symbol")); } // invalid - contains lower case characters, exception thrown diff --git a/unittests/eosio.token_tests.cpp b/unittests/eosio.token_tests.cpp index f431d0b854dbb6099e0f91fe08e2e759967d670d..2a0add6338d4e428b871c4340fe136936bb409cd 100644 --- a/unittests/eosio.token_tests.cpp +++ b/unittests/eosio.token_tests.cpp @@ -131,6 +131,28 @@ BOOST_FIXTURE_TEST_CASE( create_negative_max_supply, eosio_token_tester ) try { } FC_LOG_AND_RETHROW() +BOOST_FIXTURE_TEST_CASE( symbol_already_exists, eosio_token_tester ) try { + + auto token = create( N(alice), asset::from_string("100 TKN"), true, false, false); + auto stats = get_stats("0,TKN"); + REQUIRE_MATCHING_OBJECT( stats, mvo() + ("supply", "0 TKN") + ("max_supply", "100 TKN") + ("issuer", "alice") + ("can_freeze",1) + ("can_recall",0) + ("can_whitelist",0) + ("is_frozen",false) + ("enforce_whitelist",false) + ); + produce_blocks(1); + + BOOST_REQUIRE_EQUAL( error( "condition: assertion failed: token with symbol already exists" ), + create( N(alice), asset::from_string("100 TKN"), true, false, false) + ); + +} FC_LOG_AND_RETHROW() + BOOST_FIXTURE_TEST_CASE( create_max_supply, eosio_token_tester ) try { auto token = create( N(alice), asset::from_string("4611686018427387903 TKN"), true, false, false); @@ -147,9 +169,13 @@ BOOST_FIXTURE_TEST_CASE( create_max_supply, eosio_token_tester ) try { ); produce_blocks(1); - BOOST_REQUIRE_EQUAL( error( "condition: assertion failed: invalid supply" ), - create( N(alice), asset::from_string("4611686018427387904 TKN"), true, false, false) - ); + asset max(10, symbol(SY(0, NKT))); + max.amount = 4611686018427387904; + + BOOST_CHECK_EXCEPTION( create( N(alice), max, true, false, false) , asset_type_exception, [](const asset_type_exception& e) { + return expect_assert_message(e, "magnitude of asset amount must be less than 2^62"); + }); + } FC_LOG_AND_RETHROW() @@ -169,15 +195,13 @@ BOOST_FIXTURE_TEST_CASE( create_max_decimals, eosio_token_tester ) try { ); produce_blocks(1); - BOOST_REQUIRE_EQUAL( error( "condition: assertion failed: invalid supply" ), - create( N(alice), asset::from_string("4.611686018427387904 TKN"), true, false, false) - ); - + asset max(10, symbol(SY(0, NKT))); //1.0000000000000000000 => 0x8ac7230489e80000L - //TODO: Better error message - BOOST_REQUIRE_EQUAL( error( "condition: assertion failed: max-supply must be positive" ), - create( N(alice), asset::from_string("1.0000000000000000000 TKN"), true, false, false) - ); + max.amount = 0x8ac7230489e80000L; + + BOOST_CHECK_EXCEPTION( create( N(alice), max, true, false, false) , asset_type_exception, [](const asset_type_exception& e) { + return expect_assert_message(e, "magnitude of asset amount must be less than 2^62"); + }); } FC_LOG_AND_RETHROW() @@ -211,10 +235,6 @@ BOOST_FIXTURE_TEST_CASE( issue_tests, eosio_token_tester ) try { issue( N(alice), N(alice), asset::from_string("500.001 TKN"), "hola" ) ); - BOOST_REQUIRE_EQUAL( error( "condition: assertion failed: invalid quantity" ), - issue( N(alice), N(alice), asset::from_string("4611686018427387.904 TKN"), "hola" ) - ); - BOOST_REQUIRE_EQUAL( error( "condition: assertion failed: must issue positive quantity" ), issue( N(alice), N(alice), asset::from_string("-1.000 TKN"), "hola" ) ); @@ -275,10 +295,6 @@ BOOST_FIXTURE_TEST_CASE( transfer_tests, eosio_token_tester ) try { transfer( N(alice), N(bob), asset::from_string("701 CERO"), "hola" ) ); - BOOST_REQUIRE_EQUAL( error( "condition: assertion failed: invalid quantity" ), - transfer( N(alice), N(bob), asset::from_string("4611686018427387904 CERO"), "hola" ) - ); - BOOST_REQUIRE_EQUAL( error( "condition: assertion failed: must transfer positive quantity" ), transfer( N(alice), N(bob), asset::from_string("-1000 CERO"), "hola" ) ); diff --git a/unittests/misc_tests.cpp b/unittests/misc_tests.cpp index e8768ff0149e810f9bea8113a751e6f1d29243a9..d965a496e97ca92e716f36db52a42276cb1f91b2 100644 --- a/unittests/misc_tests.cpp +++ b/unittests/misc_tests.cpp @@ -64,6 +64,12 @@ BOOST_AUTO_TEST_CASE(asset_from_string_overflow) BOOST_CHECK_EXCEPTION( asset::from_string("-0.1000000000000000000 CUR") , assert_exception, [](const assert_exception& e) { return expect_assert_message(e, "precision should be <= 18"); }); + BOOST_CHECK_EXCEPTION( asset::from_string("1.0000000000000000000 CUR") , assert_exception, [](const assert_exception& e) { + return expect_assert_message(e, "precision should be <= 18"); + }); + BOOST_CHECK_EXCEPTION( asset::from_string("-1.0000000000000000000 CUR") , assert_exception, [](const assert_exception& e) { + return expect_assert_message(e, "precision should be <= 18"); + }); // precision = 18, magnitude < 2^58 a = asset::from_string("0.100000000000000000 CUR"); @@ -78,6 +84,12 @@ BOOST_AUTO_TEST_CASE(asset_from_string_overflow) BOOST_CHECK_EXCEPTION( asset::from_string("-4.611686018427387904 CUR") , asset_type_exception, [](const asset_type_exception& e) { return expect_assert_message(e, "magnitude of asset amount must be less than 2^62"); }); + BOOST_CHECK_EXCEPTION( asset::from_string("4611686018427387.904 CUR") , asset_type_exception, [](const asset_type_exception& e) { + return expect_assert_message(e, "magnitude of asset amount must be less than 2^62"); + }); + BOOST_CHECK_EXCEPTION( asset::from_string("-4611686018427387.904 CUR") , asset_type_exception, [](const asset_type_exception& e) { + return expect_assert_message(e, "magnitude of asset amount must be less than 2^62"); + }); // precision = 18, magnitude = 2^62-1 a = asset::from_string("4.611686018427387903 CUR");