status_code_ranges_test.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  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(504))
  54. require.False(t, ShouldRetryByStatusCode(524))
  55. require.False(t, ShouldRetryByStatusCode(400))
  56. require.False(t, ShouldRetryByStatusCode(200))
  57. }
  58. func TestShouldRetryByStatusCode_DefaultMatchesLegacyBehavior(t *testing.T) {
  59. require.False(t, ShouldRetryByStatusCode(200))
  60. require.False(t, ShouldRetryByStatusCode(400))
  61. require.True(t, ShouldRetryByStatusCode(401))
  62. require.False(t, ShouldRetryByStatusCode(408))
  63. require.True(t, ShouldRetryByStatusCode(429))
  64. require.True(t, ShouldRetryByStatusCode(500))
  65. require.False(t, ShouldRetryByStatusCode(504))
  66. require.False(t, ShouldRetryByStatusCode(524))
  67. require.True(t, ShouldRetryByStatusCode(599))
  68. }
  69. func TestIsAlwaysSkipRetryStatusCode(t *testing.T) {
  70. require.True(t, IsAlwaysSkipRetryStatusCode(504))
  71. require.True(t, IsAlwaysSkipRetryStatusCode(524))
  72. require.False(t, IsAlwaysSkipRetryStatusCode(500))
  73. }