Commit Diff


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)