//go:build integration package builder import ( "bytes" "context" "os" "os/exec" "path/filepath" "testing" ) func TestAnXzFileOfAFewDeltaBlocksAndTwoStreamsIsRead(t *testing.T) { // The streams this test builds are ones the reader decodes, so what the walk refuses below is the // same framing the reader follows. body := bytes.Repeat([]byte("betterbird "), 300) whole := tarHolding(t, body) half := len(whole) / 2 for name, file := range map[string][]byte{ "one stream of delta blocks": xzStream(whole, 512, true, -1), "two streams with padding": append(append(xzStream(whole[:half], 700, true, -1), 0, 0, 0, 0), xzStream(whole[half:], 100, false, -1)...), } { path := writeTemp(t, file) if xzPath, err := exec.LookPath("xz"); err == nil { if out, err := exec.Command(xzPath, "-t", path).CombinedOutput(); err != nil { t.Fatalf("%s: xz itself refuses the built stream: %v %s", name, err, out) } } into := t.TempDir() if err := unpackUpstream(context.Background(), path, into, "betterbird"); err != nil { t.Fatalf("%s: %v", name, err) } got, err := os.ReadFile(filepath.Join(into, "data")) if err != nil || !bytes.Equal(got, body) { t.Fatalf("%s: unpacked %d bytes, want %d: %v", name, len(got), len(body), err) } } }