summaryrefslogtreecommitdiffstats
path: root/test/lua/unit/smtp_date.lua
blob: 8fb9562a96667f524eca982b410100a3abc09c8a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
context("SMTP date functions", function()
  local rspamd_util = require "rspamd_util"

  local cases = {
    {'Mon, 05 Oct 2020 19:05:57 -0000', 1601924757},
    -- space instead of leading zero
    {'Mon,  5 Oct 2020 19:05:57 -0000', 1601924757},
    -- no padding
    {'Mon, 5 Oct 2020 19:05:57 -0000',  1601924757},
    -- no weekday
    {'5 Oct 2020 19:05:57 -0000', 1601924757},
    -- different TZ offsets
    {'Tue, 22 Sep 2020 00:03:14 -0800', 1600761794},
    {'Fri, 02 Oct 2020 20:00:40 +0100', 1601665240},
    {'Mon, 5 Oct 2020 15:48:32 +0530', 1601893112},
    {'Mon, 05 Oct 2020 10:30:36 +1200', 1601850636},
    -- extra comment
    {'Thu, 18 May 2006 16:08:11 +0400 (MSD)', 1147954091},
    {'Thu, 18 May 2006 16:08:11 +0400',       1147954091},
    -- obs_zone
    {'Sat, 26 Sep 2020 17:36:21 GMT',   1601141781},
    {'Sat, 26 Sep 2020 17:36:21 UT',    1601141781},
    {'Sat, 26 Sep 2020 17:36:21 +0000', 1601141781},
    {'Wed, 30 Sep 2020 20:32:31 EDT',   1601512351},
    {'Wed, 30 Sep 2020 20:32:31 -0400', 1601512351},
    {'Wed, 30 Sep 2020 17:32:31 PDT',   1601512351},
    {'Wed, 30 Sep 2020 17:32:31 -0700', 1601512351},
    -- 2 digit year < 50
    {'Mon, 05 Oct 20 06:35:38 GMT',   1601879738},
    {'Mon, 05 Oct 2020 06:35:38 GMT', 1601879738},
    -- 2 digit year >= 50
    {'26 Aug 76 14:30 EDT',   209932200},
    {'26 Aug 1976 14:30 EDT', 209932200},
    -- Year 2038 problem
    {'Tue, 19 Jan 2038 03:14:09 GMT', 2^31 + 1},
    -- double space before TZ
    {'Sat, 29 Aug 2020 08:25:15  +0700', 1598664315},
    -- XXX timestamp corresponding to Sat Dec 30 00:00:00 GMT 1899 returned on error
    --{'Sat, Dec 30 1899 00:00:00 GMT', -2209161600},
    -- Invalid format
    {'Mon Oct  5 20:29:23 BST 2020', nil},
    -- Wrong date
    {'32 Jan 2020 00:00 GMT', nil},
    -- Wrong time
    {'1 Jan 2020 25:00 GMT', nil}
  }

  for _,case in ipairs(cases) do
    test("Parse date: " .. case[1], function()
      local timestamp = rspamd_util.parse_smtp_date(case[1])
      assert_rspamd_eq({
        expect = case[2],
        actual = timestamp
      })
    end)
  end
end)