]> source.dussan.org Git - rspamd.git/commitdiff
[Test] Add a unit test
authorVsevolod Stakhov <vsevolod@rspamd.com>
Thu, 23 Feb 2023 12:10:23 +0000 (12:10 +0000)
committerVsevolod Stakhov <vsevolod@rspamd.com>
Thu, 23 Feb 2023 12:10:58 +0000 (12:10 +0000)
test/lua/unit/lua_mime.message_to_ucl.lua

index e4fe1781aaf5675b67edb0c6616c773a0f522048..e88fb72711fd1e056c0acb6e55c13c5c2735da5a 100644 (file)
@@ -1,6 +1,7 @@
 
 --[=========[ *******************  message  ******************* ]=========]
-local msg = [[
+local cases = {
+  { message = [[
 Received: from mail0.mindspring.com (unknown [1.1.1.1])
        (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))
        (No client certificate requested)
@@ -25,39 +26,8 @@ Content-Type: text/html; charset="utf-8"
 <html><body>
 lol
 </html>
-]]
-
-context("Task piecewise split", function()
-  local rspamd_task = require "rspamd_task"
-  local rspamd_util = require "rspamd_util"
-  local rspamd_test_helper = require "rspamd_test_helper"
-  local lua_mime = require "lua_mime"
-  local ucl = require "ucl"
-  local rspamd_parsers = require "rspamd_parsers"
-
-  rspamd_test_helper.init_url_parser()
-  local cfg = rspamd_util.config_from_ucl(rspamd_test_helper.default_config(),
-      "INIT_URL,INIT_LIBS,INIT_SYMCACHE,INIT_VALIDATE,INIT_PRELOAD_MAPS")
-
-  test("Simple message split", function()
-    local res,task = rspamd_task.load_from_string(msg, cfg)
-
-    if not res or not task then
-      assert_true(false, "failed to load message")
-    end
-
-    task:set_from('smtp', rspamd_parsers.parse_mail_address("Test <test@example.com>")[1])
-    task:set_recipients('smtp', {
-      rspamd_parsers.parse_mail_address("Test1 <test1@example.com>")[1],
-      rspamd_parsers.parse_mail_address("Test2 <test2@example.com>")[1]
-    }, 'rewrite')
-    task:set_from_ip("198.172.22.91")
-    task:set_user("cool user name")
-    task:set_helo("hello mail")
-    task:process_message()
-
-    local expected_json = [[
-{
+]],
+                  expected = [[{
     "parts": [
         {
             "type": "multipart/alternative",
@@ -205,20 +175,156 @@ context("Task piecewise split", function()
             "tab_separated": false
         }
     ]
+}]]
+                },
+  {
+    message = [[
+From: <>
+Content-Type: multipart/mixed; boundary="-"
+
+123
+---
+321
+
+--
+WBR yours
+--
+a
+-----------------
+b
+------
+c
+-
+d
+--------
+f
+-----
+]],
+  expected = [[
+{
+    "parts": [
+        {
+            "type": "multipart/mixed",
+            "multipart_boundary": "-",
+            "size": 0,
+            "headers": []
+        },
+        {
+            "content": "--\nWBR yours\n--\na\n-----------------\nb\n------\nc\n-\nd\n--------\nf\n",
+            "size": 62,
+            "type": "text/plain",
+            "boundary": "-",
+            "detected_type": "text/plain",
+            "headers": []
+        }
+    ],
+    "newlines": "lf",
+    "digest": "1a680eb7563f32a2fbf67cf45e90f045",
+    "envelope": {
+        "recipients_smtp": [
+            {
+                "addr": "test1@example.com",
+                "raw": "<test1@example.com>",
+                "flags": {
+                    "valid": true
+                },
+                "user": "test1",
+                "name": "Test1",
+                "domain": "example.com"
+            },
+            {
+                "addr": "test2@example.com",
+                "raw": "<test2@example.com>",
+                "flags": {
+                    "valid": true
+                },
+                "user": "test2",
+                "name": "Test2",
+                "domain": "example.com"
+            }
+        ],
+        "from_smtp": {
+            "addr": "test@example.com",
+            "raw": "<test@example.com>",
+            "flags": {
+                "valid": true
+            },
+            "user": "test",
+            "name": "Test",
+            "domain": "example.com"
+        },
+        "helo": "hello mail",
+        "from_ip": "198.172.22.91"
+    },
+    "size": 135,
+    "headers": [
+        {
+            "order": 0,
+            "raw": "From: <>\n",
+            "empty_separator": false,
+            "value": "<>",
+            "separator": " ",
+            "decoded": "<>",
+            "name": "From",
+            "tab_separated": false
+        },
+        {
+            "order": 1,
+            "raw": "Content-Type: multipart/mixed; boundary=\"-\"\n",
+            "empty_separator": false,
+            "value": "multipart/mixed; boundary=\"-\"",
+            "separator": " ",
+            "decoded": "multipart/mixed; boundary=\"-\"",
+            "name": "Content-Type",
+            "tab_separated": false
+        }
+    ]
+}]]
+  }
 }
-]]
-    local parser = ucl.parser()
-    local res = parser:parse_string(expected_json)
-    assert_true(res)
-    local expected = parser:get_object()
-    local ucl_object = lua_mime.message_to_ucl(task, true)
-    local schema = lua_mime.message_to_ucl_schema()
-    assert_true(schema(ucl_object))
-    assert_rspamd_table_eq({
-      actual = ucl_object,
-      expect = expected
-    })
-    task:destroy()
-  end)
+
+context("Task piecewise split", function()
+  local rspamd_task = require "rspamd_task"
+  local rspamd_util = require "rspamd_util"
+  local rspamd_test_helper = require "rspamd_test_helper"
+  local lua_mime = require "lua_mime"
+  local ucl = require "ucl"
+  local rspamd_parsers = require "rspamd_parsers"
+
+  rspamd_test_helper.init_url_parser()
+  local cfg = rspamd_util.config_from_ucl(rspamd_test_helper.default_config(),
+      "INIT_URL,INIT_LIBS,INIT_SYMCACHE,INIT_VALIDATE,INIT_PRELOAD_MAPS")
+
+  for i,case in ipairs(cases) do
+    test("Simple message split case " .. tostring(i), function()
+      local res,task = rspamd_task.load_from_string(case.message, cfg)
+
+      if not res or not task then
+        assert_true(false, "failed to load message")
+      end
+
+      task:set_from('smtp', rspamd_parsers.parse_mail_address("Test <test@example.com>")[1])
+      task:set_recipients('smtp', {
+        rspamd_parsers.parse_mail_address("Test1 <test1@example.com>")[1],
+        rspamd_parsers.parse_mail_address("Test2 <test2@example.com>")[1]
+      }, 'rewrite')
+      task:set_from_ip("198.172.22.91")
+      task:set_user("cool user name")
+      task:set_helo("hello mail")
+      task:process_message()
+      local parser = ucl.parser()
+      local res = parser:parse_string(case.expected)
+      assert_true(res)
+      local expected = parser:get_object()
+      local ucl_object = lua_mime.message_to_ucl(task, true)
+      local schema = lua_mime.message_to_ucl_schema()
+      assert_true(schema(ucl_object))
+      assert_rspamd_table_eq({
+        actual = ucl_object,
+        expect = expected
+      })
+      task:destroy()
+    end)
+  end
 
 end)
\ No newline at end of file