ipld-eth-server/pkg/blockchain_listener/blockchain_listener_test.go
Eric Meyer 4c84173bc0 Add ability to populate missing blocks
* The command populates up to the highest known block number
 * The anticipated use case is that the listener will be running
   in parallel to the populateBlocks command
    * This will mean that the listener is responsible for picking up
      new blocks, and the populateBlocks command is reposible for
      historical blocks
 * Reformat SQL statements
2017-11-08 14:52:38 -06:00

70 lines
2.1 KiB
Go

package blockchain_listener_test
import (
"github.com/8thlight/vulcanizedb/pkg/blockchain_listener"
"github.com/8thlight/vulcanizedb/pkg/core"
"github.com/8thlight/vulcanizedb/pkg/fakes"
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
)
var _ = Describe("Blockchain listeners", func() {
It("starts with no blocks", func(done Done) {
observer := fakes.NewFakeBlockchainObserver()
blockchain := fakes.NewBlockchain()
blockchain_listener.NewBlockchainListener(blockchain, []core.BlockchainObserver{observer})
Expect(len(observer.CurrentBlocks)).To(Equal(0))
close(done)
}, 1)
It("sees when one block was added", func(done Done) {
observer := fakes.NewFakeBlockchainObserver()
blockchain := fakes.NewBlockchain()
listener := blockchain_listener.NewBlockchainListener(blockchain, []core.BlockchainObserver{observer})
go listener.Start()
go blockchain.AddBlock(core.Block{Number: 123})
wasObserverNotified := <-observer.WasNotified
Expect(wasObserverNotified).To(BeTrue())
Expect(len(observer.CurrentBlocks)).To(Equal(1))
addedBlock := observer.CurrentBlocks[0]
Expect(addedBlock.Number).To(Equal(int64(123)))
close(done)
}, 1)
It("sees a second block", func(done Done) {
observer := fakes.NewFakeBlockchainObserver()
blockchain := fakes.NewBlockchain()
listener := blockchain_listener.NewBlockchainListener(blockchain, []core.BlockchainObserver{observer})
go listener.Start()
go blockchain.AddBlock(core.Block{Number: 123})
<-observer.WasNotified
go blockchain.AddBlock(core.Block{Number: 456})
wasObserverNotified := <-observer.WasNotified
Expect(wasObserverNotified).To(BeTrue())
Expect(len(observer.CurrentBlocks)).To(Equal(2))
addedBlock := observer.CurrentBlocks[1]
Expect(addedBlock.Number).To(Equal(int64(456)))
close(done)
}, 1)
It("stops listening", func(done Done) {
observer := fakes.NewFakeBlockchainObserver()
blockchain := fakes.NewBlockchain()
listener := blockchain_listener.NewBlockchainListener(blockchain, []core.BlockchainObserver{observer})
go listener.Start()
listener.Stop()
Expect(blockchain.WasToldToStop).To(BeTrue())
close(done)
}, 1)
})