Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
YottaChain
YTBP
提交
3774d077
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,发现更多精彩内容 >>
提交
3774d077
编写于
4月 29, 2018
作者:
A
arhag
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix iostream error on exit
上级
e382dfd8
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
49 addition
and
41 deletion
+49
-41
libraries/testing/include/eosio/testing/tester.hpp
libraries/testing/include/eosio/testing/tester.hpp
+49
-41
未找到文件。
libraries/testing/include/eosio/testing/tester.hpp
浏览文件 @
3774d077
...
...
@@ -155,10 +155,6 @@ namespace eosio { namespace testing {
void
set_code
(
account_name
name
,
const
vector
<
uint8_t
>
wasm
);
void
set_abi
(
account_name
name
,
const
char
*
abi_json
);
unique_ptr
<
controller
>
control
;
std
::
map
<
chain
::
public_key_type
,
chain
::
private_key_type
>
block_signing_private_keys
;
bool
chain_has_transaction
(
const
transaction_id_type
&
txid
)
const
;
const
transaction_receipt
&
get_transaction_receipt
(
const
transaction_id_type
&
txid
)
const
;
...
...
@@ -166,59 +162,71 @@ namespace eosio { namespace testing {
const
symbol
&
asset_symbol
,
const
account_name
&
account
)
const
;
vector
<
char
>
get_row_by_account
(
uint64_t
code
,
uint64_t
scope
,
uint64_t
table
,
const
account_name
&
act
);
vector
<
char
>
get_row_by_account
(
uint64_t
code
,
uint64_t
scope
,
uint64_t
table
,
const
account_name
&
act
);
static
vector
<
uint8_t
>
to_uint8_vector
(
const
string
&
s
);
static
vector
<
uint8_t
>
to_uint8_vector
(
const
string
&
s
);
static
vector
<
uint8_t
>
to_uint8_vector
(
uint64_t
x
);
static
vector
<
uint8_t
>
to_uint8_vector
(
uint64_t
x
);
static
uint64_t
to_uint64
(
fc
::
variant
x
);
static
uint64_t
to_uint64
(
fc
::
variant
x
);
static
string
to_string
(
fc
::
variant
x
);
static
string
to_string
(
fc
::
variant
x
);
static
action_result
success
()
{
return
string
();
}
static
action_result
success
()
{
return
string
();
}
static
action_result
error
(
const
string
&
msg
)
{
return
msg
;
}
static
action_result
error
(
const
string
&
msg
)
{
return
msg
;
}
auto
get_resolver
()
{
return
[
this
](
const
account_name
&
name
)
->
optional
<
abi_serializer
>
{
try
{
const
auto
&
accnt
=
control
->
db
().
get
<
account_object
,
by_name
>
(
name
);
abi_def
abi
;
if
(
abi_serializer
::
to_abi
(
accnt
.
abi
,
abi
))
{
return
abi_serializer
(
abi
);
}
return
optional
<
abi_serializer
>
();
}
FC_RETHROW_EXCEPTIONS
(
error
,
"Failed to find or parse ABI for ${name}"
,
(
"name"
,
name
))
};
}
auto
get_resolver
()
{
return
[
this
](
const
account_name
&
name
)
->
optional
<
abi_serializer
>
{
try
{
const
auto
&
accnt
=
control
->
db
().
get
<
account_object
,
by_name
>
(
name
);
abi_def
abi
;
if
(
abi_serializer
::
to_abi
(
accnt
.
abi
,
abi
))
{
return
abi_serializer
(
abi
);
}
return
optional
<
abi_serializer
>
();
}
FC_RETHROW_EXCEPTIONS
(
error
,
"Failed to find or parse ABI for ${name}"
,
(
"name"
,
name
))
};
}
void
sync_with
(
base_tester
&
other
);
void
sync_with
(
base_tester
&
other
);
const
table_id_object
*
find_table
(
name
code
,
name
scope
,
name
table
);
const
table_id_object
*
find_table
(
name
code
,
name
scope
,
name
table
);
// method treats key as a name type, if this is not appropriate in your case, pass require == false and report the correct behavior
template
<
typename
Object
>
bool
get_table_entry
(
Object
&
obj
,
account_name
code
,
account_name
scope
,
account_name
table
,
uint64_t
key
,
bool
require
=
true
)
{
auto
*
maybe_tid
=
find_table
(
code
,
scope
,
table
);
if
(
maybe_tid
==
nullptr
)
BOOST_FAIL
(
"table for code=
\"
"
+
code
.
to_string
()
+
"
\"
scope=
\"
"
+
scope
.
to_string
()
+
"
\"
table=
\"
"
+
table
.
to_string
()
+
"
\"
does not exist"
);
// method treats key as a name type, if this is not appropriate in your case, pass require == false and report the correct behavior
template
<
typename
Object
>
bool
get_table_entry
(
Object
&
obj
,
account_name
code
,
account_name
scope
,
account_name
table
,
uint64_t
key
,
bool
require
=
true
)
{
auto
*
maybe_tid
=
find_table
(
code
,
scope
,
table
);
if
(
maybe_tid
==
nullptr
)
{
BOOST_FAIL
(
"table for code=
\"
"
+
code
.
to_string
()
+
"
\"
scope=
\"
"
+
scope
.
to_string
()
+
"
\"
table=
\"
"
+
table
.
to_string
()
+
"
\"
does not exist"
);
}
auto
*
o
=
control
->
db
().
find
<
key_value_object
,
by_scope_primary
>
(
boost
::
make_tuple
(
maybe_tid
->
id
,
key
));
if
(
o
==
nullptr
)
{
if
(
require
)
BOOST_FAIL
(
"object does not exist for primary_key=
\"
"
+
name
(
key
).
to_string
()
+
"
\"
"
);
auto
*
o
=
control
->
db
().
find
<
key_value_object
,
by_scope_primary
>
(
boost
::
make_tuple
(
maybe_tid
->
id
,
key
));
if
(
o
==
nullptr
)
{
if
(
require
)
BOOST_FAIL
(
"object does not exist for primary_key=
\"
"
+
name
(
key
).
to_string
()
+
"
\"
"
);
return
false
;
}
return
false
;
}
fc
::
raw
::
unpack
(
o
->
value
.
data
(),
o
->
value
.
size
(),
obj
);
return
true
;
}
fc
::
raw
::
unpack
(
o
->
value
.
data
(),
o
->
value
.
size
(),
obj
);
return
true
;
}
protected:
protected:
signed_block_ptr
_produce_block
(
fc
::
microseconds
skip_time
,
bool
skip_pending_trxs
=
false
,
uint32_t
skip_flag
=
0
);
// Fields:
protected:
// tempdir field must come before control so that during destruction the tempdir is deleted only after controller finishes
fc
::
temp_directory
tempdir
;
public:
unique_ptr
<
controller
>
control
;
std
::
map
<
chain
::
public_key_type
,
chain
::
private_key_type
>
block_signing_private_keys
;
protected:
controller
::
config
cfg
;
map
<
transaction_id_type
,
transaction_receipt
>
chain_transactions
;
};
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录