github.com/1and1/oneandone-cloudserver-sdk-go@v1.4.1/privatenetworks_test.go (about) 1 package oneandone 2 3 import ( 4 "fmt" 5 "math/rand" 6 "sync" 7 "testing" 8 "time" 9 ) 10 11 var ( 12 set_pn sync.Once 13 pn_name string 14 pn_desc string 15 test_pn *PrivateNetwork 16 ) 17 18 const ( 19 network_add = "192.168.46.0" 20 sub_mask = "255.255.255.0" 21 ) 22 23 // Helper functions 24 25 func create_private_netwok() *PrivateNetwork { 26 rand.Seed(time.Now().UnixNano()) 27 rint := rand.Intn(999) 28 pn_name = fmt.Sprintf("PrivateNet_%d", rint) 29 pn_desc = fmt.Sprintf("PrivateNet_%d description", rint) 30 req := PrivateNetworkRequest{ 31 Name: pn_name, 32 Description: pn_desc, 33 NetworkAddress: network_add, 34 SubnetMask: sub_mask, 35 } 36 fmt.Printf("Creating new private network '%s'...\n", pn_name) 37 prn_id, prn, err := api.CreatePrivateNetwork(&req) 38 if err != nil { 39 fmt.Printf("Unable to create a private network. Error: %s", err.Error()) 40 return nil 41 } 42 if prn_id == "" || prn.Id == "" { 43 fmt.Printf("Unable to create private network '%s'.", pn_name) 44 return nil 45 } 46 47 //prn = wait_for_state(prn, 5, 30, "ACTIVE") 48 api.WaitForState(prn, "ACTIVE", 5, 60) 49 50 return prn 51 } 52 53 func set_private_network() { 54 test_pn = create_private_netwok() 55 } 56 57 // /private_networks tests 58 59 func TestCreatePrivateNetwork(t *testing.T) { 60 set_pn.Do(set_private_network) 61 62 if test_pn == nil { 63 t.Errorf("CreatePrivateNetwork failed.") 64 } else { 65 if test_pn.Name != pn_name { 66 t.Errorf("Wrong name of the private network.") 67 } 68 if test_pn.Description != pn_desc { 69 t.Errorf("Wrong private network description.") 70 } 71 if test_pn.NetworkAddress != network_add { 72 t.Errorf("Wrong private network address.") 73 } 74 if test_pn.SubnetMask != sub_mask { 75 t.Errorf("Wrong private network subnet mask.") 76 } 77 } 78 } 79 80 func TestGetPrivateNetwork(t *testing.T) { 81 set_pn.Do(set_private_network) 82 83 fmt.Printf("Getting private network '%s'...\n", test_pn.Name) 84 prn, err := api.GetPrivateNetwork(test_pn.Id) 85 86 if err != nil { 87 t.Errorf("GetPrivateNetwork failed. Error: " + err.Error()) 88 } else if prn.Id != test_pn.Id { 89 t.Errorf("Wrong private network ID.") 90 } 91 } 92 93 func TestListPrivateNetworks(t *testing.T) { 94 set_pn.Do(set_private_network) 95 fmt.Println("Listing all private networks...") 96 97 res, err := api.ListPrivateNetworks() 98 if err != nil { 99 t.Errorf("ListPrivateNetworks failed. Error: " + err.Error()) 100 } 101 if len(res) == 0 { 102 t.Errorf("No private network found.") 103 } 104 105 res, err = api.ListPrivateNetworks(1, 1, "", "", "id,name") 106 107 if err != nil { 108 t.Errorf("ListPrivateNetworks with parameter options failed. Error: " + err.Error()) 109 return 110 } 111 if len(res) == 0 { 112 t.Errorf("No private network found.") 113 } 114 if len(res) > 1 { 115 t.Errorf("Wrong number of objects per page.") 116 } 117 if res[0].Id == "" { 118 t.Errorf("Filtering parameters failed.") 119 } 120 if res[0].Name == "" { 121 t.Errorf("Filtering parameters failed.") 122 } 123 if res[0].State != "" { 124 t.Errorf("Filtering parameters failed.") 125 } 126 // Test for error response 127 res, err = api.ListPrivateNetworks(0, 0, "", 7, "") 128 if res != nil || err == nil { 129 t.Errorf("ListPrivateNetworks failed to handle incorrect argument type.") 130 } 131 132 res, err = api.ListPrivateNetworks(0, 0, "", test_pn.Name, "") 133 134 if err != nil { 135 t.Errorf("ListPrivateNetworks with parameter options failed. Error: " + err.Error()) 136 return 137 } 138 if len(res) != 1 { 139 t.Errorf("Search parameter failed.") 140 } 141 if res[0].Name != test_pn.Name { 142 t.Errorf("Search parameter failed.") 143 } 144 } 145 146 func TestAttachPrivateNetworkServers(t *testing.T) { 147 set_pn.Do(set_private_network) 148 sync_server.Do(func() { deploy_test_server(false) }) 149 150 fmt.Printf("Attaching servers to private network '%s'...\n", test_pn.Name) 151 152 servers := make([]string, 1) 153 servers[0] = test_server.Id 154 155 time.Sleep(time.Second) 156 prn, err := api.AttachPrivateNetworkServers(test_pn.Id, servers) 157 158 if err != nil { 159 t.Errorf("AttachPrivateNetworkServers failed. Error: " + err.Error()) 160 return 161 } 162 163 // prn = wait_for_state(prn, 10, 60, "ACTIVE") 164 api.WaitForState(prn, "ACTIVE", 10, 60) 165 prn, err = api.GetPrivateNetwork(prn.Id) 166 if prn == nil || err != nil { 167 t.Errorf("Attaching servers to the private network failed.") 168 return 169 } 170 if len(prn.Servers) != 1 { 171 t.Errorf("No servers attached to the private network were found.") 172 } 173 if prn.Servers[0].Id != test_server.Id { 174 t.Errorf("Wrong servers attached to the private network.") 175 } 176 test_pn = prn 177 } 178 179 func TestGetPrivateNetworkServer(t *testing.T) { 180 set_pn.Do(set_private_network) 181 sync_server.Do(func() { deploy_test_server(false) }) 182 183 fmt.Printf("Getting '%s' server attached to private network '%s'...\n", test_server.Name, test_pn.Name) 184 pns, err := api.GetPrivateNetworkServer(test_pn.Id, test_server.Id) 185 186 if err != nil { 187 t.Errorf("GetPrivateNetworkServer failed. Error: " + err.Error()) 188 return 189 } 190 if pns.Id != test_server.Id { 191 t.Errorf("Wrong server attached to the private network was found.") 192 } 193 } 194 195 func TestListPrivateNetworkServers(t *testing.T) { 196 set_pn.Do(set_private_network) 197 198 fmt.Printf("Listing servers attached to private network '%s'...\n", test_pn.Name) 199 pnss, err := api.ListPrivateNetworkServers(test_pn.Id) 200 201 if err != nil { 202 t.Errorf("ListPrivateNetworkServers failed. Error: " + err.Error()) 203 } 204 if len(pnss) != 1 { 205 t.Errorf("Wrong number of servers attached to the private network.") 206 } 207 } 208 209 func TestDetachPrivateNetworkServer(t *testing.T) { 210 set_pn.Do(set_private_network) 211 sync_server.Do(func() { deploy_test_server(false) }) 212 213 fmt.Printf("Detaching servers from private network '%s'...\n", test_pn.Name) 214 prn, err := api.DetachPrivateNetworkServer(test_pn.Id, test_server.Id) 215 216 if err != nil { 217 t.Errorf("DetachPrivateNetworkServer failed. Error: " + err.Error()) 218 return 219 } 220 221 // prn = wait_for_state(prn, 10, 60, "ACTIVE") 222 api.WaitForState(prn, "ACTIVE", 10, 60) 223 prn, err = api.GetPrivateNetwork(prn.Id) 224 if prn == nil || err != nil { 225 t.Errorf("Detaching servers from the private network failed.") 226 return 227 } 228 if len(prn.Servers) > 0 { 229 t.Errorf("No all servers detached from the private network.") 230 } 231 } 232 233 func TestUpdatePrivateNetwork(t *testing.T) { 234 set_pn.Do(set_private_network) 235 236 fmt.Printf("Updating private network '%s'...\n", test_pn.Id) 237 new_name := test_pn.Name + "_updated" 238 new_desc := test_pn.Description + "_updated" 239 pnset := PrivateNetworkRequest{ 240 Name: new_name, 241 Description: new_desc, 242 NetworkAddress: "192.168.7.0", 243 SubnetMask: "255.255.255.0", 244 } 245 prn, err := api.UpdatePrivateNetwork(test_pn.Id, &pnset) 246 247 if err != nil { 248 t.Errorf("UpdatePrivateNetwork failed. Error: " + err.Error()) 249 return 250 } 251 // prn = wait_for_state(prn, 5, 60, "ACTIVE") 252 api.WaitForState(prn, "ACTIVE", 5, 60) 253 prn, err = api.GetPrivateNetwork(prn.Id) 254 if prn == nil || err != nil { 255 t.Errorf("GetPrivateNetwork failed. Error: " + err.Error()) 256 return 257 } 258 if prn.Id != test_pn.Id { 259 t.Errorf("Wrong private network ID.") 260 } 261 if prn.Name != new_name { 262 t.Errorf("Wrong private network name.") 263 } 264 if prn.Description != new_desc { 265 t.Errorf("Wrong private network description.") 266 } 267 if prn.NetworkAddress != "192.168.7.0" { 268 t.Errorf("Wrong private network address.") 269 } 270 if prn.SubnetMask != "255.255.255.0" { 271 t.Errorf("Wrong private network subnet mask.") 272 } 273 test_pn = prn 274 } 275 276 func TestDeletePrivateNetwork(t *testing.T) { 277 set_pn.Do(set_private_network) 278 279 fmt.Printf("Deleting private network '%s'...\n", test_pn.Name) 280 prn, err := api.DeletePrivateNetwork(test_pn.Id) 281 282 if err != nil { 283 t.Errorf("DeletePrivateNetwork failed. Error: " + err.Error()) 284 return 285 } 286 287 api.WaitUntilDeleted(prn) 288 prn, err = api.GetPrivateNetwork(prn.Id) 289 290 if prn != nil { 291 t.Errorf("Unable to delete the private network.") 292 } else { 293 test_pn = nil 294 } 295 }