0f7b7099d8
Handle conflicts (#244) * Handle conflicts * Update go mod file versions * Make lint changes Disassociate block number from the indexer object Update ipld-eth-db ref Refactor builder code to make it reusable Use prefix comparison for account selective statediffing Update builder unit tests Add mode to write to CSV files in statediff file writer (#249) * Change file writing mode to csv files * Implement writer interface for file indexer * Implement option for csv or sql in file mode * Close files in CSV writer * Add tests for CSV file mode * Implement CSV file for watched addresses * Separate test configs for CSV and SQL * Refactor common code for file indexer tests Update indexer to include block hash in receipts and logs (#256) * Update indexer to include block hash in receipts and logs * Upgrade ipld-eth-db image in docker-compose to run tests Use watched addresses from direct indexing params by default while serving statediff APIs (#262) * Use watched addresses from direct indexing params in statediff APIs by default * Avoid using indexer object when direct indexing is off * Add nil check before accessing watched addresses from direct indexing params
141 lines
4.4 KiB
Go
141 lines
4.4 KiB
Go
package ipld
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"testing"
|
|
|
|
"github.com/ipfs/go-cid"
|
|
)
|
|
|
|
/*
|
|
INPUT
|
|
OUTPUT
|
|
*/
|
|
|
|
func TestStorageTrieNodeExtensionParsing(t *testing.T) {
|
|
fi, err := os.Open("test_data/eth-storage-trie-rlp-113049")
|
|
checkError(err, t)
|
|
|
|
output, err := FromStateTrieRLPFile(fi)
|
|
checkError(err, t)
|
|
|
|
if output.nodeKind != "extension" {
|
|
t.Fatalf("Wrong nodeKind\r\nexpected %s\r\ngot %s", "extension", output.nodeKind)
|
|
}
|
|
|
|
if len(output.elements) != 2 {
|
|
t.Fatalf("Wrong number of elements for an extension node\r\nexpected %d\r\ngot %d", 2, len(output.elements))
|
|
}
|
|
|
|
if fmt.Sprintf("%x", output.elements[0]) != "0a" {
|
|
t.Fatalf("Wrong key\r\nexpected %s\r\ngot %s", "0a", fmt.Sprintf("%x", output.elements[0]))
|
|
}
|
|
|
|
if output.elements[1].(cid.Cid).String() !=
|
|
"baglacgzautxeutufae7owyrezfvwpan2vusocmxgzwqhzrhjbwprp2texgsq" {
|
|
t.Fatalf("Wrong CID\r\nexpected %s\r\ngot %s", "baglacgzautxeutufae7owyrezfvwpan2vusocmxgzwqhzrhjbwprp2texgsq", output.elements[1].(cid.Cid).String())
|
|
}
|
|
}
|
|
|
|
func TestStateTrieNodeLeafParsing(t *testing.T) {
|
|
fi, err := os.Open("test_data/eth-storage-trie-rlp-ffbcad")
|
|
checkError(err, t)
|
|
|
|
output, err := FromStorageTrieRLPFile(fi)
|
|
checkError(err, t)
|
|
|
|
if output.nodeKind != "leaf" {
|
|
t.Fatalf("Wrong nodeKind\r\nexpected %s\r\ngot %s", "leaf", output.nodeKind)
|
|
}
|
|
|
|
if len(output.elements) != 2 {
|
|
t.Fatalf("Wrong number of elements for an leaf node\r\nexpected %d\r\ngot %d", 2, len(output.elements))
|
|
}
|
|
|
|
// 2ee1ae9c502e48e0ed528b7b39ac569cef69d7844b5606841a7f3fe898a2
|
|
if fmt.Sprintf("%x", output.elements[0].([]byte)[:10]) != "020e0e010a0e090c0500" {
|
|
t.Fatalf("Wrong key\r\nexpected %s\r\ngot %s", "020e0e010a0e090c0500", fmt.Sprintf("%x", output.elements[0].([]byte)[:10]))
|
|
}
|
|
|
|
if fmt.Sprintf("%x", output.elements[1]) != "89056c31f304b2530000" {
|
|
t.Fatalf("Wrong Value\r\nexpected %s\r\ngot %s", "89056c31f304b2530000", fmt.Sprintf("%x", output.elements[1]))
|
|
}
|
|
}
|
|
|
|
func TestStateTrieNodeBranchParsing(t *testing.T) {
|
|
fi, err := os.Open("test_data/eth-storage-trie-rlp-ffc25c")
|
|
checkError(err, t)
|
|
|
|
output, err := FromStateTrieRLPFile(fi)
|
|
checkError(err, t)
|
|
|
|
if output.nodeKind != "branch" {
|
|
t.Fatalf("Wrong nodeKind\r\nexpected %s\r\ngot %s", "branch", output.nodeKind)
|
|
}
|
|
|
|
if len(output.elements) != 17 {
|
|
t.Fatalf("Wrong number of elements for an branch node\r\nexpected %d\r\ngot %d", 17, len(output.elements))
|
|
}
|
|
|
|
if fmt.Sprintf("%s", output.elements[4]) !=
|
|
"baglacgzadqhbmlxrxtw5hplcq5jn74p4dceryzw664w3237ra52dnghbjpva" {
|
|
t.Fatalf("Wrong Cid\r\nexpected %s\r\ngot %s", "baglacgzadqhbmlxrxtw5hplcq5jn74p4dceryzw664w3237ra52dnghbjpva", fmt.Sprintf("%s", output.elements[4]))
|
|
}
|
|
|
|
if fmt.Sprintf("%s", output.elements[10]) !=
|
|
"baglacgza77d37i2v6uhtzeeq4vngragjbgbwq3lylpoc3lihenvzimybzxmq" {
|
|
t.Fatalf("Wrong Cid\r\nexpected %s\r\ngot %s", "baglacgza77d37i2v6uhtzeeq4vngragjbgbwq3lylpoc3lihenvzimybzxmq", fmt.Sprintf("%s", output.elements[10]))
|
|
}
|
|
}
|
|
|
|
/*
|
|
Block INTERFACE
|
|
*/
|
|
func TestStorageTrieBlockElements(t *testing.T) {
|
|
fi, err := os.Open("test_data/eth-storage-trie-rlp-ffbcad")
|
|
checkError(err, t)
|
|
|
|
output, err := FromStorageTrieRLPFile(fi)
|
|
checkError(err, t)
|
|
|
|
if fmt.Sprintf("%x", output.RawData())[:10] != "eb9f202ee1" {
|
|
t.Fatalf("Wrong Data\r\nexpected %s\r\ngot %s", "eb9f202ee1", fmt.Sprintf("%x", output.RawData())[:10])
|
|
}
|
|
|
|
if output.Cid().String() !=
|
|
"bagmacgza766k3oprj2qxn36eycw55pogmu3dwtfay6zdh6ajrhvw3b2nqg5a" {
|
|
t.Fatalf("Wrong Cid\r\nexpected %s\r\ngot %s", "bagmacgza766k3oprj2qxn36eycw55pogmu3dwtfay6zdh6ajrhvw3b2nqg5a", output.Cid().String())
|
|
}
|
|
}
|
|
|
|
func TestStorageTrieString(t *testing.T) {
|
|
fi, err := os.Open("test_data/eth-storage-trie-rlp-ffbcad")
|
|
checkError(err, t)
|
|
|
|
output, err := FromStorageTrieRLPFile(fi)
|
|
checkError(err, t)
|
|
|
|
if output.String() !=
|
|
"<EthereumStorageTrie bagmacgza766k3oprj2qxn36eycw55pogmu3dwtfay6zdh6ajrhvw3b2nqg5a>" {
|
|
t.Fatalf("Wrong String()\r\nexpected %s\r\ngot %s", "<EthereumStorageTrie bagmacgza766k3oprj2qxn36eycw55pogmu3dwtfay6zdh6ajrhvw3b2nqg5a>", output.String())
|
|
}
|
|
}
|
|
|
|
func TestStorageTrieLoggable(t *testing.T) {
|
|
fi, err := os.Open("test_data/eth-storage-trie-rlp-ffbcad")
|
|
checkError(err, t)
|
|
|
|
output, err := FromStorageTrieRLPFile(fi)
|
|
checkError(err, t)
|
|
|
|
l := output.Loggable()
|
|
if _, ok := l["type"]; !ok {
|
|
t.Fatal("Loggable map expected the field 'type'")
|
|
}
|
|
|
|
if l["type"] != "eth-storage-trie" {
|
|
t.Fatalf("Wrong Loggable 'type' value\r\nexpected %s\r\ngot %s", "eth-storage-trie", l["type"])
|
|
}
|
|
}
|