github.com/decred/dcrlnd@v0.7.6/chanacceptor/rpcacceptor_test.go (about) 1 package chanacceptor 2 3 import ( 4 "errors" 5 "strings" 6 "testing" 7 8 "github.com/decred/dcrd/chaincfg/v3" 9 "github.com/decred/dcrd/dcrutil/v4" 10 "github.com/decred/dcrlnd/input" 11 "github.com/decred/dcrlnd/lnrpc" 12 "github.com/decred/dcrlnd/lnwallet/chancloser" 13 "github.com/decred/dcrlnd/lnwire" 14 "github.com/stretchr/testify/require" 15 ) 16 17 // TestValidateAcceptorResponse test validation of acceptor responses. 18 func TestValidateAcceptorResponse(t *testing.T) { 19 var ( 20 customError = errors.New("custom error") 21 validAddr = "TsZwLVNTYxwcT5tgcqMzGUujjPydy5nGMk2" 22 addr, _ = chancloser.ParseUpfrontShutdownAddress( 23 validAddr, chaincfg.TestNet3Params(), 24 ) 25 ) 26 27 tests := []struct { 28 name string 29 dustLimit dcrutil.Amount 30 response *lnrpc.ChannelAcceptResponse 31 accept bool 32 acceptorErr error 33 error error 34 shutdown lnwire.DeliveryAddress 35 }{ 36 { 37 name: "accepted with error", 38 response: &lnrpc.ChannelAcceptResponse{ 39 Accept: true, 40 Error: customError.Error(), 41 }, 42 accept: false, 43 acceptorErr: errChannelRejected, 44 error: errAcceptWithError, 45 }, 46 { 47 name: "custom error too long", 48 response: &lnrpc.ChannelAcceptResponse{ 49 Accept: false, 50 Error: strings.Repeat(" ", maxErrorLength+1), 51 }, 52 accept: false, 53 acceptorErr: errChannelRejected, 54 error: errCustomLength, 55 }, 56 { 57 name: "accepted", 58 response: &lnrpc.ChannelAcceptResponse{ 59 Accept: true, 60 UpfrontShutdown: validAddr, 61 }, 62 accept: true, 63 acceptorErr: nil, 64 error: nil, 65 shutdown: addr, 66 }, 67 { 68 name: "rejected with error", 69 response: &lnrpc.ChannelAcceptResponse{ 70 Accept: false, 71 Error: customError.Error(), 72 }, 73 accept: false, 74 acceptorErr: customError, 75 error: nil, 76 }, 77 { 78 name: "rejected with no error", 79 response: &lnrpc.ChannelAcceptResponse{ 80 Accept: false, 81 }, 82 accept: false, 83 acceptorErr: errChannelRejected, 84 error: nil, 85 }, 86 { 87 name: "invalid upfront shutdown", 88 response: &lnrpc.ChannelAcceptResponse{ 89 Accept: true, 90 UpfrontShutdown: "invalid addr", 91 }, 92 accept: false, 93 acceptorErr: errChannelRejected, 94 error: errInvalidUpfrontShutdown, 95 }, 96 { 97 name: "reserve too low", 98 dustLimit: 100, 99 response: &lnrpc.ChannelAcceptResponse{ 100 Accept: true, 101 ReserveAtoms: 10, 102 }, 103 accept: false, 104 acceptorErr: errChannelRejected, 105 error: errInsufficientReserve, 106 }, 107 { 108 name: "max htlcs too high", 109 dustLimit: 100, 110 response: &lnrpc.ChannelAcceptResponse{ 111 Accept: true, 112 MaxHtlcCount: 1 + input.MaxHTLCNumber/2, 113 }, 114 accept: false, 115 acceptorErr: errChannelRejected, 116 error: errMaxHtlcTooHigh, 117 }, 118 } 119 120 for _, test := range tests { 121 test := test 122 123 t.Run(test.name, func(t *testing.T) { 124 // Create an acceptor, everything can be nil because 125 // we just need the params. 126 acceptor := NewRPCAcceptor( 127 nil, nil, 0, chaincfg.TestNet3Params(), nil, 128 ) 129 130 accept, acceptErr, shutdown, err := acceptor.validateAcceptorResponse( 131 test.dustLimit, test.response, 132 ) 133 require.Equal(t, test.accept, accept) 134 require.Equal(t, test.acceptorErr, acceptErr) 135 require.Equal(t, test.error, err) 136 require.Equal(t, test.shutdown, shutdown) 137 }) 138 } 139 }