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  }