81 lines
2.1 KiB
Go
81 lines
2.1 KiB
Go
package config_test
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"github.com/OliveTin/OliveTin/internal/config"
|
|
"github.com/knadh/koanf/parsers/yaml"
|
|
"github.com/knadh/koanf/providers/file"
|
|
"github.com/knadh/koanf/v2"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestAppendSourceStampsActionSourceFiles(t *testing.T) {
|
|
dir := t.TempDir()
|
|
includeDir := filepath.Join(dir, "config.d")
|
|
require.NoError(t, os.Mkdir(includeDir, 0o755))
|
|
|
|
basePath := filepath.Join(dir, "config.yaml")
|
|
require.NoError(t, os.WriteFile(basePath, []byte(`
|
|
include: config.d
|
|
actions:
|
|
- title: From base
|
|
shell: echo base
|
|
`), 0o644))
|
|
|
|
includePath := filepath.Join(includeDir, "10-extra.yaml")
|
|
require.NoError(t, os.WriteFile(includePath, []byte(`
|
|
actions:
|
|
- title: From include
|
|
shell: echo include
|
|
entities:
|
|
- name: host
|
|
file: hosts.yaml
|
|
`), 0o644))
|
|
|
|
k := koanf.New(".")
|
|
require.NoError(t, k.Load(file.Provider(basePath), yaml.Parser()))
|
|
|
|
cfg := config.DefaultConfig()
|
|
config.AppendSource(cfg, k, basePath)
|
|
|
|
require.Len(t, cfg.Actions, 2)
|
|
assert.Equal(t, basePath, cfg.Actions[0].SourceFile)
|
|
assert.Equal(t, includePath, cfg.Actions[1].SourceFile)
|
|
|
|
require.Len(t, cfg.Entities, 1)
|
|
assert.Equal(t, includePath, cfg.Entities[0].SourceFile)
|
|
}
|
|
|
|
func TestAppendSourceIgnoresUserProvidedSourceFile(t *testing.T) {
|
|
dir := t.TempDir()
|
|
basePath := filepath.Join(dir, "config.yaml")
|
|
require.NoError(t, os.WriteFile(basePath, []byte(`
|
|
actions:
|
|
- title: Spoofed
|
|
shell: echo hi
|
|
x-olivetin-source-file: /tmp/fake-user-path.yaml
|
|
entities:
|
|
- name: host
|
|
file: hosts.yaml
|
|
x-olivetin-source-file: /tmp/fake-entity-path.yaml
|
|
`), 0o644))
|
|
|
|
k := koanf.New(".")
|
|
require.NoError(t, k.Load(file.Provider(basePath), yaml.Parser()))
|
|
|
|
cfg := config.DefaultConfig()
|
|
config.AppendSource(cfg, k, basePath)
|
|
|
|
require.Len(t, cfg.Actions, 1)
|
|
assert.Equal(t, basePath, cfg.Actions[0].SourceFile)
|
|
assert.NotEqual(t, "/tmp/fake-user-path.yaml", cfg.Actions[0].SourceFile)
|
|
|
|
require.Len(t, cfg.Entities, 1)
|
|
assert.Equal(t, basePath, cfg.Entities[0].SourceFile)
|
|
assert.NotEqual(t, "/tmp/fake-entity-path.yaml", cfg.Entities[0].SourceFile)
|
|
}
|