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