From bce548cb99df01646a9238d6f6a6357a117490ed Mon Sep 17 00:00:00 2001
From: Dave Collins <davec@conformal.com>
Date: Sun, 6 Oct 2013 13:51:10 -0500
Subject: [PATCH] Update reorg test to insert genesis block first.

btcdb was changed a while back to not insert the genesis block by default.
This commit modifies the reorg test to insert it as required so not all
blocks are orphans.
---
 reorganization_test.go |  6 +++
 test_coverage.txt      | 97 +++++++++++++++++++++++-------------------
 2 files changed, 60 insertions(+), 43 deletions(-)

diff --git a/reorganization_test.go b/reorganization_test.go
index 87afbe44..69f22b0f 100644
--- a/reorganization_test.go
+++ b/reorganization_test.go
@@ -56,6 +56,12 @@ func TestReorganization(t *testing.T) {
 	defer os.Remove(dbname)
 	defer db.Close()
 
+	// Insert the main network genesis block.
+	genesis := btcutil.NewBlock(&btcwire.GenesisBlock)
+	if _, err := db.InsertBlock(genesis); err != nil {
+		t.Errorf("Failed to insert genesis block: %v", err)
+	}
+
 	// Since we're not dealing with the real block chain, disable
 	// checkpoints and set the coinbase maturity to 1.
 	blockChain := btcchain.New(db, btcwire.MainNet, nil)
diff --git a/test_coverage.txt b/test_coverage.txt
index ae333a52..e0681766 100644
--- a/test_coverage.txt
+++ b/test_coverage.txt
@@ -1,79 +1,90 @@
 
-github.com/conformal/btcchain/chain.go		 BlockChain.removeOrphanBlock		 100.00% (12/12)
-github.com/conformal/btcchain/chain.go		 BlockChain.getOrphanRoot		 100.00% (7/7)
+github.com/conformal/btcchain/chain.go		 BlockChain.removeOrphanBlock		 100.00% (16/16)
+github.com/conformal/btcchain/validate.go	 countSigOps				 100.00% (8/8)
 github.com/conformal/btcchain/checkpoints.go	 init					 100.00% (6/6)
-github.com/conformal/btcchain/merkle.go		 hashMerkleBranches			 100.00% (5/5)
 github.com/conformal/btcchain/difficulty.go	 ShaHashToBig				 100.00% (5/5)
-github.com/conformal/btcchain/chain.go		 newBlockNode				 100.00% (4/4)
+github.com/conformal/btcchain/merkle.go		 hashMerkleBranches			 100.00% (5/5)
 github.com/conformal/btcchain/merkle.go		 nextPowerOfTwo				 100.00% (4/4)
-github.com/conformal/btcchain/difficulty.go	 calcWork				 100.00% (3/3)
+github.com/conformal/btcchain/chain.go		 newBlockNode				 100.00% (4/4)
 github.com/conformal/btcchain/process.go	 BlockChain.blockExists			 100.00% (3/3)
-github.com/conformal/btcchain/chain.go		 New					 100.00% (2/2)
 github.com/conformal/btcchain/checkpoints.go	 newShaHashFromStr			 100.00% (2/2)
-github.com/conformal/btcchain/timesorter.go	 timeSorter.Less			 100.00% (1/1)
-github.com/conformal/btcchain/validate.go	 calcBlockSubsidy			 100.00% (1/1)
-github.com/conformal/btcchain/timesorter.go	 timeSorter.Swap			 100.00% (1/1)
-github.com/conformal/btcchain/checkpoints.go	 BlockChain.DisableCheckpoints		 100.00% (1/1)
-github.com/conformal/btcchain/timesorter.go	 timeSorter.Len				 100.00% (1/1)
+github.com/conformal/btcchain/chain.go		 New					 100.00% (2/2)
 github.com/conformal/btcchain/log.go		 DisableLog				 100.00% (1/1)
+github.com/conformal/btcchain/validate.go	 calcBlockSubsidy			 100.00% (1/1)
+github.com/conformal/btcchain/timesorter.go	 timeSorter.Less			 100.00% (1/1)
+github.com/conformal/btcchain/timesorter.go	 timeSorter.Swap			 100.00% (1/1)
+github.com/conformal/btcchain/timesorter.go	 timeSorter.Len				 100.00% (1/1)
 github.com/conformal/btcchain/log.go		 init					 100.00% (1/1)
+github.com/conformal/btcchain/params.go		 BlockChain.chainParams			 100.00% (1/1)
+github.com/conformal/btcchain/checkpoints.go	 BlockChain.DisableCheckpoints		 100.00% (1/1)
 github.com/conformal/btcchain/merkle.go		 BuildMerkleTreeStore			 94.12% (16/17)
+github.com/conformal/btcchain/txlookup.go	 disconnectTransactions			 93.75% (15/16)
+github.com/conformal/btcchain/txlookup.go	 fetchTxListMain			 93.33% (14/15)
+github.com/conformal/btcchain/process.go	 BlockChain.processOrphans		 92.86% (13/14)
 github.com/conformal/btcchain/chain.go		 BlockChain.getReorganizeNodes		 92.86% (13/14)
-github.com/conformal/btcchain/process.go	 BlockChain.processOrphans		 91.67% (11/12)
-github.com/conformal/btcchain/txlookup.go	 disconnectTransactions			 90.91% (10/11)
-github.com/conformal/btcchain/txlookup.go	 BlockChain.fetchTxList			 88.57% (31/35)
-github.com/conformal/btcchain/scriptval.go	 validateAllTxIn			 87.88% (29/33)
-github.com/conformal/btcchain/scriptval.go	 checkBlockScripts			 87.50% (7/8)
-github.com/conformal/btcchain/chain.go		 BlockChain.connectBestChain		 86.96% (20/23)
-github.com/conformal/btcchain/validate.go	 countSigOps				 86.67% (13/15)
+github.com/conformal/btcchain/chain.go		 BlockChain.connectBestChain		 90.00% (27/30)
+github.com/conformal/btcchain/chain.go		 BlockChain.getPrevNodeFromBlock	 88.89% (8/9)
+github.com/conformal/btcchain/scriptval.go	 ValidateTransactionScripts		 88.24% (30/34)
+github.com/conformal/btcchain/chain.go		 BlockChain.calcPastMedianTime		 88.24% (15/17)
+github.com/conformal/btcchain/txlookup.go	 BlockChain.fetchTxList			 86.36% (19/22)
+github.com/conformal/btcchain/scriptval.go	 checkBlockScripts			 85.71% (6/7)
+github.com/conformal/btcchain/chain.go		 BlockChain.reorganizeChain		 85.29% (29/34)
 github.com/conformal/btcchain/chain.go		 BlockChain.connectBlock		 83.33% (10/12)
-github.com/conformal/btcchain/validate.go	 isCoinBase				 83.33% (5/6)
-github.com/conformal/btcchain/chain.go		 BlockChain.calcPastMedianTime		 82.35% (14/17)
-github.com/conformal/btcchain/chain.go		 BlockChain.reorganizeChain		 80.77% (21/26)
+github.com/conformal/btcchain/validate.go	 IsCoinBase				 83.33% (5/6)
 github.com/conformal/btcchain/chain.go		 BlockChain.isMajorityVersion		 80.00% (8/10)
-github.com/conformal/btcchain/txlookup.go	 BlockChain.fetchInputTransactions	 78.26% (18/23)
-github.com/conformal/btcchain/chain.go		 BlockChain.getPrevNodeFromBlock	 77.78% (7/9)
+github.com/conformal/btcchain/difficulty.go	 calcWork				 80.00% (4/5)
+github.com/conformal/btcchain/chain.go		 BlockChain.addOrphanBlock		 77.78% (14/18)
+github.com/conformal/btcchain/txlookup.go	 BlockChain.fetchInputTransactions	 76.92% (20/26)
 github.com/conformal/btcchain/chain.go		 BlockChain.disconnectBlock		 76.92% (10/13)
-github.com/conformal/btcchain/chain.go		 BlockChain.addOrphanBlock		 75.00% (12/16)
+github.com/conformal/btcchain/difficulty.go	 BigToCompact				 75.00% (12/16)
 github.com/conformal/btcchain/difficulty.go	 CompactToBig				 75.00% (9/12)
-github.com/conformal/btcchain/validate.go	 BlockChain.checkConnectBlock		 68.52% (37/54)
-github.com/conformal/btcchain/validate.go	 BlockChain.checkBlockSanity		 66.67% (30/45)
+github.com/conformal/btcchain/validate.go	 BlockChain.checkConnectBlock		 69.23% (36/52)
 github.com/conformal/btcchain/validate.go	 isNullOutpoint				 66.67% (2/3)
+github.com/conformal/btcchain/validate.go	 BlockChain.checkBlockSanity		 65.12% (28/43)
 github.com/conformal/btcchain/scriptval.go	 validateTxIn				 64.71% (11/17)
-github.com/conformal/btcchain/validate.go	 checkTransactionInputs			 63.64% (28/44)
-github.com/conformal/btcchain/validate.go	 checkTransactionSanity			 62.16% (23/37)
+github.com/conformal/btcchain/validate.go	 CheckTransactionInputs			 64.44% (29/45)
+github.com/conformal/btcchain/validate.go	 CheckTransactionSanity			 62.16% (23/37)
 github.com/conformal/btcchain/txlookup.go	 connectTransactions			 60.00% (9/15)
+github.com/conformal/btcchain/params.go		 ChainParams				 60.00% (3/5)
 github.com/conformal/btcchain/validate.go	 isBIP0030Node				 60.00% (3/5)
-github.com/conformal/btcchain/params.go		 BlockChain.netParams			 60.00% (3/5)
-github.com/conformal/btcchain/process.go	 BlockChain.ProcessBlock		 59.09% (26/44)
 github.com/conformal/btcchain/validate.go	 BlockChain.checkProofOfWork		 58.82% (10/17)
 github.com/conformal/btcchain/validate.go	 BlockChain.checkBIP0030		 57.14% (8/14)
+github.com/conformal/btcchain/process.go	 BlockChain.ProcessBlock		 55.81% (24/43)
+github.com/conformal/btcchain/accept.go		 BlockChain.maybeAcceptBlock		 53.52% (38/71)
 github.com/conformal/btcchain/chain.go		 BlockChain.loadBlockNode		 50.00% (11/22)
-github.com/conformal/btcchain/checkpoints.go	 BlockChain.LatestCheckpoint		 50.00% (2/4)
+github.com/conformal/btcchain/chain.go		 BlockChain.getPrevNodeFromNode		 50.00% (4/8)
 github.com/conformal/btcchain/notifications.go	 BlockChain.sendNotification		 50.00% (2/4)
-github.com/conformal/btcchain/accept.go		 BlockChain.maybeAcceptBlock		 46.38% (32/69)
-github.com/conformal/btcchain/chain.go		 BlockChain.getPrevNodeFromNode		 33.33% (4/12)
+github.com/conformal/btcchain/checkpoints.go	 BlockChain.LatestCheckpoint		 50.00% (2/4)
+github.com/conformal/btcchain/chain.go		 BlockChain.pruneBlockNodes		 41.18% (7/17)
 github.com/conformal/btcchain/checkpoints.go	 BlockChain.verifyCheckpoint		 33.33% (2/6)
-github.com/conformal/btcchain/validate.go	 isFinalizedTransaction			 23.08% (3/13)
+github.com/conformal/btcchain/validate.go	 IsFinalizedTransaction			 23.08% (3/13)
+github.com/conformal/btcchain/difficulty.go	 BlockChain.calcNextRequiredDifficulty	 19.51% (8/41)
 github.com/conformal/btcchain/checkpoints.go	 BlockChain.findLatestKnownCheckpoint	 18.18% (2/11)
-github.com/conformal/btcchain/difficulty.go	 BlockChain.calcNextRequiredDifficulty	 15.00% (6/40)
+github.com/conformal/btcchain/blocklocator.go	 BlockChain.BlockLocatorFromHash	 0.00% (0/39)
 github.com/conformal/btcchain/checkpoints.go	 BlockChain.IsCheckpointCandidate	 0.00% (0/32)
-github.com/conformal/btcchain/validate.go	 countP2SHSigOps			 0.00% (0/26)
-github.com/conformal/btcchain/difficulty.go	 BigToCompact				 0.00% (0/16)
-github.com/conformal/btcchain/difficulty.go	 BlockChain.calcEasiestDifficulty	 0.00% (0/14)
+github.com/conformal/btcchain/validate.go	 countP2SHSigOps			 0.00% (0/24)
+github.com/conformal/btcchain/chain.go		 BlockChain.GenerateInitialIndex	 0.00% (0/17)
+github.com/conformal/btcchain/txlookup.go	 BlockChain.FetchTransactionStore	 0.00% (0/15)
+github.com/conformal/btcchain/difficulty.go	 BlockChain.calcEasiestDifficulty	 0.00% (0/15)
 github.com/conformal/btcchain/validate.go	 checkSerializedHeight			 0.00% (0/12)
 github.com/conformal/btcchain/difficulty.go	 BlockChain.findPrevTestNetDifficulty	 0.00% (0/12)
+github.com/conformal/btcchain/chain.go		 BlockChain.removeBlockNode		 0.00% (0/12)
+github.com/conformal/btcchain/chain.go		 BlockChain.GetOrphanRoot		 0.00% (0/11)
+github.com/conformal/btcchain/chain.go		 BlockChain.IsCurrent			 0.00% (0/9)
 github.com/conformal/btcchain/chain.go		 removeChildNode			 0.00% (0/8)
+github.com/conformal/btcchain/chain.go		 BlockChain.HaveInventory		 0.00% (0/7)
 github.com/conformal/btcchain/log.go		 SetLogWriter				 0.00% (0/7)
+github.com/conformal/btcchain/blocklocator.go	 BlockChain.LatestBlockLocator		 0.00% (0/6)
+github.com/conformal/btcchain/chain.go		 BlockChain.IsKnownOrphan		 0.00% (0/5)
 github.com/conformal/btcchain/checkpoints.go	 isNonstandardTransaction		 0.00% (0/5)
 github.com/conformal/btcchain/checkpoints.go	 BlockChain.checkpointData		 0.00% (0/4)
 github.com/conformal/btcchain/validate.go	 isTransactionSpent			 0.00% (0/4)
 github.com/conformal/btcchain/notifications.go	 NotificationType.String		 0.00% (0/3)
 github.com/conformal/btcchain/chain.go		 addChildrenWork			 0.00% (0/3)
-github.com/conformal/btcchain/process.go	 RuleError.Error			 0.00% (0/1)
-github.com/conformal/btcchain/chain.go		 BlockChain.DisableVerify		 0.00% (0/1)
-github.com/conformal/btcchain/log.go		 UseLogger				 0.00% (0/1)
-github.com/conformal/btcchain/log.go		 logClosure.String			 0.00% (0/1)
 github.com/conformal/btcchain/log.go		 newLogClosure				 0.00% (0/1)
-github.com/conformal/btcchain			 -------------------------------------	 57.57% (578/1004)
+github.com/conformal/btcchain/log.go		 UseLogger				 0.00% (0/1)
+github.com/conformal/btcchain/chain.go		 BlockChain.DisableVerify		 0.00% (0/1)
+github.com/conformal/btcchain/log.go		 logClosure.String			 0.00% (0/1)
+github.com/conformal/btcchain/process.go	 RuleError.Error			 0.00% (0/1)
+github.com/conformal/btcchain			 -------------------------------------	 53.97% (625/1158)