Repository navigation
Expand file tree
/
Copy pathpayloadless_tests.cpp
More file actions
84 lines (65 loc) · 2.53 KB
/
Copy pathpayloadless_tests.cpp
File metadata and controls
84 lines (65 loc) · 2.53 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
/**
* @file
* @copyright defined in eos/LICENSE.txt
*/
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wsign-compare"
#include <boost/test/unit_test.hpp>
#pragma GCC diagnostic pop
#include <eosio/testing/tester.hpp>
#include <eosio/chain/abi_serializer.hpp>
#include <Runtime/Runtime.h>
#include <fc/variant_object.hpp>
#include <fc/io/json.hpp>
#include <boost/algorithm/string/predicate.hpp>
#include <contracts.hpp>
#ifdef NON_VALIDATING_TEST
#define TESTER tester
#else
#define TESTER validating_tester
#endif
using namespace eosio;
using namespace eosio::chain;
using namespace eosio::testing;
using namespace fc;
class payloadless_tester : public TESTER {
};
BOOST_AUTO_TEST_SUITE(payloadless_tests)
BOOST_FIXTURE_TEST_CASE( test_doit, payloadless_tester ) {
create_accounts( {N(payloadless)} );
set_code( N(payloadless), contracts::payloadless_wasm() );
set_abi( N(payloadless), contracts::payloadless_abi().data() );
auto trace = push_action(N(payloadless), N(doit), N(payloadless), mutable_variant_object());
auto msg = trace->action_traces.front().console;
BOOST_CHECK_EQUAL(msg == "Im a payloadless action", true);
}
// test GH#3916 - contract api action with no parameters fails when called from cleos
// abi_serializer was failing when action data was empty.
BOOST_FIXTURE_TEST_CASE( test_abi_serializer, payloadless_tester ) {
create_accounts( {N(payloadless)} );
set_code( N(payloadless), contracts::payloadless_wasm() );
set_abi( N(payloadless), contracts::payloadless_abi().data() );
variant pretty_trx = fc::mutable_variant_object()
("actions", fc::variants({
fc::mutable_variant_object()
("account", name(N(payloadless)))
("name", "doit")
("authorization", fc::variants({
fc::mutable_variant_object()
("actor", name(N(payloadless)))
("permission", name(config::active_name))
}))
("data", fc::mutable_variant_object()
)
})
);
signed_transaction trx;
// from_variant is key to this test as abi_serializer was explicitly not allowing empty "data"
abi_serializer::from_variant(pretty_trx, trx, get_resolver(), abi_serializer_max_time);
set_transaction_headers(trx);
trx.sign( get_private_key( N(payloadless), "active" ), control->get_chain_id() );
auto trace = push_transaction( trx );
auto msg = trace->action_traces.front().console;
BOOST_CHECK_EQUAL(msg == "Im a payloadless action", true);
}
BOOST_AUTO_TEST_SUITE_END()