package operation_setting import ( "testing" "github.com/stretchr/testify/require" ) func TestParseHTTPStatusCodeRanges_CommaSeparated(t *testing.T) { ranges, err := ParseHTTPStatusCodeRanges("401,403,500-599") require.NoError(t, err) require.Equal(t, []StatusCodeRange{ {Start: 401, End: 401}, {Start: 403, End: 403}, {Start: 500, End: 599}, }, ranges) } func TestParseHTTPStatusCodeRanges_MergeAndNormalize(t *testing.T) { ranges, err := ParseHTTPStatusCodeRanges("500-505,504,401,403,402") require.NoError(t, err) require.Equal(t, []StatusCodeRange{ {Start: 401, End: 403}, {Start: 500, End: 505}, }, ranges) } func TestParseHTTPStatusCodeRanges_Invalid(t *testing.T) { _, err := ParseHTTPStatusCodeRanges("99,600,foo,500-400,500-") require.Error(t, err) } func TestParseHTTPStatusCodeRanges_NoComma_IsInvalid(t *testing.T) { _, err := ParseHTTPStatusCodeRanges("401 403") require.Error(t, err) } func TestShouldDisableByStatusCode(t *testing.T) { orig := AutomaticDisableStatusCodeRanges t.Cleanup(func() { AutomaticDisableStatusCodeRanges = orig }) AutomaticDisableStatusCodeRanges = []StatusCodeRange{ {Start: 401, End: 403}, {Start: 500, End: 599}, } require.True(t, ShouldDisableByStatusCode(401)) require.True(t, ShouldDisableByStatusCode(403)) require.False(t, ShouldDisableByStatusCode(404)) require.True(t, ShouldDisableByStatusCode(500)) require.False(t, ShouldDisableByStatusCode(200)) } func TestShouldRetryByStatusCode(t *testing.T) { orig := AutomaticRetryStatusCodeRanges t.Cleanup(func() { AutomaticRetryStatusCodeRanges = orig }) AutomaticRetryStatusCodeRanges = []StatusCodeRange{ {Start: 429, End: 429}, {Start: 500, End: 599}, } require.True(t, ShouldRetryByStatusCode(429)) require.True(t, ShouldRetryByStatusCode(500)) require.False(t, ShouldRetryByStatusCode(400)) require.False(t, ShouldRetryByStatusCode(200)) } func TestShouldRetryByStatusCode_DefaultMatchesLegacyBehavior(t *testing.T) { require.False(t, ShouldRetryByStatusCode(200)) require.False(t, ShouldRetryByStatusCode(400)) require.True(t, ShouldRetryByStatusCode(401)) require.False(t, ShouldRetryByStatusCode(408)) require.True(t, ShouldRetryByStatusCode(429)) require.True(t, ShouldRetryByStatusCode(500)) require.False(t, ShouldRetryByStatusCode(504)) require.False(t, ShouldRetryByStatusCode(524)) require.True(t, ShouldRetryByStatusCode(599)) }