- package config_test
-
- import (
- "testing"
-
- "github.com/stretchr/testify/assert"
-
- "gerrit.wikimedia.org/r/blubber/build"
- "gerrit.wikimedia.org/r/blubber/config"
- )
-
- func TestLivesConfigYAML(t *testing.T) {
- cfg, err := config.ReadYAMLConfig([]byte(`---
- version: v4
- base: foo
- lives:
- in: /some/directory
- as: foouser
- uid: 123
- gid: 223
- variants:
- development: {}`))
-
- if assert.NoError(t, err) {
- assert.Equal(t, "/some/directory", cfg.Lives.In)
- assert.Equal(t, "foouser", cfg.Lives.As)
- assert.Equal(t, uint(123), cfg.Lives.UID)
- assert.Equal(t, uint(223), cfg.Lives.GID)
-
- variant, err := config.ExpandVariant(cfg, "development")
-
- if assert.NoError(t, err) {
- assert.Equal(t, "/some/directory", variant.Lives.In)
- assert.Equal(t, "foouser", variant.Lives.As)
- assert.Equal(t, uint(123), variant.Lives.UID)
- assert.Equal(t, uint(223), variant.Lives.GID)
- }
- }
- }
-
- func TestLivesConfigDefaults(t *testing.T) {
- cfg, err := config.ReadYAMLConfig([]byte(`---
- version: v4
- base: foo`))
-
- if assert.NoError(t, err) {
- assert.Equal(t, "somebody", cfg.Lives.As)
- assert.Equal(t, uint(65533), cfg.Lives.UID)
- assert.Equal(t, uint(65533), cfg.Lives.GID)
- }
- }
-
- func TestLivesConfigInstructions(t *testing.T) {
- cfg := config.LivesConfig{
- In: "/some/directory",
- UserConfig: config.UserConfig{
- As: "foouser",
- UID: 123,
- GID: 223,
- },
- }
-
- t.Run("PhasePrivileged", func(t *testing.T) {
- assert.Equal(t,
- []build.Instruction{build.RunAll{[]build.Run{
- {"groupadd -o -g %s -r", []string{"223", "foouser"}},
- {"useradd -o -m -d %s -r -g %s -u %s", []string{"/home/foouser", "foouser", "123", "foouser"}},
- {"mkdir -p", []string{"/some/directory"}},
- {"chown %s:%s", []string{"123", "223", "/some/directory"}},
- {"mkdir -p", []string{"/opt/lib"}},
- {"chown %s:%s", []string{"123", "223", "/opt/lib"}},
- }}},
- cfg.InstructionsForPhase(build.PhasePrivileged),
- )
- })
-
- t.Run("PhasePrivilegeDropped", func(t *testing.T) {
- assert.Equal(t,
- []build.Instruction{
- build.WorkingDirectory{"/some/directory"},
- },
- 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 TestLivesConfigValidation(t *testing.T) {
- t.Run("in", func(t *testing.T) {
- t.Run("ok", func(t *testing.T) {
- err := config.Validate(config.LivesConfig{
- In: "/foo",
- })
-
- assert.False(t, config.IsValidationError(err))
- })
-
- t.Run("optional", func(t *testing.T) {
- err := config.Validate(config.LivesConfig{})
-
- assert.False(t, config.IsValidationError(err))
- })
-
- t.Run("non-root", func(t *testing.T) {
- err := config.Validate(config.LivesConfig{
- In: "/",
- })
-
- if assert.True(t, config.IsValidationError(err)) {
- msg := config.HumanizeValidationError(err)
-
- assert.Equal(t, `in: "/" is not a valid absolute non-root path`, msg)
- }
- })
-
- t.Run("non-root tricky", func(t *testing.T) {
- err := config.Validate(config.LivesConfig{
- In: "/foo/..",
- })
-
- if assert.True(t, config.IsValidationError(err)) {
- msg := config.HumanizeValidationError(err)
-
- assert.Equal(t, `in: "/foo/.." is not a valid absolute non-root path`, msg)
- }
- })
-
- t.Run("absolute", func(t *testing.T) {
- err := config.Validate(config.LivesConfig{
- In: "foo/bar",
- })
-
- if assert.True(t, config.IsValidationError(err)) {
- msg := config.HumanizeValidationError(err)
-
- assert.Equal(t, `in: "foo/bar" is not a valid absolute non-root path`, msg)
- }
- })
- })
- }
|