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  }