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.

57 lines
1.9 KiB

  1. -- Compression unit tests
  2. context("Rspamd compression", function()
  3. local rspamd_zstd = require "rspamd_zstd"
  4. local rspamd_text = require "rspamd_text"
  5. test("Compressed can be decompressed", function()
  6. local str = 'test'
  7. local cctx = rspamd_zstd.compress_ctx()
  8. local dctx = rspamd_zstd.decompress_ctx()
  9. assert_rspamd_eq({actual = dctx:stream(cctx:stream(str, 'end')),
  10. expect = rspamd_text.fromstring(str)})
  11. end)
  12. test("Compressed concatenation can be decompressed", function()
  13. local str = 'test'
  14. local cctx = rspamd_zstd.compress_ctx()
  15. local dctx = rspamd_zstd.decompress_ctx()
  16. assert_rspamd_eq({actual = dctx:stream(cctx:stream(str) .. cctx:stream(str, 'end')),
  17. expect = rspamd_text.fromstring(str .. str)})
  18. end)
  19. if os.getenv("RSPAMD_LUA_EXPENSIVE_TESTS") then
  20. local sizes = {10, 100, 1000, 10000}
  21. for _,sz in ipairs(sizes) do
  22. test("Compressed fuzz size: " .. tostring(sz), function()
  23. for _=1,1000 do
  24. local rnd = rspamd_text.randombytes(sz)
  25. local cctx = rspamd_zstd.compress_ctx()
  26. local dctx = rspamd_zstd.decompress_ctx()
  27. assert_rspamd_eq({actual = dctx:stream(cctx:stream(rnd, 'end')),
  28. expect = rnd})
  29. end
  30. end)
  31. end
  32. end
  33. test("Compressed chunks", function()
  34. local cctx = rspamd_zstd.compress_ctx()
  35. local tin = {}
  36. local tout = {}
  37. for i=1,1000 do
  38. local rnd = rspamd_text.randombytes(i)
  39. tin[#tin + 1] = rnd
  40. end
  41. for i=1,1000 do
  42. local o
  43. if i == 1000 then
  44. o = cctx:stream(tin[i], 'end')
  45. else
  46. o = cctx:stream(tin[i])
  47. end
  48. tout[#tout + 1] = o
  49. end
  50. local dctx = rspamd_zstd.decompress_ctx()
  51. assert_rspamd_eq({actual = dctx:stream(rspamd_text.fromtable(tout)),
  52. expect = rspamd_text.fromtable(tin)})
  53. end)
  54. end)