Compare Pack's tar stream with the build agent's, since gzip's bytes differ between Go versions (issue 1479)

This commit is contained in:
2026-10-20 20:38:47 +00:00
parent 0b990a9c31
commit 8406bb3a77
2 changed files with 23 additions and 8 deletions
+23 -8
View File
@@ -2,8 +2,10 @@ package buildstep
import (
"bytes"
"compress/gzip"
"crypto/sha256"
"encoding/hex"
"io"
"os"
"path/filepath"
"testing"
@@ -33,11 +35,13 @@ func fixture(t *testing.T) string {
return root
}
// 1479/AC1: the archive equals the bytes mesh-controller's pack makes for this tree. testdata/pack-golden.tar.gz
// was made once by running mesh-controller internal/builder/builder.go pack (origin/main 073ccc29, :1351-1425)
// on this fixture (fixture above, modes set by chmod).
// 1479/AC1: the tar stream inside the archive equals the bytes mesh-controller's pack makes for this tree.
// testdata/pack-golden.tar is the uncompressed stream, made once by running mesh-controller
// internal/builder/builder.go pack (origin/main 073ccc29, :1351-1425) on this fixture (above, modes set by chmod)
// and gunzipping its archive. The gzip layer is not compared byte for byte, since compress/gzip's output differs
// between Go versions; its header is checked to carry no name, no comment and no time.
func TestPackEqualsTheBuildAgentsArchive(t *testing.T) {
golden, err := os.ReadFile("testdata/pack-golden.tar.gz")
golden, err := os.ReadFile("testdata/pack-golden.tar")
if err != nil {
t.Fatal(err)
}
@@ -45,12 +49,23 @@ func TestPackEqualsTheBuildAgentsArchive(t *testing.T) {
if err != nil {
t.Fatal(err)
}
if !bytes.Equal(archive, golden) {
t.Errorf("the archive is %d bytes, the build agent's %d, and they differ", len(archive), len(golden))
zr, err := gzip.NewReader(bytes.NewReader(archive))
if err != nil {
t.Fatal(err)
}
sum := sha256.Sum256(golden)
if zr.Name != "" || zr.Comment != "" || !zr.ModTime.IsZero() {
t.Errorf("gzip header = name %q, comment %q, time %v; want none", zr.Name, zr.Comment, zr.ModTime)
}
tarBytes, err := io.ReadAll(zr)
if err != nil {
t.Fatal(err)
}
if !bytes.Equal(tarBytes, golden) {
t.Errorf("the tar stream is %d bytes, the build agent's %d, and they differ", len(tarBytes), len(golden))
}
sum := sha256.Sum256(archive)
if digest != "sha256:"+hex.EncodeToString(sum[:]) {
t.Errorf("digest = %s", digest)
t.Errorf("digest = %s, not the sha256 of the archive", digest)
}
}
Binary file not shown.