handle RateLimiter initialization errors (#8199)

Previously, an error occuring in NewRateLimiter would return a nil
reference – which would be de-referenced just after, making the server
crash.
Этот коммит содержится в:
Pierre de La Morinerie
2018-02-06 10:57:34 +05:30
коммит произвёл Chris
родитель 323d717a40
Коммит 034dbc07e3
3 изменённых файлов: 28 добавлений и 9 удалений

Просмотреть файл

@@ -25,6 +25,21 @@ func genRateLimitSettings(useAuth, useIP bool, header string) *model.RateLimitSe
}
}
func TestNewRateLimiterSuccess(t *testing.T) {
settings := genRateLimitSettings(false, false, "")
rateLimiter, err := NewRateLimiter(settings)
require.NotNil(t, rateLimiter)
require.NoError(t, err)
}
func TestNewRateLimiterFailure(t *testing.T) {
invalidSettings := genRateLimitSettings(false, false, "")
invalidSettings.MaxBurst = model.NewInt(-100)
rateLimiter, err := NewRateLimiter(invalidSettings)
require.Nil(t, rateLimiter)
require.Error(t, err)
}
func TestGenerateKey(t *testing.T) {
cases := []struct {
useAuth bool
@@ -58,7 +73,7 @@ func TestGenerateKey(t *testing.T) {
req.Header.Set(tc.header, tc.headerResult)
}
rateLimiter := NewRateLimiter(genRateLimitSettings(tc.useAuth, tc.useIP, tc.header))
rateLimiter, _ := NewRateLimiter(genRateLimitSettings(tc.useAuth, tc.useIP, tc.header))
key := rateLimiter.GenerateKey(req)