-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathpayloadless_tests.cpp
More file actions
80 lines (61 loc) · 2.52 KB
/
payloadless_tests.cpp
File metadata and controls
80 lines (61 loc) · 2.52 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
#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( {"payloadless"_n} );
set_code( "payloadless"_n, contracts::payloadless_wasm() );
set_abi( "payloadless"_n, contracts::payloadless_abi().data() );
auto trace = push_action("payloadless"_n, "doit"_n, "payloadless"_n, 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( {"payloadless"_n} );
set_code( "payloadless"_n, contracts::payloadless_wasm() );
set_abi( "payloadless"_n, contracts::payloadless_abi().data() );
fc::variant pretty_trx = fc::mutable_variant_object()
("actions", fc::variants({
fc::mutable_variant_object()
("account", name("payloadless"_n))
("name", "doit")
("authorization", fc::variants({
fc::mutable_variant_object()
("actor", name("payloadless"_n))
("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::create_yield_function( abi_serializer_max_time ));
set_transaction_headers(trx);
trx.sign( get_private_key( "payloadless"_n, "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()