forked from TrueCloudLab/distribution
4c850e7165
tarsum is not actually used by the registry. Remove support for it. Convert numerous uses in unit tests to SHA256. Update docs to remove mentions of tarsums (which were often inaccurate). Remove tarsum dependency. Signed-off-by: Aaron Lehmann <aaron.lehmann@docker.com>
78 lines
1.7 KiB
Go
78 lines
1.7 KiB
Go
package testutil
|
|
|
|
import (
|
|
"archive/tar"
|
|
"bytes"
|
|
"crypto/rand"
|
|
"fmt"
|
|
"io"
|
|
mrand "math/rand"
|
|
"time"
|
|
|
|
"github.com/docker/distribution/digest"
|
|
)
|
|
|
|
// CreateRandomTarFile creates a random tarfile, returning it as an
|
|
// io.ReadSeeker along with its digest. An error is returned if there is a
|
|
// problem generating valid content.
|
|
func CreateRandomTarFile() (rs io.ReadSeeker, dgst digest.Digest, err error) {
|
|
nFiles := mrand.Intn(10) + 10
|
|
target := &bytes.Buffer{}
|
|
wr := tar.NewWriter(target)
|
|
|
|
// Perturb this on each iteration of the loop below.
|
|
header := &tar.Header{
|
|
Mode: 0644,
|
|
ModTime: time.Now(),
|
|
Typeflag: tar.TypeReg,
|
|
Uname: "randocalrissian",
|
|
Gname: "cloudcity",
|
|
AccessTime: time.Now(),
|
|
ChangeTime: time.Now(),
|
|
}
|
|
|
|
for fileNumber := 0; fileNumber < nFiles; fileNumber++ {
|
|
fileSize := mrand.Int63n(1<<20) + 1<<20
|
|
|
|
header.Name = fmt.Sprint(fileNumber)
|
|
header.Size = fileSize
|
|
|
|
if err := wr.WriteHeader(header); err != nil {
|
|
return nil, "", err
|
|
}
|
|
|
|
randomData := make([]byte, fileSize)
|
|
|
|
// Fill up the buffer with some random data.
|
|
n, err := rand.Read(randomData)
|
|
|
|
if n != len(randomData) {
|
|
return nil, "", fmt.Errorf("short read creating random reader: %v bytes != %v bytes", n, len(randomData))
|
|
}
|
|
|
|
if err != nil {
|
|
return nil, "", err
|
|
}
|
|
|
|
nn, err := io.Copy(wr, bytes.NewReader(randomData))
|
|
if nn != fileSize {
|
|
return nil, "", fmt.Errorf("short copy writing random file to tar")
|
|
}
|
|
|
|
if err != nil {
|
|
return nil, "", err
|
|
}
|
|
|
|
if err := wr.Flush(); err != nil {
|
|
return nil, "", err
|
|
}
|
|
}
|
|
|
|
if err := wr.Close(); err != nil {
|
|
return nil, "", err
|
|
}
|
|
|
|
dgst = digest.FromBytes(target.Bytes())
|
|
|
|
return bytes.NewReader(target.Bytes()), dgst, nil
|
|
}
|