]> source.dussan.org Git - rspamd.git/commitdiff
[Test] Add unit tests for stream compression
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Mon, 26 Apr 2021 15:48:42 +0000 (16:48 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Mon, 26 Apr 2021 15:48:42 +0000 (16:48 +0100)
test/lua/unit/compression.lua [new file with mode: 0644]

diff --git a/test/lua/unit/compression.lua b/test/lua/unit/compression.lua
new file mode 100644 (file)
index 0000000..6ce5acf
--- /dev/null
@@ -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