aboutsummaryrefslogtreecommitdiffstats
path: root/test/lua/unit/redis_stat.lua
blob: f994bdf010ec182e9017626d259c2d784a0f89b2 (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
    
context("Redis statistics unit tests", function()
  local task = require("rspamd_task")
  local ffi = require("ffi")
  ffi.cdef[[
  struct rspamd_statfile_config {
    const char *symbol;
    const char *label;
    void *opts;
    int is_spam;
    const char *backend;
    void *data;
  };
  unsigned long rspamd_redis_expand_object(const char *pattern,
    struct rspamd_statfile_config *stcf,
    struct rspamd_task *task,
    char **target);
  struct rspamd_task * rspamd_task_new(struct rspamd_worker *worker);
  int rspamd_task_add_recipient (struct rspamd_task *task, const char *rcpt);
  int rspamd_task_add_sender (struct rspamd_task *task, const char *sender);
  ]]

  test("Substitute redis values", function()
    local cases = {
      {"%s%l", "symbollabel"},
      {"%s%%", "symbol%"},
      {"%s%u", "symbol"},
      {"%s%W", "symbolW"},
      {"%r%l", "test@example.comlabel"},
      {"%f-from", "test@example.com-from"}
    }
    local stcf = ffi.new("struct rspamd_statfile_config", 
      {symbol="symbol",label="label"})
    local t = ffi.C.rspamd_task_new(nil)
    
    assert_equal(ffi.C.rspamd_task_add_recipient(t, "Test <test@example.com>"), 1)
    assert_equal(ffi.C.rspamd_task_add_recipient(t, "Test1 <test1@example.com>"), 1)
    assert_equal(ffi.C.rspamd_task_add_sender(t, "Test <test@example.com>"), 1)
    
    for _,c in ipairs(cases) do
      local pbuf = ffi.new 'char *[1]'
      local sz = ffi.C.rspamd_redis_expand_object(c[1], stcf, t, pbuf)
      local s = ffi.string(pbuf[0])
      assert_equal(s, c[2])
    end
  end)
end)