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