mirror of
https://github.com/siderolabs/talos.git
synced 2025-10-28 15:01:13 +01:00
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>
99 lines
3.0 KiB
Go
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)
|
|
}
|
|
})
|
|
}
|
|
}
|