(t *testing.T)
| 179 | } |
| 180 | |
| 181 | func TestRateLimiterWithConfig_defaultConfig(t *testing.T) { |
| 182 | { |
| 183 | var inMemoryStore = NewRateLimiterMemoryStoreWithConfig(RateLimiterMemoryStoreConfig{Rate: 1, Burst: 3}) |
| 184 | |
| 185 | e := echo.New() |
| 186 | |
| 187 | handler := func(c *echo.Context) error { |
| 188 | return c.String(http.StatusOK, "test") |
| 189 | } |
| 190 | |
| 191 | mw, err := RateLimiterConfig{ |
| 192 | Store: inMemoryStore, |
| 193 | }.ToMiddleware() |
| 194 | assert.NoError(t, err) |
| 195 | |
| 196 | testCases := []struct { |
| 197 | id string |
| 198 | expectErr string |
| 199 | }{ |
| 200 | {id: "127.0.0.1"}, |
| 201 | {id: "127.0.0.1"}, |
| 202 | {id: "127.0.0.1"}, |
| 203 | {id: "127.0.0.1", expectErr: "code=429, message=rate limit exceeded"}, |
| 204 | {id: "127.0.0.1", expectErr: "code=429, message=rate limit exceeded"}, |
| 205 | {id: "127.0.0.1", expectErr: "code=429, message=rate limit exceeded"}, |
| 206 | {id: "127.0.0.1", expectErr: "code=429, message=rate limit exceeded"}, |
| 207 | } |
| 208 | |
| 209 | for _, tc := range testCases { |
| 210 | req := httptest.NewRequest(http.MethodGet, "/", nil) |
| 211 | req.Header.Add(echo.HeaderXRealIP, tc.id) |
| 212 | |
| 213 | rec := httptest.NewRecorder() |
| 214 | |
| 215 | c := e.NewContext(req, rec) |
| 216 | |
| 217 | err := mw(handler)(c) |
| 218 | if tc.expectErr != "" { |
| 219 | assert.EqualError(t, err, tc.expectErr) |
| 220 | } else { |
| 221 | assert.NoError(t, err) |
| 222 | } |
| 223 | assert.Equal(t, http.StatusOK, rec.Code) |
| 224 | } |
| 225 | } |
| 226 | } |
| 227 | |
| 228 | func TestRateLimiterWithConfig_skipper(t *testing.T) { |
| 229 | e := echo.New() |
nothing calls this directly
no test coverage detected
searching dependent graphs…