spb/internetpressure
Public
TypeScript 36.3%
Python 31.8%
Go 18%
JavaScript 9.8%
Shell 1.9%
SQL 1.4%
CSS 0.5%
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