From 51b0481d4aecf1c051b1dfc942ab46986e776bef Mon Sep 17 00:00:00 2001 From: Vincent Batts Date: Mon, 3 Aug 2015 17:13:31 -0400 Subject: [PATCH] tar/asm: adding a failing test due to GNU LongLink --- tar/asm/assemble_test.go | 80 ++++++++++++++++++++++++++++--- tar/asm/testdata/longlink.tar.gz | Bin 0 -> 438 bytes 2 files changed, 74 insertions(+), 6 deletions(-) create mode 100644 tar/asm/testdata/longlink.tar.gz diff --git a/tar/asm/assemble_test.go b/tar/asm/assemble_test.go index 7cf44dc..e37d7f3 100644 --- a/tar/asm/assemble_test.go +++ b/tar/asm/assemble_test.go @@ -114,8 +114,8 @@ func TestTarStreamMangledGetterPutter(t *testing.T) { func TestTarStream(t *testing.T) { var ( - expectedSum = "1eb237ff69bca6e22789ecb05b45d35ca307adbd" - expectedSize int64 = 10240 + expectedSHA1Sum = "1eb237ff69bca6e22789ecb05b45d35ca307adbd" + expectedSize int64 = 10240 ) fh, err := os.Open("./testdata/t.tar.gz") @@ -153,8 +153,8 @@ func TestTarStream(t *testing.T) { if i != expectedSize { t.Errorf("size of tar: expected %d; got %d", expectedSize, i) } - if fmt.Sprintf("%x", h0.Sum(nil)) != expectedSum { - t.Fatalf("checksum of tar: expected %s; got %x", expectedSum, h0.Sum(nil)) + if fmt.Sprintf("%x", h0.Sum(nil)) != expectedSHA1Sum { + t.Fatalf("checksum of tar: expected %s; got %x", expectedSHA1Sum, h0.Sum(nil)) } t.Logf("%s", w.String()) // if we fail, then show the packed info @@ -175,7 +175,75 @@ func TestTarStream(t *testing.T) { if i != expectedSize { t.Errorf("size of output tar: expected %d; got %d", expectedSize, i) } - if fmt.Sprintf("%x", h1.Sum(nil)) != expectedSum { - t.Fatalf("checksum of output tar: expected %s; got %x", expectedSum, h1.Sum(nil)) + if fmt.Sprintf("%x", h1.Sum(nil)) != expectedSHA1Sum { + t.Fatalf("checksum of output tar: expected %s; got %x", expectedSHA1Sum, h1.Sum(nil)) + } +} + +func TestTarGNUTar(t *testing.T) { + var ( + expectedSHA1Sum = "d9f6babe107b7247953dff6b5b5ae31a3a880add" + expectedSize int64 = 20480 + ) + + fh, err := os.Open("./testdata/longlink.tar.gz") + if err != nil { + t.Fatal(err) + } + defer fh.Close() + gzRdr, err := gzip.NewReader(fh) + if err != nil { + t.Fatal(err) + } + defer gzRdr.Close() + + // Setup where we'll store the metadata + w := bytes.NewBuffer([]byte{}) + sp := storage.NewJSONPacker(w) + fgp := storage.NewBufferFileGetPutter() + + // wrap the disassembly stream + tarStream, err := NewInputTarStream(gzRdr, sp, fgp) + if err != nil { + t.Fatal(err) + } + + // get a sum of the stream after it has passed through to ensure it's the same. + h0 := sha1.New() + tRdr0 := io.TeeReader(tarStream, h0) + + // read it all to the bit bucket + i, err := io.Copy(ioutil.Discard, tRdr0) + if err != nil { + t.Fatal(err) + } + + if i != expectedSize { + t.Errorf("size of tar: expected %d; got %d", expectedSize, i) + } + if fmt.Sprintf("%x", h0.Sum(nil)) != expectedSHA1Sum { + t.Fatalf("checksum of tar: expected %s; got %x", expectedSHA1Sum, h0.Sum(nil)) + } + + t.Logf("%s", w.String()) // if we fail, then show the packed info + + // If we've made it this far, then we'll turn it around and create a tar + // stream from the packed metadata and buffered file contents. + r := bytes.NewBuffer(w.Bytes()) + sup := storage.NewJSONUnpacker(r) + // and reuse the fgp that we Put the payloads to. + + rc := NewOutputTarStream(fgp, sup) + h1 := sha1.New() + i, err = io.Copy(h1, rc) + if err != nil { + t.Fatal(err) + } + + if i != expectedSize { + t.Errorf("size of output tar: expected %d; got %d", expectedSize, i) + } + if fmt.Sprintf("%x", h1.Sum(nil)) != expectedSHA1Sum { + t.Fatalf("checksum of output tar: expected %s; got %x", expectedSHA1Sum, h1.Sum(nil)) } } diff --git a/tar/asm/testdata/longlink.tar.gz b/tar/asm/testdata/longlink.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..cb21db5f382892fd9c2e529e7baeff37efee7dbf GIT binary patch literal 438 zcmV;n0ZINJiwFokufJ6Q18i?@XKZP1Yc6zQaschxYihzk6hPrD#T6tolX?8@0^CGe zv6O;>NlTaCq*bU`jW=d)k)97EwFcCl>%@VURnx9lRgshFr4)vvO~LGs_Ure1g>@mM zHRk*+171 z$otoI^7Pkm(m%uHK;GZi*3w_Y@BQap3FQ5QbCLcUF7%&m2;}`^zXH%-!&v`0hCtpw znP}**;i~>O4#9-}!|C)_aDD&jLm=+&OtS3%RS5e}8UlHL8y)+96;t|4hd|!n1<(Fp z#pM2iA&~d4ePsWy;lS22J8(;*P`4}JgIn8^CCqO8j5VY%HrFJCsVnV#d&_{`Bbb36;f|9^!3 z``p61hzuRuROXrO}ey1{h{+o}d)q418?Dp61|G(4dKYXZT^n&%jztdm;jm96~ gpRfM_0000000000000000O0<70{(f!Y5-6G0O>IHkpKVy literal 0 HcmV?d00001