forked from cerc-io/ipld-eth-server
2d684c5aec
- Replaces directly reading from a CSV - Simplifies testing - Should hopefully make it easier to plug in other sources for storage diffs (e.g. differently formatted CSVs, JSON RPC, etc)
82 lines
2.2 KiB
Go
82 lines
2.2 KiB
Go
package fetcher_test
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
"time"
|
|
|
|
"github.com/ethereum/go-ethereum/common"
|
|
"github.com/hpcloud/tail"
|
|
. "github.com/onsi/ginkgo"
|
|
. "github.com/onsi/gomega"
|
|
|
|
"github.com/vulcanize/vulcanizedb/libraries/shared/fetcher"
|
|
"github.com/vulcanize/vulcanizedb/libraries/shared/storage/utils"
|
|
"github.com/vulcanize/vulcanizedb/pkg/fakes"
|
|
)
|
|
|
|
var _ = Describe("Csv Tail Storage Fetcher", func() {
|
|
var (
|
|
errorsChannel chan error
|
|
mockTailer *fakes.MockTailer
|
|
rowsChannel chan utils.StorageDiffRow
|
|
storageFetcher fetcher.CsvTailStorageFetcher
|
|
)
|
|
|
|
BeforeEach(func() {
|
|
errorsChannel = make(chan error)
|
|
rowsChannel = make(chan utils.StorageDiffRow)
|
|
mockTailer = fakes.NewMockTailer()
|
|
storageFetcher = fetcher.NewCsvTailStorageFetcher(mockTailer)
|
|
})
|
|
|
|
It("adds error to errors channel if tailing file fails", func() {
|
|
mockTailer.TailErr = fakes.FakeError
|
|
|
|
go storageFetcher.FetchStorageDiffs(rowsChannel, errorsChannel)
|
|
|
|
close(mockTailer.Lines)
|
|
returnedErr := <-errorsChannel
|
|
Expect(returnedErr).To(HaveOccurred())
|
|
Expect(returnedErr).To(MatchError(fakes.FakeError))
|
|
})
|
|
|
|
It("adds parsed csv row to rows channel for storage diff", func() {
|
|
line := getFakeLine()
|
|
|
|
go storageFetcher.FetchStorageDiffs(rowsChannel, errorsChannel)
|
|
mockTailer.Lines <- line
|
|
|
|
close(mockTailer.Lines)
|
|
returnedRow := <-rowsChannel
|
|
expectedRow, err := utils.FromStrings(strings.Split(line.Text, ","))
|
|
Expect(err).NotTo(HaveOccurred())
|
|
Expect(expectedRow).To(Equal(returnedRow))
|
|
})
|
|
|
|
It("adds error to errors channel if parsing csv fails", func() {
|
|
line := &tail.Line{Text: "invalid"}
|
|
|
|
go storageFetcher.FetchStorageDiffs(rowsChannel, errorsChannel)
|
|
mockTailer.Lines <- line
|
|
|
|
close(mockTailer.Lines)
|
|
returnedErr := <-errorsChannel
|
|
Expect(returnedErr).To(HaveOccurred())
|
|
})
|
|
})
|
|
|
|
func getFakeLine() *tail.Line {
|
|
address := common.HexToAddress("0x1234567890abcdef")
|
|
blockHash := []byte{4, 5, 6}
|
|
blockHeight := int64(789)
|
|
storageKey := []byte{9, 8, 7}
|
|
storageValue := []byte{6, 5, 4}
|
|
return &tail.Line{
|
|
Text: fmt.Sprintf("%s,%s,%d,%s,%s", common.Bytes2Hex(address.Bytes()), common.Bytes2Hex(blockHash),
|
|
blockHeight, common.Bytes2Hex(storageKey), common.Bytes2Hex(storageValue)),
|
|
Time: time.Time{},
|
|
Err: nil,
|
|
}
|
|
}
|