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