error_test.go raw

   1  package blockchain
   2  
   3  import (
   4  	"testing"
   5  )
   6  
   7  // TestErrorCodeStringer tests the stringized output for the ErrorCode type.
   8  func TestErrorCodeStringer(t *testing.T) {
   9  	tests := []struct {
  10  		in   ErrorCode
  11  		want string
  12  	}{
  13  		{ErrDuplicateBlock, "ErrDuplicateBlock"},
  14  		{ErrBlockTooBig, "ErrBlockTooBig"},
  15  		{ErrBlockWeightTooHigh, "ErrBlockWeightTooHigh"},
  16  		{ErrBlockVersionTooOld, "ErrBlockVersionTooOld"},
  17  		{ErrInvalidTime, "ErrInvalidTime"},
  18  		{ErrTimeTooOld, "ErrTimeTooOld"},
  19  		{ErrTimeTooNew, "ErrTimeTooNew"},
  20  		{ErrDifficultyTooLow, "ErrDifficultyTooLow"},
  21  		{ErrUnexpectedDifficulty, "ErrUnexpectedDifficulty"},
  22  		{ErrHighHash, "ErrHighHash"},
  23  		{ErrBadMerkleRoot, "ErrBadMerkleRoot"},
  24  		{ErrBadCheckpoint, "ErrBadCheckpoint"},
  25  		{ErrForkTooOld, "ErrForkTooOld"},
  26  		{ErrCheckpointTimeTooOld, "ErrCheckpointTimeTooOld"},
  27  		{ErrNoTransactions, "ErrNoTransactions"},
  28  		{ErrNoTxInputs, "ErrNoTxInputs"},
  29  		{ErrNoTxOutputs, "ErrNoTxOutputs"},
  30  		{ErrTxTooBig, "ErrTxTooBig"},
  31  		{ErrBadTxOutValue, "ErrBadTxOutValue"},
  32  		{ErrDuplicateTxInputs, "ErrDuplicateTxInputs"},
  33  		{ErrBadTxInput, "ErrBadTxInput"},
  34  		{ErrBadCheckpoint, "ErrBadCheckpoint"},
  35  		{ErrMissingTxOut, "ErrMissingTxOut"},
  36  		{ErrUnfinalizedTx, "ErrUnfinalizedTx"},
  37  		{ErrDuplicateTx, "ErrDuplicateTx"},
  38  		{ErrOverwriteTx, "ErrOverwriteTx"},
  39  		{ErrImmatureSpend, "ErrImmatureSpend"},
  40  		{ErrSpendTooHigh, "ErrSpendTooHigh"},
  41  		{ErrBadFees, "ErrBadFees"},
  42  		{ErrTooManySigOps, "ErrTooManySigOps"},
  43  		{ErrFirstTxNotCoinbase, "ErrFirstTxNotCoinbase"},
  44  		{ErrMultipleCoinbases, "ErrMultipleCoinbases"},
  45  		{ErrBadCoinbaseScriptLen, "ErrBadCoinbaseScriptLen"},
  46  		{ErrBadCoinbaseValue, "ErrBadCoinbaseValue"},
  47  		{ErrMissingCoinbaseHeight, "ErrMissingCoinbaseHeight"},
  48  		{ErrBadCoinbaseHeight, "ErrBadCoinbaseHeight"},
  49  		{ErrScriptMalformed, "ErrScriptMalformed"},
  50  		{ErrScriptValidation, "ErrScriptValidation"},
  51  		{ErrUnexpectedWitness, "ErrUnexpectedWitness"},
  52  		{ErrInvalidWitnessCommitment, "ErrInvalidWitnessCommitment"},
  53  		{ErrWitnessCommitmentMismatch, "ErrWitnessCommitmentMismatch"},
  54  		{ErrPreviousBlockUnknown, "ErrPreviousBlockUnknown"},
  55  		{ErrInvalidAncestorBlock, "ErrInvalidAncestorBlock"},
  56  		{ErrPrevBlockNotBest, "ErrPrevBlockNotBest"},
  57  		{0xffff, "Unknown ErrorCode (65535)"},
  58  	}
  59  	t.Logf("Running %d tests", len(tests))
  60  	for i, test := range tests {
  61  		result := test.in.String()
  62  		if result != test.want {
  63  			t.Errorf("String #%d\n got: %s want: %s", i, result,
  64  				test.want,
  65  			)
  66  			continue
  67  		}
  68  	}
  69  }
  70  
  71  // TestRuleError tests the error output for the RuleError type.
  72  func TestRuleError(t *testing.T) {
  73  	tests := []struct {
  74  		in   RuleError
  75  		want string
  76  	}{
  77  		{
  78  			RuleError{Description: "duplicate block"},
  79  			"duplicate block",
  80  		},
  81  		{
  82  			RuleError{Description: "human-readable error"},
  83  			"human-readable error",
  84  		},
  85  	}
  86  	t.Logf("Running %d tests", len(tests))
  87  	for i, test := range tests {
  88  		result := test.in.Error()
  89  		if result != test.want {
  90  			t.Errorf("Error #%d\n got: %s want: %s", i, result,
  91  				test.want,
  92  			)
  93  			continue
  94  		}
  95  	}
  96  }
  97  
  98  // TestDeploymentError tests the stringized output for the DeploymentError type.
  99  func TestDeploymentError(t *testing.T) {
 100  	t.Parallel()
 101  	tests := []struct {
 102  		in   DeploymentError
 103  		want string
 104  	}{
 105  		{
 106  			DeploymentError(0),
 107  			"deployment ID 0 does not exist",
 108  		},
 109  		{
 110  			DeploymentError(10),
 111  			"deployment ID 10 does not exist",
 112  		},
 113  		{
 114  			DeploymentError(123),
 115  			"deployment ID 123 does not exist",
 116  		},
 117  	}
 118  	t.Logf("Running %d tests", len(tests))
 119  	for i, test := range tests {
 120  		result := test.in.Error()
 121  		if result != test.want {
 122  			t.Errorf("Error #%d\n got: %s want: %s", i, result,
 123  				test.want,
 124  			)
 125  			continue
 126  		}
 127  	}
 128  }
 129