|
1 | 1 | package e2e
|
2 | 2 |
|
3 | 3 | import (
|
| 4 | + "bytes" |
4 | 5 | "encoding/json"
|
5 | 6 | "fmt"
|
6 | 7 | "io/ioutil"
|
| 8 | + "path" |
7 | 9 | "path/filepath"
|
8 | 10 | "regexp"
|
9 | 11 | "strings"
|
@@ -207,37 +209,80 @@ func TestDetectApp(t *testing.T) {
|
207 | 209 | })
|
208 | 210 | }
|
209 | 211 |
|
| 212 | +func patchEndOfLine(t *testing.T, eol []byte, name, fromDir, toDir string) { |
| 213 | + buf := golden.Get(t, filepath.Join(fromDir, name)) |
| 214 | + bytes.ReplaceAll(buf, []byte{'\n'}, eol) |
| 215 | + assert.NilError(t, ioutil.WriteFile(filepath.Join(toDir, name), buf, 0644)) |
| 216 | +} |
| 217 | + |
210 | 218 | func TestSplitMerge(t *testing.T) {
|
211 |
| - cmd, cleanup := dockerCli.createTestCmd() |
212 |
| - defer cleanup() |
| 219 | + testCases := []struct { |
| 220 | + name string |
| 221 | + lineEnding []byte |
| 222 | + }{ |
| 223 | + { |
| 224 | + name: "without-crlf", |
| 225 | + lineEnding: []byte{'\n'}, |
| 226 | + }, |
| 227 | + { |
| 228 | + name: "with-crlf", |
| 229 | + lineEnding: []byte{'\r', '\n'}, |
| 230 | + }, |
| 231 | + } |
| 232 | + for _, test := range testCases { |
| 233 | + t.Run(test.name, func(t *testing.T) { |
| 234 | + cmd, cleanup := dockerCli.createTestCmd() |
| 235 | + defer cleanup() |
213 | 236 |
|
214 |
| - tmpDir := fs.NewDir(t, "split_merge") |
215 |
| - defer tmpDir.Remove() |
| 237 | + tmpDir := fs.NewDir(t, "split_merge", fs.WithDir("my.dockerapp")) |
| 238 | + defer tmpDir.Remove() |
216 | 239 |
|
217 |
| - cmd.Command = dockerCli.Command("app", "merge", "testdata/render/envvariables/my.dockerapp", "--output", tmpDir.Join("remerged.dockerapp")) |
218 |
| - icmd.RunCmd(cmd).Assert(t, icmd.Success) |
| 240 | + inputDir := filepath.Join("render", "envvariables", "my.dockerapp") |
| 241 | + testDataDir := tmpDir.Join("my.dockerapp") |
219 | 242 |
|
220 |
| - cmd.Dir = tmpDir.Path() |
| 243 | + // replace the line ending from the versioned test data files and put them to a temp dir |
| 244 | + for _, name := range internal.FileNames { |
| 245 | + patchEndOfLine(t, test.lineEnding, name, inputDir, testDataDir) |
| 246 | + } |
221 | 247 |
|
222 |
| - // test that inspect works on single-file |
223 |
| - cmd.Command = dockerCli.Command("app", "inspect", "remerged") |
224 |
| - result := icmd.RunCmd(cmd).Assert(t, icmd.Success) |
225 |
| - golden.Assert(t, result.Combined(), "envvariables-inspect.golden") |
| 248 | + // Merge a multi-files app to a single-file app |
| 249 | + cmd.Command = dockerCli.Command("app", "merge", testDataDir, "--output", tmpDir.Join("remerged.dockerapp")) |
| 250 | + icmd.RunCmd(cmd).Assert(t, icmd.Success) |
226 | 251 |
|
227 |
| - // split it |
228 |
| - cmd.Command = dockerCli.Command("app", "split", "remerged", "--output", "split.dockerapp") |
229 |
| - icmd.RunCmd(cmd).Assert(t, icmd.Success) |
| 252 | + cmd.Dir = tmpDir.Path() |
230 | 253 |
|
231 |
| - cmd.Command = dockerCli.Command("app", "inspect", "remerged") |
232 |
| - result = icmd.RunCmd(cmd).Assert(t, icmd.Success) |
233 |
| - golden.Assert(t, result.Combined(), "envvariables-inspect.golden") |
| 254 | + // test that inspect works on single-file |
| 255 | + cmd.Command = dockerCli.Command("app", "inspect", "remerged") |
| 256 | + result := icmd.RunCmd(cmd).Assert(t, icmd.Success) |
| 257 | + golden.Assert(t, result.Combined(), "envvariables-inspect.golden") |
234 | 258 |
|
235 |
| - // test inplace |
236 |
| - cmd.Command = dockerCli.Command("app", "merge", "split") |
237 |
| - icmd.RunCmd(cmd).Assert(t, icmd.Success) |
| 259 | + // split it |
| 260 | + cmd.Command = dockerCli.Command("app", "split", "remerged", "--output", "split.dockerapp") |
| 261 | + icmd.RunCmd(cmd).Assert(t, icmd.Success) |
238 | 262 |
|
239 |
| - cmd.Command = dockerCli.Command("app", "split", "split") |
240 |
| - icmd.RunCmd(cmd).Assert(t, icmd.Success) |
| 263 | + // test that inspect still works |
| 264 | + cmd.Command = dockerCli.Command("app", "inspect", "remerged") |
| 265 | + result = icmd.RunCmd(cmd).Assert(t, icmd.Success) |
| 266 | + golden.Assert(t, result.Combined(), "envvariables-inspect.golden") |
| 267 | + |
| 268 | + // the split app must be the same as the original one |
| 269 | + manifest := fs.Expected( |
| 270 | + t, |
| 271 | + fs.WithMode(0755), |
| 272 | + fs.WithFile(internal.MetadataFileName, string(golden.Get(t, path.Join(testDataDir, internal.MetadataFileName))), fs.WithMode(0644)), |
| 273 | + fs.WithFile(internal.ComposeFileName, string(golden.Get(t, path.Join(testDataDir, internal.ComposeFileName))), fs.WithMode(0644)), |
| 274 | + fs.WithFile(internal.ParametersFileName, string(golden.Get(t, path.Join(testDataDir, internal.ParametersFileName))), fs.WithMode(0644)), |
| 275 | + ) |
| 276 | + assert.Assert(t, fs.Equal(tmpDir.Join("split.dockerapp"), manifest)) |
| 277 | + |
| 278 | + // test inplace |
| 279 | + cmd.Command = dockerCli.Command("app", "merge", "split") |
| 280 | + icmd.RunCmd(cmd).Assert(t, icmd.Success) |
| 281 | + |
| 282 | + cmd.Command = dockerCli.Command("app", "split", "split") |
| 283 | + icmd.RunCmd(cmd).Assert(t, icmd.Success) |
| 284 | + }) |
| 285 | + } |
241 | 286 | }
|
242 | 287 |
|
243 | 288 | func TestBundle(t *testing.T) {
|
|
0 commit comments