github.com/vmware/go-vcloud-director/v2@v2.24.0/govcd/externalnetwork_test.go (about) 1 //go:build extnetwork || network || 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 "fmt" 11 "sort" 12 13 . "gopkg.in/check.v1" 14 15 "github.com/vmware/go-vcloud-director/v2/types/v56" 16 ) 17 18 // Retrieves an external network and checks that its contents are filled as expected 19 func (vcd *TestVCD) Test_ExternalNetworkGetByName(check *C) { 20 fmt.Printf("Running: %s\n", check.TestName()) 21 if vcd.skipAdminTests { 22 check.Skip(fmt.Sprintf(TestRequiresSysAdminPrivileges, check.TestName())) 23 } 24 25 externalNetwork, err := vcd.client.GetExternalNetworkByName(vcd.config.VCD.ExternalNetwork) 26 check.Assert(err, IsNil) 27 check.Assert(externalNetwork, NotNil) 28 29 check.Assert(externalNetwork.ExternalNetwork.Name, Equals, vcd.config.VCD.ExternalNetwork) 30 } 31 32 // Tests System function Delete by creating external network and 33 // deleting it after. 34 func (vcd *TestVCD) Test_ExternalNetworkDelete(check *C) { 35 fmt.Printf("Running: %s\n", check.TestName()) 36 37 skippingReason, externalNetwork, task, err := vcd.testCreateExternalNetwork(check.TestName(), TestDeleteExternalNetwork, "") 38 if skippingReason != "" { 39 check.Skip(skippingReason) 40 } 41 42 check.Assert(err, IsNil) 43 AddToCleanupList(externalNetwork.Name, "externalNetwork", "", "Test_ExternalNetworkDelete") 44 check.Assert(task.Task, Not(Equals), types.Task{}) 45 46 err = task.WaitTaskCompletion() 47 check.Assert(err, IsNil) 48 49 createdExternalNetwork, err := vcd.client.GetExternalNetworkByName(externalNetwork.Name) 50 check.Assert(err, IsNil) 51 check.Assert(createdExternalNetwork, NotNil) 52 53 err = createdExternalNetwork.DeleteWait() 54 check.Assert(err, IsNil) 55 56 // check through existing external networks 57 _, err = vcd.client.GetExternalNetworkByName(externalNetwork.Name) 58 check.Assert(err, NotNil) 59 } 60 61 // Retrieves an external network and checks that its contents are filled as expected 62 func (vcd *TestVCD) Test_GetExternalNetwork(check *C) { 63 fmt.Printf("Running: %s\n", check.TestName()) 64 if vcd.skipAdminTests { 65 check.Skip(fmt.Sprintf(TestRequiresSysAdminPrivileges, check.TestName())) 66 } 67 networkName := vcd.config.VCD.ExternalNetwork 68 if networkName == "" { 69 check.Skip("No external network provided") 70 } 71 externalNetwork, err := vcd.client.GetExternalNetworkByName(networkName) 72 check.Assert(err, IsNil) 73 check.Assert(externalNetwork, NotNil) 74 LogExternalNetwork(*externalNetwork.ExternalNetwork) 75 check.Assert(externalNetwork.ExternalNetwork.HREF, Not(Equals), "") 76 check.Assert(externalNetwork.ExternalNetwork.Name, Equals, networkName) 77 check.Assert(externalNetwork.ExternalNetwork.Type, Equals, types.MimeExternalNetwork) 78 } 79 80 func (vcd *TestVCD) Test_CreateExternalNetwork(check *C) { 81 fmt.Printf("Running: %s\n", check.TestName()) 82 83 dnsSuffix := "some.net" 84 skippingReason, externalNetwork, task, err := vcd.testCreateExternalNetwork(check.TestName(), TestCreateExternalNetwork, dnsSuffix) 85 if skippingReason != "" { 86 check.Skip(skippingReason) 87 } 88 89 check.Assert(err, IsNil) 90 check.Assert(task.Task, Not(Equals), types.Task{}) 91 92 AddToCleanupList(externalNetwork.Name, "externalNetwork", "", "Test_CreateExternalNetwork") 93 err = task.WaitTaskCompletion() 94 check.Assert(err, IsNil) 95 96 newExternalNetwork, err := vcd.client.GetExternalNetworkByName(TestCreateExternalNetwork) 97 check.Assert(err, IsNil) 98 check.Assert(newExternalNetwork, NotNil) 99 check.Assert(newExternalNetwork.ExternalNetwork.Name, Equals, TestCreateExternalNetwork) 100 101 ipScope := newExternalNetwork.ExternalNetwork.Configuration.IPScopes.IPScope 102 103 // Sort returned IP scopes by gateway because API is not guaranteed to return it in the same 104 // order 105 sort.SliceStable(ipScope, func(i, j int) bool { 106 return ipScope[i].Gateway < ipScope[j].Gateway 107 }) 108 109 check.Assert(len(ipScope), Equals, 2) 110 // Check IPScope 1 111 check.Assert(ipScope[0].Gateway, Equals, "192.168.201.1") 112 check.Assert(ipScope[0].Netmask, Equals, "255.255.255.0") 113 check.Assert(ipScope[0].DNS1, Equals, "192.168.202.253") 114 check.Assert(ipScope[0].DNS2, Equals, "192.168.202.254") 115 check.Assert(ipScope[0].DNSSuffix, Equals, dnsSuffix) 116 // Check IPScope 2 117 check.Assert(ipScope[1].Gateway, Equals, "192.168.231.1") 118 check.Assert(ipScope[1].Netmask, Equals, "255.255.255.0") 119 check.Assert(ipScope[1].DNS1, Equals, "192.168.232.253") 120 check.Assert(ipScope[1].DNS2, Equals, "192.168.232.254") 121 check.Assert(ipScope[1].DNSSuffix, Equals, dnsSuffix) 122 123 // Sort IP ranges and check them on IPScope 0 124 sort.SliceStable(ipScope[0].IPRanges.IPRange, func(i, j int) bool { 125 return ipScope[0].IPRanges.IPRange[i].StartAddress < ipScope[0].IPRanges.IPRange[j].StartAddress 126 }) 127 128 check.Assert(len(ipScope[0].IPRanges.IPRange), Equals, 2) 129 ipRange1 := ipScope[0].IPRanges.IPRange[1] 130 check.Assert(ipRange1.StartAddress, Equals, "192.168.201.3") 131 check.Assert(ipRange1.EndAddress, Equals, "192.168.201.100") 132 133 ipRange2 := ipScope[0].IPRanges.IPRange[0] 134 check.Assert(ipRange2.StartAddress, Equals, "192.168.201.105") 135 check.Assert(ipRange2.EndAddress, Equals, "192.168.201.140") 136 137 // Sort IP ranges and check them on IPScope 1 138 sort.SliceStable(ipScope[1].IPRanges.IPRange, func(i, j int) bool { 139 return ipScope[1].IPRanges.IPRange[i].StartAddress < ipScope[1].IPRanges.IPRange[j].StartAddress 140 }) 141 ipRange1 = ipScope[1].IPRanges.IPRange[2] 142 check.Assert(ipRange1.StartAddress, Equals, "192.168.231.3") 143 check.Assert(ipRange1.EndAddress, Equals, "192.168.231.100") 144 145 ipRange2 = ipScope[1].IPRanges.IPRange[0] 146 check.Assert(ipRange2.StartAddress, Equals, "192.168.231.105") 147 check.Assert(ipRange2.EndAddress, Equals, "192.168.231.140") 148 149 ipRange3 := ipScope[1].IPRanges.IPRange[1] 150 check.Assert(ipRange3.StartAddress, Equals, "192.168.231.145") 151 check.Assert(ipRange3.EndAddress, Equals, "192.168.231.150") 152 153 check.Assert(newExternalNetwork.ExternalNetwork.Configuration.FenceMode, Equals, "isolated") 154 check.Assert(newExternalNetwork.ExternalNetwork.Description, Equals, "Test Create External Network") 155 check.Assert(newExternalNetwork.ExternalNetwork.VimPortGroupRef, NotNil) 156 check.Assert(newExternalNetwork.ExternalNetwork.VimPortGroupRef.VimObjectType, Equals, externalNetwork.VimPortGroupRefs.VimObjectRef[0].VimObjectType) 157 check.Assert(newExternalNetwork.ExternalNetwork.VimPortGroupRef.MoRef, Equals, externalNetwork.VimPortGroupRefs.VimObjectRef[0].MoRef) 158 check.Assert(newExternalNetwork.ExternalNetwork.VimPortGroupRef.VimServerRef.HREF, Equals, externalNetwork.VimPortGroupRefs.VimObjectRef[0].VimServerRef.HREF) 159 160 err = newExternalNetwork.DeleteWait() 161 check.Assert(err, IsNil) 162 } 163 164 func init() { 165 testingTags["extnetwork"] = "externalnetwork_test.go" 166 } 167 168 // Tests ExternalNetwork retrieval by name, by ID, and by a combination of name and ID 169 func (vcd *TestVCD) Test_SystemGetExternalNetwork(check *C) { 170 171 getByName := func(name string, refresh bool) (genericEntity, error) { 172 return vcd.client.GetExternalNetworkByName(name) 173 } 174 getById := func(id string, refresh bool) (genericEntity, error) { return vcd.client.GetExternalNetworkById(id) } 175 getByNameOrId := func(id string, refresh bool) (genericEntity, error) { 176 return vcd.client.GetExternalNetworkByNameOrId(id) 177 } 178 179 var def = getterTestDefinition{ 180 parentType: "VDCClient", 181 parentName: "System", 182 entityType: "ExternalNetwork", 183 entityName: vcd.config.VCD.ExternalNetwork, 184 getByName: getByName, 185 getById: getById, 186 getByNameOrId: getByNameOrId, 187 } 188 vcd.testFinderGetGenericEntity(def, check) 189 }