From d4989d4996db6ad194442351acad5bc7f1614da3 Mon Sep 17 00:00:00 2001 From: Nathan Hourt Date: Thu, 3 Aug 2017 14:18:35 -0500 Subject: [PATCH] Ref #123: Write tests, fix bugs --- libraries/native_contract/eos_contract.cpp | 2 ++ tests/common/macro_support.hpp | 4 ++-- tests/common/testing_macros.hpp | 9 +++++++-- tests/tests/native_contract_tests.cpp | 2 ++ 4 files changed, 13 insertions(+), 4 deletions(-) diff --git a/libraries/native_contract/eos_contract.cpp b/libraries/native_contract/eos_contract.cpp index c5fa51f33bc..7366c4bfeec 100644 --- a/libraries/native_contract/eos_contract.cpp +++ b/libraries/native_contract/eos_contract.cpp @@ -364,6 +364,8 @@ void apply_eos_setproxy(apply_context& context) { void apply_eos_updateauth(apply_context& context) { auto update = context.msg.as(); EOS_ASSERT(!update.permission.empty(), message_validate_exception, "Cannot create authority with empty name"); + EOS_ASSERT(update.permission != update.parent, message_validate_exception, + "Cannot set an authority as its own parent"); EOS_ASSERT(validate(update.authority), message_validate_exception, "Invalid authority: ${auth}", ("auth", update.authority)); if (update.permission == "active") diff --git a/tests/common/macro_support.hpp b/tests/common/macro_support.hpp index 9a892b637aa..2d3be220f7b 100644 --- a/tests/common/macro_support.hpp +++ b/tests/common/macro_support.hpp @@ -80,7 +80,7 @@ inline std::vector sort_names( std::vector&& names ) { trx.scope = {#account}; \ trx.emplaceMessage(config::EosContractName, \ vector{{#account,"active"}}, \ - "updateauth", types::updateauth{#account, #authname, parentname, auth}); \ + "updateauth", types::updateauth{#account, authname, parentname, auth}); \ trx.expiration = chain.head_block_time() + 100; \ trx.set_reference_block(chain.head_block_id()); \ chain.push_transaction(trx, chain_controller::skip_transaction_signatures); \ @@ -93,7 +93,7 @@ inline std::vector sort_names( std::vector&& names ) { trx.scope = {#account}; \ trx.emplaceMessage(config::EosContractName, \ vector{{#account,"active"}}, \ - "deleteauth", types::deleteauth{#account, #authname}); \ + "deleteauth", types::deleteauth{#account, authname}); \ trx.expiration = chain.head_block_time() + 100; \ trx.set_reference_block(chain.head_block_id()); \ chain.push_transaction(trx, chain_controller::skip_transaction_signatures); \ diff --git a/tests/common/testing_macros.hpp b/tests/common/testing_macros.hpp index 918329af7c1..3aaab52a7a6 100644 --- a/tests/common/testing_macros.hpp +++ b/tests/common/testing_macros.hpp @@ -171,7 +171,7 @@ #define Make_Account(...) BOOST_PP_OVERLOAD(MKACCT, __VA_ARGS__)(__VA_ARGS__) /** - * @brief Shorthand way to create or update a named authority on an account + * @brief Shorthand way to create or update named authority on an account * * @code{.cpp} * // Add a new authority named "money" to account "alice" as a child of her active authority @@ -181,7 +181,12 @@ */ #define Set_Authority(...) BOOST_PP_OVERLOAD(SETAUTH, __VA_ARGS__)(__VA_ARGS__) /** - * @brief Shorthand way to delete a named authority from an account + * @brief Shorthand way to delete named authority from an account + * + * @code{.cpp} + * // Delete authority named "money" from account "alice" + * Delete_Authority(chain, alice, "money"); + * @endcode */ #define Delete_Authority(...) BOOST_PP_OVERLOAD(DELAUTH, __VA_ARGS__)(__VA_ARGS__) diff --git a/tests/tests/native_contract_tests.cpp b/tests/tests/native_contract_tests.cpp index b49d590d8f7..7b5ce6c166c 100644 --- a/tests/tests/native_contract_tests.cpp +++ b/tests/tests/native_contract_tests.cpp @@ -392,6 +392,8 @@ BOOST_FIXTURE_TEST_CASE(auth_tests, testing_fixture) { Make_Key(k1); Set_Authority(chain, alice, "spending", "active", Key_Authority(k1_public_key)); + BOOST_CHECK_THROW(Set_Authority(chain, alice, "spending", "spending", Key_Authority(k1_public_key)), + message_validate_exception); Set_Authority(chain, alice, "spending", "owner", Key_Authority(k1_public_key)); Delete_Authority(chain, alice, "spending"); } FC_LOG_AND_RETHROW() }