commit c15c324: [Test] Add unit tests for stream compression

Vsevolod Stakhov vsevolod at highsecure.ru
Mon Apr 26 15:49:06 UTC 2021


Author: Vsevolod Stakhov
Date: 2021-04-26 16:48:42 +0100
URL: https://github.com/rspamd/rspamd/commit/c15c3243bc0b79fc1068a146609c12c00880bf1a (HEAD -> master)

[Test] Add unit tests for stream compression

---
 test/lua/unit/compression.lua | 56 +++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 56 insertions(+)

diff --git a/test/lua/unit/compression.lua b/test/lua/unit/compression.lua
new file mode 100644
index 000000000..6ce5acfe8
--- /dev/null
+++ b/test/lua/unit/compression.lua
@@ -0,0 +1,56 @@
+-- Compression unit tests
+
+context("Rspamd compression", function()
+  local rspamd_zstd = require "rspamd_zstd"
+  local rspamd_text = require "rspamd_text"
+
+  test("Compressed can be decompressed", function()
+    local str = 'test'
+    local cctx = rspamd_zstd.compress_ctx()
+    local dctx = rspamd_zstd.decompress_ctx()
+    assert_rspamd_eq({actual = dctx:stream(cctx:stream(str, 'end')),
+                      expect = rspamd_text.fromstring(str)})
+  end)
+  test("Compressed concatenation can be decompressed", function()
+    local str = 'test'
+    local cctx = rspamd_zstd.compress_ctx()
+    local dctx = rspamd_zstd.decompress_ctx()
+    assert_rspamd_eq({actual = dctx:stream(cctx:stream(str) .. cctx:stream(str, 'end')),
+                      expect = rspamd_text.fromstring(str .. str)})
+  end)
+
+  local sizes = {10, 100, 1000, 10000}
+  for _,sz in ipairs(sizes) do
+    test("Compressed fuzz size: " .. tostring(sz), function()
+      for _=1,1000 do
+        local rnd = rspamd_text.randombytes(sz)
+        local cctx = rspamd_zstd.compress_ctx()
+        local dctx = rspamd_zstd.decompress_ctx()
+        assert_rspamd_eq({actual = dctx:stream(cctx:stream(rnd, 'end')),
+                          expect = rnd})
+      end
+    end)
+  end
+
+  test("Compressed chunks", function()
+    local cctx = rspamd_zstd.compress_ctx()
+    local tin = {}
+    local tout = {}
+    for i=1,1000 do
+      local rnd = rspamd_text.randombytes(i)
+      tin[#tin + 1] = rnd
+    end
+    for i=1,1000 do
+      local o
+      if i == 1000 then
+        o = cctx:stream(tin[i], 'end')
+      else
+        o = cctx:stream(tin[i])
+      end
+      tout[#tout + 1] = o
+    end
+    local dctx = rspamd_zstd.decompress_ctx()
+    assert_rspamd_eq({actual = dctx:stream(rspamd_text.fromtable(tout)),
+                      expect = rspamd_text.fromtable(tin)})
+  end)
+end)
\ No newline at end of file


More information about the Commits mailing list