mirror of
https://github.com/openvswitch/ovs
synced 2025-10-17 14:28:02 +00:00
It is natural to write "abc" in place of ["set",["abc"]] and vice versa. I cannot think of a reason not to support this, and it can make reading and writing OVSDB files and transactions easier, so support it.
639 lines
22 KiB
Plaintext
639 lines
22 KiB
Plaintext
AT_BANNER([OVSDB -- atoms without constraints])
|
||
|
||
OVSDB_CHECK_POSITIVE([integer atom from JSON],
|
||
[[parse-atoms '["integer"]' \
|
||
'[0]' \
|
||
'[-1]' \
|
||
'[1e3]' \
|
||
'[9223372036854775807]' \
|
||
'[-9223372036854775808]' ]],
|
||
[0
|
||
-1
|
||
1000
|
||
9223372036854775807
|
||
-9223372036854775808])
|
||
|
||
OVSDB_CHECK_POSITIVE([integer atom from string],
|
||
[[parse-atom-strings -- '["integer"]' \
|
||
'0' \
|
||
'-1' \
|
||
'+1000' \
|
||
'9223372036854775807' \
|
||
'-9223372036854775808' ]],
|
||
[0
|
||
-1
|
||
1000
|
||
9223372036854775807
|
||
-9223372036854775808])
|
||
|
||
OVSDB_CHECK_POSITIVE([real atom from JSON],
|
||
[[parse-atoms '["real"]' \
|
||
'[0]' \
|
||
'[0.0]' \
|
||
'[-0.0]' \
|
||
'[-1.25]' \
|
||
'[1e3]' \
|
||
'[1e37]' \
|
||
'[0.00390625]' ]],
|
||
[0
|
||
0
|
||
0
|
||
-1.25
|
||
1000
|
||
1e+37
|
||
0.00390625])
|
||
|
||
OVSDB_CHECK_POSITIVE([real atom from string],
|
||
[[parse-atom-strings -- '["real"]' \
|
||
'0' \
|
||
'0.0' \
|
||
'-0.0' \
|
||
'-1.25' \
|
||
'1e3' \
|
||
'1e37' \
|
||
'0.00390625' ]],
|
||
[0
|
||
0
|
||
0
|
||
-1.25
|
||
1000
|
||
1e+37
|
||
0.00390625])
|
||
|
||
OVSDB_CHECK_POSITIVE([boolean atom from JSON],
|
||
[[parse-atoms '["boolean"]' '[true]' '[false]' ]],
|
||
[true
|
||
false])
|
||
|
||
OVSDB_CHECK_POSITIVE([boolean atom from string],
|
||
[[parse-atom-strings '["boolean"]' 'true' 'false' ]],
|
||
[true
|
||
false])
|
||
|
||
OVSDB_CHECK_POSITIVE([string atom from JSON],
|
||
[[parse-atoms '["string"]' '[""]' '["true"]' '["\"\\\/\b\f\n\r\t"]']],
|
||
[""
|
||
"true"
|
||
"\"\\/\b\f\n\r\t"])
|
||
|
||
OVSDB_CHECK_POSITIVE([string atom from string],
|
||
[[parse-atom-strings '["string"]' \
|
||
'unquoted' \
|
||
'"quoted-string"' \
|
||
'"needs quotes"' \
|
||
'""' \
|
||
'"true"' \
|
||
'"\"\\\/\b\f\n\r\t"']],
|
||
[unquoted
|
||
quoted-string
|
||
"needs quotes"
|
||
""
|
||
"true"
|
||
"\"\\/\b\f\n\r\t"])
|
||
|
||
OVSDB_CHECK_POSITIVE([uuid atom from JSON],
|
||
[[parse-atoms '["uuid"]' '["uuid", "550e8400-e29b-41d4-a716-446655440000"]']],
|
||
[[["uuid","550e8400-e29b-41d4-a716-446655440000"]]])
|
||
|
||
OVSDB_CHECK_POSITIVE([uuid atom from string],
|
||
[[parse-atom-strings '["uuid"]' '550e8400-e29b-41d4-a716-446655440000']],
|
||
[550e8400-e29b-41d4-a716-446655440000])
|
||
|
||
OVSDB_CHECK_POSITIVE([integer atom sorting],
|
||
[[sort-atoms '["integer"]' '[55,0,-1,2,1]']],
|
||
[[[-1,0,1,2,55]]])
|
||
|
||
OVSDB_CHECK_POSITIVE([real atom sorting],
|
||
[[sort-atoms '["real"]' '[1.25,1.23,0.0,-0.0,-1e99]']],
|
||
[[[-1e+99,0,0,1.23,1.25]]])
|
||
|
||
OVSDB_CHECK_POSITIVE([boolean atom sorting],
|
||
[[sort-atoms '["boolean"]' '[true,false,true,false,false]']],
|
||
[[[false,false,false,true,true]]])
|
||
|
||
OVSDB_CHECK_POSITIVE([string atom sorting],
|
||
[[sort-atoms '["string"]' '["abd","abc","\b","xxx"]']],
|
||
[[["\b","abc","abd","xxx"]]])
|
||
|
||
OVSDB_CHECK_POSITIVE([uuid atom sorting],
|
||
[[sort-atoms '["uuid"]' '[
|
||
["uuid", "00000000-0000-0000-0000-000000000001"],
|
||
["uuid", "00000000-1000-0000-0000-000000000000"],
|
||
["uuid", "00000000-0000-1000-0000-000000000000"],
|
||
["uuid", "00010000-0000-0000-0000-000000000000"],
|
||
["uuid", "00000000-0000-0000-0000-000000000100"],
|
||
["uuid", "00000000-0000-0000-0000-000100000000"],
|
||
["uuid", "00000000-0000-0010-0000-000000000000"],
|
||
["uuid", "00000100-0000-0000-0000-000000000000"],
|
||
["uuid", "00000000-0000-0001-0000-000000000000"],
|
||
["uuid", "00000000-0000-0000-0000-000001000000"],
|
||
["uuid", "01000000-0000-0000-0000-000000000000"],
|
||
["uuid", "00000000-0000-0000-0000-000000001000"],
|
||
["uuid", "00000000-0000-0000-0000-000010000000"],
|
||
["uuid", "00000000-0000-0000-0000-010000000000"],
|
||
["uuid", "00000000-0000-0100-0000-000000000000"],
|
||
["uuid", "10000000-0000-0000-0000-000000000000"],
|
||
["uuid", "00000000-0000-0000-0000-000000000010"],
|
||
["uuid", "00000000-0100-0000-0000-000000000000"],
|
||
["uuid", "00000000-0000-0000-0100-000000000000"],
|
||
["uuid", "00000000-0000-0000-0001-000000000000"],
|
||
["uuid", "00000010-0000-0000-0000-000000000000"],
|
||
["uuid", "00000000-0000-0000-0010-000000000000"],
|
||
["uuid", "00000000-0000-0000-0000-000000010000"],
|
||
["uuid", "00000000-0000-0000-1000-000000000000"],
|
||
["uuid", "00000000-0000-0000-0000-100000000000"],
|
||
["uuid", "00000000-0000-0000-0000-001000000000"],
|
||
["uuid", "00000000-0000-0000-0000-000000100000"],
|
||
["uuid", "00000000-0000-0000-0000-000000000000"],
|
||
["uuid", "00000000-0010-0000-0000-000000000000"],
|
||
["uuid", "00100000-0000-0000-0000-000000000000"],
|
||
["uuid", "00000000-0001-0000-0000-000000000000"],
|
||
["uuid", "00000001-0000-0000-0000-000000000000"],
|
||
["uuid", "00001000-0000-0000-0000-000000000000"]]']],
|
||
[[[["uuid","00000000-0000-0000-0000-000000000000"],["uuid","00000000-0000-0000-0000-000000000001"],["uuid","00000000-0000-0000-0000-000000000010"],["uuid","00000000-0000-0000-0000-000000000100"],["uuid","00000000-0000-0000-0000-000000001000"],["uuid","00000000-0000-0000-0000-000000010000"],["uuid","00000000-0000-0000-0000-000000100000"],["uuid","00000000-0000-0000-0000-000001000000"],["uuid","00000000-0000-0000-0000-000010000000"],["uuid","00000000-0000-0000-0000-000100000000"],["uuid","00000000-0000-0000-0000-001000000000"],["uuid","00000000-0000-0000-0000-010000000000"],["uuid","00000000-0000-0000-0000-100000000000"],["uuid","00000000-0000-0000-0001-000000000000"],["uuid","00000000-0000-0000-0010-000000000000"],["uuid","00000000-0000-0000-0100-000000000000"],["uuid","00000000-0000-0000-1000-000000000000"],["uuid","00000000-0000-0001-0000-000000000000"],["uuid","00000000-0000-0010-0000-000000000000"],["uuid","00000000-0000-0100-0000-000000000000"],["uuid","00000000-0000-1000-0000-000000000000"],["uuid","00000000-0001-0000-0000-000000000000"],["uuid","00000000-0010-0000-0000-000000000000"],["uuid","00000000-0100-0000-0000-000000000000"],["uuid","00000000-1000-0000-0000-000000000000"],["uuid","00000001-0000-0000-0000-000000000000"],["uuid","00000010-0000-0000-0000-000000000000"],["uuid","00000100-0000-0000-0000-000000000000"],["uuid","00001000-0000-0000-0000-000000000000"],["uuid","00010000-0000-0000-0000-000000000000"],["uuid","00100000-0000-0000-0000-000000000000"],["uuid","01000000-0000-0000-0000-000000000000"],["uuid","10000000-0000-0000-0000-000000000000"]]]])
|
||
|
||
OVSDB_CHECK_POSITIVE([real not acceptable integer JSON atom],
|
||
[[parse-atoms '["integer"]' '[0.5]' ]],
|
||
[syntax "0.5": syntax error: expected integer])
|
||
|
||
dnl <C0> is not allowed anywhere in a UTF-8 string.
|
||
dnl <ED A0 80> is a surrogate and not allowed in UTF-8.
|
||
OVSDB_CHECK_POSITIVE([no invalid UTF-8 sequences in strings],
|
||
[parse-atoms '[["string"]]' \
|
||
'@<:@"m4_esyscmd([printf "\xc0"])"@:>@' \
|
||
'@<:@"m4_esyscmd([printf "\xed\xa0\x80"])"@:>@' \
|
||
],
|
||
[constraint violation: "m4_esyscmd([printf "\xc0"])" is not a valid UTF-8 string: invalid UTF-8 sequence 0xc0
|
||
constraint violation: "m4_esyscmd([printf "\xed\xa0\x80"])" is not a valid UTF-8 string: invalid UTF-8 sequence 0xed 0xa0])
|
||
|
||
OVSDB_CHECK_NEGATIVE([real not acceptable integer string atom],
|
||
[[parse-atom-strings '["integer"]' '0.5' ]],
|
||
["0.5" is not a valid integer])
|
||
|
||
OVSDB_CHECK_POSITIVE([string "true" not acceptable boolean JSON atom],
|
||
[[parse-atoms '["boolean"]' '["true"]' ]],
|
||
[syntax ""true"": syntax error: expected boolean])
|
||
|
||
OVSDB_CHECK_NEGATIVE([string "true" not acceptable boolean string atom],
|
||
[[parse-atom-strings '["boolean"]' '"true"' ]],
|
||
[""true"" is not a valid boolean (use "true" or "false")])
|
||
|
||
OVSDB_CHECK_POSITIVE([integer not acceptable string JSON atom],
|
||
[[parse-atoms '["string"]' '[1]']],
|
||
[syntax "1": syntax error: expected string])
|
||
|
||
OVSDB_CHECK_POSITIVE([uuid atom must be expressed as JSON array],
|
||
[[parse-atoms '["uuid"]' '["550e8400-e29b-41d4-a716-446655440000"]']],
|
||
[[syntax ""550e8400-e29b-41d4-a716-446655440000"": syntax error: expected ["uuid", <string>]]])
|
||
|
||
OVSDB_CHECK_NEGATIVE([empty string atom must be quoted],
|
||
[[parse-atom-strings '["string"]' '']],
|
||
[An empty string is not valid as input; use "" to represent the empty string])
|
||
|
||
OVSDB_CHECK_NEGATIVE([quotes must be balanced],
|
||
[parse-atom-strings '[["string"]]' '"asdf'],
|
||
["asdf: missing quote at end of quoted string])
|
||
|
||
OVSDB_CHECK_NEGATIVE([uuids must be valid],
|
||
[parse-atom-strings '[["uuid"]]' '1234-5678'],
|
||
["1234-5678" is not a valid UUID])
|
||
|
||
AT_BANNER([OVSDB -- atoms with constraints])
|
||
|
||
OVSDB_CHECK_POSITIVE([integers >= 5],
|
||
[[parse-atoms '[{"type": "integer", "minInteger": 5}]' \
|
||
'[0]' \
|
||
'[4]' \
|
||
'[5]' \
|
||
'[6]' \
|
||
'[12345]']],
|
||
[constraint violation: 0 is less than minimum allowed value 5
|
||
constraint violation: 4 is less than minimum allowed value 5
|
||
5
|
||
6
|
||
12345])
|
||
|
||
OVSDB_CHECK_POSITIVE([integers <= -1],
|
||
[[parse-atoms '[{"type": "integer", "maxInteger": -1}]' \
|
||
'[0]' \
|
||
'[-1]' \
|
||
'[-2]' \
|
||
'[-123]']],
|
||
[constraint violation: 0 is greater than maximum allowed value -1
|
||
-1
|
||
-2
|
||
-123])
|
||
|
||
OVSDB_CHECK_POSITIVE([integers in range -10 to 10],
|
||
[[parse-atoms '[{"type": "integer", "minInteger": -10, "maxInteger": 10}]' \
|
||
'[-20]' \
|
||
'[-11]' \
|
||
'[-10]' \
|
||
'[-9]' \
|
||
'[1]' \
|
||
'[9]' \
|
||
'[10]' \
|
||
'[11]' \
|
||
'[123576]']],
|
||
[constraint violation: -20 is not in the valid range -10 to 10 (inclusive)
|
||
constraint violation: -11 is not in the valid range -10 to 10 (inclusive)
|
||
-10
|
||
-9
|
||
1
|
||
9
|
||
10
|
||
constraint violation: 11 is not in the valid range -10 to 10 (inclusive)
|
||
constraint violation: 123576 is not in the valid range -10 to 10 (inclusive)])
|
||
|
||
OVSDB_CHECK_POSITIVE([reals >= 5],
|
||
[[parse-atoms '[{"type": "real", "minReal": 5}]' \
|
||
'[0]' \
|
||
'[4]' \
|
||
'[5]' \
|
||
'[6]' \
|
||
'[12345]']],
|
||
[constraint violation: 0 is less than minimum allowed value 5
|
||
constraint violation: 4 is less than minimum allowed value 5
|
||
5
|
||
6
|
||
12345])
|
||
|
||
OVSDB_CHECK_POSITIVE([reals <= -1],
|
||
[[parse-atoms '[{"type": "real", "maxReal": -1}]' \
|
||
'[0]' \
|
||
'[-1]' \
|
||
'[-2]' \
|
||
'[-123]']],
|
||
[constraint violation: 0 is greater than maximum allowed value -1
|
||
-1
|
||
-2
|
||
-123])
|
||
|
||
OVSDB_CHECK_POSITIVE([reals in range -10 to 10],
|
||
[[parse-atoms '[{"type": "real", "minReal": -10, "maxReal": 10}]' \
|
||
'[-20]' \
|
||
'[-11]' \
|
||
'[-10]' \
|
||
'[-9]' \
|
||
'[1]' \
|
||
'[9]' \
|
||
'[10]' \
|
||
'[11]' \
|
||
'[123576]']],
|
||
[constraint violation: -20 is not in the valid range -10 to 10 (inclusive)
|
||
constraint violation: -11 is not in the valid range -10 to 10 (inclusive)
|
||
-10
|
||
-9
|
||
1
|
||
9
|
||
10
|
||
constraint violation: 11 is not in the valid range -10 to 10 (inclusive)
|
||
constraint violation: 123576 is not in the valid range -10 to 10 (inclusive)])
|
||
|
||
AT_SETUP([strings matching /(a(b)?)c?/])
|
||
AT_KEYWORDS([ovsdb positive])
|
||
if test "$HAVE_PCRE" = yes; then
|
||
b_out='constraint violation: "b" does not match regular expression /(a(b)?)?c?/'
|
||
bc_out='constraint violation: "bc" does not match regular expression /(a(b)?)?c?/'
|
||
else
|
||
b_out='"b"'
|
||
bc_out='"bc"'
|
||
fi
|
||
AT_CHECK_UNQUOTED(
|
||
[[test-ovsdb parse-atoms '{"type": "string", "reMatch": "(a(b)?)?c?"}' \
|
||
'[""]' \
|
||
'["a"]' \
|
||
'["ab"]' \
|
||
'["abc"]' \
|
||
'["ac"]' \
|
||
'["b"]' \
|
||
'["bc"]' \
|
||
'["c"]']],
|
||
[0],
|
||
[[""
|
||
"a"
|
||
"ab"
|
||
"abc"
|
||
"ac"
|
||
$b_out
|
||
$bc_out
|
||
"c"
|
||
]])
|
||
AT_CLEANUP
|
||
|
||
OVSDB_CHECK_POSITIVE([strings at least 2 characters long],
|
||
[[parse-atoms '{"type": "string", "minLength": 2}' \
|
||
'[""]' \
|
||
'["a"]' \
|
||
'["ab"]' \
|
||
'["abc"]' \
|
||
'["\ud834\udd1e"]']],
|
||
[[constraint violation: "" length 0 is less than minimum allowed length 2
|
||
constraint violation: "a" length 1 is less than minimum allowed length 2
|
||
"ab"
|
||
"abc"
|
||
constraint violation: "𝄞" length 1 is less than minimum allowed length 2]])
|
||
|
||
OVSDB_CHECK_POSITIVE([strings no more than 2 characters long],
|
||
[[parse-atoms '{"type": "string", "maxLength": 2}' \
|
||
'[""]' \
|
||
'["a"]' \
|
||
'["ab"]' \
|
||
'["abc"]' \
|
||
'["\ud834\udd1e"]']],
|
||
[[""
|
||
"a"
|
||
"ab"
|
||
constraint violation: "abc" length 3 is greater than maximum allowed length 2
|
||
"𝄞"]])
|
||
|
||
AT_BANNER([OSVDB -- simple data])
|
||
|
||
OVSDB_CHECK_POSITIVE([integer JSON datum],
|
||
[[parse-data '["integer"]' '[0]' '["set",[1]]' '[-1]']],
|
||
[0
|
||
1
|
||
-1])
|
||
|
||
OVSDB_CHECK_POSITIVE([integer string datum],
|
||
[[parse-data-strings -- '["integer"]' '0' '1' '-1' '+1']],
|
||
[0
|
||
1
|
||
-1
|
||
1])
|
||
|
||
OVSDB_CHECK_POSITIVE([real JSON datum],
|
||
[[parse-data '["real"]' '[0]' '["set",[1.0]]' '[-1.25]']],
|
||
[0
|
||
1
|
||
-1.25])
|
||
|
||
OVSDB_CHECK_POSITIVE([real string datum],
|
||
[[parse-data-strings -- '["real"]' '0' '1.0' '-1.25']],
|
||
[0
|
||
1
|
||
-1.25])
|
||
|
||
OVSDB_CHECK_POSITIVE([boolean JSON datum],
|
||
[[parse-data '["boolean"]' '["set", [true]]' '[false]' ]],
|
||
[true
|
||
false])
|
||
|
||
OVSDB_CHECK_POSITIVE([boolean string datum],
|
||
[[parse-data-strings '["boolean"]' 'true' 'false' ]],
|
||
[true
|
||
false])
|
||
|
||
OVSDB_CHECK_POSITIVE([string JSON datum],
|
||
[[parse-data '["string"]' '["set",[""]]' '["true"]' '["\"\\\/\b\f\n\r\t"]']],
|
||
[""
|
||
"true"
|
||
"\"\\/\b\f\n\r\t"])
|
||
|
||
OVSDB_CHECK_POSITIVE([string string datum],
|
||
[[parse-data-strings '["string"]' '"x"' '""' '"true"' '"\"\\\/\b\f\n\r\t"']],
|
||
[x
|
||
""
|
||
"true"
|
||
"\"\\/\b\f\n\r\t"])
|
||
|
||
AT_BANNER([OVSDB -- set data])
|
||
|
||
OVSDB_CHECK_POSITIVE([JSON optional boolean],
|
||
[[parse-data '{"key": "boolean", "min": 0}' \
|
||
'[true]' \
|
||
'["set", [false]]' \
|
||
'["set", []]']],
|
||
[[true
|
||
false
|
||
["set",[]]]],
|
||
[set])
|
||
|
||
OVSDB_CHECK_POSITIVE([string optional boolean],
|
||
[[parse-data-strings '{"key": "boolean", "min": 0}' \
|
||
'true' \
|
||
'false' \
|
||
'[]']],
|
||
[[true
|
||
false
|
||
[]]],
|
||
[set])
|
||
|
||
OVSDB_CHECK_POSITIVE([JSON set of 0 or more integers],
|
||
[[parse-data '{"key": "integer", "min": 0, "max": "unlimited"}' \
|
||
'["set", [0]]' \
|
||
'[1]' \
|
||
'["set", [0, 1]]' \
|
||
'["set", [0, 1, 2]]' \
|
||
'["set", [0, 1, 2, 3, 4, 5]]' \
|
||
'["set", [0, 1, 2, 3, 4, 5, 6, 7, 8]]' \
|
||
'["set", [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]]']],
|
||
[[0
|
||
1
|
||
["set",[0,1]]
|
||
["set",[0,1,2]]
|
||
["set",[0,1,2,3,4,5]]
|
||
["set",[0,1,2,3,4,5,6,7,8]]
|
||
["set",[0,1,2,3,4,5,6,7,8,9,10]]]])
|
||
|
||
OVSDB_CHECK_POSITIVE([string set of 0 or more integers],
|
||
[[parse-data-strings '{"key": "integer", "min": 0, "max": "unlimited"}' \
|
||
'0' \
|
||
'0,1' \
|
||
'0, 1, 2' \
|
||
'[0, 1,2, 3, 4, 5]' \
|
||
'0, 1,2, 3,4, 5, 6, 7, 8' \
|
||
'[0, 1, 2, 3, 4,5, 6,7, 8, 9, 10]']],
|
||
[[[0]
|
||
[0, 1]
|
||
[0, 1, 2]
|
||
[0, 1, 2, 3, 4, 5]
|
||
[0, 1, 2, 3, 4, 5, 6, 7, 8]
|
||
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]]])
|
||
|
||
OVSDB_CHECK_POSITIVE([JSON set of 1 to 3 uuids],
|
||
[[parse-data '{"key": "uuid", "min": 1, "max": 3}' \
|
||
'["set", [["uuid", "550e8400-e29b-41d4-a716-446655440000"]]]' \
|
||
'["uuid", "b5078be0-7664-4299-b836-8bcc03ef941f"]' \
|
||
'["set", [["uuid", "c5051240-30ff-43ed-b4b9-93cf3f050813"],
|
||
["uuid", "90558331-09af-4d2f-a572-509cad2e9088"],
|
||
["uuid", "550e8400-e29b-41d4-a716-446655440000"]]]']],
|
||
[[["uuid","550e8400-e29b-41d4-a716-446655440000"]
|
||
["uuid","b5078be0-7664-4299-b836-8bcc03ef941f"]
|
||
["set",[["uuid","550e8400-e29b-41d4-a716-446655440000"],["uuid","90558331-09af-4d2f-a572-509cad2e9088"],["uuid","c5051240-30ff-43ed-b4b9-93cf3f050813"]]]]])
|
||
|
||
OVSDB_CHECK_POSITIVE([string set of 1 to 3 uuids],
|
||
[[parse-data-strings '{"key": "uuid", "min": 1, "max": 3}' \
|
||
'[550e8400-e29b-41d4-a716-446655440000]' \
|
||
'[c5051240-30ff-43ed-b4b9-93cf3f050813,
|
||
90558331-09af-4d2f-a572-509cad2e9088,
|
||
550e8400-e29b-41d4-a716-446655440000]']],
|
||
[[[550e8400-e29b-41d4-a716-446655440000]
|
||
[550e8400-e29b-41d4-a716-446655440000, 90558331-09af-4d2f-a572-509cad2e9088, c5051240-30ff-43ed-b4b9-93cf3f050813]]])
|
||
|
||
OVSDB_CHECK_POSITIVE([JSON set of 0 to 3 strings],
|
||
[[parse-data '{"key": "string", "min": 0, "max": 3}' \
|
||
'["set", []]' \
|
||
'["a longer string"]' \
|
||
'["set", ["a relatively long string"]]' \
|
||
'["set", ["short string", "a relatively long string"]]' \
|
||
'["set", ["zzz", "short string", "a relatively long string"]]']],
|
||
[[["set",[]]
|
||
"a longer string"
|
||
"a relatively long string"
|
||
["set",["a relatively long string","short string"]]
|
||
["set",["a relatively long string","short string","zzz"]]]])
|
||
|
||
OVSDB_CHECK_POSITIVE([string set of 0 to 3 strings],
|
||
[[parse-data-strings '{"key": "string", "min": 0, "max": 3}' \
|
||
'[]' \
|
||
'"a relatively long string"' \
|
||
'["short string", "a relatively long string"]' \
|
||
'"zzz","short string","a relatively long string"']],
|
||
[[[]
|
||
["a relatively long string"]
|
||
["a relatively long string", "short string"]
|
||
["a relatively long string", "short string", zzz]]])
|
||
|
||
OVSDB_CHECK_NEGATIVE([duplicate boolean not allowed in JSON set],
|
||
[[parse-data '{"key": "boolean", "max": 5}' '["set", [true, true]]']],
|
||
[ovsdb error: set contains duplicate])
|
||
|
||
OVSDB_CHECK_NEGATIVE([duplicate boolean not allowed in string set],
|
||
[[parse-data-strings '{"key": "boolean", "max": 5}' 'true, true']],
|
||
[set contains duplicate value])
|
||
|
||
OVSDB_CHECK_NEGATIVE([duplicate integer not allowed in JSON set],
|
||
[[parse-data '{"key": "integer", "max": 5}' '["set", [1, 2, 3, 1]]']],
|
||
[ovsdb error: set contains duplicate])
|
||
|
||
OVSDB_CHECK_NEGATIVE([duplicate integer not allowed in string set],
|
||
[[parse-data-strings '{"key": "integer", "max": 5}' '[1, 2, 3, 1]']],
|
||
[set contains duplicate value])
|
||
|
||
OVSDB_CHECK_NEGATIVE([duplicate real not allowed in JSON set],
|
||
[[parse-data '{"key": "real", "max": 5}' '["set", [0.0, -0.0]]']],
|
||
[ovsdb error: set contains duplicate])
|
||
|
||
OVSDB_CHECK_NEGATIVE([duplicate real not allowed in string set],
|
||
[[parse-data-strings '{"key": "real", "max": 5}' '0.0, -0.0']],
|
||
[set contains duplicate value])
|
||
|
||
OVSDB_CHECK_NEGATIVE([duplicate string not allowed in JSON set],
|
||
[[parse-data '{"key": "string", "max": 5}' '["set", ["asdf", "ASDF", "asdf"]]']],
|
||
[ovsdb error: set contains duplicate])
|
||
|
||
OVSDB_CHECK_NEGATIVE([duplicate string not allowed in string set],
|
||
[[parse-data-strings '{"key": "string", "max": 5}' 'asdf, ASDF, "asdf"']],
|
||
[set contains duplicate value])
|
||
|
||
OVSDB_CHECK_NEGATIVE([duplicate uuid not allowed in JSON set],
|
||
[[parse-data '{"key": "uuid", "max": 5}' \
|
||
'["set", [["uuid", "7ef21525-0088-4a28-a418-5518413e43ea"],
|
||
["uuid", "355ad037-f1da-40aa-b47c-ff9c7e8c6a38"],
|
||
["uuid", "7ef21525-0088-4a28-a418-5518413e43ea"]]]']],
|
||
[ovsdb error: set contains duplicate])
|
||
|
||
OVSDB_CHECK_NEGATIVE([duplicate uuid not allowed in string set],
|
||
[[parse-data-strings '{"key": "uuid", "max": 5}' \
|
||
'7ef21525-0088-4a28-a418-5518413e43ea,
|
||
355ad037-f1da-40aa-b47c-ff9c7e8c6a38,
|
||
7ef21525-0088-4a28-a418-5518413e43ea']],
|
||
[set contains duplicate value])
|
||
|
||
AT_BANNER([OVSDB -- map data])
|
||
|
||
OVSDB_CHECK_POSITIVE([JSON map of 1 integer to boolean],
|
||
[[parse-data '{"key": "integer", "value": "boolean"}' \
|
||
'["map", [[1, true]]]']],
|
||
[[["map",[[1,true]]]]])
|
||
|
||
OVSDB_CHECK_POSITIVE([string map of 1 integer to boolean],
|
||
[[parse-data-strings '{"key": "integer", "value": "boolean"}' \
|
||
'1=true']],
|
||
[[1=true]])
|
||
|
||
OVSDB_CHECK_POSITIVE([JSON map of at least 1 integer to boolean],
|
||
[[parse-data '{"key": "integer", "value": "boolean", "max": "unlimited"}' \
|
||
'["map", [[1, true]]]' \
|
||
'["map", [[0, true], [1, false], [2, true], [3, true], [4, true]]]' \
|
||
'["map", [[3, false], [0, true], [4, false]]]']],
|
||
[[["map",[[1,true]]]
|
||
["map",[[0,true],[1,false],[2,true],[3,true],[4,true]]]
|
||
["map",[[0,true],[3,false],[4,false]]]]])
|
||
|
||
OVSDB_CHECK_POSITIVE([string map of at least 1 integer to boolean],
|
||
[[parse-data-strings '{"key": "integer", "value": "boolean", "max": "unlimited"}' \
|
||
'1=true' \
|
||
'0=true 1=false 2=true, 3=true 4=true,' \
|
||
'3=false,0=true ,4=false']],
|
||
[[{1=true}
|
||
{0=true, 1=false, 2=true, 3=true, 4=true}
|
||
{0=true, 3=false, 4=false}]])
|
||
|
||
OVSDB_CHECK_POSITIVE([JSON map of 1 boolean to integer],
|
||
[[parse-data '{"key": "boolean", "value": "integer"}' \
|
||
'["map", [[true, 1]]]']],
|
||
[[["map",[[true,1]]]]])
|
||
|
||
OVSDB_CHECK_POSITIVE([string map of 1 boolean to integer],
|
||
[[parse-data-strings '{"key": "boolean", "value": "integer"}' \
|
||
'true=1']],
|
||
[[true=1]])
|
||
|
||
OVSDB_CHECK_POSITIVE([JSON map of 1 uuid to real],
|
||
[[parse-data '{"key": "uuid", "value": "real", "min": 1, "max": 5}' \
|
||
'["map", [[["uuid", "cad8542b-6ee1-486b-971b-7dcbf6e14979"], 1.0],
|
||
[["uuid", "6b94b968-2702-4f64-9457-314a34d69b8c"], 2.0],
|
||
[["uuid", "d2c4a168-24de-47eb-a8a3-c1abfc814979"], 3.0],
|
||
[["uuid", "25bfa475-d072-4f60-8be1-00f48643e9cb"], 4.0],
|
||
[["uuid", "1c92b8ca-d5e4-4628-a85d-1dc2d099a99a"], 5.0]]]']],
|
||
[[["map",[[["uuid","1c92b8ca-d5e4-4628-a85d-1dc2d099a99a"],5],[["uuid","25bfa475-d072-4f60-8be1-00f48643e9cb"],4],[["uuid","6b94b968-2702-4f64-9457-314a34d69b8c"],2],[["uuid","cad8542b-6ee1-486b-971b-7dcbf6e14979"],1],[["uuid","d2c4a168-24de-47eb-a8a3-c1abfc814979"],3]]]]])
|
||
|
||
OVSDB_CHECK_POSITIVE([string map of 1 uuid to real],
|
||
[[parse-data-strings '{"key": "uuid", "value": "real", "min": 1, "max": 5}' \
|
||
'cad8542b-6ee1-486b-971b-7dcbf6e14979=1.0,
|
||
6b94b968-2702-4f64-9457-314a34d69b8c=2.0,
|
||
d2c4a168-24de-47eb-a8a3-c1abfc814979=3.0,
|
||
25bfa475-d072-4f60-8be1-00f48643e9cb=4.0,
|
||
1c92b8ca-d5e4-4628-a85d-1dc2d099a99a=5.0']],
|
||
[[{1c92b8ca-d5e4-4628-a85d-1dc2d099a99a=5, 25bfa475-d072-4f60-8be1-00f48643e9cb=4, 6b94b968-2702-4f64-9457-314a34d69b8c=2, cad8542b-6ee1-486b-971b-7dcbf6e14979=1, d2c4a168-24de-47eb-a8a3-c1abfc814979=3}]])
|
||
|
||
OVSDB_CHECK_POSITIVE([JSON map of 10 string to string],
|
||
[[parse-data '{"key": "string", "value": "string", "min": 1, "max": 10}' \
|
||
'["map", [["2 gills", "1 chopin"],
|
||
["2 chopins", "1 pint"],
|
||
["2 pints", "1 quart"],
|
||
["2 quarts", "1 pottle"],
|
||
["2 pottles", "1 gallon"],
|
||
["2 gallons", "1 peck"],
|
||
["2 pecks", "1 demibushel"],
|
||
["2 demibushel", "1 firkin"],
|
||
["2 firkins", "1 kilderkin"],
|
||
["2 kilderkins", "1 barrel"]]]']],
|
||
[[["map",[["2 chopins","1 pint"],["2 demibushel","1 firkin"],["2 firkins","1 kilderkin"],["2 gallons","1 peck"],["2 gills","1 chopin"],["2 kilderkins","1 barrel"],["2 pecks","1 demibushel"],["2 pints","1 quart"],["2 pottles","1 gallon"],["2 quarts","1 pottle"]]]]])
|
||
|
||
OVSDB_CHECK_POSITIVE([string map of 10 string to string],
|
||
[[parse-data-strings '{"key": "string", "value": "string", "min": 1, "max": 10}' \
|
||
'{"2 gills"="1 chopin",
|
||
"2 chopins"= "1 pint",
|
||
"2 pints"= "1 quart",
|
||
"2 quarts"= "1 pottle",
|
||
"2 pottles"= "1 gallon",
|
||
"2 gallons"= "1 peck",
|
||
"2 pecks"= "1 demibushel",
|
||
"2 demibushel"= "1 firkin",
|
||
"2 firkins"= "1 kilderkin",
|
||
"2 kilderkins"= "1 barrel"}']],
|
||
[[{"2 chopins"="1 pint", "2 demibushel"="1 firkin", "2 firkins"="1 kilderkin", "2 gallons"="1 peck", "2 gills"="1 chopin", "2 kilderkins"="1 barrel", "2 pecks"="1 demibushel", "2 pints"="1 quart", "2 pottles"="1 gallon", "2 quarts"="1 pottle"}]])
|
||
|
||
OVSDB_CHECK_NEGATIVE([duplicate integer key not allowed in JSON map],
|
||
[[parse-data '{"key": "integer", "value": "boolean", "max": 5}' \
|
||
'["map", [[1, true], [2, false], [1, false]]]']],
|
||
[ovsdb error: map contains duplicate key])
|
||
|
||
OVSDB_CHECK_NEGATIVE([duplicate integer key not allowed in string map],
|
||
[[parse-data-strings '{"key": "integer", "value": "boolean", "max": 5}' \
|
||
'1=true 2=false 1=false']],
|
||
[map contains duplicate key])
|