# オペレーターテストシナリオ
###### tags: `テスト設計`
## 初期の同期
通信に関するテストなので`docker-compose` でSRUのノードと疑似L1ETHを構築し、test tx 用のコードを実行する。シナリオテストのようなものを想定する。
リーダノードとして立ち上がっているものとそうでないものについてテストノードを立ち上げてそれぞれチェックする。
```javascript=
describe("Initialize", () => {
// Fetch latest datum.
// 1. 正常系について、取得した最新に近い root が L1 に commit されている root と一致する。
it("Fetch latest datum", () => {});
// 2. そうでない場合、別のノードを探索する。
it("search another nodes", () => {});
// 指定したノードと接続できる。
it("is able to connect a target node", () => {});
// 指定したノードからチェーンの同期ができる
it("is able to sync chain", () => {});
// 一度同期をやめても途中から再開できる
it("is able to resume downloading", () => {});
// stateを同期し終わってVerkle Treeを構成すると、L1にcommitされているrootと一致する。
it("is same root between downloaded state and L1 commited root", () => {});
// もし一致しなかった場合は、別のノードを探索してやり直す。
it("is able to reSync if root is not match", () => {});
});
```
## Verkle Tree
```javascript=
describe("Verkle Tree", () => {
it("VTに要素を追加できる", () => {});
it("VTから特定の要素をkeyで取得できる", ()=> {});
it("VTのkeyがないものに関して取得しようとしてもエラーが出ない", ()=> {});
it("VTの要素を削除できる", ()=> {});
it("VTの要素をアップデートできる", ()=> {});
it("VTで単一の要素のProofが生成できる", ()=> {});
it("VTで複数の要素のProofが生成できる", ()=> {});
it("偽のProofの場合検証に失敗する", ()=> {});
it("VTのProofでInclusion Proofできる", ()=> {});
it("100GBぐらいのVTを作って上記の各操作時間が0.1秒以上かからないことを確認する(毎回のテストコードに入れると遅そうなのでベンチマークとして用意したい)", ()=> {});
});
```
## DB
```javascript=
describe("DB", () => {
describe("tx", () => {
it("putできる", () => {});
it("updateできる", () => {});
it("存在してるkeyをdeleteできる", () => {});
it("存在してないkeyをdeleteできない", () => {});
it("存在してるkeyをgetできる", () => {});
it("listできる", () => {});
});
describe("block", () => {
it("putできる", () => {});
it("updateできる", () => {});
it("存在してるkeyをdeleteできる", () => {});
it("存在してないkeyをdeleteできない", () => {});
it("存在してるkeyをgetできる", () => {});
it("listできる", () => {});
});
});
```
## Tx
ユーザトランザクションのテストについては[ユーザトランザクションテスト](https://hackmd.io/FJbK9vsMRGy7L1sKQwvuFQ)参照
```javascript=
describe("Tx", () => {
// 1. トランザクションを繋がっている他のノードに送る。
it("受け取ったトランザクションが正しいか検証する", () => {});
it("broadcast tx to another node", () => {});
});
```
## Block
```javascript=
describe("Block", () => {
it("受け取ったブロックが正しいことを検証する", () => {});
it("検証後に保存する", () => {});
it("保存されたブロックが取得できる", () => {});
it("正しくなければ、他のノードに問い合わせてブロックをもらう", () => {});
it("ブロックを生成したら、他のノードに対してブロードキャストする", () => {});
});
```
## ここに書かないもの
- pre commit
- main commit
- sendTx
- LN fee payment
- stateUpdate