package config_test import ( "strings" "testing" "github.com/stretchr/testify/assert" "gerrit.wikimedia.org/r/blubber/build" "gerrit.wikimedia.org/r/blubber/config" ) func TestAptConfigYAML(t *testing.T) { cfg, err := config.ReadYAMLConfig([]byte(`--- version: v4 apt: packages: - libfoo - libbar variants: build: apt: packages: - libfoo-dev`)) assert.Nil(t, err) assert.Equal(t, []string{"libfoo", "libbar"}, cfg.Apt.Packages) variant, err := config.ExpandVariant(cfg, "build") assert.Nil(t, err) assert.Equal(t, []string{"libfoo", "libbar", "libfoo-dev"}, variant.Apt.Packages) } func TestAptConfigInstructions(t *testing.T) { cfg := config.AptConfig{Packages: []string{"libfoo", "libbar"}} t.Run("PhasePrivileged", func(t *testing.T) { assert.Equal(t, []build.Instruction{ build.Env{map[string]string{ "DEBIAN_FRONTEND": "noninteractive", }}, build.RunAll{[]build.Run{ {"apt-get update", []string{}}, {"apt-get install -y", []string{"libfoo", "libbar"}}, {"rm -rf /var/lib/apt/lists/*", []string{}}, }}, }, cfg.InstructionsForPhase(build.PhasePrivileged), ) }) t.Run("PhasePrivilegeDropped", func(t *testing.T) { 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 TestAptConfigValidation(t *testing.T) { t.Run("packages", func(t *testing.T) { t.Run("ok", func(t *testing.T) { err := config.Validate(config.AptConfig{ Packages: []string{ "f1", "foo-fighter", "bar+b.az", "bar+b.az=0:0.1~foo1-1", "bar+b.az/stable", "bar+b.az/jessie-wikimedia", }, }) assert.False(t, config.IsValidationError(err)) }) t.Run("bad", func(t *testing.T) { err := config.Validate(config.AptConfig{ Packages: []string{ "f1", "foo fighter", "bar_baz", "bar=0.1*bad version", "bar/0bad_release", }, }) if assert.True(t, config.IsValidationError(err)) { msg := config.HumanizeValidationError(err) assert.Equal(t, strings.Join([]string{ `packages[1]: "foo fighter" is not a valid Debian package name`, `packages[2]: "bar_baz" is not a valid Debian package name`, `packages[3]: "bar=0.1*bad version" is not a valid Debian package name`, `packages[4]: "bar/0bad_release" is not a valid Debian package name`, }, "\n"), msg) } }) }) }