error_test.go raw

   1  package waddrmgr_test
   2  
   3  import (
   4  	"errors"
   5  	"fmt"
   6  	"testing"
   7  	
   8  	"github.com/p9c/p9/pkg/waddrmgr"
   9  )
  10  
  11  // TestErrorCodeStringer tests the stringized output for the ErrorCode type.
  12  func TestErrorCodeStringer(t *testing.T) {
  13  	tests := []struct {
  14  		in   waddrmgr.ErrorCode
  15  		want string
  16  	}{
  17  		{waddrmgr.ErrDatabase, "ErrDatabase"},
  18  		{waddrmgr.ErrUpgrade, "ErrUpgrade"},
  19  		{waddrmgr.ErrKeyChain, "ErrKeyChain"},
  20  		{waddrmgr.ErrCrypto, "ErrCrypto"},
  21  		{waddrmgr.ErrInvalidKeyType, "ErrInvalidKeyType"},
  22  		{waddrmgr.ErrNoExist, "ErrNoExist"},
  23  		{waddrmgr.ErrAlreadyExists, "ErrAlreadyExists"},
  24  		{waddrmgr.ErrCoinTypeTooHigh, "ErrCoinTypeTooHigh"},
  25  		{waddrmgr.ErrAccountNumTooHigh, "ErrAccountNumTooHigh"},
  26  		{waddrmgr.ErrLocked, "ErrLocked"},
  27  		{waddrmgr.ErrWatchingOnly, "ErrWatchingOnly"},
  28  		{waddrmgr.ErrInvalidAccount, "ErrInvalidAccount"},
  29  		{waddrmgr.ErrAddressNotFound, "ErrAddressNotFound"},
  30  		{waddrmgr.ErrAccountNotFound, "ErrAccountNotFound"},
  31  		{waddrmgr.ErrDuplicateAddress, "ErrDuplicateAddress"},
  32  		{waddrmgr.ErrDuplicateAccount, "ErrDuplicateAccount"},
  33  		{waddrmgr.ErrTooManyAddresses, "ErrTooManyAddresses"},
  34  		{waddrmgr.ErrWrongPassphrase, "ErrWrongPassphrase"},
  35  		{waddrmgr.ErrWrongNet, "ErrWrongNet"},
  36  		{waddrmgr.ErrCallBackBreak, "ErrCallBackBreak"},
  37  		{waddrmgr.ErrEmptyPassphrase, "ErrEmptyPassphrase"},
  38  		{0xffff, "Unknown ErrorCode (65535)"},
  39  	}
  40  	t.Logf("Running %d tests", len(tests))
  41  	for i, test := range tests {
  42  		result := test.in.String()
  43  		if result != test.want {
  44  			t.Errorf("String #%d\ngot: %s\nwant: %s", i, result,
  45  				test.want,
  46  			)
  47  			continue
  48  		}
  49  	}
  50  }
  51  
  52  // TestManagerError tests the error output for the ManagerError type.
  53  func TestManagerError(t *testing.T) {
  54  	tests := []struct {
  55  		in   waddrmgr.ManagerError
  56  		want string
  57  	}{
  58  		// Manager level error.
  59  		{
  60  			waddrmgr.ManagerError{Description: "human-readable error"},
  61  			"human-readable error",
  62  		},
  63  		// Encapsulated database error.
  64  		{
  65  			waddrmgr.ManagerError{
  66  				Description: "failed to store master private " +
  67  					"key parameters",
  68  				ErrorCode: waddrmgr.ErrDatabase,
  69  				Err:       fmt.Errorf("underlying db error"),
  70  			},
  71  			"failed to store master private key parameters: " +
  72  				"underlying db error",
  73  		},
  74  		// Encapsulated key chain error.
  75  		{
  76  			waddrmgr.ManagerError{
  77  				Description: "failed to derive extended key " +
  78  					"branch 0",
  79  				ErrorCode: waddrmgr.ErrKeyChain,
  80  				Err:       fmt.Errorf("underlying error"),
  81  			},
  82  			"failed to derive extended key branch 0: underlying " +
  83  				"error",
  84  		},
  85  		// Encapsulated crypto error.
  86  		{
  87  			waddrmgr.ManagerError{
  88  				Description: "failed to decrypt account 0 " +
  89  					"private key",
  90  				ErrorCode: waddrmgr.ErrCrypto,
  91  				Err:       fmt.Errorf("underlying error"),
  92  			},
  93  			"failed to decrypt account 0 private key: underlying " +
  94  				"error",
  95  		},
  96  	}
  97  	t.Logf("Running %d tests", len(tests))
  98  	for i, test := range tests {
  99  		result := test.in.Error()
 100  		if result != test.want {
 101  			t.Errorf("Error #%d\ngot: %s\nwant: %s", i, result,
 102  				test.want,
 103  			)
 104  			continue
 105  		}
 106  	}
 107  }
 108  
 109  // TestIsError tests the IsError func.
 110  func TestIsError(t *testing.T) {
 111  	tests := []struct {
 112  		err  error
 113  		code waddrmgr.ErrorCode
 114  		exp  bool
 115  	}{
 116  		{
 117  			err: waddrmgr.ManagerError{
 118  				ErrorCode: waddrmgr.ErrDatabase,
 119  			},
 120  			code: waddrmgr.ErrDatabase,
 121  			exp:  true,
 122  		},
 123  		{
 124  			// package should never return *ManagerError
 125  			err: &waddrmgr.ManagerError{
 126  				ErrorCode: waddrmgr.ErrDatabase,
 127  			},
 128  			code: waddrmgr.ErrDatabase,
 129  			exp:  false,
 130  		},
 131  		{
 132  			err: waddrmgr.ManagerError{
 133  				ErrorCode: waddrmgr.ErrCrypto,
 134  			},
 135  			code: waddrmgr.ErrDatabase,
 136  			exp:  false,
 137  		},
 138  		{
 139  			err:  errors.New("not a ManagerError"),
 140  			code: waddrmgr.ErrDatabase,
 141  			exp:  false,
 142  		},
 143  	}
 144  	for i, test := range tests {
 145  		got := waddrmgr.IsError(test.err, test.code)
 146  		if got != test.exp {
 147  			t.Errorf("Test %d: got %v expected %v", i, got, test.exp)
 148  		}
 149  	}
 150  }
 151