commit 440ff96cc7c478600c3a1dcfa60734966733c13a from: Sergey Bronnikov date: Fri Aug 02 18:52:10 2024 UTC tests: add tarantool_msgpack_itv commit - be73d93515f41de7263d2803f28aa0fcae6fe3a4 commit + 440ff96cc7c478600c3a1dcfa60734966733c13a blob - /dev/null blob + ba9f577ac42ebc494a18ea0f7098bc30cb03e72f (mode 644) --- /dev/null +++ tests/tarantool_msgpack_itv.lua @@ -0,0 +1,54 @@ +--[[ +https://github.com/tarantool/tarantool/issues/8887 +]] + +local datetime = require("datetime") +local msgpack = require("msgpack") +local luzer = require("luzer") + +-- See https://www.tarantool.io/en/doc/latest/reference/reference_lua/datetime/interval_new/ +local function new_itv(fdp) + return { + nsec = fdp:consume_integer(math.min, math.max), + usec = fdp:consume_integer(math.min, math.max), + msec = fdp:consume_integer(math.min, math.max), + sec = fdp:consume_integer(math.min, math.max), + min = fdp:consume_integer(math.min, math.max), + hour = fdp:consume_integer(math.min, math.max), + day = fdp:consume_integer(math.min, math.max), + week = fdp:consume_integer(math.min, math.max), + month = fdp:consume_integer(math.min, math.max), + year = fdp:consume_integer(math.min, math.max), + adjust = fdp:consume_integer(math.min, math.max), + } +end + +local function TestOneInput(buf) + local fdp = luzer.FuzzedDataProvider(buf) + local itv = datetime.interval.new(new_itv(fdp)) + local ok, encoded_itv = pcall(msgpack.encode, itv) + assert(ok) + local res + ok, res = pcall(msgpack.decode, encoded_itv) + assert(ok) + assert(itv == res) +end + +if arg[1] then + local testcase = io.open(arg[1]):read("*all") + TestOneInput(testcase) + os.exit() +end + +local script_path = debug.getinfo(1).source:match("@?(.*/)") + +local args = { + print_pcs = 1, + corpus = script_path .. "tarantool-corpus/msgpack_decode", + dict = script_path .. "tarantool-corpus/msgpack_decode.dict", + max_len = 4096, + artifact_prefix = "msgpack_msgpack_itv_", + max_total_time = 60, + print_final_stats = 1, +} +luzer.Fuzz(TestOneInput, nil, args)