}
client := newTestClient(t, server)
- _, err := client.Create(t.Context(), testRequest())
+ request := testRequest()
+ request.Node = &nodeKey{2, 5}
+ _, err := client.Create(t.Context(), request)
require.NoError(t, err)
+ require.NotContains(t, server.Call(0).body, "node")
+ require.NotContains(t, string(server.Call(0).raw), "[2,5]")
_, err = client.Create(t.Context(), testRequest())
require.ErrorContains(t, err, "HTTP 429")
require.Equal(t, 400, records[0].CachedTokens)
require.Equal(t, 7, records[0].OutputTokens)
require.Equal(t, quota, records[0].Quota)
+ require.Equal(t, &[2]int{2, 5}, records[0].Node)
+ require.Equal(t, len("ok"), records[0].TextBytes)
+ require.Greater(t, records[0].Seconds, 0.0)
require.Empty(t, records[0].Error)
require.NotEmpty(t, records[0].Date)
+ require.Nil(t, records[1].Node)
+ require.Zero(t, records[1].TextBytes)
+
require.Equal(t, http.StatusTooManyRequests, records[1].Status)
require.Equal(t, quota, records[1].Quota)
require.Contains(t, records[1].Error, "HTTP 429")
require.Equal(t, os.FileMode(0o600), info.Mode().Perm())
}
+func TestClientRefusesCallsOverTheLimit(t *testing.T) {
+ server := newFakeResponses(t)
+ client := newTestClient(t, server)
+ client.LimitCalls(2)
+
+ for range 2 {
+ require.False(t, client.LimitReached())
+ _, err := client.Create(t.Context(), testRequest())
+ require.NoError(t, err)
+ }
+
+ require.True(t, client.LimitReached())
+ _, err := client.Create(t.Context(), testRequest())
+ require.ErrorIs(t, err, errCallLimit)
+ require.Equal(t, 2, server.Calls())
+ require.Len(t, readUsage(t, client.usage.path), 2)
+}
+
func TestClientFailsWhenTheResponseFails(t *testing.T) {
testCases := []struct {
name string