- package config_test
-
- import (
- "testing"
-
- "github.com/stretchr/testify/assert"
-
- "gerrit.wikimedia.org/r/blubber/build"
- "gerrit.wikimedia.org/r/blubber/config"
- )
-
- func TestRunsConfigYAML(t *testing.T) {
- cfg, err := config.ReadYAMLConfig([]byte(`---
- version: v4
- base: foo
- runs:
- as: someuser
- insecurely: true
- uid: 666
- gid: 777
- environment: { FOO: bar }
- variants:
- development: {}`))
-
- assert.Nil(t, err)
-
- variant, err := config.ExpandVariant(cfg, "development")
-
- assert.Nil(t, err)
-
- assert.Equal(t, "someuser", variant.Runs.As)
- assert.Equal(t, true, variant.Runs.Insecurely.True)
- assert.Equal(t, uint(666), variant.Runs.UID)
- assert.Equal(t, uint(777), variant.Runs.GID)
- assert.Equal(t, map[string]string{"FOO": "bar"}, variant.Runs.Environment)
- }
-
- func TestRunsConfigInstructions(t *testing.T) {
- cfg := config.RunsConfig{
- UserConfig: config.UserConfig{
- As: "someuser",
- UID: 666,
- GID: 777,
- },
- Environment: map[string]string{
- "fooname": "foovalue",
- "barname": "barvalue",
- },
- }
-
- t.Run("PhasePrivileged", func(t *testing.T) {
- assert.Equal(t,
- []build.Instruction{build.RunAll{[]build.Run{
- {"groupadd -o -g %s -r", []string{"777", "someuser"}},
- {"useradd -o -m -d %s -r -g %s -u %s", []string{"/home/someuser", "someuser", "666", "someuser"}},
- }}},
- cfg.InstructionsForPhase(build.PhasePrivileged),
- )
- })
-
- t.Run("PhasePrivilegeDropped", func(t *testing.T) {
- assert.Equal(t,
- []build.Instruction{
- build.Env{map[string]string{"barname": "barvalue", "fooname": "foovalue"}},
- },
- cfg.InstructionsForPhase(build.PhasePrivilegeDropped),
- )
-
- t.Run("with empty Environment", func(t *testing.T) {
- cfg.Environment = map[string]string{}
-
- assert.Empty(t, cfg.InstructionsForPhase(build.PhasePrivilegeDropped))
- })
- })
-
- t.Run("PhasePreInstall", func(t *testing.T) {
- assert.Empty(t, cfg.InstructionsForPhase(build.PhasePreInstall))
- })
-
- t.Run("PhasePostInstall", func(t *testing.T) {
- assert.Empty(t, cfg.InstructionsForPhase(build.PhasePostInstall))
- })
- }
-
- func TestRunsConfigValidation(t *testing.T) {
- t.Run("environment", func(t *testing.T) {
- t.Run("ok", func(t *testing.T) {
- err := config.Validate(config.RunsConfig{
- Environment: map[string]string{
- "foo": "bar",
- "f1oo": "bar",
- "FOO": "bar",
- "foo_fighter": "bar",
- "FOO_FIGHTER": "bar",
- "_FOO_FIGHTER": "bar",
- },
- })
-
- assert.False(t, config.IsValidationError(err))
- })
-
- t.Run("optional", func(t *testing.T) {
- err := config.Validate(config.RunsConfig{})
-
- assert.False(t, config.IsValidationError(err))
- })
-
- t.Run("bad", func(t *testing.T) {
- t.Run("spaces", func(t *testing.T) {
- err := config.Validate(config.RunsConfig{
- Environment: map[string]string{
- "foo fighter": "bar",
- },
- })
-
- if assert.True(t, config.IsValidationError(err)) {
- msg := config.HumanizeValidationError(err)
-
- assert.Equal(t, `environment: contains invalid environment variable names`, msg)
- }
- })
-
- t.Run("dashes", func(t *testing.T) {
- err := config.Validate(config.RunsConfig{
- Environment: map[string]string{
- "foo-fighter": "bar",
- },
- })
-
- if assert.True(t, config.IsValidationError(err)) {
- msg := config.HumanizeValidationError(err)
-
- assert.Equal(t, `environment: contains invalid environment variable names`, msg)
- }
- })
-
- t.Run("dots", func(t *testing.T) {
- err := config.Validate(config.RunsConfig{
- Environment: map[string]string{
- "foo.fighter": "bar",
- },
- })
-
- if assert.True(t, config.IsValidationError(err)) {
- msg := config.HumanizeValidationError(err)
-
- assert.Equal(t, `environment: contains invalid environment variable names`, msg)
- }
- })
-
- t.Run("starts with number", func(t *testing.T) {
- err := config.Validate(config.RunsConfig{
- Environment: map[string]string{
- "1foo": "bar",
- },
- })
-
- if assert.True(t, config.IsValidationError(err)) {
- msg := config.HumanizeValidationError(err)
-
- assert.Equal(t, `environment: contains invalid environment variable names`, msg)
- }
- })
- })
- })
- }
|