From f3004cb9891932ff25aa0a47d8433cced77fe362 Mon Sep 17 00:00:00 2001 From: Ray Burgemeestre Date: Tue, 2 Apr 2024 21:19:43 +0200 Subject: [PATCH] Introduce two additional unit tests for two runtimes and pod annotations. Signed-off-by: Ray Burgemeestre --- cmd/containerd/server/config/config_test.go | 94 +++++++++++++++++++++ 1 file changed, 94 insertions(+) diff --git a/cmd/containerd/server/config/config_test.go b/cmd/containerd/server/config/config_test.go index d76d462f077dd..79404eb9527b0 100644 --- a/cmd/containerd/server/config/config_test.go +++ b/cmd/containerd/server/config/config_test.go @@ -304,6 +304,100 @@ func TestMergingPluginsWithTwoCriCniDropInConfigs(t *testing.T) { testMergeConfig(t, []string{data1, data2}, expected, "io.containerd.grpc.v1.cri") } +func TestMergingPluginsWithTwoCriRuntimeDropInConfigs(t *testing.T) { + runc_runtime := ` +[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc] + runtime_type = "io.containerd.runc.v2" + [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] + SystemdCgroup = true +` + nvidia_runtime := ` +[plugins] + [plugins."io.containerd.grpc.v1.cri"] + [plugins."io.containerd.grpc.v1.cri".containerd] + default_runtime_name = "nvidia" + [plugins."io.containerd.grpc.v1.cri".containerd.runtimes] + [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.nvidia] + privileged_without_host_devices = false + runtime_engine = "" + runtime_root = "" + runtime_type = "io.containerd.runc.v2" + [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.nvidia.options] + BinaryName = "/usr/bin/nvidia-container-runtime" + SystemdCgroup = true +` + expected := ` +[containerd] + default_runtime_name = 'nvidia' + + [containerd.runtimes] + [containerd.runtimes.nvidia] + privileged_without_host_devices = false + runtime_engine = '' + runtime_root = '' + runtime_type = 'io.containerd.runc.v2' + + [containerd.runtimes.nvidia.options] + BinaryName = '/usr/bin/nvidia-container-runtime' + SystemdCgroup = true + + [containerd.runtimes.runc] + runtime_type = 'io.containerd.runc.v2' + + [containerd.runtimes.runc.options] + SystemdCgroup = true +` + testMergeConfig(t, []string{runc_runtime, nvidia_runtime}, expected, "io.containerd.grpc.v1.cri") + + // Merging a third config that customizes only the default_runtime_name should result in mostly identical result + runc_default := ` + [plugins."io.containerd.grpc.v1.cri".containerd] + default_runtime_name = "runc" +` + // This will then be the only difference in our expected TOML + expected2 := strings.Replace(expected, "default_runtime_name = 'nvidia'", "default_runtime_name = 'runc'", 1) + + testMergeConfig(t, []string{runc_runtime, nvidia_runtime, runc_default}, expected2, "io.containerd.grpc.v1.cri") + + // Mixing up the order will again result in 'nvidia' being the default runtime + testMergeConfig(t, []string{runc_runtime, runc_default, nvidia_runtime}, expected, "io.containerd.grpc.v1.cri") +} + +func TestMergingPluginsWithTwoCriRuntimeWithPodAnnotationsDropInConfigs(t *testing.T) { + runc1 := ` +[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc] + runtime_type = "io.containerd.runc.v2" + cni_conf_dir = "/foo" + pod_annotations = ["a", "b", "c"] +` + runc2 := ` +[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc] + runtime_type = "io.containerd.runc.v2" + cni_conf_dir = "/bar" + pod_annotations = ["d", "e", "f"] +` + expected := ` +[containerd] + [containerd.runtimes] + [containerd.runtimes.runc] + cni_conf_dir = '/bar' + pod_annotations = ['d', 'e', 'f'] + runtime_type = 'io.containerd.runc.v2' +` + testMergeConfig(t, []string{runc1, runc2}, expected, "io.containerd.grpc.v1.cri") + + // The other way around: runc1 over runc2 + expected = ` +[containerd] + [containerd.runtimes] + [containerd.runtimes.runc] + cni_conf_dir = '/foo' + pod_annotations = ['a', 'b', 'c'] + runtime_type = 'io.containerd.runc.v2' +` + testMergeConfig(t, []string{runc2, runc1}, expected, "io.containerd.grpc.v1.cri") +} + func testMergeConfig(t *testing.T, inputs []string, expected string, comparePlugin string) { tempDir := t.TempDir() var result Config