Browse code

clean up context on build completion & add test

Docker-DCO-1.1-Signed-off-by: Cristian Staretu <cristian.staretu@gmail.com> (github: unclejack)

unclejack authored on 2014/09/02 23:35:25
Showing 3 changed files
... ...
@@ -30,6 +30,7 @@ import (
30 30
 	"github.com/docker/docker/builder/parser"
31 31
 	"github.com/docker/docker/daemon"
32 32
 	"github.com/docker/docker/engine"
33
+	"github.com/docker/docker/pkg/log"
33 34
 	"github.com/docker/docker/pkg/tarsum"
34 35
 	"github.com/docker/docker/registry"
35 36
 	"github.com/docker/docker/runconfig"
... ...
@@ -163,6 +164,10 @@ func (b *Builder) Run(context io.Reader) (string, error) {
163 163
 		return "", fmt.Errorf("No image was generated. Is your Dockerfile empty?\n")
164 164
 	}
165 165
 
166
+	if err := os.RemoveAll(b.contextPath); err != nil {
167
+		log.Debugf("[BUILDER] failed to remove temporary context: %s", err)
168
+	}
169
+
166 170
 	fmt.Fprintf(b.OutStream, "Successfully built %s\n", utils.TruncateID(b.image))
167 171
 	return b.image, nil
168 172
 }
... ...
@@ -706,6 +706,31 @@ func TestBuildEnv(t *testing.T) {
706 706
 	logDone("build - env")
707 707
 }
708 708
 
709
+func TestBuildContextCleanup(t *testing.T) {
710
+	name := "testbuildcontextcleanup"
711
+	defer deleteImages(name)
712
+	entries, err := ioutil.ReadDir("/var/lib/docker/tmp")
713
+	if err != nil {
714
+		t.Fatalf("failed to list contents of tmp dir: %s", err)
715
+	}
716
+	_, err = buildImage(name,
717
+		`FROM scratch
718
+        ENTRYPOINT ["/bin/echo"]`,
719
+		true)
720
+	if err != nil {
721
+		t.Fatal(err)
722
+	}
723
+	entriesFinal, err := ioutil.ReadDir("/var/lib/docker/tmp")
724
+	if err != nil {
725
+		t.Fatalf("failed to list contents of tmp dir: %s", err)
726
+	}
727
+	if err = compareDirectoryEntries(entries, entriesFinal); err != nil {
728
+		t.Fatalf("context should have been deleted, but wasn't")
729
+	}
730
+
731
+	logDone("build - verify context cleanup works properly")
732
+}
733
+
709 734
 func TestBuildCmd(t *testing.T) {
710 735
 	name := "testbuildcmd"
711 736
 	expected := "[/bin/echo Hello World]"
... ...
@@ -5,6 +5,7 @@ import (
5 5
 	"encoding/json"
6 6
 	"fmt"
7 7
 	"io"
8
+	"os"
8 9
 	"os/exec"
9 10
 	"reflect"
10 11
 	"strings"
... ...
@@ -175,3 +176,20 @@ func waitRun(contId string) error {
175 175
 
176 176
 	return nil
177 177
 }
178
+
179
+func compareDirectoryEntries(e1 []os.FileInfo, e2 []os.FileInfo) error {
180
+	var (
181
+		e1Entries = make(map[string]struct{})
182
+		e2Entries = make(map[string]struct{})
183
+	)
184
+	for _, e := range e1 {
185
+		e1Entries[e.Name()] = struct{}{}
186
+	}
187
+	for _, e := range e2 {
188
+		e2Entries[e.Name()] = struct{}{}
189
+	}
190
+	if !reflect.DeepEqual(e1Entries, e2Entries) {
191
+		return fmt.Errorf("entries differ")
192
+	}
193
+	return nil
194
+}