X-Git-Url: http://git.giacomolli.uk/onechat/blobdiff_plain/63278e5c97fbad815c37c02f17d562367f4460a7..a345df4e4bbf9dbaf3da1ce548896eef8f515de3:/probe_test.go diff --git a/probe_test.go b/probe_test.go index c1d08df..f791084 100644 --- a/probe_test.go +++ b/probe_test.go @@ -130,7 +130,7 @@ func TestProbeRunStopsWhenTheQuotaGrows(t *testing.T) { 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) @@ -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(), "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) { @@ -233,6 +233,52 @@ func TestProbeRunWaitsOnlyBeforeUserMessages(t *testing.T) { 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 { @@ -243,7 +289,7 @@ func TestTimeTextCountsTheCallsAtOnce(t *testing.T) { } 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 @@ -373,7 +419,7 @@ func newTestProbeRun(t *testing.T, server *fakeResponses) *probeRun { root := t.TempDir() usagePath := filepath.Join(root, "usage.jsonl") client := newClient(server.URL, apiKey(testKey), "onechat-"+probeName, usagePath) - memory, err := openMemory(t.Context(), root, newTestClock().Now, newCompactor(client, probeName, defaultConfig().Compactor)) + memory, err := openMemory(t.Context(), root, newTestClock().Now, newCompactor(client, probePrompt, defaultConfig().Compactor)) require.NoError(t, err) return &probeRun{