41 lines
1.2 KiB
Go
41 lines
1.2 KiB
Go
//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)
|
|
}
|
|
}
|
|
}
|