123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 | package gitx
import (
"os/exec"
"strings"
"testing"
)
// TestBatchCopy: Copy streams a blob whole and leaves the batch ready for
// the next request.
func TestBatchCopy(t *testing.T) {
dir := t.TempDir()
run := func(stdin string, args ...string) string {
t.Helper()
cmd := exec.Command("git", append([]string{"-C", dir}, args...)...)
cmd.Stdin = strings.NewReader(stdin)
out, err := cmd.Output()
if err != nil {
t.Fatalf("git %v: %v", args, err)
}
return strings.TrimSpace(string(out))
}
run("", "init", "-q", "--bare")
big := strings.Repeat("0123456789abcdef\n", 1<<16) // past the reader's buffer
a := run(big, "hash-object", "-w", "--stdin")
b := run("next\n", "hash-object", "-w", "--stdin")
batch, err := Repo{Dir: dir}.NewBatch()
if err != nil {
t.Fatal(err)
}
defer func() {
if err := batch.Close(); err != nil {
t.Error(err)
}
}()
var buf strings.Builder
if err := batch.Copy(a, &buf); err != nil {
t.Fatal(err)
}
if buf.String() != big {
t.Errorf("Copy gave %d bytes, want %d", buf.Len(), len(big))
}
if got, err := batch.Get(b); err != nil || string(got) != "next\n" {
t.Errorf("Get after Copy = %q, %v", got, err)
}
}
func TestIsZeroSHA(t *testing.T) {
for s, want := range map[string]bool{
strings.Repeat("0", 40): true,
strings.Repeat("0", 64): true,
strings.Repeat("0", 39): false,
"": false,
strings.Repeat("0", 39) + "1": false,
} {
if got := IsZeroSHA(s); got != want {
t.Errorf("IsZeroSHA(%q) = %v, want %v", s, got, want)
}
}
}
|