github.com/btcsuite/btcd@v0.24.0/blockchain/error_test.go (about)

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