spec/util_jsonschema_spec.lua
author Kim Alvefur <zash@zash.se>
Sat, 23 Mar 2024 20:48:19 +0100
changeset 13465 c673ff1075bd
parent 13389 72d7830505f0
permissions -rw-r--r--
mod_posix: Move everything to util.startup This allows greater control over the order of events. Notably, the internal ordering between daemonization, initialization of libunbound and setup of signal handling is sensitive. libunbound starts a separate thread for processing DNS requests. If this thread is started before signal handling has been set up, it will not inherit the signal handlers and instead behave as it would have before signal handlers were set up, i.e. cause the whole process to immediately exit. libunbound is usually initialized on the first DNS request, usually triggered by an outgoing s2s connection attempt. If daemonization happens before signals have been set up, signals may not be processed at all.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
12583
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     1
local js = require "util.jsonschema";
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     2
local json = require "util.json";
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     3
local lfs = require "lfs";
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     4
13110
8c762a30eae0 util.jsonschema: Update test suite ignore rules
Kim Alvefur <zash@zash.se>
parents: 13092
diff changeset
     5
-- https://github.com/json-schema-org/JSON-Schema-Test-Suite.git 2.0.0-755-g7950d9e
12583
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     6
local test_suite_dir = "spec/JSON-Schema-Test-Suite/tests/draft2020-12"
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     7
if lfs.attributes(test_suite_dir, "mode") ~= "directory" then return end
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     8
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     9
-- Tests to skip and short reason why (NYI = not yet implemented)
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    10
local skip = {
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    11
	["additionalProperties.json:0:2"] = "distinguishing objects from arrays",
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    12
	["additionalProperties.json:0:5"] = "NYI",
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    13
	["additionalProperties.json:1:0"] = "NYI",
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    14
	["anchor.json"] = "$anchor NYI",
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    15
	["const.json:1"] = "deepcompare",
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    16
	["const.json:2"] = "deepcompare",
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    17
	["const.json:8"] = "deepcompare",
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    18
	["const.json:9"] = "deepcompare",
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    19
	["contains.json:0:5"] = "distinguishing objects from arrays",
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    20
	["defs.json"] = "need built-in meta-schema",
12993
dee080c2441e util.jsonschema: Implement 'dependentSchemas'
Kim Alvefur <zash@zash.se>
parents: 12992
diff changeset
    21
	["dependentSchemas.json:2:2"] = "NYI", -- minProperties
12583
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    22
	["dynamicRef.json"] = "NYI",
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    23
	["enum.json:1:3"] = "deepcompare",
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    24
	["id.json"] = "NYI",
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    25
	["maxProperties.json"] = "NYI",
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    26
	["minProperties.json"] = "NYI",
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    27
	["multipleOf.json:1"] = "multiples of IEEE 754 fractions",
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    28
	["multipleOf.json:2"] = "multiples of IEEE 754 fractions",
12948
05ec70a9f755 util.jsonschema: Disable some further new failing tests
Kim Alvefur <zash@zash.se>
parents: 12947
diff changeset
    29
	["multipleOf.json:4"] = "multiples of IEEE 754 fractions",
12583
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    30
	["pattern.json"] = "NYI",
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    31
	["patternProperties.json"] = "NYI",
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    32
	["properties.json:1:2"] = "NYI",
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    33
	["properties.json:1:3"] = "NYI",
13087
962a746842a0 util.jsonschema: Tweak description of disabled test
Kim Alvefur <zash@zash.se>
parents: 13086
diff changeset
    34
	["ref.json:0:3"] = "util.jsonpointer recursive issue?",
12760
cd7da871ce10 util.jsonschema: Sort test cases to skip
Kim Alvefur <zash@zash.se>
parents: 12583
diff changeset
    35
	["ref.json:11"] = "NYI",
cd7da871ce10 util.jsonschema: Sort test cases to skip
Kim Alvefur <zash@zash.se>
parents: 12583
diff changeset
    36
	["ref.json:12:1"] = "FIXME",
cd7da871ce10 util.jsonschema: Sort test cases to skip
Kim Alvefur <zash@zash.se>
parents: 12583
diff changeset
    37
	["ref.json:13"] = "NYI",
12583
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    38
	["ref.json:14"] = "NYI",
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    39
	["ref.json:15"] = "NYI",
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    40
	["ref.json:16"] = "NYI",
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    41
	["ref.json:17"] = "NYI",
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    42
	["ref.json:18"] = "NYI",
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    43
	["ref.json:19"] = "NYI",
12761
edbc888b1e05 util.jsonschema: Ignore some further test cases for URI references
Kim Alvefur <zash@zash.se>
parents: 12760
diff changeset
    44
	["ref.json:26"] = "NYI",
edbc888b1e05 util.jsonschema: Ignore some further test cases for URI references
Kim Alvefur <zash@zash.se>
parents: 12760
diff changeset
    45
	["ref.json:27"] = "NYI",
edbc888b1e05 util.jsonschema: Ignore some further test cases for URI references
Kim Alvefur <zash@zash.se>
parents: 12760
diff changeset
    46
	["ref.json:28"] = "NYI",
12760
cd7da871ce10 util.jsonschema: Sort test cases to skip
Kim Alvefur <zash@zash.se>
parents: 12583
diff changeset
    47
	["ref.json:3:2"] = "FIXME investigate, util.jsonpath issue?",
12762
7929c0ffbe14 util.jsonschema: Ignore test case for JavaScript specific detail
Kim Alvefur <zash@zash.se>
parents: 12761
diff changeset
    48
	["required.json:4"] = "JavaScript specific and distinguishing objects from arrays",
12760
cd7da871ce10 util.jsonschema: Sort test cases to skip
Kim Alvefur <zash@zash.se>
parents: 12583
diff changeset
    49
	["ref.json:6:1"] = "NYI",
12761
edbc888b1e05 util.jsonschema: Ignore some further test cases for URI references
Kim Alvefur <zash@zash.se>
parents: 12760
diff changeset
    50
	["ref.json:20"] = "NYI",
edbc888b1e05 util.jsonschema: Ignore some further test cases for URI references
Kim Alvefur <zash@zash.se>
parents: 12760
diff changeset
    51
	["ref.json:25"] = "NYI",
12947
297b4cfcc3d9 util.jsonschema: Ignore some new tests in test suite
Kim Alvefur <zash@zash.se>
parents: 12762
diff changeset
    52
	["ref.json:29"] = "NYI",
297b4cfcc3d9 util.jsonschema: Ignore some new tests in test suite
Kim Alvefur <zash@zash.se>
parents: 12762
diff changeset
    53
	["ref.json:30"] = "NYI",
297b4cfcc3d9 util.jsonschema: Ignore some new tests in test suite
Kim Alvefur <zash@zash.se>
parents: 12762
diff changeset
    54
	["ref.json:31"] = "NYI",
12948
05ec70a9f755 util.jsonschema: Disable some further new failing tests
Kim Alvefur <zash@zash.se>
parents: 12947
diff changeset
    55
	["ref.json:32"] = "NYI",
05ec70a9f755 util.jsonschema: Disable some further new failing tests
Kim Alvefur <zash@zash.se>
parents: 12947
diff changeset
    56
	["not.json:6"] = "NYI",
12583
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    57
	["refRemote.json"] = "DEFINITELY NYI",
12760
cd7da871ce10 util.jsonschema: Sort test cases to skip
Kim Alvefur <zash@zash.se>
parents: 12583
diff changeset
    58
	["required.json:0:2"] = "distinguishing objects from arrays",
13389
72d7830505f0 util.jsonschema: Return basic structured validation response
Kim Alvefur <zash@zash.se>
parents: 13110
diff changeset
    59
	["type.json:0:1"] = "1.0 is not an integer!",
12583
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    60
	["type.json:3:4"] = "distinguishing objects from arrays",
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    61
	["type.json:3:6"] = "null is weird",
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    62
	["type.json:4:3"] = "distinguishing objects from arrays",
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    63
	["type.json:4:6"] = "null is weird",
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    64
	["type.json:9:4"] = "null is weird",
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    65
	["type.json:9:6"] = "null is weird",
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    66
	["unevaluatedItems.json"] = "NYI",
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    67
	["unevaluatedProperties.json"] = "NYI",
13110
8c762a30eae0 util.jsonschema: Update test suite ignore rules
Kim Alvefur <zash@zash.se>
parents: 13092
diff changeset
    68
	["uniqueItems.json:0:10"] = "deepcompare",
8c762a30eae0 util.jsonschema: Update test suite ignore rules
Kim Alvefur <zash@zash.se>
parents: 13092
diff changeset
    69
	["uniqueItems.json:0:12"] = "deepcompare",
12583
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    70
	["uniqueItems.json:0:14"] = "deepcompare",
13110
8c762a30eae0 util.jsonschema: Update test suite ignore rules
Kim Alvefur <zash@zash.se>
parents: 13092
diff changeset
    71
	["uniqueItems.json:0:15"] = "deepcompare",
8c762a30eae0 util.jsonschema: Update test suite ignore rules
Kim Alvefur <zash@zash.se>
parents: 13092
diff changeset
    72
	["uniqueItems.json:0:23"] = "deepcompare",
8c762a30eae0 util.jsonschema: Update test suite ignore rules
Kim Alvefur <zash@zash.se>
parents: 13092
diff changeset
    73
	["uniqueItems.json:0:25"] = "deepcompare",
12583
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    74
	["uniqueItems.json:0:9"] = "deepcompare",
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    75
	["unknownKeyword.json"] = "NYI",
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    76
	["vocabulary.json"] = "NYI",
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    77
};
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    78
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    79
local function label(s, i)
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    80
	return string.format("%s:%d", s, i-1);
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    81
end
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    82
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    83
describe("util.jsonschema.validate", function()
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    84
	for test_case_file in lfs.dir(test_suite_dir) do
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    85
		-- print(skip[test_case_file] and "do  " or "skip", test_case_file)
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    86
		if test_case_file:sub(-5) == ".json" and not skip[test_case_file] then
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    87
			describe(test_case_file, function()
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    88
				local test_cases;
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    89
				setup(function()
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    90
					local f = assert(io.open(test_suite_dir .. "/" .. test_case_file));
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    91
					local rawdata = assert(f:read("*a"), "failed to read " .. test_case_file)
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    92
					test_cases = assert(json.decode(rawdata), "failed to parse " .. test_case_file)
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    93
				end)
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    94
				describe("tests", function()
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    95
					for i, schema_test in ipairs(test_cases) do
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    96
						local generic_label = label(test_case_file, i);
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    97
						describe(schema_test.description or generic_label, function()
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    98
							for j, test in ipairs(schema_test.tests) do
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    99
								local specific_label = label(generic_label, j);
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   100
								((skip[generic_label] or skip[specific_label]) and pending or it)(test.description, function()
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   101
									assert.equal(test.valid, js.validate(schema_test.schema, test.data), specific_label .. " " .. test.description);
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   102
								end)
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   103
							end
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   104
						end)
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   105
					end
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   106
				end)
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   107
			end)
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   108
		end
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   109
	end
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   110
end);