github.com/vmware/go-vcloud-director/v2@v2.24.0/govcd/nsxv_dhcprelay_test.go (about)

     1  //go:build nsxv || functional || ALL
     2  
     3  /*
     4   * Copyright 2019 VMware, Inc.  All rights reserved.  Licensed under the Apache v2 License.
     5   */
     6  
     7  package govcd
     8  
     9  import (
    10  	"github.com/vmware/go-vcloud-director/v2/types/v56"
    11  	. "gopkg.in/check.v1"
    12  )
    13  
    14  // Test_NsxvDhcpRelay tests out Edge gateway DHCP relay configuration settings. It does the following:
    15  // 1. Creates an IP set to ensure it can be used in DHCP relay configuration settings.
    16  // 2. Creates a DHCP relay configuration with multiple objects and checks. Adds a task for cleanup.
    17  // Note. Because DHCP relay configuration is not an object, but a setting of edge gateway - there is
    18  // nothing to delete
    19  // 3. Resets the DHCP relay configuration and checks that it was removed
    20  // 4. Creates another DHCP relay with different configuration (using only IP sets) and manually
    21  // specifying IP address on edge gateway interface (vNic)
    22  // 6. Resets the DHCP relay configuration and checks that it was removed
    23  func (vcd *TestVCD) Test_NsxvDhcpRelay(check *C) {
    24  	if vcd.config.VCD.EdgeGateway == "" {
    25  		check.Skip("Skipping test because no edge gateway given")
    26  	}
    27  
    28  	edge, err := vcd.vdc.GetEdgeGatewayByName(vcd.config.VCD.EdgeGateway, false)
    29  	check.Assert(err, IsNil)
    30  	check.Assert(edge.EdgeGateway.Name, Equals, vcd.config.VCD.EdgeGateway)
    31  
    32  	// Setup IP set for testing purposes and add it to cleanup list
    33  	createdIpSet, err := testCreateIpSet("dhcp-relay-test", vcd.vdc)
    34  	check.Assert(err, IsNil)
    35  	parentEntity := vcd.org.Org.Name + "|" + vcd.vdc.Vdc.Name
    36  	AddToCleanupList(createdIpSet.Name, "ipSet", parentEntity, check.TestName())
    37  
    38  	// Lookup vNic index for our org network
    39  	vNicIndex, _, err := edge.GetAnyVnicIndexByNetworkName(vcd.config.VCD.Network.Net1)
    40  	check.Assert(err, IsNil)
    41  
    42  	dhcpRelayConfig := &types.EdgeDhcpRelay{
    43  		RelayServer: &types.EdgeDhcpRelayServer{
    44  			IpAddress:        []string{"1.1.1.1"},
    45  			Fqdns:            []string{"servergroups.domainname.com", "servergroups.otherdomainname.com"},
    46  			GroupingObjectId: []string{createdIpSet.ID},
    47  		},
    48  		RelayAgents: &types.EdgeDhcpRelayAgents{
    49  			Agents: []types.EdgeDhcpRelayAgent{
    50  				types.EdgeDhcpRelayAgent{
    51  					VnicIndex: vNicIndex,
    52  				},
    53  			},
    54  		},
    55  	}
    56  
    57  	createdRelayConfig, err := edge.UpdateDhcpRelay(dhcpRelayConfig)
    58  	check.Assert(err, IsNil)
    59  
    60  	parentEntity = vcd.org.Org.Name + "|" + vcd.vdc.Vdc.Name + "|" + vcd.config.VCD.EdgeGateway
    61  	// DHCP relay config is being prepended (added to beginning) of cleanup list because it must be
    62  	// delete first so that above created dependent IP sets can be cleaned up when their turn comes
    63  	PrependToCleanupList(check.TestName(), "dhcpRelayConfig", parentEntity, check.TestName())
    64  
    65  	// Cache Gateway auto-assigned address to try specifying it afterwards
    66  	vNicDefaultGateway := createdRelayConfig.RelayAgents.Agents[0].GatewayInterfaceAddress
    67  
    68  	readRelayConfig, err := edge.GetDhcpRelay()
    69  	check.Assert(err, IsNil)
    70  	check.Assert(readRelayConfig, DeepEquals, createdRelayConfig)
    71  
    72  	// Patch auto-assigned IP so that structure comparison works
    73  	dhcpRelayConfig.RelayAgents.Agents[0].GatewayInterfaceAddress = readRelayConfig.RelayAgents.Agents[0].GatewayInterfaceAddress
    74  	check.Assert(readRelayConfig.RelayServer, DeepEquals, dhcpRelayConfig.RelayServer)
    75  	check.Assert(readRelayConfig.RelayAgents, DeepEquals, dhcpRelayConfig.RelayAgents)
    76  
    77  	// Reset DHCP relay and ensure no settings are present
    78  	err = edge.ResetDhcpRelay()
    79  	check.Assert(err, IsNil)
    80  	read, err := edge.GetDhcpRelay()
    81  	check.Assert(err, IsNil)
    82  	check.Assert(read.RelayServer, IsNil)
    83  	check.Assert(read.RelayAgents, IsNil)
    84  
    85  	// Second attempt - insert gateway interface IP address during creation to prevent
    86  	// auto-assignment
    87  	dhcpRelayConfig.RelayAgents.Agents[0].GatewayInterfaceAddress = vNicDefaultGateway
    88  	// Remove IP addresses and FQDNs to only use IP sets for specifying DHCP servers addresses
    89  	dhcpRelayConfig.RelayServer.IpAddress = nil
    90  	dhcpRelayConfig.RelayServer.Fqdns = nil
    91  
    92  	createdRelayConfig2, err := edge.UpdateDhcpRelay(dhcpRelayConfig)
    93  	check.Assert(err, IsNil)
    94  	readRelayConfig2, err := edge.GetDhcpRelay()
    95  	check.Assert(err, IsNil)
    96  	check.Assert(readRelayConfig2, DeepEquals, createdRelayConfig2)
    97  
    98  	// Reset DHCP relay and ensure no settings are present
    99  	err = edge.ResetDhcpRelay()
   100  	check.Assert(err, IsNil)
   101  	read, err = edge.GetDhcpRelay()
   102  	check.Assert(err, IsNil)
   103  	check.Assert(read.RelayServer, IsNil)
   104  	check.Assert(read.RelayAgents, IsNil)
   105  }