]> git.giacomolli.uk - onechat/blobdiff - probe_test.go
Keep a built leaf when the view lags the tree
[onechat] / probe_test.go
index c1d08dff6c3992060c9a07d76dcc44004a266783..0651281368c3e194ab15711986384c226fbc484e 100644 (file)
@@ -130,7 +130,7 @@ func TestProbeRunStopsWhenTheQuotaGrows(t *testing.T) {
        require.NoError(t, err)
        require.NoError(t, run.memory.Close())
 
        require.NoError(t, err)
        require.NoError(t, run.memory.Close())
 
-       require.Contains(t, stop, "x-codex-primary-used-percent grew from 10 to")
+       require.Regexp(t, `^x-codex-primary-used-percent grew from \d+ to \d+$`, stop)
        require.Less(t, appended, probeMessages)
        require.NotEmpty(t, sizes)
 
        require.Less(t, appended, probeMessages)
        require.NotEmpty(t, sizes)
 
@@ -144,7 +144,7 @@ func TestProbeRunStopsWhenTheQuotaGrows(t *testing.T) {
        require.Contains(t, report.String(), "cached (80.0%)")
        require.Contains(t, report.String(), "line bytes: min 400, median 400, mean 400, max 400, 0 over 512")
        require.Contains(t, report.String(), "calls at once: at most ")
        require.Contains(t, report.String(), "cached (80.0%)")
        require.Contains(t, report.String(), "line bytes: min 400, median 400, mean 400, max 400, 0 over 512")
        require.Contains(t, report.String(), "calls at once: at most ")
-       require.Contains(t, report.String(), "quota at the first call: primary-used-percent=10")
+       require.Contains(t, report.String(), "quota at the first call: primary-used-percent=")
 }
 
 func TestProbeRunStopsAtTheCallLimit(t *testing.T) {
 }
 
 func TestProbeRunStopsAtTheCallLimit(t *testing.T) {
@@ -233,6 +233,52 @@ func TestProbeRunWaitsOnlyBeforeUserMessages(t *testing.T) {
        require.Equal(t, 3, server.Calls())
 }
 
        require.Equal(t, 3, server.Calls())
 }
 
+func TestSlotSummarizerLimitsTheBuildsAtOnce(t *testing.T) {
+       inner := newFakeSummarizer()
+       inner.gate = make(chan struct{})
+       summarizer := slotSummarizer{
+               inner: inner,
+               slots: make(chan struct{}, 2),
+       }
+
+       var group sync.WaitGroup
+       for n := range 6 {
+               group.Go(func() {
+                       _, err := summarizer.Summarize(t.Context(), Task{
+                               Level: 0,
+                               Index: n,
+                               Input: []string{"user: " + strings.Repeat("x", 600)},
+                       })
+                       require.NoError(t, err)
+               })
+       }
+
+       require.Eventually(t, func() bool {
+               return inner.Active() == 2
+       }, 10*time.Second, time.Millisecond)
+
+       close(inner.gate)
+       group.Wait()
+       require.Equal(t, 2, inner.peak)
+}
+
+func TestReadUsageFileSortsByCallStart(t *testing.T) {
+       path := filepath.Join(t.TempDir(), "usage.jsonl")
+       usage := usageLog{
+               path: path,
+       }
+
+       for _, date := range []string{"2026-01-01T12:00:02Z", "2026-01-01T12:00:00.5Z", "2026-01-01T12:00:01.25Z"} {
+               require.NoError(t, usage.Write(usageRecord{
+                       Date: date,
+               }))
+       }
+
+       records, err := readUsageFile(path)
+       require.NoError(t, err)
+       require.Equal(t, []string{"2026-01-01T12:00:00.5Z", "2026-01-01T12:00:01.25Z", "2026-01-01T12:00:02Z"}, []string{records[0].Date, records[1].Date, records[2].Date})
+}
+
 func TestTimeTextCountsTheCallsAtOnce(t *testing.T) {
        start := time.Date(2026, 1, 1, 12, 0, 0, 0, time.UTC)
        record := func(offset, seconds float64) usageRecord {
 func TestTimeTextCountsTheCallsAtOnce(t *testing.T) {
        start := time.Date(2026, 1, 1, 12, 0, 0, 0, time.UTC)
        record := func(offset, seconds float64) usageRecord {
@@ -243,7 +289,7 @@ func TestTimeTextCountsTheCallsAtOnce(t *testing.T) {
        }
 
        text := timeText([]usageRecord{record(0, 10), record(2, 4), record(3, 2), record(10, 10)})
        }
 
        text := timeText([]usageRecord{record(0, 10), record(2, 4), record(3, 2), record(10, 10)})
-       require.Equal(t, "time: 20 s in all, 6.5 s per call (median 10.0, max 10.0), calls at once: at most 3, 1.3 on average", text)
+       require.Equal(t, "time: 20 s in all, 12.0 calls per minute, 6.5 s per call (median 10.0, max 10.0), calls at once: at most 3, 1.3 on average", text)
 }
 
 // probeLog returns count messages of made-up work on a small bakery order
 }
 
 // probeLog returns count messages of made-up work on a small bakery order