@@ -278,6 +278,95 @@ func TestIntegrationNetwork_Reattach(t *testing.T) {
278278 }
279279}
280280
281+ func TestIntegrationNetwork_Reorder (t * testing.T ) {
282+ integrationTest (t )
283+
284+ autoCreateSubnet := false
285+ createNetworkRequest := & cloudscale.NetworkCreateRequest {
286+ Name : networkBaseName ,
287+ AutoCreateIPV4Subnet : & autoCreateSubnet ,
288+ }
289+ network , err := client .Networks .Create (context .TODO (), createNetworkRequest )
290+ if err != nil {
291+ t .Fatalf ("Networks.Create returned error %s\n " , err )
292+ }
293+
294+ createSubnetRequest := & cloudscale.SubnetCreateRequest {
295+ Network : network .UUID ,
296+ CIDR : "192.168.177.0/24" ,
297+ }
298+ subnet , err := client .Subnets .Create (context .TODO (), createSubnetRequest )
299+ if err != nil {
300+ t .Fatalf ("Subnets.Create returned error %s\n " , err )
301+ }
302+
303+ interfaces := []cloudscale.InterfaceRequest {
304+ {Network : "public" },
305+ {Network : network .UUID },
306+ }
307+ createServerRequest := & cloudscale.ServerRequest {
308+ Name : "go-sdk-integration-test-network" ,
309+ Flavor : "flex-2" ,
310+ Image : DefaultImageSlug ,
311+ VolumeSizeGB : 10 ,
312+ Interfaces : & interfaces ,
313+ SSHKeys : []string {
314+ pubKey ,
315+ },
316+ }
317+
318+ server , err := client .Servers .Create (context .Background (), createServerRequest )
319+ if err != nil {
320+ t .Fatalf ("Servers.Create returned error %s\n " , err )
321+ }
322+ waitUntil ("running" , server .UUID , t )
323+
324+ if numNetworks := len (server .Interfaces ); numNetworks != 2 {
325+ t .Errorf ("Attatched to number of Networks\n got=%#v\n want=%#v" , numNetworks , 2 )
326+ }
327+
328+ if subnetUUID := server .Interfaces [1 ].Addresses [0 ].Subnet .UUID ; subnetUUID != subnet .UUID {
329+ t .Errorf ("Unexpected subnet UUID on second interface\n got=%#v\n want=%#v" , subnetUUID , subnet .UUID )
330+ }
331+
332+ for i , j := 0 , len (interfaces )- 1 ; i < j ; i , j = i + 1 , j - 1 {
333+ interfaces [i ], interfaces [j ] = interfaces [j ], interfaces [i ]
334+ }
335+
336+ updateRequest := cloudscale.ServerUpdateRequest {
337+ Interfaces : & interfaces ,
338+ }
339+ err = client .Servers .Update (context .Background (), server .UUID , & updateRequest )
340+ if err != nil {
341+ t .Fatalf ("Servers.Update returned error %s\n " , err )
342+ }
343+
344+ updatedServer , err := client .Servers .Get (context .Background (), server .UUID )
345+ if err != nil {
346+ t .Fatalf ("Servers.Get returned error %s\n " , err )
347+ }
348+
349+ if numNetworks := len (updatedServer .Interfaces ); numNetworks != 2 {
350+ t .Errorf ("Attatched to number of Networks\n got=%#v\n want=%#v" , numNetworks , 2 )
351+ }
352+ if subnetUUID := updatedServer .Interfaces [0 ].Addresses [0 ].Subnet .UUID ; subnetUUID != subnet .UUID {
353+ t .Errorf ("Unexpected subnet UUID on first interface\n got=%#v\n want=%#v" , subnetUUID , subnet .UUID )
354+ }
355+
356+ err = client .Servers .Delete (context .Background (), server .UUID )
357+ if err != nil {
358+ t .Fatalf ("Servers.Delete returned error %s\n " , err )
359+ }
360+
361+ // sending the next request immediately can cause errors, since the port cleanup process is still ongoing
362+ time .Sleep (5 * time .Second )
363+ err = client .Networks .Delete (context .Background (), network .UUID )
364+ if err != nil {
365+ t .Fatalf ("Networks.Delete returned error %s\n " , err )
366+ }
367+ }
368+
369+
281370func TestIntegrationNetwork_Update (t * testing.T ) {
282371
283372 createNetworkRequest := & cloudscale.NetworkCreateRequest {
0 commit comments