Browse code

Merge pull request #9086 from vbatts/vbatts-tarsum_more_tests

pkg/tarsum: adding more tests

Michael Crosby authored on 2014/11/22 10:12:55
Showing 1 changed files
... ...
@@ -329,6 +329,153 @@ func TestTarSums(t *testing.T) {
329 329
 	}
330 330
 }
331 331
 
332
+func TestIteration(t *testing.T) {
333
+	headerTests := []struct {
334
+		expectedSum string // TODO(vbatts) it would be nice to get individual sums of each
335
+		version     Version
336
+		hdr         *tar.Header
337
+		data        []byte
338
+	}{
339
+		{
340
+			"tarsum+sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
341
+			Version0,
342
+			&tar.Header{
343
+				Name:     "file.txt",
344
+				Size:     0,
345
+				Typeflag: tar.TypeReg,
346
+				Devminor: 0,
347
+				Devmajor: 0,
348
+			},
349
+			[]byte(""),
350
+		},
351
+		{
352
+			"tarsum.dev+sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
353
+			VersionDev,
354
+			&tar.Header{
355
+				Name:     "file.txt",
356
+				Size:     0,
357
+				Typeflag: tar.TypeReg,
358
+				Devminor: 0,
359
+				Devmajor: 0,
360
+			},
361
+			[]byte(""),
362
+		},
363
+		{
364
+			"tarsum.dev+sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
365
+			VersionDev,
366
+			&tar.Header{
367
+				Name:     "another.txt",
368
+				Uid:      1000,
369
+				Gid:      1000,
370
+				Uname:    "slartibartfast",
371
+				Gname:    "users",
372
+				Size:     4,
373
+				Typeflag: tar.TypeReg,
374
+				Devminor: 0,
375
+				Devmajor: 0,
376
+			},
377
+			[]byte("test"),
378
+		},
379
+		{
380
+			"tarsum.dev+sha256:4cc2e71ac5d31833ab2be9b4f7842a14ce595ec96a37af4ed08f87bc374228cd",
381
+			VersionDev,
382
+			&tar.Header{
383
+				Name:     "xattrs.txt",
384
+				Uid:      1000,
385
+				Gid:      1000,
386
+				Uname:    "slartibartfast",
387
+				Gname:    "users",
388
+				Size:     4,
389
+				Typeflag: tar.TypeReg,
390
+				Xattrs: map[string]string{
391
+					"user.key1": "value1",
392
+					"user.key2": "value2",
393
+				},
394
+			},
395
+			[]byte("test"),
396
+		},
397
+		{
398
+			"tarsum.dev+sha256:65f4284fa32c0d4112dd93c3637697805866415b570587e4fd266af241503760",
399
+			VersionDev,
400
+			&tar.Header{
401
+				Name:     "xattrs.txt",
402
+				Uid:      1000,
403
+				Gid:      1000,
404
+				Uname:    "slartibartfast",
405
+				Gname:    "users",
406
+				Size:     4,
407
+				Typeflag: tar.TypeReg,
408
+				Xattrs: map[string]string{
409
+					"user.KEY1": "value1", // adding different case to ensure different sum
410
+					"user.key2": "value2",
411
+				},
412
+			},
413
+			[]byte("test"),
414
+		},
415
+		{
416
+			"tarsum+sha256:c12bb6f1303a9ddbf4576c52da74973c00d14c109bcfa76b708d5da1154a07fa",
417
+			Version0,
418
+			&tar.Header{
419
+				Name:     "xattrs.txt",
420
+				Uid:      1000,
421
+				Gid:      1000,
422
+				Uname:    "slartibartfast",
423
+				Gname:    "users",
424
+				Size:     4,
425
+				Typeflag: tar.TypeReg,
426
+				Xattrs: map[string]string{
427
+					"user.NOT": "CALCULATED",
428
+				},
429
+			},
430
+			[]byte("test"),
431
+		},
432
+	}
433
+	for _, htest := range headerTests {
434
+		s, err := renderSumForHeader(htest.version, htest.hdr, htest.data)
435
+		if err != nil {
436
+			t.Fatal(err)
437
+		}
438
+
439
+		if s != htest.expectedSum {
440
+			t.Errorf("expected sum: %q, got: %q", htest.expectedSum, s)
441
+		}
442
+	}
443
+
444
+}
445
+
446
+func renderSumForHeader(v Version, h *tar.Header, data []byte) (string, error) {
447
+	buf := bytes.NewBuffer(nil)
448
+	// first build our test tar
449
+	tw := tar.NewWriter(buf)
450
+	if err := tw.WriteHeader(h); err != nil {
451
+		return "", err
452
+	}
453
+	if _, err := tw.Write(data); err != nil {
454
+		return "", err
455
+	}
456
+	tw.Close()
457
+
458
+	ts, err := NewTarSum(buf, true, v)
459
+	if err != nil {
460
+		return "", err
461
+	}
462
+	tr := tar.NewReader(ts)
463
+	for {
464
+		hdr, err := tr.Next()
465
+		if hdr == nil || err == io.EOF {
466
+			break
467
+		}
468
+		if err != nil {
469
+			return "", err
470
+		}
471
+		if _, err = io.Copy(ioutil.Discard, tr); err != nil {
472
+			return "", err
473
+		}
474
+		break // we're just reading one header ...
475
+	}
476
+	return ts.Sum(nil), nil
477
+}
478
+
332 479
 func Benchmark9kTar(b *testing.B) {
333 480
 	buf := bytes.NewBuffer([]byte{})
334 481
 	fh, err := os.Open("testdata/46af0962ab5afeb5ce6740d4d91652e69206fc991fd5328c1a94d364ad00e457/layer.tar")