- Uniformed logs and diagnostics: - Logging and adding to diagnostics is done by the highest level function (Create/Read/Update/Delete/Import) using `LogAndAddError` - Lower-level routines' signature changed to return error instead of writing to diagnostics - Standardize summary and details across services - Removed manual adding of relevant variables to details (they're in the context, TF adds them to logs) - Changed validators to be closer to official implementation - Fix logging wrong output after wait - Fix Argus checking wrong diagnostics - Fix Resource Manager not updating state after project update - Fix unnecessary pointer in LogAndAddError
210 lines
3.4 KiB
Go
210 lines
3.4 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())
|
|
}
|
|
})
|
|
}
|
|
}
|