Support config imports #3289
Signed-off-by: Maksym Pavlenko <makpav@amazon.com>
This commit is contained in:
163
services/server/config/config_test.go
Normal file
163
services/server/config/config_test.go
Normal file
@@ -0,0 +1,163 @@
|
||||
/*
|
||||
Copyright The containerd Authors.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package config
|
||||
|
||||
import (
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"testing"
|
||||
|
||||
"gotest.tools/assert"
|
||||
)
|
||||
|
||||
func TestMergeConfigs(t *testing.T) {
|
||||
a := &Config{
|
||||
Version: 2,
|
||||
Root: "old_root",
|
||||
RequiredPlugins: []string{"old_plugin"},
|
||||
DisabledPlugins: []string{"old_plugin"},
|
||||
State: "old_state",
|
||||
OOMScore: 1,
|
||||
}
|
||||
|
||||
b := &Config{
|
||||
Root: "new_root",
|
||||
RequiredPlugins: []string{"new_plugin1", "new_plugin2"},
|
||||
OOMScore: 2,
|
||||
}
|
||||
|
||||
err := mergeConfig(a, b)
|
||||
assert.NilError(t, err)
|
||||
|
||||
assert.Equal(t, a.Version, 2)
|
||||
assert.Equal(t, a.Root, "new_root")
|
||||
assert.Equal(t, a.State, "old_state")
|
||||
assert.Equal(t, a.OOMScore, 2)
|
||||
assert.DeepEqual(t, a.RequiredPlugins, []string{"new_plugin1", "new_plugin2"})
|
||||
assert.DeepEqual(t, a.DisabledPlugins, []string{"old_plugin"})
|
||||
}
|
||||
|
||||
func TestResolveImports(t *testing.T) {
|
||||
tempDir, err := ioutil.TempDir("", "containerd_")
|
||||
assert.NilError(t, err)
|
||||
defer os.RemoveAll(tempDir)
|
||||
|
||||
for _, filename := range []string{"config_1.toml", "config_2.toml", "test.toml"} {
|
||||
err = ioutil.WriteFile(filepath.Join(tempDir, filename), []byte(""), 0600)
|
||||
assert.NilError(t, err)
|
||||
}
|
||||
|
||||
imports, err := resolveImports(filepath.Join(tempDir, "root.toml"), []string{
|
||||
filepath.Join(tempDir, "config_*.toml"), // Glob
|
||||
filepath.Join(tempDir, "./test.toml"), // Path clean up
|
||||
"current.toml", // Resolve current working dir
|
||||
})
|
||||
assert.NilError(t, err)
|
||||
|
||||
assert.DeepEqual(t, imports, []string{
|
||||
filepath.Join(tempDir, "config_1.toml"),
|
||||
filepath.Join(tempDir, "config_2.toml"),
|
||||
filepath.Join(tempDir, "test.toml"),
|
||||
filepath.Join(tempDir, "current.toml"),
|
||||
})
|
||||
}
|
||||
|
||||
func TestLoadSingleConfig(t *testing.T) {
|
||||
data := `
|
||||
version = 2
|
||||
root = "/var/lib/containerd"
|
||||
`
|
||||
tempDir, err := ioutil.TempDir("", "containerd_")
|
||||
assert.NilError(t, err)
|
||||
defer os.RemoveAll(tempDir)
|
||||
|
||||
path := filepath.Join(tempDir, "config.toml")
|
||||
err = ioutil.WriteFile(path, []byte(data), 0600)
|
||||
assert.NilError(t, err)
|
||||
|
||||
var out Config
|
||||
err = LoadConfig(path, &out)
|
||||
assert.NilError(t, err)
|
||||
assert.Equal(t, 2, out.Version)
|
||||
assert.Equal(t, "/var/lib/containerd", out.Root)
|
||||
}
|
||||
|
||||
func TestLoadConfigWithImports(t *testing.T) {
|
||||
data1 := `
|
||||
version = 2
|
||||
root = "/var/lib/containerd"
|
||||
imports = ["data2.toml"]
|
||||
`
|
||||
|
||||
data2 := `
|
||||
disabled_plugins = ["io.containerd.v1.xyz"]
|
||||
`
|
||||
|
||||
tempDir, err := ioutil.TempDir("", "containerd_")
|
||||
assert.NilError(t, err)
|
||||
defer os.RemoveAll(tempDir)
|
||||
|
||||
err = ioutil.WriteFile(filepath.Join(tempDir, "data1.toml"), []byte(data1), 0600)
|
||||
assert.NilError(t, err)
|
||||
|
||||
err = ioutil.WriteFile(filepath.Join(tempDir, "data2.toml"), []byte(data2), 0600)
|
||||
assert.NilError(t, err)
|
||||
|
||||
var out Config
|
||||
err = LoadConfig(filepath.Join(tempDir, "data1.toml"), &out)
|
||||
assert.NilError(t, err)
|
||||
|
||||
assert.Equal(t, 2, out.Version)
|
||||
assert.Equal(t, "/var/lib/containerd", out.Root)
|
||||
assert.DeepEqual(t, []string{"io.containerd.v1.xyz"}, out.DisabledPlugins)
|
||||
}
|
||||
|
||||
func TestLoadConfigWithCircularImports(t *testing.T) {
|
||||
data1 := `
|
||||
version = 2
|
||||
root = "/var/lib/containerd"
|
||||
imports = ["data2.toml", "data1.toml"]
|
||||
`
|
||||
|
||||
data2 := `
|
||||
disabled_plugins = ["io.containerd.v1.xyz"]
|
||||
imports = ["data1.toml", "data2.toml"]
|
||||
`
|
||||
tempDir, err := ioutil.TempDir("", "containerd_")
|
||||
assert.NilError(t, err)
|
||||
defer os.RemoveAll(tempDir)
|
||||
|
||||
err = ioutil.WriteFile(filepath.Join(tempDir, "data1.toml"), []byte(data1), 0600)
|
||||
assert.NilError(t, err)
|
||||
|
||||
err = ioutil.WriteFile(filepath.Join(tempDir, "data2.toml"), []byte(data2), 0600)
|
||||
assert.NilError(t, err)
|
||||
|
||||
var out Config
|
||||
err = LoadConfig(filepath.Join(tempDir, "data1.toml"), &out)
|
||||
assert.NilError(t, err)
|
||||
|
||||
assert.Equal(t, 2, out.Version)
|
||||
assert.Equal(t, "/var/lib/containerd", out.Root)
|
||||
assert.DeepEqual(t, []string{"io.containerd.v1.xyz"}, out.DisabledPlugins)
|
||||
|
||||
assert.DeepEqual(t, []string{
|
||||
filepath.Join(tempDir, "data1.toml"),
|
||||
filepath.Join(tempDir, "data2.toml"),
|
||||
}, out.Imports)
|
||||
}
|
||||
Reference in New Issue
Block a user