- Remove deprecated buildImage* functions
- Rename buildImageNew to buildImage
- Use *check.C in fakeContext* setup and in getIdByName
Signed-off-by: Vincent Demeester <vincent@sbr.pm>
| ... | ... |
@@ -791,6 +791,7 @@ func WaitInspectWithArgs(dockerBinary, name, expr, expected string, timeout time |
| 791 | 791 |
} |
| 792 | 792 |
|
| 793 | 793 |
// BuildImageCmdWithHost create a build command with the specified arguments. |
| 794 |
+// Deprecated |
|
| 794 | 795 |
// FIXME(vdemeester) move this away |
| 795 | 796 |
func BuildImageCmdWithHost(dockerBinary, name, dockerfile, host string, useCache bool, buildFlags ...string) *exec.Cmd {
|
| 796 | 797 |
args := []string{}
|
| ... | ... |
@@ -28,8 +28,7 @@ COPY * /tmp/ |
| 28 | 28 |
RUN find / -xdev -name ba* |
| 29 | 29 |
RUN find /tmp/` |
| 30 | 30 |
} |
| 31 |
- server, err := fakeStorage(map[string]string{"testD": testD})
|
|
| 32 |
- c.Assert(err, checker.IsNil) |
|
| 31 |
+ server := fakeStorage(c, map[string]string{"testD": testD})
|
|
| 33 | 32 |
defer server.Close() |
| 34 | 33 |
|
| 35 | 34 |
res, body, err := request.SockRequestRaw("POST", "/build?dockerfile=baz&remote="+server.URL()+"/testD", nil, "application/json", daemonHost())
|
| ... | ... |
@@ -66,11 +65,9 @@ func (s *DockerSuite) TestBuildAPIRemoteTarballContext(c *check.C) {
|
| 66 | 66 |
// failed to close tar archive |
| 67 | 67 |
c.Assert(tw.Close(), checker.IsNil) |
| 68 | 68 |
|
| 69 |
- server, err := fakeBinaryStorage(map[string]*bytes.Buffer{
|
|
| 69 |
+ server := fakeBinaryStorage(c, map[string]*bytes.Buffer{
|
|
| 70 | 70 |
"testT.tar": buffer, |
| 71 | 71 |
}) |
| 72 |
- c.Assert(err, checker.IsNil) |
|
| 73 |
- |
|
| 74 | 72 |
defer server.Close() |
| 75 | 73 |
|
| 76 | 74 |
res, b, err := request.SockRequestRaw("POST", "/build?remote="+server.URL()+"/testT.tar", nil, "application/tar", daemonHost())
|
| ... | ... |
@@ -115,12 +112,11 @@ RUN echo 'right' |
| 115 | 115 |
// failed to close tar archive |
| 116 | 116 |
c.Assert(tw.Close(), checker.IsNil) |
| 117 | 117 |
|
| 118 |
- server, err := fakeBinaryStorage(map[string]*bytes.Buffer{
|
|
| 118 |
+ server := fakeBinaryStorage(c, map[string]*bytes.Buffer{
|
|
| 119 | 119 |
"testT.tar": buffer, |
| 120 | 120 |
}) |
| 121 |
- c.Assert(err, checker.IsNil) |
|
| 122 |
- |
|
| 123 | 121 |
defer server.Close() |
| 122 |
+ |
|
| 124 | 123 |
url := "/build?dockerfile=custom&remote=" + server.URL() + "/testT.tar" |
| 125 | 124 |
res, body, err := request.SockRequestRaw("POST", url, nil, "application/tar", daemonHost())
|
| 126 | 125 |
c.Assert(err, checker.IsNil) |
| ... | ... |
@@ -135,11 +131,10 @@ RUN echo 'right' |
| 135 | 135 |
} |
| 136 | 136 |
|
| 137 | 137 |
func (s *DockerSuite) TestBuildAPILowerDockerfile(c *check.C) {
|
| 138 |
- git, err := newFakeGit("repo", map[string]string{
|
|
| 138 |
+ git := newFakeGit(c, "repo", map[string]string{
|
|
| 139 | 139 |
"dockerfile": `FROM busybox |
| 140 | 140 |
RUN echo from dockerfile`, |
| 141 | 141 |
}, false) |
| 142 |
- c.Assert(err, checker.IsNil) |
|
| 143 | 142 |
defer git.Close() |
| 144 | 143 |
|
| 145 | 144 |
res, body, err := request.SockRequestRaw("POST", "/build?remote="+git.RepoURL, nil, "application/json", daemonHost())
|
| ... | ... |
@@ -154,13 +149,12 @@ RUN echo from dockerfile`, |
| 154 | 154 |
} |
| 155 | 155 |
|
| 156 | 156 |
func (s *DockerSuite) TestBuildAPIBuildGitWithF(c *check.C) {
|
| 157 |
- git, err := newFakeGit("repo", map[string]string{
|
|
| 157 |
+ git := newFakeGit(c, "repo", map[string]string{
|
|
| 158 | 158 |
"baz": `FROM busybox |
| 159 | 159 |
RUN echo from baz`, |
| 160 | 160 |
"Dockerfile": `FROM busybox |
| 161 | 161 |
RUN echo from Dockerfile`, |
| 162 | 162 |
}, false) |
| 163 |
- c.Assert(err, checker.IsNil) |
|
| 164 | 163 |
defer git.Close() |
| 165 | 164 |
|
| 166 | 165 |
// Make sure it tries to 'dockerfile' query param value |
| ... | ... |
@@ -177,13 +171,12 @@ RUN echo from Dockerfile`, |
| 177 | 177 |
|
| 178 | 178 |
func (s *DockerSuite) TestBuildAPIDoubleDockerfile(c *check.C) {
|
| 179 | 179 |
testRequires(c, UnixCli) // dockerfile overwrites Dockerfile on Windows |
| 180 |
- git, err := newFakeGit("repo", map[string]string{
|
|
| 180 |
+ git := newFakeGit(c, "repo", map[string]string{
|
|
| 181 | 181 |
"Dockerfile": `FROM busybox |
| 182 | 182 |
RUN echo from Dockerfile`, |
| 183 | 183 |
"dockerfile": `FROM busybox |
| 184 | 184 |
RUN echo from dockerfile`, |
| 185 | 185 |
}, false) |
| 186 |
- c.Assert(err, checker.IsNil) |
|
| 187 | 186 |
defer git.Close() |
| 188 | 187 |
|
| 189 | 188 |
// Make sure it tries to 'dockerfile' query param value |
| ... | ... |
@@ -1766,19 +1766,18 @@ func (s *DockerSuite) TestContainersAPICreateMountsCreate(c *check.C) {
|
| 1766 | 1766 |
destPath := prefix + slash + "foo" |
| 1767 | 1767 |
|
| 1768 | 1768 |
var ( |
| 1769 |
- err error |
|
| 1770 | 1769 |
testImg string |
| 1771 | 1770 |
) |
| 1772 | 1771 |
if testEnv.DaemonPlatform() != "windows" {
|
| 1773 |
- testImg, err = buildImage("test-mount-config", `
|
|
| 1772 |
+ testImg = "test-mount-config" |
|
| 1773 |
+ buildImageSuccessfully(c, testImg, withDockerfile(` |
|
| 1774 | 1774 |
FROM busybox |
| 1775 | 1775 |
RUN mkdir `+destPath+` && touch `+destPath+slash+`bar |
| 1776 | 1776 |
CMD cat `+destPath+slash+`bar |
| 1777 |
- `, true) |
|
| 1777 |
+ `)) |
|
| 1778 | 1778 |
} else {
|
| 1779 | 1779 |
testImg = "busybox" |
| 1780 | 1780 |
} |
| 1781 |
- c.Assert(err, checker.IsNil) |
|
| 1782 | 1781 |
|
| 1783 | 1782 |
type testCase struct {
|
| 1784 | 1783 |
cfg mounttypes.Mount |
| ... | ... |
@@ -52,9 +52,8 @@ func (s *DockerSuite) TestAPIImagesSaveAndLoad(c *check.C) {
|
| 52 | 52 |
// TODO Windows to Windows CI: Investigate further why this test fails. |
| 53 | 53 |
testRequires(c, Network) |
| 54 | 54 |
testRequires(c, DaemonIsLinux) |
| 55 |
- out, err := buildImage("saveandload", "FROM busybox\nENV FOO bar", false)
|
|
| 56 |
- c.Assert(err, checker.IsNil) |
|
| 57 |
- id := strings.TrimSpace(out) |
|
| 55 |
+ buildImageSuccessfully(c, "saveandload", withDockerfile("FROM busybox\nENV FOO bar"))
|
|
| 56 |
+ id := getIDByName(c, "saveandload") |
|
| 58 | 57 |
|
| 59 | 58 |
res, body, err := request.SockRequestRaw("GET", "/images/"+id+"/get", nil, "", daemonHost())
|
| 60 | 59 |
c.Assert(err, checker.IsNil) |
| ... | ... |
@@ -77,9 +76,8 @@ func (s *DockerSuite) TestAPIImagesDelete(c *check.C) {
|
| 77 | 77 |
testRequires(c, Network) |
| 78 | 78 |
} |
| 79 | 79 |
name := "test-api-images-delete" |
| 80 |
- out, err := buildImage(name, "FROM busybox\nENV FOO bar", false) |
|
| 81 |
- c.Assert(err, checker.IsNil) |
|
| 82 |
- id := strings.TrimSpace(out) |
|
| 80 |
+ buildImageSuccessfully(c, name, withDockerfile("FROM busybox\nENV FOO bar"))
|
|
| 81 |
+ id := getIDByName(c, name) |
|
| 83 | 82 |
|
| 84 | 83 |
dockerCmd(c, "tag", name, "test:tag1") |
| 85 | 84 |
|
| ... | ... |
@@ -101,10 +99,8 @@ func (s *DockerSuite) TestAPIImagesHistory(c *check.C) {
|
| 101 | 101 |
testRequires(c, Network) |
| 102 | 102 |
} |
| 103 | 103 |
name := "test-api-images-history" |
| 104 |
- out, err := buildImage(name, "FROM busybox\nENV FOO bar", false) |
|
| 105 |
- c.Assert(err, checker.IsNil) |
|
| 106 |
- |
|
| 107 |
- id := strings.TrimSpace(out) |
|
| 104 |
+ buildImageSuccessfully(c, name, withDockerfile("FROM busybox\nENV FOO bar"))
|
|
| 105 |
+ id := getIDByName(c, name) |
|
| 108 | 106 |
|
| 109 | 107 |
status, body, err := request.SockRequest("GET", "/images/"+id+"/history", nil, daemonHost())
|
| 110 | 108 |
c.Assert(err, checker.IsNil) |
| ... | ... |
@@ -271,7 +271,7 @@ func (s *DockerSuite) TestBuildOnBuildLowercase(c *check.C) {
|
| 271 | 271 |
onbuild run echo quux |
| 272 | 272 |
`)) |
| 273 | 273 |
|
| 274 |
- result := buildImageNew(name2, withDockerfile(fmt.Sprintf(` |
|
| 274 |
+ result := buildImage(name2, withDockerfile(fmt.Sprintf(` |
|
| 275 | 275 |
FROM %s |
| 276 | 276 |
`, name))) |
| 277 | 277 |
result.Assert(c, icmd.Success) |
| ... | ... |
@@ -361,69 +361,45 @@ ONBUILD ENTRYPOINT ["echo"]`)) |
| 361 | 361 |
func (s *DockerSuite) TestBuildCacheAdd(c *check.C) {
|
| 362 | 362 |
testRequires(c, DaemonIsLinux) // Windows doesn't have httpserver image yet |
| 363 | 363 |
name := "testbuildtwoimageswithadd" |
| 364 |
- server, err := fakeStorage(map[string]string{
|
|
| 364 |
+ server := fakeStorage(c, map[string]string{
|
|
| 365 | 365 |
"robots.txt": "hello", |
| 366 | 366 |
"index.html": "world", |
| 367 | 367 |
}) |
| 368 |
- if err != nil {
|
|
| 369 |
- c.Fatal(err) |
|
| 370 |
- } |
|
| 371 | 368 |
defer server.Close() |
| 372 | 369 |
|
| 373 |
- if _, err := buildImage(name, |
|
| 374 |
- fmt.Sprintf(`FROM scratch |
|
| 375 |
- ADD %s/robots.txt /`, server.URL()), |
|
| 376 |
- true); err != nil {
|
|
| 377 |
- c.Fatal(err) |
|
| 378 |
- } |
|
| 379 |
- if err != nil {
|
|
| 380 |
- c.Fatal(err) |
|
| 381 |
- } |
|
| 382 |
- deleteImages(name) |
|
| 383 |
- _, out, err := buildImageWithOut(name, |
|
| 384 |
- fmt.Sprintf(`FROM scratch |
|
| 385 |
- ADD %s/index.html /`, server.URL()), |
|
| 386 |
- true) |
|
| 387 |
- if err != nil {
|
|
| 388 |
- c.Fatal(err) |
|
| 389 |
- } |
|
| 390 |
- if strings.Contains(out, "Using cache") {
|
|
| 370 |
+ buildImageSuccessfully(c, name, withDockerfile(fmt.Sprintf(`FROM scratch |
|
| 371 |
+ ADD %s/robots.txt /`, server.URL()))) |
|
| 372 |
+ |
|
| 373 |
+ result := buildImage(name, withDockerfile(fmt.Sprintf(`FROM scratch |
|
| 374 |
+ ADD %s/index.html /`, server.URL()))) |
|
| 375 |
+ result.Assert(c, icmd.Success) |
|
| 376 |
+ if strings.Contains(result.Combined(), "Using cache") {
|
|
| 391 | 377 |
c.Fatal("2nd build used cache on ADD, it shouldn't")
|
| 392 | 378 |
} |
| 393 |
- |
|
| 394 | 379 |
} |
| 395 | 380 |
|
| 396 | 381 |
func (s *DockerSuite) TestBuildLastModified(c *check.C) {
|
| 397 | 382 |
name := "testbuildlastmodified" |
| 398 | 383 |
|
| 399 |
- server, err := fakeStorage(map[string]string{
|
|
| 384 |
+ server := fakeStorage(c, map[string]string{
|
|
| 400 | 385 |
"file": "hello", |
| 401 | 386 |
}) |
| 402 |
- if err != nil {
|
|
| 403 |
- c.Fatal(err) |
|
| 404 |
- } |
|
| 405 | 387 |
defer server.Close() |
| 406 | 388 |
|
| 407 | 389 |
var out, out2 string |
| 408 | 390 |
|
| 409 | 391 |
dFmt := `FROM busybox |
| 410 | 392 |
ADD %s/file /` |
| 411 |
- |
|
| 412 | 393 |
dockerfile := fmt.Sprintf(dFmt, server.URL()) |
| 413 | 394 |
|
| 414 |
- if _, _, err = buildImageWithOut(name, dockerfile, false); err != nil {
|
|
| 415 |
- c.Fatal(err) |
|
| 416 |
- } |
|
| 417 |
- |
|
| 395 |
+ buildImageSuccessfully(c, name, withoutCache, withDockerfile(dockerfile)) |
|
| 418 | 396 |
out, _ = dockerCmd(c, "run", name, "ls", "-le", "/file") |
| 419 | 397 |
|
| 420 | 398 |
// Build it again and make sure the mtime of the file didn't change. |
| 421 | 399 |
// Wait a few seconds to make sure the time changed enough to notice |
| 422 | 400 |
time.Sleep(2 * time.Second) |
| 423 | 401 |
|
| 424 |
- if _, _, err = buildImageWithOut(name, dockerfile, false); err != nil {
|
|
| 425 |
- c.Fatal(err) |
|
| 426 |
- } |
|
| 402 |
+ buildImageSuccessfully(c, name, withoutCache, withDockerfile(dockerfile)) |
|
| 427 | 403 |
out2, _ = dockerCmd(c, "run", name, "ls", "-le", "/file") |
| 428 | 404 |
|
| 429 | 405 |
if out != out2 {
|
| ... | ... |
@@ -432,19 +408,13 @@ ADD %s/file /` |
| 432 | 432 |
|
| 433 | 433 |
// Now 'touch' the file and make sure the timestamp DID change this time |
| 434 | 434 |
// Create a new fakeStorage instead of just using Add() to help windows |
| 435 |
- server, err = fakeStorage(map[string]string{
|
|
| 435 |
+ server = fakeStorage(c, map[string]string{
|
|
| 436 | 436 |
"file": "hello", |
| 437 | 437 |
}) |
| 438 |
- if err != nil {
|
|
| 439 |
- c.Fatal(err) |
|
| 440 |
- } |
|
| 441 | 438 |
defer server.Close() |
| 442 | 439 |
|
| 443 | 440 |
dockerfile = fmt.Sprintf(dFmt, server.URL()) |
| 444 |
- |
|
| 445 |
- if _, _, err = buildImageWithOut(name, dockerfile, false); err != nil {
|
|
| 446 |
- c.Fatal(err) |
|
| 447 |
- } |
|
| 441 |
+ buildImageSuccessfully(c, name, withoutCache, withDockerfile(dockerfile)) |
|
| 448 | 442 |
out2, _ = dockerCmd(c, "run", name, "ls", "-le", "/file") |
| 449 | 443 |
|
| 450 | 444 |
if out == out2 {
|
| ... | ... |
@@ -459,28 +429,21 @@ ADD %s/file /` |
| 459 | 459 |
func (s *DockerSuite) TestBuildModifyFileInFolder(c *check.C) {
|
| 460 | 460 |
name := "testbuildmodifyfileinfolder" |
| 461 | 461 |
|
| 462 |
- ctx, err := fakeContext(`FROM busybox |
|
| 462 |
+ ctx := fakeContext(c, `FROM busybox |
|
| 463 | 463 |
RUN ["mkdir", "/test"] |
| 464 | 464 |
ADD folder/file /test/changetarget`, |
| 465 | 465 |
map[string]string{})
|
| 466 |
- if err != nil {
|
|
| 467 |
- c.Fatal(err) |
|
| 468 |
- } |
|
| 469 | 466 |
defer ctx.Close() |
| 470 | 467 |
if err := ctx.Add("folder/file", "first"); err != nil {
|
| 471 | 468 |
c.Fatal(err) |
| 472 | 469 |
} |
| 473 |
- id1, err := buildImageFromContext(name, ctx, true) |
|
| 474 |
- if err != nil {
|
|
| 475 |
- c.Fatal(err) |
|
| 476 |
- } |
|
| 470 |
+ buildImageSuccessfully(c, name, withExternalBuildContext(ctx)) |
|
| 471 |
+ id1 := getIDByName(c, name) |
|
| 477 | 472 |
if err := ctx.Add("folder/file", "second"); err != nil {
|
| 478 | 473 |
c.Fatal(err) |
| 479 | 474 |
} |
| 480 |
- id2, err := buildImageFromContext(name, ctx, true) |
|
| 481 |
- if err != nil {
|
|
| 482 |
- c.Fatal(err) |
|
| 483 |
- } |
|
| 475 |
+ buildImageSuccessfully(c, name, withExternalBuildContext(ctx)) |
|
| 476 |
+ id2 := getIDByName(c, name) |
|
| 484 | 477 |
if id1 == id2 {
|
| 485 | 478 |
c.Fatal("cache was used even though file contents in folder was changed")
|
| 486 | 479 |
} |
| ... | ... |
@@ -504,20 +467,16 @@ RUN [ $(ls -l /exists | awk '{print $3":"$4}') = 'dockerio:dockerio' ]`, expecte
|
| 504 | 504 |
// Issue #3960: "ADD src ." hangs |
| 505 | 505 |
func (s *DockerSuite) TestBuildAddSingleFileToWorkdir(c *check.C) {
|
| 506 | 506 |
name := "testaddsinglefiletoworkdir" |
| 507 |
- ctx, err := fakeContext(`FROM busybox |
|
| 507 |
+ ctx := fakeContext(c, `FROM busybox |
|
| 508 | 508 |
ADD test_file .`, |
| 509 | 509 |
map[string]string{
|
| 510 | 510 |
"test_file": "test1", |
| 511 | 511 |
}) |
| 512 |
- if err != nil {
|
|
| 513 |
- c.Fatal(err) |
|
| 514 |
- } |
|
| 515 | 512 |
defer ctx.Close() |
| 516 | 513 |
|
| 517 | 514 |
errChan := make(chan error) |
| 518 | 515 |
go func() {
|
| 519 |
- _, err := buildImageFromContext(name, ctx, true) |
|
| 520 |
- errChan <- err |
|
| 516 |
+ errChan <- buildImage(name, withExternalBuildContext(ctx)).Error |
|
| 521 | 517 |
close(errChan) |
| 522 | 518 |
}() |
| 523 | 519 |
select {
|
| ... | ... |
@@ -546,12 +505,9 @@ RUN [ $(ls -l /exists/exists_file | awk '{print $3":"$4}') = 'dockerio:dockerio'
|
| 546 | 546 |
|
| 547 | 547 |
func (s *DockerSuite) TestBuildCopyAddMultipleFiles(c *check.C) {
|
| 548 | 548 |
testRequires(c, DaemonIsLinux) // Linux specific test |
| 549 |
- server, err := fakeStorage(map[string]string{
|
|
| 549 |
+ server := fakeStorage(c, map[string]string{
|
|
| 550 | 550 |
"robots.txt": "hello", |
| 551 | 551 |
}) |
| 552 |
- if err != nil {
|
|
| 553 |
- c.Fatal(err) |
|
| 554 |
- } |
|
| 555 | 552 |
defer server.Close() |
| 556 | 553 |
|
| 557 | 554 |
buildImageSuccessfully(c, "testcopymultiplefilestofile", withBuildContext(c, |
| ... | ... |
@@ -664,16 +620,13 @@ RUN find "test6" "C:/test dir/test_file6"` |
| 664 | 664 |
|
| 665 | 665 |
func (s *DockerSuite) TestBuildCopyWildcard(c *check.C) {
|
| 666 | 666 |
name := "testcopywildcard" |
| 667 |
- server, err := fakeStorage(map[string]string{
|
|
| 667 |
+ server := fakeStorage(c, map[string]string{
|
|
| 668 | 668 |
"robots.txt": "hello", |
| 669 | 669 |
"index.html": "world", |
| 670 | 670 |
}) |
| 671 |
- if err != nil {
|
|
| 672 |
- c.Fatal(err) |
|
| 673 |
- } |
|
| 674 | 671 |
defer server.Close() |
| 675 | 672 |
|
| 676 |
- ctx, err := fakeContext(fmt.Sprintf(`FROM busybox |
|
| 673 |
+ ctx := fakeContext(c, fmt.Sprintf(`FROM busybox |
|
| 677 | 674 |
COPY file*.txt /tmp/ |
| 678 | 675 |
RUN ls /tmp/file1.txt /tmp/file2.txt |
| 679 | 676 |
RUN [ "mkdir", "/tmp1" ] |
| ... | ... |
@@ -690,21 +643,14 @@ func (s *DockerSuite) TestBuildCopyWildcard(c *check.C) {
|
| 690 | 690 |
"dir/nested_dir/nest_nest_file": "2 times nested", |
| 691 | 691 |
"dirt": "dirty", |
| 692 | 692 |
}) |
| 693 |
- if err != nil {
|
|
| 694 |
- c.Fatal(err) |
|
| 695 |
- } |
|
| 696 | 693 |
defer ctx.Close() |
| 697 | 694 |
|
| 698 |
- id1, err := buildImageFromContext(name, ctx, true) |
|
| 699 |
- if err != nil {
|
|
| 700 |
- c.Fatal(err) |
|
| 701 |
- } |
|
| 695 |
+ buildImageSuccessfully(c, name, withExternalBuildContext(ctx)) |
|
| 696 |
+ id1 := getIDByName(c, name) |
|
| 702 | 697 |
|
| 703 | 698 |
// Now make sure we use a cache the 2nd time |
| 704 |
- id2, err := buildImageFromContext(name, ctx, true) |
|
| 705 |
- if err != nil {
|
|
| 706 |
- c.Fatal(err) |
|
| 707 |
- } |
|
| 699 |
+ buildImageSuccessfully(c, name, withExternalBuildContext(ctx)) |
|
| 700 |
+ id2 := getIDByName(c, name) |
|
| 708 | 701 |
|
| 709 | 702 |
if id1 != id2 {
|
| 710 | 703 |
c.Fatal("didn't use the cache")
|
| ... | ... |
@@ -734,30 +680,23 @@ func (s *DockerSuite) TestBuildCopyWildcardInName(c *check.C) {
|
| 734 | 734 |
|
| 735 | 735 |
func (s *DockerSuite) TestBuildCopyWildcardCache(c *check.C) {
|
| 736 | 736 |
name := "testcopywildcardcache" |
| 737 |
- ctx, err := fakeContext(`FROM busybox |
|
| 737 |
+ ctx := fakeContext(c, `FROM busybox |
|
| 738 | 738 |
COPY file1.txt /tmp/`, |
| 739 | 739 |
map[string]string{
|
| 740 | 740 |
"file1.txt": "test1", |
| 741 | 741 |
}) |
| 742 |
- if err != nil {
|
|
| 743 |
- c.Fatal(err) |
|
| 744 |
- } |
|
| 745 | 742 |
defer ctx.Close() |
| 746 | 743 |
|
| 747 |
- id1, err := buildImageFromContext(name, ctx, true) |
|
| 748 |
- if err != nil {
|
|
| 749 |
- c.Fatal(err) |
|
| 750 |
- } |
|
| 744 |
+ buildImageSuccessfully(c, name, withExternalBuildContext(ctx)) |
|
| 745 |
+ id1 := getIDByName(c, name) |
|
| 751 | 746 |
|
| 752 | 747 |
// Now make sure we use a cache the 2nd time even with wild cards. |
| 753 | 748 |
// Use the same context so the file is the same and the checksum will match |
| 754 | 749 |
ctx.Add("Dockerfile", `FROM busybox
|
| 755 | 750 |
COPY file*.txt /tmp/`) |
| 756 | 751 |
|
| 757 |
- id2, err := buildImageFromContext(name, ctx, true) |
|
| 758 |
- if err != nil {
|
|
| 759 |
- c.Fatal(err) |
|
| 760 |
- } |
|
| 752 |
+ buildImageSuccessfully(c, name, withExternalBuildContext(ctx)) |
|
| 753 |
+ id2 := getIDByName(c, name) |
|
| 761 | 754 |
|
| 762 | 755 |
if id1 != id2 {
|
| 763 | 756 |
c.Fatal("didn't use the cache")
|
| ... | ... |
@@ -871,20 +810,16 @@ RUN [ $(ls -l /exists | awk '{print $3":"$4}') = 'dockerio:dockerio' ]`, expecte
|
| 871 | 871 |
// Issue #3960: "ADD src ." hangs - adapted for COPY |
| 872 | 872 |
func (s *DockerSuite) TestBuildCopySingleFileToWorkdir(c *check.C) {
|
| 873 | 873 |
name := "testcopysinglefiletoworkdir" |
| 874 |
- ctx, err := fakeContext(`FROM busybox |
|
| 874 |
+ ctx := fakeContext(c, `FROM busybox |
|
| 875 | 875 |
COPY test_file .`, |
| 876 | 876 |
map[string]string{
|
| 877 | 877 |
"test_file": "test1", |
| 878 | 878 |
}) |
| 879 |
- if err != nil {
|
|
| 880 |
- c.Fatal(err) |
|
| 881 |
- } |
|
| 882 | 879 |
defer ctx.Close() |
| 883 | 880 |
|
| 884 | 881 |
errChan := make(chan error) |
| 885 | 882 |
go func() {
|
| 886 |
- _, err := buildImageFromContext(name, ctx, true) |
|
| 887 |
- errChan <- err |
|
| 883 |
+ errChan <- buildImage(name, withExternalBuildContext(ctx)).Error |
|
| 888 | 884 |
close(errChan) |
| 889 | 885 |
}() |
| 890 | 886 |
select {
|
| ... | ... |
@@ -985,10 +920,7 @@ func (s *DockerSuite) TestBuildAddBadLinks(c *check.C) {
|
| 985 | 985 |
var ( |
| 986 | 986 |
name = "test-link-absolute" |
| 987 | 987 |
) |
| 988 |
- ctx, err := fakeContext(dockerfile, nil) |
|
| 989 |
- if err != nil {
|
|
| 990 |
- c.Fatal(err) |
|
| 991 |
- } |
|
| 988 |
+ ctx := fakeContext(c, dockerfile, nil) |
|
| 992 | 989 |
defer ctx.Close() |
| 993 | 990 |
|
| 994 | 991 |
tempDir, err := ioutil.TempDir("", "test-link-absolute-temp-")
|
| ... | ... |
@@ -1049,10 +981,7 @@ func (s *DockerSuite) TestBuildAddBadLinks(c *check.C) {
|
| 1049 | 1049 |
c.Fatal(err) |
| 1050 | 1050 |
} |
| 1051 | 1051 |
|
| 1052 |
- if _, err := buildImageFromContext(name, ctx, true); err != nil {
|
|
| 1053 |
- c.Fatal(err) |
|
| 1054 |
- } |
|
| 1055 |
- |
|
| 1052 |
+ buildImageSuccessfully(c, name, withExternalBuildContext(ctx)) |
|
| 1056 | 1053 |
if _, err := os.Stat(nonExistingFile); err == nil || err != nil && !os.IsNotExist(err) {
|
| 1057 | 1054 |
c.Fatalf("%s shouldn't have been written and it shouldn't exist", nonExistingFile)
|
| 1058 | 1055 |
} |
| ... | ... |
@@ -1083,10 +1012,7 @@ func (s *DockerSuite) TestBuildAddBadLinksVolume(c *check.C) {
|
| 1083 | 1083 |
dockerfile = fmt.Sprintf(dockerfileTemplate, tempDir) |
| 1084 | 1084 |
nonExistingFile := filepath.Join(tempDir, targetFile) |
| 1085 | 1085 |
|
| 1086 |
- ctx, err := fakeContext(dockerfile, nil) |
|
| 1087 |
- if err != nil {
|
|
| 1088 |
- c.Fatal(err) |
|
| 1089 |
- } |
|
| 1086 |
+ ctx := fakeContext(c, dockerfile, nil) |
|
| 1090 | 1087 |
defer ctx.Close() |
| 1091 | 1088 |
fooPath := filepath.Join(ctx.Dir, targetFile) |
| 1092 | 1089 |
|
| ... | ... |
@@ -1100,10 +1026,7 @@ func (s *DockerSuite) TestBuildAddBadLinksVolume(c *check.C) {
|
| 1100 | 1100 |
c.Fatal(err) |
| 1101 | 1101 |
} |
| 1102 | 1102 |
|
| 1103 |
- if _, err := buildImageFromContext(name, ctx, true); err != nil {
|
|
| 1104 |
- c.Fatal(err) |
|
| 1105 |
- } |
|
| 1106 |
- |
|
| 1103 |
+ buildImageSuccessfully(c, name, withExternalBuildContext(ctx)) |
|
| 1107 | 1104 |
if _, err := os.Stat(nonExistingFile); err == nil || err != nil && !os.IsNotExist(err) {
|
| 1108 | 1105 |
c.Fatalf("%s shouldn't have been written and it shouldn't exist", nonExistingFile)
|
| 1109 | 1106 |
} |
| ... | ... |
@@ -1117,18 +1040,15 @@ func (s *DockerSuite) TestBuildWithInaccessibleFilesInContext(c *check.C) {
|
| 1117 | 1117 |
|
| 1118 | 1118 |
{
|
| 1119 | 1119 |
name := "testbuildinaccessiblefiles" |
| 1120 |
- ctx, err := fakeContext("FROM scratch\nADD . /foo/", map[string]string{"fileWithoutReadAccess": "foo"})
|
|
| 1121 |
- if err != nil {
|
|
| 1122 |
- c.Fatal(err) |
|
| 1123 |
- } |
|
| 1120 |
+ ctx := fakeContext(c, "FROM scratch\nADD . /foo/", map[string]string{"fileWithoutReadAccess": "foo"})
|
|
| 1124 | 1121 |
defer ctx.Close() |
| 1125 | 1122 |
// This is used to ensure we detect inaccessible files early during build in the cli client |
| 1126 | 1123 |
pathToFileWithoutReadAccess := filepath.Join(ctx.Dir, "fileWithoutReadAccess") |
| 1127 | 1124 |
|
| 1128 |
- if err = os.Chown(pathToFileWithoutReadAccess, 0, 0); err != nil {
|
|
| 1125 |
+ if err := os.Chown(pathToFileWithoutReadAccess, 0, 0); err != nil {
|
|
| 1129 | 1126 |
c.Fatalf("failed to chown file to root: %s", err)
|
| 1130 | 1127 |
} |
| 1131 |
- if err = os.Chmod(pathToFileWithoutReadAccess, 0700); err != nil {
|
|
| 1128 |
+ if err := os.Chmod(pathToFileWithoutReadAccess, 0700); err != nil {
|
|
| 1132 | 1129 |
c.Fatalf("failed to chmod file to 700: %s", err)
|
| 1133 | 1130 |
} |
| 1134 | 1131 |
result := icmd.RunCmd(icmd.Cmd{
|
| ... | ... |
@@ -1150,22 +1070,19 @@ func (s *DockerSuite) TestBuildWithInaccessibleFilesInContext(c *check.C) {
|
| 1150 | 1150 |
} |
| 1151 | 1151 |
{
|
| 1152 | 1152 |
name := "testbuildinaccessibledirectory" |
| 1153 |
- ctx, err := fakeContext("FROM scratch\nADD . /foo/", map[string]string{"directoryWeCantStat/bar": "foo"})
|
|
| 1154 |
- if err != nil {
|
|
| 1155 |
- c.Fatal(err) |
|
| 1156 |
- } |
|
| 1153 |
+ ctx := fakeContext(c, "FROM scratch\nADD . /foo/", map[string]string{"directoryWeCantStat/bar": "foo"})
|
|
| 1157 | 1154 |
defer ctx.Close() |
| 1158 | 1155 |
// This is used to ensure we detect inaccessible directories early during build in the cli client |
| 1159 | 1156 |
pathToDirectoryWithoutReadAccess := filepath.Join(ctx.Dir, "directoryWeCantStat") |
| 1160 | 1157 |
pathToFileInDirectoryWithoutReadAccess := filepath.Join(pathToDirectoryWithoutReadAccess, "bar") |
| 1161 | 1158 |
|
| 1162 |
- if err = os.Chown(pathToDirectoryWithoutReadAccess, 0, 0); err != nil {
|
|
| 1159 |
+ if err := os.Chown(pathToDirectoryWithoutReadAccess, 0, 0); err != nil {
|
|
| 1163 | 1160 |
c.Fatalf("failed to chown directory to root: %s", err)
|
| 1164 | 1161 |
} |
| 1165 |
- if err = os.Chmod(pathToDirectoryWithoutReadAccess, 0444); err != nil {
|
|
| 1162 |
+ if err := os.Chmod(pathToDirectoryWithoutReadAccess, 0444); err != nil {
|
|
| 1166 | 1163 |
c.Fatalf("failed to chmod directory to 444: %s", err)
|
| 1167 | 1164 |
} |
| 1168 |
- if err = os.Chmod(pathToFileInDirectoryWithoutReadAccess, 0700); err != nil {
|
|
| 1165 |
+ if err := os.Chmod(pathToFileInDirectoryWithoutReadAccess, 0700); err != nil {
|
|
| 1169 | 1166 |
c.Fatalf("failed to chmod file to 700: %s", err)
|
| 1170 | 1167 |
} |
| 1171 | 1168 |
|
| ... | ... |
@@ -1189,10 +1106,7 @@ func (s *DockerSuite) TestBuildWithInaccessibleFilesInContext(c *check.C) {
|
| 1189 | 1189 |
} |
| 1190 | 1190 |
{
|
| 1191 | 1191 |
name := "testlinksok" |
| 1192 |
- ctx, err := fakeContext("FROM scratch\nADD . /foo/", nil)
|
|
| 1193 |
- if err != nil {
|
|
| 1194 |
- c.Fatal(err) |
|
| 1195 |
- } |
|
| 1192 |
+ ctx := fakeContext(c, "FROM scratch\nADD . /foo/", nil) |
|
| 1196 | 1193 |
defer ctx.Close() |
| 1197 | 1194 |
|
| 1198 | 1195 |
target := "../../../../../../../../../../../../../../../../../../../azA" |
| ... | ... |
@@ -1202,31 +1116,26 @@ func (s *DockerSuite) TestBuildWithInaccessibleFilesInContext(c *check.C) {
|
| 1202 | 1202 |
defer os.Remove(target) |
| 1203 | 1203 |
// This is used to ensure we don't follow links when checking if everything in the context is accessible |
| 1204 | 1204 |
// This test doesn't require that we run commands as an unprivileged user |
| 1205 |
- if _, err := buildImageFromContext(name, ctx, true); err != nil {
|
|
| 1206 |
- c.Fatal(err) |
|
| 1207 |
- } |
|
| 1205 |
+ buildImageSuccessfully(c, name, withExternalBuildContext(ctx)) |
|
| 1208 | 1206 |
} |
| 1209 | 1207 |
{
|
| 1210 | 1208 |
name := "testbuildignoredinaccessible" |
| 1211 |
- ctx, err := fakeContext("FROM scratch\nADD . /foo/",
|
|
| 1209 |
+ ctx := fakeContext(c, "FROM scratch\nADD . /foo/", |
|
| 1212 | 1210 |
map[string]string{
|
| 1213 | 1211 |
"directoryWeCantStat/bar": "foo", |
| 1214 | 1212 |
".dockerignore": "directoryWeCantStat", |
| 1215 | 1213 |
}) |
| 1216 |
- if err != nil {
|
|
| 1217 |
- c.Fatal(err) |
|
| 1218 |
- } |
|
| 1219 | 1214 |
defer ctx.Close() |
| 1220 | 1215 |
// This is used to ensure we don't try to add inaccessible files when they are ignored by a .dockerignore pattern |
| 1221 | 1216 |
pathToDirectoryWithoutReadAccess := filepath.Join(ctx.Dir, "directoryWeCantStat") |
| 1222 | 1217 |
pathToFileInDirectoryWithoutReadAccess := filepath.Join(pathToDirectoryWithoutReadAccess, "bar") |
| 1223 |
- if err = os.Chown(pathToDirectoryWithoutReadAccess, 0, 0); err != nil {
|
|
| 1218 |
+ if err := os.Chown(pathToDirectoryWithoutReadAccess, 0, 0); err != nil {
|
|
| 1224 | 1219 |
c.Fatalf("failed to chown directory to root: %s", err)
|
| 1225 | 1220 |
} |
| 1226 |
- if err = os.Chmod(pathToDirectoryWithoutReadAccess, 0444); err != nil {
|
|
| 1221 |
+ if err := os.Chmod(pathToDirectoryWithoutReadAccess, 0444); err != nil {
|
|
| 1227 | 1222 |
c.Fatalf("failed to chmod directory to 444: %s", err)
|
| 1228 | 1223 |
} |
| 1229 |
- if err = os.Chmod(pathToFileInDirectoryWithoutReadAccess, 0700); err != nil {
|
|
| 1224 |
+ if err := os.Chmod(pathToFileInDirectoryWithoutReadAccess, 0700); err != nil {
|
|
| 1230 | 1225 |
c.Fatalf("failed to chmod file to 700: %s", err)
|
| 1231 | 1226 |
} |
| 1232 | 1227 |
|
| ... | ... |
@@ -1246,7 +1155,7 @@ func (s *DockerSuite) TestBuildForceRm(c *check.C) {
|
| 1246 | 1246 |
} |
| 1247 | 1247 |
name := "testbuildforcerm" |
| 1248 | 1248 |
|
| 1249 |
- buildImageNew(name, withBuildFlags("--force-rm"), withBuildContext(c,
|
|
| 1249 |
+ buildImage(name, withBuildFlags("--force-rm"), withBuildContext(c,
|
|
| 1250 | 1250 |
withFile("Dockerfile", `FROM `+minimalBaseImage()+`
|
| 1251 | 1251 |
RUN true |
| 1252 | 1252 |
RUN thiswillfail`))).Assert(c, icmd.Expected{
|
| ... | ... |
@@ -1542,7 +1451,7 @@ func (s *DockerSuite) TestBuildBlankName(c *check.C) {
|
| 1542 | 1542 |
} |
| 1543 | 1543 |
|
| 1544 | 1544 |
for _, tc := range testCases {
|
| 1545 |
- buildImageNew(name, withDockerfile(fmt.Sprintf(`FROM busybox |
|
| 1545 |
+ buildImage(name, withDockerfile(fmt.Sprintf(`FROM busybox |
|
| 1546 | 1546 |
%s`, tc.expression))).Assert(c, icmd.Expected{
|
| 1547 | 1547 |
ExitCode: 1, |
| 1548 | 1548 |
Err: tc.expectedStderr, |
| ... | ... |
@@ -1624,7 +1533,7 @@ func (s *DockerSuite) TestBuildContextCleanupFailedBuild(c *check.C) {
|
| 1624 | 1624 |
c.Fatalf("failed to list contents of tmp dir: %s", err)
|
| 1625 | 1625 |
} |
| 1626 | 1626 |
|
| 1627 |
- buildImageNew(name, withDockerfile(`FROM `+minimalBaseImage()+` |
|
| 1627 |
+ buildImage(name, withDockerfile(`FROM `+minimalBaseImage()+` |
|
| 1628 | 1628 |
RUN /non/existing/command`)).Assert(c, icmd.Expected{
|
| 1629 | 1629 |
ExitCode: 1, |
| 1630 | 1630 |
}) |
| ... | ... |
@@ -1802,11 +1711,11 @@ func (s *DockerSuite) TestBuildOnBuildLimitedInheritence(c *check.C) {
|
| 1802 | 1802 |
ONBUILD RUN echo "ONBUILD PARENT" |
| 1803 | 1803 |
`)) |
| 1804 | 1804 |
// ONBUILD should be run in second build. |
| 1805 |
- buildImageNew("testonbuildtrigger2", withDockerfile("FROM testonbuildtrigger1")).Assert(c, icmd.Expected{
|
|
| 1805 |
+ buildImage("testonbuildtrigger2", withDockerfile("FROM testonbuildtrigger1")).Assert(c, icmd.Expected{
|
|
| 1806 | 1806 |
Out: "ONBUILD PARENT", |
| 1807 | 1807 |
}) |
| 1808 | 1808 |
// ONBUILD should *not* be run in third build. |
| 1809 |
- result := buildImageNew("testonbuildtrigger3", withDockerfile("FROM testonbuildtrigger2"))
|
|
| 1809 |
+ result := buildImage("testonbuildtrigger3", withDockerfile("FROM testonbuildtrigger2"))
|
|
| 1810 | 1810 |
result.Assert(c, icmd.Success) |
| 1811 | 1811 |
if strings.Contains(result.Combined(), "ONBUILD PARENT") {
|
| 1812 | 1812 |
c.Fatalf("ONBUILD instruction ran in grandchild of ONBUILD parent")
|
| ... | ... |
@@ -1821,14 +1730,11 @@ func (s *DockerSuite) TestBuildSameDockerfileWithAndWithoutCache(c *check.C) {
|
| 1821 | 1821 |
EXPOSE 5432 |
| 1822 | 1822 |
ENTRYPOINT ["/bin/echo"]` |
| 1823 | 1823 |
buildImageSuccessfully(c, name, withDockerfile(dockerfile)) |
| 1824 |
- id1, err := getIDByName(name) |
|
| 1825 |
- c.Assert(err, checker.IsNil) |
|
| 1824 |
+ id1 := getIDByName(c, name) |
|
| 1826 | 1825 |
buildImageSuccessfully(c, name, withDockerfile(dockerfile)) |
| 1827 |
- id2, err := getIDByName(name) |
|
| 1828 |
- c.Assert(err, checker.IsNil) |
|
| 1826 |
+ id2 := getIDByName(c, name) |
|
| 1829 | 1827 |
buildImageSuccessfully(c, name, withoutCache, withDockerfile(dockerfile)) |
| 1830 |
- id3, err := getIDByName(name) |
|
| 1831 |
- c.Assert(err, checker.IsNil) |
|
| 1828 |
+ id3 := getIDByName(c, name) |
|
| 1832 | 1829 |
if id1 != id2 {
|
| 1833 | 1830 |
c.Fatal("The cache should have been used but hasn't.")
|
| 1834 | 1831 |
} |
| ... | ... |
@@ -1844,36 +1750,27 @@ func (s *DockerSuite) TestBuildConditionalCache(c *check.C) {
|
| 1844 | 1844 |
dockerfile := ` |
| 1845 | 1845 |
FROM busybox |
| 1846 | 1846 |
ADD foo /tmp/` |
| 1847 |
- ctx, err := fakeContext(dockerfile, map[string]string{
|
|
| 1847 |
+ ctx := fakeContext(c, dockerfile, map[string]string{
|
|
| 1848 | 1848 |
"foo": "hello", |
| 1849 | 1849 |
}) |
| 1850 |
- if err != nil {
|
|
| 1851 |
- c.Fatal(err) |
|
| 1852 |
- } |
|
| 1853 | 1850 |
defer ctx.Close() |
| 1854 | 1851 |
|
| 1855 |
- id1, err := buildImageFromContext(name, ctx, true) |
|
| 1856 |
- if err != nil {
|
|
| 1857 |
- c.Fatalf("Error building #1: %s", err)
|
|
| 1858 |
- } |
|
| 1852 |
+ buildImageSuccessfully(c, name, withExternalBuildContext(ctx)) |
|
| 1853 |
+ id1 := getIDByName(c, name) |
|
| 1859 | 1854 |
|
| 1860 | 1855 |
if err := ctx.Add("foo", "bye"); err != nil {
|
| 1861 | 1856 |
c.Fatalf("Error modifying foo: %s", err)
|
| 1862 | 1857 |
} |
| 1863 | 1858 |
|
| 1864 | 1859 |
// Updating a file should invalidate the cache |
| 1865 |
- id2, err := buildImageFromContext(name, ctx, true) |
|
| 1866 |
- if err != nil {
|
|
| 1867 |
- c.Fatalf("Error building #2: %s", err)
|
|
| 1868 |
- } |
|
| 1860 |
+ buildImageSuccessfully(c, name, withExternalBuildContext(ctx)) |
|
| 1861 |
+ id2 := getIDByName(c, name) |
|
| 1869 | 1862 |
if id2 == id1 {
|
| 1870 | 1863 |
c.Fatal("Should not have used the cache")
|
| 1871 | 1864 |
} |
| 1872 | 1865 |
|
| 1873 |
- id3, err := buildImageFromContext(name, ctx, true) |
|
| 1874 |
- if err != nil {
|
|
| 1875 |
- c.Fatalf("Error building #3: %s", err)
|
|
| 1876 |
- } |
|
| 1866 |
+ buildImageSuccessfully(c, name, withExternalBuildContext(ctx)) |
|
| 1867 |
+ id3 := getIDByName(c, name) |
|
| 1877 | 1868 |
if id3 != id2 {
|
| 1878 | 1869 |
c.Fatal("Should have used the cache")
|
| 1879 | 1870 |
} |
| ... | ... |
@@ -1887,25 +1784,16 @@ func (s *DockerSuite) TestBuildAddMultipleLocalFileWithAndWithoutCache(c *check. |
| 1887 | 1887 |
MAINTAINER dockerio |
| 1888 | 1888 |
ADD foo Dockerfile /usr/lib/bla/ |
| 1889 | 1889 |
RUN sh -c "[ $(cat /usr/lib/bla/foo) = "hello" ]"` |
| 1890 |
- ctx, err := fakeContext(dockerfile, map[string]string{
|
|
| 1890 |
+ ctx := fakeContext(c, dockerfile, map[string]string{
|
|
| 1891 | 1891 |
"foo": "hello", |
| 1892 | 1892 |
}) |
| 1893 |
- if err != nil {
|
|
| 1894 |
- c.Fatal(err) |
|
| 1895 |
- } |
|
| 1896 | 1893 |
defer ctx.Close() |
| 1897 |
- id1, err := buildImageFromContext(name, ctx, true) |
|
| 1898 |
- if err != nil {
|
|
| 1899 |
- c.Fatal(err) |
|
| 1900 |
- } |
|
| 1901 |
- id2, err := buildImageFromContext(name, ctx, true) |
|
| 1902 |
- if err != nil {
|
|
| 1903 |
- c.Fatal(err) |
|
| 1904 |
- } |
|
| 1905 |
- id3, err := buildImageFromContext(name, ctx, false) |
|
| 1906 |
- if err != nil {
|
|
| 1907 |
- c.Fatal(err) |
|
| 1908 |
- } |
|
| 1894 |
+ buildImageSuccessfully(c, name, withExternalBuildContext(ctx)) |
|
| 1895 |
+ id1 := getIDByName(c, name) |
|
| 1896 |
+ buildImageSuccessfully(c, name, withExternalBuildContext(ctx)) |
|
| 1897 |
+ id2 := getIDByName(c, name) |
|
| 1898 |
+ buildImageSuccessfully(c, name, withoutCache, withExternalBuildContext(ctx)) |
|
| 1899 |
+ id3 := getIDByName(c, name) |
|
| 1909 | 1900 |
if id1 != id2 {
|
| 1910 | 1901 |
c.Fatal("The cache should have been used but hasn't.")
|
| 1911 | 1902 |
} |
| ... | ... |
@@ -1921,25 +1809,18 @@ func (s *DockerSuite) TestBuildCopyDirButNotFile(c *check.C) {
|
| 1921 | 1921 |
dockerfile := ` |
| 1922 | 1922 |
FROM ` + minimalBaseImage() + ` |
| 1923 | 1923 |
COPY dir /tmp/` |
| 1924 |
- ctx, err := fakeContext(dockerfile, map[string]string{
|
|
| 1924 |
+ ctx := fakeContext(c, dockerfile, map[string]string{
|
|
| 1925 | 1925 |
"dir/foo": "hello", |
| 1926 | 1926 |
}) |
| 1927 |
- if err != nil {
|
|
| 1928 |
- c.Fatal(err) |
|
| 1929 |
- } |
|
| 1930 | 1927 |
defer ctx.Close() |
| 1931 |
- id1, err := buildImageFromContext(name, ctx, true) |
|
| 1932 |
- if err != nil {
|
|
| 1933 |
- c.Fatal(err) |
|
| 1934 |
- } |
|
| 1928 |
+ buildImageSuccessfully(c, name, withExternalBuildContext(ctx)) |
|
| 1929 |
+ id1 := getIDByName(c, name) |
|
| 1935 | 1930 |
// Check that adding file with similar name doesn't mess with cache |
| 1936 | 1931 |
if err := ctx.Add("dir_file", "hello2"); err != nil {
|
| 1937 | 1932 |
c.Fatal(err) |
| 1938 | 1933 |
} |
| 1939 |
- id2, err := buildImageFromContext(name2, ctx, true) |
|
| 1940 |
- if err != nil {
|
|
| 1941 |
- c.Fatal(err) |
|
| 1942 |
- } |
|
| 1934 |
+ buildImageSuccessfully(c, name2, withExternalBuildContext(ctx)) |
|
| 1935 |
+ id2 := getIDByName(c, name2) |
|
| 1943 | 1936 |
if id1 != id2 {
|
| 1944 | 1937 |
c.Fatal("The cache should have been used but wasn't")
|
| 1945 | 1938 |
} |
| ... | ... |
@@ -1954,25 +1835,18 @@ func (s *DockerSuite) TestBuildAddCurrentDirWithCache(c *check.C) {
|
| 1954 | 1954 |
FROM ` + minimalBaseImage() + ` |
| 1955 | 1955 |
MAINTAINER dockerio |
| 1956 | 1956 |
ADD . /usr/lib/bla` |
| 1957 |
- ctx, err := fakeContext(dockerfile, map[string]string{
|
|
| 1957 |
+ ctx := fakeContext(c, dockerfile, map[string]string{
|
|
| 1958 | 1958 |
"foo": "hello", |
| 1959 | 1959 |
}) |
| 1960 |
- if err != nil {
|
|
| 1961 |
- c.Fatal(err) |
|
| 1962 |
- } |
|
| 1963 | 1960 |
defer ctx.Close() |
| 1964 |
- id1, err := buildImageFromContext(name, ctx, true) |
|
| 1965 |
- if err != nil {
|
|
| 1966 |
- c.Fatal(err) |
|
| 1967 |
- } |
|
| 1961 |
+ buildImageSuccessfully(c, name, withExternalBuildContext(ctx)) |
|
| 1962 |
+ id1 := getIDByName(c, name) |
|
| 1968 | 1963 |
// Check that adding file invalidate cache of "ADD ." |
| 1969 | 1964 |
if err := ctx.Add("bar", "hello2"); err != nil {
|
| 1970 | 1965 |
c.Fatal(err) |
| 1971 | 1966 |
} |
| 1972 |
- id2, err := buildImageFromContext(name2, ctx, true) |
|
| 1973 |
- if err != nil {
|
|
| 1974 |
- c.Fatal(err) |
|
| 1975 |
- } |
|
| 1967 |
+ buildImageSuccessfully(c, name2, withExternalBuildContext(ctx)) |
|
| 1968 |
+ id2 := getIDByName(c, name2) |
|
| 1976 | 1969 |
if id1 == id2 {
|
| 1977 | 1970 |
c.Fatal("The cache should have been invalided but hasn't.")
|
| 1978 | 1971 |
} |
| ... | ... |
@@ -1980,10 +1854,8 @@ func (s *DockerSuite) TestBuildAddCurrentDirWithCache(c *check.C) {
|
| 1980 | 1980 |
if err := ctx.Add("foo", "hello1"); err != nil {
|
| 1981 | 1981 |
c.Fatal(err) |
| 1982 | 1982 |
} |
| 1983 |
- id3, err := buildImageFromContext(name3, ctx, true) |
|
| 1984 |
- if err != nil {
|
|
| 1985 |
- c.Fatal(err) |
|
| 1986 |
- } |
|
| 1983 |
+ buildImageSuccessfully(c, name3, withExternalBuildContext(ctx)) |
|
| 1984 |
+ id3 := getIDByName(c, name3) |
|
| 1987 | 1985 |
if id2 == id3 {
|
| 1988 | 1986 |
c.Fatal("The cache should have been invalided but hasn't.")
|
| 1989 | 1987 |
} |
| ... | ... |
@@ -1993,10 +1865,8 @@ func (s *DockerSuite) TestBuildAddCurrentDirWithCache(c *check.C) {
|
| 1993 | 1993 |
if err := ctx.Add("foo", "hello1"); err != nil {
|
| 1994 | 1994 |
c.Fatal(err) |
| 1995 | 1995 |
} |
| 1996 |
- id4, err := buildImageFromContext(name4, ctx, true) |
|
| 1997 |
- if err != nil {
|
|
| 1998 |
- c.Fatal(err) |
|
| 1999 |
- } |
|
| 1996 |
+ buildImageSuccessfully(c, name4, withExternalBuildContext(ctx)) |
|
| 1997 |
+ id4 := getIDByName(c, name4) |
|
| 2000 | 1998 |
if id3 != id4 {
|
| 2001 | 1999 |
c.Fatal("The cache should have been used but hasn't.")
|
| 2002 | 2000 |
} |
| ... | ... |
@@ -2009,21 +1879,14 @@ func (s *DockerSuite) TestBuildAddCurrentDirWithoutCache(c *check.C) {
|
| 2009 | 2009 |
FROM ` + minimalBaseImage() + ` |
| 2010 | 2010 |
MAINTAINER dockerio |
| 2011 | 2011 |
ADD . /usr/lib/bla` |
| 2012 |
- ctx, err := fakeContext(dockerfile, map[string]string{
|
|
| 2012 |
+ ctx := fakeContext(c, dockerfile, map[string]string{
|
|
| 2013 | 2013 |
"foo": "hello", |
| 2014 | 2014 |
}) |
| 2015 |
- if err != nil {
|
|
| 2016 |
- c.Fatal(err) |
|
| 2017 |
- } |
|
| 2018 | 2015 |
defer ctx.Close() |
| 2019 |
- id1, err := buildImageFromContext(name, ctx, true) |
|
| 2020 |
- if err != nil {
|
|
| 2021 |
- c.Fatal(err) |
|
| 2022 |
- } |
|
| 2023 |
- id2, err := buildImageFromContext(name, ctx, false) |
|
| 2024 |
- if err != nil {
|
|
| 2025 |
- c.Fatal(err) |
|
| 2026 |
- } |
|
| 2016 |
+ buildImageSuccessfully(c, name, withExternalBuildContext(ctx)) |
|
| 2017 |
+ id1 := getIDByName(c, name) |
|
| 2018 |
+ buildImageSuccessfully(c, name, withoutCache, withExternalBuildContext(ctx)) |
|
| 2019 |
+ id2 := getIDByName(c, name) |
|
| 2027 | 2020 |
if id1 == id2 {
|
| 2028 | 2021 |
c.Fatal("The cache should have been invalided but hasn't.")
|
| 2029 | 2022 |
} |
| ... | ... |
@@ -2031,26 +1894,20 @@ func (s *DockerSuite) TestBuildAddCurrentDirWithoutCache(c *check.C) {
|
| 2031 | 2031 |
|
| 2032 | 2032 |
func (s *DockerSuite) TestBuildAddRemoteFileWithAndWithoutCache(c *check.C) {
|
| 2033 | 2033 |
name := "testbuildaddremotefilewithcache" |
| 2034 |
- server, err := fakeStorage(map[string]string{
|
|
| 2034 |
+ server := fakeStorage(c, map[string]string{
|
|
| 2035 | 2035 |
"baz": "hello", |
| 2036 | 2036 |
}) |
| 2037 |
- if err != nil {
|
|
| 2038 |
- c.Fatal(err) |
|
| 2039 |
- } |
|
| 2040 | 2037 |
defer server.Close() |
| 2041 | 2038 |
|
| 2042 | 2039 |
dockerfile := fmt.Sprintf(`FROM `+minimalBaseImage()+` |
| 2043 | 2040 |
MAINTAINER dockerio |
| 2044 | 2041 |
ADD %s/baz /usr/lib/baz/quux`, server.URL()) |
| 2045 | 2042 |
buildImageSuccessfully(c, name, withDockerfile(dockerfile)) |
| 2046 |
- id1, err := getIDByName(name) |
|
| 2047 |
- c.Assert(err, checker.IsNil) |
|
| 2043 |
+ id1 := getIDByName(c, name) |
|
| 2048 | 2044 |
buildImageSuccessfully(c, name, withDockerfile(dockerfile)) |
| 2049 |
- id2, err := getIDByName(name) |
|
| 2050 |
- c.Assert(err, checker.IsNil) |
|
| 2045 |
+ id2 := getIDByName(c, name) |
|
| 2051 | 2046 |
buildImageSuccessfully(c, name, withoutCache, withDockerfile(dockerfile)) |
| 2052 |
- id3, err := getIDByName(name) |
|
| 2053 |
- c.Assert(err, checker.IsNil) |
|
| 2047 |
+ id3 := getIDByName(c, name) |
|
| 2054 | 2048 |
|
| 2055 | 2049 |
if id1 != id2 {
|
| 2056 | 2050 |
c.Fatal("The cache should have been used but hasn't.")
|
| ... | ... |
@@ -2066,29 +1923,18 @@ func (s *DockerSuite) TestBuildAddRemoteFileMTime(c *check.C) {
|
| 2066 | 2066 |
name3 := name + "3" |
| 2067 | 2067 |
|
| 2068 | 2068 |
files := map[string]string{"baz": "hello"}
|
| 2069 |
- server, err := fakeStorage(files) |
|
| 2070 |
- if err != nil {
|
|
| 2071 |
- c.Fatal(err) |
|
| 2072 |
- } |
|
| 2069 |
+ server := fakeStorage(c, files) |
|
| 2073 | 2070 |
defer server.Close() |
| 2074 | 2071 |
|
| 2075 |
- ctx, err := fakeContext(fmt.Sprintf(`FROM `+minimalBaseImage()+` |
|
| 2072 |
+ ctx := fakeContext(c, fmt.Sprintf(`FROM `+minimalBaseImage()+` |
|
| 2076 | 2073 |
MAINTAINER dockerio |
| 2077 | 2074 |
ADD %s/baz /usr/lib/baz/quux`, server.URL()), nil) |
| 2078 |
- if err != nil {
|
|
| 2079 |
- c.Fatal(err) |
|
| 2080 |
- } |
|
| 2081 | 2075 |
defer ctx.Close() |
| 2082 | 2076 |
|
| 2083 |
- id1, err := buildImageFromContext(name, ctx, true) |
|
| 2084 |
- if err != nil {
|
|
| 2085 |
- c.Fatal(err) |
|
| 2086 |
- } |
|
| 2087 |
- |
|
| 2088 |
- id2, err := buildImageFromContext(name2, ctx, true) |
|
| 2089 |
- if err != nil {
|
|
| 2090 |
- c.Fatal(err) |
|
| 2091 |
- } |
|
| 2077 |
+ buildImageSuccessfully(c, name, withExternalBuildContext(ctx)) |
|
| 2078 |
+ id1 := getIDByName(c, name) |
|
| 2079 |
+ buildImageSuccessfully(c, name2, withExternalBuildContext(ctx)) |
|
| 2080 |
+ id2 := getIDByName(c, name2) |
|
| 2092 | 2081 |
if id1 != id2 {
|
| 2093 | 2082 |
c.Fatal("The cache should have been used but wasn't - #1")
|
| 2094 | 2083 |
} |
| ... | ... |
@@ -2099,23 +1945,15 @@ func (s *DockerSuite) TestBuildAddRemoteFileMTime(c *check.C) {
|
| 2099 | 2099 |
// allow some time for clock to pass as mtime precision is only 1s |
| 2100 | 2100 |
time.Sleep(2 * time.Second) |
| 2101 | 2101 |
|
| 2102 |
- server2, err := fakeStorage(files) |
|
| 2103 |
- if err != nil {
|
|
| 2104 |
- c.Fatal(err) |
|
| 2105 |
- } |
|
| 2102 |
+ server2 := fakeStorage(c, files) |
|
| 2106 | 2103 |
defer server2.Close() |
| 2107 | 2104 |
|
| 2108 |
- ctx2, err := fakeContext(fmt.Sprintf(`FROM `+minimalBaseImage()+` |
|
| 2105 |
+ ctx2 := fakeContext(c, fmt.Sprintf(`FROM `+minimalBaseImage()+` |
|
| 2109 | 2106 |
MAINTAINER dockerio |
| 2110 | 2107 |
ADD %s/baz /usr/lib/baz/quux`, server2.URL()), nil) |
| 2111 |
- if err != nil {
|
|
| 2112 |
- c.Fatal(err) |
|
| 2113 |
- } |
|
| 2114 | 2108 |
defer ctx2.Close() |
| 2115 |
- id3, err := buildImageFromContext(name3, ctx2, true) |
|
| 2116 |
- if err != nil {
|
|
| 2117 |
- c.Fatal(err) |
|
| 2118 |
- } |
|
| 2109 |
+ buildImageSuccessfully(c, name3, withExternalBuildContext(ctx2)) |
|
| 2110 |
+ id3 := getIDByName(c, name3) |
|
| 2119 | 2111 |
if id1 != id3 {
|
| 2120 | 2112 |
c.Fatal("The cache should have been used but wasn't")
|
| 2121 | 2113 |
} |
| ... | ... |
@@ -2124,37 +1962,25 @@ func (s *DockerSuite) TestBuildAddRemoteFileMTime(c *check.C) {
|
| 2124 | 2124 |
// FIXME(vdemeester) this really seems to test the same thing as before (combined) |
| 2125 | 2125 |
func (s *DockerSuite) TestBuildAddLocalAndRemoteFilesWithAndWithoutCache(c *check.C) {
|
| 2126 | 2126 |
name := "testbuildaddlocalandremotefilewithcache" |
| 2127 |
- server, err := fakeStorage(map[string]string{
|
|
| 2127 |
+ server := fakeStorage(c, map[string]string{
|
|
| 2128 | 2128 |
"baz": "hello", |
| 2129 | 2129 |
}) |
| 2130 |
- if err != nil {
|
|
| 2131 |
- c.Fatal(err) |
|
| 2132 |
- } |
|
| 2133 | 2130 |
defer server.Close() |
| 2134 | 2131 |
|
| 2135 |
- ctx, err := fakeContext(fmt.Sprintf(`FROM `+minimalBaseImage()+` |
|
| 2132 |
+ ctx := fakeContext(c, fmt.Sprintf(`FROM `+minimalBaseImage()+` |
|
| 2136 | 2133 |
MAINTAINER dockerio |
| 2137 | 2134 |
ADD foo /usr/lib/bla/bar |
| 2138 | 2135 |
ADD %s/baz /usr/lib/baz/quux`, server.URL()), |
| 2139 | 2136 |
map[string]string{
|
| 2140 | 2137 |
"foo": "hello world", |
| 2141 | 2138 |
}) |
| 2142 |
- if err != nil {
|
|
| 2143 |
- c.Fatal(err) |
|
| 2144 |
- } |
|
| 2145 | 2139 |
defer ctx.Close() |
| 2146 |
- id1, err := buildImageFromContext(name, ctx, true) |
|
| 2147 |
- if err != nil {
|
|
| 2148 |
- c.Fatal(err) |
|
| 2149 |
- } |
|
| 2150 |
- id2, err := buildImageFromContext(name, ctx, true) |
|
| 2151 |
- if err != nil {
|
|
| 2152 |
- c.Fatal(err) |
|
| 2153 |
- } |
|
| 2154 |
- id3, err := buildImageFromContext(name, ctx, false) |
|
| 2155 |
- if err != nil {
|
|
| 2156 |
- c.Fatal(err) |
|
| 2157 |
- } |
|
| 2140 |
+ buildImageSuccessfully(c, name, withExternalBuildContext(ctx)) |
|
| 2141 |
+ id1 := getIDByName(c, name) |
|
| 2142 |
+ buildImageSuccessfully(c, name, withExternalBuildContext(ctx)) |
|
| 2143 |
+ id2 := getIDByName(c, name) |
|
| 2144 |
+ buildImageSuccessfully(c, name, withoutCache, withExternalBuildContext(ctx)) |
|
| 2145 |
+ id3 := getIDByName(c, name) |
|
| 2158 | 2146 |
if id1 != id2 {
|
| 2159 | 2147 |
c.Fatal("The cache should have been used but hasn't.")
|
| 2160 | 2148 |
} |
| ... | ... |
@@ -2164,7 +1990,7 @@ func (s *DockerSuite) TestBuildAddLocalAndRemoteFilesWithAndWithoutCache(c *chec |
| 2164 | 2164 |
} |
| 2165 | 2165 |
|
| 2166 | 2166 |
func testContextTar(c *check.C, compression archive.Compression) {
|
| 2167 |
- ctx, err := fakeContext( |
|
| 2167 |
+ ctx := fakeContext(c, |
|
| 2168 | 2168 |
`FROM busybox |
| 2169 | 2169 |
ADD foo /foo |
| 2170 | 2170 |
CMD ["cat", "/foo"]`, |
| ... | ... |
@@ -2172,9 +1998,6 @@ CMD ["cat", "/foo"]`, |
| 2172 | 2172 |
"foo": "bar", |
| 2173 | 2173 |
}, |
| 2174 | 2174 |
) |
| 2175 |
- if err != nil {
|
|
| 2176 |
- c.Fatal(err) |
|
| 2177 |
- } |
|
| 2178 | 2175 |
defer ctx.Close() |
| 2179 | 2176 |
context, err := archive.Tar(ctx.Dir, compression) |
| 2180 | 2177 |
if err != nil {
|
| ... | ... |
@@ -2257,7 +2080,7 @@ func (s *DockerSuite) TestBuildAddFileNotFound(c *check.C) {
|
| 2257 | 2257 |
expected = "foo: The system cannot find the file specified" |
| 2258 | 2258 |
} |
| 2259 | 2259 |
|
| 2260 |
- buildImageNew(name, withBuildContext(c, |
|
| 2260 |
+ buildImage(name, withBuildContext(c, |
|
| 2261 | 2261 |
withFile("Dockerfile", `FROM `+minimalBaseImage()+`
|
| 2262 | 2262 |
ADD foo /usr/local/bar`), |
| 2263 | 2263 |
withFile("bar", "hello"))).Assert(c, icmd.Expected{
|
| ... | ... |
@@ -2289,7 +2112,7 @@ func (s *DockerSuite) TestBuildInheritance(c *check.C) {
|
| 2289 | 2289 |
|
| 2290 | 2290 |
func (s *DockerSuite) TestBuildFails(c *check.C) {
|
| 2291 | 2291 |
name := "testbuildfails" |
| 2292 |
- buildImageNew(name, withDockerfile(`FROM busybox |
|
| 2292 |
+ buildImage(name, withDockerfile(`FROM busybox |
|
| 2293 | 2293 |
RUN sh -c "exit 23"`)).Assert(c, icmd.Expected{
|
| 2294 | 2294 |
ExitCode: 23, |
| 2295 | 2295 |
Err: "returned a non-zero code: 23", |
| ... | ... |
@@ -2504,51 +2327,41 @@ func (s *DockerSuite) TestBuildDockerignoringDockerignore(c *check.C) {
|
| 2504 | 2504 |
} |
| 2505 | 2505 |
|
| 2506 | 2506 |
func (s *DockerSuite) TestBuildDockerignoreTouchDockerfile(c *check.C) {
|
| 2507 |
- var id1 string |
|
| 2508 |
- var id2 string |
|
| 2509 |
- |
|
| 2510 | 2507 |
name := "testbuilddockerignoretouchdockerfile" |
| 2511 | 2508 |
dockerfile := ` |
| 2512 | 2509 |
FROM busybox |
| 2513 | 2510 |
ADD . /tmp/` |
| 2514 |
- ctx, err := fakeContext(dockerfile, map[string]string{
|
|
| 2511 |
+ ctx := fakeContext(c, dockerfile, map[string]string{
|
|
| 2515 | 2512 |
"Dockerfile": dockerfile, |
| 2516 | 2513 |
".dockerignore": "Dockerfile\n", |
| 2517 | 2514 |
}) |
| 2518 |
- if err != nil {
|
|
| 2519 |
- c.Fatal(err) |
|
| 2520 |
- } |
|
| 2521 | 2515 |
defer ctx.Close() |
| 2522 | 2516 |
|
| 2523 |
- if id1, err = buildImageFromContext(name, ctx, true); err != nil {
|
|
| 2524 |
- c.Fatalf("Didn't build it correctly:%s", err)
|
|
| 2525 |
- } |
|
| 2517 |
+ buildImageSuccessfully(c, name, withExternalBuildContext(ctx)) |
|
| 2518 |
+ id1 := getIDByName(c, name) |
|
| 2526 | 2519 |
|
| 2527 |
- if id2, err = buildImageFromContext(name, ctx, true); err != nil {
|
|
| 2528 |
- c.Fatalf("Didn't build it correctly:%s", err)
|
|
| 2529 |
- } |
|
| 2520 |
+ buildImageSuccessfully(c, name, withExternalBuildContext(ctx)) |
|
| 2521 |
+ id2 := getIDByName(c, name) |
|
| 2530 | 2522 |
if id1 != id2 {
|
| 2531 | 2523 |
c.Fatalf("Didn't use the cache - 1")
|
| 2532 | 2524 |
} |
| 2533 | 2525 |
|
| 2534 | 2526 |
// Now make sure touching Dockerfile doesn't invalidate the cache |
| 2535 |
- if err = ctx.Add("Dockerfile", dockerfile+"\n# hi"); err != nil {
|
|
| 2527 |
+ if err := ctx.Add("Dockerfile", dockerfile+"\n# hi"); err != nil {
|
|
| 2536 | 2528 |
c.Fatalf("Didn't add Dockerfile: %s", err)
|
| 2537 | 2529 |
} |
| 2538 |
- if id2, err = buildImageFromContext(name, ctx, true); err != nil {
|
|
| 2539 |
- c.Fatalf("Didn't build it correctly:%s", err)
|
|
| 2540 |
- } |
|
| 2530 |
+ buildImageSuccessfully(c, name, withExternalBuildContext(ctx)) |
|
| 2531 |
+ id2 = getIDByName(c, name) |
|
| 2541 | 2532 |
if id1 != id2 {
|
| 2542 | 2533 |
c.Fatalf("Didn't use the cache - 2")
|
| 2543 | 2534 |
} |
| 2544 | 2535 |
|
| 2545 | 2536 |
// One more time but just 'touch' it instead of changing the content |
| 2546 |
- if err = ctx.Add("Dockerfile", dockerfile+"\n# hi"); err != nil {
|
|
| 2537 |
+ if err := ctx.Add("Dockerfile", dockerfile+"\n# hi"); err != nil {
|
|
| 2547 | 2538 |
c.Fatalf("Didn't add Dockerfile: %s", err)
|
| 2548 | 2539 |
} |
| 2549 |
- if id2, err = buildImageFromContext(name, ctx, true); err != nil {
|
|
| 2550 |
- c.Fatalf("Didn't build it correctly:%s", err)
|
|
| 2551 |
- } |
|
| 2540 |
+ buildImageSuccessfully(c, name, withExternalBuildContext(ctx)) |
|
| 2541 |
+ id2 = getIDByName(c, name) |
|
| 2552 | 2542 |
if id1 != id2 {
|
| 2553 | 2543 |
c.Fatalf("Didn't use the cache - 3")
|
| 2554 | 2544 |
} |
| ... | ... |
@@ -2590,7 +2403,7 @@ func (s *DockerSuite) TestBuildDockerignoringOnlyDotfiles(c *check.C) {
|
| 2590 | 2590 |
|
| 2591 | 2591 |
func (s *DockerSuite) TestBuildDockerignoringBadExclusion(c *check.C) {
|
| 2592 | 2592 |
name := "testbuilddockerignorebadexclusion" |
| 2593 |
- buildImageNew(name, withBuildContext(c, |
|
| 2593 |
+ buildImage(name, withBuildContext(c, |
|
| 2594 | 2594 |
withFile("Dockerfile", `
|
| 2595 | 2595 |
FROM busybox |
| 2596 | 2596 |
COPY . / |
| ... | ... |
@@ -2949,10 +2762,7 @@ RUN cat /existing-directory-trailing-slash/test/foo | grep Hi` |
| 2949 | 2949 |
}() |
| 2950 | 2950 |
defer ctx.Close() |
| 2951 | 2951 |
|
| 2952 |
- if _, err := buildImageFromContext(name, ctx, true); err != nil {
|
|
| 2953 |
- c.Fatalf("build failed to complete for TestBuildAddTar: %v", err)
|
|
| 2954 |
- } |
|
| 2955 |
- |
|
| 2952 |
+ buildImageSuccessfully(c, name, withExternalBuildContext(ctx)) |
|
| 2956 | 2953 |
} |
| 2957 | 2954 |
|
| 2958 | 2955 |
func (s *DockerSuite) TestBuildAddBrokenTar(c *check.C) {
|
| ... | ... |
@@ -3001,9 +2811,9 @@ ADD test.tar /` |
| 3001 | 3001 |
}() |
| 3002 | 3002 |
defer ctx.Close() |
| 3003 | 3003 |
|
| 3004 |
- if _, err := buildImageFromContext(name, ctx, true); err == nil {
|
|
| 3005 |
- c.Fatalf("build should have failed for TestBuildAddBrokenTar")
|
|
| 3006 |
- } |
|
| 3004 |
+ buildImage(name, withExternalBuildContext(ctx)).Assert(c, icmd.Expected{
|
|
| 3005 |
+ ExitCode: 1, |
|
| 3006 |
+ }) |
|
| 3007 | 3007 |
} |
| 3008 | 3008 |
|
| 3009 | 3009 |
func (s *DockerSuite) TestBuildAddNonTar(c *check.C) {
|
| ... | ... |
@@ -3068,10 +2878,7 @@ func (s *DockerSuite) TestBuildAddTarXz(c *check.C) {
|
| 3068 | 3068 |
|
| 3069 | 3069 |
defer ctx.Close() |
| 3070 | 3070 |
|
| 3071 |
- if _, err := buildImageFromContext(name, ctx, true); err != nil {
|
|
| 3072 |
- c.Fatalf("build failed to complete for TestBuildAddTarXz: %v", err)
|
|
| 3073 |
- } |
|
| 3074 |
- |
|
| 3071 |
+ buildImageSuccessfully(c, name, withExternalBuildContext(ctx)) |
|
| 3075 | 3072 |
} |
| 3076 | 3073 |
|
| 3077 | 3074 |
func (s *DockerSuite) TestBuildAddTarXzGz(c *check.C) {
|
| ... | ... |
@@ -3128,24 +2935,18 @@ func (s *DockerSuite) TestBuildAddTarXzGz(c *check.C) {
|
| 3128 | 3128 |
|
| 3129 | 3129 |
defer ctx.Close() |
| 3130 | 3130 |
|
| 3131 |
- if _, err := buildImageFromContext(name, ctx, true); err != nil {
|
|
| 3132 |
- c.Fatalf("build failed to complete for TestBuildAddTarXz: %v", err)
|
|
| 3133 |
- } |
|
| 3134 |
- |
|
| 3131 |
+ buildImageSuccessfully(c, name, withExternalBuildContext(ctx)) |
|
| 3135 | 3132 |
} |
| 3136 | 3133 |
|
| 3137 | 3134 |
func (s *DockerSuite) TestBuildFromGit(c *check.C) {
|
| 3138 | 3135 |
name := "testbuildfromgit" |
| 3139 |
- git, err := newFakeGit("repo", map[string]string{
|
|
| 3136 |
+ git := newFakeGit(c, "repo", map[string]string{
|
|
| 3140 | 3137 |
"Dockerfile": `FROM busybox |
| 3141 | 3138 |
ADD first /first |
| 3142 | 3139 |
RUN [ -f /first ] |
| 3143 | 3140 |
MAINTAINER docker`, |
| 3144 | 3141 |
"first": "test git data", |
| 3145 | 3142 |
}, true) |
| 3146 |
- if err != nil {
|
|
| 3147 |
- c.Fatal(err) |
|
| 3148 |
- } |
|
| 3149 | 3143 |
defer git.Close() |
| 3150 | 3144 |
|
| 3151 | 3145 |
buildImageSuccessfully(c, name, withBuildContextPath(git.RepoURL)) |
| ... | ... |
@@ -3158,16 +2959,13 @@ func (s *DockerSuite) TestBuildFromGit(c *check.C) {
|
| 3158 | 3158 |
|
| 3159 | 3159 |
func (s *DockerSuite) TestBuildFromGitWithContext(c *check.C) {
|
| 3160 | 3160 |
name := "testbuildfromgit" |
| 3161 |
- git, err := newFakeGit("repo", map[string]string{
|
|
| 3161 |
+ git := newFakeGit(c, "repo", map[string]string{
|
|
| 3162 | 3162 |
"docker/Dockerfile": `FROM busybox |
| 3163 | 3163 |
ADD first /first |
| 3164 | 3164 |
RUN [ -f /first ] |
| 3165 | 3165 |
MAINTAINER docker`, |
| 3166 | 3166 |
"docker/first": "test git data", |
| 3167 | 3167 |
}, true) |
| 3168 |
- if err != nil {
|
|
| 3169 |
- c.Fatal(err) |
|
| 3170 |
- } |
|
| 3171 | 3168 |
defer git.Close() |
| 3172 | 3169 |
|
| 3173 | 3170 |
buildImageSuccessfully(c, name, withBuildContextPath(fmt.Sprintf("%s#master:docker", git.RepoURL)))
|
| ... | ... |
@@ -3180,16 +2978,13 @@ func (s *DockerSuite) TestBuildFromGitWithContext(c *check.C) {
|
| 3180 | 3180 |
|
| 3181 | 3181 |
func (s *DockerSuite) TestBuildFromGitwithF(c *check.C) {
|
| 3182 | 3182 |
name := "testbuildfromgitwithf" |
| 3183 |
- git, err := newFakeGit("repo", map[string]string{
|
|
| 3183 |
+ git := newFakeGit(c, "repo", map[string]string{
|
|
| 3184 | 3184 |
"myApp/myDockerfile": `FROM busybox |
| 3185 | 3185 |
RUN echo hi from Dockerfile`, |
| 3186 | 3186 |
}, true) |
| 3187 |
- if err != nil {
|
|
| 3188 |
- c.Fatal(err) |
|
| 3189 |
- } |
|
| 3190 | 3187 |
defer git.Close() |
| 3191 | 3188 |
|
| 3192 |
- buildImageNew(name, withBuildFlags("-f", "myApp/myDockerfile"), withBuildContextPath(git.RepoURL)).Assert(c, icmd.Expected{
|
|
| 3189 |
+ buildImage(name, withBuildFlags("-f", "myApp/myDockerfile"), withBuildContextPath(git.RepoURL)).Assert(c, icmd.Expected{
|
|
| 3193 | 3190 |
Out: "hi from Dockerfile", |
| 3194 | 3191 |
}) |
| 3195 | 3192 |
} |
| ... | ... |
@@ -3216,11 +3011,9 @@ func (s *DockerSuite) TestBuildFromRemoteTarball(c *check.C) {
|
| 3216 | 3216 |
c.Fatalf("failed to close tar archive: %v", err)
|
| 3217 | 3217 |
} |
| 3218 | 3218 |
|
| 3219 |
- server, err := fakeBinaryStorage(map[string]*bytes.Buffer{
|
|
| 3219 |
+ server := fakeBinaryStorage(c, map[string]*bytes.Buffer{
|
|
| 3220 | 3220 |
"testT.tar": buffer, |
| 3221 | 3221 |
}) |
| 3222 |
- c.Assert(err, check.IsNil) |
|
| 3223 |
- |
|
| 3224 | 3222 |
defer server.Close() |
| 3225 | 3223 |
|
| 3226 | 3224 |
buildImageSuccessfully(c, name, withBuildContextPath(server.URL()+"/testT.tar")) |
| ... | ... |
@@ -3279,7 +3072,7 @@ func (s *DockerSuite) TestBuildOnBuildOutput(c *check.C) {
|
| 3279 | 3279 |
name := "testbuildonbuildparent" |
| 3280 | 3280 |
buildImageSuccessfully(c, name, withDockerfile("FROM busybox\nONBUILD RUN echo foo\n"))
|
| 3281 | 3281 |
|
| 3282 |
- buildImageNew(name, withDockerfile("FROM "+name+"\nMAINTAINER quux\n")).Assert(c, icmd.Expected{
|
|
| 3282 |
+ buildImage(name, withDockerfile("FROM "+name+"\nMAINTAINER quux\n")).Assert(c, icmd.Expected{
|
|
| 3283 | 3283 |
Out: "# Executing 1 build trigger", |
| 3284 | 3284 |
}) |
| 3285 | 3285 |
} |
| ... | ... |
@@ -3287,7 +3080,7 @@ func (s *DockerSuite) TestBuildOnBuildOutput(c *check.C) {
|
| 3287 | 3287 |
// FIXME(vdemeester) should be a unit test |
| 3288 | 3288 |
func (s *DockerSuite) TestBuildInvalidTag(c *check.C) {
|
| 3289 | 3289 |
name := "abcd:" + stringutils.GenerateRandomAlphaOnlyString(200) |
| 3290 |
- buildImageNew(name, withDockerfile("FROM "+minimalBaseImage()+"\nMAINTAINER quux\n")).Assert(c, icmd.Expected{
|
|
| 3290 |
+ buildImage(name, withDockerfile("FROM "+minimalBaseImage()+"\nMAINTAINER quux\n")).Assert(c, icmd.Expected{
|
|
| 3291 | 3291 |
ExitCode: 125, |
| 3292 | 3292 |
Err: "Error parsing reference", |
| 3293 | 3293 |
}) |
| ... | ... |
@@ -3315,10 +3108,9 @@ func (s *DockerSuite) TestBuildCmdSpaces(c *check.C) {
|
| 3315 | 3315 |
name := "testbuildcmdspaces" |
| 3316 | 3316 |
|
| 3317 | 3317 |
buildImageSuccessfully(c, name, withDockerfile("FROM busybox\nCMD [\"echo hi\"]\n"))
|
| 3318 |
- id1, err := getIDByName(name) |
|
| 3319 |
- c.Assert(err, checker.IsNil) |
|
| 3318 |
+ id1 := getIDByName(c, name) |
|
| 3320 | 3319 |
buildImageSuccessfully(c, name, withDockerfile("FROM busybox\nCMD [\"echo\", \"hi\"]\n"))
|
| 3321 |
- id2, err := getIDByName(name) |
|
| 3320 |
+ id2 := getIDByName(c, name) |
|
| 3322 | 3321 |
|
| 3323 | 3322 |
if id1 == id2 {
|
| 3324 | 3323 |
c.Fatal("Should not have resulted in the same CMD")
|
| ... | ... |
@@ -3326,10 +3118,9 @@ func (s *DockerSuite) TestBuildCmdSpaces(c *check.C) {
|
| 3326 | 3326 |
|
| 3327 | 3327 |
// Now do the same with ENTRYPOINT |
| 3328 | 3328 |
buildImageSuccessfully(c, name, withDockerfile("FROM busybox\nENTRYPOINT [\"echo hi\"]\n"))
|
| 3329 |
- id1, err = getIDByName(name) |
|
| 3330 |
- c.Assert(err, checker.IsNil) |
|
| 3329 |
+ id1 = getIDByName(c, name) |
|
| 3331 | 3330 |
buildImageSuccessfully(c, name, withDockerfile("FROM busybox\nENTRYPOINT [\"echo\", \"hi\"]\n"))
|
| 3332 |
- id2, err = getIDByName(name) |
|
| 3331 |
+ id2 = getIDByName(c, name) |
|
| 3333 | 3332 |
|
| 3334 | 3333 |
if id1 == id2 {
|
| 3335 | 3334 |
c.Fatal("Should not have resulted in the same ENTRYPOINT")
|
| ... | ... |
@@ -3451,7 +3242,7 @@ func (s *DockerSuite) TestBuildVerboseOut(c *check.C) {
|
| 3451 | 3451 |
expected = "\n123\r\n" |
| 3452 | 3452 |
} |
| 3453 | 3453 |
|
| 3454 |
- buildImageNew(name, withDockerfile(`FROM busybox |
|
| 3454 |
+ buildImage(name, withDockerfile(`FROM busybox |
|
| 3455 | 3455 |
RUN echo 123`)).Assert(c, icmd.Expected{
|
| 3456 | 3456 |
Out: expected, |
| 3457 | 3457 |
}) |
| ... | ... |
@@ -3489,44 +3280,37 @@ func (s *DockerSuite) TestBuildLabelsCache(c *check.C) {
|
| 3489 | 3489 |
|
| 3490 | 3490 |
buildImageSuccessfully(c, name, withDockerfile(`FROM busybox |
| 3491 | 3491 |
LABEL Vendor=Acme`)) |
| 3492 |
- id1, err := getIDByName(name) |
|
| 3493 |
- c.Assert(err, checker.IsNil) |
|
| 3492 |
+ id1 := getIDByName(c, name) |
|
| 3494 | 3493 |
buildImageSuccessfully(c, name, withDockerfile(`FROM busybox |
| 3495 | 3494 |
LABEL Vendor=Acme`)) |
| 3496 |
- id2, err := getIDByName(name) |
|
| 3497 |
- c.Assert(err, checker.IsNil) |
|
| 3495 |
+ id2 := getIDByName(c, name) |
|
| 3498 | 3496 |
if id1 != id2 {
|
| 3499 |
- c.Fatalf("Build 2 should have worked & used cache(%s,%s): %v", id1, id2, err)
|
|
| 3497 |
+ c.Fatalf("Build 2 should have worked & used cache(%s,%s)", id1, id2)
|
|
| 3500 | 3498 |
} |
| 3501 | 3499 |
|
| 3502 | 3500 |
buildImageSuccessfully(c, name, withDockerfile(`FROM busybox |
| 3503 | 3501 |
LABEL Vendor=Acme1`)) |
| 3504 |
- id2, err = getIDByName(name) |
|
| 3505 |
- c.Assert(err, checker.IsNil) |
|
| 3502 |
+ id2 = getIDByName(c, name) |
|
| 3506 | 3503 |
if id1 == id2 {
|
| 3507 |
- c.Fatalf("Build 3 should have worked & NOT used cache(%s,%s): %v", id1, id2, err)
|
|
| 3504 |
+ c.Fatalf("Build 3 should have worked & NOT used cache(%s,%s)", id1, id2)
|
|
| 3508 | 3505 |
} |
| 3509 | 3506 |
|
| 3510 | 3507 |
buildImageSuccessfully(c, name, withDockerfile(`FROM busybox |
| 3511 | 3508 |
LABEL Vendor Acme`)) |
| 3512 |
- id2, err = getIDByName(name) |
|
| 3513 |
- c.Assert(err, checker.IsNil) |
|
| 3509 |
+ id2 = getIDByName(c, name) |
|
| 3514 | 3510 |
if id1 != id2 {
|
| 3515 |
- c.Fatalf("Build 4 should have worked & used cache(%s,%s): %v", id1, id2, err)
|
|
| 3511 |
+ c.Fatalf("Build 4 should have worked & used cache(%s,%s)", id1, id2)
|
|
| 3516 | 3512 |
} |
| 3517 | 3513 |
|
| 3518 | 3514 |
// Now make sure the cache isn't used by mistake |
| 3519 | 3515 |
buildImageSuccessfully(c, name, withoutCache, withDockerfile(`FROM busybox |
| 3520 | 3516 |
LABEL f1=b1 f2=b2`)) |
| 3521 |
- _, err = getIDByName(name) |
|
| 3522 |
- c.Assert(err, checker.IsNil) |
|
| 3523 | 3517 |
|
| 3524 | 3518 |
buildImageSuccessfully(c, name, withDockerfile(`FROM busybox |
| 3525 | 3519 |
LABEL f1=b1 f2=b2`)) |
| 3526 |
- id2, err = getIDByName(name) |
|
| 3527 |
- c.Assert(err, checker.IsNil) |
|
| 3520 |
+ id2 = getIDByName(c, name) |
|
| 3528 | 3521 |
if id1 == id2 {
|
| 3529 |
- c.Fatalf("Build 6 should have worked & NOT used the cache(%s,%s): %q", id1, id2, err)
|
|
| 3522 |
+ c.Fatalf("Build 6 should have worked & NOT used the cache(%s,%s)", id1, id2)
|
|
| 3530 | 3523 |
} |
| 3531 | 3524 |
|
| 3532 | 3525 |
} |
| ... | ... |
@@ -3544,13 +3328,13 @@ func (s *DockerSuite) TestBuildNotVerboseSuccess(c *check.C) {
|
| 3544 | 3544 |
{
|
| 3545 | 3545 |
Name: "quiet_build_stdin_success", |
| 3546 | 3546 |
BuildFunc: func(name string) *icmd.Result {
|
| 3547 |
- return buildImageNew(name, buildFlags, withDockerfile("FROM busybox"))
|
|
| 3547 |
+ return buildImage(name, buildFlags, withDockerfile("FROM busybox"))
|
|
| 3548 | 3548 |
}, |
| 3549 | 3549 |
}, |
| 3550 | 3550 |
{
|
| 3551 | 3551 |
Name: "quiet_build_ctx_success", |
| 3552 | 3552 |
BuildFunc: func(name string) *icmd.Result {
|
| 3553 |
- return buildImageNew(name, buildFlags, withBuildContext(c, |
|
| 3553 |
+ return buildImage(name, buildFlags, withBuildContext(c, |
|
| 3554 | 3554 |
withFile("Dockerfile", "FROM busybox"),
|
| 3555 | 3555 |
withFile("quiet_build_success_fctx", "test"),
|
| 3556 | 3556 |
)) |
| ... | ... |
@@ -3559,11 +3343,10 @@ func (s *DockerSuite) TestBuildNotVerboseSuccess(c *check.C) {
|
| 3559 | 3559 |
{
|
| 3560 | 3560 |
Name: "quiet_build_git_success", |
| 3561 | 3561 |
BuildFunc: func(name string) *icmd.Result {
|
| 3562 |
- git, err := newFakeGit("repo", map[string]string{
|
|
| 3562 |
+ git := newFakeGit(c, "repo", map[string]string{
|
|
| 3563 | 3563 |
"Dockerfile": "FROM busybox", |
| 3564 | 3564 |
}, true) |
| 3565 |
- c.Assert(err, checker.IsNil) |
|
| 3566 |
- return buildImageNew(name, buildFlags, withBuildContextPath(git.RepoURL)) |
|
| 3565 |
+ return buildImage(name, buildFlags, withBuildContextPath(git.RepoURL)) |
|
| 3567 | 3566 |
}, |
| 3568 | 3567 |
}, |
| 3569 | 3568 |
} |
| ... | ... |
@@ -3589,11 +3372,11 @@ func (s *DockerSuite) TestBuildNotVerboseFailureWithNonExistImage(c *check.C) {
|
| 3589 | 3589 |
testRequires(c, Network) |
| 3590 | 3590 |
testName := "quiet_build_not_exists_image" |
| 3591 | 3591 |
dockerfile := "FROM busybox11" |
| 3592 |
- quietResult := buildImageNew(testName, withBuildFlags("-q"), withDockerfile(dockerfile))
|
|
| 3592 |
+ quietResult := buildImage(testName, withBuildFlags("-q"), withDockerfile(dockerfile))
|
|
| 3593 | 3593 |
quietResult.Assert(c, icmd.Expected{
|
| 3594 | 3594 |
ExitCode: 1, |
| 3595 | 3595 |
}) |
| 3596 |
- result := buildImageNew(testName, withDockerfile(dockerfile)) |
|
| 3596 |
+ result := buildImage(testName, withDockerfile(dockerfile)) |
|
| 3597 | 3597 |
result.Assert(c, icmd.Expected{
|
| 3598 | 3598 |
ExitCode: 1, |
| 3599 | 3599 |
}) |
| ... | ... |
@@ -3615,11 +3398,11 @@ func (s *DockerSuite) TestBuildNotVerboseFailure(c *check.C) {
|
| 3615 | 3615 |
} |
| 3616 | 3616 |
|
| 3617 | 3617 |
for _, tc := range testCases {
|
| 3618 |
- quietResult := buildImageNew(tc.testName, withBuildFlags("-q"), withDockerfile(tc.dockerfile))
|
|
| 3618 |
+ quietResult := buildImage(tc.testName, withBuildFlags("-q"), withDockerfile(tc.dockerfile))
|
|
| 3619 | 3619 |
quietResult.Assert(c, icmd.Expected{
|
| 3620 | 3620 |
ExitCode: 1, |
| 3621 | 3621 |
}) |
| 3622 |
- result := buildImageNew(tc.testName, withDockerfile(tc.dockerfile)) |
|
| 3622 |
+ result := buildImage(tc.testName, withDockerfile(tc.dockerfile)) |
|
| 3623 | 3623 |
result.Assert(c, icmd.Expected{
|
| 3624 | 3624 |
ExitCode: 1, |
| 3625 | 3625 |
}) |
| ... | ... |
@@ -3635,11 +3418,11 @@ func (s *DockerSuite) TestBuildNotVerboseFailureRemote(c *check.C) {
|
| 3635 | 3635 |
// TODO(vdemeester) with cobra, stdout has a carriage return too much so this test should not check stdout |
| 3636 | 3636 |
URL := "http://something.invalid" |
| 3637 | 3637 |
name := "quiet_build_wrong_remote" |
| 3638 |
- quietResult := buildImageNew(name, withBuildFlags("-q"), withBuildContextPath(URL))
|
|
| 3638 |
+ quietResult := buildImage(name, withBuildFlags("-q"), withBuildContextPath(URL))
|
|
| 3639 | 3639 |
quietResult.Assert(c, icmd.Expected{
|
| 3640 | 3640 |
ExitCode: 1, |
| 3641 | 3641 |
}) |
| 3642 |
- result := buildImageNew(name, withBuildContextPath(URL)) |
|
| 3642 |
+ result := buildImage(name, withBuildContextPath(URL)) |
|
| 3643 | 3643 |
result.Assert(c, icmd.Expected{
|
| 3644 | 3644 |
ExitCode: 1, |
| 3645 | 3645 |
}) |
| ... | ... |
@@ -3652,7 +3435,7 @@ func (s *DockerSuite) TestBuildStderr(c *check.C) {
|
| 3652 | 3652 |
// This test just makes sure that no non-error output goes |
| 3653 | 3653 |
// to stderr |
| 3654 | 3654 |
name := "testbuildstderr" |
| 3655 |
- result := buildImageNew(name, withDockerfile("FROM busybox\nRUN echo one"))
|
|
| 3655 |
+ result := buildImage(name, withDockerfile("FROM busybox\nRUN echo one"))
|
|
| 3656 | 3656 |
result.Assert(c, icmd.Success) |
| 3657 | 3657 |
|
| 3658 | 3658 |
// Windows to non-Windows should have a security warning |
| ... | ... |
@@ -3671,7 +3454,7 @@ func (s *DockerSuite) TestBuildChownSingleFile(c *check.C) {
|
| 3671 | 3671 |
|
| 3672 | 3672 |
name := "testbuildchownsinglefile" |
| 3673 | 3673 |
|
| 3674 |
- ctx, err := fakeContext(` |
|
| 3674 |
+ ctx := fakeContext(c, ` |
|
| 3675 | 3675 |
FROM busybox |
| 3676 | 3676 |
COPY test / |
| 3677 | 3677 |
RUN ls -l /test |
| ... | ... |
@@ -3679,19 +3462,13 @@ RUN [ $(ls -l /test | awk '{print $3":"$4}') = 'root:root' ]
|
| 3679 | 3679 |
`, map[string]string{
|
| 3680 | 3680 |
"test": "test", |
| 3681 | 3681 |
}) |
| 3682 |
- if err != nil {
|
|
| 3683 |
- c.Fatal(err) |
|
| 3684 |
- } |
|
| 3685 | 3682 |
defer ctx.Close() |
| 3686 | 3683 |
|
| 3687 | 3684 |
if err := os.Chown(filepath.Join(ctx.Dir, "test"), 4242, 4242); err != nil {
|
| 3688 | 3685 |
c.Fatal(err) |
| 3689 | 3686 |
} |
| 3690 | 3687 |
|
| 3691 |
- if _, err := buildImageFromContext(name, ctx, true); err != nil {
|
|
| 3692 |
- c.Fatal(err) |
|
| 3693 |
- } |
|
| 3694 |
- |
|
| 3688 |
+ buildImageSuccessfully(c, name, withExternalBuildContext(ctx)) |
|
| 3695 | 3689 |
} |
| 3696 | 3690 |
|
| 3697 | 3691 |
func (s *DockerSuite) TestBuildSymlinkBreakout(c *check.C) {
|
| ... | ... |
@@ -3735,9 +3512,8 @@ func (s *DockerSuite) TestBuildSymlinkBreakout(c *check.C) {
|
| 3735 | 3735 |
}) |
| 3736 | 3736 |
w.Close() |
| 3737 | 3737 |
f.Close() |
| 3738 |
- if _, err := buildImageFromContext(name, fakeContextFromDir(ctx), false); err != nil {
|
|
| 3739 |
- c.Fatal(err) |
|
| 3740 |
- } |
|
| 3738 |
+ |
|
| 3739 |
+ buildImageSuccessfully(c, name, withoutCache, withExternalBuildContext(fakeContextFromDir(ctx))) |
|
| 3741 | 3740 |
if _, err := os.Lstat(filepath.Join(tmpdir, "inject")); err == nil {
|
| 3742 | 3741 |
c.Fatal("symlink breakout - inject")
|
| 3743 | 3742 |
} else if !os.IsNotExist(err) {
|
| ... | ... |
@@ -3797,7 +3573,7 @@ CMD cat /foo/file`), |
| 3797 | 3797 |
|
| 3798 | 3798 |
//Â FIXME(vdemeester) part of this should be unit test, other part should be clearer |
| 3799 | 3799 |
func (s *DockerSuite) TestBuildRenamedDockerfile(c *check.C) {
|
| 3800 |
- ctx, err := fakeContext(`FROM busybox |
|
| 3800 |
+ ctx := fakeContext(c, `FROM busybox |
|
| 3801 | 3801 |
RUN echo from Dockerfile`, |
| 3802 | 3802 |
map[string]string{
|
| 3803 | 3803 |
"Dockerfile": "FROM busybox\nRUN echo from Dockerfile", |
| ... | ... |
@@ -3806,9 +3582,6 @@ func (s *DockerSuite) TestBuildRenamedDockerfile(c *check.C) {
|
| 3806 | 3806 |
"dFile": "FROM busybox\nRUN echo from dFile", |
| 3807 | 3807 |
"files/dFile2": "FROM busybox\nRUN echo from files/dFile2", |
| 3808 | 3808 |
}) |
| 3809 |
- if err != nil {
|
|
| 3810 |
- c.Fatal(err) |
|
| 3811 |
- } |
|
| 3812 | 3809 |
defer ctx.Close() |
| 3813 | 3810 |
|
| 3814 | 3811 |
out, _, err := dockerCmdInDir(c, ctx.Dir, "build", "-t", "test1", ".") |
| ... | ... |
@@ -3904,7 +3677,7 @@ func (s *DockerSuite) TestBuildFromMixedcaseDockerfile(c *check.C) {
|
| 3904 | 3904 |
testRequires(c, DaemonIsLinux) |
| 3905 | 3905 |
|
| 3906 | 3906 |
// If Dockerfile is not present, use dockerfile |
| 3907 |
- buildImageNew("test1", withBuildContext(c,
|
|
| 3907 |
+ buildImage("test1", withBuildContext(c,
|
|
| 3908 | 3908 |
withFile("dockerfile", `FROM busybox
|
| 3909 | 3909 |
RUN echo from dockerfile`), |
| 3910 | 3910 |
)).Assert(c, icmd.Expected{
|
| ... | ... |
@@ -3912,7 +3685,7 @@ func (s *DockerSuite) TestBuildFromMixedcaseDockerfile(c *check.C) {
|
| 3912 | 3912 |
}) |
| 3913 | 3913 |
|
| 3914 | 3914 |
// Prefer Dockerfile in place of dockerfile |
| 3915 |
- buildImageNew("test1", withBuildContext(c,
|
|
| 3915 |
+ buildImage("test1", withBuildContext(c,
|
|
| 3916 | 3916 |
withFile("dockerfile", `FROM busybox
|
| 3917 | 3917 |
RUN echo from dockerfile`), |
| 3918 | 3918 |
withFile("Dockerfile", `FROM busybox
|
| ... | ... |
@@ -3923,26 +3696,20 @@ func (s *DockerSuite) TestBuildFromMixedcaseDockerfile(c *check.C) {
|
| 3923 | 3923 |
} |
| 3924 | 3924 |
|
| 3925 | 3925 |
func (s *DockerSuite) TestBuildFromURLWithF(c *check.C) {
|
| 3926 |
- server, err := fakeStorage(map[string]string{"baz": `FROM busybox
|
|
| 3926 |
+ server := fakeStorage(c, map[string]string{"baz": `FROM busybox
|
|
| 3927 | 3927 |
RUN echo from baz |
| 3928 | 3928 |
COPY * /tmp/ |
| 3929 | 3929 |
RUN find /tmp/`}) |
| 3930 |
- if err != nil {
|
|
| 3931 |
- c.Fatal(err) |
|
| 3932 |
- } |
|
| 3933 | 3930 |
defer server.Close() |
| 3934 | 3931 |
|
| 3935 |
- ctx, err := fakeContext(`FROM busybox |
|
| 3932 |
+ ctx := fakeContext(c, `FROM busybox |
|
| 3936 | 3933 |
RUN echo from Dockerfile`, |
| 3937 | 3934 |
map[string]string{})
|
| 3938 |
- if err != nil {
|
|
| 3939 |
- c.Fatal(err) |
|
| 3940 |
- } |
|
| 3941 | 3935 |
defer ctx.Close() |
| 3942 | 3936 |
|
| 3943 | 3937 |
// Make sure that -f is ignored and that we don't use the Dockerfile |
| 3944 | 3938 |
// that's in the current dir |
| 3945 |
- result := buildImageNew("test1", withBuildFlags("-f", "baz", server.URL()+"/baz"), func(cmd *icmd.Cmd) func() {
|
|
| 3939 |
+ result := buildImage("test1", withBuildFlags("-f", "baz", server.URL()+"/baz"), func(cmd *icmd.Cmd) func() {
|
|
| 3946 | 3940 |
cmd.Dir = ctx.Dir |
| 3947 | 3941 |
return nil |
| 3948 | 3942 |
}) |
| ... | ... |
@@ -3958,17 +3725,14 @@ RUN echo from Dockerfile`, |
| 3958 | 3958 |
|
| 3959 | 3959 |
func (s *DockerSuite) TestBuildFromStdinWithF(c *check.C) {
|
| 3960 | 3960 |
testRequires(c, DaemonIsLinux) // TODO Windows: This test is flaky; no idea why |
| 3961 |
- ctx, err := fakeContext(`FROM busybox |
|
| 3961 |
+ ctx := fakeContext(c, `FROM busybox |
|
| 3962 | 3962 |
RUN echo "from Dockerfile"`, |
| 3963 | 3963 |
map[string]string{})
|
| 3964 |
- if err != nil {
|
|
| 3965 |
- c.Fatal(err) |
|
| 3966 |
- } |
|
| 3967 | 3964 |
defer ctx.Close() |
| 3968 | 3965 |
|
| 3969 | 3966 |
// Make sure that -f is ignored and that we don't use the Dockerfile |
| 3970 | 3967 |
// that's in the current dir |
| 3971 |
- result := buildImageNew("test1", withBuildFlags("-f", "baz", "-"), func(cmd *icmd.Cmd) func() {
|
|
| 3968 |
+ result := buildImage("test1", withBuildFlags("-f", "baz", "-"), func(cmd *icmd.Cmd) func() {
|
|
| 3972 | 3969 |
cmd.Dir = ctx.Dir |
| 3973 | 3970 |
cmd.Stdin = strings.NewReader(`FROM busybox |
| 3974 | 3971 |
RUN echo "from baz" |
| ... | ... |
@@ -4062,69 +3826,65 @@ func (s *DockerSuite) TestBuildDockerfileOutsideContext(c *check.C) {
|
| 4062 | 4062 |
func (s *DockerSuite) TestBuildSpaces(c *check.C) {
|
| 4063 | 4063 |
// Test to make sure that leading/trailing spaces on a command |
| 4064 | 4064 |
// doesn't change the error msg we get |
| 4065 |
- var ( |
|
| 4066 |
- err1 error |
|
| 4067 |
- err2 error |
|
| 4068 |
- ) |
|
| 4069 |
- |
|
| 4070 | 4065 |
name := "testspaces" |
| 4071 |
- ctx, err := fakeContext("FROM busybox\nCOPY\n",
|
|
| 4066 |
+ ctx := fakeContext(c, "FROM busybox\nCOPY\n", |
|
| 4072 | 4067 |
map[string]string{
|
| 4073 | 4068 |
"Dockerfile": "FROM busybox\nCOPY\n", |
| 4074 | 4069 |
}) |
| 4075 |
- if err != nil {
|
|
| 4076 |
- c.Fatal(err) |
|
| 4077 |
- } |
|
| 4078 | 4070 |
defer ctx.Close() |
| 4079 | 4071 |
|
| 4080 |
- if _, err1 = buildImageFromContext(name, ctx, false); err1 == nil {
|
|
| 4081 |
- c.Fatal("Build 1 was supposed to fail, but didn't")
|
|
| 4082 |
- } |
|
| 4072 |
+ result1 := buildImage(name, withExternalBuildContext(ctx)) |
|
| 4073 |
+ result1.Assert(c, icmd.Expected{
|
|
| 4074 |
+ ExitCode: 1, |
|
| 4075 |
+ }) |
|
| 4083 | 4076 |
|
| 4084 | 4077 |
ctx.Add("Dockerfile", "FROM busybox\nCOPY ")
|
| 4085 |
- if _, err2 = buildImageFromContext(name, ctx, false); err2 == nil {
|
|
| 4086 |
- c.Fatal("Build 2 was supposed to fail, but didn't")
|
|
| 4087 |
- } |
|
| 4078 |
+ result2 := buildImage(name, withExternalBuildContext(ctx)) |
|
| 4079 |
+ result2.Assert(c, icmd.Expected{
|
|
| 4080 |
+ ExitCode: 1, |
|
| 4081 |
+ }) |
|
| 4088 | 4082 |
|
| 4089 | 4083 |
removeLogTimestamps := func(s string) string {
|
| 4090 | 4084 |
return regexp.MustCompile(`time="(.*?)"`).ReplaceAllString(s, `time=[TIMESTAMP]`) |
| 4091 | 4085 |
} |
| 4092 | 4086 |
|
| 4093 | 4087 |
// Skip over the times |
| 4094 |
- e1 := removeLogTimestamps(err1.Error()) |
|
| 4095 |
- e2 := removeLogTimestamps(err2.Error()) |
|
| 4088 |
+ e1 := removeLogTimestamps(result1.Error.Error()) |
|
| 4089 |
+ e2 := removeLogTimestamps(result2.Error.Error()) |
|
| 4096 | 4090 |
|
| 4097 | 4091 |
// Ignore whitespace since that's what were verifying doesn't change stuff |
| 4098 | 4092 |
if strings.Replace(e1, " ", "", -1) != strings.Replace(e2, " ", "", -1) {
|
| 4099 |
- c.Fatalf("Build 2's error wasn't the same as build 1's\n1:%s\n2:%s", err1, err2)
|
|
| 4093 |
+ c.Fatalf("Build 2's error wasn't the same as build 1's\n1:%s\n2:%s", result1.Error, result2.Error)
|
|
| 4100 | 4094 |
} |
| 4101 | 4095 |
|
| 4102 | 4096 |
ctx.Add("Dockerfile", "FROM busybox\n COPY")
|
| 4103 |
- if _, err2 = buildImageFromContext(name, ctx, false); err2 == nil {
|
|
| 4104 |
- c.Fatal("Build 3 was supposed to fail, but didn't")
|
|
| 4105 |
- } |
|
| 4097 |
+ result2 = buildImage(name, withoutCache, withExternalBuildContext(ctx)) |
|
| 4098 |
+ result2.Assert(c, icmd.Expected{
|
|
| 4099 |
+ ExitCode: 1, |
|
| 4100 |
+ }) |
|
| 4106 | 4101 |
|
| 4107 | 4102 |
// Skip over the times |
| 4108 |
- e1 = removeLogTimestamps(err1.Error()) |
|
| 4109 |
- e2 = removeLogTimestamps(err2.Error()) |
|
| 4103 |
+ e1 = removeLogTimestamps(result1.Error.Error()) |
|
| 4104 |
+ e2 = removeLogTimestamps(result2.Error.Error()) |
|
| 4110 | 4105 |
|
| 4111 | 4106 |
// Ignore whitespace since that's what were verifying doesn't change stuff |
| 4112 | 4107 |
if strings.Replace(e1, " ", "", -1) != strings.Replace(e2, " ", "", -1) {
|
| 4113 |
- c.Fatalf("Build 3's error wasn't the same as build 1's\n1:%s\n3:%s", err1, err2)
|
|
| 4108 |
+ c.Fatalf("Build 3's error wasn't the same as build 1's\n1:%s\n3:%s", result1.Error, result2.Error)
|
|
| 4114 | 4109 |
} |
| 4115 | 4110 |
|
| 4116 | 4111 |
ctx.Add("Dockerfile", "FROM busybox\n COPY ")
|
| 4117 |
- if _, err2 = buildImageFromContext(name, ctx, false); err2 == nil {
|
|
| 4118 |
- c.Fatal("Build 4 was supposed to fail, but didn't")
|
|
| 4119 |
- } |
|
| 4112 |
+ result2 = buildImage(name, withoutCache, withExternalBuildContext(ctx)) |
|
| 4113 |
+ result2.Assert(c, icmd.Expected{
|
|
| 4114 |
+ ExitCode: 1, |
|
| 4115 |
+ }) |
|
| 4120 | 4116 |
|
| 4121 | 4117 |
// Skip over the times |
| 4122 |
- e1 = removeLogTimestamps(err1.Error()) |
|
| 4123 |
- e2 = removeLogTimestamps(err2.Error()) |
|
| 4118 |
+ e1 = removeLogTimestamps(result1.Error.Error()) |
|
| 4119 |
+ e2 = removeLogTimestamps(result2.Error.Error()) |
|
| 4124 | 4120 |
|
| 4125 | 4121 |
// Ignore whitespace since that's what were verifying doesn't change stuff |
| 4126 | 4122 |
if strings.Replace(e1, " ", "", -1) != strings.Replace(e2, " ", "", -1) {
|
| 4127 |
- c.Fatalf("Build 4's error wasn't the same as build 1's\n1:%s\n4:%s", err1, err2)
|
|
| 4123 |
+ c.Fatalf("Build 4's error wasn't the same as build 1's\n1:%s\n4:%s", result1.Error, result2.Error)
|
|
| 4128 | 4124 |
} |
| 4129 | 4125 |
|
| 4130 | 4126 |
} |
| ... | ... |
@@ -4143,7 +3903,7 @@ RUN echo " \ |
| 4143 | 4143 |
expected = "\" foo \"" |
| 4144 | 4144 |
} |
| 4145 | 4145 |
|
| 4146 |
- buildImageNew(name, withDockerfile(dockerfile)).Assert(c, icmd.Expected{
|
|
| 4146 |
+ buildImage(name, withDockerfile(dockerfile)).Assert(c, icmd.Expected{
|
|
| 4147 | 4147 |
Out: expected, |
| 4148 | 4148 |
}) |
| 4149 | 4149 |
} |
| ... | ... |
@@ -4151,7 +3911,7 @@ RUN echo " \ |
| 4151 | 4151 |
// #4393 |
| 4152 | 4152 |
func (s *DockerSuite) TestBuildVolumeFileExistsinContainer(c *check.C) {
|
| 4153 | 4153 |
testRequires(c, DaemonIsLinux) // TODO Windows: This should error out |
| 4154 |
- buildImageNew("docker-test-errcreatevolumewithfile", withDockerfile(`
|
|
| 4154 |
+ buildImage("docker-test-errcreatevolumewithfile", withDockerfile(`
|
|
| 4155 | 4155 |
FROM busybox |
| 4156 | 4156 |
RUN touch /foo |
| 4157 | 4157 |
VOLUME /foo |
| ... | ... |
@@ -4199,7 +3959,7 @@ func (s *DockerSuite) TestBuildMissingArgs(c *check.C) {
|
| 4199 | 4199 |
dockerfile = "FROM busybox\n" + cmd |
| 4200 | 4200 |
} |
| 4201 | 4201 |
|
| 4202 |
- buildImageNew("args", withDockerfile(dockerfile)).Assert(c, icmd.Expected{
|
|
| 4202 |
+ buildImage("args", withDockerfile(dockerfile)).Assert(c, icmd.Expected{
|
|
| 4203 | 4203 |
ExitCode: 1, |
| 4204 | 4204 |
Err: cmd + " requires", |
| 4205 | 4205 |
}) |
| ... | ... |
@@ -4209,7 +3969,7 @@ func (s *DockerSuite) TestBuildMissingArgs(c *check.C) {
|
| 4209 | 4209 |
|
| 4210 | 4210 |
func (s *DockerSuite) TestBuildEmptyScratch(c *check.C) {
|
| 4211 | 4211 |
testRequires(c, DaemonIsLinux) |
| 4212 |
- buildImageNew("sc", withDockerfile("FROM scratch")).Assert(c, icmd.Expected{
|
|
| 4212 |
+ buildImage("sc", withDockerfile("FROM scratch")).Assert(c, icmd.Expected{
|
|
| 4213 | 4213 |
ExitCode: 1, |
| 4214 | 4214 |
Err: "No image was generated", |
| 4215 | 4215 |
}) |
| ... | ... |
@@ -4226,7 +3986,7 @@ func (s *DockerSuite) TestBuildRUNoneJSON(c *check.C) {
|
| 4226 | 4226 |
testRequires(c, DaemonIsLinux) // No hello-world Windows image |
| 4227 | 4227 |
name := "testbuildrunonejson" |
| 4228 | 4228 |
|
| 4229 |
- buildImageNew(name, withDockerfile(`FROM hello-world:frozen |
|
| 4229 |
+ buildImage(name, withDockerfile(`FROM hello-world:frozen |
|
| 4230 | 4230 |
RUN [ "/hello" ]`)).Assert(c, icmd.Expected{
|
| 4231 | 4231 |
Out: "Hello from Docker", |
| 4232 | 4232 |
}) |
| ... | ... |
@@ -4235,7 +3995,7 @@ RUN [ "/hello" ]`)).Assert(c, icmd.Expected{
|
| 4235 | 4235 |
func (s *DockerSuite) TestBuildEmptyStringVolume(c *check.C) {
|
| 4236 | 4236 |
name := "testbuildemptystringvolume" |
| 4237 | 4237 |
|
| 4238 |
- buildImageNew(name, withDockerfile(` |
|
| 4238 |
+ buildImage(name, withDockerfile(` |
|
| 4239 | 4239 |
FROM busybox |
| 4240 | 4240 |
ENV foo="" |
| 4241 | 4241 |
VOLUME $foo |
| ... | ... |
@@ -4257,7 +4017,7 @@ func (s *DockerSuite) TestBuildContainerWithCgroupParent(c *check.C) {
|
| 4257 | 4257 |
if !found {
|
| 4258 | 4258 |
c.Fatalf("unable to find self memory cgroup path. CgroupsPath: %v", selfCgroupPaths)
|
| 4259 | 4259 |
} |
| 4260 |
- result := buildImageNew("buildcgroupparent",
|
|
| 4260 |
+ result := buildImage("buildcgroupparent",
|
|
| 4261 | 4261 |
withBuildFlags("--cgroup-parent", cgroupParent),
|
| 4262 | 4262 |
withDockerfile(` |
| 4263 | 4263 |
FROM busybox |
| ... | ... |
@@ -4277,7 +4037,7 @@ func (s *DockerSuite) TestBuildNoDupOutput(c *check.C) {
|
| 4277 | 4277 |
// property - there was a bug that caused it to be duplicated on the |
| 4278 | 4278 |
// Step X line |
| 4279 | 4279 |
name := "testbuildnodupoutput" |
| 4280 |
- result := buildImageNew(name, withDockerfile(` |
|
| 4280 |
+ result := buildImage(name, withDockerfile(` |
|
| 4281 | 4281 |
FROM busybox |
| 4282 | 4282 |
RUN env`)) |
| 4283 | 4283 |
result.Assert(c, icmd.Success) |
| ... | ... |
@@ -4292,7 +4052,7 @@ func (s *DockerSuite) TestBuildNoDupOutput(c *check.C) {
|
| 4292 | 4292 |
func (s *DockerSuite) TestBuildStartsFromOne(c *check.C) {
|
| 4293 | 4293 |
// Explicit check to ensure that build starts from step 1 rather than 0 |
| 4294 | 4294 |
name := "testbuildstartsfromone" |
| 4295 |
- result := buildImageNew(name, withDockerfile(`FROM busybox`)) |
|
| 4295 |
+ result := buildImage(name, withDockerfile(`FROM busybox`)) |
|
| 4296 | 4296 |
result.Assert(c, icmd.Success) |
| 4297 | 4297 |
exp := "\nStep 1/1 : FROM busybox\n" |
| 4298 | 4298 |
if !strings.Contains(result.Combined(), exp) {
|
| ... | ... |
@@ -4313,7 +4073,7 @@ func (s *DockerSuite) TestBuildRUNErrMsg(c *check.C) {
|
| 4313 | 4313 |
} |
| 4314 | 4314 |
exp := fmt.Sprintf(`The command '%s badEXE a1 \& a2 a3' returned a non-zero code: %d`, shell, exitCode) |
| 4315 | 4315 |
|
| 4316 |
- buildImageNew(name, withDockerfile(` |
|
| 4316 |
+ buildImage(name, withDockerfile(` |
|
| 4317 | 4317 |
FROM busybox |
| 4318 | 4318 |
RUN badEXE a1 \& a2 a3`)).Assert(c, icmd.Expected{
|
| 4319 | 4319 |
ExitCode: exitCode, |
| ... | ... |
@@ -4330,7 +4090,7 @@ func (s *DockerTrustSuite) TestTrustedBuild(c *check.C) {
|
| 4330 | 4330 |
|
| 4331 | 4331 |
name := "testtrustedbuild" |
| 4332 | 4332 |
|
| 4333 |
- buildImageNew(name, trustedBuild, withDockerfile(dockerFile)).Assert(c, icmd.Expected{
|
|
| 4333 |
+ buildImage(name, trustedBuild, withDockerfile(dockerFile)).Assert(c, icmd.Expected{
|
|
| 4334 | 4334 |
Out: fmt.Sprintf("FROM %s@sha", repoName[:len(repoName)-7]),
|
| 4335 | 4335 |
}) |
| 4336 | 4336 |
|
| ... | ... |
@@ -4350,7 +4110,7 @@ func (s *DockerTrustSuite) TestTrustedBuildUntrustedTag(c *check.C) {
|
| 4350 | 4350 |
|
| 4351 | 4351 |
name := "testtrustedbuilduntrustedtag" |
| 4352 | 4352 |
|
| 4353 |
- buildImageNew(name, trustedBuild, withDockerfile(dockerFile)).Assert(c, icmd.Expected{
|
|
| 4353 |
+ buildImage(name, trustedBuild, withDockerfile(dockerFile)).Assert(c, icmd.Expected{
|
|
| 4354 | 4354 |
ExitCode: 1, |
| 4355 | 4355 |
Err: "does not have trust data for", |
| 4356 | 4356 |
}) |
| ... | ... |
@@ -4418,7 +4178,7 @@ func (s *DockerTrustSuite) TestTrustedBuildTagFromReleasesRole(c *check.C) {
|
| 4418 | 4418 |
RUN [] |
| 4419 | 4419 |
`, otherTag) |
| 4420 | 4420 |
name := "testtrustedbuildreleasesrole" |
| 4421 |
- buildImageNew(name, trustedBuild, withDockerfile(dockerFile)).Assert(c, icmd.Expected{
|
|
| 4421 |
+ buildImage(name, trustedBuild, withDockerfile(dockerFile)).Assert(c, icmd.Expected{
|
|
| 4422 | 4422 |
Out: fmt.Sprintf("FROM %s@sha", repoName),
|
| 4423 | 4423 |
}) |
| 4424 | 4424 |
} |
| ... | ... |
@@ -4451,7 +4211,7 @@ func (s *DockerTrustSuite) TestTrustedBuildTagIgnoresOtherDelegationRoles(c *che |
| 4451 | 4451 |
`, otherTag) |
| 4452 | 4452 |
|
| 4453 | 4453 |
name := "testtrustedbuildotherrole" |
| 4454 |
- buildImageNew(name, trustedBuild, withDockerfile(dockerFile)).Assert(c, icmd.Expected{
|
|
| 4454 |
+ buildImage(name, trustedBuild, withDockerfile(dockerFile)).Assert(c, icmd.Expected{
|
|
| 4455 | 4455 |
ExitCode: 1, |
| 4456 | 4456 |
}) |
| 4457 | 4457 |
} |
| ... | ... |
@@ -4513,7 +4273,7 @@ func (s *DockerSuite) TestBuildBuildTimeArg(c *check.C) {
|
| 4513 | 4513 |
CMD echo $%s`, envKey, envKey, envKey) |
| 4514 | 4514 |
|
| 4515 | 4515 |
} |
| 4516 |
- buildImageNew(imgName, |
|
| 4516 |
+ buildImage(imgName, |
|
| 4517 | 4517 |
withBuildFlags("--build-arg", fmt.Sprintf("%s=%s", envKey, envVal)),
|
| 4518 | 4518 |
withDockerfile(dockerfile), |
| 4519 | 4519 |
).Assert(c, icmd.Expected{
|
| ... | ... |
@@ -4535,7 +4295,7 @@ func (s *DockerSuite) TestBuildBuildTimeArgHistory(c *check.C) {
|
| 4535 | 4535 |
envDef := "bar1" |
| 4536 | 4536 |
dockerfile := fmt.Sprintf(`FROM busybox |
| 4537 | 4537 |
ARG %s=%s`, envKey, envDef) |
| 4538 |
- buildImageNew(imgName, |
|
| 4538 |
+ buildImage(imgName, |
|
| 4539 | 4539 |
withBuildFlags("--build-arg", fmt.Sprintf("%s=%s", envKey, envVal)),
|
| 4540 | 4540 |
withDockerfile(dockerfile), |
| 4541 | 4541 |
).Assert(c, icmd.Expected{
|
| ... | ... |
@@ -4560,16 +4320,14 @@ func (s *DockerSuite) TestBuildBuildTimeArgCacheHit(c *check.C) {
|
| 4560 | 4560 |
withBuildFlags("--build-arg", fmt.Sprintf("%s=%s", envKey, envVal)),
|
| 4561 | 4561 |
withDockerfile(dockerfile), |
| 4562 | 4562 |
) |
| 4563 |
- origImgID, err := getIDByName(imgName) |
|
| 4564 |
- c.Assert(err, checker.IsNil) |
|
| 4563 |
+ origImgID := getIDByName(c, imgName) |
|
| 4565 | 4564 |
|
| 4566 | 4565 |
imgNameCache := "bldargtestcachehit" |
| 4567 | 4566 |
buildImageSuccessfully(c, imgNameCache, |
| 4568 | 4567 |
withBuildFlags("--build-arg", fmt.Sprintf("%s=%s", envKey, envVal)),
|
| 4569 | 4568 |
withDockerfile(dockerfile), |
| 4570 | 4569 |
) |
| 4571 |
- newImgID, err := getIDByName(imgName) |
|
| 4572 |
- c.Assert(err, checker.IsNil) |
|
| 4570 |
+ newImgID := getIDByName(c, imgName) |
|
| 4573 | 4571 |
if newImgID != origImgID {
|
| 4574 | 4572 |
c.Fatalf("build didn't use cache! expected image id: %q built image id: %q", origImgID, newImgID)
|
| 4575 | 4573 |
} |
| ... | ... |
@@ -4589,8 +4347,7 @@ func (s *DockerSuite) TestBuildBuildTimeArgCacheMissExtraArg(c *check.C) {
|
| 4589 | 4589 |
withBuildFlags("--build-arg", fmt.Sprintf("%s=%s", envKey, envVal)),
|
| 4590 | 4590 |
withDockerfile(dockerfile), |
| 4591 | 4591 |
) |
| 4592 |
- origImgID, err := getIDByName(imgName) |
|
| 4593 |
- c.Assert(err, checker.IsNil) |
|
| 4592 |
+ origImgID := getIDByName(c, imgName) |
|
| 4594 | 4593 |
|
| 4595 | 4594 |
imgNameCache := "bldargtestcachemiss" |
| 4596 | 4595 |
buildImageSuccessfully(c, imgNameCache, |
| ... | ... |
@@ -4600,8 +4357,7 @@ func (s *DockerSuite) TestBuildBuildTimeArgCacheMissExtraArg(c *check.C) {
|
| 4600 | 4600 |
), |
| 4601 | 4601 |
withDockerfile(dockerfile), |
| 4602 | 4602 |
) |
| 4603 |
- newImgID, err := getIDByName(imgNameCache) |
|
| 4604 |
- c.Assert(err, checker.IsNil) |
|
| 4603 |
+ newImgID := getIDByName(c, imgNameCache) |
|
| 4605 | 4604 |
|
| 4606 | 4605 |
if newImgID == origImgID {
|
| 4607 | 4606 |
c.Fatalf("build used cache, expected a miss!")
|
| ... | ... |
@@ -4620,16 +4376,14 @@ func (s *DockerSuite) TestBuildBuildTimeArgCacheMissSameArgDiffVal(c *check.C) {
|
| 4620 | 4620 |
withBuildFlags("--build-arg", fmt.Sprintf("%s=%s", envKey, envVal)),
|
| 4621 | 4621 |
withDockerfile(dockerfile), |
| 4622 | 4622 |
) |
| 4623 |
- origImgID, err := getIDByName(imgName) |
|
| 4624 |
- c.Assert(err, checker.IsNil) |
|
| 4623 |
+ origImgID := getIDByName(c, imgName) |
|
| 4625 | 4624 |
|
| 4626 | 4625 |
imgNameCache := "bldargtestcachemiss" |
| 4627 | 4626 |
buildImageSuccessfully(c, imgNameCache, |
| 4628 | 4627 |
withBuildFlags("--build-arg", fmt.Sprintf("%s=%s", envKey, newEnvVal)),
|
| 4629 | 4628 |
withDockerfile(dockerfile), |
| 4630 | 4629 |
) |
| 4631 |
- newImgID, err := getIDByName(imgNameCache) |
|
| 4632 |
- c.Assert(err, checker.IsNil) |
|
| 4630 |
+ newImgID := getIDByName(c, imgNameCache) |
|
| 4633 | 4631 |
if newImgID == origImgID {
|
| 4634 | 4632 |
c.Fatalf("build used cache, expected a miss!")
|
| 4635 | 4633 |
} |
| ... | ... |
@@ -4648,7 +4402,7 @@ func (s *DockerSuite) TestBuildBuildTimeArgOverrideArgDefinedBeforeEnv(c *check. |
| 4648 | 4648 |
CMD echo $%s |
| 4649 | 4649 |
`, envKey, envKey, envValOveride, envKey, envKey) |
| 4650 | 4650 |
|
| 4651 |
- result := buildImageNew(imgName, |
|
| 4651 |
+ result := buildImage(imgName, |
|
| 4652 | 4652 |
withBuildFlags("--build-arg", fmt.Sprintf("%s=%s", envKey, envVal)),
|
| 4653 | 4653 |
withDockerfile(dockerfile), |
| 4654 | 4654 |
) |
| ... | ... |
@@ -4676,7 +4430,7 @@ func (s *DockerSuite) TestBuildBuildTimeArgOverrideEnvDefinedBeforeArg(c *check. |
| 4676 | 4676 |
RUN echo $%s |
| 4677 | 4677 |
CMD echo $%s |
| 4678 | 4678 |
`, envKey, envValOveride, envKey, envKey, envKey) |
| 4679 |
- result := buildImageNew(imgName, |
|
| 4679 |
+ result := buildImage(imgName, |
|
| 4680 | 4680 |
withBuildFlags("--build-arg", fmt.Sprintf("%s=%s", envKey, envVal)),
|
| 4681 | 4681 |
withDockerfile(dockerfile), |
| 4682 | 4682 |
) |
| ... | ... |
@@ -4793,7 +4547,7 @@ func (s *DockerSuite) TestBuildBuildTimeArgExpansionOverride(c *check.C) {
|
| 4793 | 4793 |
ENV %s ${%s}
|
| 4794 | 4794 |
RUN echo $%s |
| 4795 | 4795 |
CMD echo $%s`, envKey, envKey, envValOveride, envKey1, envKey, envKey1, envKey1) |
| 4796 |
- result := buildImageNew(imgName, |
|
| 4796 |
+ result := buildImage(imgName, |
|
| 4797 | 4797 |
withBuildFlags("--build-arg", fmt.Sprintf("%s=%s", envKey, envVal)),
|
| 4798 | 4798 |
withDockerfile(dockerfile), |
| 4799 | 4799 |
) |
| ... | ... |
@@ -4817,7 +4571,7 @@ func (s *DockerSuite) TestBuildBuildTimeArgUntrustedDefinedAfterUse(c *check.C) |
| 4817 | 4817 |
RUN echo $%s |
| 4818 | 4818 |
ARG %s |
| 4819 | 4819 |
CMD echo $%s`, envKey, envKey, envKey) |
| 4820 |
- result := buildImageNew(imgName, |
|
| 4820 |
+ result := buildImage(imgName, |
|
| 4821 | 4821 |
withBuildFlags("--build-arg", fmt.Sprintf("%s=%s", envKey, envVal)),
|
| 4822 | 4822 |
withDockerfile(dockerfile), |
| 4823 | 4823 |
) |
| ... | ... |
@@ -4841,7 +4595,7 @@ func (s *DockerSuite) TestBuildBuildTimeArgBuiltinArg(c *check.C) {
|
| 4841 | 4841 |
RUN echo $%s |
| 4842 | 4842 |
CMD echo $%s`, envKey, envKey) |
| 4843 | 4843 |
|
| 4844 |
- result := buildImageNew(imgName, |
|
| 4844 |
+ result := buildImage(imgName, |
|
| 4845 | 4845 |
withBuildFlags("--build-arg", fmt.Sprintf("%s=%s", envKey, envVal)),
|
| 4846 | 4846 |
withDockerfile(dockerfile), |
| 4847 | 4847 |
) |
| ... | ... |
@@ -4866,7 +4620,7 @@ func (s *DockerSuite) TestBuildBuildTimeArgDefaultOverride(c *check.C) {
|
| 4866 | 4866 |
ENV %s $%s |
| 4867 | 4867 |
RUN echo $%s |
| 4868 | 4868 |
CMD echo $%s`, envKey, envVal, envKey, envKey, envKey, envKey) |
| 4869 |
- result := buildImageNew(imgName, |
|
| 4869 |
+ result := buildImage(imgName, |
|
| 4870 | 4870 |
withBuildFlags("--build-arg", fmt.Sprintf("%s=%s", envKey, envValOveride)),
|
| 4871 | 4871 |
withDockerfile(dockerfile), |
| 4872 | 4872 |
) |
| ... | ... |
@@ -4889,7 +4643,7 @@ func (s *DockerSuite) TestBuildBuildTimeArgUnconsumedArg(c *check.C) {
|
| 4889 | 4889 |
RUN echo $%s |
| 4890 | 4890 |
CMD echo $%s`, envKey, envKey) |
| 4891 | 4891 |
warnStr := "[Warning] One or more build-args" |
| 4892 |
- buildImageNew(imgName, |
|
| 4892 |
+ buildImage(imgName, |
|
| 4893 | 4893 |
withBuildFlags("--build-arg", fmt.Sprintf("%s=%s", envKey, envVal)),
|
| 4894 | 4894 |
withDockerfile(dockerfile), |
| 4895 | 4895 |
).Assert(c, icmd.Expected{
|
| ... | ... |
@@ -4918,7 +4672,7 @@ func (s *DockerSuite) TestBuildBuildTimeArgEnv(c *check.C) {
|
| 4918 | 4918 |
RUN [ "$(env | grep FOO8)" == "" ] |
| 4919 | 4919 |
RUN [ "$(env | grep FOO9)" == "" ] |
| 4920 | 4920 |
` |
| 4921 |
- result := buildImageNew("testbuildtimeargenv",
|
|
| 4921 |
+ result := buildImage("testbuildtimeargenv",
|
|
| 4922 | 4922 |
withBuildFlags( |
| 4923 | 4923 |
"--build-arg", fmt.Sprintf("FOO1=fromcmd"),
|
| 4924 | 4924 |
"--build-arg", fmt.Sprintf("FOO2="),
|
| ... | ... |
@@ -4998,7 +4752,7 @@ func (s *DockerSuite) TestBuildBuildTimeArgDefintionWithNoEnvInjection(c *check. |
| 4998 | 4998 |
ARG %s |
| 4999 | 4999 |
RUN env`, envKey) |
| 5000 | 5000 |
|
| 5001 |
- result := buildImageNew(imgName, withDockerfile(dockerfile)) |
|
| 5001 |
+ result := buildImage(imgName, withDockerfile(dockerfile)) |
|
| 5002 | 5002 |
result.Assert(c, icmd.Success) |
| 5003 | 5003 |
if strings.Count(result.Combined(), envKey) != 1 {
|
| 5004 | 5004 |
c.Fatalf("unexpected number of occurrences of the arg in output: %q expected: 1", result.Combined())
|
| ... | ... |
@@ -5017,7 +4771,7 @@ func (s *DockerSuite) TestBuildNoNamedVolume(c *check.C) {
|
| 5017 | 5017 |
VOLUME ` + volName + ` |
| 5018 | 5018 |
RUN ls /foo/oops |
| 5019 | 5019 |
` |
| 5020 |
- buildImageNew("test", withDockerfile(dockerFile)).Assert(c, icmd.Expected{
|
|
| 5020 |
+ buildImage("test", withDockerfile(dockerFile)).Assert(c, icmd.Expected{
|
|
| 5021 | 5021 |
ExitCode: 1, |
| 5022 | 5022 |
}) |
| 5023 | 5023 |
} |
| ... | ... |
@@ -5053,105 +4807,97 @@ func (s *DockerSuite) TestBuildMultipleTags(c *check.C) {
|
| 5053 | 5053 |
` |
| 5054 | 5054 |
buildImageSuccessfully(c, "tag1", withBuildFlags("-t", "tag2:v2", "-t", "tag1:latest", "-t", "tag1"), withDockerfile(dockerfile))
|
| 5055 | 5055 |
|
| 5056 |
- id1, err := getIDByName("tag1")
|
|
| 5057 |
- c.Assert(err, check.IsNil) |
|
| 5058 |
- id2, err := getIDByName("tag2:v2")
|
|
| 5059 |
- c.Assert(err, check.IsNil) |
|
| 5056 |
+ id1 := getIDByName(c, "tag1") |
|
| 5057 |
+ id2 := getIDByName(c, "tag2:v2") |
|
| 5060 | 5058 |
c.Assert(id1, check.Equals, id2) |
| 5061 | 5059 |
} |
| 5062 | 5060 |
|
| 5063 | 5061 |
// #17290 |
| 5064 | 5062 |
func (s *DockerSuite) TestBuildCacheBrokenSymlink(c *check.C) {
|
| 5065 | 5063 |
name := "testbuildbrokensymlink" |
| 5066 |
- ctx, err := fakeContext(` |
|
| 5064 |
+ ctx := fakeContext(c, ` |
|
| 5067 | 5065 |
FROM busybox |
| 5068 | 5066 |
COPY . ./`, |
| 5069 | 5067 |
map[string]string{
|
| 5070 | 5068 |
"foo": "bar", |
| 5071 | 5069 |
}) |
| 5072 |
- c.Assert(err, checker.IsNil) |
|
| 5073 | 5070 |
defer ctx.Close() |
| 5074 | 5071 |
|
| 5075 |
- err = os.Symlink(filepath.Join(ctx.Dir, "nosuchfile"), filepath.Join(ctx.Dir, "asymlink")) |
|
| 5072 |
+ err := os.Symlink(filepath.Join(ctx.Dir, "nosuchfile"), filepath.Join(ctx.Dir, "asymlink")) |
|
| 5076 | 5073 |
c.Assert(err, checker.IsNil) |
| 5077 | 5074 |
|
| 5078 | 5075 |
// warm up cache |
| 5079 |
- _, err = buildImageFromContext(name, ctx, true) |
|
| 5080 |
- c.Assert(err, checker.IsNil) |
|
| 5076 |
+ buildImageSuccessfully(c, name, withExternalBuildContext(ctx)) |
|
| 5081 | 5077 |
|
| 5082 | 5078 |
// add new file to context, should invalidate cache |
| 5083 | 5079 |
err = ioutil.WriteFile(filepath.Join(ctx.Dir, "newfile"), []byte("foo"), 0644)
|
| 5084 | 5080 |
c.Assert(err, checker.IsNil) |
| 5085 | 5081 |
|
| 5086 |
- _, out, err := buildImageFromContextWithOut(name, ctx, true) |
|
| 5087 |
- c.Assert(err, checker.IsNil) |
|
| 5088 |
- |
|
| 5089 |
- c.Assert(out, checker.Not(checker.Contains), "Using cache") |
|
| 5090 |
- |
|
| 5082 |
+ result := buildImage(name, withExternalBuildContext(ctx)) |
|
| 5083 |
+ result.Assert(c, icmd.Success) |
|
| 5084 |
+ if strings.Contains(result.Combined(), "Using cache") {
|
|
| 5085 |
+ c.Fatal("2nd build used cache on ADD, it shouldn't")
|
|
| 5086 |
+ } |
|
| 5091 | 5087 |
} |
| 5092 | 5088 |
|
| 5093 | 5089 |
func (s *DockerSuite) TestBuildFollowSymlinkToFile(c *check.C) {
|
| 5094 | 5090 |
name := "testbuildbrokensymlink" |
| 5095 |
- ctx, err := fakeContext(` |
|
| 5091 |
+ ctx := fakeContext(c, ` |
|
| 5096 | 5092 |
FROM busybox |
| 5097 | 5093 |
COPY asymlink target`, |
| 5098 | 5094 |
map[string]string{
|
| 5099 | 5095 |
"foo": "bar", |
| 5100 | 5096 |
}) |
| 5101 |
- c.Assert(err, checker.IsNil) |
|
| 5102 | 5097 |
defer ctx.Close() |
| 5103 | 5098 |
|
| 5104 |
- err = os.Symlink("foo", filepath.Join(ctx.Dir, "asymlink"))
|
|
| 5099 |
+ err := os.Symlink("foo", filepath.Join(ctx.Dir, "asymlink"))
|
|
| 5105 | 5100 |
c.Assert(err, checker.IsNil) |
| 5106 | 5101 |
|
| 5107 |
- id, err := buildImageFromContext(name, ctx, true) |
|
| 5108 |
- c.Assert(err, checker.IsNil) |
|
| 5102 |
+ buildImageSuccessfully(c, name, withExternalBuildContext(ctx)) |
|
| 5109 | 5103 |
|
| 5110 |
- out, _ := dockerCmd(c, "run", "--rm", id, "cat", "target") |
|
| 5104 |
+ out, _ := dockerCmd(c, "run", "--rm", name, "cat", "target") |
|
| 5111 | 5105 |
c.Assert(out, checker.Matches, "bar") |
| 5112 | 5106 |
|
| 5113 | 5107 |
// change target file should invalidate cache |
| 5114 | 5108 |
err = ioutil.WriteFile(filepath.Join(ctx.Dir, "foo"), []byte("baz"), 0644)
|
| 5115 | 5109 |
c.Assert(err, checker.IsNil) |
| 5116 | 5110 |
|
| 5117 |
- id, out, err = buildImageFromContextWithOut(name, ctx, true) |
|
| 5118 |
- c.Assert(err, checker.IsNil) |
|
| 5119 |
- c.Assert(out, checker.Not(checker.Contains), "Using cache") |
|
| 5111 |
+ result := buildImage(name, withExternalBuildContext(ctx)) |
|
| 5112 |
+ result.Assert(c, icmd.Success) |
|
| 5113 |
+ c.Assert(result.Combined(), checker.Not(checker.Contains), "Using cache") |
|
| 5120 | 5114 |
|
| 5121 |
- out, _ = dockerCmd(c, "run", "--rm", id, "cat", "target") |
|
| 5115 |
+ out, _ = dockerCmd(c, "run", "--rm", name, "cat", "target") |
|
| 5122 | 5116 |
c.Assert(out, checker.Matches, "baz") |
| 5123 | 5117 |
} |
| 5124 | 5118 |
|
| 5125 | 5119 |
func (s *DockerSuite) TestBuildFollowSymlinkToDir(c *check.C) {
|
| 5126 | 5120 |
name := "testbuildbrokensymlink" |
| 5127 |
- ctx, err := fakeContext(` |
|
| 5121 |
+ ctx := fakeContext(c, ` |
|
| 5128 | 5122 |
FROM busybox |
| 5129 | 5123 |
COPY asymlink /`, |
| 5130 | 5124 |
map[string]string{
|
| 5131 | 5125 |
"foo/abc": "bar", |
| 5132 | 5126 |
"foo/def": "baz", |
| 5133 | 5127 |
}) |
| 5134 |
- c.Assert(err, checker.IsNil) |
|
| 5135 | 5128 |
defer ctx.Close() |
| 5136 | 5129 |
|
| 5137 |
- err = os.Symlink("foo", filepath.Join(ctx.Dir, "asymlink"))
|
|
| 5130 |
+ err := os.Symlink("foo", filepath.Join(ctx.Dir, "asymlink"))
|
|
| 5138 | 5131 |
c.Assert(err, checker.IsNil) |
| 5139 | 5132 |
|
| 5140 |
- id, err := buildImageFromContext(name, ctx, true) |
|
| 5141 |
- c.Assert(err, checker.IsNil) |
|
| 5133 |
+ buildImageSuccessfully(c, name, withExternalBuildContext(ctx)) |
|
| 5142 | 5134 |
|
| 5143 |
- out, _ := dockerCmd(c, "run", "--rm", id, "cat", "abc", "def") |
|
| 5135 |
+ out, _ := dockerCmd(c, "run", "--rm", name, "cat", "abc", "def") |
|
| 5144 | 5136 |
c.Assert(out, checker.Matches, "barbaz") |
| 5145 | 5137 |
|
| 5146 | 5138 |
// change target file should invalidate cache |
| 5147 | 5139 |
err = ioutil.WriteFile(filepath.Join(ctx.Dir, "foo/def"), []byte("bax"), 0644)
|
| 5148 | 5140 |
c.Assert(err, checker.IsNil) |
| 5149 | 5141 |
|
| 5150 |
- id, out, err = buildImageFromContextWithOut(name, ctx, true) |
|
| 5151 |
- c.Assert(err, checker.IsNil) |
|
| 5152 |
- c.Assert(out, checker.Not(checker.Contains), "Using cache") |
|
| 5142 |
+ result := buildImage(name, withExternalBuildContext(ctx)) |
|
| 5143 |
+ result.Assert(c, icmd.Success) |
|
| 5144 |
+ c.Assert(result.Combined(), checker.Not(checker.Contains), "Using cache") |
|
| 5153 | 5145 |
|
| 5154 |
- out, _ = dockerCmd(c, "run", "--rm", id, "cat", "abc", "def") |
|
| 5146 |
+ out, _ = dockerCmd(c, "run", "--rm", name, "cat", "abc", "def") |
|
| 5155 | 5147 |
c.Assert(out, checker.Matches, "barbax") |
| 5156 | 5148 |
|
| 5157 | 5149 |
} |
| ... | ... |
@@ -5160,61 +4906,56 @@ func (s *DockerSuite) TestBuildFollowSymlinkToDir(c *check.C) {
|
| 5160 | 5160 |
// not from the target file. |
| 5161 | 5161 |
func (s *DockerSuite) TestBuildSymlinkBasename(c *check.C) {
|
| 5162 | 5162 |
name := "testbuildbrokensymlink" |
| 5163 |
- ctx, err := fakeContext(` |
|
| 5163 |
+ ctx := fakeContext(c, ` |
|
| 5164 | 5164 |
FROM busybox |
| 5165 | 5165 |
COPY asymlink /`, |
| 5166 | 5166 |
map[string]string{
|
| 5167 | 5167 |
"foo": "bar", |
| 5168 | 5168 |
}) |
| 5169 |
- c.Assert(err, checker.IsNil) |
|
| 5170 | 5169 |
defer ctx.Close() |
| 5171 | 5170 |
|
| 5172 |
- err = os.Symlink("foo", filepath.Join(ctx.Dir, "asymlink"))
|
|
| 5171 |
+ err := os.Symlink("foo", filepath.Join(ctx.Dir, "asymlink"))
|
|
| 5173 | 5172 |
c.Assert(err, checker.IsNil) |
| 5174 | 5173 |
|
| 5175 |
- id, err := buildImageFromContext(name, ctx, true) |
|
| 5176 |
- c.Assert(err, checker.IsNil) |
|
| 5174 |
+ buildImageSuccessfully(c, name, withExternalBuildContext(ctx)) |
|
| 5177 | 5175 |
|
| 5178 |
- out, _ := dockerCmd(c, "run", "--rm", id, "cat", "asymlink") |
|
| 5176 |
+ out, _ := dockerCmd(c, "run", "--rm", name, "cat", "asymlink") |
|
| 5179 | 5177 |
c.Assert(out, checker.Matches, "bar") |
| 5180 |
- |
|
| 5181 | 5178 |
} |
| 5182 | 5179 |
|
| 5183 | 5180 |
// #17827 |
| 5184 | 5181 |
func (s *DockerSuite) TestBuildCacheRootSource(c *check.C) {
|
| 5185 | 5182 |
name := "testbuildrootsource" |
| 5186 |
- ctx, err := fakeContext(` |
|
| 5183 |
+ ctx := fakeContext(c, ` |
|
| 5187 | 5184 |
FROM busybox |
| 5188 | 5185 |
COPY / /data`, |
| 5189 | 5186 |
map[string]string{
|
| 5190 | 5187 |
"foo": "bar", |
| 5191 | 5188 |
}) |
| 5192 |
- c.Assert(err, checker.IsNil) |
|
| 5193 | 5189 |
defer ctx.Close() |
| 5194 | 5190 |
|
| 5195 | 5191 |
// warm up cache |
| 5196 |
- _, err = buildImageFromContext(name, ctx, true) |
|
| 5197 |
- c.Assert(err, checker.IsNil) |
|
| 5192 |
+ buildImageSuccessfully(c, name, withExternalBuildContext(ctx)) |
|
| 5198 | 5193 |
|
| 5199 | 5194 |
// change file, should invalidate cache |
| 5200 |
- err = ioutil.WriteFile(filepath.Join(ctx.Dir, "foo"), []byte("baz"), 0644)
|
|
| 5195 |
+ err := ioutil.WriteFile(filepath.Join(ctx.Dir, "foo"), []byte("baz"), 0644)
|
|
| 5201 | 5196 |
c.Assert(err, checker.IsNil) |
| 5202 | 5197 |
|
| 5203 |
- _, out, err := buildImageFromContextWithOut(name, ctx, true) |
|
| 5204 |
- c.Assert(err, checker.IsNil) |
|
| 5198 |
+ result := buildImage(name, withExternalBuildContext(ctx)) |
|
| 5199 |
+ result.Assert(c, icmd.Success) |
|
| 5205 | 5200 |
|
| 5206 |
- c.Assert(out, checker.Not(checker.Contains), "Using cache") |
|
| 5201 |
+ c.Assert(result.Combined(), checker.Not(checker.Contains), "Using cache") |
|
| 5207 | 5202 |
} |
| 5208 | 5203 |
|
| 5209 | 5204 |
// #19375 |
| 5210 | 5205 |
func (s *DockerSuite) TestBuildFailsGitNotCallable(c *check.C) {
|
| 5211 |
- buildImageNew("gitnotcallable", withEnvironmentVariales("PATH="),
|
|
| 5206 |
+ buildImage("gitnotcallable", withEnvironmentVariales("PATH="),
|
|
| 5212 | 5207 |
withBuildContextPath("github.com/docker/v1.10-migrator.git")).Assert(c, icmd.Expected{
|
| 5213 | 5208 |
ExitCode: 1, |
| 5214 | 5209 |
Err: "unable to prepare context: unable to find 'git': ", |
| 5215 | 5210 |
}) |
| 5216 | 5211 |
|
| 5217 |
- buildImageNew("gitnotcallable", withEnvironmentVariales("PATH="),
|
|
| 5212 |
+ buildImage("gitnotcallable", withEnvironmentVariales("PATH="),
|
|
| 5218 | 5213 |
withBuildContextPath("https://github.com/docker/v1.10-migrator.git")).Assert(c, icmd.Expected{
|
| 5219 | 5214 |
ExitCode: 1, |
| 5220 | 5215 |
Err: "unable to prepare context: unable to find 'git': ", |
| ... | ... |
@@ -5541,7 +5282,7 @@ func (s *DockerSuite) TestBuildShellUpdatesConfig(c *check.C) {
|
| 5541 | 5541 |
func (s *DockerSuite) TestBuildShellMultiple(c *check.C) {
|
| 5542 | 5542 |
name := "testbuildshellmultiple" |
| 5543 | 5543 |
|
| 5544 |
- result := buildImageNew(name, withDockerfile(`FROM busybox |
|
| 5544 |
+ result := buildImage(name, withDockerfile(`FROM busybox |
|
| 5545 | 5545 |
RUN echo defaultshell |
| 5546 | 5546 |
SHELL ["echo"] |
| 5547 | 5547 |
RUN echoshell |
| ... | ... |
@@ -5594,7 +5335,7 @@ func (s *DockerSuite) TestBuildShellInherited(c *check.C) {
|
| 5594 | 5594 |
buildImageSuccessfully(c, name1, withDockerfile(`FROM busybox |
| 5595 | 5595 |
SHELL ["ls"]`)) |
| 5596 | 5596 |
name2 := "testbuildshellinherited2" |
| 5597 |
- buildImageNew(name2, withDockerfile(`FROM `+name1+` |
|
| 5597 |
+ buildImage(name2, withDockerfile(`FROM `+name1+` |
|
| 5598 | 5598 |
RUN -l`)).Assert(c, icmd.Expected{
|
| 5599 | 5599 |
// ls -l has "total " followed by some number in it, ls without -l does not. |
| 5600 | 5600 |
Out: "total ", |
| ... | ... |
@@ -5605,7 +5346,7 @@ func (s *DockerSuite) TestBuildShellInherited(c *check.C) {
|
| 5605 | 5605 |
func (s *DockerSuite) TestBuildShellNotJSON(c *check.C) {
|
| 5606 | 5606 |
name := "testbuildshellnotjson" |
| 5607 | 5607 |
|
| 5608 |
- buildImageNew(name, withDockerfile(`FROM `+minimalBaseImage()+` |
|
| 5608 |
+ buildImage(name, withDockerfile(`FROM `+minimalBaseImage()+` |
|
| 5609 | 5609 |
sHeLl exec -form`, // Casing explicit to ensure error is upper-cased. |
| 5610 | 5610 |
)).Assert(c, icmd.Expected{
|
| 5611 | 5611 |
ExitCode: 1, |
| ... | ... |
@@ -5618,7 +5359,7 @@ func (s *DockerSuite) TestBuildShellNotJSON(c *check.C) {
|
| 5618 | 5618 |
func (s *DockerSuite) TestBuildShellWindowsPowershell(c *check.C) {
|
| 5619 | 5619 |
testRequires(c, DaemonIsWindows) |
| 5620 | 5620 |
name := "testbuildshellpowershell" |
| 5621 |
- buildImageNew(name, withDockerfile(`FROM `+minimalBaseImage()+` |
|
| 5621 |
+ buildImage(name, withDockerfile(`FROM `+minimalBaseImage()+` |
|
| 5622 | 5622 |
SHELL ["powershell", "-command"] |
| 5623 | 5623 |
RUN Write-Host John`)).Assert(c, icmd.Expected{
|
| 5624 | 5624 |
Out: "\nJohn\n", |
| ... | ... |
@@ -5630,7 +5371,7 @@ func (s *DockerSuite) TestBuildShellWindowsPowershell(c *check.C) {
|
| 5630 | 5630 |
func (s *DockerSuite) TestBuildEscapeNotBackslashWordTest(c *check.C) {
|
| 5631 | 5631 |
testRequires(c, DaemonIsWindows) |
| 5632 | 5632 |
name := "testbuildescapenotbackslashwordtesta" |
| 5633 |
- buildImageNew(name, withDockerfile(`# escape= `+"`"+` |
|
| 5633 |
+ buildImage(name, withDockerfile(`# escape= `+"`"+` |
|
| 5634 | 5634 |
FROM `+minimalBaseImage()+` |
| 5635 | 5635 |
WORKDIR c:\windows |
| 5636 | 5636 |
RUN dir /w`)).Assert(c, icmd.Expected{
|
| ... | ... |
@@ -5638,7 +5379,7 @@ func (s *DockerSuite) TestBuildEscapeNotBackslashWordTest(c *check.C) {
|
| 5638 | 5638 |
}) |
| 5639 | 5639 |
|
| 5640 | 5640 |
name = "testbuildescapenotbackslashwordtestb" |
| 5641 |
- buildImageNew(name, withDockerfile(`# escape= `+"`"+` |
|
| 5641 |
+ buildImage(name, withDockerfile(`# escape= `+"`"+` |
|
| 5642 | 5642 |
FROM `+minimalBaseImage()+` |
| 5643 | 5643 |
SHELL ["powershell.exe"] |
| 5644 | 5644 |
WORKDIR c:\foo |
| ... | ... |
@@ -5673,7 +5414,7 @@ func (s *DockerSuite) TestBuildCmdShellArgsEscaped(c *check.C) {
|
| 5673 | 5673 |
func (s *DockerSuite) TestBuildStepsWithProgress(c *check.C) {
|
| 5674 | 5674 |
name := "testbuildstepswithprogress" |
| 5675 | 5675 |
totalRun := 5 |
| 5676 |
- result := buildImageNew(name, withDockerfile("FROM busybox\n"+strings.Repeat("RUN echo foo\n", totalRun)))
|
|
| 5676 |
+ result := buildImage(name, withDockerfile("FROM busybox\n"+strings.Repeat("RUN echo foo\n", totalRun)))
|
|
| 5677 | 5677 |
result.Assert(c, icmd.Success) |
| 5678 | 5678 |
c.Assert(result.Combined(), checker.Contains, fmt.Sprintf("Step 1/%d : FROM busybox", 1+totalRun))
|
| 5679 | 5679 |
for i := 2; i <= 1+totalRun; i++ {
|
| ... | ... |
@@ -5686,14 +5427,14 @@ func (s *DockerSuite) TestBuildWithFailure(c *check.C) {
|
| 5686 | 5686 |
|
| 5687 | 5687 |
// First test case can only detect `nobody` in runtime so all steps will show up |
| 5688 | 5688 |
dockerfile := "FROM busybox\nRUN nobody" |
| 5689 |
- result := buildImageNew(name, withDockerfile(dockerfile)) |
|
| 5689 |
+ result := buildImage(name, withDockerfile(dockerfile)) |
|
| 5690 | 5690 |
c.Assert(result.Error, checker.NotNil) |
| 5691 | 5691 |
c.Assert(result.Stdout(), checker.Contains, "Step 1/2 : FROM busybox") |
| 5692 | 5692 |
c.Assert(result.Stdout(), checker.Contains, "Step 2/2 : RUN nobody") |
| 5693 | 5693 |
|
| 5694 | 5694 |
// Second test case `FFOM` should have been detected before build runs so no steps |
| 5695 | 5695 |
dockerfile = "FFOM nobody\nRUN nobody" |
| 5696 |
- result = buildImageNew(name, withDockerfile(dockerfile)) |
|
| 5696 |
+ result = buildImage(name, withDockerfile(dockerfile)) |
|
| 5697 | 5697 |
c.Assert(result.Error, checker.NotNil) |
| 5698 | 5698 |
c.Assert(result.Stdout(), checker.Not(checker.Contains), "Step 1/2 : FROM busybox") |
| 5699 | 5699 |
c.Assert(result.Stdout(), checker.Not(checker.Contains), "Step 2/2 : RUN nobody") |
| ... | ... |
@@ -5706,28 +5447,29 @@ func (s *DockerSuite) TestBuildCacheFrom(c *check.C) {
|
| 5706 | 5706 |
ENV FOO=bar |
| 5707 | 5707 |
ADD baz / |
| 5708 | 5708 |
RUN touch bax` |
| 5709 |
- ctx, err := fakeContext(dockerfile, map[string]string{
|
|
| 5709 |
+ ctx := fakeContext(c, dockerfile, map[string]string{
|
|
| 5710 | 5710 |
"Dockerfile": dockerfile, |
| 5711 | 5711 |
"baz": "baz", |
| 5712 | 5712 |
}) |
| 5713 |
- c.Assert(err, checker.IsNil) |
|
| 5714 | 5713 |
defer ctx.Close() |
| 5715 | 5714 |
|
| 5716 |
- id1, err := buildImageFromContext("build1", ctx, true)
|
|
| 5717 |
- c.Assert(err, checker.IsNil) |
|
| 5715 |
+ buildImageSuccessfully(c, "build1", withExternalBuildContext(ctx)) |
|
| 5716 |
+ id1 := getIDByName(c, "build1") |
|
| 5718 | 5717 |
|
| 5719 | 5718 |
// rebuild with cache-from |
| 5720 |
- id2, out, err := buildImageFromContextWithOut("build2", ctx, true, "--cache-from=build1")
|
|
| 5721 |
- c.Assert(err, checker.IsNil) |
|
| 5719 |
+ result := buildImage("build2", withBuildFlags("--cache-from=build1"), withExternalBuildContext(ctx))
|
|
| 5720 |
+ result.Assert(c, icmd.Success) |
|
| 5721 |
+ id2 := getIDByName(c, "build2") |
|
| 5722 | 5722 |
c.Assert(id1, checker.Equals, id2) |
| 5723 |
- c.Assert(strings.Count(out, "Using cache"), checker.Equals, 3) |
|
| 5723 |
+ c.Assert(strings.Count(result.Combined(), "Using cache"), checker.Equals, 3) |
|
| 5724 | 5724 |
dockerCmd(c, "rmi", "build2") |
| 5725 | 5725 |
|
| 5726 | 5726 |
// no cache match with unknown source |
| 5727 |
- id2, out, err = buildImageFromContextWithOut("build2", ctx, true, "--cache-from=nosuchtag")
|
|
| 5728 |
- c.Assert(err, checker.IsNil) |
|
| 5727 |
+ result = buildImage("build2", withBuildFlags("--cache-from=nosuchtag"), withExternalBuildContext(ctx))
|
|
| 5728 |
+ result.Assert(c, icmd.Success) |
|
| 5729 |
+ id2 = getIDByName(c, "build2") |
|
| 5729 | 5730 |
c.Assert(id1, checker.Not(checker.Equals), id2) |
| 5730 |
- c.Assert(strings.Count(out, "Using cache"), checker.Equals, 0) |
|
| 5731 |
+ c.Assert(strings.Count(result.Combined(), "Using cache"), checker.Equals, 0) |
|
| 5731 | 5732 |
dockerCmd(c, "rmi", "build2") |
| 5732 | 5733 |
|
| 5733 | 5734 |
// clear parent images |
| ... | ... |
@@ -5744,17 +5486,19 @@ func (s *DockerSuite) TestBuildCacheFrom(c *check.C) {
|
| 5744 | 5744 |
c.Assert(strings.TrimSpace(parentID), checker.Equals, "") |
| 5745 | 5745 |
|
| 5746 | 5746 |
// cache still applies without parents |
| 5747 |
- id2, out, err = buildImageFromContextWithOut("build2", ctx, true, "--cache-from=build1")
|
|
| 5748 |
- c.Assert(err, checker.IsNil) |
|
| 5747 |
+ result = buildImage("build2", withBuildFlags("--cache-from=build1"), withExternalBuildContext(ctx))
|
|
| 5748 |
+ result.Assert(c, icmd.Success) |
|
| 5749 |
+ id2 = getIDByName(c, "build2") |
|
| 5749 | 5750 |
c.Assert(id1, checker.Equals, id2) |
| 5750 |
- c.Assert(strings.Count(out, "Using cache"), checker.Equals, 3) |
|
| 5751 |
+ c.Assert(strings.Count(result.Combined(), "Using cache"), checker.Equals, 3) |
|
| 5751 | 5752 |
history1, _ := dockerCmd(c, "history", "-q", "build2") |
| 5752 | 5753 |
|
| 5753 | 5754 |
// Retry, no new intermediate images |
| 5754 |
- id3, out, err := buildImageFromContextWithOut("build3", ctx, true, "--cache-from=build1")
|
|
| 5755 |
- c.Assert(err, checker.IsNil) |
|
| 5755 |
+ result = buildImage("build3", withBuildFlags("--cache-from=build1"), withExternalBuildContext(ctx))
|
|
| 5756 |
+ result.Assert(c, icmd.Success) |
|
| 5757 |
+ id3 := getIDByName(c, "build3") |
|
| 5756 | 5758 |
c.Assert(id1, checker.Equals, id3) |
| 5757 |
- c.Assert(strings.Count(out, "Using cache"), checker.Equals, 3) |
|
| 5759 |
+ c.Assert(strings.Count(result.Combined(), "Using cache"), checker.Equals, 3) |
|
| 5758 | 5760 |
history2, _ := dockerCmd(c, "history", "-q", "build3") |
| 5759 | 5761 |
|
| 5760 | 5762 |
c.Assert(history1, checker.Equals, history2) |
| ... | ... |
@@ -5772,10 +5516,11 @@ func (s *DockerSuite) TestBuildCacheFrom(c *check.C) {
|
| 5772 | 5772 |
err = ioutil.WriteFile(filepath.Join(ctx.Dir, "Dockerfile"), []byte(dockerfile), 0644) |
| 5773 | 5773 |
c.Assert(err, checker.IsNil) |
| 5774 | 5774 |
|
| 5775 |
- id2, out, err = buildImageFromContextWithOut("build2", ctx, true, "--cache-from=build1")
|
|
| 5776 |
- c.Assert(err, checker.IsNil) |
|
| 5775 |
+ result = buildImage("build2", withBuildFlags("--cache-from=build1"), withExternalBuildContext(ctx))
|
|
| 5776 |
+ result.Assert(c, icmd.Success) |
|
| 5777 |
+ id2 = getIDByName(c, "build2") |
|
| 5777 | 5778 |
c.Assert(id1, checker.Not(checker.Equals), id2) |
| 5778 |
- c.Assert(strings.Count(out, "Using cache"), checker.Equals, 2) |
|
| 5779 |
+ c.Assert(strings.Count(result.Combined(), "Using cache"), checker.Equals, 2) |
|
| 5779 | 5780 |
|
| 5780 | 5781 |
layers1Str, _ := dockerCmd(c, "inspect", "-f", "{{json .RootFS.Layers}}", "build1")
|
| 5781 | 5782 |
layers2Str, _ := dockerCmd(c, "inspect", "-f", "{{json .RootFS.Layers}}", "build2")
|
| ... | ... |
@@ -5795,7 +5540,7 @@ func (s *DockerSuite) TestBuildCacheFrom(c *check.C) {
|
| 5795 | 5795 |
func (s *DockerSuite) TestBuildNetNone(c *check.C) {
|
| 5796 | 5796 |
testRequires(c, DaemonIsLinux) |
| 5797 | 5797 |
name := "testbuildnetnone" |
| 5798 |
- buildImageNew(name, withBuildFlags("--network=none"), withDockerfile(`
|
|
| 5798 |
+ buildImage(name, withBuildFlags("--network=none"), withDockerfile(`
|
|
| 5799 | 5799 |
FROM busybox |
| 5800 | 5800 |
RUN ping -c 1 8.8.8.8 |
| 5801 | 5801 |
`)).Assert(c, icmd.Expected{
|
| ... | ... |
@@ -5833,13 +5578,11 @@ func (s *DockerSuite) TestBuildSquashParent(c *check.C) {
|
| 5833 | 5833 |
// build and get the ID that we can use later for history comparison |
| 5834 | 5834 |
name := "test" |
| 5835 | 5835 |
buildImageSuccessfully(c, name, withDockerfile(dockerFile)) |
| 5836 |
- origID, err := getIDByName(name) |
|
| 5837 |
- c.Assert(err, checker.IsNil) |
|
| 5836 |
+ origID := getIDByName(c, name) |
|
| 5838 | 5837 |
|
| 5839 | 5838 |
// build with squash |
| 5840 | 5839 |
buildImageSuccessfully(c, name, withBuildFlags("--squash"), withDockerfile(dockerFile))
|
| 5841 |
- id, err := getIDByName(name) |
|
| 5842 |
- c.Assert(err, checker.IsNil) |
|
| 5840 |
+ id := getIDByName(c, name) |
|
| 5843 | 5841 |
|
| 5844 | 5842 |
out, _ := dockerCmd(c, "run", "--rm", id, "/bin/sh", "-c", "cat /hello") |
| 5845 | 5843 |
c.Assert(strings.TrimSpace(out), checker.Equals, "hello\nworld") |
| ... | ... |
@@ -5867,23 +5610,23 @@ func (s *DockerSuite) TestBuildSquashParent(c *check.C) {
|
| 5867 | 5867 |
func (s *DockerSuite) TestBuildContChar(c *check.C) {
|
| 5868 | 5868 |
name := "testbuildcontchar" |
| 5869 | 5869 |
|
| 5870 |
- buildImageNew(name, withDockerfile(`FROM busybox\`)).Assert(c, icmd.Expected{
|
|
| 5870 |
+ buildImage(name, withDockerfile(`FROM busybox\`)).Assert(c, icmd.Expected{
|
|
| 5871 | 5871 |
Out: "Step 1/1 : FROM busybox", |
| 5872 | 5872 |
}) |
| 5873 | 5873 |
|
| 5874 |
- result := buildImageNew(name, withDockerfile(`FROM busybox |
|
| 5874 |
+ result := buildImage(name, withDockerfile(`FROM busybox |
|
| 5875 | 5875 |
RUN echo hi \`)) |
| 5876 | 5876 |
result.Assert(c, icmd.Success) |
| 5877 | 5877 |
c.Assert(result.Combined(), checker.Contains, "Step 1/2 : FROM busybox") |
| 5878 | 5878 |
c.Assert(result.Combined(), checker.Contains, "Step 2/2 : RUN echo hi\n") |
| 5879 | 5879 |
|
| 5880 |
- result = buildImageNew(name, withDockerfile(`FROM busybox |
|
| 5880 |
+ result = buildImage(name, withDockerfile(`FROM busybox |
|
| 5881 | 5881 |
RUN echo hi \\`)) |
| 5882 | 5882 |
result.Assert(c, icmd.Success) |
| 5883 | 5883 |
c.Assert(result.Combined(), checker.Contains, "Step 1/2 : FROM busybox") |
| 5884 | 5884 |
c.Assert(result.Combined(), checker.Contains, "Step 2/2 : RUN echo hi \\\n") |
| 5885 | 5885 |
|
| 5886 |
- result = buildImageNew(name, withDockerfile(`FROM busybox |
|
| 5886 |
+ result = buildImage(name, withDockerfile(`FROM busybox |
|
| 5887 | 5887 |
RUN echo hi \\\`)) |
| 5888 | 5888 |
result.Assert(c, icmd.Success) |
| 5889 | 5889 |
c.Assert(result.Combined(), checker.Contains, "Step 1/2 : FROM busybox") |
| ... | ... |
@@ -5911,7 +5654,7 @@ func (s *DockerSuite) TestBuildOpaqueDirectory(c *check.C) {
|
| 5911 | 5911 |
func (s *DockerSuite) TestBuildWindowsUser(c *check.C) {
|
| 5912 | 5912 |
testRequires(c, DaemonIsWindows) |
| 5913 | 5913 |
name := "testbuildwindowsuser" |
| 5914 |
- buildImageNew(name, withDockerfile(`FROM `+testEnv.MinimalBaseImage()+` |
|
| 5914 |
+ buildImage(name, withDockerfile(`FROM `+testEnv.MinimalBaseImage()+` |
|
| 5915 | 5915 |
RUN net user user /add |
| 5916 | 5916 |
USER user |
| 5917 | 5917 |
RUN set username |
| ... | ... |
@@ -5987,7 +5730,7 @@ func (s *DockerSuite) TestBuildWorkdirCmd(c *check.C) {
|
| 5987 | 5987 |
WORKDIR / |
| 5988 | 5988 |
` |
| 5989 | 5989 |
buildImageSuccessfully(c, name, withDockerfile(dockerFile)) |
| 5990 |
- result := buildImageNew(name, withDockerfile(dockerFile)) |
|
| 5990 |
+ result := buildImage(name, withDockerfile(dockerFile)) |
|
| 5991 | 5991 |
result.Assert(c, icmd.Success) |
| 5992 | 5992 |
c.Assert(strings.Count(result.Combined(), "Using cache"), checker.Equals, 1) |
| 5993 | 5993 |
} |
| ... | ... |
@@ -5995,7 +5738,7 @@ func (s *DockerSuite) TestBuildWorkdirCmd(c *check.C) {
|
| 5995 | 5995 |
// FIXME(vdemeester) should be a unit test |
| 5996 | 5996 |
func (s *DockerSuite) TestBuildLineErrorOnBuild(c *check.C) {
|
| 5997 | 5997 |
name := "test_build_line_error_onbuild" |
| 5998 |
- buildImageNew(name, withDockerfile(`FROM busybox |
|
| 5998 |
+ buildImage(name, withDockerfile(`FROM busybox |
|
| 5999 | 5999 |
ONBUILD |
| 6000 | 6000 |
`)).Assert(c, icmd.Expected{
|
| 6001 | 6001 |
ExitCode: 1, |
| ... | ... |
@@ -6006,7 +5749,7 @@ func (s *DockerSuite) TestBuildLineErrorOnBuild(c *check.C) {
|
| 6006 | 6006 |
// FIXME(vdemeester) should be a unit test |
| 6007 | 6007 |
func (s *DockerSuite) TestBuildLineErrorUknownInstruction(c *check.C) {
|
| 6008 | 6008 |
name := "test_build_line_error_unknown_instruction" |
| 6009 |
- buildImageNew(name, withDockerfile(`FROM busybox |
|
| 6009 |
+ buildImage(name, withDockerfile(`FROM busybox |
|
| 6010 | 6010 |
RUN echo hello world |
| 6011 | 6011 |
NOINSTRUCTION echo ba |
| 6012 | 6012 |
RUN echo hello |
| ... | ... |
@@ -6020,7 +5763,7 @@ func (s *DockerSuite) TestBuildLineErrorUknownInstruction(c *check.C) {
|
| 6020 | 6020 |
// FIXME(vdemeester) should be a unit test |
| 6021 | 6021 |
func (s *DockerSuite) TestBuildLineErrorWithEmptyLines(c *check.C) {
|
| 6022 | 6022 |
name := "test_build_line_error_with_empty_lines" |
| 6023 |
- buildImageNew(name, withDockerfile(` |
|
| 6023 |
+ buildImage(name, withDockerfile(` |
|
| 6024 | 6024 |
FROM busybox |
| 6025 | 6025 |
|
| 6026 | 6026 |
RUN echo hello world |
| ... | ... |
@@ -6037,7 +5780,7 @@ func (s *DockerSuite) TestBuildLineErrorWithEmptyLines(c *check.C) {
|
| 6037 | 6037 |
// FIXME(vdemeester) should be a unit test |
| 6038 | 6038 |
func (s *DockerSuite) TestBuildLineErrorWithComments(c *check.C) {
|
| 6039 | 6039 |
name := "test_build_line_error_with_comments" |
| 6040 |
- buildImageNew(name, withDockerfile(`FROM busybox |
|
| 6040 |
+ buildImage(name, withDockerfile(`FROM busybox |
|
| 6041 | 6041 |
# This will print hello world |
| 6042 | 6042 |
# and then ba |
| 6043 | 6043 |
RUN echo hello world |
| ... | ... |
@@ -25,13 +25,11 @@ func (s *DockerSuite) TestBuildResourceConstraintsAreUsed(c *check.C) {
|
| 25 | 25 |
testRequires(c, cpuCfsQuota) |
| 26 | 26 |
name := "testbuildresourceconstraints" |
| 27 | 27 |
|
| 28 |
- ctx, err := fakeContext(` |
|
| 28 |
+ ctx := fakeContext(c, ` |
|
| 29 | 29 |
FROM hello-world:frozen |
| 30 | 30 |
RUN ["/hello"] |
| 31 | 31 |
`, map[string]string{})
|
| 32 |
- c.Assert(err, checker.IsNil) |
|
| 33 |
- |
|
| 34 |
- _, _, err = dockerCmdInDir(c, ctx.Dir, "build", "--no-cache", "--rm=false", "--memory=64m", "--memory-swap=-1", "--cpuset-cpus=0", "--cpuset-mems=0", "--cpu-shares=100", "--cpu-quota=8000", "--ulimit", "nofile=42", "-t", name, ".") |
|
| 32 |
+ _, _, err := dockerCmdInDir(c, ctx.Dir, "build", "--no-cache", "--rm=false", "--memory=64m", "--memory-swap=-1", "--cpuset-cpus=0", "--cpuset-mems=0", "--cpu-shares=100", "--cpu-quota=8000", "--ulimit", "nofile=42", "-t", name, ".") |
|
| 35 | 33 |
if err != nil {
|
| 36 | 34 |
c.Fatal(err) |
| 37 | 35 |
} |
| ... | ... |
@@ -114,9 +112,7 @@ func (s *DockerSuite) TestBuildAddChangeOwnership(c *check.C) {
|
| 114 | 114 |
|
| 115 | 115 |
defer ctx.Close() |
| 116 | 116 |
|
| 117 |
- if _, err := buildImageFromContext(name, ctx, true); err != nil {
|
|
| 118 |
- c.Fatalf("build failed to complete for TestBuildAddChangeOwnership: %v", err)
|
|
| 119 |
- } |
|
| 117 |
+ buildImageSuccessfully(c, name, withExternalBuildContext(ctx)) |
|
| 120 | 118 |
} |
| 121 | 119 |
|
| 122 | 120 |
// Test that an infinite sleep during a build is killed if the client disconnects. |
| ... | ... |
@@ -137,10 +133,7 @@ func (s *DockerSuite) TestBuildCancellationKillsSleep(c *check.C) {
|
| 137 | 137 |
defer observer.Stop() |
| 138 | 138 |
|
| 139 | 139 |
// (Note: one year, will never finish) |
| 140 |
- ctx, err := fakeContext("FROM busybox\nRUN sleep 31536000", nil)
|
|
| 141 |
- if err != nil {
|
|
| 142 |
- c.Fatal(err) |
|
| 143 |
- } |
|
| 140 |
+ ctx := fakeContext(c, "FROM busybox\nRUN sleep 31536000", nil) |
|
| 144 | 141 |
defer ctx.Close() |
| 145 | 142 |
|
| 146 | 143 |
buildCmd := exec.Command(dockerBinary, "build", "-t", name, ".") |
| ... | ... |
@@ -193,10 +193,9 @@ func (s *DockerRegistrySuite) TestBuildByDigest(c *check.C) {
|
| 193 | 193 |
|
| 194 | 194 |
// do the build |
| 195 | 195 |
name := "buildbydigest" |
| 196 |
- _, err = buildImage(name, fmt.Sprintf( |
|
| 196 |
+ buildImageSuccessfully(c, name, withDockerfile(fmt.Sprintf( |
|
| 197 | 197 |
`FROM %s |
| 198 |
- CMD ["/bin/echo", "Hello World"]`, imageReference), |
|
| 199 |
- true) |
|
| 198 |
+ CMD ["/bin/echo", "Hello World"]`, imageReference))) |
|
| 200 | 199 |
c.Assert(err, checker.IsNil) |
| 201 | 200 |
|
| 202 | 201 |
// get the build's image id |
| ... | ... |
@@ -417,20 +416,17 @@ func (s *DockerRegistrySuite) TestPsListContainersFilterAncestorImageByDigest(c |
| 417 | 417 |
|
| 418 | 418 |
// build an image from it |
| 419 | 419 |
imageName1 := "images_ps_filter_test" |
| 420 |
- _, err = buildImage(imageName1, fmt.Sprintf( |
|
| 420 |
+ buildImageSuccessfully(c, imageName1, withDockerfile(fmt.Sprintf( |
|
| 421 | 421 |
`FROM %s |
| 422 |
- LABEL match me 1`, imageReference), true) |
|
| 423 |
- c.Assert(err, checker.IsNil) |
|
| 422 |
+ LABEL match me 1`, imageReference))) |
|
| 424 | 423 |
|
| 425 | 424 |
// run a container based on that |
| 426 | 425 |
dockerCmd(c, "run", "--name=test1", imageReference, "echo", "hello") |
| 427 |
- expectedID, err := getIDByName("test1")
|
|
| 428 |
- c.Assert(err, check.IsNil) |
|
| 426 |
+ expectedID := getIDByName(c, "test1") |
|
| 429 | 427 |
|
| 430 | 428 |
// run a container based on the a descendant of that too |
| 431 | 429 |
dockerCmd(c, "run", "--name=test2", imageName1, "echo", "hello") |
| 432 |
- expectedID1, err := getIDByName("test2")
|
|
| 433 |
- c.Assert(err, check.IsNil) |
|
| 430 |
+ expectedID1 := getIDByName(c, "test2") |
|
| 434 | 431 |
|
| 435 | 432 |
expectedIDs := []string{expectedID, expectedID1}
|
| 436 | 433 |
|
| ... | ... |
@@ -204,12 +204,8 @@ func (s *DockerSuite) TestCreateLabels(c *check.C) {
|
| 204 | 204 |
|
| 205 | 205 |
func (s *DockerSuite) TestCreateLabelFromImage(c *check.C) {
|
| 206 | 206 |
imageName := "testcreatebuildlabel" |
| 207 |
- _, err := buildImage(imageName, |
|
| 208 |
- `FROM busybox |
|
| 209 |
- LABEL k1=v1 k2=v2`, |
|
| 210 |
- true) |
|
| 211 |
- |
|
| 212 |
- c.Assert(err, check.IsNil) |
|
| 207 |
+ buildImageSuccessfully(c, imageName, withDockerfile(`FROM busybox |
|
| 208 |
+ LABEL k1=v1 k2=v2`)) |
|
| 213 | 209 |
|
| 214 | 210 |
name := "test_create_labels_from_image" |
| 215 | 211 |
expected := map[string]string{"k2": "x", "k3": "v3", "k1": "v1"}
|
| ... | ... |
@@ -263,13 +259,9 @@ func (s *DockerSuite) TestCreateModeIpcContainer(c *check.C) {
|
| 263 | 263 |
|
| 264 | 264 |
func (s *DockerSuite) TestCreateByImageID(c *check.C) {
|
| 265 | 265 |
imageName := "testcreatebyimageid" |
| 266 |
- imageID, err := buildImage(imageName, |
|
| 267 |
- `FROM busybox |
|
| 268 |
- MAINTAINER dockerio`, |
|
| 269 |
- true) |
|
| 270 |
- if err != nil {
|
|
| 271 |
- c.Fatal(err) |
|
| 272 |
- } |
|
| 266 |
+ buildImageSuccessfully(c, imageName, withDockerfile(`FROM busybox |
|
| 267 |
+ MAINTAINER dockerio`)) |
|
| 268 |
+ imageID := getIDByName(c, imageName) |
|
| 273 | 269 |
truncatedImageID := stringid.TruncateID(imageID) |
| 274 | 270 |
|
| 275 | 271 |
dockerCmd(c, "create", imageID) |
| ... | ... |
@@ -444,16 +436,14 @@ RUN chmod 755 /entrypoint.sh |
| 444 | 444 |
ENTRYPOINT ["/entrypoint.sh"] |
| 445 | 445 |
CMD echo foobar` |
| 446 | 446 |
|
| 447 |
- ctx, err := fakeContext(dockerfile, map[string]string{
|
|
| 447 |
+ ctx := fakeContext(c, dockerfile, map[string]string{
|
|
| 448 | 448 |
"entrypoint.sh": `#!/bin/sh |
| 449 | 449 |
echo "I am an entrypoint" |
| 450 | 450 |
exec "$@"`, |
| 451 | 451 |
}) |
| 452 |
- c.Assert(err, check.IsNil) |
|
| 453 | 452 |
defer ctx.Close() |
| 454 | 453 |
|
| 455 |
- _, err = buildImageFromContext(name, ctx, true) |
|
| 456 |
- c.Assert(err, check.IsNil) |
|
| 454 |
+ buildImageSuccessfully(c, name, withExternalBuildContext(ctx)) |
|
| 457 | 455 |
|
| 458 | 456 |
out, _ := dockerCmd(c, "create", "--entrypoint=", name, "echo", "foo") |
| 459 | 457 |
id := strings.TrimSpace(out) |
| ... | ... |
@@ -379,11 +379,9 @@ func (s *DockerSuite) TestEventsFilterImageLabels(c *check.C) {
|
| 379 | 379 |
label := "io.docker.testing=image" |
| 380 | 380 |
|
| 381 | 381 |
// Build a test image. |
| 382 |
- _, err := buildImage(name, fmt.Sprintf(` |
|
| 382 |
+ buildImageSuccessfully(c, name, withDockerfile(fmt.Sprintf(` |
|
| 383 | 383 |
FROM busybox:latest |
| 384 |
- LABEL %s`, label), true) |
|
| 385 |
- c.Assert(err, checker.IsNil, check.Commentf("Couldn't create image"))
|
|
| 386 |
- |
|
| 384 |
+ LABEL %s`, label))) |
|
| 387 | 385 |
dockerCmd(c, "tag", name, "labelfiltertest:tag1") |
| 388 | 386 |
dockerCmd(c, "tag", name, "labelfiltertest:tag2") |
| 389 | 387 |
dockerCmd(c, "tag", "busybox:latest", "labelfiltertest:tag3") |
| ... | ... |
@@ -462,10 +460,10 @@ func (s *DockerSuite) TestEventsCommit(c *check.C) {
|
| 462 | 462 |
|
| 463 | 463 |
func (s *DockerSuite) TestEventsCopy(c *check.C) {
|
| 464 | 464 |
// Build a test image. |
| 465 |
- id, err := buildImage("cpimg", `
|
|
| 465 |
+ buildImageSuccessfully(c, "cpimg", withDockerfile(` |
|
| 466 | 466 |
FROM busybox |
| 467 |
- RUN echo HI > /file`, true) |
|
| 468 |
- c.Assert(err, checker.IsNil, check.Commentf("Couldn't create image"))
|
|
| 467 |
+ RUN echo HI > /file`)) |
|
| 468 |
+ id := getIDByName(c, "cpimg") |
|
| 469 | 469 |
|
| 470 | 470 |
// Create an empty test file. |
| 471 | 471 |
tempFile, err := ioutil.TempFile("", "test-events-copy-")
|
| ... | ... |
@@ -595,11 +593,9 @@ func (s *DockerSuite) TestEventsFilterType(c *check.C) {
|
| 595 | 595 |
label := "io.docker.testing=image" |
| 596 | 596 |
|
| 597 | 597 |
// Build a test image. |
| 598 |
- _, err := buildImage(name, fmt.Sprintf(` |
|
| 598 |
+ buildImageSuccessfully(c, name, withDockerfile(fmt.Sprintf(` |
|
| 599 | 599 |
FROM busybox:latest |
| 600 |
- LABEL %s`, label), true) |
|
| 601 |
- c.Assert(err, checker.IsNil, check.Commentf("Couldn't create image"))
|
|
| 602 |
- |
|
| 600 |
+ LABEL %s`, label))) |
|
| 603 | 601 |
dockerCmd(c, "tag", name, "labelfiltertest:tag1") |
| 604 | 602 |
dockerCmd(c, "tag", name, "labelfiltertest:tag2") |
| 605 | 603 |
dockerCmd(c, "tag", "busybox:latest", "labelfiltertest:tag3") |
| ... | ... |
@@ -310,11 +310,9 @@ func (s *DockerSuite) TestEventsImageUntagDelete(c *check.C) {
|
| 310 | 310 |
defer observer.Stop() |
| 311 | 311 |
|
| 312 | 312 |
name := "testimageevents" |
| 313 |
- imageID, err := buildImage(name, |
|
| 314 |
- `FROM scratch |
|
| 315 |
- MAINTAINER "docker"`, |
|
| 316 |
- true) |
|
| 317 |
- c.Assert(err, checker.IsNil) |
|
| 313 |
+ buildImageSuccessfully(c, name, withDockerfile(`FROM scratch |
|
| 314 |
+ MAINTAINER "docker"`)) |
|
| 315 |
+ imageID := getIDByName(c, name) |
|
| 318 | 316 |
c.Assert(deleteImages(name), checker.IsNil) |
| 319 | 317 |
|
| 320 | 318 |
testActions := map[string]chan bool{
|
| ... | ... |
@@ -473,13 +473,9 @@ func (s *DockerSuite) TestExecWithImageUser(c *check.C) {
|
| 473 | 473 |
// Not applicable on Windows |
| 474 | 474 |
testRequires(c, DaemonIsLinux) |
| 475 | 475 |
name := "testbuilduser" |
| 476 |
- _, err := buildImage(name, |
|
| 477 |
- `FROM busybox |
|
| 476 |
+ buildImageSuccessfully(c, name, withDockerfile(`FROM busybox |
|
| 478 | 477 |
RUN echo 'dockerio:x:1001:1001::/bin:/bin/false' >> /etc/passwd |
| 479 |
- USER dockerio`, |
|
| 480 |
- true) |
|
| 481 |
- c.Assert(err, checker.IsNil) |
|
| 482 |
- |
|
| 478 |
+ USER dockerio`)) |
|
| 483 | 479 |
dockerCmd(c, "run", "-d", "--name", "dockerioexec", name, "top") |
| 484 | 480 |
|
| 485 | 481 |
out, _ := dockerCmd(c, "exec", "dockerioexec", "whoami") |
| ... | ... |
@@ -40,16 +40,12 @@ func (s *DockerSuite) TestHealth(c *check.C) {
|
| 40 | 40 |
testRequires(c, DaemonIsLinux) // busybox doesn't work on Windows |
| 41 | 41 |
|
| 42 | 42 |
imageName := "testhealth" |
| 43 |
- _, err := buildImage(imageName, |
|
| 44 |
- `FROM busybox |
|
| 43 |
+ buildImageSuccessfully(c, imageName, withDockerfile(`FROM busybox |
|
| 45 | 44 |
RUN echo OK > /status |
| 46 | 45 |
CMD ["/bin/sleep", "120"] |
| 47 | 46 |
STOPSIGNAL SIGKILL |
| 48 | 47 |
HEALTHCHECK --interval=1s --timeout=30s \ |
| 49 |
- CMD cat /status`, |
|
| 50 |
- true) |
|
| 51 |
- |
|
| 52 |
- c.Check(err, check.IsNil) |
|
| 48 |
+ CMD cat /status`)) |
|
| 53 | 49 |
|
| 54 | 50 |
// No health status before starting |
| 55 | 51 |
name := "test_health" |
| ... | ... |
@@ -91,10 +87,8 @@ func (s *DockerSuite) TestHealth(c *check.C) {
|
| 91 | 91 |
dockerCmd(c, "rm", "noh") |
| 92 | 92 |
|
| 93 | 93 |
// Disable the check with a new build |
| 94 |
- _, err = buildImage("no_healthcheck",
|
|
| 95 |
- `FROM testhealth |
|
| 96 |
- HEALTHCHECK NONE`, true) |
|
| 97 |
- c.Check(err, check.IsNil) |
|
| 94 |
+ buildImageSuccessfully(c, "no_healthcheck", withDockerfile(`FROM testhealth |
|
| 95 |
+ HEALTHCHECK NONE`)) |
|
| 98 | 96 |
|
| 99 | 97 |
out, _ = dockerCmd(c, "inspect", "--format={{.ContainerConfig.Healthcheck.Test}}", "no_healthcheck")
|
| 100 | 98 |
c.Check(out, checker.Equals, "[NONE]\n") |
| ... | ... |
@@ -137,15 +131,12 @@ func (s *DockerSuite) TestHealth(c *check.C) {
|
| 137 | 137 |
dockerCmd(c, "rm", "-f", "test") |
| 138 | 138 |
|
| 139 | 139 |
// Check JSON-format |
| 140 |
- _, err = buildImage(imageName, |
|
| 141 |
- `FROM busybox |
|
| 140 |
+ buildImageSuccessfully(c, imageName, withDockerfile(`FROM busybox |
|
| 142 | 141 |
RUN echo OK > /status |
| 143 | 142 |
CMD ["/bin/sleep", "120"] |
| 144 | 143 |
STOPSIGNAL SIGKILL |
| 145 | 144 |
HEALTHCHECK --interval=1s --timeout=30s \ |
| 146 |
- CMD ["cat", "/my status"]`, |
|
| 147 |
- true) |
|
| 148 |
- c.Check(err, check.IsNil) |
|
| 145 |
+ CMD ["cat", "/my status"]`)) |
|
| 149 | 146 |
out, _ = dockerCmd(c, "inspect", |
| 150 | 147 |
"--format={{.Config.Healthcheck.Test}}", imageName)
|
| 151 | 148 |
c.Check(out, checker.Equals, "[CMD cat /my status]\n") |
| ... | ... |
@@ -14,7 +14,7 @@ import ( |
| 14 | 14 |
// sort is not predictable it doesn't always fail. |
| 15 | 15 |
func (s *DockerSuite) TestBuildHistory(c *check.C) {
|
| 16 | 16 |
name := "testbuildhistory" |
| 17 |
- _, err := buildImage(name, `FROM `+minimalBaseImage()+` |
|
| 17 |
+ buildImageSuccessfully(c, name, withDockerfile(`FROM `+minimalBaseImage()+` |
|
| 18 | 18 |
LABEL label.A="A" |
| 19 | 19 |
LABEL label.B="B" |
| 20 | 20 |
LABEL label.C="C" |
| ... | ... |
@@ -40,12 +40,9 @@ LABEL label.V="V" |
| 40 | 40 |
LABEL label.W="W" |
| 41 | 41 |
LABEL label.X="X" |
| 42 | 42 |
LABEL label.Y="Y" |
| 43 |
-LABEL label.Z="Z"`, |
|
| 44 |
- true) |
|
| 43 |
+LABEL label.Z="Z"`)) |
|
| 45 | 44 |
|
| 46 |
- c.Assert(err, checker.IsNil) |
|
| 47 |
- |
|
| 48 |
- out, _ := dockerCmd(c, "history", "testbuildhistory") |
|
| 45 |
+ out, _ := dockerCmd(c, "history", name) |
|
| 49 | 46 |
actualValues := strings.Split(out, "\n")[1:27] |
| 50 | 47 |
expectedValues := [26]string{"Z", "Y", "X", "W", "V", "U", "T", "S", "R", "Q", "P", "O", "N", "M", "L", "K", "J", "I", "H", "G", "F", "E", "D", "C", "B", "A"}
|
| 51 | 48 |
|
| ... | ... |
@@ -12,6 +12,7 @@ import ( |
| 12 | 12 |
|
| 13 | 13 |
"github.com/docker/docker/integration-cli/checker" |
| 14 | 14 |
"github.com/docker/docker/pkg/stringid" |
| 15 |
+ icmd "github.com/docker/docker/pkg/testutil/cmd" |
|
| 15 | 16 |
"github.com/go-check/check" |
| 16 | 17 |
) |
| 17 | 18 |
|
| ... | ... |
@@ -45,20 +46,17 @@ func (s *DockerSuite) TestImagesEnsureImageWithBadTagIsNotListed(c *check.C) {
|
| 45 | 45 |
} |
| 46 | 46 |
|
| 47 | 47 |
func (s *DockerSuite) TestImagesOrderedByCreationDate(c *check.C) {
|
| 48 |
- id1, err := buildImage("order:test_a",
|
|
| 49 |
- `FROM busybox |
|
| 50 |
- MAINTAINER dockerio1`, true) |
|
| 51 |
- c.Assert(err, checker.IsNil) |
|
| 48 |
+ buildImageSuccessfully(c, "order:test_a", withDockerfile(`FROM busybox |
|
| 49 |
+ MAINTAINER dockerio1`)) |
|
| 50 |
+ id1 := getIDByName(c, "order:test_a") |
|
| 52 | 51 |
time.Sleep(1 * time.Second) |
| 53 |
- id2, err := buildImage("order:test_c",
|
|
| 54 |
- `FROM busybox |
|
| 55 |
- MAINTAINER dockerio2`, true) |
|
| 56 |
- c.Assert(err, checker.IsNil) |
|
| 52 |
+ buildImageSuccessfully(c, "order:test_c", withDockerfile(`FROM busybox |
|
| 53 |
+ MAINTAINER dockerio2`)) |
|
| 54 |
+ id2 := getIDByName(c, "order:test_c") |
|
| 57 | 55 |
time.Sleep(1 * time.Second) |
| 58 |
- id3, err := buildImage("order:test_b",
|
|
| 59 |
- `FROM busybox |
|
| 60 |
- MAINTAINER dockerio3`, true) |
|
| 61 |
- c.Assert(err, checker.IsNil) |
|
| 56 |
+ buildImageSuccessfully(c, "order:test_b", withDockerfile(`FROM busybox |
|
| 57 |
+ MAINTAINER dockerio3`)) |
|
| 58 |
+ id3 := getIDByName(c, "order:test_b") |
|
| 62 | 59 |
|
| 63 | 60 |
out, _ := dockerCmd(c, "images", "-q", "--no-trunc") |
| 64 | 61 |
imgs := strings.Split(out, "\n") |
| ... | ... |
@@ -77,20 +75,17 @@ func (s *DockerSuite) TestImagesFilterLabelMatch(c *check.C) {
|
| 77 | 77 |
imageName1 := "images_filter_test1" |
| 78 | 78 |
imageName2 := "images_filter_test2" |
| 79 | 79 |
imageName3 := "images_filter_test3" |
| 80 |
- image1ID, err := buildImage(imageName1, |
|
| 81 |
- `FROM busybox |
|
| 82 |
- LABEL match me`, true) |
|
| 83 |
- c.Assert(err, check.IsNil) |
|
| 80 |
+ buildImageSuccessfully(c, imageName1, withDockerfile(`FROM busybox |
|
| 81 |
+ LABEL match me`)) |
|
| 82 |
+ image1ID := getIDByName(c, imageName1) |
|
| 84 | 83 |
|
| 85 |
- image2ID, err := buildImage(imageName2, |
|
| 86 |
- `FROM busybox |
|
| 87 |
- LABEL match="me too"`, true) |
|
| 88 |
- c.Assert(err, check.IsNil) |
|
| 84 |
+ buildImageSuccessfully(c, imageName2, withDockerfile(`FROM busybox |
|
| 85 |
+ LABEL match="me too"`)) |
|
| 86 |
+ image2ID := getIDByName(c, imageName2) |
|
| 89 | 87 |
|
| 90 |
- image3ID, err := buildImage(imageName3, |
|
| 91 |
- `FROM busybox |
|
| 92 |
- LABEL nomatch me`, true) |
|
| 93 |
- c.Assert(err, check.IsNil) |
|
| 88 |
+ buildImageSuccessfully(c, imageName3, withDockerfile(`FROM busybox |
|
| 89 |
+ LABEL nomatch me`)) |
|
| 90 |
+ image3ID := getIDByName(c, imageName3) |
|
| 94 | 91 |
|
| 95 | 92 |
out, _ := dockerCmd(c, "images", "--no-trunc", "-q", "-f", "label=match") |
| 96 | 93 |
out = strings.TrimSpace(out) |
| ... | ... |
@@ -117,15 +112,15 @@ func (s *DockerSuite) TestImagesFilterLabelWithCommit(c *check.C) {
|
| 117 | 117 |
} |
| 118 | 118 |
|
| 119 | 119 |
func (s *DockerSuite) TestImagesFilterSinceAndBefore(c *check.C) {
|
| 120 |
- imageID1, err := buildImage("image:1", `FROM `+minimalBaseImage()+`
|
|
| 121 |
-LABEL number=1`, true) |
|
| 122 |
- c.Assert(err, checker.IsNil) |
|
| 123 |
- imageID2, err := buildImage("image:2", `FROM `+minimalBaseImage()+`
|
|
| 124 |
-LABEL number=2`, true) |
|
| 125 |
- c.Assert(err, checker.IsNil) |
|
| 126 |
- imageID3, err := buildImage("image:3", `FROM `+minimalBaseImage()+`
|
|
| 127 |
-LABEL number=3`, true) |
|
| 128 |
- c.Assert(err, checker.IsNil) |
|
| 120 |
+ buildImageSuccessfully(c, "image:1", withDockerfile(`FROM `+minimalBaseImage()+` |
|
| 121 |
+LABEL number=1`)) |
|
| 122 |
+ imageID1 := getIDByName(c, "image:1") |
|
| 123 |
+ buildImageSuccessfully(c, "image:2", withDockerfile(`FROM `+minimalBaseImage()+` |
|
| 124 |
+LABEL number=2`)) |
|
| 125 |
+ imageID2 := getIDByName(c, "image:2") |
|
| 126 |
+ buildImageSuccessfully(c, "image:3", withDockerfile(`FROM `+minimalBaseImage()+` |
|
| 127 |
+LABEL number=3`)) |
|
| 128 |
+ imageID3 := getIDByName(c, "image:3") |
|
| 129 | 129 |
|
| 130 | 130 |
expected := []string{imageID3, imageID2}
|
| 131 | 131 |
|
| ... | ... |
@@ -185,13 +180,16 @@ func assertImageList(out string, expected []string) bool {
|
| 185 | 185 |
return true |
| 186 | 186 |
} |
| 187 | 187 |
|
| 188 |
+// FIXME(vdemeester) should be a unit test on `docker image ls` |
|
| 188 | 189 |
func (s *DockerSuite) TestImagesFilterSpaceTrimCase(c *check.C) {
|
| 189 | 190 |
imageName := "images_filter_test" |
| 190 |
- buildImage(imageName, |
|
| 191 |
- `FROM busybox |
|
| 191 |
+ // Build a image and fail to build so that we have dangling images ? |
|
| 192 |
+ buildImage(imageName, withDockerfile(`FROM busybox |
|
| 192 | 193 |
RUN touch /test/foo |
| 193 | 194 |
RUN touch /test/bar |
| 194 |
- RUN touch /test/baz`, true) |
|
| 195 |
+ RUN touch /test/baz`)).Assert(c, icmd.Expected{
|
|
| 196 |
+ ExitCode: 1, |
|
| 197 |
+ }) |
|
| 195 | 198 |
|
| 196 | 199 |
filters := []string{
|
| 197 | 200 |
"dangling=true", |
| ... | ... |
@@ -250,6 +248,7 @@ func (s *DockerSuite) TestImagesEnsureDanglingImageOnlyListedOnce(c *check.C) {
|
| 250 | 250 |
|
| 251 | 251 |
} |
| 252 | 252 |
|
| 253 |
+// FIXME(vdemeester) should be a unit test for `docker image ls` |
|
| 253 | 254 |
func (s *DockerSuite) TestImagesWithIncorrectFilter(c *check.C) {
|
| 254 | 255 |
out, _, err := dockerCmdWithError("images", "-f", "dangling=invalid")
|
| 255 | 256 |
c.Assert(err, check.NotNil) |
| ... | ... |
@@ -261,32 +260,33 @@ func (s *DockerSuite) TestImagesEnsureOnlyHeadsImagesShown(c *check.C) {
|
| 261 | 261 |
FROM busybox |
| 262 | 262 |
MAINTAINER docker |
| 263 | 263 |
ENV foo bar` |
| 264 |
- |
|
| 265 |
- head, out, err := buildImageWithOut("scratch-image", dockerfile, false)
|
|
| 266 |
- c.Assert(err, check.IsNil) |
|
| 264 |
+ name := "scratch-image" |
|
| 265 |
+ result := buildImage(name, withDockerfile(dockerfile)) |
|
| 266 |
+ result.Assert(c, icmd.Success) |
|
| 267 |
+ id := getIDByName(c, name) |
|
| 267 | 268 |
|
| 268 | 269 |
// this is just the output of docker build |
| 269 | 270 |
// we're interested in getting the image id of the MAINTAINER instruction |
| 270 | 271 |
// and that's located at output, line 5, from 7 to end |
| 271 |
- split := strings.Split(out, "\n") |
|
| 272 |
+ split := strings.Split(result.Combined(), "\n") |
|
| 272 | 273 |
intermediate := strings.TrimSpace(split[5][7:]) |
| 273 | 274 |
|
| 274 |
- out, _ = dockerCmd(c, "images") |
|
| 275 |
+ out, _ := dockerCmd(c, "images") |
|
| 275 | 276 |
// images shouldn't show non-heads images |
| 276 | 277 |
c.Assert(out, checker.Not(checker.Contains), intermediate) |
| 277 | 278 |
// images should contain final built images |
| 278 |
- c.Assert(out, checker.Contains, stringid.TruncateID(head)) |
|
| 279 |
+ c.Assert(out, checker.Contains, stringid.TruncateID(id)) |
|
| 279 | 280 |
} |
| 280 | 281 |
|
| 281 | 282 |
func (s *DockerSuite) TestImagesEnsureImagesFromScratchShown(c *check.C) {
|
| 282 | 283 |
testRequires(c, DaemonIsLinux) // Windows does not support FROM scratch |
| 283 |
- |
|
| 284 | 284 |
dockerfile := ` |
| 285 | 285 |
FROM scratch |
| 286 | 286 |
MAINTAINER docker` |
| 287 | 287 |
|
| 288 |
- id, _, err := buildImageWithOut("scratch-image", dockerfile, false)
|
|
| 289 |
- c.Assert(err, check.IsNil) |
|
| 288 |
+ name := "scratch-image" |
|
| 289 |
+ buildImageSuccessfully(c, name, withDockerfile(dockerfile)) |
|
| 290 |
+ id := getIDByName(c, name) |
|
| 290 | 291 |
|
| 291 | 292 |
out, _ := dockerCmd(c, "images") |
| 292 | 293 |
// images should contain images built from scratch |
| ... | ... |
@@ -299,9 +299,10 @@ func (s *DockerSuite) TestImagesEnsureImagesFromBusyboxShown(c *check.C) {
|
| 299 | 299 |
dockerfile := ` |
| 300 | 300 |
FROM busybox |
| 301 | 301 |
MAINTAINER docker` |
| 302 |
+ name := "busybox-image" |
|
| 302 | 303 |
|
| 303 |
- id, _, err := buildImageWithOut("busybox-image", dockerfile, false)
|
|
| 304 |
- c.Assert(err, check.IsNil) |
|
| 304 |
+ buildImageSuccessfully(c, name, withDockerfile(dockerfile)) |
|
| 305 |
+ id := getIDByName(c, name) |
|
| 305 | 306 |
|
| 306 | 307 |
out, _ := dockerCmd(c, "images") |
| 307 | 308 |
// images should contain images built from busybox |
| ... | ... |
@@ -130,8 +130,7 @@ func (s *DockerSuite) TestLogsTail(c *check.C) {
|
| 130 | 130 |
|
| 131 | 131 |
func (s *DockerSuite) TestLogsFollowStopped(c *check.C) {
|
| 132 | 132 |
dockerCmd(c, "run", "--name=test", "busybox", "echo", "hello") |
| 133 |
- id, err := getIDByName("test")
|
|
| 134 |
- c.Assert(err, check.IsNil) |
|
| 133 |
+ id := getIDByName(c, "test") |
|
| 135 | 134 |
|
| 136 | 135 |
logsCmd := exec.Command(dockerBinary, "logs", "-f", id) |
| 137 | 136 |
c.Assert(logsCmd.Start(), checker.IsNil) |
| ... | ... |
@@ -157,8 +157,7 @@ func (s *DockerSuite) TestPsListContainersSize(c *check.C) {
|
| 157 | 157 |
|
| 158 | 158 |
name := "test_size" |
| 159 | 159 |
dockerCmd(c, "run", "--name", name, "busybox", "sh", "-c", "echo 1 > test") |
| 160 |
- id, err := getIDByName(name) |
|
| 161 |
- c.Assert(err, checker.IsNil) |
|
| 160 |
+ id := getIDByName(c, name) |
|
| 162 | 161 |
|
| 163 | 162 |
runCmd := exec.Command(dockerBinary, "ps", "-s", "-n=1") |
| 164 | 163 |
var out string |
| ... | ... |
@@ -286,8 +285,7 @@ func (s *DockerSuite) TestPsListContainersFilterID(c *check.C) {
|
| 286 | 286 |
func (s *DockerSuite) TestPsListContainersFilterName(c *check.C) {
|
| 287 | 287 |
// start container |
| 288 | 288 |
dockerCmd(c, "run", "--name=a_name_to_match", "busybox") |
| 289 |
- id, err := getIDByName("a_name_to_match")
|
|
| 290 |
- c.Assert(err, check.IsNil) |
|
| 289 |
+ id := getIDByName(c, "a_name_to_match") |
|
| 291 | 290 |
|
| 292 | 291 |
// start another container |
| 293 | 292 |
runSleepingContainer(c, "--name=b_name_to_match") |
| ... | ... |
@@ -309,47 +307,39 @@ func (s *DockerSuite) TestPsListContainersFilterName(c *check.C) {
|
| 309 | 309 |
func (s *DockerSuite) TestPsListContainersFilterAncestorImage(c *check.C) {
|
| 310 | 310 |
// Build images |
| 311 | 311 |
imageName1 := "images_ps_filter_test1" |
| 312 |
- imageID1, err := buildImage(imageName1, |
|
| 313 |
- `FROM busybox |
|
| 314 |
- LABEL match me 1`, true) |
|
| 315 |
- c.Assert(err, checker.IsNil) |
|
| 312 |
+ buildImageSuccessfully(c, imageName1, withDockerfile(`FROM busybox |
|
| 313 |
+ LABEL match me 1`)) |
|
| 314 |
+ imageID1 := getIDByName(c, imageName1) |
|
| 316 | 315 |
|
| 317 | 316 |
imageName1Tagged := "images_ps_filter_test1:tag" |
| 318 |
- imageID1Tagged, err := buildImage(imageName1Tagged, |
|
| 319 |
- `FROM busybox |
|
| 320 |
- LABEL match me 1 tagged`, true) |
|
| 321 |
- c.Assert(err, checker.IsNil) |
|
| 317 |
+ buildImageSuccessfully(c, imageName1Tagged, withDockerfile(`FROM busybox |
|
| 318 |
+ LABEL match me 1 tagged`)) |
|
| 319 |
+ imageID1Tagged := getIDByName(c, imageName1Tagged) |
|
| 322 | 320 |
|
| 323 | 321 |
imageName2 := "images_ps_filter_test2" |
| 324 |
- imageID2, err := buildImage(imageName2, |
|
| 325 |
- fmt.Sprintf(`FROM %s |
|
| 326 |
- LABEL match me 2`, imageName1), true) |
|
| 327 |
- c.Assert(err, checker.IsNil) |
|
| 322 |
+ buildImageSuccessfully(c, imageName2, withDockerfile(fmt.Sprintf(`FROM %s |
|
| 323 |
+ LABEL match me 2`, imageName1))) |
|
| 324 |
+ imageID2 := getIDByName(c, imageName2) |
|
| 328 | 325 |
|
| 329 | 326 |
// start containers |
| 330 | 327 |
dockerCmd(c, "run", "--name=first", "busybox", "echo", "hello") |
| 331 |
- firstID, err := getIDByName("first")
|
|
| 332 |
- c.Assert(err, check.IsNil) |
|
| 328 |
+ firstID := getIDByName(c, "first") |
|
| 333 | 329 |
|
| 334 | 330 |
// start another container |
| 335 | 331 |
dockerCmd(c, "run", "--name=second", "busybox", "echo", "hello") |
| 336 |
- secondID, err := getIDByName("second")
|
|
| 337 |
- c.Assert(err, check.IsNil) |
|
| 332 |
+ secondID := getIDByName(c, "second") |
|
| 338 | 333 |
|
| 339 | 334 |
// start third container |
| 340 | 335 |
dockerCmd(c, "run", "--name=third", imageName1, "echo", "hello") |
| 341 |
- thirdID, err := getIDByName("third")
|
|
| 342 |
- c.Assert(err, check.IsNil) |
|
| 336 |
+ thirdID := getIDByName(c, "third") |
|
| 343 | 337 |
|
| 344 | 338 |
// start fourth container |
| 345 | 339 |
dockerCmd(c, "run", "--name=fourth", imageName1Tagged, "echo", "hello") |
| 346 |
- fourthID, err := getIDByName("fourth")
|
|
| 347 |
- c.Assert(err, check.IsNil) |
|
| 340 |
+ fourthID := getIDByName(c, "fourth") |
|
| 348 | 341 |
|
| 349 | 342 |
// start fifth container |
| 350 | 343 |
dockerCmd(c, "run", "--name=fifth", imageName2, "echo", "hello") |
| 351 |
- fifthID, err := getIDByName("fifth")
|
|
| 352 |
- c.Assert(err, check.IsNil) |
|
| 344 |
+ fifthID := getIDByName(c, "fifth") |
|
| 353 | 345 |
|
| 354 | 346 |
var filterTestSuite = []struct {
|
| 355 | 347 |
filterName string |
| ... | ... |
@@ -410,18 +400,15 @@ func checkPsAncestorFilterOutput(c *check.C, out string, filterName string, expe |
| 410 | 410 |
func (s *DockerSuite) TestPsListContainersFilterLabel(c *check.C) {
|
| 411 | 411 |
// start container |
| 412 | 412 |
dockerCmd(c, "run", "--name=first", "-l", "match=me", "-l", "second=tag", "busybox") |
| 413 |
- firstID, err := getIDByName("first")
|
|
| 414 |
- c.Assert(err, check.IsNil) |
|
| 413 |
+ firstID := getIDByName(c, "first") |
|
| 415 | 414 |
|
| 416 | 415 |
// start another container |
| 417 | 416 |
dockerCmd(c, "run", "--name=second", "-l", "match=me too", "busybox") |
| 418 |
- secondID, err := getIDByName("second")
|
|
| 419 |
- c.Assert(err, check.IsNil) |
|
| 417 |
+ secondID := getIDByName(c, "second") |
|
| 420 | 418 |
|
| 421 | 419 |
// start third container |
| 422 | 420 |
dockerCmd(c, "run", "--name=third", "-l", "nomatch=me", "busybox") |
| 423 |
- thirdID, err := getIDByName("third")
|
|
| 424 |
- c.Assert(err, check.IsNil) |
|
| 421 |
+ thirdID := getIDByName(c, "third") |
|
| 425 | 422 |
|
| 426 | 423 |
// filter containers by exact match |
| 427 | 424 |
out, _ := dockerCmd(c, "ps", "-a", "-q", "--no-trunc", "--filter=label=match=me") |
| ... | ... |
@@ -450,23 +437,19 @@ func (s *DockerSuite) TestPsListContainersFilterExited(c *check.C) {
|
| 450 | 450 |
runSleepingContainer(c, "--name=sleep") |
| 451 | 451 |
|
| 452 | 452 |
dockerCmd(c, "run", "--name", "zero1", "busybox", "true") |
| 453 |
- firstZero, err := getIDByName("zero1")
|
|
| 454 |
- c.Assert(err, checker.IsNil) |
|
| 453 |
+ firstZero := getIDByName(c, "zero1") |
|
| 455 | 454 |
|
| 456 | 455 |
dockerCmd(c, "run", "--name", "zero2", "busybox", "true") |
| 457 |
- secondZero, err := getIDByName("zero2")
|
|
| 458 |
- c.Assert(err, checker.IsNil) |
|
| 456 |
+ secondZero := getIDByName(c, "zero2") |
|
| 459 | 457 |
|
| 460 | 458 |
out, _, err := dockerCmdWithError("run", "--name", "nonzero1", "busybox", "false")
|
| 461 | 459 |
c.Assert(err, checker.NotNil, check.Commentf("Should fail.", out, err))
|
| 462 | 460 |
|
| 463 |
- firstNonZero, err := getIDByName("nonzero1")
|
|
| 464 |
- c.Assert(err, checker.IsNil) |
|
| 461 |
+ firstNonZero := getIDByName(c, "nonzero1") |
|
| 465 | 462 |
|
| 466 | 463 |
out, _, err = dockerCmdWithError("run", "--name", "nonzero2", "busybox", "false")
|
| 467 | 464 |
c.Assert(err, checker.NotNil, check.Commentf("Should fail.", out, err))
|
| 468 |
- secondNonZero, err := getIDByName("nonzero2")
|
|
| 469 |
- c.Assert(err, checker.IsNil) |
|
| 465 |
+ secondNonZero := getIDByName(c, "nonzero2") |
|
| 470 | 466 |
|
| 471 | 467 |
// filter containers by exited=0 |
| 472 | 468 |
out, _ = dockerCmd(c, "ps", "-a", "-q", "--no-trunc", "--filter=exited=0") |
| ... | ... |
@@ -671,8 +654,7 @@ func (s *DockerSuite) TestPsImageIDAfterUpdate(c *check.C) {
|
| 671 | 671 |
|
| 672 | 672 |
icmd.RunCommand(dockerBinary, "tag", "busybox:latest", originalImageName).Assert(c, icmd.Success) |
| 673 | 673 |
|
| 674 |
- originalImageID, err := getIDByName(originalImageName) |
|
| 675 |
- c.Assert(err, checker.IsNil) |
|
| 674 |
+ originalImageID := getIDByName(c, originalImageName) |
|
| 676 | 675 |
|
| 677 | 676 |
result := icmd.RunCommand(dockerBinary, append([]string{"run", "-d", originalImageName}, sleepCommandForDaemonPlatform()...)...)
|
| 678 | 677 |
result.Assert(c, icmd.Success) |
| ... | ... |
@@ -65,14 +65,13 @@ func testConcurrentPullWholeRepo(c *check.C) {
|
| 65 | 65 |
repos := []string{}
|
| 66 | 66 |
for _, tag := range []string{"recent", "fresh", "todays"} {
|
| 67 | 67 |
repo := fmt.Sprintf("%v:%v", repoName, tag)
|
| 68 |
- _, err := buildImage(repo, fmt.Sprintf(` |
|
| 68 |
+ buildImageSuccessfully(c, repo, withDockerfile(fmt.Sprintf(` |
|
| 69 | 69 |
FROM busybox |
| 70 | 70 |
ENTRYPOINT ["/bin/echo"] |
| 71 | 71 |
ENV FOO foo |
| 72 | 72 |
ENV BAR bar |
| 73 | 73 |
CMD echo %s |
| 74 |
- `, repo), true) |
|
| 75 |
- c.Assert(err, checker.IsNil) |
|
| 74 |
+ `, repo))) |
|
| 76 | 75 |
dockerCmd(c, "push", repo) |
| 77 | 76 |
repos = append(repos, repo) |
| 78 | 77 |
} |
| ... | ... |
@@ -154,14 +153,13 @@ func testConcurrentPullMultipleTags(c *check.C) {
|
| 154 | 154 |
repos := []string{}
|
| 155 | 155 |
for _, tag := range []string{"recent", "fresh", "todays"} {
|
| 156 | 156 |
repo := fmt.Sprintf("%v:%v", repoName, tag)
|
| 157 |
- _, err := buildImage(repo, fmt.Sprintf(` |
|
| 157 |
+ buildImageSuccessfully(c, repo, withDockerfile(fmt.Sprintf(` |
|
| 158 | 158 |
FROM busybox |
| 159 | 159 |
ENTRYPOINT ["/bin/echo"] |
| 160 | 160 |
ENV FOO foo |
| 161 | 161 |
ENV BAR bar |
| 162 | 162 |
CMD echo %s |
| 163 |
- `, repo), true) |
|
| 164 |
- c.Assert(err, checker.IsNil) |
|
| 163 |
+ `, repo))) |
|
| 165 | 164 |
dockerCmd(c, "push", repo) |
| 166 | 165 |
repos = append(repos, repo) |
| 167 | 166 |
} |
| ... | ... |
@@ -209,21 +207,15 @@ func testPullIDStability(c *check.C) {
|
| 209 | 209 |
derivedImage := privateRegistryURL + "/dockercli/id-stability" |
| 210 | 210 |
baseImage := "busybox" |
| 211 | 211 |
|
| 212 |
- _, err := buildImage(derivedImage, fmt.Sprintf(` |
|
| 212 |
+ buildImageSuccessfully(c, derivedImage, withDockerfile(fmt.Sprintf(` |
|
| 213 | 213 |
FROM %s |
| 214 | 214 |
ENV derived true |
| 215 | 215 |
ENV asdf true |
| 216 | 216 |
RUN dd if=/dev/zero of=/file bs=1024 count=1024 |
| 217 | 217 |
CMD echo %s |
| 218 |
- `, baseImage, derivedImage), true) |
|
| 219 |
- if err != nil {
|
|
| 220 |
- c.Fatal(err) |
|
| 221 |
- } |
|
| 218 |
+ `, baseImage, derivedImage))) |
|
| 222 | 219 |
|
| 223 |
- originalID, err := getIDByName(derivedImage) |
|
| 224 |
- if err != nil {
|
|
| 225 |
- c.Fatalf("error inspecting: %v", err)
|
|
| 226 |
- } |
|
| 220 |
+ originalID := getIDByName(c, derivedImage) |
|
| 227 | 221 |
dockerCmd(c, "push", derivedImage) |
| 228 | 222 |
|
| 229 | 223 |
// Pull |
| ... | ... |
@@ -232,10 +224,7 @@ func testPullIDStability(c *check.C) {
|
| 232 | 232 |
c.Fatalf("repull redownloaded a layer: %s", out)
|
| 233 | 233 |
} |
| 234 | 234 |
|
| 235 |
- derivedIDAfterPull, err := getIDByName(derivedImage) |
|
| 236 |
- if err != nil {
|
|
| 237 |
- c.Fatalf("error inspecting: %v", err)
|
|
| 238 |
- } |
|
| 235 |
+ derivedIDAfterPull := getIDByName(c, derivedImage) |
|
| 239 | 236 |
|
| 240 | 237 |
if derivedIDAfterPull != originalID {
|
| 241 | 238 |
c.Fatal("image's ID unexpectedly changed after a repush/repull")
|
| ... | ... |
@@ -252,17 +241,11 @@ func testPullIDStability(c *check.C) {
|
| 252 | 252 |
dockerCmd(c, "rmi", derivedImage) |
| 253 | 253 |
dockerCmd(c, "pull", derivedImage) |
| 254 | 254 |
|
| 255 |
- derivedIDAfterPull, err = getIDByName(derivedImage) |
|
| 256 |
- if err != nil {
|
|
| 257 |
- c.Fatalf("error inspecting: %v", err)
|
|
| 258 |
- } |
|
| 255 |
+ derivedIDAfterPull = getIDByName(c, derivedImage) |
|
| 259 | 256 |
|
| 260 | 257 |
if derivedIDAfterPull != originalID {
|
| 261 | 258 |
c.Fatal("image's ID unexpectedly changed after a repush/repull")
|
| 262 | 259 |
} |
| 263 |
- if err != nil {
|
|
| 264 |
- c.Fatalf("error inspecting: %v", err)
|
|
| 265 |
- } |
|
| 266 | 260 |
|
| 267 | 261 |
// Make sure the image still runs |
| 268 | 262 |
out, _ = dockerCmd(c, "run", "--rm", derivedImage) |
| ... | ... |
@@ -283,14 +266,9 @@ func (s *DockerSchema1RegistrySuite) TestPullIDStability(c *check.C) {
|
| 283 | 283 |
func testPullNoLayers(c *check.C) {
|
| 284 | 284 |
repoName := fmt.Sprintf("%v/dockercli/scratch", privateRegistryURL)
|
| 285 | 285 |
|
| 286 |
- _, err := buildImage(repoName, ` |
|
| 286 |
+ buildImageSuccessfully(c, repoName, withDockerfile(` |
|
| 287 | 287 |
FROM scratch |
| 288 |
- ENV foo bar`, |
|
| 289 |
- true) |
|
| 290 |
- if err != nil {
|
|
| 291 |
- c.Fatal(err) |
|
| 292 |
- } |
|
| 293 |
- |
|
| 288 |
+ ENV foo bar`)) |
|
| 294 | 289 |
dockerCmd(c, "push", repoName) |
| 295 | 290 |
dockerCmd(c, "rmi", repoName) |
| 296 | 291 |
dockerCmd(c, "pull", repoName) |
| ... | ... |
@@ -149,11 +149,10 @@ func (s *DockerTrustSuite) TestTrustedOfflinePull(c *check.C) {
|
| 149 | 149 |
func (s *DockerTrustSuite) TestTrustedPullDelete(c *check.C) {
|
| 150 | 150 |
repoName := fmt.Sprintf("%v/dockercli/%s:latest", privateRegistryURL, "trusted-pull-delete")
|
| 151 | 151 |
// tag the image and upload it to the private registry |
| 152 |
- _, err := buildImage(repoName, ` |
|
| 152 |
+ buildImageSuccessfully(c, repoName, withDockerfile(` |
|
| 153 | 153 |
FROM busybox |
| 154 | 154 |
CMD echo trustedpulldelete |
| 155 |
- `, true) |
|
| 156 |
- |
|
| 155 |
+ `)) |
|
| 157 | 156 |
icmd.RunCmd(icmd.Command(dockerBinary, "push", repoName), trustedCmd).Assert(c, SuccessSigningAndPushing) |
| 158 | 157 |
|
| 159 | 158 |
dockerCmd(c, "rmi", repoName) |
| ... | ... |
@@ -176,7 +175,7 @@ func (s *DockerTrustSuite) TestTrustedPullDelete(c *check.C) {
|
| 176 | 176 |
// rmi of tag should also remove the digest reference |
| 177 | 177 |
dockerCmd(c, "rmi", repoName) |
| 178 | 178 |
|
| 179 |
- _, err = inspectFieldWithError(imageByDigest, "Id") |
|
| 179 |
+ _, err := inspectFieldWithError(imageByDigest, "Id") |
|
| 180 | 180 |
c.Assert(err, checker.NotNil, check.Commentf("digest reference should have been removed"))
|
| 181 | 181 |
|
| 182 | 182 |
_, err = inspectFieldWithError(imageID, "Id") |
| ... | ... |
@@ -161,14 +161,13 @@ func testConcurrentPush(c *check.C) {
|
| 161 | 161 |
repos := []string{}
|
| 162 | 162 |
for _, tag := range []string{"push1", "push2", "push3"} {
|
| 163 | 163 |
repo := fmt.Sprintf("%v:%v", repoName, tag)
|
| 164 |
- _, err := buildImage(repo, fmt.Sprintf(` |
|
| 164 |
+ buildImageSuccessfully(c, repo, withDockerfile(fmt.Sprintf(` |
|
| 165 | 165 |
FROM busybox |
| 166 | 166 |
ENTRYPOINT ["/bin/echo"] |
| 167 | 167 |
ENV FOO foo |
| 168 | 168 |
ENV BAR bar |
| 169 | 169 |
CMD echo %s |
| 170 |
-`, repo), true) |
|
| 171 |
- c.Assert(err, checker.IsNil) |
|
| 170 |
+`, repo))) |
|
| 172 | 171 |
repos = append(repos, repo) |
| 173 | 172 |
} |
| 174 | 173 |
|
| ... | ... |
@@ -12,8 +12,7 @@ import ( |
| 12 | 12 |
|
| 13 | 13 |
func (s *DockerSuite) TestRestartStoppedContainer(c *check.C) {
|
| 14 | 14 |
dockerCmd(c, "run", "--name=test", "busybox", "echo", "foobar") |
| 15 |
- cleanedContainerID, err := getIDByName("test")
|
|
| 16 |
- c.Assert(err, check.IsNil) |
|
| 15 |
+ cleanedContainerID := getIDByName(c, "test") |
|
| 17 | 16 |
|
| 18 | 17 |
out, _ := dockerCmd(c, "logs", cleanedContainerID) |
| 19 | 18 |
c.Assert(out, checker.Equals, "foobar\n") |
| ... | ... |
@@ -21,7 +20,7 @@ func (s *DockerSuite) TestRestartStoppedContainer(c *check.C) {
|
| 21 | 21 |
dockerCmd(c, "restart", cleanedContainerID) |
| 22 | 22 |
|
| 23 | 23 |
// Wait until the container has stopped |
| 24 |
- err = waitInspect(cleanedContainerID, "{{.State.Running}}", "false", 20*time.Second)
|
|
| 24 |
+ err := waitInspect(cleanedContainerID, "{{.State.Running}}", "false", 20*time.Second)
|
|
| 25 | 25 |
c.Assert(err, checker.IsNil) |
| 26 | 26 |
|
| 27 | 27 |
out, _ = dockerCmd(c, "logs", cleanedContainerID) |
| ... | ... |
@@ -58,13 +58,12 @@ func (s *DockerSuite) TestRmContainerOrphaning(c *check.C) {
|
| 58 | 58 |
MAINTAINER Integration Tests` |
| 59 | 59 |
|
| 60 | 60 |
// build first dockerfile |
| 61 |
- img1, err := buildImage(img, dockerfile1, true) |
|
| 62 |
- c.Assert(err, check.IsNil, check.Commentf("Could not build image %s", img))
|
|
| 61 |
+ buildImageSuccessfully(c, img, withDockerfile(dockerfile1)) |
|
| 62 |
+ img1 := getIDByName(c, img) |
|
| 63 | 63 |
// run container on first image |
| 64 | 64 |
dockerCmd(c, "run", img) |
| 65 | 65 |
// rebuild dockerfile with a small addition at the end |
| 66 |
- _, err = buildImage(img, dockerfile2, true) |
|
| 67 |
- c.Assert(err, check.IsNil, check.Commentf("Could not rebuild image %s", img))
|
|
| 66 |
+ buildImageSuccessfully(c, img, withDockerfile(dockerfile2)) |
|
| 68 | 67 |
// try to remove the image, should not error out. |
| 69 | 68 |
out, _, err := dockerCmdWithError("rmi", img)
|
| 70 | 69 |
c.Assert(err, check.IsNil, check.Commentf("Expected to removing the image, but failed: %s", out))
|
| ... | ... |
@@ -147,8 +147,8 @@ func (s *DockerSuite) TestRmiImgIDForce(c *check.C) {
|
| 147 | 147 |
// See https://github.com/docker/docker/issues/14116 |
| 148 | 148 |
func (s *DockerSuite) TestRmiImageIDForceWithRunningContainersAndMultipleTags(c *check.C) {
|
| 149 | 149 |
dockerfile := "FROM busybox\nRUN echo test 14116\n" |
| 150 |
- imgID, err := buildImage("test-14116", dockerfile, false)
|
|
| 151 |
- c.Assert(err, checker.IsNil) |
|
| 150 |
+ buildImageSuccessfully(c, "test-14116", withDockerfile(dockerfile)) |
|
| 151 |
+ imgID := getIDByName(c, "test-14116") |
|
| 152 | 152 |
|
| 153 | 153 |
newTag := "newtag" |
| 154 | 154 |
dockerCmd(c, "tag", imgID, newTag) |
| ... | ... |
@@ -205,14 +205,8 @@ func (s *DockerSuite) TestRmiForceWithMultipleRepositories(c *check.C) {
|
| 205 | 205 |
tag1 := imageName + ":tag1" |
| 206 | 206 |
tag2 := imageName + ":tag2" |
| 207 | 207 |
|
| 208 |
- _, err := buildImage(tag1, |
|
| 209 |
- `FROM busybox |
|
| 210 |
- MAINTAINER "docker"`, |
|
| 211 |
- true) |
|
| 212 |
- if err != nil {
|
|
| 213 |
- c.Fatal(err) |
|
| 214 |
- } |
|
| 215 |
- |
|
| 208 |
+ buildImageSuccessfully(c, tag1, withDockerfile(`FROM busybox |
|
| 209 |
+ MAINTAINER "docker"`)) |
|
| 216 | 210 |
dockerCmd(c, "tag", tag1, tag2) |
| 217 | 211 |
|
| 218 | 212 |
out, _ := dockerCmd(c, "rmi", "-f", tag2) |
| ... | ... |
@@ -240,8 +234,8 @@ func (s *DockerSuite) TestRmiContainerImageNotFound(c *check.C) {
|
| 240 | 240 |
imageIds := make([]string, 2) |
| 241 | 241 |
for i, name := range imageNames {
|
| 242 | 242 |
dockerfile := fmt.Sprintf("FROM busybox\nMAINTAINER %s\nRUN echo %s\n", name, name)
|
| 243 |
- id, err := buildImage(name, dockerfile, false) |
|
| 244 |
- c.Assert(err, checker.IsNil) |
|
| 243 |
+ buildImageSuccessfully(c, name, withoutCache, withDockerfile(dockerfile)) |
|
| 244 |
+ id := getIDByName(c, name) |
|
| 245 | 245 |
imageIds[i] = id |
| 246 | 246 |
} |
| 247 | 247 |
|
| ... | ... |
@@ -269,9 +263,7 @@ RUN echo 0 #layer0 |
| 269 | 269 |
RUN echo 1 #layer1 |
| 270 | 270 |
RUN echo 2 #layer2 |
| 271 | 271 |
` |
| 272 |
- _, err := buildImage(image, dockerfile, false) |
|
| 273 |
- c.Assert(err, checker.IsNil) |
|
| 274 |
- |
|
| 272 |
+ buildImageSuccessfully(c, image, withoutCache, withDockerfile(dockerfile)) |
|
| 275 | 273 |
out, _ := dockerCmd(c, "history", "-q", image) |
| 276 | 274 |
ids := strings.Split(out, "\n") |
| 277 | 275 |
idToTag := ids[2] |
| ... | ... |
@@ -294,7 +286,7 @@ RUN echo 2 #layer2 |
| 294 | 294 |
|
| 295 | 295 |
// At this point we have 2 containers, one based on layer2 and another based on layer0. |
| 296 | 296 |
// Try to untag "tmp2" without the -f flag. |
| 297 |
- out, _, err = dockerCmdWithError("rmi", newTag)
|
|
| 297 |
+ out, _, err := dockerCmdWithError("rmi", newTag)
|
|
| 298 | 298 |
// should not be untagged without the -f flag |
| 299 | 299 |
c.Assert(err, checker.NotNil) |
| 300 | 300 |
c.Assert(out, checker.Contains, cid[:12]) |
| ... | ... |
@@ -307,10 +299,9 @@ RUN echo 2 #layer2 |
| 307 | 307 |
} |
| 308 | 308 |
|
| 309 | 309 |
func (*DockerSuite) TestRmiParentImageFail(c *check.C) {
|
| 310 |
- _, err := buildImage("test", `
|
|
| 310 |
+ buildImageSuccessfully(c, "test", withDockerfile(` |
|
| 311 | 311 |
FROM busybox |
| 312 |
- RUN echo hello`, false) |
|
| 313 |
- c.Assert(err, checker.IsNil) |
|
| 312 |
+ RUN echo hello`)) |
|
| 314 | 313 |
|
| 315 | 314 |
id := inspectField(c, "busybox", "ID") |
| 316 | 315 |
out, _, err := dockerCmdWithError("rmi", id)
|
| ... | ... |
@@ -410,10 +410,7 @@ func (s *DockerSuite) TestRunCreateVolumesInSymlinkDir(c *check.C) {
|
| 410 | 410 |
containerPath = "/test/test" |
| 411 | 411 |
cmd = "true" |
| 412 | 412 |
} |
| 413 |
- if _, err := buildImage(name, dockerFile, false); err != nil {
|
|
| 414 |
- c.Fatal(err) |
|
| 415 |
- } |
|
| 416 |
- |
|
| 413 |
+ buildImageSuccessfully(c, name, withDockerfile(dockerFile)) |
|
| 417 | 414 |
dockerCmd(c, "run", "-v", containerPath, name, cmd) |
| 418 | 415 |
} |
| 419 | 416 |
|
| ... | ... |
@@ -438,10 +435,7 @@ func (s *DockerSuite) TestRunCreateVolumesInSymlinkDir2(c *check.C) {
|
| 438 | 438 |
containerPath = "/test/test" |
| 439 | 439 |
cmd = "true" |
| 440 | 440 |
} |
| 441 |
- if _, err := buildImage(name, dockerFile, false); err != nil {
|
|
| 442 |
- c.Fatal(err) |
|
| 443 |
- } |
|
| 444 |
- |
|
| 441 |
+ buildImageSuccessfully(c, name, withDockerfile(dockerFile)) |
|
| 445 | 442 |
dockerCmd(c, "run", "-v", containerPath, name, cmd) |
| 446 | 443 |
} |
| 447 | 444 |
|
| ... | ... |
@@ -1409,10 +1403,7 @@ func (s *DockerSuite) TestRunNonRootUserResolvName(c *check.C) {
|
| 1409 | 1409 |
|
| 1410 | 1410 |
dockerCmd(c, "run", "--name=testperm", "--user=nobody", "busybox", "nslookup", "apt.dockerproject.org") |
| 1411 | 1411 |
|
| 1412 |
- cID, err := getIDByName("testperm")
|
|
| 1413 |
- if err != nil {
|
|
| 1414 |
- c.Fatal(err) |
|
| 1415 |
- } |
|
| 1412 |
+ cID := getIDByName(c, "testperm") |
|
| 1416 | 1413 |
|
| 1417 | 1414 |
fmode := (os.FileMode)(0644) |
| 1418 | 1415 |
finfo, err := os.Stat(containerStorageFile(cID, "resolv.conf")) |
| ... | ... |
@@ -1462,10 +1453,7 @@ func (s *DockerSuite) TestRunResolvconfUpdate(c *check.C) {
|
| 1462 | 1462 |
|
| 1463 | 1463 |
//1. test that a restarting container gets an updated resolv.conf |
| 1464 | 1464 |
dockerCmd(c, "run", "--name=first", "busybox", "true") |
| 1465 |
- containerID1, err := getIDByName("first")
|
|
| 1466 |
- if err != nil {
|
|
| 1467 |
- c.Fatal(err) |
|
| 1468 |
- } |
|
| 1465 |
+ containerID1 := getIDByName(c, "first") |
|
| 1469 | 1466 |
|
| 1470 | 1467 |
// replace resolv.conf with our temporary copy |
| 1471 | 1468 |
bytesResolvConf := []byte(tmpResolvConf) |
| ... | ... |
@@ -1492,10 +1480,7 @@ func (s *DockerSuite) TestRunResolvconfUpdate(c *check.C) {
|
| 1492 | 1492 |
//2. test that a restarting container does not receive resolv.conf updates |
| 1493 | 1493 |
// if it modified the container copy of the starting point resolv.conf |
| 1494 | 1494 |
dockerCmd(c, "run", "--name=second", "busybox", "sh", "-c", "echo 'search mylittlepony.com' >>/etc/resolv.conf") |
| 1495 |
- containerID2, err := getIDByName("second")
|
|
| 1496 |
- if err != nil {
|
|
| 1497 |
- c.Fatal(err) |
|
| 1498 |
- } |
|
| 1495 |
+ containerID2 := getIDByName(c, "second") |
|
| 1499 | 1496 |
|
| 1500 | 1497 |
//make a change to resolv.conf (in this case replacing our tmp copy with orig copy) |
| 1501 | 1498 |
if err := ioutil.WriteFile("/etc/resolv.conf", resolvConfSystem, 0644); err != nil {
|
| ... | ... |
@@ -1581,10 +1566,7 @@ func (s *DockerSuite) TestRunResolvconfUpdate(c *check.C) {
|
| 1581 | 1581 |
|
| 1582 | 1582 |
// Run the container so it picks up the old settings |
| 1583 | 1583 |
dockerCmd(c, "run", "--name=third", "busybox", "true") |
| 1584 |
- containerID3, err := getIDByName("third")
|
|
| 1585 |
- if err != nil {
|
|
| 1586 |
- c.Fatal(err) |
|
| 1587 |
- } |
|
| 1584 |
+ containerID3 := getIDByName(c, "third") |
|
| 1588 | 1585 |
|
| 1589 | 1586 |
// Create a modified resolv.conf.aside and override resolv.conf with it |
| 1590 | 1587 |
bytesResolvConf = []byte(tmpResolvConf) |
| ... | ... |
@@ -1698,15 +1680,10 @@ func (s *DockerSuite) TestRunCopyVolumeUIDGID(c *check.C) {
|
| 1698 | 1698 |
// Not applicable on Windows as it does not support uid or gid in this way |
| 1699 | 1699 |
testRequires(c, DaemonIsLinux) |
| 1700 | 1700 |
name := "testrunvolumesuidgid" |
| 1701 |
- _, err := buildImage(name, |
|
| 1702 |
- `FROM busybox |
|
| 1701 |
+ buildImageSuccessfully(c, name, withDockerfile(`FROM busybox |
|
| 1703 | 1702 |
RUN echo 'dockerio:x:1001:1001::/bin:/bin/false' >> /etc/passwd |
| 1704 | 1703 |
RUN echo 'dockerio:x:1001:' >> /etc/group |
| 1705 |
- RUN mkdir -p /hello && touch /hello/test && chown dockerio.dockerio /hello`, |
|
| 1706 |
- true) |
|
| 1707 |
- if err != nil {
|
|
| 1708 |
- c.Fatal(err) |
|
| 1709 |
- } |
|
| 1704 |
+ RUN mkdir -p /hello && touch /hello/test && chown dockerio.dockerio /hello`)) |
|
| 1710 | 1705 |
|
| 1711 | 1706 |
// Test that the uid and gid is copied from the image to the volume |
| 1712 | 1707 |
out, _ := dockerCmd(c, "run", "--rm", "-v", "/hello", name, "sh", "-c", "ls -l / | grep hello | awk '{print $3\":\"$4}'")
|
| ... | ... |
@@ -1722,13 +1699,8 @@ func (s *DockerSuite) TestRunCopyVolumeContent(c *check.C) {
|
| 1722 | 1722 |
// that copies from the image to the volume. |
| 1723 | 1723 |
testRequires(c, DaemonIsLinux) |
| 1724 | 1724 |
name := "testruncopyvolumecontent" |
| 1725 |
- _, err := buildImage(name, |
|
| 1726 |
- `FROM busybox |
|
| 1727 |
- RUN mkdir -p /hello/local && echo hello > /hello/local/world`, |
|
| 1728 |
- true) |
|
| 1729 |
- if err != nil {
|
|
| 1730 |
- c.Fatal(err) |
|
| 1731 |
- } |
|
| 1725 |
+ buildImageSuccessfully(c, name, withDockerfile(`FROM busybox |
|
| 1726 |
+ RUN mkdir -p /hello/local && echo hello > /hello/local/world`)) |
|
| 1732 | 1727 |
|
| 1733 | 1728 |
// Test that the content is copied from the image to the volume |
| 1734 | 1729 |
out, _ := dockerCmd(c, "run", "--rm", "-v", "/hello", name, "find", "/hello") |
| ... | ... |
@@ -1739,13 +1711,9 @@ func (s *DockerSuite) TestRunCopyVolumeContent(c *check.C) {
|
| 1739 | 1739 |
|
| 1740 | 1740 |
func (s *DockerSuite) TestRunCleanupCmdOnEntrypoint(c *check.C) {
|
| 1741 | 1741 |
name := "testrunmdcleanuponentrypoint" |
| 1742 |
- if _, err := buildImage(name, |
|
| 1743 |
- `FROM busybox |
|
| 1742 |
+ buildImageSuccessfully(c, name, withDockerfile(`FROM busybox |
|
| 1744 | 1743 |
ENTRYPOINT ["echo"] |
| 1745 |
- CMD ["testingpoint"]`, |
|
| 1746 |
- true); err != nil {
|
|
| 1747 |
- c.Fatal(err) |
|
| 1748 |
- } |
|
| 1744 |
+ CMD ["testingpoint"]`)) |
|
| 1749 | 1745 |
|
| 1750 | 1746 |
out, exit := dockerCmd(c, "run", "--entrypoint", "whoami", name) |
| 1751 | 1747 |
if exit != 0 {
|
| ... | ... |
@@ -1879,9 +1847,7 @@ func testRunWriteSpecialFilesAndNotCommit(c *check.C, name, path string) {
|
| 1879 | 1879 |
func eqToBaseDiff(out string, c *check.C) bool {
|
| 1880 | 1880 |
name := "eqToBaseDiff" + stringutils.GenerateRandomAlphaOnlyString(32) |
| 1881 | 1881 |
dockerCmd(c, "run", "--name", name, "busybox", "echo", "hello") |
| 1882 |
- cID, err := getIDByName(name) |
|
| 1883 |
- c.Assert(err, check.IsNil) |
|
| 1884 |
- |
|
| 1882 |
+ cID := getIDByName(c, name) |
|
| 1885 | 1883 |
baseDiff, _ := dockerCmd(c, "diff", cID) |
| 1886 | 1884 |
baseArr := strings.Split(baseDiff, "\n") |
| 1887 | 1885 |
sort.Strings(baseArr) |
| ... | ... |
@@ -2229,14 +2195,9 @@ func (s *DockerSuite) TestVolumesNoCopyData(c *check.C) {
|
| 2229 | 2229 |
// are pre-populated such as is built in the dockerfile used in this test. |
| 2230 | 2230 |
testRequires(c, DaemonIsLinux) |
| 2231 | 2231 |
prefix, slash := getPrefixAndSlashFromDaemonPlatform() |
| 2232 |
- if _, err := buildImage("dataimage",
|
|
| 2233 |
- `FROM busybox |
|
| 2232 |
+ buildImageSuccessfully(c, "dataimage", withDockerfile(`FROM busybox |
|
| 2234 | 2233 |
RUN ["mkdir", "-p", "/foo"] |
| 2235 |
- RUN ["touch", "/foo/bar"]`, |
|
| 2236 |
- true); err != nil {
|
|
| 2237 |
- c.Fatal(err) |
|
| 2238 |
- } |
|
| 2239 |
- |
|
| 2234 |
+ RUN ["touch", "/foo/bar"]`)) |
|
| 2240 | 2235 |
dockerCmd(c, "run", "--name", "test", "-v", prefix+slash+"foo", "busybox") |
| 2241 | 2236 |
|
| 2242 | 2237 |
if out, _, err := dockerCmdWithError("run", "--volumes-from", "test", "dataimage", "ls", "-lh", "/foo/bar"); err == nil || !strings.Contains(out, "No such file or directory") {
|
| ... | ... |
@@ -2265,13 +2226,8 @@ func (s *DockerSuite) TestRunNoOutputFromPullInStdout(c *check.C) {
|
| 2265 | 2265 |
func (s *DockerSuite) TestRunVolumesCleanPaths(c *check.C) {
|
| 2266 | 2266 |
testRequires(c, SameHostDaemon) |
| 2267 | 2267 |
prefix, slash := getPrefixAndSlashFromDaemonPlatform() |
| 2268 |
- if _, err := buildImage("run_volumes_clean_paths",
|
|
| 2269 |
- `FROM busybox |
|
| 2270 |
- VOLUME `+prefix+`/foo/`, |
|
| 2271 |
- true); err != nil {
|
|
| 2272 |
- c.Fatal(err) |
|
| 2273 |
- } |
|
| 2274 |
- |
|
| 2268 |
+ buildImageSuccessfully(c, "run_volumes_clean_paths", withDockerfile(`FROM busybox |
|
| 2269 |
+ VOLUME `+prefix+`/foo/`)) |
|
| 2275 | 2270 |
dockerCmd(c, "run", "-v", prefix+"/foo", "-v", prefix+"/bar/", "--name", "dark_helmet", "run_volumes_clean_paths") |
| 2276 | 2271 |
|
| 2277 | 2272 |
out, err := inspectMountSourceField("dark_helmet", prefix+slash+"foo"+slash)
|
| ... | ... |
@@ -3444,8 +3400,7 @@ func testRunContainerWithCgroupParent(c *check.C, cgroupParent, name string) {
|
| 3444 | 3444 |
if len(cgroupPaths) == 0 {
|
| 3445 | 3445 |
c.Fatalf("unexpected output - %q", string(out))
|
| 3446 | 3446 |
} |
| 3447 |
- id, err := getIDByName(name) |
|
| 3448 |
- c.Assert(err, check.IsNil) |
|
| 3447 |
+ id := getIDByName(c, name) |
|
| 3449 | 3448 |
expectedCgroup := path.Join(cgroupParent, id) |
| 3450 | 3449 |
found := false |
| 3451 | 3450 |
for _, path := range cgroupPaths {
|
| ... | ... |
@@ -3485,8 +3440,7 @@ func testRunInvalidCgroupParent(c *check.C, cgroupParent, cleanCgroupParent, nam |
| 3485 | 3485 |
if len(cgroupPaths) == 0 {
|
| 3486 | 3486 |
c.Fatalf("unexpected output - %q", string(out))
|
| 3487 | 3487 |
} |
| 3488 |
- id, err := getIDByName(name) |
|
| 3489 |
- c.Assert(err, check.IsNil) |
|
| 3488 |
+ id := getIDByName(c, name) |
|
| 3490 | 3489 |
expectedCgroup := path.Join(cleanCgroupParent, id) |
| 3491 | 3490 |
found := false |
| 3492 | 3491 |
for _, path := range cgroupPaths {
|
| ... | ... |
@@ -3919,15 +3873,10 @@ func (s *DockerSuite) TestRunInitLayerPathOwnership(c *check.C) {
|
| 3919 | 3919 |
// Not applicable on Windows as it does not support Linux uid/gid ownership |
| 3920 | 3920 |
testRequires(c, DaemonIsLinux) |
| 3921 | 3921 |
name := "testetcfileownership" |
| 3922 |
- _, err := buildImage(name, |
|
| 3923 |
- `FROM busybox |
|
| 3922 |
+ buildImageSuccessfully(c, name, withDockerfile(`FROM busybox |
|
| 3924 | 3923 |
RUN echo 'dockerio:x:1001:1001::/bin:/bin/false' >> /etc/passwd |
| 3925 | 3924 |
RUN echo 'dockerio:x:1001:' >> /etc/group |
| 3926 |
- RUN chown dockerio:dockerio /etc`, |
|
| 3927 |
- true) |
|
| 3928 |
- if err != nil {
|
|
| 3929 |
- c.Fatal(err) |
|
| 3930 |
- } |
|
| 3925 |
+ RUN chown dockerio:dockerio /etc`)) |
|
| 3931 | 3926 |
|
| 3932 | 3927 |
// Test that dockerio ownership of /etc is retained at runtime |
| 3933 | 3928 |
out, _ := dockerCmd(c, "run", "--rm", name, "stat", "-c", "%U:%G", "/etc") |
| ... | ... |
@@ -4056,11 +4005,10 @@ func (s *DockerSuite) TestRunNamedVolumeCopyImageData(c *check.C) {
|
| 4056 | 4056 |
testRequires(c, DaemonIsLinux) |
| 4057 | 4057 |
|
| 4058 | 4058 |
testImg := "testvolumecopy" |
| 4059 |
- _, err := buildImage(testImg, ` |
|
| 4059 |
+ buildImageSuccessfully(c, testImg, withDockerfile(` |
|
| 4060 | 4060 |
FROM busybox |
| 4061 | 4061 |
RUN mkdir -p /foo && echo hello > /foo/hello |
| 4062 |
- `, true) |
|
| 4063 |
- c.Assert(err, check.IsNil) |
|
| 4062 |
+ `)) |
|
| 4064 | 4063 |
|
| 4065 | 4064 |
dockerCmd(c, "run", "-v", "foo:/foo", testImg) |
| 4066 | 4065 |
out, _ := dockerCmd(c, "run", "-v", "foo:/foo", "busybox", "cat", "/foo/hello") |
| ... | ... |
@@ -4136,14 +4084,9 @@ func (s *DockerSuite) TestRunVolumeWithOneCharacter(c *check.C) {
|
| 4136 | 4136 |
|
| 4137 | 4137 |
func (s *DockerSuite) TestRunVolumeCopyFlag(c *check.C) {
|
| 4138 | 4138 |
testRequires(c, DaemonIsLinux) // Windows does not support copying data from image to the volume |
| 4139 |
- _, err := buildImage("volumecopy",
|
|
| 4140 |
- `FROM busybox |
|
| 4139 |
+ buildImageSuccessfully(c, "volumecopy", withDockerfile(`FROM busybox |
|
| 4141 | 4140 |
RUN mkdir /foo && echo hello > /foo/bar |
| 4142 |
- CMD cat /foo/bar`, |
|
| 4143 |
- true, |
|
| 4144 |
- ) |
|
| 4145 |
- c.Assert(err, checker.IsNil) |
|
| 4146 |
- |
|
| 4141 |
+ CMD cat /foo/bar`)) |
|
| 4147 | 4142 |
dockerCmd(c, "volume", "create", "test") |
| 4148 | 4143 |
|
| 4149 | 4144 |
// test with the nocopy flag |
| ... | ... |
@@ -4232,22 +4175,20 @@ RUN chmod 755 /entrypoint.sh |
| 4232 | 4232 |
ENTRYPOINT ["/entrypoint.sh"] |
| 4233 | 4233 |
CMD echo foobar` |
| 4234 | 4234 |
|
| 4235 |
- ctx, err := fakeContext(dockerfile, map[string]string{
|
|
| 4235 |
+ ctx := fakeContext(c, dockerfile, map[string]string{
|
|
| 4236 | 4236 |
"entrypoint.sh": `#!/bin/sh |
| 4237 | 4237 |
echo "I am an entrypoint" |
| 4238 | 4238 |
exec "$@"`, |
| 4239 | 4239 |
}) |
| 4240 |
- c.Assert(err, check.IsNil) |
|
| 4241 | 4240 |
defer ctx.Close() |
| 4242 | 4241 |
|
| 4243 |
- _, err = buildImageFromContext(name, ctx, true) |
|
| 4244 |
- c.Assert(err, check.IsNil) |
|
| 4242 |
+ buildImageSuccessfully(c, name, withExternalBuildContext(ctx)) |
|
| 4245 | 4243 |
|
| 4246 | 4244 |
out, _ := dockerCmd(c, "run", "--entrypoint=", "-t", name, "echo", "foo") |
| 4247 | 4245 |
c.Assert(strings.TrimSpace(out), check.Equals, "foo") |
| 4248 | 4246 |
|
| 4249 | 4247 |
// CMD will be reset as well (the same as setting a custom entrypoint) |
| 4250 |
- _, _, err = dockerCmdWithError("run", "--entrypoint=", "-t", name)
|
|
| 4248 |
+ _, _, err := dockerCmdWithError("run", "--entrypoint=", "-t", name)
|
|
| 4251 | 4249 |
c.Assert(err, check.NotNil) |
| 4252 | 4250 |
c.Assert(err.Error(), checker.Contains, "No command specified") |
| 4253 | 4251 |
} |
| ... | ... |
@@ -828,17 +828,11 @@ func (s *DockerSuite) TestRunTmpfsMounts(c *check.C) {
|
| 828 | 828 |
|
| 829 | 829 |
func (s *DockerSuite) TestRunTmpfsMountsOverrideImageVolumes(c *check.C) {
|
| 830 | 830 |
name := "img-with-volumes" |
| 831 |
- _, err := buildImage( |
|
| 832 |
- name, |
|
| 833 |
- ` |
|
| 831 |
+ buildImageSuccessfully(c, name, withDockerfile(` |
|
| 834 | 832 |
FROM busybox |
| 835 | 833 |
VOLUME /run |
| 836 | 834 |
RUN touch /run/stuff |
| 837 |
- `, |
|
| 838 |
- true) |
|
| 839 |
- if err != nil {
|
|
| 840 |
- c.Fatal(err) |
|
| 841 |
- } |
|
| 835 |
+ `)) |
|
| 842 | 836 |
out, _ := dockerCmd(c, "run", "--tmpfs", "/run", name, "ls", "/run") |
| 843 | 837 |
c.Assert(out, checker.Not(checker.Contains), "stuff") |
| 844 | 838 |
} |
| ... | ... |
@@ -260,12 +260,9 @@ func (s *DockerSuite) TestSaveDirectoryPermissions(c *check.C) {
|
| 260 | 260 |
os.Mkdir(extractionDirectory, 0777) |
| 261 | 261 |
|
| 262 | 262 |
defer os.RemoveAll(tmpDir) |
| 263 |
- _, err = buildImage(name, |
|
| 264 |
- `FROM busybox |
|
| 263 |
+ buildImageSuccessfully(c, name, withDockerfile(`FROM busybox |
|
| 265 | 264 |
RUN adduser -D user && mkdir -p /opt/a/b && chown -R user:user /opt/a |
| 266 |
- RUN touch /opt/a/b/c && chown user:user /opt/a/b/c`, |
|
| 267 |
- true) |
|
| 268 |
- c.Assert(err, checker.IsNil, check.Commentf("%v", err))
|
|
| 265 |
+ RUN touch /opt/a/b/c && chown user:user /opt/a/b/c`)) |
|
| 269 | 266 |
|
| 270 | 267 |
out, _, err := testutil.RunCommandPipelineWithOutput( |
| 271 | 268 |
exec.Command(dockerBinary, "save", name), |
| ... | ... |
@@ -358,9 +355,7 @@ func (s *DockerSuite) TestSaveLoadNoTag(c *check.C) {
|
| 358 | 358 |
|
| 359 | 359 |
name := "saveloadnotag" |
| 360 | 360 |
|
| 361 |
- _, err := buildImage(name, "FROM busybox\nENV foo=bar", true) |
|
| 362 |
- c.Assert(err, checker.IsNil, check.Commentf("%v", err))
|
|
| 363 |
- |
|
| 361 |
+ buildImageSuccessfully(c, name, withDockerfile("FROM busybox\nENV foo=bar"))
|
|
| 364 | 362 |
id := inspectField(c, name, "Id") |
| 365 | 363 |
|
| 366 | 364 |
// Test to make sure that save w/o name just shows imageID during load |
| ... | ... |
@@ -72,11 +72,9 @@ func (s *DockerSuite) TestSaveAndLoadRepoStdout(c *check.C) {
|
| 72 | 72 |
|
| 73 | 73 |
func (s *DockerSuite) TestSaveAndLoadWithProgressBar(c *check.C) {
|
| 74 | 74 |
name := "test-load" |
| 75 |
- _, err := buildImage(name, ` |
|
| 76 |
- FROM busybox |
|
| 75 |
+ buildImageSuccessfully(c, name, withDockerfile(`FROM busybox |
|
| 77 | 76 |
RUN touch aa |
| 78 |
- `, true) |
|
| 79 |
- c.Assert(err, check.IsNil) |
|
| 77 |
+ `)) |
|
| 80 | 78 |
|
| 81 | 79 |
tmptar := name + ".tar" |
| 82 | 80 |
dockerCmd(c, "save", "-o", tmptar, name) |
| ... | ... |
@@ -142,13 +142,9 @@ func (s *DockerSuite) TestTagInvalidRepoName(c *check.C) {
|
| 142 | 142 |
|
| 143 | 143 |
// ensure tags cannot create ambiguity with image ids |
| 144 | 144 |
func (s *DockerSuite) TestTagTruncationAmbiguity(c *check.C) {
|
| 145 |
- imageID, err := buildImage("notbusybox:latest",
|
|
| 146 |
- `FROM busybox |
|
| 147 |
- MAINTAINER dockerio`, |
|
| 148 |
- true) |
|
| 149 |
- if err != nil {
|
|
| 150 |
- c.Fatal(err) |
|
| 151 |
- } |
|
| 145 |
+ buildImageSuccessfully(c, "notbusybox:latest", withDockerfile(`FROM busybox |
|
| 146 |
+ MAINTAINER dockerio`)) |
|
| 147 |
+ imageID := getIDByName(c, "notbusybox:latest") |
|
| 152 | 148 |
truncatedImageID := stringid.TruncateID(imageID) |
| 153 | 149 |
truncatedTag := fmt.Sprintf("notbusybox:%s", truncatedImageID)
|
| 154 | 150 |
|
| ... | ... |
@@ -159,7 +155,7 @@ func (s *DockerSuite) TestTagTruncationAmbiguity(c *check.C) {
|
| 159 | 159 |
c.Logf("Built image: %s", imageID)
|
| 160 | 160 |
|
| 161 | 161 |
// test setting tag fails |
| 162 |
- _, _, err = dockerCmdWithError("tag", "busybox:latest", truncatedTag)
|
|
| 162 |
+ _, _, err := dockerCmdWithError("tag", "busybox:latest", truncatedTag)
|
|
| 163 | 163 |
if err != nil {
|
| 164 | 164 |
c.Fatalf("Error tagging with an image id: %s", err)
|
| 165 | 165 |
} |
| ... | ... |
@@ -368,52 +368,41 @@ func (f *FakeContext) Close() error {
|
| 368 | 368 |
return os.RemoveAll(f.Dir) |
| 369 | 369 |
} |
| 370 | 370 |
|
| 371 |
-func fakeContextFromNewTempDir() (*FakeContext, error) {
|
|
| 371 |
+func fakeContextFromNewTempDir(c *check.C) *FakeContext {
|
|
| 372 | 372 |
tmp, err := ioutil.TempDir("", "fake-context")
|
| 373 |
- if err != nil {
|
|
| 374 |
- return nil, err |
|
| 375 |
- } |
|
| 373 |
+ c.Assert(err, checker.IsNil) |
|
| 376 | 374 |
if err := os.Chmod(tmp, 0755); err != nil {
|
| 377 |
- return nil, err |
|
| 375 |
+ c.Fatal(err) |
|
| 378 | 376 |
} |
| 379 |
- return fakeContextFromDir(tmp), nil |
|
| 377 |
+ return fakeContextFromDir(tmp) |
|
| 380 | 378 |
} |
| 381 | 379 |
|
| 382 | 380 |
func fakeContextFromDir(dir string) *FakeContext {
|
| 383 | 381 |
return &FakeContext{dir}
|
| 384 | 382 |
} |
| 385 | 383 |
|
| 386 |
-func fakeContextWithFiles(files map[string]string) (*FakeContext, error) {
|
|
| 387 |
- ctx, err := fakeContextFromNewTempDir() |
|
| 388 |
- if err != nil {
|
|
| 389 |
- return nil, err |
|
| 390 |
- } |
|
| 384 |
+func fakeContextWithFiles(c *check.C, files map[string]string) *FakeContext {
|
|
| 385 |
+ ctx := fakeContextFromNewTempDir(c) |
|
| 391 | 386 |
for file, content := range files {
|
| 392 | 387 |
if err := ctx.Add(file, content); err != nil {
|
| 393 | 388 |
ctx.Close() |
| 394 |
- return nil, err |
|
| 389 |
+ c.Fatal(err) |
|
| 395 | 390 |
} |
| 396 | 391 |
} |
| 397 |
- return ctx, nil |
|
| 392 |
+ return ctx |
|
| 398 | 393 |
} |
| 399 | 394 |
|
| 400 |
-func fakeContextAddDockerfile(ctx *FakeContext, dockerfile string) error {
|
|
| 395 |
+func fakeContextAddDockerfile(c *check.C, ctx *FakeContext, dockerfile string) {
|
|
| 401 | 396 |
if err := ctx.Add("Dockerfile", dockerfile); err != nil {
|
| 402 | 397 |
ctx.Close() |
| 403 |
- return err |
|
| 398 |
+ c.Fatal(err) |
|
| 404 | 399 |
} |
| 405 |
- return nil |
|
| 406 | 400 |
} |
| 407 | 401 |
|
| 408 |
-func fakeContext(dockerfile string, files map[string]string) (*FakeContext, error) {
|
|
| 409 |
- ctx, err := fakeContextWithFiles(files) |
|
| 410 |
- if err != nil {
|
|
| 411 |
- return nil, err |
|
| 412 |
- } |
|
| 413 |
- if err := fakeContextAddDockerfile(ctx, dockerfile); err != nil {
|
|
| 414 |
- return nil, err |
|
| 415 |
- } |
|
| 416 |
- return ctx, nil |
|
| 402 |
+func fakeContext(c *check.C, dockerfile string, files map[string]string) *FakeContext {
|
|
| 403 |
+ ctx := fakeContextWithFiles(c, files) |
|
| 404 |
+ fakeContextAddDockerfile(c, ctx, dockerfile) |
|
| 405 |
+ return ctx |
|
| 417 | 406 |
} |
| 418 | 407 |
|
| 419 | 408 |
// FakeStorage is a static file server. It might be running locally or remotely |
| ... | ... |
@@ -424,34 +413,28 @@ type FakeStorage interface {
|
| 424 | 424 |
CtxDir() string |
| 425 | 425 |
} |
| 426 | 426 |
|
| 427 |
-func fakeBinaryStorage(archives map[string]*bytes.Buffer) (FakeStorage, error) {
|
|
| 428 |
- ctx, err := fakeContextFromNewTempDir() |
|
| 429 |
- if err != nil {
|
|
| 430 |
- return nil, err |
|
| 431 |
- } |
|
| 427 |
+func fakeBinaryStorage(c *check.C, archives map[string]*bytes.Buffer) FakeStorage {
|
|
| 428 |
+ ctx := fakeContextFromNewTempDir(c) |
|
| 432 | 429 |
for name, content := range archives {
|
| 433 | 430 |
if err := ctx.addFile(name, content.Bytes()); err != nil {
|
| 434 |
- return nil, err |
|
| 431 |
+ c.Fatal(err) |
|
| 435 | 432 |
} |
| 436 | 433 |
} |
| 437 |
- return fakeStorageWithContext(ctx) |
|
| 434 |
+ return fakeStorageWithContext(c, ctx) |
|
| 438 | 435 |
} |
| 439 | 436 |
|
| 440 | 437 |
// fakeStorage returns either a local or remote (at daemon machine) file server |
| 441 |
-func fakeStorage(files map[string]string) (FakeStorage, error) {
|
|
| 442 |
- ctx, err := fakeContextWithFiles(files) |
|
| 443 |
- if err != nil {
|
|
| 444 |
- return nil, err |
|
| 445 |
- } |
|
| 446 |
- return fakeStorageWithContext(ctx) |
|
| 438 |
+func fakeStorage(c *check.C, files map[string]string) FakeStorage {
|
|
| 439 |
+ ctx := fakeContextWithFiles(c, files) |
|
| 440 |
+ return fakeStorageWithContext(c, ctx) |
|
| 447 | 441 |
} |
| 448 | 442 |
|
| 449 | 443 |
// fakeStorageWithContext returns either a local or remote (at daemon machine) file server |
| 450 |
-func fakeStorageWithContext(ctx *FakeContext) (FakeStorage, error) {
|
|
| 444 |
+func fakeStorageWithContext(c *check.C, ctx *FakeContext) FakeStorage {
|
|
| 451 | 445 |
if testEnv.LocalDaemon() {
|
| 452 |
- return newLocalFakeStorage(ctx) |
|
| 446 |
+ return newLocalFakeStorage(c, ctx) |
|
| 453 | 447 |
} |
| 454 |
- return newRemoteFileServer(ctx) |
|
| 448 |
+ return newRemoteFileServer(c, ctx) |
|
| 455 | 449 |
} |
| 456 | 450 |
|
| 457 | 451 |
// localFileStorage is a file storage on the running machine |
| ... | ... |
@@ -473,13 +456,13 @@ func (s *localFileStorage) Close() error {
|
| 473 | 473 |
return s.FakeContext.Close() |
| 474 | 474 |
} |
| 475 | 475 |
|
| 476 |
-func newLocalFakeStorage(ctx *FakeContext) (*localFileStorage, error) {
|
|
| 476 |
+func newLocalFakeStorage(c *check.C, ctx *FakeContext) *localFileStorage {
|
|
| 477 | 477 |
handler := http.FileServer(http.Dir(ctx.Dir)) |
| 478 | 478 |
server := httptest.NewServer(handler) |
| 479 | 479 |
return &localFileStorage{
|
| 480 | 480 |
FakeContext: ctx, |
| 481 | 481 |
Server: server, |
| 482 |
- }, nil |
|
| 482 |
+ } |
|
| 483 | 483 |
} |
| 484 | 484 |
|
| 485 | 485 |
// remoteFileServer is a containerized static file server started on the remote |
| ... | ... |
@@ -517,58 +500,45 @@ func (f *remoteFileServer) Close() error {
|
| 517 | 517 |
return deleteContainer(false, f.container) |
| 518 | 518 |
} |
| 519 | 519 |
|
| 520 |
-func newRemoteFileServer(ctx *FakeContext) (*remoteFileServer, error) {
|
|
| 520 |
+func newRemoteFileServer(c *check.C, ctx *FakeContext) *remoteFileServer {
|
|
| 521 | 521 |
var ( |
| 522 | 522 |
image = fmt.Sprintf("fileserver-img-%s", strings.ToLower(stringutils.GenerateRandomAlphaOnlyString(10)))
|
| 523 | 523 |
container = fmt.Sprintf("fileserver-cnt-%s", strings.ToLower(stringutils.GenerateRandomAlphaOnlyString(10)))
|
| 524 | 524 |
) |
| 525 | 525 |
|
| 526 |
- if err := ensureHTTPServerImage(); err != nil {
|
|
| 527 |
- return nil, err |
|
| 528 |
- } |
|
| 526 |
+ c.Assert(ensureHTTPServerImage(), checker.IsNil) |
|
| 529 | 527 |
|
| 530 | 528 |
// Build the image |
| 531 |
- if err := fakeContextAddDockerfile(ctx, `FROM httpserver |
|
| 532 |
-COPY . /static`); err != nil {
|
|
| 533 |
- return nil, fmt.Errorf("Cannot add Dockerfile to context: %v", err)
|
|
| 534 |
- } |
|
| 535 |
- if _, err := buildImageFromContext(image, ctx, false); err != nil {
|
|
| 536 |
- return nil, fmt.Errorf("failed building file storage container image: %v", err)
|
|
| 537 |
- } |
|
| 529 |
+ fakeContextAddDockerfile(c, ctx, `FROM httpserver |
|
| 530 |
+COPY . /static`) |
|
| 531 |
+ buildImageSuccessfully(c, image, withoutCache, withExternalBuildContext(ctx)) |
|
| 538 | 532 |
|
| 539 | 533 |
// Start the container |
| 540 |
- runCmd := exec.Command(dockerBinary, "run", "-d", "-P", "--name", container, image) |
|
| 541 |
- if out, ec, err := runCommandWithOutput(runCmd); err != nil {
|
|
| 542 |
- return nil, fmt.Errorf("failed to start file storage container. ec=%v\nout=%s\nerr=%v", ec, out, err)
|
|
| 543 |
- } |
|
| 534 |
+ dockerCmd(c, "run", "-d", "-P", "--name", container, image) |
|
| 544 | 535 |
|
| 545 | 536 |
// Find out the system assigned port |
| 546 |
- out, _, err := runCommandWithOutput(exec.Command(dockerBinary, "port", container, "80/tcp")) |
|
| 547 |
- if err != nil {
|
|
| 548 |
- return nil, fmt.Errorf("failed to find container port: err=%v\nout=%s", err, out)
|
|
| 549 |
- } |
|
| 550 |
- |
|
| 537 |
+ out, _ := dockerCmd(c, "port", container, "80/tcp") |
|
| 551 | 538 |
fileserverHostPort := strings.Trim(out, "\n") |
| 552 | 539 |
_, port, err := net.SplitHostPort(fileserverHostPort) |
| 553 | 540 |
if err != nil {
|
| 554 |
- return nil, fmt.Errorf("unable to parse file server host:port: %v", err)
|
|
| 541 |
+ c.Fatalf("unable to parse file server host:port: %v", err)
|
|
| 555 | 542 |
} |
| 556 | 543 |
|
| 557 | 544 |
dockerHostURL, err := url.Parse(daemonHost()) |
| 558 | 545 |
if err != nil {
|
| 559 |
- return nil, fmt.Errorf("unable to parse daemon host URL: %v", err)
|
|
| 546 |
+ c.Fatalf("unable to parse daemon host URL: %v", err)
|
|
| 560 | 547 |
} |
| 561 | 548 |
|
| 562 | 549 |
host, _, err := net.SplitHostPort(dockerHostURL.Host) |
| 563 | 550 |
if err != nil {
|
| 564 |
- return nil, fmt.Errorf("unable to parse docker daemon host:port: %v", err)
|
|
| 551 |
+ c.Fatalf("unable to parse docker daemon host:port: %v", err)
|
|
| 565 | 552 |
} |
| 566 | 553 |
|
| 567 | 554 |
return &remoteFileServer{
|
| 568 | 555 |
container: container, |
| 569 | 556 |
image: image, |
| 570 | 557 |
host: fmt.Sprintf("%s:%s", host, port),
|
| 571 |
- ctx: ctx}, nil |
|
| 558 |
+ ctx: ctx} |
|
| 572 | 559 |
} |
| 573 | 560 |
|
| 574 | 561 |
func inspectFieldAndUnmarshall(c *check.C, name, field string, output interface{}) {
|
| ... | ... |
@@ -671,51 +641,17 @@ func inspectImage(name, filter string) (string, error) {
|
| 671 | 671 |
return strings.TrimSpace(out), nil |
| 672 | 672 |
} |
| 673 | 673 |
|
| 674 |
-func getIDByName(name string) (string, error) {
|
|
| 675 |
- return inspectFieldWithError(name, "Id") |
|
| 676 |
-} |
|
| 677 |
- |
|
| 678 |
-// Deprecated |
|
| 679 |
-func buildImageCmd(name, dockerfile string, useCache bool, buildFlags ...string) *exec.Cmd {
|
|
| 680 |
- return daemon.BuildImageCmdWithHost(dockerBinary, name, dockerfile, "", useCache, buildFlags...) |
|
| 681 |
-} |
|
| 682 |
- |
|
| 683 |
-// Deprecated |
|
| 684 |
-func buildImageWithOut(name, dockerfile string, useCache bool, buildFlags ...string) (string, string, error) {
|
|
| 685 |
- buildCmd := buildImageCmd(name, dockerfile, useCache, buildFlags...) |
|
| 686 |
- out, exitCode, err := runCommandWithOutput(buildCmd) |
|
| 687 |
- if err != nil || exitCode != 0 {
|
|
| 688 |
- return "", out, fmt.Errorf("failed to build the image: %s", out)
|
|
| 689 |
- } |
|
| 690 |
- id, err := getIDByName(name) |
|
| 691 |
- if err != nil {
|
|
| 692 |
- return "", out, err |
|
| 693 |
- } |
|
| 694 |
- return id, out, nil |
|
| 695 |
-} |
|
| 696 |
- |
|
| 697 |
-// Deprecated |
|
| 698 |
-func buildImageWithStdoutStderr(name, dockerfile string, useCache bool, buildFlags ...string) (string, string, string, error) {
|
|
| 699 |
- buildCmd := buildImageCmd(name, dockerfile, useCache, buildFlags...) |
|
| 700 |
- result := icmd.RunCmd(transformCmd(buildCmd)) |
|
| 701 |
- err := result.Error |
|
| 702 |
- exitCode := result.ExitCode |
|
| 703 |
- if err != nil || exitCode != 0 {
|
|
| 704 |
- return "", result.Stdout(), result.Stderr(), fmt.Errorf("failed to build the image: %s", result.Combined())
|
|
| 705 |
- } |
|
| 706 |
- id, err := getIDByName(name) |
|
| 707 |
- if err != nil {
|
|
| 708 |
- return "", result.Stdout(), result.Stderr(), err |
|
| 709 |
- } |
|
| 710 |
- return id, result.Stdout(), result.Stderr(), nil |
|
| 674 |
+func getIDByName(c *check.C, name string) string {
|
|
| 675 |
+ id, err := inspectFieldWithError(name, "Id") |
|
| 676 |
+ c.Assert(err, checker.IsNil) |
|
| 677 |
+ return id |
|
| 711 | 678 |
} |
| 712 | 679 |
|
| 713 | 680 |
func buildImageSuccessfully(c *check.C, name string, cmdOperators ...func(*icmd.Cmd) func()) {
|
| 714 |
- buildImageNew(name, cmdOperators...).Assert(c, icmd.Success) |
|
| 681 |
+ buildImage(name, cmdOperators...).Assert(c, icmd.Success) |
|
| 715 | 682 |
} |
| 716 | 683 |
|
| 717 |
-// FIXME(vdemeester) rename this buildImage once deprecated buildImage is no more |
|
| 718 |
-func buildImageNew(name string, cmdOperators ...func(*icmd.Cmd) func()) *icmd.Result {
|
|
| 684 |
+func buildImage(name string, cmdOperators ...func(*icmd.Cmd) func()) *icmd.Result {
|
|
| 719 | 685 |
cmd := icmd.Command(dockerBinary, "build", "-t", name) |
| 720 | 686 |
for _, op := range cmdOperators {
|
| 721 | 687 |
deferFn := op(&cmd) |
| ... | ... |
@@ -733,11 +669,16 @@ func withBuildContextPath(path string) func(*icmd.Cmd) func() {
|
| 733 | 733 |
} |
| 734 | 734 |
} |
| 735 | 735 |
|
| 736 |
-func withBuildContext(c *check.C, contextOperators ...func(*FakeContext) error) func(*icmd.Cmd) func() {
|
|
| 737 |
- ctx, err := fakeContextFromNewTempDir() |
|
| 738 |
- if err != nil {
|
|
| 739 |
- c.Fatalf("error creating build context : %v", err)
|
|
| 736 |
+func withExternalBuildContext(ctx *FakeContext) func(*icmd.Cmd) func() {
|
|
| 737 |
+ return func(cmd *icmd.Cmd) func() {
|
|
| 738 |
+ cmd.Dir = ctx.Dir |
|
| 739 |
+ cmd.Command = append(cmd.Command, ".") |
|
| 740 |
+ return nil |
|
| 740 | 741 |
} |
| 742 |
+} |
|
| 743 |
+ |
|
| 744 |
+func withBuildContext(c *check.C, contextOperators ...func(*FakeContext) error) func(*icmd.Cmd) func() {
|
|
| 745 |
+ ctx := fakeContextFromNewTempDir(c) |
|
| 741 | 746 |
for _, op := range contextOperators {
|
| 742 | 747 |
if err := op(ctx); err != nil {
|
| 743 | 748 |
c.Fatal(err) |
| ... | ... |
@@ -796,108 +737,6 @@ func withEnvironmentVariales(envs ...string) func(cmd *icmd.Cmd) func() {
|
| 796 | 796 |
} |
| 797 | 797 |
} |
| 798 | 798 |
|
| 799 |
-// Deprecated |
|
| 800 |
-func buildImage(name, dockerfile string, useCache bool, buildFlags ...string) (string, error) {
|
|
| 801 |
- id, _, err := buildImageWithOut(name, dockerfile, useCache, buildFlags...) |
|
| 802 |
- return id, err |
|
| 803 |
-} |
|
| 804 |
- |
|
| 805 |
-// Deprecated |
|
| 806 |
-func buildImageFromContext(name string, ctx *FakeContext, useCache bool, buildFlags ...string) (string, error) {
|
|
| 807 |
- id, _, err := buildImageFromContextWithOut(name, ctx, useCache, buildFlags...) |
|
| 808 |
- if err != nil {
|
|
| 809 |
- return "", err |
|
| 810 |
- } |
|
| 811 |
- return id, nil |
|
| 812 |
-} |
|
| 813 |
- |
|
| 814 |
-// Deprecated |
|
| 815 |
-func buildImageFromContextWithOut(name string, ctx *FakeContext, useCache bool, buildFlags ...string) (string, string, error) {
|
|
| 816 |
- args := []string{"build", "-t", name}
|
|
| 817 |
- if !useCache {
|
|
| 818 |
- args = append(args, "--no-cache") |
|
| 819 |
- } |
|
| 820 |
- args = append(args, buildFlags...) |
|
| 821 |
- args = append(args, ".") |
|
| 822 |
- result := icmd.RunCmd(icmd.Cmd{
|
|
| 823 |
- Command: append([]string{dockerBinary}, args...),
|
|
| 824 |
- Dir: ctx.Dir, |
|
| 825 |
- }) |
|
| 826 |
- out := result.Combined() |
|
| 827 |
- if result.Error != nil || result.ExitCode != 0 {
|
|
| 828 |
- return "", "", fmt.Errorf("failed to build the image: %s", out)
|
|
| 829 |
- } |
|
| 830 |
- id, err := getIDByName(name) |
|
| 831 |
- if err != nil {
|
|
| 832 |
- return "", "", err |
|
| 833 |
- } |
|
| 834 |
- return id, out, nil |
|
| 835 |
-} |
|
| 836 |
- |
|
| 837 |
-// Deprecated |
|
| 838 |
-func buildImageFromContextWithStdoutStderr(name string, ctx *FakeContext, useCache bool, buildFlags ...string) (string, string, string, error) {
|
|
| 839 |
- args := []string{"build", "-t", name}
|
|
| 840 |
- if !useCache {
|
|
| 841 |
- args = append(args, "--no-cache") |
|
| 842 |
- } |
|
| 843 |
- args = append(args, buildFlags...) |
|
| 844 |
- args = append(args, ".") |
|
| 845 |
- |
|
| 846 |
- result := icmd.RunCmd(icmd.Cmd{
|
|
| 847 |
- Command: append([]string{dockerBinary}, args...),
|
|
| 848 |
- Dir: ctx.Dir, |
|
| 849 |
- }) |
|
| 850 |
- exitCode := result.ExitCode |
|
| 851 |
- err := result.Error |
|
| 852 |
- if err != nil || exitCode != 0 {
|
|
| 853 |
- return "", result.Stdout(), result.Stderr(), fmt.Errorf("failed to build the image: %s", result.Combined())
|
|
| 854 |
- } |
|
| 855 |
- id, err := getIDByName(name) |
|
| 856 |
- if err != nil {
|
|
| 857 |
- return "", result.Stdout(), result.Stderr(), err |
|
| 858 |
- } |
|
| 859 |
- return id, result.Stdout(), result.Stderr(), nil |
|
| 860 |
-} |
|
| 861 |
- |
|
| 862 |
-// Deprecated |
|
| 863 |
-func buildImageFromGitWithStdoutStderr(name string, ctx *fakeGit, useCache bool, buildFlags ...string) (string, string, string, error) {
|
|
| 864 |
- args := []string{"build", "-t", name}
|
|
| 865 |
- if !useCache {
|
|
| 866 |
- args = append(args, "--no-cache") |
|
| 867 |
- } |
|
| 868 |
- args = append(args, buildFlags...) |
|
| 869 |
- args = append(args, ctx.RepoURL) |
|
| 870 |
- result := icmd.RunCmd(icmd.Cmd{
|
|
| 871 |
- Command: append([]string{dockerBinary}, args...),
|
|
| 872 |
- }) |
|
| 873 |
- exitCode := result.ExitCode |
|
| 874 |
- err := result.Error |
|
| 875 |
- if err != nil || exitCode != 0 {
|
|
| 876 |
- return "", result.Stdout(), result.Stderr(), fmt.Errorf("failed to build the image: %s", result.Combined())
|
|
| 877 |
- } |
|
| 878 |
- id, err := getIDByName(name) |
|
| 879 |
- if err != nil {
|
|
| 880 |
- return "", result.Stdout(), result.Stderr(), err |
|
| 881 |
- } |
|
| 882 |
- return id, result.Stdout(), result.Stderr(), nil |
|
| 883 |
-} |
|
| 884 |
- |
|
| 885 |
-// Deprecated |
|
| 886 |
-func buildImageFromPath(name, path string, useCache bool, buildFlags ...string) (string, error) {
|
|
| 887 |
- args := []string{"build", "-t", name}
|
|
| 888 |
- if !useCache {
|
|
| 889 |
- args = append(args, "--no-cache") |
|
| 890 |
- } |
|
| 891 |
- args = append(args, buildFlags...) |
|
| 892 |
- args = append(args, path) |
|
| 893 |
- buildCmd := exec.Command(dockerBinary, args...) |
|
| 894 |
- out, exitCode, err := runCommandWithOutput(buildCmd) |
|
| 895 |
- if err != nil || exitCode != 0 {
|
|
| 896 |
- return "", fmt.Errorf("failed to build the image: %s", out)
|
|
| 897 |
- } |
|
| 898 |
- return getIDByName(name) |
|
| 899 |
-} |
|
| 900 |
- |
|
| 901 | 799 |
type gitServer interface {
|
| 902 | 800 |
URL() string |
| 903 | 801 |
Close() error |
| ... | ... |
@@ -927,69 +766,63 @@ func (g *fakeGit) Close() {
|
| 927 | 927 |
os.RemoveAll(g.root) |
| 928 | 928 |
} |
| 929 | 929 |
|
| 930 |
-func newFakeGit(name string, files map[string]string, enforceLocalServer bool) (*fakeGit, error) {
|
|
| 931 |
- ctx, err := fakeContextWithFiles(files) |
|
| 932 |
- if err != nil {
|
|
| 933 |
- return nil, err |
|
| 934 |
- } |
|
| 930 |
+func newFakeGit(c *check.C, name string, files map[string]string, enforceLocalServer bool) *fakeGit {
|
|
| 931 |
+ ctx := fakeContextWithFiles(c, files) |
|
| 935 | 932 |
defer ctx.Close() |
| 936 | 933 |
curdir, err := os.Getwd() |
| 937 | 934 |
if err != nil {
|
| 938 |
- return nil, err |
|
| 935 |
+ c.Fatal(err) |
|
| 939 | 936 |
} |
| 940 | 937 |
defer os.Chdir(curdir) |
| 941 | 938 |
|
| 942 | 939 |
if output, err := exec.Command("git", "init", ctx.Dir).CombinedOutput(); err != nil {
|
| 943 |
- return nil, fmt.Errorf("error trying to init repo: %s (%s)", err, output)
|
|
| 940 |
+ c.Fatalf("error trying to init repo: %s (%s)", err, output)
|
|
| 944 | 941 |
} |
| 945 | 942 |
err = os.Chdir(ctx.Dir) |
| 946 | 943 |
if err != nil {
|
| 947 |
- return nil, err |
|
| 944 |
+ c.Fatal(err) |
|
| 948 | 945 |
} |
| 949 | 946 |
if output, err := exec.Command("git", "config", "user.name", "Fake User").CombinedOutput(); err != nil {
|
| 950 |
- return nil, fmt.Errorf("error trying to set 'user.name': %s (%s)", err, output)
|
|
| 947 |
+ c.Fatalf("error trying to set 'user.name': %s (%s)", err, output)
|
|
| 951 | 948 |
} |
| 952 | 949 |
if output, err := exec.Command("git", "config", "user.email", "fake.user@example.com").CombinedOutput(); err != nil {
|
| 953 |
- return nil, fmt.Errorf("error trying to set 'user.email': %s (%s)", err, output)
|
|
| 950 |
+ c.Fatalf("error trying to set 'user.email': %s (%s)", err, output)
|
|
| 954 | 951 |
} |
| 955 | 952 |
if output, err := exec.Command("git", "add", "*").CombinedOutput(); err != nil {
|
| 956 |
- return nil, fmt.Errorf("error trying to add files to repo: %s (%s)", err, output)
|
|
| 953 |
+ c.Fatalf("error trying to add files to repo: %s (%s)", err, output)
|
|
| 957 | 954 |
} |
| 958 | 955 |
if output, err := exec.Command("git", "commit", "-a", "-m", "Initial commit").CombinedOutput(); err != nil {
|
| 959 |
- return nil, fmt.Errorf("error trying to commit to repo: %s (%s)", err, output)
|
|
| 956 |
+ c.Fatalf("error trying to commit to repo: %s (%s)", err, output)
|
|
| 960 | 957 |
} |
| 961 | 958 |
|
| 962 | 959 |
root, err := ioutil.TempDir("", "docker-test-git-repo")
|
| 963 | 960 |
if err != nil {
|
| 964 |
- return nil, err |
|
| 961 |
+ c.Fatal(err) |
|
| 965 | 962 |
} |
| 966 | 963 |
repoPath := filepath.Join(root, name+".git") |
| 967 | 964 |
if output, err := exec.Command("git", "clone", "--bare", ctx.Dir, repoPath).CombinedOutput(); err != nil {
|
| 968 | 965 |
os.RemoveAll(root) |
| 969 |
- return nil, fmt.Errorf("error trying to clone --bare: %s (%s)", err, output)
|
|
| 966 |
+ c.Fatalf("error trying to clone --bare: %s (%s)", err, output)
|
|
| 970 | 967 |
} |
| 971 | 968 |
err = os.Chdir(repoPath) |
| 972 | 969 |
if err != nil {
|
| 973 | 970 |
os.RemoveAll(root) |
| 974 |
- return nil, err |
|
| 971 |
+ c.Fatal(err) |
|
| 975 | 972 |
} |
| 976 | 973 |
if output, err := exec.Command("git", "update-server-info").CombinedOutput(); err != nil {
|
| 977 | 974 |
os.RemoveAll(root) |
| 978 |
- return nil, fmt.Errorf("error trying to git update-server-info: %s (%s)", err, output)
|
|
| 975 |
+ c.Fatalf("error trying to git update-server-info: %s (%s)", err, output)
|
|
| 979 | 976 |
} |
| 980 | 977 |
err = os.Chdir(curdir) |
| 981 | 978 |
if err != nil {
|
| 982 | 979 |
os.RemoveAll(root) |
| 983 |
- return nil, err |
|
| 980 |
+ c.Fatal(err) |
|
| 984 | 981 |
} |
| 985 | 982 |
|
| 986 | 983 |
var server gitServer |
| 987 | 984 |
if !enforceLocalServer {
|
| 988 | 985 |
// use fakeStorage server, which might be local or remote (at test daemon) |
| 989 |
- server, err = fakeStorageWithContext(fakeContextFromDir(root)) |
|
| 990 |
- if err != nil {
|
|
| 991 |
- return nil, fmt.Errorf("cannot start fake storage: %v", err)
|
|
| 992 |
- } |
|
| 986 |
+ server = fakeStorageWithContext(c, fakeContextFromDir(root)) |
|
| 993 | 987 |
} else {
|
| 994 | 988 |
// always start a local http server on CLI test machine |
| 995 | 989 |
httpServer := httptest.NewServer(http.FileServer(http.Dir(root))) |
| ... | ... |
@@ -999,7 +832,7 @@ func newFakeGit(name string, files map[string]string, enforceLocalServer bool) ( |
| 999 | 999 |
root: root, |
| 1000 | 1000 |
server: server, |
| 1001 | 1001 |
RepoURL: fmt.Sprintf("%s/%s.git", server.URL(), name),
|
| 1002 |
- }, nil |
|
| 1002 |
+ } |
|
| 1003 | 1003 |
} |
| 1004 | 1004 |
|
| 1005 | 1005 |
// Write `content` to the file at path `dst`, creating it if necessary, |