- package config_test
-
- import (
- "fmt"
- "testing"
-
- "github.com/stretchr/testify/assert"
-
- "gerrit.wikimedia.org/r/blubber/config"
- )
-
- func ExampleResolveIncludes() {
- cfg, _ := config.ReadYAMLConfig([]byte(`---
- version: v4
- variants:
- varA: { includes: [varB, varC] }
- varB: { includes: [varD, varE] }
- varC: {}
- varD: { includes: [varF] }
- varE: {}
- varF: {}`))
-
- includes, _ := config.ResolveIncludes(cfg, "varA")
-
- fmt.Printf("%v\n", includes)
-
- // Output: [varF varD varE varB varC varA]
- }
-
- func TestReadYAMLConfigErrorsOnUnknownYAML(t *testing.T) {
- _, err := config.ReadYAMLConfig([]byte(`---
- version: v4
- newphone: whodis
- variants:
- foo: {}`))
-
- assert.EqualError(t,
- err,
- `json: unknown field "newphone"`)
- }
-
- func TestReadYAMLConfigValidateVersionBeforeStrictUnmarshal(t *testing.T) {
- _, err := config.ReadYAMLConfig([]byte(`---
- version: foo
- newphone: whodis
- variants:
- foo: {}`))
-
- if assert.True(t, config.IsValidationError(err)) {
- msg := config.HumanizeValidationError(err)
-
- assert.Equal(t, `version: config version "foo" is unsupported`, msg)
- }
- }
-
- func TestResolveIncludesPreventsInfiniteRecursion(t *testing.T) {
- cfg, err := config.ReadYAMLConfig([]byte(`---
- version: v4
- variants:
- varA: { includes: [varB] }
- varB: { includes: [varA] }`))
-
- assert.NoError(t, err)
-
- _, err2 := config.ResolveIncludes(cfg, "varA")
-
- assert.EqualError(t, err2, "variant expansion detected loop")
- }
-
- func TestMultiLevelIncludes(t *testing.T) {
- cfg, err := config.ReadYAMLConfig([]byte(`---
- version: v4
- base: foo-slim
- variants:
- build:
- base: foo-devel
- runs: { as: foo }
- development:
- includes: [build]
- runs: { uid: 123 }
- test:
- includes: [development]
- runs: { insecurely: true }`))
-
- if assert.NoError(t, err) {
- dev, _ := config.ExpandVariant(cfg, "development")
-
- assert.Equal(t, "foo-devel", dev.Base)
- assert.Equal(t, "foo", dev.Runs.As)
- assert.Equal(t, uint(123), dev.Runs.UID)
-
- test, _ := config.ExpandVariant(cfg, "test")
-
- assert.Equal(t, "foo-devel", test.Base)
- assert.Equal(t, "foo", test.Runs.As)
- assert.Equal(t, uint(123), test.Runs.UID)
-
- assert.True(t, test.Runs.Insecurely.True)
- }
- }
-
- func TestMultiIncludes(t *testing.T) {
- cfg, err := config.ReadYAMLConfig([]byte(`---
- version: v4
- variants:
- mammal:
- base: neutral
- human:
- base: moral
- includes: [mammal]
- lizard:
- base: immoral
- lizardman:
- includes: [human, lizard]`))
-
- if assert.NoError(t, err) {
- variant, err := config.ExpandVariant(cfg, "lizardman")
-
- if assert.NoError(t, err) {
- assert.Equal(t, "immoral", variant.Base)
- }
- }
- }
|