Fix tolerations not parsing its options correctly, add tests
Signed-off-by: Zsolt <zsolt.szeberenyi@figured.com>pull/1053/head
parent
a2d5bc7cca
commit
4a226568a0
@ -0,0 +1,26 @@
|
|||||||
|
package commands
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestCsvToMap(t *testing.T) {
|
||||||
|
d := []string{
|
||||||
|
"\"tolerations=key=foo,value=bar;key=foo2,value=bar2\",replicas=1",
|
||||||
|
"namespace=default",
|
||||||
|
}
|
||||||
|
r, err := csvToMap(d)
|
||||||
|
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
require.Contains(t, r, "tolerations")
|
||||||
|
require.Equal(t, r["tolerations"], "key=foo,value=bar;key=foo2,value=bar2")
|
||||||
|
|
||||||
|
require.Contains(t, r, "replicas")
|
||||||
|
require.Equal(t, r["replicas"], "1")
|
||||||
|
|
||||||
|
require.Contains(t, r, "namespace")
|
||||||
|
require.Equal(t, r["namespace"], "default")
|
||||||
|
}
|
@ -0,0 +1,230 @@
|
|||||||
|
package kubernetes
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/docker/buildx/driver"
|
||||||
|
"github.com/docker/buildx/driver/bkimage"
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
|
v1 "k8s.io/api/core/v1"
|
||||||
|
"k8s.io/client-go/rest"
|
||||||
|
)
|
||||||
|
|
||||||
|
type mockKubeClientConfig struct {
|
||||||
|
clientConfig *rest.Config
|
||||||
|
namespace string
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *mockKubeClientConfig) ClientConfig() (*rest.Config, error) {
|
||||||
|
return r.clientConfig, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *mockKubeClientConfig) Namespace() (string, bool, error) {
|
||||||
|
return r.namespace, true, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestFactory_processDriverOpts(t *testing.T) {
|
||||||
|
kcc := mockKubeClientConfig{
|
||||||
|
clientConfig: &rest.Config{},
|
||||||
|
}
|
||||||
|
|
||||||
|
cfg := driver.InitConfig{
|
||||||
|
Name: "buildx_buildkit_test",
|
||||||
|
KubeClientConfig: &kcc,
|
||||||
|
}
|
||||||
|
f := factory{}
|
||||||
|
|
||||||
|
t.Run(
|
||||||
|
"ValidOptions", func(t *testing.T) {
|
||||||
|
cfg.DriverOpts = map[string]string{
|
||||||
|
"namespace": "test-ns",
|
||||||
|
"image": "test:latest",
|
||||||
|
"replicas": "2",
|
||||||
|
"requests.cpu": "100m",
|
||||||
|
"requests.memory": "32Mi",
|
||||||
|
"limits.cpu": "200m",
|
||||||
|
"limits.memory": "64Mi",
|
||||||
|
"rootless": "true",
|
||||||
|
"nodeselector": "selector1=value1,selector2=value2",
|
||||||
|
"tolerations": "key=tolerationKey1,value=tolerationValue1,operator=Equal,effect=NoSchedule,tolerationSeconds=60;key=tolerationKey2,operator=Exists",
|
||||||
|
"loadbalance": "random",
|
||||||
|
"qemu.install": "true",
|
||||||
|
"qemu.image": "qemu:latest",
|
||||||
|
}
|
||||||
|
ns := "test"
|
||||||
|
|
||||||
|
r, loadbalance, ns, err := f.processDriverOpts(cfg.Name, ns, cfg)
|
||||||
|
|
||||||
|
nodeSelectors := map[string]string{
|
||||||
|
"selector1": "value1",
|
||||||
|
"selector2": "value2",
|
||||||
|
}
|
||||||
|
|
||||||
|
ts := int64(60)
|
||||||
|
tolerations := []v1.Toleration{
|
||||||
|
{
|
||||||
|
Key: "tolerationKey1",
|
||||||
|
Operator: v1.TolerationOpEqual,
|
||||||
|
Value: "tolerationValue1",
|
||||||
|
Effect: v1.TaintEffectNoSchedule,
|
||||||
|
TolerationSeconds: &ts,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Key: "tolerationKey2",
|
||||||
|
Operator: v1.TolerationOpExists,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
require.Equal(t, "test-ns", ns)
|
||||||
|
require.Equal(t, "test:latest", r.Image)
|
||||||
|
require.Equal(t, 2, r.Replicas)
|
||||||
|
require.Equal(t, "100m", r.RequestsCPU)
|
||||||
|
require.Equal(t, "32Mi", r.RequestsMemory)
|
||||||
|
require.Equal(t, "200m", r.LimitsCPU)
|
||||||
|
require.Equal(t, "64Mi", r.LimitsMemory)
|
||||||
|
require.True(t, r.Rootless)
|
||||||
|
require.Equal(t, nodeSelectors, r.NodeSelector)
|
||||||
|
require.Equal(t, tolerations, r.Tolerations)
|
||||||
|
require.Equal(t, LoadbalanceRandom, loadbalance)
|
||||||
|
require.True(t, r.Qemu.Install)
|
||||||
|
require.Equal(t, "qemu:latest", r.Qemu.Image)
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
t.Run(
|
||||||
|
"NoOptions", func(t *testing.T) {
|
||||||
|
cfg.DriverOpts = map[string]string{}
|
||||||
|
|
||||||
|
r, loadbalance, ns, err := f.processDriverOpts(cfg.Name, "test", cfg)
|
||||||
|
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
require.Equal(t, "test", ns)
|
||||||
|
require.Equal(t, bkimage.DefaultImage, r.Image)
|
||||||
|
require.Equal(t, 1, r.Replicas)
|
||||||
|
require.Equal(t, "", r.RequestsCPU)
|
||||||
|
require.Equal(t, "", r.RequestsMemory)
|
||||||
|
require.Equal(t, "", r.LimitsCPU)
|
||||||
|
require.Equal(t, "", r.LimitsMemory)
|
||||||
|
require.False(t, r.Rootless)
|
||||||
|
require.Empty(t, r.NodeSelector)
|
||||||
|
require.Empty(t, r.Tolerations)
|
||||||
|
require.Equal(t, LoadbalanceSticky, loadbalance)
|
||||||
|
require.False(t, r.Qemu.Install)
|
||||||
|
require.Equal(t, bkimage.QemuImage, r.Qemu.Image)
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
t.Run(
|
||||||
|
"RootlessOverride", func(t *testing.T) {
|
||||||
|
cfg.DriverOpts = map[string]string{
|
||||||
|
"rootless": "true",
|
||||||
|
"loadbalance": "sticky",
|
||||||
|
}
|
||||||
|
|
||||||
|
r, loadbalance, ns, err := f.processDriverOpts(cfg.Name, "test", cfg)
|
||||||
|
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
require.Equal(t, "test", ns)
|
||||||
|
require.Equal(t, bkimage.DefaultRootlessImage, r.Image)
|
||||||
|
require.Equal(t, 1, r.Replicas)
|
||||||
|
require.Equal(t, "", r.RequestsCPU)
|
||||||
|
require.Equal(t, "", r.RequestsMemory)
|
||||||
|
require.Equal(t, "", r.LimitsCPU)
|
||||||
|
require.Equal(t, "", r.LimitsMemory)
|
||||||
|
require.True(t, r.Rootless)
|
||||||
|
require.Empty(t, r.NodeSelector)
|
||||||
|
require.Empty(t, r.Tolerations)
|
||||||
|
require.Equal(t, LoadbalanceSticky, loadbalance)
|
||||||
|
require.False(t, r.Qemu.Install)
|
||||||
|
require.Equal(t, bkimage.QemuImage, r.Qemu.Image)
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
t.Run(
|
||||||
|
"InvalidReplicas", func(t *testing.T) {
|
||||||
|
cfg.DriverOpts = map[string]string{
|
||||||
|
"replicas": "invalid",
|
||||||
|
}
|
||||||
|
|
||||||
|
_, _, _, err := f.processDriverOpts(cfg.Name, "test", cfg)
|
||||||
|
|
||||||
|
require.Error(t, err)
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
t.Run(
|
||||||
|
"InvalidRootless", func(t *testing.T) {
|
||||||
|
cfg.DriverOpts = map[string]string{
|
||||||
|
"rootless": "invalid",
|
||||||
|
}
|
||||||
|
|
||||||
|
_, _, _, err := f.processDriverOpts(cfg.Name, "test", cfg)
|
||||||
|
|
||||||
|
require.Error(t, err)
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
t.Run(
|
||||||
|
"InvalidTolerationKeyword", func(t *testing.T) {
|
||||||
|
cfg.DriverOpts = map[string]string{
|
||||||
|
"tolerations": "key=foo,value=bar,invalid=foo2",
|
||||||
|
}
|
||||||
|
|
||||||
|
_, _, _, err := f.processDriverOpts(cfg.Name, "test", cfg)
|
||||||
|
|
||||||
|
require.Error(t, err)
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
t.Run(
|
||||||
|
"InvalidTolerationSeconds", func(t *testing.T) {
|
||||||
|
cfg.DriverOpts = map[string]string{
|
||||||
|
"tolerations": "key=foo,value=bar,tolerationSeconds=invalid",
|
||||||
|
}
|
||||||
|
|
||||||
|
_, _, _, err := f.processDriverOpts(cfg.Name, "test", cfg)
|
||||||
|
|
||||||
|
require.Error(t, err)
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
t.Run(
|
||||||
|
"InvalidLoadBalance", func(t *testing.T) {
|
||||||
|
cfg.DriverOpts = map[string]string{
|
||||||
|
"loadbalance": "invalid",
|
||||||
|
}
|
||||||
|
|
||||||
|
_, _, _, err := f.processDriverOpts(cfg.Name, "test", cfg)
|
||||||
|
|
||||||
|
require.Error(t, err)
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
t.Run(
|
||||||
|
"InvalidQemuInstall", func(t *testing.T) {
|
||||||
|
cfg.DriverOpts = map[string]string{
|
||||||
|
"qemu.install": "invalid",
|
||||||
|
}
|
||||||
|
|
||||||
|
_, _, _, err := f.processDriverOpts(cfg.Name, "test", cfg)
|
||||||
|
|
||||||
|
require.Error(t, err)
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
t.Run(
|
||||||
|
"InvalidOption", func(t *testing.T) {
|
||||||
|
cfg.DriverOpts = map[string]string{
|
||||||
|
"invalid": "foo",
|
||||||
|
}
|
||||||
|
|
||||||
|
_, _, _, err := f.processDriverOpts(cfg.Name, "test", cfg)
|
||||||
|
|
||||||
|
require.Error(t, err)
|
||||||
|
},
|
||||||
|
)
|
||||||
|
}
|
Loading…
Reference in New Issue