github.com/decred/dcrlnd@v0.7.6/lnwallet/chancloser/chancloser_test.go (about)

     1  package chancloser
     2  
     3  import (
     4  	"crypto/rand"
     5  	"testing"
     6  
     7  	"github.com/decred/dcrlnd/lnwire"
     8  )
     9  
    10  // randDeliveryAddress generates a random delivery address for testing.
    11  func randDeliveryAddress(t *testing.T) lnwire.DeliveryAddress {
    12  	// Generate an address of maximum length.
    13  	da := lnwire.DeliveryAddress(make([]byte, 34))
    14  
    15  	_, err := rand.Read(da)
    16  	if err != nil {
    17  		t.Fatalf("cannot generate random address: %v", err)
    18  	}
    19  
    20  	return da
    21  }
    22  
    23  // TestMaybeMatchScript tests that the maybeMatchScript errors appropriately
    24  // when an upfront shutdown script is set and the script provided does not
    25  // match, and does not error in any other case.
    26  func TestMaybeMatchScript(t *testing.T) {
    27  	addr1 := randDeliveryAddress(t)
    28  	addr2 := randDeliveryAddress(t)
    29  
    30  	tests := []struct {
    31  		name           string
    32  		shutdownScript lnwire.DeliveryAddress
    33  		upfrontScript  lnwire.DeliveryAddress
    34  		expectedErr    error
    35  	}{
    36  		{
    37  			name:           "no upfront shutdown set, script ok",
    38  			shutdownScript: addr1,
    39  			upfrontScript:  []byte{},
    40  			expectedErr:    nil,
    41  		},
    42  		{
    43  			name:           "upfront shutdown set, script ok",
    44  			shutdownScript: addr1,
    45  			upfrontScript:  addr1,
    46  			expectedErr:    nil,
    47  		},
    48  		{
    49  			name:           "upfront shutdown set, script not ok",
    50  			shutdownScript: addr1,
    51  			upfrontScript:  addr2,
    52  			expectedErr:    ErrUpfrontShutdownScriptMismatch,
    53  		},
    54  		{
    55  			name:           "nil shutdown and empty upfront",
    56  			shutdownScript: nil,
    57  			upfrontScript:  []byte{},
    58  			expectedErr:    nil,
    59  		},
    60  	}
    61  
    62  	for _, test := range tests {
    63  		test := test
    64  
    65  		t.Run(test.name, func(t *testing.T) {
    66  			err := maybeMatchScript(
    67  				func() error { return nil }, test.upfrontScript,
    68  				test.shutdownScript,
    69  			)
    70  
    71  			if err != test.expectedErr {
    72  				t.Fatalf("Error: %v, expected error: %v", err, test.expectedErr)
    73  			}
    74  		})
    75  	}
    76  }