Skip to content

Commit 7708a19

Browse files
authored
fix(rdb): fix acl test (#1221)
1 parent f8d76aa commit 7708a19

5 files changed

+1173
-625
lines changed

scaleway/data_source_rdb_acl_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import (
77
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
88
)
99

10-
func TestAccScalewayDataSourceRDBAcl_Basic(t *testing.T) {
10+
func TestAccScalewayDataSourceRdbAcl_Basic(t *testing.T) {
1111
tt := NewTestTools(t)
1212
defer tt.Cleanup()
1313
instanceName := "TestAccScalewayDataSourceRDBAcl_Basic"
@@ -63,9 +63,9 @@ func TestAccScalewayDataSourceRDBAcl_Basic(t *testing.T) {
6363
description = "bar"
6464
}
6565
}
66+
6667
data "scaleway_rdb_acl" "maindata" {
6768
instance_id = scaleway_rdb_instance.main.id
68-
6969
}`, instanceName),
7070
Check: resource.ComposeTestCheckFunc(
7171
resource.TestCheckResourceAttr("scaleway_rdb_acl.main", "acl_rules.0.ip", "1.2.3.4/32"),

scaleway/resource_rdb_acl.go

+24-6
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
package scaleway
22

33
import (
4+
"bytes"
45
"context"
6+
"net"
7+
"sort"
58

69
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
710
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
@@ -32,7 +35,7 @@ func resourceScalewayRdbACL() *schema.Resource {
3235
Description: "Instance on which the ACL is applied",
3336
},
3437
"acl_rules": {
35-
Type: schema.TypeSet,
38+
Type: schema.TypeList,
3639
Required: true,
3740
Description: "List of ACL rules to apply",
3841
Elem: &schema.Resource{
@@ -70,7 +73,7 @@ func resourceScalewayRdbACLCreate(ctx context.Context, d *schema.ResourceData, m
7073
return diag.FromErr(err)
7174
}
7275

73-
aclRules, err := rdbACLExpand(d.Get("acl_rules").(*schema.Set))
76+
aclRules, err := rdbACLExpand(d.Get("acl_rules").([]interface{}))
7477
if err != nil {
7578
return diag.FromErr(err)
7679
}
@@ -139,7 +142,7 @@ func resourceScalewayRdbACLUpdate(ctx context.Context, d *schema.ResourceData, m
139142
return diag.FromErr(err)
140143
}
141144

142-
aclRules, err := rdbACLExpand(d.Get("acl_rules").(*schema.Set))
145+
aclRules, err := rdbACLExpand(d.Get("acl_rules").([]interface{}))
143146
if err != nil {
144147
return diag.FromErr(err)
145148
}
@@ -164,7 +167,7 @@ func resourceScalewayRdbACLDelete(ctx context.Context, d *schema.ResourceData, m
164167
return diag.FromErr(err)
165168
}
166169
aclRuleIPs := make([]string, 0)
167-
aclRules, err := rdbACLExpand(d.Get("acl_rules").(*schema.Set))
170+
aclRules, err := rdbACLExpand(d.Get("acl_rules").([]interface{}))
168171
if err != nil {
169172
return diag.FromErr(err)
170173
}
@@ -182,17 +185,21 @@ func resourceScalewayRdbACLDelete(ctx context.Context, d *schema.ResourceData, m
182185
InstanceID: instanceID,
183186
ACLRuleIPs: aclRuleIPs,
184187
}, scw.WithContext(ctx))
188+
if err != nil && !is404Error(err) {
189+
return diag.FromErr(err)
190+
}
185191

192+
_, err = waitForRDBInstance(ctx, rdbAPI, region, instanceID, d.Timeout(schema.TimeoutDelete))
186193
if err != nil && !is404Error(err) {
187194
return diag.FromErr(err)
188195
}
189196

190197
return nil
191198
}
192199

193-
func rdbACLExpand(data *schema.Set) ([]*rdb.ACLRuleRequest, error) {
200+
func rdbACLExpand(data []interface{}) ([]*rdb.ACLRuleRequest, error) {
194201
var res []*rdb.ACLRuleRequest
195-
for _, rule := range data.List() {
202+
for _, rule := range data {
196203
r := rule.(map[string]interface{})
197204
ip, err := expandIPNet(r["ip"].(string))
198205
if err != nil {
@@ -204,6 +211,10 @@ func rdbACLExpand(data *schema.Set) ([]*rdb.ACLRuleRequest, error) {
204211
})
205212
}
206213

214+
sort.Slice(res, func(i, j int) bool {
215+
return bytes.Compare(res[i].IP.IP, res[j].IP.IP) < 0
216+
})
217+
207218
return res, nil
208219
}
209220

@@ -216,5 +227,12 @@ func rdbACLRulesFlatten(rules []*rdb.ACLRule) []map[string]interface{} {
216227
}
217228
res = append(res, r)
218229
}
230+
231+
sort.Slice(res, func(i, j int) bool {
232+
ipI, _, _ := net.ParseCIDR(res[i]["ip"].(string))
233+
ipJ, _, _ := net.ParseCIDR(res[j]["ip"].(string))
234+
return bytes.Compare(ipI, ipJ) < 0
235+
})
236+
219237
return res
220238
}

scaleway/resource_rdb_acl_test.go

+8-8
Original file line numberDiff line numberDiff line change
@@ -77,10 +77,10 @@ func TestAccScalewayRdbACL_Basic(t *testing.T) {
7777
}
7878
}`, instanceName),
7979
Check: resource.ComposeTestCheckFunc(
80-
resource.TestCheckResourceAttr("scaleway_rdb_acl.main", "acl_rules.0.ip", "4.5.6.7/32"),
81-
resource.TestCheckResourceAttr("scaleway_rdb_acl.main", "acl_rules.0.description", "bar"),
82-
resource.TestCheckResourceAttr("scaleway_rdb_acl.main", "acl_rules.1.ip", "1.2.3.4/32"),
83-
resource.TestCheckResourceAttr("scaleway_rdb_acl.main", "acl_rules.1.description", "foo"),
80+
resource.TestCheckResourceAttr("scaleway_rdb_acl.main", "acl_rules.0.ip", "1.2.3.4/32"),
81+
resource.TestCheckResourceAttr("scaleway_rdb_acl.main", "acl_rules.0.description", "foo"),
82+
resource.TestCheckResourceAttr("scaleway_rdb_acl.main", "acl_rules.1.ip", "4.5.6.7/32"),
83+
resource.TestCheckResourceAttr("scaleway_rdb_acl.main", "acl_rules.1.description", "bar"),
8484
),
8585
},
8686
{
@@ -105,10 +105,10 @@ func TestAccScalewayRdbACL_Basic(t *testing.T) {
105105
}
106106
}`, instanceName),
107107
Check: resource.ComposeTestCheckFunc(
108-
resource.TestCheckResourceAttr("scaleway_rdb_acl.main", "acl_rules.0.ip", "9.0.0.0/16"),
109-
resource.TestCheckResourceAttr("scaleway_rdb_acl.main", "acl_rules.0.description", "baz"),
110-
resource.TestCheckResourceAttr("scaleway_rdb_acl.main", "acl_rules.1.ip", "1.2.3.4/32"),
111-
resource.TestCheckResourceAttr("scaleway_rdb_acl.main", "acl_rules.1.description", "foo"),
108+
resource.TestCheckResourceAttr("scaleway_rdb_acl.main", "acl_rules.1.ip", "9.0.0.0/16"),
109+
resource.TestCheckResourceAttr("scaleway_rdb_acl.main", "acl_rules.1.description", "baz"),
110+
resource.TestCheckResourceAttr("scaleway_rdb_acl.main", "acl_rules.0.ip", "1.2.3.4/32"),
111+
resource.TestCheckResourceAttr("scaleway_rdb_acl.main", "acl_rules.0.description", "foo"),
112112
),
113113
},
114114
{

0 commit comments

Comments
 (0)