Browse code

integ-cli: add build test for absolute symlink

Signed-off-by: Cristian Staretu <cristian.staretu@gmail.com>

unclejack authored on 2014/11/28 05:14:15
Showing 1 changed files
... ...
@@ -1167,6 +1167,81 @@ func TestBuildCopyDisallowRemote(t *testing.T) {
1167 1167
 	logDone("build - copy - disallow copy from remote")
1168 1168
 }
1169 1169
 
1170
+func TestBuildAddBadLinks(t *testing.T) {
1171
+	const (
1172
+		dockerfile = `
1173
+			FROM scratch
1174
+			ADD links.tar /
1175
+			ADD foo.txt /symlink/
1176
+			`
1177
+		targetFile = "foo.txt"
1178
+	)
1179
+	var (
1180
+		name = "test-link-absolute"
1181
+	)
1182
+	defer deleteImages(name)
1183
+	ctx, err := fakeContext(dockerfile, nil)
1184
+	if err != nil {
1185
+		t.Fatal(err)
1186
+	}
1187
+	defer ctx.Close()
1188
+
1189
+	tempDir, err := ioutil.TempDir("", "test-link-absolute-temp-")
1190
+	if err != nil {
1191
+		t.Fatalf("failed to create temporary directory: %s", tempDir)
1192
+	}
1193
+	defer os.RemoveAll(tempDir)
1194
+
1195
+	symlinkTarget := fmt.Sprintf("/../../../../../../../../../../../..%s", tempDir)
1196
+	tarPath := filepath.Join(ctx.Dir, "links.tar")
1197
+	nonExistingFile := filepath.Join(tempDir, targetFile)
1198
+	fooPath := filepath.Join(ctx.Dir, targetFile)
1199
+
1200
+	tarOut, err := os.Create(tarPath)
1201
+	if err != nil {
1202
+		t.Fatal(err)
1203
+	}
1204
+
1205
+	tarWriter := tar.NewWriter(tarOut)
1206
+
1207
+	header := &tar.Header{
1208
+		Name:     "symlink",
1209
+		Typeflag: tar.TypeSymlink,
1210
+		Linkname: symlinkTarget,
1211
+		Mode:     0755,
1212
+		Uid:      0,
1213
+		Gid:      0,
1214
+	}
1215
+
1216
+	err = tarWriter.WriteHeader(header)
1217
+	if err != nil {
1218
+		t.Fatal(err)
1219
+	}
1220
+
1221
+	tarWriter.Close()
1222
+	tarOut.Close()
1223
+
1224
+	foo, err := os.Create(fooPath)
1225
+	if err != nil {
1226
+		t.Fatal(err)
1227
+	}
1228
+	defer foo.Close()
1229
+
1230
+	if _, err := foo.WriteString("test"); err != nil {
1231
+		t.Fatal(err)
1232
+	}
1233
+
1234
+	if _, err := buildImageFromContext(name, ctx, true); err != nil {
1235
+		t.Fatal(err)
1236
+	}
1237
+
1238
+	if _, err := os.Stat(nonExistingFile); err == nil || err != nil && !os.IsNotExist(err) {
1239
+		t.Fatalf("%s shouldn't have been written and it shouldn't exist", nonExistingFile)
1240
+	}
1241
+
1242
+	logDone("build - ADD must add files in container")
1243
+}
1244
+
1170 1245
 // Issue #5270 - ensure we throw a better error than "unexpected EOF"
1171 1246
 // when we can't access files in the context.
1172 1247
 func TestBuildWithInaccessibleFilesInContext(t *testing.T) {