Conversation
| let balance: state_runtime_node_api::state::get::Response = test::read_body_json(resp).await; | ||
| assert_eq!(balance.state, 90); | ||
|
|
||
| assert!(logs_contain("ERROR")); |
There was a problem hiding this comment.
ここは、ログに ERROR が含まれている場合、パニックしてほしい意図です??
There was a problem hiding this comment.
あれ、たしかに...取れていない...?
There was a problem hiding this comment.
すいません..意図が逆でした :bow_tateburu:
ここでは残高を上回るようなinvalidなtxを実行しているので「 ERROR が含まれている」ことをチェックしたい意図です。
なので 「 ERROR が含まれて いない 」場合にpanicさせたく、もともとのやつが合ってそうです
There was a problem hiding this comment.
fmfm、なるほどです。 その場合、特定の状態遷移で ERROR が含まれていることを検証したいが、途中でpanicさせてしまうと後続のtest処理が実行されなくなってしまうので、ERROR 数をカウントして、最後にカウント数バリデーションするみたいな感じがよさそうですかね。
There was a problem hiding this comment.
最終的にはそのほうがよさそうですね
そのためには、このissue潰さないといけないですが...
There was a problem hiding this comment.
そうですね! そうすると、task順的には、本PR(コノママデ)-> #570 -> ERRORカウントテストに変更 -> 他testにtracing_test導入 になりますかね〜
| use tracing_subscriber::fmt::MakeWriter; | ||
|
|
||
| lazy_static! { | ||
| pub static ref GLOBAL_TRACING_BUF: Mutex<Vec<u8>> = Mutex::new(vec![]); |
There was a problem hiding this comment.
GLOBAL_TRACING_BUF の中身を空にする関数も用意しておいて、 ERRORログを意図する状態遷移がくるタイミングで同期までsleepして、 logs_contain() で検証 -> GLOBAL_TRACING_BUFをemptyに -> テストの続きを実行。待ってもERROR来なかったらパニック。のような処理を追加できると良さげですかね〜
There was a problem hiding this comment.
ERRORしか検証しないのであれば、error_log_contain() で良いのかも。
There was a problem hiding this comment.
空にするやつどこかで実装しようと思ってたので、シュッとこのPRで追加しますね
(tracingのscopeやtargetをいい感じにするのとどっちがいいか悩んでたんですが、テスト用のutilなので空にしてしまうでよさそう)
ERRORしか検証しないのであれば
今はERRORで拾っているんですが、次PRで具体的なエラー文言で引っ掛ける予定なので、このままでおなしゃす
There was a problem hiding this comment.
追加したので、ご確認おなしゃす。
log_contains の位置も110送った直後に変更しました。
| assert!(resp.status().is_success(), "response: {:?}", resp); | ||
| let balance: state_runtime_node_api::state::get::Response = test::read_body_json(resp).await; | ||
| assert_eq!(balance.state, 100); | ||
| assert!(logs_contain("ERROR")); |
There was a problem hiding this comment.
一見ややこしいので、 helper関数にassert!まで委譲してしまって、 panic_if_logs_contain(), panic_if_logs_not_contain() にしても良さそうですね(後々
次PR
logs_containを追加)