# オペレーターノードのLNに関するテスト設計
###### tags: `テスト設計`
## Proof of Payment
```javascript=
describe("Proof of Payment", () => {
// 発行ノードの公開鍵、Invoice、Preimageを受け取ることで、確かにこのユーザーはln払いを成功したと検証できる
it("should verify proof of payment with OK: pubkey, OK: Invoice, OK: Preimage", () => {});
// 発行ノードの公開鍵だと、Proof of paymentの検証に失敗する
it("should not verify proof of payment with NG: pubkey, OK: Invoice, OK: Preimage", () => {});
// 不正なInvoiceだと、Proof of paymentの検証に失敗する
it("should not verify proof of payment with OK: pubkey, NG: Invoice, OK: Preimage", () => {});
// 不正なPreimageだと、Proof of paymentの検証に失敗する
it("should not verify proof of payment with OK: pubkey, OK: Invoice, NG: Preimage", () => {});
});
```
## リーダー選出と公開鍵の登録
```javascript=
// リーダー選出時に公開鍵を登録する
describe("Initialize Leader", () => {
// 公開鍵を生成してL1に登録する
it("Generate and Register Public key", () => {});
});
```
## ユーザーからのTxの受け取りとInvoice・OPSIGの作成
```javascript=
// LNノードがP2PでTXデータを受け取る (HTTP等、他の通信経路でもほぼ同様)
describe("Receive TX request", () => {
// TXリクエストを検証
it("Validate TX request")
// TX feeを計算
it("Calculate TX fee")
// 算出したFeeをもとにInvoiceを作成する
describe("Create Invoice", () => {
// AmountはTxDataから算出されたfeeと同額である必要がある
it("Check amount", () => {});
// 有効期限はLeaderが交代するより十分前である必要がある
it("Check expiry", () => {});
// 正しくPreimageを保存する
it("Create and save preimage", () => {});
});
// InvoiceおよびOneTimeAddressをもとにOPSIGを作成
describe("Create OPSIG", () => {
// 署名するメッセージが正しく生成されているか
it("Create message", () => {});
// 事前に登録した公開鍵で複合できるか確かめる
it("OPSIG can be verified by Operator's pubkey", () => {})
});
// LNノードにP2Pで、あるいは別の通信経路でreceipt, invoice, OPSIGを返す
it("Send receipt, invoice, OPSIG")
});
```
```javascript=
// Paymentの受け取りの検知とTxの実行を行う
describe("Receive LN Payment", () => {
// LN払いのFeeを正しく受け取って実行する
it("Receive LN fee and execute", () => {});
});
```
## sendCustomMessage
```javascript=
describe("sendCustomMessage", () => {
describe("ブロックのブロードキャストができる", () => {
// ProtoBufでエンコードして、ブロックを送れる
it("should send block which encoded by protobuf", ()=>{});
// ProtoBufでエンコードして、txを送れる
it("should send tx which encoded by protobuf", ()=>{});
});
});
```
## SubscribeCustomMessage
- ブロックを受け取って処理することができる
- txを受け取って処理することができる
```javascript=
describe("SubscribeCustomMessage", () => {
describe("ブロックのブロードキャストを受け取ることができる", () => {
// ProtoBufでデコードして、ブロックを受け取り、検証が成功する
it("should verify valid block which decoded by protobuf", ()=>{});
// ProtoBufでデコードして、不正なブロックを受けとった場合、検証が失敗する
it("should not verify invalid block which decoded by protobuf", ()=>{});
// ProtoBufでデコードして、txを受け取り、検証が成功する
it("should verify valid tx which decoded by protobuf", ()=>{});
// ProtoBufでデコードして、不正なtxを受け取り、検証が失敗する
it("should not verify valid tx which decoded by protobuf", ()=>{});
});
});
```