zeek/testing/btest/bifs/from_json.zeek

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);
}