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

     1  //go:build acceptance || networking
     2  // +build acceptance networking
     3  
     4  package mtu
     5  
     6  import (
     7  	"testing"
     8  
     9  	"github.com/gophercloud/gophercloud/internal/acceptance/clients"
    10  	networking "github.com/gophercloud/gophercloud/internal/acceptance/openstack/networking/v2"
    11  	"github.com/gophercloud/gophercloud/internal/acceptance/tools"
    12  	"github.com/gophercloud/gophercloud/openstack/common/extensions"
    13  	"github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/mtu"
    14  	"github.com/gophercloud/gophercloud/openstack/networking/v2/networks"
    15  	"github.com/gophercloud/gophercloud/pagination"
    16  	th "github.com/gophercloud/gophercloud/testhelper"
    17  )
    18  
    19  func TestMTUNetworkCRUDL(t *testing.T) {
    20  	clients.RequireAdmin(t)
    21  
    22  	client, err := clients.NewNetworkV2Client()
    23  	th.AssertNoErr(t, err)
    24  
    25  	extension, err := extensions.Get(client, "net-mtu").Extract()
    26  	if err != nil {
    27  		t.Skip("This test requires net-mtu Neutron extension")
    28  	}
    29  	tools.PrintResource(t, extension)
    30  
    31  	mtuWritable, _ := extensions.Get(client, "net-mtu-writable").Extract()
    32  	tools.PrintResource(t, mtuWritable)
    33  
    34  	// Create Network
    35  	var networkMTU int
    36  	if mtuWritable != nil {
    37  		networkMTU = 1440
    38  	}
    39  	network, err := CreateNetworkWithMTU(t, client, &networkMTU)
    40  	th.AssertNoErr(t, err)
    41  	defer networking.DeleteNetwork(t, client, network.ID)
    42  
    43  	// MTU filtering is supported only in read-only MTU extension
    44  	// https://bugs.launchpad.net/neutron/+bug/1818317
    45  	if mtuWritable == nil {
    46  		// List network successfully
    47  		var listOpts networks.ListOptsBuilder
    48  		listOpts = mtu.ListOptsExt{
    49  			ListOptsBuilder: networks.ListOpts{},
    50  			MTU:             networkMTU,
    51  		}
    52  		var listedNetworks []NetworkMTU
    53  		i := 0
    54  		err = networks.List(client, listOpts).EachPage(func(page pagination.Page) (bool, error) {
    55  			i++
    56  			err := networks.ExtractNetworksInto(page, &listedNetworks)
    57  			if err != nil {
    58  				t.Errorf("Failed to extract networks: %v", err)
    59  				return false, err
    60  			}
    61  
    62  			tools.PrintResource(t, listedNetworks)
    63  
    64  			th.AssertEquals(t, 1, len(listedNetworks))
    65  			th.CheckDeepEquals(t, *network, listedNetworks[0])
    66  
    67  			return true, nil
    68  		})
    69  		th.AssertNoErr(t, err)
    70  		th.AssertEquals(t, 1, i)
    71  
    72  		// List network unsuccessfully
    73  		listOpts = mtu.ListOptsExt{
    74  			ListOptsBuilder: networks.ListOpts{},
    75  			MTU:             1,
    76  		}
    77  		i = 0
    78  		err = networks.List(client, listOpts).EachPage(func(page pagination.Page) (bool, error) {
    79  			i++
    80  			err := networks.ExtractNetworksInto(page, &listedNetworks)
    81  			if err != nil {
    82  				t.Errorf("Failed to extract networks: %v", err)
    83  				return false, err
    84  			}
    85  
    86  			tools.PrintResource(t, listedNetworks)
    87  
    88  			th.AssertEquals(t, 1, len(listedNetworks))
    89  			th.CheckDeepEquals(t, *network, listedNetworks[0])
    90  
    91  			return true, nil
    92  		})
    93  		th.AssertNoErr(t, err)
    94  		th.AssertEquals(t, 0, i)
    95  	}
    96  
    97  	// Get network
    98  	var getNetwork NetworkMTU
    99  	err = networks.Get(client, network.ID).ExtractInto(&getNetwork)
   100  	th.AssertNoErr(t, err)
   101  
   102  	tools.PrintResource(t, getNetwork)
   103  	th.AssertDeepEquals(t, *network, getNetwork)
   104  
   105  	if mtuWritable != nil {
   106  		// Update network
   107  		newNetworkDescription := ""
   108  		newNetworkMTU := 1350
   109  		networkUpdateOpts := networks.UpdateOpts{
   110  			Description: &newNetworkDescription,
   111  		}
   112  		var updateOpts networks.UpdateOptsBuilder
   113  		updateOpts = mtu.UpdateOptsExt{
   114  			UpdateOptsBuilder: networkUpdateOpts,
   115  			MTU:               newNetworkMTU,
   116  		}
   117  
   118  		var newNetwork NetworkMTU
   119  		err = networks.Update(client, network.ID, updateOpts).ExtractInto(&newNetwork)
   120  		th.AssertNoErr(t, err)
   121  
   122  		tools.PrintResource(t, newNetwork)
   123  		th.AssertEquals(t, newNetwork.Description, newNetworkDescription)
   124  		th.AssertEquals(t, newNetwork.MTU, newNetworkMTU)
   125  
   126  		// Get updated network
   127  		var getNewNetwork NetworkMTU
   128  		err = networks.Get(client, network.ID).ExtractInto(&getNewNetwork)
   129  		th.AssertNoErr(t, err)
   130  
   131  		tools.PrintResource(t, getNewNetwork)
   132  		th.AssertEquals(t, getNewNetwork.Description, newNetworkDescription)
   133  		th.AssertEquals(t, getNewNetwork.MTU, newNetworkMTU)
   134  	}
   135  }