You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

smtp_date.lua 2.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. context("SMTP date functions", function()
  2. local rspamd_util = require "rspamd_util"
  3. local cases = {
  4. {'Mon, 05 Oct 2020 19:05:57 -0000', 1601924757},
  5. -- space instead of leading zero
  6. {'Mon, 5 Oct 2020 19:05:57 -0000', 1601924757},
  7. -- no padding
  8. {'Mon, 5 Oct 2020 19:05:57 -0000', 1601924757},
  9. -- no weekday
  10. {'5 Oct 2020 19:05:57 -0000', 1601924757},
  11. -- different TZ offsets
  12. {'Tue, 22 Sep 2020 00:03:14 -0800', 1600761794},
  13. {'Fri, 02 Oct 2020 20:00:40 +0100', 1601665240},
  14. {'Mon, 5 Oct 2020 15:48:32 +0530', 1601893112},
  15. {'Mon, 05 Oct 2020 10:30:36 +1200', 1601850636},
  16. -- extra comment
  17. {'Thu, 18 May 2006 16:08:11 +0400 (MSD)', 1147954091},
  18. {'Thu, 18 May 2006 16:08:11 +0400', 1147954091},
  19. -- obs_zone
  20. {'Sat, 26 Sep 2020 17:36:21 GMT', 1601141781},
  21. {'Sat, 26 Sep 2020 17:36:21 UT', 1601141781},
  22. {'Sat, 26 Sep 2020 17:36:21 +0000', 1601141781},
  23. {'Wed, 30 Sep 2020 20:32:31 EDT', 1601512351},
  24. {'Wed, 30 Sep 2020 20:32:31 -0400', 1601512351},
  25. {'Wed, 30 Sep 2020 17:32:31 PDT', 1601512351},
  26. {'Wed, 30 Sep 2020 17:32:31 -0700', 1601512351},
  27. -- 2 digit year < 50
  28. {'Mon, 05 Oct 20 06:35:38 GMT', 1601879738},
  29. {'Mon, 05 Oct 2020 06:35:38 GMT', 1601879738},
  30. -- 2 digit year >= 50
  31. {'26 Aug 76 14:30 EDT', 209932200},
  32. {'26 Aug 1976 14:30 EDT', 209932200},
  33. -- Year 2038 problem
  34. {'Tue, 19 Jan 2038 03:14:09 GMT', 2^31 + 1},
  35. -- double space before TZ
  36. {'Sat, 29 Aug 2020 08:25:15 +0700', 1598664315},
  37. -- XXX timestamp corresponding to Sat Dec 30 00:00:00 GMT 1899 returned on error
  38. --{'Sat, Dec 30 1899 00:00:00 GMT', -2209161600},
  39. -- Invalid format
  40. {'Mon Oct 5 20:29:23 BST 2020', nil},
  41. -- Wrong date
  42. {'32 Jan 2020 00:00 GMT', nil},
  43. -- Wrong time
  44. {'1 Jan 2020 25:00 GMT', nil}
  45. }
  46. for _,case in ipairs(cases) do
  47. test("Parse date: " .. case[1], function()
  48. local timestamp = rspamd_util.parse_smtp_date(case[1])
  49. assert_rspamd_eq({
  50. expect = case[2],
  51. actual = timestamp
  52. })
  53. end)
  54. end
  55. end)