mirror of https://github.com/rspamd/rspamd.git
Rapid spam filtering system
https://rspamd.com/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
56 lines
1.8 KiB
56 lines
1.8 KiB
-- 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)
|