github.com/gophercloud/gophercloud@v1.11.0/openstack/loadbalancer/v2/pools/testing/requests_test.go (about) 1 package testing 2 3 import ( 4 "testing" 5 6 "github.com/gophercloud/gophercloud/openstack/loadbalancer/v2/pools" 7 fake "github.com/gophercloud/gophercloud/openstack/loadbalancer/v2/testhelper" 8 "github.com/gophercloud/gophercloud/pagination" 9 th "github.com/gophercloud/gophercloud/testhelper" 10 ) 11 12 func TestListPools(t *testing.T) { 13 th.SetupHTTP() 14 defer th.TeardownHTTP() 15 HandlePoolListSuccessfully(t) 16 17 pages := 0 18 err := pools.List(fake.ServiceClient(), pools.ListOpts{}).EachPage(func(page pagination.Page) (bool, error) { 19 pages++ 20 21 actual, err := pools.ExtractPools(page) 22 if err != nil { 23 return false, err 24 } 25 26 if len(actual) != 2 { 27 t.Fatalf("Expected 2 pools, got %d", len(actual)) 28 } 29 th.CheckDeepEquals(t, PoolWeb, actual[0]) 30 th.CheckDeepEquals(t, PoolDb, actual[1]) 31 32 return true, nil 33 }) 34 35 th.AssertNoErr(t, err) 36 37 if pages != 1 { 38 t.Errorf("Expected 1 page, saw %d", pages) 39 } 40 } 41 42 func TestListAllPools(t *testing.T) { 43 th.SetupHTTP() 44 defer th.TeardownHTTP() 45 HandlePoolListSuccessfully(t) 46 47 allPages, err := pools.List(fake.ServiceClient(), pools.ListOpts{}).AllPages() 48 th.AssertNoErr(t, err) 49 actual, err := pools.ExtractPools(allPages) 50 th.AssertNoErr(t, err) 51 th.CheckDeepEquals(t, PoolWeb, actual[0]) 52 th.CheckDeepEquals(t, PoolDb, actual[1]) 53 } 54 55 func TestCreatePool(t *testing.T) { 56 th.SetupHTTP() 57 defer th.TeardownHTTP() 58 HandlePoolCreationSuccessfully(t, SinglePoolBody) 59 60 actual, err := pools.Create(fake.ServiceClient(), pools.CreateOpts{ 61 LBMethod: pools.LBMethodRoundRobin, 62 Protocol: "HTTP", 63 Name: "Example pool", 64 ProjectID: "2ffc6e22aae24e4795f87155d24c896f", 65 LoadbalancerID: "79e05663-7f03-45d2-a092-8b94062f22ab", 66 }).Extract() 67 th.AssertNoErr(t, err) 68 69 th.CheckDeepEquals(t, PoolDb, *actual) 70 } 71 72 func TestGetPool(t *testing.T) { 73 th.SetupHTTP() 74 defer th.TeardownHTTP() 75 HandlePoolGetSuccessfully(t) 76 77 client := fake.ServiceClient() 78 actual, err := pools.Get(client, "c3741b06-df4d-4715-b142-276b6bce75ab").Extract() 79 if err != nil { 80 t.Fatalf("Unexpected Get error: %v", err) 81 } 82 83 th.CheckDeepEquals(t, PoolDb, *actual) 84 } 85 86 func TestDeletePool(t *testing.T) { 87 th.SetupHTTP() 88 defer th.TeardownHTTP() 89 HandlePoolDeletionSuccessfully(t) 90 91 res := pools.Delete(fake.ServiceClient(), "c3741b06-df4d-4715-b142-276b6bce75ab") 92 th.AssertNoErr(t, res.Err) 93 } 94 95 func TestUpdatePool(t *testing.T) { 96 th.SetupHTTP() 97 defer th.TeardownHTTP() 98 HandlePoolUpdateSuccessfully(t) 99 100 client := fake.ServiceClient() 101 name := "NewPoolName" 102 actual, err := pools.Update(client, "c3741b06-df4d-4715-b142-276b6bce75ab", pools.UpdateOpts{ 103 Name: &name, 104 LBMethod: pools.LBMethodLeastConnections, 105 }).Extract() 106 if err != nil { 107 t.Fatalf("Unexpected Update error: %v", err) 108 } 109 110 th.CheckDeepEquals(t, PoolUpdated, *actual) 111 } 112 113 func TestRequiredPoolCreateOpts(t *testing.T) { 114 res := pools.Create(fake.ServiceClient(), pools.CreateOpts{}) 115 if res.Err == nil { 116 t.Fatalf("Expected error, got none") 117 } 118 res = pools.Create(fake.ServiceClient(), pools.CreateOpts{ 119 LBMethod: pools.LBMethod("invalid"), 120 Protocol: pools.ProtocolHTTPS, 121 LoadbalancerID: "69055154-f603-4a28-8951-7cc2d9e54a9a", 122 }) 123 if res.Err == nil { 124 t.Fatalf("Expected error, but got none") 125 } 126 127 res = pools.Create(fake.ServiceClient(), pools.CreateOpts{ 128 LBMethod: pools.LBMethodRoundRobin, 129 Protocol: pools.Protocol("invalid"), 130 LoadbalancerID: "69055154-f603-4a28-8951-7cc2d9e54a9a", 131 }) 132 if res.Err == nil { 133 t.Fatalf("Expected error, but got none") 134 } 135 136 res = pools.Create(fake.ServiceClient(), pools.CreateOpts{ 137 LBMethod: pools.LBMethodRoundRobin, 138 Protocol: pools.ProtocolHTTPS, 139 }) 140 if res.Err == nil { 141 t.Fatalf("Expected error, but got none") 142 } 143 } 144 145 func TestListMembers(t *testing.T) { 146 th.SetupHTTP() 147 defer th.TeardownHTTP() 148 HandleMemberListSuccessfully(t) 149 150 pages := 0 151 err := pools.ListMembers(fake.ServiceClient(), "332abe93-f488-41ba-870b-2ac66be7f853", pools.ListMembersOpts{}).EachPage(func(page pagination.Page) (bool, error) { 152 pages++ 153 154 actual, err := pools.ExtractMembers(page) 155 if err != nil { 156 return false, err 157 } 158 159 if len(actual) != 2 { 160 t.Fatalf("Expected 2 members, got %d", len(actual)) 161 } 162 th.CheckDeepEquals(t, MemberWeb, actual[0]) 163 th.CheckDeepEquals(t, MemberDb, actual[1]) 164 165 return true, nil 166 }) 167 168 th.AssertNoErr(t, err) 169 170 if pages != 1 { 171 t.Errorf("Expected 1 page, saw %d", pages) 172 } 173 } 174 175 func TestListAllMembers(t *testing.T) { 176 th.SetupHTTP() 177 defer th.TeardownHTTP() 178 HandleMemberListSuccessfully(t) 179 180 allPages, err := pools.ListMembers(fake.ServiceClient(), "332abe93-f488-41ba-870b-2ac66be7f853", pools.ListMembersOpts{}).AllPages() 181 th.AssertNoErr(t, err) 182 actual, err := pools.ExtractMembers(allPages) 183 th.AssertNoErr(t, err) 184 th.CheckDeepEquals(t, MemberWeb, actual[0]) 185 th.CheckDeepEquals(t, MemberDb, actual[1]) 186 } 187 188 func TestCreateMember(t *testing.T) { 189 th.SetupHTTP() 190 defer th.TeardownHTTP() 191 HandleMemberCreationSuccessfully(t, SingleMemberBody) 192 193 weight := 10 194 actual, err := pools.CreateMember(fake.ServiceClient(), "332abe93-f488-41ba-870b-2ac66be7f853", pools.CreateMemberOpts{ 195 Name: "db", 196 SubnetID: "1981f108-3c48-48d2-b908-30f7d28532c9", 197 ProjectID: "2ffc6e22aae24e4795f87155d24c896f", 198 Address: "10.0.2.11", 199 ProtocolPort: 80, 200 Weight: &weight, 201 }).Extract() 202 th.AssertNoErr(t, err) 203 204 th.CheckDeepEquals(t, MemberDb, *actual) 205 } 206 207 func TestRequiredMemberCreateOpts(t *testing.T) { 208 res := pools.CreateMember(fake.ServiceClient(), "", pools.CreateMemberOpts{}) 209 if res.Err == nil { 210 t.Fatalf("Expected error, got none") 211 } 212 res = pools.CreateMember(fake.ServiceClient(), "", pools.CreateMemberOpts{Address: "1.2.3.4", ProtocolPort: 80}) 213 if res.Err == nil { 214 t.Fatalf("Expected error, but got none") 215 } 216 res = pools.CreateMember(fake.ServiceClient(), "332abe93-f488-41ba-870b-2ac66be7f853", pools.CreateMemberOpts{ProtocolPort: 80}) 217 if res.Err == nil { 218 t.Fatalf("Expected error, but got none") 219 } 220 res = pools.CreateMember(fake.ServiceClient(), "332abe93-f488-41ba-870b-2ac66be7f853", pools.CreateMemberOpts{Address: "1.2.3.4"}) 221 if res.Err == nil { 222 t.Fatalf("Expected error, but got none") 223 } 224 } 225 226 func TestGetMember(t *testing.T) { 227 th.SetupHTTP() 228 defer th.TeardownHTTP() 229 HandleMemberGetSuccessfully(t) 230 231 client := fake.ServiceClient() 232 actual, err := pools.GetMember(client, "332abe93-f488-41ba-870b-2ac66be7f853", "2a280670-c202-4b0b-a562-34077415aabf").Extract() 233 if err != nil { 234 t.Fatalf("Unexpected Get error: %v", err) 235 } 236 237 th.CheckDeepEquals(t, MemberDb, *actual) 238 } 239 240 func TestDeleteMember(t *testing.T) { 241 th.SetupHTTP() 242 defer th.TeardownHTTP() 243 HandleMemberDeletionSuccessfully(t) 244 245 res := pools.DeleteMember(fake.ServiceClient(), "332abe93-f488-41ba-870b-2ac66be7f853", "2a280670-c202-4b0b-a562-34077415aabf") 246 th.AssertNoErr(t, res.Err) 247 } 248 249 func TestUpdateMember(t *testing.T) { 250 th.SetupHTTP() 251 defer th.TeardownHTTP() 252 HandleMemberUpdateSuccessfully(t) 253 254 weight := 4 255 client := fake.ServiceClient() 256 name := "newMemberName" 257 actual, err := pools.UpdateMember(client, "332abe93-f488-41ba-870b-2ac66be7f853", "2a280670-c202-4b0b-a562-34077415aabf", pools.UpdateMemberOpts{ 258 Name: &name, 259 Weight: &weight, 260 }).Extract() 261 if err != nil { 262 t.Fatalf("Unexpected Update error: %v", err) 263 } 264 265 th.CheckDeepEquals(t, MemberUpdated, *actual) 266 } 267 268 func TestBatchUpdateMembers(t *testing.T) { 269 th.SetupHTTP() 270 defer th.TeardownHTTP() 271 HandleMembersUpdateSuccessfully(t) 272 273 name_1 := "web-server-1" 274 weight_1 := 20 275 subnetID := "bbb35f84-35cc-4b2f-84c2-a6a29bba68aa" 276 member1 := pools.BatchUpdateMemberOpts{ 277 Address: "192.0.2.16", 278 ProtocolPort: 80, 279 Name: &name_1, 280 SubnetID: &subnetID, 281 Weight: &weight_1, 282 } 283 284 name_2 := "web-server-2" 285 weight_2 := 10 286 member2 := pools.BatchUpdateMemberOpts{ 287 Address: "192.0.2.17", 288 ProtocolPort: 80, 289 Name: &name_2, 290 Weight: &weight_2, 291 SubnetID: &subnetID, 292 } 293 members := []pools.BatchUpdateMemberOpts{member1, member2} 294 295 res := pools.BatchUpdateMembers(fake.ServiceClient(), "332abe93-f488-41ba-870b-2ac66be7f853", members) 296 th.AssertNoErr(t, res.Err) 297 } 298 299 func TestEmptyBatchUpdateMembers(t *testing.T) { 300 th.SetupHTTP() 301 defer th.TeardownHTTP() 302 HandleEmptyMembersUpdateSuccessfully(t) 303 304 res := pools.BatchUpdateMembers(fake.ServiceClient(), "332abe93-f488-41ba-870b-2ac66be7f853", []pools.BatchUpdateMemberOpts{}) 305 th.AssertNoErr(t, res.Err) 306 } 307 308 func TestRequiredBatchUpdateMemberOpts(t *testing.T) { 309 th.SetupHTTP() 310 defer th.TeardownHTTP() 311 312 name := "web-server-1" 313 res := pools.BatchUpdateMembers(fake.ServiceClient(), "332abe93-f488-41ba-870b-2ac66be7f853", []pools.BatchUpdateMemberOpts{ 314 { 315 Name: &name, 316 }, 317 }) 318 if res.Err == nil { 319 t.Fatalf("Expected error, but got none") 320 } 321 322 res = pools.BatchUpdateMembers(fake.ServiceClient(), "332abe93-f488-41ba-870b-2ac66be7f853", []pools.BatchUpdateMemberOpts{ 323 { 324 Address: "192.0.2.17", 325 Name: &name, 326 }, 327 }) 328 if res.Err == nil { 329 t.Fatalf("Expected error, but got none") 330 } 331 332 res = pools.BatchUpdateMembers(fake.ServiceClient(), "332abe93-f488-41ba-870b-2ac66be7f853", []pools.BatchUpdateMemberOpts{ 333 { 334 ProtocolPort: 80, 335 Name: &name, 336 }, 337 }) 338 if res.Err == nil { 339 t.Fatalf("Expected error, but got none") 340 } 341 }