e02fbcf5a1
Putting the test code in the same package makes it easier for forks since they don't have to change the import paths as much and it also gets rid of the need for internal_test.go to bridge. While here, remove the reorganization test since it is much better handled by the full block tests and is no longer needed and do some light cleanup on a few other tests. The full block tests had to remain in the separate test package since it is a circular dependency otherwise. This did require duplicating some of the chain setup code, but given the other benefits this is acceptable.
51 lines
1.3 KiB
Go
51 lines
1.3 KiB
Go
// Copyright (c) 2017 The btcsuite developers
|
|
// Use of this source code is governed by an ISC
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package blockchain
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/btcsuite/btcd/chaincfg"
|
|
)
|
|
|
|
// TestNotifications ensures that notification callbacks are fired on events.
|
|
func TestNotifications(t *testing.T) {
|
|
blocks, err := loadBlocks("blk_0_to_4.dat.bz2")
|
|
if err != nil {
|
|
t.Fatalf("Error loading file: %v\n", err)
|
|
}
|
|
|
|
// Create a new database and chain instance to run tests against.
|
|
chain, teardownFunc, err := chainSetup("notifications",
|
|
&chaincfg.MainNetParams)
|
|
if err != nil {
|
|
t.Fatalf("Failed to setup chain instance: %v", err)
|
|
}
|
|
defer teardownFunc()
|
|
|
|
notificationCount := 0
|
|
callback := func(notification *Notification) {
|
|
if notification.Type == NTBlockAccepted {
|
|
notificationCount++
|
|
}
|
|
}
|
|
|
|
// Register callback multiple times then assert it is called that many
|
|
// times.
|
|
const numSubscribers = 3
|
|
for i := 0; i < numSubscribers; i++ {
|
|
chain.Subscribe(callback)
|
|
}
|
|
|
|
_, _, err = chain.ProcessBlock(blocks[1], BFNone)
|
|
if err != nil {
|
|
t.Fatalf("ProcessBlock fail on block 1: %v\n", err)
|
|
}
|
|
|
|
if notificationCount != numSubscribers {
|
|
t.Fatalf("Expected notification callback to be executed %d "+
|
|
"times, found %d", numSubscribers, notificationCount)
|
|
}
|
|
}
|