carlos / platform Public

Clone
git clone https://amadan.net/carlos/platform

Plain git — no account needed to clone.

Download

Download this file

1package host
2
3import (
4 "context"
5 "testing"
6 "time"
7
8 "github.com/carlosframework/platform/internal/apperr"
9 "github.com/carlosframework/platform/internal/applog"
10 "github.com/carlosframework/platform/internal/release"
11)
12
13func TestErrshipFlushWritesOneChunkPerApp(t *testing.T) {
14 s := release.NewDirStore(t.TempDir())
15 now := time.Date(2026, 9, 7, 10, 0, 0, 0, time.UTC)
16 sink := apperr.NewSink("box1", func() time.Time { return now })
17 sink.Add("bab", "web", apperr.Record{Source: apperr.SourceEdge, Kind: apperr.KindHTTP, Name: "500 GET /x", Host: "h1"})
18 sink.Add("bab", "web", apperr.Record{Source: apperr.SourceEdge, Kind: apperr.KindHTTP, Name: "500 GET /x", Host: "h1"})
19 pending := map[applog.AppKey][]apperr.Record{}
20 errshipGather(sink, pending)
21 errshipFlush(context.Background(), s, pending)
22 if len(pending) != 0 {
23 t.Fatalf("pending after flush = %d", len(pending))
24 }
25 recs, _, err := apperr.ReadWindow(context.Background(), s, "bab", "web", apperr.Filter{Since: now.Add(-time.Minute)}, 100)
26 if err != nil || len(recs) != 1 || recs[0].Count != 2 {
27 t.Fatalf("read back = %+v, %v", recs, err)
28 }
29}
30
31func TestErrshipFlushHoldsOnFailure(t *testing.T) {
32 pending := map[applog.AppKey][]apperr.Record{{Acct: "bab", App: "web"}: {{TS: time.Now(), Source: apperr.SourceEdge, Name: "x", FP: "f", Box: "box1", Seq: 1}}}
33 errshipFlush(context.Background(), failingStore{}, pending)
34 if len(pending) != 1 {
35 t.Fatal("a failed flush must keep its records for the next round")
36 }
37}
38