MCPcopy Index your code
hub / github.com/coder/coder / TestAIBridgeRateLimiting

Function TestAIBridgeRateLimiting

enterprise/coderd/aibridge_test.go:1884–1938  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

1882}
1883
1884func TestAIBridgeRateLimiting(t *testing.T) {
1885 t.Parallel()
1886
1887 dv := coderdtest.DeploymentValues(t)
1888 dv.AI.BridgeConfig.Enabled = serpent.Bool(true)
1889 // Set a low rate limit for testing.
1890 dv.AI.BridgeConfig.RateLimit = 2
1891
1892 client, closer, api, _ := coderdenttest.NewWithAPI(t, &coderdenttest.Options{
1893 Options: &coderdtest.Options{
1894 DeploymentValues: dv,
1895 },
1896 LicenseOptions: &coderdenttest.LicenseOptions{
1897 Features: license.Features{
1898 codersdk.FeatureAIBridge: 1,
1899 },
1900 },
1901 })
1902 t.Cleanup(func() {
1903 _ = closer.Close()
1904 })
1905
1906 // Register a simple test handler.
1907 testHandler := http.HandlerFunc(func(rw http.ResponseWriter, r *http.Request) {
1908 rw.WriteHeader(http.StatusOK)
1909 })
1910 api.AGPL.RegisterInMemoryAIBridgedHTTPHandler(testHandler)
1911
1912 ctx := testutil.Context(t, testutil.WaitLong)
1913 httpClient := &http.Client{}
1914 url := client.URL.String() + "/api/v2/aibridge/test"
1915
1916 // Make requests up to the limit - should succeed.
1917 for range 2 {
1918 req, err := http.NewRequestWithContext(ctx, http.MethodPost, url, nil)
1919 require.NoError(t, err)
1920 req.Header.Set(codersdk.SessionTokenHeader, client.SessionToken())
1921
1922 resp, err := httpClient.Do(req)
1923 require.NoError(t, err)
1924 _ = resp.Body.Close()
1925 require.Equal(t, http.StatusOK, resp.StatusCode)
1926 }
1927
1928 // Next request should be rate limited.
1929 req, err := http.NewRequestWithContext(ctx, http.MethodPost, url, nil)
1930 require.NoError(t, err)
1931 req.Header.Set(codersdk.SessionTokenHeader, client.SessionToken())
1932
1933 resp, err := httpClient.Do(req)
1934 require.NoError(t, err)
1935 defer resp.Body.Close()
1936 require.Equal(t, http.StatusTooManyRequests, resp.StatusCode)
1937 require.NotEmpty(t, resp.Header.Get("Retry-After"))
1938}
1939
1940func TestAIBridgeConcurrencyLimiting(t *testing.T) {
1941 t.Parallel()

Callers

nothing calls this directly

Calls 14

DeploymentValuesFunction · 0.92
NewWithAPIFunction · 0.92
ContextFunction · 0.92
NotEmptyMethod · 0.80
CleanupMethod · 0.65
CloseMethod · 0.65
SetMethod · 0.65
DoMethod · 0.65
GetMethod · 0.65
WriteHeaderMethod · 0.45
StringMethod · 0.45

Tested by

no test coverage detected