http_test.go 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. package main
  2. import (
  3. "testing"
  4. "time"
  5. )
  6. // mustParseTime parses a time string using the time.RFC3339 format, or panics.
  7. func mustParseTime(value string) time.Time {
  8. t, err := time.Parse(time.RFC3339, value)
  9. if err != nil {
  10. panic(err)
  11. }
  12. return t
  13. }
  14. func TestParseRetryAfter(t *testing.T) {
  15. now := mustParseTime("2000-01-01T06:00:00Z")
  16. for _, test := range []struct {
  17. value string
  18. expected string
  19. }{
  20. {"", "error"},
  21. {"0", now.Format(time.RFC3339)},
  22. {"100", "2000-01-01T06:01:40Z"},
  23. {"0100", "2000-01-01T06:01:40Z"},
  24. {"-100", "error"},
  25. {"9999999999999", "error"},
  26. {"Fri, 31 Dec 1999 23:59:59 GMT", "1999-12-31T23:59:59Z"},
  27. {"xxx", "error"},
  28. } {
  29. result, err := parseRetryAfter(test.value, now)
  30. if test.expected == "error" {
  31. if err == nil {
  32. t.Errorf("%+q returned (%v, %v), expected error",
  33. test.value, result.Format(time.RFC3339), err)
  34. }
  35. } else {
  36. expectedResult := mustParseTime(test.expected)
  37. if err != nil || result != expectedResult {
  38. t.Errorf("%+q returned (%v, %v), expected (%v, %v)",
  39. test.value, result.Format(time.RFC3339),
  40. err, expectedResult.Format(time.RFC3339), nil)
  41. }
  42. }
  43. }
  44. }