github.com/vnpaycloud-console/gophercloud/v2@v2.0.5/internal/acceptance/openstack/networking/v2/extensions/mtu/mtu_test.go (about)

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