From 7a9ce1ed6ab165ece4e14ccca2a0bed3f8abaacb Mon Sep 17 00:00:00 2001 From: Dave Collins Date: Fri, 23 Feb 2018 18:36:01 -0600 Subject: [PATCH] blockchain: Remove superfluous reorg tests. This removes a couple of the reorganization tests that rely on static test data since that logic is much better handled by the dynamic full block tests and thus is no longer needed. --- blockchain/reorganization_test.go | 233 +----------------------------- 1 file changed, 1 insertion(+), 232 deletions(-) diff --git a/blockchain/reorganization_test.go b/blockchain/reorganization_test.go index 3859ad7079..181487be41 100644 --- a/blockchain/reorganization_test.go +++ b/blockchain/reorganization_test.go @@ -1,5 +1,5 @@ // Copyright (c) 2013-2014 The btcsuite developers -// Copyright (c) 2015-2017 The Decred developers +// Copyright (c) 2015-2018 The Decred developers // Use of this source code is governed by an ISC // license that can be found in the LICENSE file. @@ -19,235 +19,6 @@ import ( "github.com/decred/dcrd/dcrutil" ) -// reorgTestLong does a single, large reorganization. -func reorgTestLong(t *testing.T, params *chaincfg.Params) { - // Create a new database and chain instance to run tests against. - chain, teardownFunc, err := chainSetup("reorgunittest", params) - if err != nil { - t.Errorf("Failed to setup chain instance: %v", err) - return - } - defer teardownFunc() - - // The genesis block should fail to connect since it's already - // inserted. - err = chain.CheckConnectBlock(dcrutil.NewBlock(params.GenesisBlock), - blockchain.BFNone) - if err == nil { - t.Errorf("CheckConnectBlock: Did not receive expected error") - } - - // Load up the rest of the blocks up to HEAD. - filename := filepath.Join("testdata/", "reorgto179.bz2") - fi, err := os.Open(filename) - if err != nil { - t.Errorf("Unable to open %s: %v", filename, err) - } - bcStream := bzip2.NewReader(fi) - defer fi.Close() - - // Create a buffer of the read file - bcBuf := new(bytes.Buffer) - bcBuf.ReadFrom(bcStream) - - // Create decoder from the buffer and a map to store the data - bcDecoder := gob.NewDecoder(bcBuf) - blockChain := make(map[int64][]byte) - - // Decode the blockchain into the map - if err := bcDecoder.Decode(&blockChain); err != nil { - t.Errorf("error decoding test blockchain: %v", err.Error()) - } - - // Load up the short chain - finalIdx1 := 179 - for i := 1; i < finalIdx1+1; i++ { - bl, err := dcrutil.NewBlockFromBytes(blockChain[int64(i)]) - if err != nil { - t.Fatalf("NewBlockFromBytes error: %v", err.Error()) - } - - _, _, err = chain.ProcessBlock(bl, blockchain.BFNone) - if err != nil { - t.Fatalf("ProcessBlock error at height %v: %v", i, err.Error()) - } - } - - // Load the long chain and begin loading blocks from that too, - // forcing a reorganization - // Load up the rest of the blocks up to HEAD. - filename = filepath.Join("testdata/", "reorgto180.bz2") - fi, err = os.Open(filename) - if err != nil { - t.Errorf("Unable to open %s: %v", filename, err) - } - bcStream = bzip2.NewReader(fi) - defer fi.Close() - - // Create a buffer of the read file - bcBuf = new(bytes.Buffer) - bcBuf.ReadFrom(bcStream) - - // Create decoder from the buffer and a map to store the data - bcDecoder = gob.NewDecoder(bcBuf) - blockChain = make(map[int64][]byte) - - // Decode the blockchain into the map - if err := bcDecoder.Decode(&blockChain); err != nil { - t.Errorf("error decoding test blockchain: %v", err.Error()) - } - - forkPoint := 131 - finalIdx2 := 180 - for i := forkPoint; i < finalIdx2+1; i++ { - bl, err := dcrutil.NewBlockFromBytes(blockChain[int64(i)]) - if err != nil { - t.Fatalf("NewBlockFromBytes error: %v", err.Error()) - } - - _, _, err = chain.ProcessBlock(bl, blockchain.BFNone) - if err != nil { - t.Fatalf("ProcessBlock error: %v", err.Error()) - } - } - - // Ensure our blockchain is at the correct best tip - topBlock, _ := chain.GetTopBlock() - tipHash := topBlock.Hash() - expected, _ := chainhash.NewHashFromStr("5ab969d0afd8295b6cd1506f2a310d" + - "259322015c8bd5633f283a163ce0e50594") - if *tipHash != *expected { - t.Errorf("Failed to correctly reorg; expected tip %v, got tip %v", - expected, tipHash) - } - have, err := chain.HaveBlock(expected) - if !have { - t.Errorf("missing tip block after reorganization test") - } - if err != nil { - t.Errorf("unexpected error testing for presence of new tip block "+ - "after reorg test: %v", err) - } -} - -// reorgTestsShort does short reorganizations to test multiple, frequent -// reorganizations. -func reorgTestShort(t *testing.T, params *chaincfg.Params) { - // Create a new database and chain instance to run tests against. - chain, teardownFunc, err := chainSetup("reorgunittestshort", params) - if err != nil { - t.Errorf("Failed to setup chain instance: %v", err) - return - } - defer teardownFunc() - - // The genesis block should fail to connect since it's already - // inserted. - err = chain.CheckConnectBlock(dcrutil.NewBlock(params.GenesisBlock), - blockchain.BFNone) - if err == nil { - t.Errorf("CheckConnectBlock: Did not receive expected error") - } - - // Load up the rest of the blocks up to HEAD. - filename := filepath.Join("testdata/", "reorgto179.bz2") - fi, err := os.Open(filename) - if err != nil { - t.Errorf("Unable to open %s: %v", filename, err) - } - bcStream := bzip2.NewReader(fi) - defer fi.Close() - - // Create a buffer of the read file - bcBuf := new(bytes.Buffer) - bcBuf.ReadFrom(bcStream) - - // Create decoder from the buffer and a map to store the data - bcDecoder := gob.NewDecoder(bcBuf) - blockChain1 := make(map[int64][]byte) - - // Decode the blockchain into the map - if err := bcDecoder.Decode(&blockChain1); err != nil { - t.Errorf("error decoding test blockchain: %v", err.Error()) - } - - // Load the long chain and begin loading blocks from that too, - // forcing a reorganization - // Load up the rest of the blocks up to HEAD. - filename = filepath.Join("testdata/", "reorgto180.bz2") - fi, err = os.Open(filename) - if err != nil { - t.Errorf("Unable to open %s: %v", filename, err) - } - bcStream = bzip2.NewReader(fi) - defer fi.Close() - - // Create a buffer of the read file - bcBuf = new(bytes.Buffer) - bcBuf.ReadFrom(bcStream) - - // Create decoder from the buffer and a map to store the data - bcDecoder = gob.NewDecoder(bcBuf) - blockChain2 := make(map[int64][]byte) - - // Decode the blockchain into the map - if err := bcDecoder.Decode(&blockChain2); err != nil { - t.Errorf("error decoding test blockchain: %v", err.Error()) - } - - forkPoint := 131 - finalIdx2 := 180 - - for i := 1; i < forkPoint+1; i++ { - bl, err := dcrutil.NewBlockFromBytes(blockChain1[int64(i)]) - if err != nil { - t.Fatalf("NewBlockFromBytes error: %v", err.Error()) - } - - _, _, err = chain.ProcessBlock(bl, blockchain.BFNone) - if err != nil { - t.Fatalf("ProcessBlock error at height %v: %v", i, err.Error()) - } - } - - // Reorg each block. - dominant := blockChain2 - orphaned := blockChain1 - for i := forkPoint; i < finalIdx2; i++ { - for j := 0; j < 2; j++ { - bl, err := dcrutil.NewBlockFromBytes(dominant[int64(i+j)]) - if err != nil { - t.Fatalf("NewBlockFromBytes error: %v", err.Error()) - } - - _, _, err = chain.ProcessBlock(bl, blockchain.BFNone) - if err != nil { - t.Fatalf("ProcessBlock error: %v", err.Error()) - } - } - - dominant, orphaned = orphaned, dominant - } - - // Ensure our blockchain is at the correct best tip - topBlock, _ := chain.GetTopBlock() - tipHash := topBlock.Hash() - expected, _ := chainhash.NewHashFromStr("5ab969d0afd8295b6cd1506f2a310d" + - "259322015c8bd5633f283a163ce0e50594") - if *tipHash != *expected { - t.Errorf("Failed to correctly reorg; expected tip %v, got tip %v", - expected, tipHash) - } - have, err := chain.HaveBlock(expected) - if !have { - t.Errorf("missing tip block after reorganization test") - } - if err != nil { - t.Errorf("unexpected error testing for presence of new tip block "+ - "after reorg test: %v", err) - } -} - // reorgTestsForced tests a forced reorganization of a single block at HEAD. func reorgTestForced(t *testing.T, params *chaincfg.Params) { // Create a new database and chain instance to run tests against. @@ -377,7 +148,5 @@ func TestReorganization(t *testing.T) { genesisHash := params.GenesisBlock.BlockHash() params.GenesisHash = &genesisHash - reorgTestLong(t, params) - reorgTestShort(t, params) reorgTestForced(t, params) }