|
5 | 5 | "fmt" |
6 | 6 | "os" |
7 | 7 | "regexp" |
| 8 | + "strings" |
8 | 9 | "testing" |
9 | 10 |
|
10 | 11 | "terraform-provider-dg-servicebus/internal/provider/asb" |
@@ -322,6 +323,148 @@ func TestAcc_EndpointDataSourceTest(t *testing.T) { |
322 | 323 | ensure_enpoint_deleted(client, endpoint_correlation_with_subcription_name) |
323 | 324 | } |
324 | 325 |
|
| 326 | +func TestAcc_EndpointSubscriptionOrderChanges(t *testing.T) { |
| 327 | + client := createClient(t) |
| 328 | + |
| 329 | + endpoint_name := acctest.RandString(10) + "-test-ordes-endpoint" |
| 330 | + subscriptionFilterValue1 := "Dg.Test.Subscription.V1" |
| 331 | + subscriptionFilterValue2 := "Dg.Test.Subscription.V2" |
| 332 | + subscriptionFilterValue3 := "Dg.Test.Subscription.V3" |
| 333 | + subscriptionFilterValue4 := "Dg.Test.Subscription.V4" |
| 334 | + |
| 335 | + resource.ParallelTest(t, resource.TestCase{ |
| 336 | + ProtoV6ProviderFactories: testAccProtoV6ProviderFactories, |
| 337 | + Steps: []resource.TestStep{ |
| 338 | + //Create resource with 3 subscriptions |
| 339 | + { |
| 340 | + Config: providerConfig + fmt.Sprintf(` |
| 341 | + resource "dgservicebus_endpoint" "test" { |
| 342 | + endpoint_name = "%v" |
| 343 | + topic_name = "bundle-1" |
| 344 | + subscriptions = [ |
| 345 | + {filter = "%v", filter_type = "sql"}, |
| 346 | + {filter = "%v", filter_type = "sql"}, |
| 347 | + {filter = "%v", filter_type = "sql"} |
| 348 | + ] |
| 349 | +
|
| 350 | + queue_options = { |
| 351 | + enable_partitioning = true, |
| 352 | + max_size_in_megabytes = 5120, |
| 353 | + max_message_size_in_kilobytes = 256 |
| 354 | + } |
| 355 | + }`, endpoint_name, subscriptionFilterValue1, subscriptionFilterValue2, subscriptionFilterValue3), |
| 356 | + Check: resource.ComposeAggregateTestCheckFunc( |
| 357 | + resource.TestCheckResourceAttr("dgservicebus_endpoint.test", "subscriptions.#", "3"), |
| 358 | + resource.TestCheckResourceAttr("dgservicebus_endpoint.test", "subscriptions.0.filter", subscriptionFilterValue1), |
| 359 | + resource.TestCheckResourceAttr("dgservicebus_endpoint.test", "subscriptions.1.filter", subscriptionFilterValue2), |
| 360 | + resource.TestCheckResourceAttr("dgservicebus_endpoint.test", "subscriptions.2.filter", subscriptionFilterValue3), |
| 361 | + resource.TestCheckResourceAttr("dgservicebus_endpoint.test", "endpoint_name", endpoint_name), |
| 362 | + ), |
| 363 | + }, |
| 364 | + // Change order of subscriptions |
| 365 | + { |
| 366 | + Config: providerConfig + fmt.Sprintf(` |
| 367 | + resource "dgservicebus_endpoint" "test" { |
| 368 | + endpoint_name = "%v" |
| 369 | + topic_name = "bundle-1" |
| 370 | + subscriptions = [ |
| 371 | + {filter = "%v", filter_type = "sql"}, |
| 372 | + {filter = "%v", filter_type = "sql"}, |
| 373 | + {filter = "%v", filter_type = "sql"} |
| 374 | + ] |
| 375 | +
|
| 376 | + queue_options = { |
| 377 | + enable_partitioning = true, |
| 378 | + max_size_in_megabytes = 5120, |
| 379 | + max_message_size_in_kilobytes = 256 |
| 380 | + } |
| 381 | + }`, endpoint_name, subscriptionFilterValue3, subscriptionFilterValue1, subscriptionFilterValue2), |
| 382 | + Check: resource.ComposeAggregateTestCheckFunc( |
| 383 | + resource.TestCheckResourceAttr("dgservicebus_endpoint.test", "subscriptions.#", "3"), |
| 384 | + resource.TestCheckResourceAttr("dgservicebus_endpoint.test", "subscriptions.0.filter", subscriptionFilterValue1), |
| 385 | + resource.TestCheckResourceAttr("dgservicebus_endpoint.test", "subscriptions.1.filter", subscriptionFilterValue2), |
| 386 | + resource.TestCheckResourceAttr("dgservicebus_endpoint.test", "subscriptions.2.filter", subscriptionFilterValue3), |
| 387 | + resource.TestCheckResourceAttr("dgservicebus_endpoint.test", "endpoint_name", endpoint_name), |
| 388 | + func(s *terraform.State) error { |
| 389 | + subscriptions, _ := client.GetAsbSubscriptionsRules(context.Background(), asb.AsbEndpointModel{ |
| 390 | + EndpointName: endpoint_name, |
| 391 | + TopicName: "bundle-1", |
| 392 | + }) |
| 393 | + if len(subscriptions) != 3 { |
| 394 | + return fmt.Errorf("Expected 3 subscriptions") |
| 395 | + } |
| 396 | + contains := func(subscriptions []asb.AsbSubscriptionRule, filter string) bool { |
| 397 | + for _, subscription := range subscriptions { |
| 398 | + if strings.Contains(subscription.Filter, filter) { |
| 399 | + return true |
| 400 | + } |
| 401 | + } |
| 402 | + return false |
| 403 | + } |
| 404 | + |
| 405 | + if !contains(subscriptions, subscriptionFilterValue1) || !contains(subscriptions, subscriptionFilterValue2) || !contains(subscriptions, subscriptionFilterValue3) { |
| 406 | + return fmt.Errorf("Expected subscriptions to contain %v, %v, %v", subscriptionFilterValue1, subscriptionFilterValue2, subscriptionFilterValue3) |
| 407 | + } |
| 408 | + |
| 409 | + return nil |
| 410 | + }, |
| 411 | + ), |
| 412 | + }, |
| 413 | + // Add new subscription, remove one |
| 414 | + { |
| 415 | + Config: providerConfig + fmt.Sprintf(` |
| 416 | + resource "dgservicebus_endpoint" "test" { |
| 417 | + endpoint_name = "%v" |
| 418 | + topic_name = "bundle-1" |
| 419 | + subscriptions = [ |
| 420 | + {filter = "%v", filter_type = "sql"}, |
| 421 | + {filter = "%v", filter_type = "sql"}, |
| 422 | + {filter = "%v", filter_type = "sql"} |
| 423 | + ] |
| 424 | +
|
| 425 | + queue_options = { |
| 426 | + enable_partitioning = true, |
| 427 | + max_size_in_megabytes = 5120, |
| 428 | + max_message_size_in_kilobytes = 256 |
| 429 | + } |
| 430 | + }`, endpoint_name, subscriptionFilterValue3, subscriptionFilterValue2, subscriptionFilterValue4), |
| 431 | + Check: resource.ComposeAggregateTestCheckFunc( |
| 432 | + resource.TestCheckResourceAttr("dgservicebus_endpoint.test", "subscriptions.#", "3"), |
| 433 | + resource.TestCheckResourceAttr("dgservicebus_endpoint.test", "subscriptions.0.filter", subscriptionFilterValue2), |
| 434 | + resource.TestCheckResourceAttr("dgservicebus_endpoint.test", "subscriptions.1.filter", subscriptionFilterValue3), |
| 435 | + resource.TestCheckResourceAttr("dgservicebus_endpoint.test", "subscriptions.2.filter", subscriptionFilterValue4), |
| 436 | + resource.TestCheckResourceAttr("dgservicebus_endpoint.test", "endpoint_name", endpoint_name), |
| 437 | + func(s *terraform.State) error { |
| 438 | + subscriptions, _ := client.GetAsbSubscriptionsRules(context.Background(), asb.AsbEndpointModel{ |
| 439 | + EndpointName: endpoint_name, |
| 440 | + TopicName: "bundle-1", |
| 441 | + }) |
| 442 | + if len(subscriptions) != 3 { |
| 443 | + return fmt.Errorf("Expected 3 subscriptions") |
| 444 | + } |
| 445 | + contains := func(subscriptions []asb.AsbSubscriptionRule, filter string) bool { |
| 446 | + for _, subscription := range subscriptions { |
| 447 | + if strings.Contains(subscription.Filter, filter) { |
| 448 | + return true |
| 449 | + } |
| 450 | + } |
| 451 | + return false |
| 452 | + } |
| 453 | + |
| 454 | + if !contains(subscriptions, subscriptionFilterValue2) || !contains(subscriptions, subscriptionFilterValue3) || !contains(subscriptions, subscriptionFilterValue4) { |
| 455 | + return fmt.Errorf("Expected subscriptions to contain %v, %v, %v", subscriptionFilterValue2, subscriptionFilterValue3, subscriptionFilterValue4) |
| 456 | + } |
| 457 | + |
| 458 | + return nil |
| 459 | + }, |
| 460 | + ), |
| 461 | + }, |
| 462 | + }, |
| 463 | + }) |
| 464 | + |
| 465 | + ensure_enpoint_deleted(client, endpoint_name) |
| 466 | +} |
| 467 | + |
325 | 468 | func TestAcc_EndpointSqlCorrelationUpdate(t *testing.T) { |
326 | 469 | // Init test test resources |
327 | 470 | var client = createClient(t) |
|
0 commit comments