mirror of
https://github.com/zeek/zeek.git
synced 2025-10-07 17:18:20 +00:00
137 lines
2.6 KiB
Text
137 lines
2.6 KiB
Text
# @TEST-EXEC: zeek -b %INPUT
|
|
# @TEST-EXEC: TEST_DIFF_CANONIFIER= btest-diff .stdout
|
|
# @TEST-EXEC: TEST_DIFF_CANONIFIER=$SCRIPTS/diff-remove-abspath btest-diff .stderr
|
|
|
|
module A;
|
|
|
|
type Color: enum {
|
|
Red = 10,
|
|
White = 20,
|
|
Blue = 30
|
|
};
|
|
|
|
type Foo: record {
|
|
hello: string;
|
|
t: bool;
|
|
f: bool;
|
|
n: count &optional;
|
|
m: count &optional; # not in input
|
|
def: count &default = 123;
|
|
i: int;
|
|
pi: double;
|
|
a: string_vec;
|
|
c1: Color;
|
|
p: port;
|
|
ti: time;
|
|
it: interval;
|
|
ad: addr;
|
|
s: subnet;
|
|
re: pattern;
|
|
su: subnet_set;
|
|
se: set[addr, port];
|
|
};
|
|
|
|
event zeek_init()
|
|
{
|
|
local json = "{\"hello\":\"world\",\"t\":true,\"f\":false,\"se\":[[\"192.168.0.1\", \"80/tcp\"], [\"2001:db8::1\", \"8080/udp\"]],\"n\":null,\"i\":123,\"pi\":3.1416,\"a\":[\"1\",\"2\",\"3\",\"4\"],\"su\":[\"[aa:bb::0]/32\",\"192.168.0.0/16\"],\"c1\":\"A::Blue\",\"p\":\"1500/tcp\",\"it\":5000,\"ad\":\"127.0.0.1\",\"s\":\"[::1/128]\",\"re\":\"/a/\",\"ti\":1681652265.042767}";
|
|
print from_json(json, Foo);
|
|
}
|
|
|
|
@TEST-START-NEXT
|
|
# argument type mismatch
|
|
event zeek_init()
|
|
{
|
|
print from_json("[]", 10);
|
|
}
|
|
|
|
@TEST-START-NEXT
|
|
# JSON parse error
|
|
event zeek_init()
|
|
{
|
|
print from_json("{\"hel", string_vec);
|
|
}
|
|
|
|
@TEST-START-NEXT
|
|
type bool_t: bool;
|
|
type Foo: record {
|
|
a: bool;
|
|
};
|
|
|
|
# type mismatch error
|
|
event zeek_init()
|
|
{
|
|
print from_json("[]", bool_t);
|
|
print from_json("{\"a\": \"hello\"}", Foo);
|
|
}
|
|
|
|
@TEST-START-NEXT
|
|
# type unsupport error
|
|
event zeek_init()
|
|
{
|
|
print from_json("[]", table_string_of_string);
|
|
}
|
|
|
|
@TEST-START-NEXT
|
|
type port_t: port;
|
|
# wrong port format
|
|
event zeek_init()
|
|
{
|
|
print from_json("\"80\"", port_t);
|
|
}
|
|
|
|
@TEST-START-NEXT
|
|
type set_t: set[int, bool];
|
|
# index type doesn't match
|
|
event zeek_init()
|
|
{
|
|
print from_json("[[1, false], [2]]", set_t);
|
|
print from_json("[[1, false], [2, 1]]", set_t);
|
|
}
|
|
|
|
@TEST-START-NEXT
|
|
type pattern_t: pattern;
|
|
# pattern compile error
|
|
event zeek_init()
|
|
{
|
|
print from_json("\"/([[:print:]]{-}[[:alnum:]]foo)/\"", pattern_t);
|
|
}
|
|
|
|
@TEST-START-NEXT
|
|
type Color: enum {
|
|
Red = 10
|
|
};
|
|
# enum error
|
|
event zeek_init()
|
|
{
|
|
print from_json("\"Yellow\"", Color);
|
|
}
|
|
|
|
@TEST-START-NEXT
|
|
# container null
|
|
event zeek_init()
|
|
{
|
|
print from_json("[\"fe80::/64\",null,\"192.168.0.0/16\"]", subnet_set);
|
|
print from_json("[\"1\",null,\"3\",\"4\"]", string_vec);
|
|
}
|
|
|
|
@TEST-START-NEXT
|
|
type Foo: record {
|
|
hello: string;
|
|
t: bool;
|
|
};
|
|
# record field null or missing
|
|
event zeek_init()
|
|
{
|
|
print from_json("{\"t\":null}", Foo);
|
|
print from_json("{\"hello\": null, \"t\": true}", Foo);
|
|
}
|
|
|
|
@TEST-START-NEXT
|
|
type Foo: record {
|
|
hello: string;
|
|
};
|
|
# extra fields are alright
|
|
event zeek_init()
|
|
{
|
|
print from_json("{\"hello\": \"Hello!\", \"t\": true}", Foo);
|
|
}
|