Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
YottaChain
YTBP
提交
d3d695df
Y
YTBP
项目概览
YottaChain
/
YTBP
通知
0
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
Y
YTBP
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
d3d695df
编写于
3月 14, 2018
作者:
A
Anton Perkov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
REQUIRE_MATCHING_OBJECT, system contract ABI fix
上级
13debb29
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
113 addition
and
23 deletion
+113
-23
contracts/eosio.system/eosio.system.abi
contracts/eosio.system/eosio.system.abi
+3
-3
libraries/testing/include/eosio/testing/tester.hpp
libraries/testing/include/eosio/testing/tester.hpp
+7
-0
libraries/testing/tester.cpp
libraries/testing/tester.cpp
+9
-0
tests/wasm_tests/eosio.system_tests.cpp
tests/wasm_tests/eosio.system_tests.cpp
+94
-20
未找到文件。
contracts/eosio.system/eosio.system.abi
浏览文件 @
d3d695df
...
...
@@ -153,9 +153,9 @@
{"name":"proxy", "type":"account_name"},
{"name":"last_update", "type":"uint32"},
{"name":"is_proxy", "type":"uint32"},
{"name":"staked", "type":"uint
32
"},
{"name":"unstaking", "type":"uint
32
"},
{"name":"unstake_per_week", "type":"uint
32
"},
{"name":"staked", "type":"uint
64
"},
{"name":"unstaking", "type":"uint
64
"},
{"name":"unstake_per_week", "type":"uint
64
"},
{"name":"proxied_votes", "type":"uint128"},
{"name":"producers", "type":"account_name[]"},
{"name":"deferred_trx_id", "type":"uint32"},
...
...
libraries/testing/include/eosio/testing/tester.hpp
浏览文件 @
d3d695df
...
...
@@ -11,6 +11,11 @@
BOOST_REQUIRE_EQUAL( true, b.is_object() ); \
BOOST_REQUIRE_EQUAL_COLLECTIONS( a.get_object().begin(), a.get_object().end(), b.get_object().begin(), b.get_object().end() ); }
#define REQUIRE_MATCHING_OBJECT(left, right) { auto a = left; auto b = right; BOOST_REQUIRE_EQUAL( true, a.is_object() ); \
BOOST_REQUIRE_EQUAL( true, b.is_object() ); \
auto filtered = ::eosio::testing::filter_fields( a.get_object(), b.get_object() ); \
BOOST_REQUIRE_EQUAL_COLLECTIONS( a.get_object().begin(), a.get_object().end(), filtered.begin(), filtered.end() ); }
std
::
ostream
&
operator
<<
(
std
::
ostream
&
osm
,
const
fc
::
variant
&
v
);
std
::
ostream
&
operator
<<
(
std
::
ostream
&
osm
,
const
fc
::
variant_object
&
v
);
...
...
@@ -49,6 +54,8 @@ namespace eosio { namespace testing {
using
namespace
eosio
::
chain
;
fc
::
variant_object
filter_fields
(
const
fc
::
variant_object
&
filter
,
const
fc
::
variant_object
&
value
);
/**
* @class tester
* @brief provides utility function to simplify the creation of unit tests
...
...
libraries/testing/tester.cpp
浏览文件 @
d3d695df
...
...
@@ -20,6 +20,15 @@
namespace
eosio
{
namespace
testing
{
fc
::
variant_object
filter_fields
(
const
fc
::
variant_object
&
filter
,
const
fc
::
variant_object
&
value
)
{
fc
::
mutable_variant_object
res
;
for
(
auto
&
entry
:
filter
)
{
auto
it
=
value
.
find
(
entry
.
key
());
res
(
it
->
key
(),
it
->
value
()
);
}
return
res
;
}
base_tester
::
base_tester
(
chain_controller
::
runtime_limits
limits
)
{
cfg
.
block_log_dir
=
tempdir
.
path
()
/
"blocklog"
;
cfg
.
shared_memory_dir
=
tempdir
.
path
()
/
"shared"
;
...
...
tests/wasm_tests/eosio.system_tests.cpp
浏览文件 @
d3d695df
...
...
@@ -131,11 +131,11 @@ fc::variant simple_voter( account_name acct, const string& vote_stake, uint64_t
return
simple_voter
(
acct
,
asset
::
from_string
(
vote_stake
).
amount
,
ts
);
}
fc
::
variant
proxy
(
account_name
acct
,
uint64_t
vote_stake
,
uint64_t
ts
)
{
fc
::
variant
proxy
(
account_name
acct
,
uint64_t
vote_stake
)
{
return
mutable_variant_object
()
(
"owner"
,
acct
)
(
"proxy"
,
name
(
0
).
to_string
())
(
"last_update"
,
ts
)
//
("last_update", ts)
(
"is_proxy"
,
1
)
(
"staked"
,
vote_stake
)
(
"unstaking"
,
0
)
...
...
@@ -146,8 +146,8 @@ fc::variant proxy( account_name acct, uint64_t vote_stake, uint64_t ts ) {
(
"last_unstake"
,
0
);
}
fc
::
variant
proxy
(
account_name
acct
,
const
string
&
vote_stake
,
uint64_t
ts
)
{
return
proxy
(
acct
,
asset
::
from_string
(
vote_stake
).
amount
,
ts
);
fc
::
variant
proxy
(
account_name
acct
,
const
string
&
vote_stake
)
{
return
proxy
(
acct
,
asset
::
from_string
(
vote_stake
).
amount
);
}
BOOST_AUTO_TEST_SUITE
(
eosio_system_tests
)
...
...
@@ -726,13 +726,79 @@ BOOST_FIXTURE_TEST_CASE( producer_keep_votes, eosio_system_tester ) try {
}
FC_LOG_AND_RETHROW
()
BOOST_FIXTURE_TEST_CASE
(
vote_for_two_producers
,
eosio_system_tester
)
try
{
//alice becomes a producer
fc
::
variant
params
=
producer_parameters_example
(
1
);
vector
<
char
>
key
=
fc
::
raw
::
pack
(
get_public_key
(
N
(
alice
),
"active"
)
);
BOOST_REQUIRE_EQUAL
(
success
(),
push_action
(
N
(
alice
),
N
(
regproducer
),
mvo
()
(
"producer"
,
"alice"
)
(
"producer_key"
,
key
)
(
"prefs"
,
params
)
)
);
//bob becomes a producer
params
=
producer_parameters_example
(
2
);
key
=
fc
::
raw
::
pack
(
get_public_key
(
N
(
bob
),
"active"
)
);
BOOST_REQUIRE_EQUAL
(
success
(),
push_action
(
N
(
bob
),
N
(
regproducer
),
mvo
()
(
"producer"
,
"bob"
)
(
"producer_key"
,
key
)
(
"prefs"
,
params
)
)
);
//carol votes for alice and bob
issue
(
"carol"
,
"1000.0000 EOS"
,
config
::
system_account_name
);
BOOST_REQUIRE_EQUAL
(
success
(),
stake
(
"carol"
,
"15.0005 EOS"
,
"5.0000 EOS"
,
"0.0000 EOS"
)
);
BOOST_REQUIRE_EQUAL
(
success
(),
push_action
(
N
(
carol
),
N
(
voteproducer
),
mvo
()
(
"voter"
,
"carol"
)
(
"proxy"
,
name
(
0
).
to_string
()
)
(
"producers"
,
vector
<
account_name
>
{
N
(
alice
),
N
(
bob
)
}
)
)
);
auto
alice_info
=
get_producer_info
(
"alice"
);
BOOST_REQUIRE_EQUAL
(
200005
,
alice_info
[
"total_votes"
].
as_uint64
()
);
auto
bob_info
=
get_producer_info
(
"bob"
);
BOOST_REQUIRE_EQUAL
(
200005
,
bob_info
[
"total_votes"
].
as_uint64
()
);
//carol votes for alice (but revokes vote for bob)
BOOST_REQUIRE_EQUAL
(
success
(),
push_action
(
N
(
carol
),
N
(
voteproducer
),
mvo
()
(
"voter"
,
"carol"
)
(
"proxy"
,
name
(
0
).
to_string
()
)
(
"producers"
,
vector
<
account_name
>
{
N
(
alice
)
}
)
)
);
alice_info
=
get_producer_info
(
"alice"
);
BOOST_REQUIRE_EQUAL
(
200005
,
alice_info
[
"total_votes"
].
as_uint64
()
);
bob_info
=
get_producer_info
(
"bob"
);
BOOST_REQUIRE_EQUAL
(
0
,
bob_info
[
"total_votes"
].
as_uint64
()
);
//alice votes for herself and bob
issue
(
"alice"
,
"2.0000 EOS"
,
config
::
system_account_name
);
BOOST_REQUIRE_EQUAL
(
success
(),
stake
(
"alice"
,
"1.0000 EOS"
,
"1.0000 EOS"
,
"0.0000 EOS"
)
);
BOOST_REQUIRE_EQUAL
(
success
(),
push_action
(
N
(
alice
),
N
(
voteproducer
),
mvo
()
(
"voter"
,
"alice"
)
(
"proxy"
,
name
(
0
).
to_string
()
)
(
"producers"
,
vector
<
account_name
>
{
N
(
alice
),
N
(
bob
)
}
)
)
);
alice_info
=
get_producer_info
(
"alice"
);
BOOST_REQUIRE_EQUAL
(
220005
,
alice_info
[
"total_votes"
].
as_uint64
()
);
bob_info
=
get_producer_info
(
"bob"
);
BOOST_REQUIRE_EQUAL
(
20000
,
bob_info
[
"total_votes"
].
as_uint64
()
);
}
FC_LOG_AND_RETHROW
()
BOOST_FIXTURE_TEST_CASE
(
proxy_register_unregister
,
eosio_system_tester
)
try
{
//register proxy by first action for this user ever
BOOST_REQUIRE_EQUAL
(
success
(),
push_action
(
N
(
alice
),
N
(
regproxy
),
mvo
()
(
"proxy"
,
"alice"
)
)
);
REQUIRE_
EQUAL_OBJECTS
(
proxy
(
"alice"
,
"000.0000 EOS"
,
last_block_time
()
-
1
),
get_voter_info
(
"alice"
)
);
REQUIRE_
MATCHING_OBJECT
(
proxy
(
"alice"
,
"000.0000 EOS"
),
get_voter_info
(
"alice"
)
);
//unregister proxy
BOOST_REQUIRE_EQUAL
(
success
(),
push_action
(
N
(
alice
),
N
(
unregproxy
),
mvo
()
...
...
@@ -748,7 +814,7 @@ BOOST_FIXTURE_TEST_CASE( proxy_register_unregister, eosio_system_tester ) try {
(
"proxy"
,
"bob"
)
)
);
REQUIRE_
EQUAL_OBJECTS
(
proxy
(
"bob"
,
"300.0003 EOS"
,
last_block_time
()
),
get_voter_info
(
"bob"
)
);
REQUIRE_
MATCHING_OBJECT
(
proxy
(
"bob"
,
"300.0003 EOS"
),
get_voter_info
(
"bob"
)
);
//unrgister and check that stake is still in place
BOOST_REQUIRE_EQUAL
(
success
(),
push_action
(
N
(
bob
),
N
(
unregproxy
),
mvo
()
(
"proxy"
,
"bob"
)
...
...
@@ -764,7 +830,7 @@ BOOST_FIXTURE_TEST_CASE( proxy_register_unregister, eosio_system_tester ) try {
issue
(
"carol"
,
"1000.0000 EOS"
,
config
::
system_account_name
);
BOOST_REQUIRE_EQUAL
(
success
(),
stake
(
"carol"
,
"246.0002 EOS"
,
"531.0001 EOS"
,
"80.0000 EOS"
)
);
//check that both proxy flag and stake a correct
REQUIRE_
EQUAL_OBJECTS
(
proxy
(
"carol"
,
"777.0003 EOS"
,
last_block_time
()
-
1
),
get_voter_info
(
"carol"
)
);
REQUIRE_
MATCHING_OBJECT
(
proxy
(
"carol"
,
"777.0003 EOS"
),
get_voter_info
(
"carol"
)
);
//unregister
BOOST_REQUIRE_EQUAL
(
success
(),
push_action
(
N
(
carol
),
N
(
unregproxy
),
mvo
()
...
...
@@ -782,42 +848,50 @@ BOOST_FIXTURE_TEST_CASE( proxy_stake_unstake_keeps_proxy_flag, eosio_system_test
)
);
issue
(
"alice"
,
"1000.0000 EOS"
,
config
::
system_account_name
);
REQUIRE_
EQUAL_OBJECTS
(
proxy
(
"alice"
,
"0.0000 EOS"
,
last_block_time
()
-
1
),
get_voter_info
(
"alice"
)
);
REQUIRE_
MATCHING_OBJECT
(
proxy
(
"alice"
,
"0.0000 EOS"
),
get_voter_info
(
"alice"
)
);
//stake
BOOST_REQUIRE_EQUAL
(
success
(),
stake
(
"alice"
,
"100.0000 EOS"
,
"50.0000 EOS"
,
"80.0000 EOS"
)
);
//check that account is still a proxy
REQUIRE_
EQUAL_OBJECTS
(
proxy
(
"alice"
,
"150.0000 EOS"
,
last_block_time
()
),
get_voter_info
(
"alice"
)
);
REQUIRE_
MATCHING_OBJECT
(
proxy
(
"alice"
,
"150.0000 EOS"
),
get_voter_info
(
"alice"
)
);
//stake more
BOOST_REQUIRE_EQUAL
(
success
(),
stake
(
"alice"
,
"30.0000 EOS"
,
"20.0000 EOS"
,
"80.0000 EOS"
)
);
//check that account is still a proxy
REQUIRE_
EQUAL_OBJECTS
(
proxy
(
"alice"
,
"200.0000 EOS"
,
last_block_time
()
-
1
),
get_voter_info
(
"alice"
)
);
REQUIRE_
MATCHING_OBJECT
(
proxy
(
"alice"
,
"200.0000 EOS"
),
get_voter_info
(
"alice"
)
);
//unstake more
BOOST_REQUIRE_EQUAL
(
success
(),
unstake
(
"alice"
,
"65.0000 EOS"
,
"35.0000 EOS"
,
0
)
);
REQUIRE_
EQUAL_OBJECTS
(
proxy
(
"alice"
,
"100.0000 EOS"
,
last_block_time
()
),
get_voter_info
(
"alice"
)
);
REQUIRE_
MATCHING_OBJECT
(
proxy
(
"alice"
,
"100.0000 EOS"
),
get_voter_info
(
"alice"
)
);
//unstake the rest
BOOST_REQUIRE_EQUAL
(
success
(),
unstake
(
"alice"
,
"65.0000 EOS"
,
"35.0000 EOS"
,
0
)
);
REQUIRE_
EQUAL_OBJECTS
(
proxy
(
"alice"
,
"0.0000 EOS"
,
last_block_time
()
-
1
),
get_voter_info
(
"alice"
)
);
REQUIRE_
MATCHING_OBJECT
(
proxy
(
"alice"
,
"0.0000 EOS"
),
get_voter_info
(
"alice"
)
);
}
FC_LOG_AND_RETHROW
()
BOOST_FIXTURE_TEST_CASE
(
proxy_
multiple_
users
,
eosio_system_tester
)
try
{
BOOST_FIXTURE_TEST_CASE
(
proxy_users
,
eosio_system_tester
)
try
{
BOOST_REQUIRE_EQUAL
(
success
(),
push_action
(
N
(
alice
),
N
(
regproxy
),
mvo
()
(
"proxy"
,
"alice"
)
(
"proxy"
,
"alice"
)
)
);
issue
(
"alice"
,
"1000.0000 EOS"
,
config
::
system_account_name
);
REQUIRE_EQUAL_OBJECTS
(
proxy
(
"alice"
,
"0.0000 EOS"
,
last_block_time
()
-
1
),
get_voter_info
(
"alice"
)
);
REQUIRE_MATCHING_OBJECT
(
proxy
(
"alice"
,
"0.0000 EOS"
),
get_voter_info
(
"alice"
)
);
//stake
BOOST_REQUIRE_EQUAL
(
success
(),
stake
(
"alice"
,
"100.0000 EOS"
,
"50.0000 EOS"
,
"80.0000 EOS"
)
);
//check that account is still a proxy
REQUIRE_EQUAL_OBJECTS
(
proxy
(
"alice"
,
"150.0000 EOS"
,
last_block_time
()
),
get_voter_info
(
"alice"
)
);
issue
(
"bob"
,
"1000.0000 EOS"
,
config
::
system_account_name
);
BOOST_REQUIRE_EQUAL
(
success
(),
stake
(
"bob"
,
"100.0002 EOS"
,
"50.0001 EOS"
,
"50.0000 EOS"
)
);
BOOST_REQUIRE_EQUAL
(
success
(),
push_action
(
N
(
bob
),
N
(
voteproducer
),
mvo
()
(
"voter"
,
"bob"
)
(
"proxy"
,
"alice"
)
(
"producers"
,
vector
<
account_name
>
()
)
)
);
/*
REQUIRE_MATCHING_OBJECT( proxy( "alice", "0.0000 EOS" ), get_voter_info( "alice" ) );
issue( "carol", "1000.0000 EOS", config::system_account_name );
BOOST_REQUIRE_EQUAL( success(), stake( "carol", "246.0002 EOS", "531.0001 EOS", "80.0000 EOS" ) );
*/
}
FC_LOG_AND_RETHROW
()
BOOST_AUTO_TEST_SUITE_END
()
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录