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 }