talos/pkg/machinery/labels/validate_test.go
Dmitriy Matrenichev dd45dd06cf
chore: add custom node taints
This PR adds support for custom node taints. Refer to `nodeTaints` in the `configuration` for more information.

Closes #7581

Signed-off-by: Dmitriy Matrenichev <dmitry.matrenichev@siderolabs.com>
2023-11-25 18:33:18 +03:00

99 lines
3.0 KiB
Go

// 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 http://mozilla.org/MPL/2.0/.
package labels_test
import (
"strings"
"testing"
"github.com/stretchr/testify/assert"
"github.com/siderolabs/talos/pkg/machinery/labels"
)
func TestValidate(t *testing.T) {
for _, tt := range []struct {
name string
labels map[string]string
expectedError string
}{
{
name: "empty",
},
{
name: "valid",
labels: map[string]string{
"talos.dev/label": "value",
"foo": "bar",
"kubernetes.io/hostname": "hostname1",
},
},
{
name: "invalid",
labels: map[string]string{
"345@.345/label": "value",
"foo_": "bar",
"/foo": "bar",
"a/b/c": "bar",
"kubernetes.io/hostname": "hostname1_",
strings.Repeat("a", 64): "bar",
"bar": strings.Repeat("a", 64),
},
expectedError: "7 errors occurred:\n\t* prefix cannot be empty: \"/foo\"\n\t* prefix \"345@.345\" is invalid: domain doesn't match required format: \"345@.345\"\n\t* invalid format: too many slashes: \"a/b/c\"\n\t* name is too long: \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\" (limit is 63)\n\t* label value length exceeds limit of 63: \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\"\n\t* name \"foo_\" is invalid\n\t* label value \"hostname1_\" is invalid\n\n", //nolint:lll
},
} {
t.Run(tt.name, func(t *testing.T) {
err := labels.Validate(tt.labels)
if tt.expectedError != "" {
assert.EqualError(t, err, tt.expectedError)
} else {
assert.NoError(t, err)
}
})
}
}
func TestValidateTaints(t *testing.T) {
for _, tt := range []struct {
name string
taints map[string]string
expectedError string
}{
{
name: "empty",
},
{
name: "valid",
taints: map[string]string{
"foor": "bar:NoExecute",
"doo": "NoExecute",
},
},
{
name: "invalid",
taints: map[string]string{
strings.Repeat("a", 64): "bar",
"bar": strings.Repeat("a", 64),
"foo": "bar:NoExecute:NoSchedule",
"loo": "bar:",
"zoo": "bar:NoExocute",
"koo": "key",
},
expectedError: "6 errors occurred:\n\t* name is too long: \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\" (limit is 63)\n\t* invalid taint effect: \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\"\n\t* invalid taint effect: \"NoExecute:NoSchedule\"\n\t* invalid taint effect: \"key\"\n\t* invalid taint effect: \"\"\n\t* invalid taint effect: \"NoExocute\"\n\n", //nolint:lll
},
} {
t.Run(tt.name, func(t *testing.T) {
err := labels.ValidateTaints(tt.taints)
if tt.expectedError != "" {
assert.EqualError(t, err, tt.expectedError)
} else {
assert.NoError(t, err)
}
})
}
}