Write state diff to CSV #2

Merged
elizabethengelman merged 47 commits from ee-state-diff into statediff-for-archive-node 2019-01-28 21:31:02 +00:00
10 changed files with 125 additions and 122 deletions
Showing only changes of commit 0a6dbb8a27 - Show all commits

View File

@ -2,7 +2,6 @@ package extractor_test
import ( import (
"testing" "testing"
"github.com/ethereum/go-ethereum/statediff/testhelpers"
"math/big" "math/big"
"math/rand" "math/rand"
b "github.com/ethereum/go-ethereum/statediff/builder" b "github.com/ethereum/go-ethereum/statediff/builder"
@ -10,10 +9,11 @@ import (
"github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/types"
"bytes" "bytes"
"reflect" "reflect"
"github.com/ethereum/go-ethereum/statediff/testhelpers/mocks"
) )
var publisher testhelpers.MockPublisher var publisher mocks.Publisher
var builder testhelpers.MockBuilder var builder mocks.Builder
var currentBlockNumber *big.Int var currentBlockNumber *big.Int
var parentBlock, currentBlock *types.Block var parentBlock, currentBlock *types.Block
var expectedStateDiff b.StateDiff var expectedStateDiff b.StateDiff
@ -21,8 +21,8 @@ var extractor e.Extractor
var err error var err error
func TestExtractor(t *testing.T) { func TestExtractor(t *testing.T) {
publisher = testhelpers.MockPublisher{} publisher = mocks.Publisher{}
builder = testhelpers.MockBuilder{} builder = mocks.Builder{}
extractor, err = e.NewExtractor(&builder, &publisher) extractor, err = e.NewExtractor(&builder, &publisher)
if err != nil { if err != nil {
t.Error(err) t.Error(err)
@ -63,14 +63,14 @@ func testBuildStateDiffStruct(t *testing.T) {
} }
func testBuildStateDiffErrorHandling(t *testing.T) { func testBuildStateDiffErrorHandling(t *testing.T) {
builder.SetBuilderError(testhelpers.MockError) builder.SetBuilderError(mocks.Error)
_, err = extractor.ExtractStateDiff(*parentBlock, *currentBlock) _, err = extractor.ExtractStateDiff(*parentBlock, *currentBlock)
if err == nil { if err == nil {
t.Error(err) t.Error(err)
} }
if !equals(err, testhelpers.MockError) { t.Error() } if !equals(err, mocks.Error) { t.Error() }
builder.SetBuilderError(nil) builder.SetBuilderError(nil)
} }
@ -86,13 +86,13 @@ func testPublishingStateDiff(t *testing.T) {
} }
func testPublisherErrorHandling(t *testing.T) { func testPublisherErrorHandling(t *testing.T) {
publisher.SetPublisherError(testhelpers.MockError) publisher.SetPublisherError(mocks.Error)
_, err = extractor.ExtractStateDiff(*parentBlock, *currentBlock) _, err = extractor.ExtractStateDiff(*parentBlock, *currentBlock)
if err == nil { if err == nil {
t.Error("Expected an error, but it didn't occur.") t.Error("Expected an error, but it didn't occur.")
} }
if !equals(err, testhelpers.MockError) { t.Error() } if !equals(err, mocks.Error) { t.Error() }
publisher.SetPublisherError(nil) publisher.SetPublisherError(nil)
} }

View File

@ -76,7 +76,8 @@ func TestPublisher(t *testing.T) {
type Test func(t *testing.T) type Test func(t *testing.T)
var tests = []Test{testColumnHeaders, var tests = []Test{
testColumnHeaders,
testAccountDiffs, testAccountDiffs,
testWhenNoDiff, testWhenNoDiff,
testDefaultPublisher, testDefaultPublisher,

View File

@ -7,54 +7,10 @@ import (
service2 "github.com/ethereum/go-ethereum/statediff/service" service2 "github.com/ethereum/go-ethereum/statediff/service"
"reflect" "reflect"
"github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/event"
"math/big" "math/big"
"math/rand" "math/rand"
"github.com/ethereum/go-ethereum/statediff/testhelpers/mocks"
) )
type MockExtractor struct {
ParentBlocks []types.Block
CurrentBlocks []types.Block
extractError error
}
func (me *MockExtractor) ExtractStateDiff(parent, current types.Block) (string, error) {
me.ParentBlocks = append(me.ParentBlocks, parent)
me.CurrentBlocks = append(me.CurrentBlocks, current)
return "", me.extractError
}
func (me *MockExtractor) SetExtractError(err error) {
me.extractError = err
}
type MockChain struct {
ParentHashesLookedUp []common.Hash
parentBlocksToReturn []*types.Block
callCount int
}
func (mc *MockChain) SetParentBlockToReturn(blocks []*types.Block) {
mc.parentBlocksToReturn = blocks
}
func (mc *MockChain) GetBlockByHash(hash common.Hash) *types.Block {
mc.ParentHashesLookedUp = append(mc.ParentHashesLookedUp, hash)
var parentBlock types.Block
if len(mc.parentBlocksToReturn) > 0 {
parentBlock = *mc.parentBlocksToReturn[mc.callCount]
}
mc.callCount++
return &parentBlock
}
func (MockChain) SubscribeChainEvent(ch chan<- core.ChainEvent) event.Subscription {
panic("implement me")
}
func TestServiceLoop(t *testing.T) { func TestServiceLoop(t *testing.T) {
testServiceLoop(t) testServiceLoop(t)
} }
@ -85,10 +41,10 @@ func testServiceLoop(t *testing.T) {
eventsChannel <- event1 eventsChannel <- event1
eventsChannel <- event2 eventsChannel <- event2
extractor := MockExtractor{} extractor := mocks.Extractor{}
close(eventsChannel) close(eventsChannel)
blockChain := MockChain{} blockChain := mocks.BlockChain{}
service := service2.StateDiffService{ service := service2.StateDiffService{
Builder: nil, Builder: nil,
Extractor: &extractor, Extractor: &extractor,

View File

@ -1,16 +0,0 @@
package statediff_test
import (
"testing"
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
)
func TestStatediff(t *testing.T) {
RegisterFailHandler(Fail)
RunSpecs(t, "Statediff Suite")
}
//convert this over to use built in golang library
//only save the new value, and have a pointer to the old value - not sure how this pointer will work for the CSV version

View File

@ -1,49 +0,0 @@
package testhelpers
import (
"errors"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/statediff/builder"
)
var MockError = errors.New("mock error")
type MockBuilder struct {
OldStateRoot common.Hash
NewStateRoot common.Hash
BlockNumber int64
BlockHash common.Hash
stateDiff *builder.StateDiff
builderError error
}
func (builder *MockBuilder) BuildStateDiff(oldStateRoot, newStateRoot common.Hash, blockNumber int64, blockHash common.Hash) (*builder.StateDiff, error) {
builder.OldStateRoot = oldStateRoot
builder.NewStateRoot = newStateRoot
builder.BlockNumber = blockNumber
builder.BlockHash = blockHash
return builder.stateDiff, builder.builderError
}
func (builder *MockBuilder) SetStateDiffToBuild(stateDiff *builder.StateDiff) {
builder.stateDiff = stateDiff
}
func (builder *MockBuilder) SetBuilderError(err error) {
builder.builderError = err
}
type MockPublisher struct {
StateDiff *builder.StateDiff
publisherError error
}
func (publisher *MockPublisher) PublishStateDiff(sd *builder.StateDiff) (string, error) {
publisher.StateDiff = sd
return "", publisher.publisherError
}
func (publisher *MockPublisher) SetPublisherError(err error) {
publisher.publisherError = err
}

View File

@ -0,0 +1,35 @@
package mocks
import (
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/core"
"github.com/ethereum/go-ethereum/event"
)
type BlockChain struct {
ParentHashesLookedUp []common.Hash
parentBlocksToReturn []*types.Block
callCount int
}
func (mc *BlockChain) SetParentBlockToReturn(blocks []*types.Block) {
mc.parentBlocksToReturn = blocks
}
func (mc *BlockChain) GetBlockByHash(hash common.Hash) *types.Block {
mc.ParentHashesLookedUp = append(mc.ParentHashesLookedUp, hash)
var parentBlock types.Block
if len(mc.parentBlocksToReturn) > 0 {
parentBlock = *mc.parentBlocksToReturn[mc.callCount]
}
mc.callCount++
return &parentBlock
}
func (BlockChain) SubscribeChainEvent(ch chan<- core.ChainEvent) event.Subscription {
panic("implement me")
}

View File

@ -0,0 +1,33 @@
package mocks
import (
"github.com/ethereum/go-ethereum/statediff/builder"
"github.com/ethereum/go-ethereum/common"
)
type Builder struct {
OldStateRoot common.Hash
NewStateRoot common.Hash
BlockNumber int64
BlockHash common.Hash
stateDiff *builder.StateDiff
builderError error
}
func (builder *Builder) BuildStateDiff(oldStateRoot, newStateRoot common.Hash, blockNumber int64, blockHash common.Hash) (*builder.StateDiff, error) {
builder.OldStateRoot = oldStateRoot
builder.NewStateRoot = newStateRoot
builder.BlockNumber = blockNumber
builder.BlockHash = blockHash
return builder.stateDiff, builder.builderError
}
func (builder *Builder) SetStateDiffToBuild(stateDiff *builder.StateDiff) {
builder.stateDiff = stateDiff
}
func (builder *Builder) SetBuilderError(err error) {
builder.builderError = err
}

View File

@ -0,0 +1,5 @@
package mocks
import "errors"
var Error = errors.New("mock error")

View File

@ -0,0 +1,21 @@
package mocks
import "github.com/ethereum/go-ethereum/core/types"
type Extractor struct {
ParentBlocks []types.Block
CurrentBlocks []types.Block
extractError error
}
func (me *Extractor) ExtractStateDiff(parent, current types.Block) (string, error) {
me.ParentBlocks = append(me.ParentBlocks, parent)
me.CurrentBlocks = append(me.CurrentBlocks, current)
return "", me.extractError
}
func (me *Extractor) SetExtractError(err error) {
me.extractError = err
}

View File

@ -0,0 +1,17 @@
package mocks
import "github.com/ethereum/go-ethereum/statediff/builder"
type Publisher struct {
StateDiff *builder.StateDiff
publisherError error
}
func (publisher *Publisher) PublishStateDiff(sd *builder.StateDiff) (string, error) {
publisher.StateDiff = sd
return "", publisher.publisherError
}
func (publisher *Publisher) SetPublisherError(err error) {
publisher.publisherError = err
}