SPB Git forge
15commits 1branches 0releases
29.7 MBsize
maindefault branch
10 days agolast push
TypeScript 36.3% Python 31.8% Go 18% JavaScript 9.8% Shell 1.9% SQL 1.4% CSS 0.5%
2.3 KB · 91 lines go
Raw Blame History
1package spool23import (4	"bytes"5	"errors"6	"os"7	"path/filepath"8	"testing"9)1011func TestRoundTrip(t *testing.T) {12	dir := filepath.Join(t.TempDir(), "spool")13	s, err := Open(dir, 0)14	if err != nil {15		t.Fatal(err)16	}17	if fi, err := os.Stat(dir); err != nil || fi.Mode().Perm() != 0o700 {18		t.Fatalf("spool dir perms: %v %v", fi, err)19	}20	if _, _, err := s.Oldest(); !errors.Is(err, ErrEmpty) {21		t.Fatalf("expected ErrEmpty, got %v", err)22	}23	a := []byte("batch-a")24	b := []byte("batch-b-longer")25	na, _ := s.Write(a)26	nb, _ := s.Write(b)27	if na >= nb {28		t.Fatalf("names must sort chronologically: %s %s", na, nb)29	}30	n, size := s.Stats()31	if n != 2 || size != int64(len(a)+len(b)) {32		t.Fatalf("stats = %d %d", n, size)33	}34	name, data, err := s.Oldest()35	if err != nil || name != na || !bytes.Equal(data, a) {36		t.Fatalf("oldest = %s %q %v", name, data, err)37	}38	if err := s.Remove(name); err != nil {39		t.Fatal(err)40	}41	name, data, _ = s.Oldest()42	if name != nb || !bytes.Equal(data, b) {43		t.Fatalf("second oldest = %s %q", name, data)44	}45	s.Remove(name)46	if _, _, err := s.Oldest(); !errors.Is(err, ErrEmpty) {47		t.Fatal("spool should be empty")48	}49	if err := s.Remove("does-not-exist.json.gz"); err != nil {50		t.Fatalf("removing a missing file must be a no-op: %v", err)51	}52}5354func TestCapDropsOldest(t *testing.T) {55	s, err := Open(t.TempDir(), 1000)56	if err != nil {57		t.Fatal(err)58	}59	chunk := bytes.Repeat([]byte("x"), 300)60	var names []string61	for i := 0; i < 5; i++ { // 1500 bytes > cap 1000 → the two oldest must go62		n, err := s.Write(chunk)63		if err != nil {64			t.Fatal(err)65		}66		names = append(names, n)67	}68	count, size := s.Stats()69	if count != 3 || size != 900 {70		t.Fatalf("after cap: %d files, %d bytes", count, size)71	}72	oldest, _, _ := s.Oldest()73	if oldest != names[2] {74		t.Fatalf("oldest kept should be %s, got %s", names[2], oldest)75	}76}7778func TestIgnoresForeignFilesAndTmp(t *testing.T) {79	dir := t.TempDir()80	s, _ := Open(dir, 0)81	os.WriteFile(filepath.Join(dir, "notes.txt"), []byte("x"), 0o600)82	os.WriteFile(filepath.Join(dir, "1.json.gz.tmp"), []byte("x"), 0o600)83	if n, _ := s.Stats(); n != 0 {84		t.Fatalf("foreign files counted: %d", n)85	}86	s.Write([]byte("ok"))87	if _, err := os.Stat(filepath.Join(dir, "1.json.gz.tmp")); !errors.Is(err, os.ErrNotExist) {88		t.Fatal("stale tmp file should be cleaned on write")89	}90}91