/ chanacceptor / rpcacceptor_test.go
rpcacceptor_test.go
  1  package chanacceptor
  2  
  3  import (
  4  	"errors"
  5  	"strings"
  6  	"testing"
  7  
  8  	"github.com/btcsuite/btcd/btcutil"
  9  	"github.com/btcsuite/btcd/chaincfg"
 10  	"github.com/lightningnetwork/lnd/input"
 11  	"github.com/lightningnetwork/lnd/lnrpc"
 12  	"github.com/lightningnetwork/lnd/lnwallet/chancloser"
 13  	"github.com/lightningnetwork/lnd/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   = "bcrt1qwrmq9uca0t3dy9t9wtuq5tm4405r7tfzyqn9pp"
 22  		addr, _     = chancloser.ParseUpfrontShutdownAddress(
 23  			validAddr, &chaincfg.RegressionNetParams,
 24  		)
 25  	)
 26  
 27  	tests := []struct {
 28  		name        string
 29  		dustLimit   btcutil.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  				ReserveSat: 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.RegressionNetParams, 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  }