From 40ca6ae267074abe5bf4fdf4a9009aa8aae75ec2 Mon Sep 17 00:00:00 2001 From: me020523 Date: Tue, 3 Sep 2019 21:48:38 +0800 Subject: [PATCH] add node.go unit test file node_test.go --- trie/node_test.go | 78 +++++++++++++++++++++++++++++++++++++++++++++++ trie/trie_test.go | 13 -------- 2 files changed, 78 insertions(+), 13 deletions(-) create mode 100644 trie/node_test.go diff --git a/trie/node_test.go b/trie/node_test.go new file mode 100644 index 0000000000..9fddec22c0 --- /dev/null +++ b/trie/node_test.go @@ -0,0 +1,78 @@ +package trie + +import ( + "bytes" + "testing" + + "github.com/ethereum/go-ethereum/rlp" +) + +func newFullNode(v []byte) []interface{} { + fullNodeData := []interface{}{} + for i := 0; i < 16; i++ { + k := bytes.Repeat([]byte{byte(i + 1)}, 32) + fullNodeData = append(fullNodeData, k) + } + fullNodeData = append(fullNodeData, []byte("value1")) + return fullNodeData +} + +func TestDecodeNestedNode(t *testing.T) { + fullNodeData := newFullNode([]byte("fullnode")) + + data := [][]byte{} + for i := 0; i < 16; i++ { + data = append(data, nil) + } + data = append(data, []byte("subnode")) + fullNodeData[15] = data + + buf := bytes.NewBuffer([]byte{}) + rlp.Encode(buf, fullNodeData) + + if _, err := decodeNode([]byte("testdecode"), buf.Bytes()); err != nil { + t.Fatalf("decode nested full node err: %v", err) + } +} + +func TestDecodeFullNodeWrongSizeChild(t *testing.T) { + fullNodeData := newFullNode([]byte("wrongsizechild")) + fullNodeData[0] = []byte("00") + buf := bytes.NewBuffer([]byte{}) + rlp.Encode(buf, fullNodeData) + + _, err := decodeNode([]byte("testdecode"), buf.Bytes()) + if _, ok := err.(*decodeError); !ok { + t.Fatalf("decodeNode returned wrong err: %v", err) + } +} + +func TestDecodeFullNodeWrongNestedFullNode(t *testing.T) { + fullNodeData := newFullNode([]byte("fullnode")) + + data := [][]byte{} + for i := 0; i < 16; i++ { + data = append(data, []byte("123456")) + } + data = append(data, []byte("subnode")) + fullNodeData[15] = data + + buf := bytes.NewBuffer([]byte{}) + rlp.Encode(buf, fullNodeData) + + _, err := decodeNode([]byte("testdecode"), buf.Bytes()) + if _, ok := err.(*decodeError); !ok { + t.Fatalf("decodeNode returned wrong err: %v", err) + } +} + +func TestDecodeNode(t *testing.T) { + fullNodeData := newFullNode([]byte("decodefullnode")) + buf := bytes.NewBuffer([]byte{}) + rlp.Encode(buf, fullNodeData) + + _, err := decodeNode([]byte("testdecode"), buf.Bytes()) + if err != nil { + t.Fatalf("decode full node err: %v", err) + } +} diff --git a/trie/trie_test.go b/trie/trie_test.go index 2a9d53d0ad..c0bbc81d59 100644 --- a/trie/trie_test.go +++ b/trie/trie_test.go @@ -546,16 +546,3 @@ func updateString(trie *Trie, k, v string) { func deleteString(trie *Trie, k string) { trie.Delete([]byte(k)) } - -func TestDecodeNode(t *testing.T) { - t.Parallel() - var ( - hash = make([]byte, 20) - elems = make([]byte, 20) - ) - for i := 0; i < 5000000; i++ { - rand.Read(hash) - rand.Read(elems) - decodeNode(hash, elems) - } -}