...

Source file src/edge-infra.dev/pkg/edge/api/utils/terminal_helper_test.go

Documentation: edge-infra.dev/pkg/edge/api/utils

     1  package utils
     2  
     3  import (
     4  	"fmt"
     5  	"testing"
     6  
     7  	"github.com/stretchr/testify/assert"
     8  
     9  	"edge-infra.dev/pkg/edge/api/graph/model"
    10  )
    11  
    12  var (
    13  	terminalID               = "efd9fae5-dddf-4c98-8a4c-5ddabecc3f05"
    14  	clusterEdgeID            = "d5354303-9d3d-4411-a638-dce63c4c2b9c"
    15  	lane                     = "lane1"
    16  	terminalRoleControlPlane = model.TerminalRoleTypeControlplane
    17  	terminalClassServer      = model.TerminalClassTypeServer
    18  	terminalDiscoverDisksAll = model.TerminalDiscoverDisksTypeAll
    19  	terminalExistingEfiPart  = "/dev/sda1"
    20  	terminalBootDisk         = "/dev/sdb"
    21  	terminalSwapEnabled      = false
    22  	clusterName              = "testing-cluster1"
    23  	hostname                 = "gas-station-terminal1"
    24  
    25  	terminalIfaceID = "79d63a8c-a6a8-4a3e-8ec6-d860d5499304"
    26  	macAddress      = "72:46:16:ee:5c:5c"
    27  	dhcp4True       = true
    28  	dhcp4False      = false
    29  	dhcp6True       = true
    30  	dhcp6False      = false
    31  	gateway4        = "129.164.1.112"
    32  	gateway6        = "58c7:0b4c:0e7b:889c:d591:ebb6:5017:76d3"
    33  
    34  	terminalAddressID = "499d02af-e528-48c7-8d98-4f787a4d8087"
    35  	ipv4              = "231.207.251.140"
    36  	familyInet        = model.InetTypeInet
    37  	familyInet6       = model.InetTypeInet6
    38  
    39  	ipv6        = "3899:217d:ff5f:8048:6722:57a7:5cf3:959f"
    40  	prefixLen24 = 24
    41  )
    42  
    43  func TestValidateTerminal(t *testing.T) {
    44  	terminal := CreateTerminalModel(terminalID, clusterEdgeID, &lane, terminalRoleControlPlane, &terminalClassServer, &terminalDiscoverDisksAll, &terminalBootDisk, clusterName, hostname, &terminalExistingEfiPart, terminalSwapEnabled)
    45  	err := ValidateTerminal(&terminal)
    46  	assert.NoError(t, err)
    47  }
    48  
    49  func TestValidateInterfaceInputMacAddressError(t *testing.T) {
    50  	invalidMac := "INVALID"
    51  	ifaceCreate := &model.TerminalInterfaceCreateInput{
    52  		MacAddress: invalidMac,
    53  	}
    54  	err := ValidateTerminalInterfaceCreateInput(ifaceCreate)
    55  	assert.Error(t, err)
    56  }
    57  
    58  func TestValidateTerminalIfaceDhcp4True(t *testing.T) {
    59  	// gateway4 and IPv4 not provided
    60  	iface := CreateTerminalIfaceModel(terminalIfaceID, macAddress, dhcp4True, dhcp6True, nil, nil, terminalID)
    61  	err := ValidateTerminalIface(&iface)
    62  	assert.NoError(t, err)
    63  
    64  	// gateway4 provided
    65  	iface.Gateway4 = &gateway4
    66  	err = ValidateTerminalIface(&iface)
    67  	assert.NoError(t, err)
    68  
    69  	// IPv4 provided
    70  	address := CreateTerminalAddressModel(terminalAddressID, &ipv4, prefixLen24, familyInet, terminalIfaceID)
    71  	iface.Addresses = append(iface.Addresses, &address)
    72  	err = ValidateTerminalIface(&iface)
    73  	assert.NoError(t, err)
    74  }
    75  
    76  func TestValidateTerminalIfaceDhcp4False(t *testing.T) {
    77  	// gateway4 must be provided
    78  	iface := CreateTerminalIfaceModel(terminalIfaceID, macAddress, dhcp4False, dhcp6True, &gateway4, nil, terminalID)
    79  	address := CreateTerminalAddressModel(terminalAddressID, &ipv4, prefixLen24, familyInet, terminalIfaceID)
    80  	iface.Addresses = append(iface.Addresses, &address)
    81  	err := ValidateTerminalIface(&iface)
    82  	assert.NoError(t, err)
    83  }
    84  
    85  func TestValidateTerminalIfaceDhcp4FalseError(t *testing.T) {
    86  	// no gateway4
    87  	iface := CreateTerminalIfaceModel(terminalIfaceID, macAddress, dhcp4False, dhcp6True, nil, nil, terminalID)
    88  
    89  	// invalid gateway4
    90  	invalidGateway4 := "invalidGateway4"
    91  	iface.Gateway4 = &invalidGateway4
    92  	err := ValidateTerminalIface(&iface)
    93  	assert.Error(t, err)
    94  	expectedErrMsg := fmt.Sprintf("invalid gateway4 address: %s", invalidGateway4)
    95  	assert.Equal(t, expectedErrMsg, err.Error())
    96  }
    97  
    98  func TestValidateTerminalIfaceDhcp6True(t *testing.T) {
    99  	// gateway6 not provided
   100  	iface := CreateTerminalIfaceModel(terminalIfaceID, macAddress, dhcp4True, dhcp6True, nil, nil, terminalID)
   101  	err := ValidateTerminalIface(&iface)
   102  	assert.NoError(t, err)
   103  
   104  	// gateway6 provided
   105  	iface.Gateway6 = &gateway6
   106  	err = ValidateTerminalIface(&iface)
   107  	assert.NoError(t, err)
   108  
   109  	// IPv6 provided
   110  	address := CreateTerminalAddressModel(terminalAddressID, &ipv6, prefixLen24, familyInet6, terminalIfaceID)
   111  	iface.Addresses = append(iface.Addresses, &address)
   112  	err = ValidateTerminalIface(&iface)
   113  	assert.NoError(t, err)
   114  }
   115  
   116  func TestValidateTerminalIfaceDhcp6False(t *testing.T) {
   117  	// gateway6 not provided
   118  	iface := CreateTerminalIfaceModel(terminalIfaceID, macAddress, dhcp4True, dhcp6False, nil, nil, terminalID)
   119  	err := ValidateTerminalIface(&iface)
   120  	assert.NoError(t, err)
   121  
   122  	// gateway6 provided
   123  	iface.Gateway6 = &gateway6
   124  	err = ValidateTerminalIface(&iface)
   125  	assert.NoError(t, err)
   126  
   127  	// IPv6 provided
   128  	address := CreateTerminalAddressModel(terminalAddressID, &ipv6, prefixLen24, familyInet6, terminalIfaceID)
   129  	iface.Addresses = append(iface.Addresses, &address)
   130  	err = ValidateTerminalIface(&iface)
   131  	assert.NoError(t, err)
   132  }
   133  
   134  func TestValidateTerminalAddress(t *testing.T) {
   135  	// IPv4
   136  	address := CreateTerminalAddressModel(terminalAddressID, &ipv4, prefixLen24, familyInet, terminalIfaceID)
   137  	err := ValidateTerminalAddress(&address)
   138  	assert.NoError(t, err)
   139  
   140  	// IPv6
   141  	address = CreateTerminalAddressModel(terminalAddressID, &ipv6, prefixLen24, familyInet6, terminalIfaceID)
   142  	err = ValidateTerminalAddress(&address)
   143  	assert.NoError(t, err)
   144  }
   145  
   146  func TestValidateTerminalAddressIpError(t *testing.T) {
   147  	invalidIP := "invalidIP"
   148  	address := CreateTerminalAddressModel(terminalAddressID, &invalidIP, prefixLen24, familyInet, terminalIfaceID)
   149  	err := ValidateTerminalAddress(&address)
   150  	assert.Error(t, err)
   151  	expectedErrMsg := fmt.Sprintf("invalid address ip: %s", invalidIP)
   152  	assert.Equal(t, expectedErrMsg, err.Error())
   153  }
   154  
   155  func TestValidateTerminalAddressCidrError(t *testing.T) {
   156  	invalidPrefixLen := -12
   157  	address := CreateTerminalAddressModel(terminalAddressID, &ipv4, invalidPrefixLen, familyInet, terminalIfaceID)
   158  	err := ValidateTerminalAddress(&address)
   159  	assert.Error(t, err)
   160  	expectedErrMsg := fmt.Sprintf("invalid prefix: %d", invalidPrefixLen)
   161  	assert.Equal(t, expectedErrMsg, err.Error())
   162  }
   163  
   164  func TestMatchMacAddresses(t *testing.T) {
   165  	addrID, ip, ifaceID, terminalID, clusterEdgeID := "1d88738d-dae1-4bfe-839b-f31bc3809606", "83.25.121.197", "ff674589-500a-4a27-b42f-5cb2478a9cfe",
   166  		"64cfc839-d7b6-4d2b-8eee-210873ba56c9", "4f725ad2-1b1e-43f8-8a3f-38bbd0892571"
   167  	gateway4, terminalClass, mac := "223.54.203.117", model.TerminalClassTypeServer, "56:21:a1:f2:63:bf"
   168  	addr := CreateTerminalAddressModel(addrID, &ip, 16, model.InetTypeInet, ifaceID)
   169  	iface := CreateTerminalIfaceModel(ifaceID, mac, false, true, &gateway4, nil, terminalID)
   170  	iface.Addresses = []*model.TerminalAddress{&addr}
   171  	terminalDiskType := model.TerminalDiscoverDisksTypeEmpty
   172  	terminal := CreateTerminalModel(terminalID, clusterEdgeID, nil, model.TerminalRoleTypeControlplane, &terminalClass, &terminalDiskType, &terminalBootDisk, "test", "hostname", &terminalExistingEfiPart, terminalSwapEnabled)
   173  	terminal.Interfaces = []*model.TerminalInterface{&iface}
   174  
   175  	macs := []string{"66:96:83:7f:8c:09", mac}
   176  	macMatch, err := MatchTerminalMacAddresses(macs, &terminal)
   177  	assert.NoError(t, err)
   178  	assert.True(t, macMatch)
   179  }
   180  
   181  func TestConvertMacAddresses(t *testing.T) {
   182  	macs := []string{"ce:d7:2e:27:b9:66", "12-6f-cb-16-62-f4", "9A-80-53-6D-C0-1F"}
   183  	normMacs := []string{"ce:d7:2e:27:b9:66", "12:6f:cb:16:62:f4", "9a:80:53:6d:c0:1f"}
   184  	normOutput, err := FormatMacAddresses(macs)
   185  	assert.NoError(t, err)
   186  	assert.Equal(t, normMacs, normOutput)
   187  
   188  	nilOutput, err := FormatMacAddresses(nil)
   189  	assert.NoError(t, err)
   190  	assert.Nil(t, nilOutput)
   191  }
   192  
   193  func TestConvertMacAddressesError(t *testing.T) {
   194  	macs := []string{"ce:d7:2e:27:b9:66", "12:6fcb:16:62"}
   195  	_, err := FormatMacAddresses(macs)
   196  	assert.EqualError(t, err, "address 12:6fcb:16:62: invalid MAC address")
   197  
   198  	macs = []string{"12:6f:cb:16:f4:6x"}
   199  	_, err = FormatMacAddresses(macs)
   200  	assert.EqualError(t, err, "address 12:6f:cb:16:f4:6x: invalid MAC address")
   201  }
   202  

View as plain text