status_code_ranges_test.go 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. package operation_setting
  2. import (
  3. "testing"
  4. "github.com/stretchr/testify/require"
  5. )
  6. func TestParseHTTPStatusCodeRanges_CommaSeparated(t *testing.T) {
  7. ranges, err := ParseHTTPStatusCodeRanges("401,403,500-599")
  8. require.NoError(t, err)
  9. require.Equal(t, []StatusCodeRange{
  10. {Start: 401, End: 401},
  11. {Start: 403, End: 403},
  12. {Start: 500, End: 599},
  13. }, ranges)
  14. }
  15. func TestParseHTTPStatusCodeRanges_MergeAndNormalize(t *testing.T) {
  16. ranges, err := ParseHTTPStatusCodeRanges("500-505,504,401,403,402")
  17. require.NoError(t, err)
  18. require.Equal(t, []StatusCodeRange{
  19. {Start: 401, End: 403},
  20. {Start: 500, End: 505},
  21. }, ranges)
  22. }
  23. func TestParseHTTPStatusCodeRanges_Invalid(t *testing.T) {
  24. _, err := ParseHTTPStatusCodeRanges("99,600,foo,500-400,500-")
  25. require.Error(t, err)
  26. }
  27. func TestParseHTTPStatusCodeRanges_NoComma_IsInvalid(t *testing.T) {
  28. _, err := ParseHTTPStatusCodeRanges("401 403")
  29. require.Error(t, err)
  30. }
  31. func TestShouldDisableByStatusCode(t *testing.T) {
  32. orig := AutomaticDisableStatusCodeRanges
  33. t.Cleanup(func() { AutomaticDisableStatusCodeRanges = orig })
  34. AutomaticDisableStatusCodeRanges = []StatusCodeRange{
  35. {Start: 401, End: 403},
  36. {Start: 500, End: 599},
  37. }
  38. require.True(t, ShouldDisableByStatusCode(401))
  39. require.True(t, ShouldDisableByStatusCode(403))
  40. require.False(t, ShouldDisableByStatusCode(404))
  41. require.True(t, ShouldDisableByStatusCode(500))
  42. require.False(t, ShouldDisableByStatusCode(200))
  43. }
  44. func TestShouldRetryByStatusCode(t *testing.T) {
  45. orig := AutomaticRetryStatusCodeRanges
  46. t.Cleanup(func() { AutomaticRetryStatusCodeRanges = orig })
  47. AutomaticRetryStatusCodeRanges = []StatusCodeRange{
  48. {Start: 429, End: 429},
  49. {Start: 500, End: 599},
  50. }
  51. require.True(t, ShouldRetryByStatusCode(429))
  52. require.True(t, ShouldRetryByStatusCode(500))
  53. require.False(t, ShouldRetryByStatusCode(400))
  54. require.False(t, ShouldRetryByStatusCode(200))
  55. }
  56. func TestShouldRetryByStatusCode_DefaultMatchesLegacyBehavior(t *testing.T) {
  57. require.False(t, ShouldRetryByStatusCode(200))
  58. require.False(t, ShouldRetryByStatusCode(400))
  59. require.True(t, ShouldRetryByStatusCode(401))
  60. require.False(t, ShouldRetryByStatusCode(408))
  61. require.True(t, ShouldRetryByStatusCode(429))
  62. require.True(t, ShouldRetryByStatusCode(500))
  63. require.False(t, ShouldRetryByStatusCode(504))
  64. require.False(t, ShouldRetryByStatusCode(524))
  65. require.True(t, ShouldRetryByStatusCode(599))
  66. }