Make use of existing modules and functions in order to output the merged configs. Added skip interpolation flag of variables, so that you can pipe the output back to stack deploy without much hassle. Signed-off-by: Stoica-Marcu Floris-Andrei <floris.sm@gmail.com> Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
107 lines
2.1 KiB
Go
107 lines
2.1 KiB
Go
package stack
|
|
|
|
import (
|
|
"io"
|
|
"testing"
|
|
|
|
"github.com/docker/cli/cli/compose/loader"
|
|
composetypes "github.com/docker/cli/cli/compose/types"
|
|
"github.com/docker/cli/internal/test"
|
|
"gotest.tools/v3/assert"
|
|
)
|
|
|
|
func TestConfigWithEmptyComposeFile(t *testing.T) {
|
|
cmd := newConfigCommand(test.NewFakeCli(&fakeClient{}))
|
|
cmd.SetOut(io.Discard)
|
|
|
|
assert.ErrorContains(t, cmd.Execute(), `Please specify a Compose file`)
|
|
}
|
|
|
|
var configMergeTests = []struct {
|
|
name string
|
|
skipInterpolation bool
|
|
first string
|
|
second string
|
|
merged string
|
|
}{
|
|
{
|
|
name: "With Interpolation",
|
|
skipInterpolation: false,
|
|
first: `version: "3.7"
|
|
services:
|
|
foo:
|
|
image: busybox:latest
|
|
command: cat file1.txt
|
|
`,
|
|
second: `version: "3.7"
|
|
services:
|
|
foo:
|
|
image: busybox:${VERSION}
|
|
command: cat file2.txt
|
|
`,
|
|
merged: `version: "3.7"
|
|
services:
|
|
foo:
|
|
command:
|
|
- cat
|
|
- file2.txt
|
|
image: busybox:1.0
|
|
`,
|
|
},
|
|
{
|
|
name: "Without Interpolation",
|
|
skipInterpolation: true,
|
|
first: `version: "3.7"
|
|
services:
|
|
foo:
|
|
image: busybox:latest
|
|
command: cat file1.txt
|
|
`,
|
|
second: `version: "3.7"
|
|
services:
|
|
foo:
|
|
image: busybox:${VERSION}
|
|
command: cat file2.txt
|
|
`,
|
|
merged: `version: "3.7"
|
|
services:
|
|
foo:
|
|
command:
|
|
- cat
|
|
- file2.txt
|
|
image: busybox:${VERSION}
|
|
`,
|
|
},
|
|
}
|
|
|
|
func TestConfigMergeInterpolation(t *testing.T) {
|
|
|
|
for _, tt := range configMergeTests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
firstConfig := []byte(tt.first)
|
|
secondConfig := []byte(tt.second)
|
|
|
|
firstConfigData, err := loader.ParseYAML(firstConfig)
|
|
assert.NilError(t, err)
|
|
secondConfigData, err := loader.ParseYAML(secondConfig)
|
|
assert.NilError(t, err)
|
|
|
|
env := map[string]string{
|
|
"VERSION": "1.0",
|
|
}
|
|
|
|
cfg, err := outputConfig(composetypes.ConfigDetails{
|
|
ConfigFiles: []composetypes.ConfigFile{
|
|
{Config: firstConfigData, Filename: "firstConfig"},
|
|
{Config: secondConfigData, Filename: "secondConfig"},
|
|
},
|
|
Environment: env,
|
|
}, tt.skipInterpolation)
|
|
assert.NilError(t, err)
|
|
|
|
assert.Equal(t, cfg, tt.merged)
|
|
})
|
|
}
|
|
|
|
}
|