Add negative tests for FetchBlockShaByHeight.

This commit adds tests to ensure FetchBlockShaByHeight returns expected
errors when invalid heights are specified.
This commit is contained in:
Dave Collins 2013-10-13 22:13:47 -05:00
parent 06d6e5fce8
commit f37fabb855

View file

@ -5,11 +5,35 @@
package btcdb_test package btcdb_test
import ( import (
"github.com/conformal/btcdb"
"github.com/davecgh/go-spew/spew" "github.com/davecgh/go-spew/spew"
"reflect" "reflect"
"testing" "testing"
) )
// testFetchBlockShaByHeightErrors ensures FetchBlockShaByHeight handles invalid
// heights correctly.
func testFetchBlockShaByHeightErrors(t *testing.T, dbType string, db btcdb.Db, numBlocks int64) bool {
tests := []int64{-1, numBlocks, numBlocks + 1}
for i, wantHeight := range tests {
hashFromDb, err := db.FetchBlockShaByHeight(wantHeight)
if err == nil {
t.Errorf("FetchBlockShaByHeight #%d (%s): did not "+
"return error on invalid index: %d - got: %v, "+
"want: non-nil", i, dbType, wantHeight, err)
return false
}
if hashFromDb != nil {
t.Errorf("FetchBlockShaByHeight #%d (%s): returned "+
"hash is not nil on invalid index: %d - got: "+
"%v, want: nil", i, dbType, wantHeight, err)
return false
}
}
return false
}
// testInterface tests performs tests for the various interfaces of btcdb which // testInterface tests performs tests for the various interfaces of btcdb which
// require state in the database for the given database type. // require state in the database for the given database type.
func testInterface(t *testing.T, dbType string) { func testInterface(t *testing.T, dbType string) {
@ -107,6 +131,11 @@ func testInterface(t *testing.T, dbType string) {
} }
} }
// Ensure FetchBlockShaByHeight handles invalid heights properly.
if !testFetchBlockShaByHeightErrors(t, dbType, db, int64(len(blocks))) {
return
}
// TODO(davec): Need to figure out how to handle the special checks // TODO(davec): Need to figure out how to handle the special checks
// required for the duplicate transactions allowed by blocks 91842 and // required for the duplicate transactions allowed by blocks 91842 and
// 91880 on the main network due to the old miner + Satoshi client bug. // 91880 on the main network due to the old miner + Satoshi client bug.
@ -117,7 +146,7 @@ func testInterface(t *testing.T, dbType string) {
DropAfterBlockBySha(*btcwire.ShaHash) (err error) DropAfterBlockBySha(*btcwire.ShaHash) (err error)
- ExistsSha(sha *btcwire.ShaHash) (exists bool) - ExistsSha(sha *btcwire.ShaHash) (exists bool)
- FetchBlockBySha(sha *btcwire.ShaHash) (blk *btcutil.Block, err error) - FetchBlockBySha(sha *btcwire.ShaHash) (blk *btcutil.Block, err error)
FetchBlockShaByHeight(height int64) (sha *btcwire.ShaHash, err error) - FetchBlockShaByHeight(height int64) (sha *btcwire.ShaHash, err error)
FetchHeightRange(startHeight, endHeight int64) (rshalist []btcwire.ShaHash, err error) FetchHeightRange(startHeight, endHeight int64) (rshalist []btcwire.ShaHash, err error)
ExistsTxSha(sha *btcwire.ShaHash) (exists bool) ExistsTxSha(sha *btcwire.ShaHash) (exists bool)
FetchTxBySha(txsha *btcwire.ShaHash) ([]*TxListReply, error) FetchTxBySha(txsha *btcwire.ShaHash) ([]*TxListReply, error)