github.com/vnpaycloud-console/gophercloud/v2@v2.0.5/internal/acceptance/openstack/networking/v2/extensions/dns/dns_test.go (about) 1 //go:build acceptance || networking || dns 2 3 package dns 4 5 import ( 6 "context" 7 "os" 8 "testing" 9 10 "github.com/vnpaycloud-console/gophercloud/v2/internal/acceptance/clients" 11 networking "github.com/vnpaycloud-console/gophercloud/v2/internal/acceptance/openstack/networking/v2" 12 "github.com/vnpaycloud-console/gophercloud/v2/internal/acceptance/openstack/networking/v2/extensions/layer3" 13 "github.com/vnpaycloud-console/gophercloud/v2/internal/acceptance/tools" 14 "github.com/vnpaycloud-console/gophercloud/v2/openstack/networking/v2/extensions/dns" 15 "github.com/vnpaycloud-console/gophercloud/v2/openstack/networking/v2/extensions/layer3/floatingips" 16 "github.com/vnpaycloud-console/gophercloud/v2/openstack/networking/v2/networks" 17 "github.com/vnpaycloud-console/gophercloud/v2/openstack/networking/v2/ports" 18 "github.com/vnpaycloud-console/gophercloud/v2/pagination" 19 th "github.com/vnpaycloud-console/gophercloud/v2/testhelper" 20 ) 21 22 func TestDNSPortCRUDL(t *testing.T) { 23 clients.RequireAdmin(t) 24 25 client, err := clients.NewNetworkV2Client() 26 th.AssertNoErr(t, err) 27 28 // Skip these tests if we don't have the required extension 29 networking.RequireNeutronExtension(t, client, "dns-integration") 30 31 // Create Network 32 networkDNSDomain := "local." 33 network, err := CreateNetworkDNS(t, client, networkDNSDomain) 34 th.AssertNoErr(t, err) 35 defer networking.DeleteNetwork(t, client, network.ID) 36 37 // Create Subnet 38 subnet, err := networking.CreateSubnet(t, client, network.ID) 39 th.AssertNoErr(t, err) 40 defer networking.DeleteSubnet(t, client, subnet.ID) 41 42 // Create port 43 portDNSName := "port" 44 port, err := CreatePortDNS(t, client, network.ID, subnet.ID, portDNSName) 45 th.AssertNoErr(t, err) 46 defer networking.DeletePort(t, client, port.ID) 47 48 tools.PrintResource(t, port) 49 50 if os.Getenv("OS_BRANCH") == "stable/mitaka" { 51 // List port successfully 52 var listOpts ports.ListOptsBuilder 53 listOpts = dns.PortListOptsExt{ 54 ListOptsBuilder: ports.ListOpts{}, 55 DNSName: portDNSName, 56 } 57 var listedPorts []PortWithDNSExt 58 i := 0 59 err = ports.List(client, listOpts).EachPage(context.TODO(), func(_ context.Context, page pagination.Page) (bool, error) { 60 i++ 61 err := ports.ExtractPortsInto(page, &listedPorts) 62 if err != nil { 63 t.Errorf("Failed to extract ports: %v", err) 64 return false, err 65 } 66 67 tools.PrintResource(t, listedPorts) 68 69 th.AssertEquals(t, 1, len(listedPorts)) 70 th.CheckDeepEquals(t, *port, listedPorts[0]) 71 72 return true, nil 73 }) 74 th.AssertNoErr(t, err) 75 th.AssertEquals(t, 1, i) 76 77 // List port unsuccessfully 78 listOpts = dns.PortListOptsExt{ 79 ListOptsBuilder: ports.ListOpts{}, 80 DNSName: "foo", 81 } 82 i = 0 83 err = ports.List(client, listOpts).EachPage(context.TODO(), func(_ context.Context, page pagination.Page) (bool, error) { 84 i++ 85 err := ports.ExtractPortsInto(page, &listedPorts) 86 if err != nil { 87 t.Errorf("Failed to extract ports: %v", err) 88 return false, err 89 } 90 91 tools.PrintResource(t, listedPorts) 92 93 th.AssertEquals(t, 1, len(listedPorts)) 94 th.CheckDeepEquals(t, *port, listedPorts[0]) 95 96 return true, nil 97 }) 98 th.AssertNoErr(t, err) 99 th.AssertEquals(t, 0, i) 100 } 101 102 // Get port 103 var getPort PortWithDNSExt 104 err = ports.Get(context.TODO(), client, port.ID).ExtractInto(&getPort) 105 th.AssertNoErr(t, err) 106 107 tools.PrintResource(t, getPort) 108 th.AssertDeepEquals(t, *port, getPort) 109 110 // Update port 111 newPortName := "" 112 newPortDescription := "" 113 newDNSName := "" 114 portUpdateOpts := ports.UpdateOpts{ 115 Name: &newPortName, 116 Description: &newPortDescription, 117 } 118 updateOpts := dns.PortUpdateOptsExt{ 119 UpdateOptsBuilder: portUpdateOpts, 120 DNSName: &newDNSName, 121 } 122 123 var newPort PortWithDNSExt 124 err = ports.Update(context.TODO(), client, port.ID, updateOpts).ExtractInto(&newPort) 125 th.AssertNoErr(t, err) 126 127 tools.PrintResource(t, newPort) 128 th.AssertEquals(t, newPort.Description, newPortName) 129 th.AssertEquals(t, newPort.Description, newPortDescription) 130 th.AssertEquals(t, newPort.DNSName, newDNSName) 131 132 // Get updated port 133 var getNewPort PortWithDNSExt 134 err = ports.Get(context.TODO(), client, port.ID).ExtractInto(&getNewPort) 135 th.AssertNoErr(t, err) 136 137 tools.PrintResource(t, getNewPort) 138 // workaround for update race condition 139 newPort.DNSAssignment = nil 140 getNewPort.DNSAssignment = nil 141 th.AssertDeepEquals(t, newPort, getNewPort) 142 } 143 144 func TestDNSFloatingIPCRDL(t *testing.T) { 145 t.Skip("Skipping TestDNSFloatingIPCRDL for now, as it doesn't work with ML2/OVN.") 146 clients.RequireAdmin(t) 147 148 client, err := clients.NewNetworkV2Client() 149 th.AssertNoErr(t, err) 150 151 // Skip these tests if we don't have the required extension 152 networking.RequireNeutronExtension(t, client, "dns-integration") 153 154 choices, err := clients.AcceptanceTestChoicesFromEnv() 155 th.AssertNoErr(t, err) 156 157 // Create Network 158 networkDNSDomain := "local." 159 network, err := CreateNetworkDNS(t, client, networkDNSDomain) 160 th.AssertNoErr(t, err) 161 defer networking.DeleteNetwork(t, client, network.ID) 162 163 // Create Subnet 164 subnet, err := networking.CreateSubnet(t, client, network.ID) 165 th.AssertNoErr(t, err) 166 defer networking.DeleteSubnet(t, client, subnet.ID) 167 168 // Create Router 169 router, err := layer3.CreateExternalRouter(t, client) 170 th.AssertNoErr(t, err) 171 defer layer3.DeleteRouter(t, client, router.ID) 172 173 // Create router interface 174 routerPort, err := networking.CreatePort(t, client, network.ID, subnet.ID) 175 th.AssertNoErr(t, err) 176 _, err = layer3.CreateRouterInterface(t, client, routerPort.ID, router.ID) 177 th.AssertNoErr(t, err) 178 defer layer3.DeleteRouterInterface(t, client, routerPort.ID, router.ID) 179 180 // Create port 181 portDNSName := "port" 182 port, err := CreatePortDNS(t, client, network.ID, subnet.ID, portDNSName) 183 th.AssertNoErr(t, err) 184 defer networking.DeletePort(t, client, port.ID) 185 186 tools.PrintResource(t, port) 187 188 // Create floating IP 189 fipDNSName := "fip" 190 fipDNSDomain := "local." 191 fip, err := CreateFloatingIPDNS(t, client, choices.ExternalNetworkID, port.ID, fipDNSName, fipDNSDomain) 192 th.AssertNoErr(t, err) 193 defer layer3.DeleteFloatingIP(t, client, fip.ID) 194 195 // Get floating IP 196 var getFip FloatingIPWithDNSExt 197 err = floatingips.Get(context.TODO(), client, fip.ID).ExtractInto(&getFip) 198 th.AssertNoErr(t, err) 199 200 tools.PrintResource(t, getFip) 201 th.AssertDeepEquals(t, *fip, getFip) 202 } 203 204 func TestDNSNetwork(t *testing.T) { 205 clients.RequireAdmin(t) 206 207 client, err := clients.NewNetworkV2Client() 208 th.AssertNoErr(t, err) 209 210 // Skip these tests if we don't have the required extension 211 networking.RequireNeutronExtension(t, client, "dns-integration") 212 213 // Create Network 214 networkDNSDomain := "local." 215 network, err := CreateNetworkDNS(t, client, networkDNSDomain) 216 th.AssertNoErr(t, err) 217 defer networking.DeleteNetwork(t, client, network.ID) 218 219 // Get network 220 var getNetwork NetworkWithDNSExt 221 err = networks.Get(context.TODO(), client, network.ID).ExtractInto(&getNetwork) 222 th.AssertNoErr(t, err) 223 224 tools.PrintResource(t, getNetwork) 225 th.AssertDeepEquals(t, *network, getNetwork) 226 227 // Update network 228 newNetworkName := "" 229 newNetworkDescription := "" 230 newNetworkDNSDomain := "" 231 networkUpdateOpts := networks.UpdateOpts{ 232 Name: &newNetworkName, 233 Description: &newNetworkDescription, 234 } 235 updateOpts := dns.NetworkUpdateOptsExt{ 236 UpdateOptsBuilder: networkUpdateOpts, 237 DNSDomain: &newNetworkDNSDomain, 238 } 239 240 var newNetwork NetworkWithDNSExt 241 err = networks.Update(context.TODO(), client, network.ID, updateOpts).ExtractInto(&newNetwork) 242 th.AssertNoErr(t, err) 243 244 tools.PrintResource(t, newNetwork) 245 th.AssertEquals(t, newNetwork.Description, newNetworkName) 246 th.AssertEquals(t, newNetwork.Description, newNetworkDescription) 247 th.AssertEquals(t, newNetwork.DNSDomain, newNetworkDNSDomain) 248 249 // Get updated network 250 var getNewNetwork NetworkWithDNSExt 251 err = networks.Get(context.TODO(), client, network.ID).ExtractInto(&getNewNetwork) 252 th.AssertNoErr(t, err) 253 254 tools.PrintResource(t, getNewNetwork) 255 th.AssertDeepEquals(t, newNetwork, getNewNetwork) 256 }