You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

123 lines
2.7 KiB

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)
}
}
}