Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
YottaChain
YTBP
提交
9d6f96bc
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,发现更多精彩内容 >>
提交
9d6f96bc
编写于
11月 17, 2017
作者:
D
Daniel Larimer
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
adding missing tests
上级
bbca959d
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
173 addition
and
0 deletion
+173
-0
tests/chain_tests/transfer_tests.cpp
tests/chain_tests/transfer_tests.cpp
+173
-0
未找到文件。
tests/chain_tests/transfer_tests.cpp
0 → 100644
浏览文件 @
9d6f96bc
#include <boost/test/unit_test.hpp>
#include <eosio/testing/tester.hpp>
#include <eosio/chain/contracts/balance_object.hpp>
#include <eosio/chain/contracts/staked_balance_objects.hpp>
using
namespace
eosio
;
using
namespace
eosio
::
chain
;
using
namespace
eosio
::
chain
::
contracts
;
using
namespace
eosio
::
testing
;
BOOST_AUTO_TEST_SUITE
(
transfer_tests
)
BOOST_AUTO_TEST_CASE
(
transfer_test
)
{
try
{
tester
test
;
test
.
produce_blocks
(
2
);
test
.
create_accounts
(
{
N
(
dan
),
N
(
bart
)}
);
test
.
transfer
(
N
(
inita
),
N
(
dan
),
"10.0000 EOS"
,
"memo"
);
{
const
auto
&
dans_balance
=
test
.
get
<
balance_object
,
by_owner_name
>
(
N
(
dan
)
);
FC_ASSERT
(
dans_balance
.
balance
==
asset
::
from_string
(
"10.0000 EOS"
)
);
}
test
.
produce_block
();
{
const
auto
&
dans_balance
=
test
.
get
<
balance_object
,
by_owner_name
>
(
N
(
dan
)
);
FC_ASSERT
(
dans_balance
.
balance
==
asset
::
from_string
(
"10.0000 EOS"
)
);
}
/// insufficient funds
BOOST_REQUIRE_THROW
(
test
.
transfer
(
N
(
dan
),
N
(
bart
),
"11.0000 EOS"
,
"memo"
),
action_validate_exception
);
/// this should succeed because dan has sufficient balance
test
.
transfer
(
N
(
dan
),
N
(
bart
),
"10.0000 EOS"
,
"memo"
);
/// verify that bart now has 10.000
const
auto
&
barts_balance
=
test
.
get
<
balance_object
,
by_owner_name
>
(
N
(
bart
)
);
FC_ASSERT
(
barts_balance
.
balance
==
asset
::
from_string
(
"10.0000 EOS"
)
);
{
/// verify that dan now has 0.000
const
auto
&
dans_balance
=
test
.
get
<
balance_object
,
by_owner_name
>
(
N
(
dan
)
);
FC_ASSERT
(
dans_balance
.
balance
==
asset
::
from_string
(
"0.0000 EOS"
)
);
}
/// should throw because -1 becomes uint64 max which is greater than balance
BOOST_REQUIRE_THROW
(
test
.
transfer
(
N
(
bart
),
N
(
dan
),
asset
(
-
1
),
"memo"
),
action_validate_exception
);
{
auto
from
=
N
(
bart
);
auto
to
=
N
(
dan
);
asset
amount
(
1
);
signed_transaction
trx
;
trx
.
write_scope
=
{
from
,
to
};
trx
.
actions
.
emplace_back
(
vector
<
permission_level
>
{{
from
,
config
::
active_name
}},
contracts
::
transfer
{
.
from
=
from
,
.
to
=
to
,
.
amount
=
amount
.
amount
,
.
memo
=
"memo"
}
);
test
.
set_tapos
(
trx
);
BOOST_REQUIRE_THROW
(
test
.
control
->
push_transaction
(
trx
),
tx_missing_sigs
);
trx
.
sign
(
test
.
get_private_key
(
from
,
"active"
),
chain_id_type
()
);
test
.
control
->
push_transaction
(
trx
);
}
{
auto
from
=
N
(
bart
);
auto
to
=
N
(
dan
);
asset
amount
(
1
);
signed_transaction
trx
;
trx
.
write_scope
=
{
from
,
to
};
trx
.
actions
.
emplace_back
(
vector
<
permission_level
>
{{
to
,
config
::
active_name
}},
contracts
::
transfer
{
.
from
=
from
,
.
to
=
to
,
.
amount
=
amount
.
amount
,
.
memo
=
"memo"
}
);
test
.
set_tapos
(
trx
);
trx
.
sign
(
test
.
get_private_key
(
to
,
"active"
),
chain_id_type
()
);
/// action not provided from authority
BOOST_REQUIRE_THROW
(
test
.
control
->
push_transaction
(
trx
),
tx_missing_auth
);
}
{
auto
from
=
N
(
bart
);
auto
to
=
N
(
dan
);
asset
amount
(
1
);
signed_transaction
trx
;
// trx.write_scope = {from,to};
trx
.
actions
.
emplace_back
(
vector
<
permission_level
>
{{
from
,
config
::
active_name
}},
contracts
::
transfer
{
.
from
=
from
,
.
to
=
to
,
.
amount
=
amount
.
amount
,
.
memo
=
"memo"
}
);
test
.
set_tapos
(
trx
);
trx
.
sign
(
test
.
get_private_key
(
from
,
"active"
),
chain_id_type
()
);
BOOST_REQUIRE_THROW
(
test
.
control
->
push_transaction
(
trx
),
tx_missing_write_scope
);
}
}
FC_LOG_AND_RETHROW
()
}
/// transfer_test
/**
* This test case will attempt to allow one account to transfer on behalf
* of another account by updating the active authority.
*/
BOOST_AUTO_TEST_CASE
(
transfer_delegation
)
{
try
{
tester
test
;
test
.
produce_blocks
(
2
);
test
.
create_accounts
(
{
N
(
dan
),
N
(
bart
),
N
(
trust
)}
);
test
.
transfer
(
N
(
inita
),
N
(
dan
),
"10.0000 EOS"
);
test
.
transfer
(
N
(
inita
),
N
(
trust
),
"10.0000 EOS"
);
test
.
transfer
(
N
(
trust
),
N
(
dan
),
"1.0000 EOS"
);
test
.
produce_block
();
auto
dans_active_auth
=
authority
(
1
,
{},
{
{
.
permission
=
{
N
(
trust
),
config
::
active_name
},
.
weight
=
1
}
});
test
.
set_authority
(
N
(
dan
),
config
::
active_name
,
dans_active_auth
);
idump
((
dans_active_auth
));
test
.
produce_block
();
/// execute a transfer from dan to bart signed by trust
{
auto
from
=
N
(
dan
);
auto
to
=
N
(
bart
);
asset
amount
(
1
);
signed_transaction
trx
;
trx
.
write_scope
=
{
from
,
to
};
trx
.
actions
.
emplace_back
(
vector
<
permission_level
>
{{
from
,
config
::
active_name
}},
contracts
::
transfer
{
.
from
=
from
,
.
to
=
to
,
.
amount
=
amount
.
amount
,
.
memo
=
"memo"
}
);
test
.
set_tapos
(
trx
);
trx
.
sign
(
test
.
get_private_key
(
N
(
trust
),
"active"
),
chain_id_type
()
);
/// action not provided from authority
test
.
control
->
push_transaction
(
trx
);
}
}
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.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录