Decouple log extraction from transformer delegation
- limit missing headers results set to 100 so that extraction doesn't excessively block delegation - wrap checked headers functions in repository struct - move storage repository to factory, to correspond with event repository path - remove unused files - reformat sql - remove line breaks in imports
This commit is contained in:
@@ -23,76 +23,68 @@ import (
|
||||
"github.com/vulcanize/vulcanizedb/pkg/datastore/postgres"
|
||||
)
|
||||
|
||||
type MockRepository struct {
|
||||
type MockEventRepository struct {
|
||||
createError error
|
||||
markHeaderCheckedError error
|
||||
MarkHeaderCheckedPassedHeaderIDs []int64
|
||||
CreatedHeaderIds []int64
|
||||
missingHeaders []core.Header
|
||||
allHeaders []core.Header
|
||||
missingHeadersError error
|
||||
PassedStartingBlockNumber int64
|
||||
PassedEndingBlockNumber int64
|
||||
PassedHeaderID int64
|
||||
PassedModels []interface{}
|
||||
SetDbCalled bool
|
||||
CreateCalledCounter int
|
||||
}
|
||||
|
||||
func (repository *MockRepository) Create(headerID int64, models []interface{}) error {
|
||||
repository.PassedHeaderID = headerID
|
||||
func (repository *MockEventRepository) Create(models []interface{}) error {
|
||||
repository.PassedModels = models
|
||||
repository.CreatedHeaderIds = append(repository.CreatedHeaderIds, headerID)
|
||||
repository.CreateCalledCounter++
|
||||
|
||||
return repository.createError
|
||||
}
|
||||
|
||||
func (repository *MockRepository) MarkHeaderChecked(headerID int64) error {
|
||||
func (repository *MockEventRepository) MarkHeaderChecked(headerID int64) error {
|
||||
repository.MarkHeaderCheckedPassedHeaderIDs = append(repository.MarkHeaderCheckedPassedHeaderIDs, headerID)
|
||||
return repository.markHeaderCheckedError
|
||||
}
|
||||
|
||||
func (repository *MockRepository) MissingHeaders(startingBlockNumber, endingBlockNumber int64) ([]core.Header, error) {
|
||||
func (repository *MockEventRepository) MissingHeaders(startingBlockNumber, endingBlockNumber int64) ([]core.Header, error) {
|
||||
repository.PassedStartingBlockNumber = startingBlockNumber
|
||||
repository.PassedEndingBlockNumber = endingBlockNumber
|
||||
return repository.missingHeaders, repository.missingHeadersError
|
||||
}
|
||||
|
||||
func (repository *MockRepository) RecheckHeaders(startingBlockNumber, endingBlockNumber int64) ([]core.Header, error) {
|
||||
func (repository *MockEventRepository) RecheckHeaders(startingBlockNumber, endingBlockNumber int64) ([]core.Header, error) {
|
||||
repository.PassedStartingBlockNumber = startingBlockNumber
|
||||
repository.PassedEndingBlockNumber = endingBlockNumber
|
||||
return repository.allHeaders, nil
|
||||
}
|
||||
|
||||
func (repository *MockRepository) SetDB(db *postgres.DB) {
|
||||
func (repository *MockEventRepository) SetDB(db *postgres.DB) {
|
||||
repository.SetDbCalled = true
|
||||
}
|
||||
|
||||
func (repository *MockRepository) SetMissingHeadersError(e error) {
|
||||
func (repository *MockEventRepository) SetMissingHeadersError(e error) {
|
||||
repository.missingHeadersError = e
|
||||
}
|
||||
|
||||
func (repository *MockRepository) SetAllHeaders(headers []core.Header) {
|
||||
func (repository *MockEventRepository) SetAllHeaders(headers []core.Header) {
|
||||
repository.allHeaders = headers
|
||||
}
|
||||
|
||||
func (repository *MockRepository) SetMissingHeaders(headers []core.Header) {
|
||||
func (repository *MockEventRepository) SetMissingHeaders(headers []core.Header) {
|
||||
repository.missingHeaders = headers
|
||||
}
|
||||
|
||||
func (repository *MockRepository) SetMarkHeaderCheckedError(e error) {
|
||||
func (repository *MockEventRepository) SetMarkHeaderCheckedError(e error) {
|
||||
repository.markHeaderCheckedError = e
|
||||
}
|
||||
|
||||
func (repository *MockRepository) SetCreateError(e error) {
|
||||
func (repository *MockEventRepository) SetCreateError(e error) {
|
||||
repository.createError = e
|
||||
}
|
||||
|
||||
func (repository *MockRepository) AssertMarkHeaderCheckedCalledWith(i int64) {
|
||||
func (repository *MockEventRepository) AssertMarkHeaderCheckedCalledWith(i int64) {
|
||||
Expect(repository.MarkHeaderCheckedPassedHeaderIDs).To(ContainElement(i))
|
||||
}
|
||||
|
||||
func (repository *MockRepository) AssertMarkHeaderCheckedNotCalled() {
|
||||
Expect(len(repository.MarkHeaderCheckedPassedHeaderIDs)).To(Equal(0))
|
||||
}
|
||||
+15
-16
@@ -20,40 +20,39 @@ import (
|
||||
"github.com/vulcanize/vulcanizedb/libraries/shared/transformer"
|
||||
"github.com/vulcanize/vulcanizedb/pkg/core"
|
||||
"github.com/vulcanize/vulcanizedb/pkg/datastore/postgres"
|
||||
"github.com/vulcanize/vulcanizedb/pkg/fakes"
|
||||
)
|
||||
|
||||
type MockTransformer struct {
|
||||
type MockEventTransformer struct {
|
||||
ExecuteWasCalled bool
|
||||
ExecuteError error
|
||||
PassedLogs []core.HeaderSyncLog
|
||||
PassedHeaderID int64
|
||||
config transformer.EventTransformerConfig
|
||||
}
|
||||
|
||||
func (mh *MockTransformer) Execute(logs []core.HeaderSyncLog, headerID int64) error {
|
||||
if mh.ExecuteError != nil {
|
||||
return mh.ExecuteError
|
||||
func (t *MockEventTransformer) Execute(logs []core.HeaderSyncLog) error {
|
||||
if t.ExecuteError != nil {
|
||||
return t.ExecuteError
|
||||
}
|
||||
mh.ExecuteWasCalled = true
|
||||
mh.PassedLogs = logs
|
||||
mh.PassedHeaderID = headerID
|
||||
t.ExecuteWasCalled = true
|
||||
t.PassedLogs = logs
|
||||
return nil
|
||||
}
|
||||
|
||||
func (mh *MockTransformer) GetConfig() transformer.EventTransformerConfig {
|
||||
return mh.config
|
||||
func (t *MockEventTransformer) GetConfig() transformer.EventTransformerConfig {
|
||||
return t.config
|
||||
}
|
||||
|
||||
func (mh *MockTransformer) SetTransformerConfig(config transformer.EventTransformerConfig) {
|
||||
mh.config = config
|
||||
func (t *MockEventTransformer) SetTransformerConfig(config transformer.EventTransformerConfig) {
|
||||
t.config = config
|
||||
}
|
||||
|
||||
func (mh *MockTransformer) FakeTransformerInitializer(db *postgres.DB) transformer.EventTransformer {
|
||||
return mh
|
||||
func (t *MockEventTransformer) FakeTransformerInitializer(db *postgres.DB) transformer.EventTransformer {
|
||||
return t
|
||||
}
|
||||
|
||||
var FakeTransformerConfig = transformer.EventTransformerConfig{
|
||||
TransformerName: "FakeTransformer",
|
||||
ContractAddresses: []string{"FakeAddress"},
|
||||
Topic: "FakeTopic",
|
||||
ContractAddresses: []string{fakes.FakeAddress.Hex()},
|
||||
Topic: fakes.FakeHash.Hex(),
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
// VulcanizeDB
|
||||
// Copyright © 2019 Vulcanize
|
||||
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU Affero General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU Affero General Public License for more details.
|
||||
|
||||
// You should have received a copy of the GNU Affero General Public License
|
||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
package mocks
|
||||
|
||||
import (
|
||||
"github.com/vulcanize/vulcanizedb/libraries/shared/transformer"
|
||||
)
|
||||
|
||||
type MockLogDelegator struct {
|
||||
AddedTransformers []transformer.EventTransformer
|
||||
DelegateCalled bool
|
||||
DelegateError error
|
||||
}
|
||||
|
||||
func (delegator *MockLogDelegator) AddTransformer(t transformer.EventTransformer) {
|
||||
delegator.AddedTransformers = append(delegator.AddedTransformers, t)
|
||||
}
|
||||
|
||||
func (delegator *MockLogDelegator) DelegateLogs() error {
|
||||
delegator.DelegateCalled = true
|
||||
return delegator.DelegateError
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
// VulcanizeDB
|
||||
// Copyright © 2019 Vulcanize
|
||||
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU Affero General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU Affero General Public License for more details.
|
||||
|
||||
// You should have received a copy of the GNU Affero General Public License
|
||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
package mocks
|
||||
|
||||
import (
|
||||
"github.com/vulcanize/vulcanizedb/libraries/shared/constants"
|
||||
"github.com/vulcanize/vulcanizedb/libraries/shared/transformer"
|
||||
)
|
||||
|
||||
type MockLogExtractor struct {
|
||||
AddedConfigs []transformer.EventTransformerConfig
|
||||
ExtractLogsCalled bool
|
||||
ExtractLogsError error
|
||||
}
|
||||
|
||||
func (extractor *MockLogExtractor) AddTransformerConfig(config transformer.EventTransformerConfig) {
|
||||
extractor.AddedConfigs = append(extractor.AddedConfigs, config)
|
||||
}
|
||||
|
||||
func (extractor *MockLogExtractor) ExtractLogs(recheckHeaders constants.TransformerExecution) error {
|
||||
extractor.ExtractLogsCalled = true
|
||||
return extractor.ExtractLogsError
|
||||
}
|
||||
+15
-17
@@ -17,26 +17,24 @@
|
||||
package mocks
|
||||
|
||||
import (
|
||||
"github.com/ethereum/go-ethereum/common"
|
||||
"github.com/ethereum/go-ethereum/core/types"
|
||||
"github.com/vulcanize/vulcanizedb/pkg/core"
|
||||
)
|
||||
|
||||
type MockLogNoteConverter struct {
|
||||
err error
|
||||
returnModels []interface{}
|
||||
PassedLogs []types.Log
|
||||
ToModelsCalledCounter int
|
||||
type MockLogFetcher struct {
|
||||
ContractAddresses []common.Address
|
||||
FetchCalled bool
|
||||
MissingHeader core.Header
|
||||
ReturnError error
|
||||
ReturnLogs []types.Log
|
||||
Topics []common.Hash
|
||||
}
|
||||
|
||||
func (converter *MockLogNoteConverter) ToModels(ethLogs []types.Log) ([]interface{}, error) {
|
||||
converter.PassedLogs = ethLogs
|
||||
converter.ToModelsCalledCounter++
|
||||
return converter.returnModels, converter.err
|
||||
}
|
||||
|
||||
func (converter *MockLogNoteConverter) SetConverterError(e error) {
|
||||
converter.err = e
|
||||
}
|
||||
|
||||
func (converter *MockLogNoteConverter) SetReturnModels(models []interface{}) {
|
||||
converter.returnModels = models
|
||||
func (fetcher *MockLogFetcher) FetchLogs(contractAddresses []common.Address, topics []common.Hash, missingHeader core.Header) ([]types.Log, error) {
|
||||
fetcher.FetchCalled = true
|
||||
fetcher.ContractAddresses = contractAddresses
|
||||
fetcher.Topics = topics
|
||||
fetcher.MissingHeader = missingHeader
|
||||
return fetcher.ReturnLogs, fetcher.ReturnError
|
||||
}
|
||||
Reference in New Issue
Block a user