Skip to content

Commit ceba610

Browse files
PSA-30969 Use Set instead of List (#55)
1 parent 906fb06 commit ceba610

File tree

3 files changed

+145
-2
lines changed

3 files changed

+145
-2
lines changed

docs/resources/endpoint.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ resource "dgservicebus_endpoint" "example" {
3636

3737
- `endpoint_name` (String) The name of the endpoint to create.
3838
- `queue_options` (Attributes) The options for the queue, which is created for the endpoint. (see [below for nested schema](#nestedatt--queue_options))
39-
- `subscriptions` (Attributes List) (see [below for nested schema](#nestedatt--subscriptions))
39+
- `subscriptions` (Attributes Set) (see [below for nested schema](#nestedatt--subscriptions))
4040
- `topic_name` (String) The name of the topic to create the endpoint on.
4141

4242
### Optional

internal/provider/endpoint/endpoint_schema_v1.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ func NewSchemaV1() schema.Schema {
3535
stringplanmodifier.RequiresReplace(),
3636
},
3737
},
38-
"subscriptions": schema.ListNestedAttribute{
38+
"subscriptions": schema.SetNestedAttribute{
3939
Required: true,
4040
NestedObject: schema.NestedAttributeObject{
4141
Attributes: map[string]schema.Attribute{

internal/provider/provider_test.go

Lines changed: 143 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"fmt"
66
"os"
77
"regexp"
8+
"strings"
89
"testing"
910

1011
"terraform-provider-dg-servicebus/internal/provider/asb"
@@ -322,6 +323,148 @@ func TestAcc_EndpointDataSourceTest(t *testing.T) {
322323
ensure_enpoint_deleted(client, endpoint_correlation_with_subcription_name)
323324
}
324325

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+
325468
func TestAcc_EndpointSqlCorrelationUpdate(t *testing.T) {
326469
// Init test test resources
327470
var client = createClient(t)

0 commit comments

Comments
 (0)