github.com/vnpaycloud-console/gophercloud/v2@v2.0.5/internal/acceptance/openstack/networking/v2/networks_test.go (about) 1 //go:build acceptance || networking || networks 2 3 package v2 4 5 import ( 6 "context" 7 "strings" 8 "testing" 9 10 "github.com/vnpaycloud-console/gophercloud/v2/internal/acceptance/clients" 11 "github.com/vnpaycloud-console/gophercloud/v2/internal/acceptance/tools" 12 "github.com/vnpaycloud-console/gophercloud/v2/openstack/networking/v2/extensions/external" 13 "github.com/vnpaycloud-console/gophercloud/v2/openstack/networking/v2/extensions/portsecurity" 14 "github.com/vnpaycloud-console/gophercloud/v2/openstack/networking/v2/networks" 15 th "github.com/vnpaycloud-console/gophercloud/v2/testhelper" 16 ) 17 18 func TestNetworksExternalList(t *testing.T) { 19 client, err := clients.NewNetworkV2Client() 20 th.AssertNoErr(t, err) 21 22 choices, err := clients.AcceptanceTestChoicesFromEnv() 23 th.AssertNoErr(t, err) 24 25 type networkWithExt struct { 26 networks.Network 27 external.NetworkExternalExt 28 } 29 30 var allNetworks []networkWithExt 31 32 iTrue := true 33 networkListOpts := networks.ListOpts{ 34 ID: choices.ExternalNetworkID, 35 } 36 listOpts := external.ListOptsExt{ 37 ListOptsBuilder: networkListOpts, 38 External: &iTrue, 39 } 40 41 allPages, err := networks.List(client, listOpts).AllPages(context.TODO()) 42 th.AssertNoErr(t, err) 43 44 err = networks.ExtractNetworksInto(allPages, &allNetworks) 45 th.AssertNoErr(t, err) 46 47 var found bool 48 for _, network := range allNetworks { 49 if network.External == true && network.ID == choices.ExternalNetworkID { 50 found = true 51 } 52 } 53 54 th.AssertEquals(t, found, true) 55 56 iFalse := false 57 networkListOpts = networks.ListOpts{ 58 ID: choices.ExternalNetworkID, 59 } 60 listOpts = external.ListOptsExt{ 61 ListOptsBuilder: networkListOpts, 62 External: &iFalse, 63 } 64 65 allPages, err = networks.List(client, listOpts).AllPages(context.TODO()) 66 th.AssertNoErr(t, err) 67 68 v, err := networks.ExtractNetworks(allPages) 69 th.AssertNoErr(t, err) 70 th.AssertEquals(t, len(v), 0) 71 } 72 73 func TestNetworksCRUD(t *testing.T) { 74 client, err := clients.NewNetworkV2Client() 75 th.AssertNoErr(t, err) 76 77 // Create a network 78 network, err := CreateNetwork(t, client) 79 th.AssertNoErr(t, err) 80 defer DeleteNetwork(t, client, network.ID) 81 82 tools.PrintResource(t, network) 83 84 newName := tools.RandomString("TESTACC-", 8) 85 newDescription := "" 86 updateOpts := &networks.UpdateOpts{ 87 Name: &newName, 88 Description: &newDescription, 89 } 90 91 _, err = networks.Update(context.TODO(), client, network.ID, updateOpts).Extract() 92 th.AssertNoErr(t, err) 93 94 newNetwork, err := networks.Get(context.TODO(), client, network.ID).Extract() 95 th.AssertNoErr(t, err) 96 97 tools.PrintResource(t, newNetwork) 98 th.AssertEquals(t, newNetwork.Name, newName) 99 th.AssertEquals(t, newNetwork.Description, newDescription) 100 101 type networkWithExt struct { 102 networks.Network 103 portsecurity.PortSecurityExt 104 } 105 106 var allNetworks []networkWithExt 107 108 allPages, err := networks.List(client, nil).AllPages(context.TODO()) 109 th.AssertNoErr(t, err) 110 111 err = networks.ExtractNetworksInto(allPages, &allNetworks) 112 th.AssertNoErr(t, err) 113 114 var found bool 115 for _, network := range allNetworks { 116 if network.ID == newNetwork.ID { 117 found = true 118 } 119 } 120 121 th.AssertEquals(t, found, true) 122 } 123 124 func TestNetworksPortSecurityCRUD(t *testing.T) { 125 client, err := clients.NewNetworkV2Client() 126 th.AssertNoErr(t, err) 127 128 // Create a network without port security 129 network, err := CreateNetworkWithoutPortSecurity(t, client) 130 if err != nil { 131 t.Fatalf("Unable to create network: %v", err) 132 } 133 defer DeleteNetwork(t, client, network.ID) 134 135 var networkWithExtensions struct { 136 networks.Network 137 portsecurity.PortSecurityExt 138 } 139 140 err = networks.Get(context.TODO(), client, network.ID).ExtractInto(&networkWithExtensions) 141 th.AssertNoErr(t, err) 142 143 tools.PrintResource(t, networkWithExtensions) 144 145 iTrue := true 146 networkUpdateOpts := networks.UpdateOpts{} 147 updateOpts := portsecurity.NetworkUpdateOptsExt{ 148 UpdateOptsBuilder: networkUpdateOpts, 149 PortSecurityEnabled: &iTrue, 150 } 151 152 err = networks.Update(context.TODO(), client, network.ID, updateOpts).ExtractInto(&networkWithExtensions) 153 th.AssertNoErr(t, err) 154 155 tools.PrintResource(t, networkWithExtensions) 156 } 157 158 func TestNetworksRevision(t *testing.T) { 159 client, err := clients.NewNetworkV2Client() 160 th.AssertNoErr(t, err) 161 162 // Create a network 163 network, err := CreateNetwork(t, client) 164 th.AssertNoErr(t, err) 165 defer DeleteNetwork(t, client, network.ID) 166 167 tools.PrintResource(t, network) 168 169 // Store the current revision number. 170 oldRevisionNumber := network.RevisionNumber 171 172 // Update the network without revision number. 173 // This should work. 174 newName := tools.RandomString("TESTACC-", 8) 175 newDescription := "" 176 updateOpts := &networks.UpdateOpts{ 177 Name: &newName, 178 Description: &newDescription, 179 } 180 network, err = networks.Update(context.TODO(), client, network.ID, updateOpts).Extract() 181 th.AssertNoErr(t, err) 182 183 tools.PrintResource(t, network) 184 185 // This should fail due to an old revision number. 186 newDescription = "new description" 187 updateOpts = &networks.UpdateOpts{ 188 Name: &newName, 189 Description: &newDescription, 190 RevisionNumber: &oldRevisionNumber, 191 } 192 _, err = networks.Update(context.TODO(), client, network.ID, updateOpts).Extract() 193 th.AssertErr(t, err) 194 if !strings.Contains(err.Error(), "RevisionNumberConstraintFailed") { 195 t.Fatalf("expected to see an error of type RevisionNumberConstraintFailed, but got the following error instead: %v", err) 196 } 197 198 // Reread the network to show that it did not change. 199 network, err = networks.Get(context.TODO(), client, network.ID).Extract() 200 th.AssertNoErr(t, err) 201 202 tools.PrintResource(t, network) 203 204 // This should work because now we do provide a valid revision number. 205 newDescription = "new description" 206 updateOpts = &networks.UpdateOpts{ 207 Name: &newName, 208 Description: &newDescription, 209 RevisionNumber: &network.RevisionNumber, 210 } 211 network, err = networks.Update(context.TODO(), client, network.ID, updateOpts).Extract() 212 th.AssertNoErr(t, err) 213 214 tools.PrintResource(t, network) 215 216 th.AssertEquals(t, network.Name, newName) 217 th.AssertEquals(t, network.Description, newDescription) 218 }