github.com/gophercloud/gophercloud@v1.11.0/internal/acceptance/openstack/networking/v2/extensions/dns/dns_test.go (about)

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