* Add CIDR validator * Implement `syncACL`, add it to creation * Rename function * Rename variables * Add mapACLs * Implement instance update * Add ACLs to acc test * Add ACL to schema * Add new line * Fix not using the ACLs read from config * Add test case where ACLs aren't set * Fix lint * Generate docs * Add uniqueness check for ACLs * Add repeated ACLs test cases * Remove debug leftover * Change test cases * Rename data * Add ACL description * Generate docs * Change ACL attribute type * Remove test case --------- Co-authored-by: Henrique Santos <henrique.santos@freiheit.com>
348 lines
5.7 KiB
Go
348 lines
5.7 KiB
Go
package validate
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
|
|
"github.com/hashicorp/terraform-plugin-framework/schema/validator"
|
|
"github.com/hashicorp/terraform-plugin-framework/types"
|
|
)
|
|
|
|
func TestUUID(t *testing.T) {
|
|
tests := []struct {
|
|
description string
|
|
input string
|
|
isValid bool
|
|
}{
|
|
{
|
|
"ok",
|
|
"cae27bba-c43d-498a-861e-d11d241c4ff8",
|
|
true,
|
|
},
|
|
{
|
|
"too short",
|
|
"a-b-c-d",
|
|
false,
|
|
},
|
|
{
|
|
"Empty",
|
|
"",
|
|
false,
|
|
},
|
|
{
|
|
"not UUID",
|
|
"www-541-%",
|
|
false,
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.description, func(t *testing.T) {
|
|
r := validator.StringResponse{}
|
|
UUID().ValidateString(context.Background(), validator.StringRequest{
|
|
ConfigValue: types.StringValue(tt.input),
|
|
}, &r)
|
|
|
|
if !tt.isValid && !r.Diagnostics.HasError() {
|
|
t.Fatalf("Should have failed")
|
|
}
|
|
if tt.isValid && r.Diagnostics.HasError() {
|
|
t.Fatalf("Should not have failed: %v", r.Diagnostics.Errors())
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestIP(t *testing.T) {
|
|
tests := []struct {
|
|
description string
|
|
input string
|
|
isValid bool
|
|
}{
|
|
{
|
|
"ok IP4",
|
|
"111.222.111.222",
|
|
true,
|
|
},
|
|
{
|
|
"ok IP6",
|
|
"2001:0db8:85a3:08d3::0370:7344",
|
|
true,
|
|
},
|
|
{
|
|
"too short",
|
|
"0.1.2",
|
|
false,
|
|
},
|
|
{
|
|
"Empty",
|
|
"",
|
|
false,
|
|
},
|
|
{
|
|
"Not an IP",
|
|
"for-sure-not-an-IP",
|
|
false,
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.description, func(t *testing.T) {
|
|
r := validator.StringResponse{}
|
|
IP().ValidateString(context.Background(), validator.StringRequest{
|
|
ConfigValue: types.StringValue(tt.input),
|
|
}, &r)
|
|
|
|
if !tt.isValid && !r.Diagnostics.HasError() {
|
|
t.Fatalf("Should have failed")
|
|
}
|
|
if tt.isValid && r.Diagnostics.HasError() {
|
|
t.Fatalf("Should not have failed: %v", r.Diagnostics.Errors())
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestNoSeparator(t *testing.T) {
|
|
tests := []struct {
|
|
description string
|
|
input string
|
|
isValid bool
|
|
}{
|
|
{
|
|
"ok",
|
|
"ABCD",
|
|
true,
|
|
},
|
|
{
|
|
"ok-2",
|
|
"#$%&/()=.;-",
|
|
true,
|
|
},
|
|
{
|
|
"Empty",
|
|
"",
|
|
true,
|
|
},
|
|
{
|
|
"not ok",
|
|
"ab,",
|
|
false,
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.description, func(t *testing.T) {
|
|
r := validator.StringResponse{}
|
|
NoSeparator().ValidateString(context.Background(), validator.StringRequest{
|
|
ConfigValue: types.StringValue(tt.input),
|
|
}, &r)
|
|
|
|
if !tt.isValid && !r.Diagnostics.HasError() {
|
|
t.Fatalf("Should have failed")
|
|
}
|
|
if tt.isValid && r.Diagnostics.HasError() {
|
|
t.Fatalf("Should not have failed: %v", r.Diagnostics.Errors())
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestMinorVersionNumber(t *testing.T) {
|
|
tests := []struct {
|
|
description string
|
|
input string
|
|
isValid bool
|
|
}{
|
|
{
|
|
"ok",
|
|
"1.20",
|
|
true,
|
|
},
|
|
{
|
|
"ok-2",
|
|
"1.3",
|
|
true,
|
|
},
|
|
{
|
|
"ok-3",
|
|
"10.1",
|
|
true,
|
|
},
|
|
{
|
|
"Empty",
|
|
"",
|
|
false,
|
|
},
|
|
{
|
|
"not ok",
|
|
"afssfdfs",
|
|
false,
|
|
},
|
|
{
|
|
"not ok-major-version",
|
|
"1",
|
|
false,
|
|
},
|
|
{
|
|
"not ok-patch-version",
|
|
"1.20.1",
|
|
false,
|
|
},
|
|
{
|
|
"not ok-version",
|
|
"v1.20.1",
|
|
false,
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.description, func(t *testing.T) {
|
|
r := validator.StringResponse{}
|
|
MinorVersionNumber().ValidateString(context.Background(), validator.StringRequest{
|
|
ConfigValue: types.StringValue(tt.input),
|
|
}, &r)
|
|
|
|
if !tt.isValid && !r.Diagnostics.HasError() {
|
|
t.Fatalf("Should have failed")
|
|
}
|
|
if tt.isValid && r.Diagnostics.HasError() {
|
|
t.Fatalf("Should not have failed: %v", r.Diagnostics.Errors())
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestRFC3339SecondsOnly(t *testing.T) {
|
|
tests := []struct {
|
|
description string
|
|
input string
|
|
isValid bool
|
|
}{
|
|
{
|
|
"ok",
|
|
"9999-01-02T03:04:05Z",
|
|
true,
|
|
},
|
|
{
|
|
"ok_2",
|
|
"9999-01-02T03:04:05+06:00",
|
|
true,
|
|
},
|
|
{
|
|
"empty",
|
|
"",
|
|
false,
|
|
},
|
|
{
|
|
"not_ok",
|
|
"foo-bar",
|
|
false,
|
|
},
|
|
{
|
|
"with_sub_seconds",
|
|
"9999-01-02T03:04:05.678Z",
|
|
false,
|
|
},
|
|
{
|
|
"with_sub_seconds_2",
|
|
"9999-01-02T03:04:05.678+06:00",
|
|
false,
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.description, func(t *testing.T) {
|
|
r := validator.StringResponse{}
|
|
RFC3339SecondsOnly().ValidateString(context.Background(), validator.StringRequest{
|
|
ConfigValue: types.StringValue(tt.input),
|
|
}, &r)
|
|
|
|
if !tt.isValid && !r.Diagnostics.HasError() {
|
|
t.Fatalf("Should have failed")
|
|
}
|
|
if tt.isValid && r.Diagnostics.HasError() {
|
|
t.Fatalf("Should not have failed: %v", r.Diagnostics.Errors())
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestCIDR(t *testing.T) {
|
|
tests := []struct {
|
|
description string
|
|
input string
|
|
isValid bool
|
|
}{
|
|
{
|
|
"IPv4_block",
|
|
"198.51.100.14/24",
|
|
true,
|
|
},
|
|
{
|
|
"IPv4_block_2",
|
|
"111.222.111.222/22",
|
|
true,
|
|
},
|
|
{
|
|
"IPv4_single",
|
|
"198.51.100.14/32",
|
|
true,
|
|
},
|
|
{
|
|
"IPv4_entire_internet",
|
|
"0.0.0.0/0",
|
|
true,
|
|
},
|
|
{
|
|
"IPv4_block_invalid",
|
|
"198.51.100.14/33",
|
|
false,
|
|
},
|
|
{
|
|
"IPv4_no_block",
|
|
"111.222.111.222",
|
|
false,
|
|
},
|
|
{
|
|
"IPv6_block",
|
|
"2001:db8::/48",
|
|
true,
|
|
},
|
|
{
|
|
"IPv6_single",
|
|
"2001:0db8:85a3:08d3::0370:7344/128",
|
|
true,
|
|
},
|
|
{
|
|
"IPv6_all",
|
|
"::/0",
|
|
true,
|
|
},
|
|
{
|
|
"IPv6_block_invalid",
|
|
"2001:0db8:85a3:08d3::0370:7344/129",
|
|
false,
|
|
},
|
|
{
|
|
"IPv6_no_block",
|
|
"2001:0db8:85a3:08d3::0370:7344",
|
|
false,
|
|
},
|
|
{
|
|
"empty",
|
|
"",
|
|
false,
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.description, func(t *testing.T) {
|
|
r := validator.StringResponse{}
|
|
CIDR().ValidateString(context.Background(), validator.StringRequest{
|
|
ConfigValue: types.StringValue(tt.input),
|
|
}, &r)
|
|
|
|
if !tt.isValid && !r.Diagnostics.HasError() {
|
|
t.Fatalf("Should have failed")
|
|
}
|
|
if tt.isValid && r.Diagnostics.HasError() {
|
|
t.Fatalf("Should not have failed: %v", r.Diagnostics.Errors())
|
|
}
|
|
})
|
|
}
|
|
}
|