diff --git a/proxmoxtf/resource/validator/network.go b/proxmoxtf/resource/validator/network.go index dc78c181..b3c315b8 100644 --- a/proxmoxtf/resource/validator/network.go +++ b/proxmoxtf/resource/validator/network.go @@ -16,23 +16,23 @@ import ( // MACAddress is a schema validation function for MAC address. func MACAddress() schema.SchemaValidateDiagFunc { - return validation.ToDiagFunc(func(i interface{}, k string) ([]string, []error) { + return validation.ToDiagFunc(func(i interface{}, path string) ([]string, []error) { v, ok := i.(string) var ws []string var es []error if !ok { - es = append(es, fmt.Errorf("expected type of %s to be string", k)) + es = append(es, fmt.Errorf("expected type of %q to be string", path)) return ws, es } if v != "" { - r := regexp.MustCompile(`^[A-Z\d]{2}(:[A-Z\d]{2}){5}$`) + r := regexp.MustCompile(`^[A-Fa-f0-9]{2}(:[A-Fa-f0-9]{2}){5}$`) ok := r.MatchString(v) if !ok { - es = append(es, fmt.Errorf("expected %s to be a valid MAC address (A0:B1:C2:D3:E4:F5), got %s", k, v)) + es = append(es, fmt.Errorf("expected %q to be a valid MAC address (A0:B1:C2:D3:E4:F5), got %q", path, v)) return ws, es } } diff --git a/proxmoxtf/resource/validator/network_test.go b/proxmoxtf/resource/validator/network_test.go new file mode 100644 index 00000000..539d243d --- /dev/null +++ b/proxmoxtf/resource/validator/network_test.go @@ -0,0 +1,46 @@ +/* + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + */ + +package validator + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +func TestMACAddress(t *testing.T) { + t.Parallel() + + tests := []struct { + name string + value string + valid bool + }{ + {"empty", "", true}, + {"invalid", "invalid", false}, + {"invalid: no dashes", "38-f9-d3-4b-f5-51", false}, + {"valid", "38:f9:d3:4b:f5:51", true}, + {"valid", "38:F9:D3:4B:F5:51", true}, + {"valid", "00:15:5d:00:09:03", true}, + } + + for _, tt := range tests { + tt := tt + t.Run(tt.name, func(t *testing.T) { + t.Parallel() + + f := MACAddress() + res := f(tt.value, nil) + + if tt.valid { + require.Empty(t, res, "validate: '%s'", tt.value) + } else { + require.NotEmpty(t, res, "validate: '%s'", tt.value) + } + }) + } +}