@@ -178,6 +178,88 @@ func TestIntegrationNetwork_CreateAttached(t *testing.T) {
178178 }
179179}
180180
181+ func TestIntegrationNetwork_Reattach (t * testing.T ) {
182+ integrationTest (t )
183+
184+ autoCreateSubnet := false
185+ createNetworkRequest := & cloudscale.NetworkCreateRequest {
186+ Name : networkBaseName ,
187+ AutoCreateIPV4Subnet : & autoCreateSubnet ,
188+ }
189+ network , err := client .Networks .Create (context .TODO (), createNetworkRequest )
190+ if err != nil {
191+ t .Fatalf ("Networks.Create returned error %s\n " , err )
192+ }
193+
194+ createSubnetRequest := & cloudscale.SubnetCreateRequest {
195+ Network : network .UUID ,
196+ CIDR : "192.168.77.0/24" ,
197+ }
198+ subnet , err := client .Subnets .Create (context .TODO (), createSubnetRequest )
199+ if err != nil {
200+ t .Fatalf ("Subnets.Create returned error %s\n " , err )
201+ }
202+
203+ interfaces := []cloudscale.InterfaceRequest {
204+ {Network : "public" },
205+ }
206+ createServerRequest := & cloudscale.ServerRequest {
207+ Name : "go-sdk-integration-test-network" ,
208+ Flavor : "flex-2" ,
209+ Image : DefaultImageSlug ,
210+ VolumeSizeGB : 10 ,
211+ Interfaces : & interfaces ,
212+ SSHKeys : []string {
213+ pubKey ,
214+ },
215+ }
216+
217+ server , err := client .Servers .Create (context .Background (), createServerRequest )
218+ if err != nil {
219+ t .Fatalf ("Servers.Create returned error %s\n " , err )
220+ }
221+ waitUntil ("running" , server .UUID , t )
222+
223+ if numNetworks := len (server .Interfaces ); numNetworks != 1 {
224+ t .Errorf ("Attatched to number of Networks\n got=%#v\n want=%#v" , numNetworks , 1 )
225+ }
226+
227+ addresses := []cloudscale.AddressRequest {{
228+ Subnet : subnet .UUID ,
229+ Address : "192.168.77.77" ,
230+ }}
231+ interfaces = append (interfaces , cloudscale.InterfaceRequest {
232+ Addresses : & addresses ,
233+ })
234+ updateRequest := cloudscale.ServerUpdateRequest {
235+ Interfaces : & interfaces ,
236+ }
237+ err = client .Servers .Update (context .Background (), server .UUID , & updateRequest )
238+ if err != nil {
239+ t .Fatalf ("Servers.Update returned error %s\n " , err )
240+ }
241+
242+ updatedServer , err := client .Servers .Get (context .Background (), server .UUID )
243+ if err != nil {
244+ t .Fatalf ("Servers.Get returned error %s\n " , err )
245+ }
246+ if numNetworks := len (updatedServer .Interfaces ); numNetworks != 2 {
247+ t .Errorf ("Attatched to number of Networks\n got=%#v\n want=%#v" , numNetworks , 2 )
248+ }
249+
250+ err = client .Servers .Delete (context .Background (), server .UUID )
251+ if err != nil {
252+ t .Fatalf ("Servers.Delete returned error %s\n " , err )
253+ }
254+
255+ // sending the next request immediately can cause errors, since the port cleanup process is still ongoing
256+ time .Sleep (5 * time .Second )
257+ err = client .Networks .Delete (context .Background (), network .UUID )
258+ if err != nil {
259+ t .Fatalf ("Networks.Delete returned error %s\n " , err )
260+ }
261+ }
262+
181263func TestIntegrationNetwork_Update (t * testing.T ) {
182264
183265 createNetworkRequest := & cloudscale.NetworkCreateRequest {
0 commit comments