diff --git a/Gododir/main.go b/Gododir/main.go index 0733602c..57a0f34e 100644 --- a/Gododir/main.go +++ b/Gododir/main.go @@ -10,6 +10,7 @@ import ( "github.com/8thlight/vulcanizedb/core" "github.com/8thlight/vulcanizedb/geth" "github.com/8thlight/vulcanizedb/observers" + "github.com/8thlight/vulcanizedb/repositories" "github.com/jmoiron/sqlx" do "gopkg.in/godo.v2" ) @@ -31,7 +32,8 @@ func startBlockchainListener(cfg config.Config) { if err != nil { log.Fatalf("Error connecting to DB: %v\n", err) } - dbObserver := (observers.BlockchainDBObserver{Db: db}) + repository := repositories.NewPostgres(db) + dbObserver := observers.NewBlockchainDbObserver(repository) listener := blockchain_listener.NewBlockchainListener(blockchain, []core.BlockchainObserver{ loggingObserver, dbObserver, diff --git a/blockchain_listener/blockchain_listener_test.go b/blockchain_listener/blockchain_listener_test.go index c64eb5c4..9f55db94 100644 --- a/blockchain_listener/blockchain_listener_test.go +++ b/blockchain_listener/blockchain_listener_test.go @@ -11,7 +11,7 @@ import ( var _ = Describe("Blockchain listeners", func() { It("starts with no blocks", func(done Done) { - observer := fakes.NewFakeBlockchainObserverTwo() + observer := fakes.NewFakeBlockchainObserver() blockchain := &fakes.Blockchain{} blockchain_listener.NewBlockchainListener(blockchain, []core.BlockchainObserver{observer}) @@ -21,7 +21,7 @@ var _ = Describe("Blockchain listeners", func() { }, 1) It("sees when one block was added", func(done Done) { - observer := fakes.NewFakeBlockchainObserverTwo() + observer := fakes.NewFakeBlockchainObserver() blockchain := &fakes.Blockchain{} listener := blockchain_listener.NewBlockchainListener(blockchain, []core.BlockchainObserver{observer}) go listener.Start() @@ -37,7 +37,7 @@ var _ = Describe("Blockchain listeners", func() { }, 1) It("sees a second block", func(done Done) { - observer := fakes.NewFakeBlockchainObserverTwo() + observer := fakes.NewFakeBlockchainObserver() blockchain := &fakes.Blockchain{} listener := blockchain_listener.NewBlockchainListener(blockchain, []core.BlockchainObserver{observer}) go listener.Start() @@ -55,7 +55,7 @@ var _ = Describe("Blockchain listeners", func() { }, 1) It("stops listening", func(done Done) { - observer := fakes.NewFakeBlockchainObserverTwo() + observer := fakes.NewFakeBlockchainObserver() blockchain := &fakes.Blockchain{} listener := blockchain_listener.NewBlockchainListener(blockchain, []core.BlockchainObserver{observer}) go listener.Start() diff --git a/fakes/blockchain_observer.go b/fakes/blockchain_observer.go index add572e2..8dd444c0 100644 --- a/fakes/blockchain_observer.go +++ b/fakes/blockchain_observer.go @@ -11,7 +11,7 @@ func (observer *BlockchainObserver) LastBlock() core.Block { return observer.CurrentBlocks[len(observer.CurrentBlocks)-1] } -func NewFakeBlockchainObserverTwo() *BlockchainObserver { +func NewFakeBlockchainObserver() *BlockchainObserver { return &BlockchainObserver{ WasNotified: make(chan bool), } diff --git a/integration_test/geth_blockchain_test.go b/integration_test/geth_blockchain_test.go index 199c173f..116527e4 100644 --- a/integration_test/geth_blockchain_test.go +++ b/integration_test/geth_blockchain_test.go @@ -26,7 +26,7 @@ var _ = Describe("Reading from the Geth blockchain", func() { var observer *fakes.BlockchainObserver BeforeEach(func() { - observer = fakes.NewFakeBlockchainObserverTwo() + observer = fakes.NewFakeBlockchainObserver() blockchain := geth.NewGethBlockchain(RunTimePath() + "/test_data_dir/geth.ipc") observers := []core.BlockchainObserver{observer} listener = blockchain_listener.NewBlockchainListener(blockchain, observers) diff --git a/observers/blockchain_db_observer.go b/observers/blockchain_db_observer.go index 911930ef..504a0367 100644 --- a/observers/blockchain_db_observer.go +++ b/observers/blockchain_db_observer.go @@ -3,13 +3,16 @@ package observers import ( "github.com/8thlight/vulcanizedb/core" "github.com/8thlight/vulcanizedb/repositories" - "github.com/jmoiron/sqlx" ) -type BlockchainDBObserver struct { - Db *sqlx.DB +type BlockchainDbObserver struct { + repository repositories.Repository } -func (observer BlockchainDBObserver) NotifyBlockAdded(block core.Block) { - repositories.NewPostgres(observer.Db).CreateBlock(block) +func NewBlockchainDbObserver(repository repositories.Repository) BlockchainDbObserver { + return BlockchainDbObserver{repository: repository} +} + +func (observer BlockchainDbObserver) NotifyBlockAdded(block core.Block) { + observer.repository.CreateBlock(block) } diff --git a/observers/blockchain_db_observer_test.go b/observers/blockchain_db_observer_test.go index 4bbcec73..0f636a15 100644 --- a/observers/blockchain_db_observer_test.go +++ b/observers/blockchain_db_observer_test.go @@ -1,41 +1,23 @@ package observers_test import ( - "runtime" - - "github.com/8thlight/vulcanizedb/config" "github.com/8thlight/vulcanizedb/core" "github.com/8thlight/vulcanizedb/observers" "github.com/8thlight/vulcanizedb/repositories" - "github.com/jmoiron/sqlx" - _ "github.com/lib/pq" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" ) -var ( - _, filename, _, _ = runtime.Caller(0) -) - var _ = Describe("Saving blocks to the database", func() { - var db *sqlx.DB - var err error + var repository *repositories.InMemory BeforeEach(func() { - cfg := config.NewConfig("private") - pgConfig := config.DbConnectionString(cfg.Database) - db, err = sqlx.Connect("postgres", pgConfig) - db.MustExec("DELETE FROM transactions") - db.MustExec("DELETE FROM blocks") - }) - - AfterEach(func() { - db.Close() + repository = repositories.NewInMemory() }) It("implements the observer interface", func() { - var observer core.BlockchainObserver = observers.BlockchainDBObserver{Db: db} + var observer core.BlockchainObserver = observers.NewBlockchainDbObserver(repository) Expect(observer).NotTo(BeNil()) }) @@ -45,10 +27,9 @@ var _ = Describe("Saving blocks to the database", func() { Transactions: []core.Transaction{{}}, } - observer := observers.BlockchainDBObserver{Db: db} + observer := observers.NewBlockchainDbObserver(repository) observer.NotifyBlockAdded(block) - repository := repositories.NewPostgres(db) savedBlock := repository.FindBlockByNumber(123) Expect(savedBlock).NotTo(BeNil()) Expect(len(savedBlock.Transactions)).To(Equal(1)) diff --git a/repositories/repository.go b/repositories/repository.go new file mode 100644 index 00000000..16aa4055 --- /dev/null +++ b/repositories/repository.go @@ -0,0 +1,7 @@ +package repositories + +import "github.com/8thlight/vulcanizedb/core" + +type Repository interface { + CreateBlock(block core.Block) +}