testing/btest: Un-deferred record initalization tests

These baselines should align with what Zeek 5.2 or before did.
This commit is contained in:
Arne Welzel 2023-08-30 20:34:38 +02:00
parent b783441428
commit 7d6c8d7224
13 changed files with 468 additions and 0 deletions

View file

@ -0,0 +1,9 @@
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
0, new_connection, CHhAvVGS1DHFjwGM9, 1362692526.869344
1, my_network_time() called, 1362692526.869344
2, my_network_time() called, 1362692526.869344
3, my_network_time() called, 1362692526.869344
3, new_connection done
3, connection_state_remove, CHhAvVGS1DHFjwGM9, 1362692527.080972
3, state, CHhAvVGS1DHFjwGM9, [ts=1362692526.869344, inner=[ts=1362692526.869344, ts_other=1362692526.869344]]
3, connection_state_remove done

View file

@ -0,0 +1,8 @@
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
0, new_connection, CHhAvVGS1DHFjwGM9, 1362692526.869344
1, my_network_time() called, 1362692526.869344
2, my_network_time() called, 1362692526.869344
2, new_connection done
2, connection_state_remove, CHhAvVGS1DHFjwGM9, 1362692527.080972
2, state, CHhAvVGS1DHFjwGM9, [ts=1362692526.869344, inner=[ts=1362692526.869344]]
2, connection_state_remove done

View file

@ -0,0 +1,11 @@
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
0, new_connection, CHhAvVGS1DHFjwGM9, 1362692526.869344
1, my_network_time() called, 1362692526.869344
2, my_network_time() called, 1362692526.869344
3, my_network_time() called, 1362692526.869344
4, my_network_time() called, 1362692526.869344
5, my_network_time() called, 1362692526.869344
5, new_connection done
5, connection_state_remove, CHhAvVGS1DHFjwGM9, 1362692527.080972
5, state, CHhAvVGS1DHFjwGM9, [ts=1362692526.869344, inner=[ts=1362692526.869344, ts_other=1362692526.869344], inner_other=[ts=1362692526.869344, ts_other=1362692526.869344]]
5, connection_state_remove done

View file

@ -0,0 +1,14 @@
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
0, my_seq()
1, my_seq()
2, my_seq()
3, my_seq()
4, my_seq()
5, my_seq()
6, my_seq()
7, my_seq()
8, printing
8, s1, [seq=1, inner=[inner_most=[seq=3], seq=7]]
8, s2, [seq=2, inner=[inner_most=[seq=4], seq=8]]
8, os1, [inner_most=[seq=5]]
8, os2, [inner_most=[seq=6]]

View file

@ -0,0 +1,8 @@
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
0, my_seq()
1, my_seq()
2, my_seq()
3, my_seq()
4, printing
4, s1, [seq=1, inner=[seq=3]]
4, s2, [seq=2, inner=[seq=4]]

View file

@ -0,0 +1,13 @@
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
0, my_seq()
1, my_seq()
2, my_seq()
3, my_seq()
4, printing
4, s1, [seq=1, inner=[seq=3]]
4, s2, [seq=2, inner=[seq=4]]
4, tbl, {
[[seq=2, inner=[seq=4]]] = [seq=2, inner=[seq=4]],
[[seq=1, inner=[seq=3]]] = [seq=1, inner=[seq=3]]
}
4, done

View file

@ -0,0 +1,13 @@
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
0, my_seq()
1, my_seq()
2, my_seq()
3, my_seq()
4, printing
4, s1, [seq=1, inner=[seq=2]]
4, s2, [seq=3, inner=[seq=4]]
4, tbl, {
[[seq=1, inner=[seq=2]]] = [seq=1, inner=[seq=2]],
[[seq=3, inner=[seq=4]]] = [seq=3, inner=[seq=4]]
}
4, done

View file

@ -0,0 +1,13 @@
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
0, my_seq()
1, my_seq()
2, my_seq()
3, my_seq()
4, printing
4, s1, [seq=1, inner=[seq=2]]
4, s2, [seq=3, inner=[seq=4]]
4, tbl, {
[[seq=1, inner=[seq=2]]] = [seq=1, inner=[seq=2]],
[[seq=3, inner=[seq=4]]] = [seq=3, inner=[seq=4]]
}
4, done

View file

@ -0,0 +1,8 @@
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
0, new_connection, CHhAvVGS1DHFjwGM9, 1362692526.869344
1, my_network_time() called, 1362692526.869344
2, my_network_time() called, 1362692526.869344
2, new_connection done
2, connection_state_remove, CHhAvVGS1DHFjwGM9, 1362692527.080972
2, state, CHhAvVGS1DHFjwGM9, [ts=1362692526.869344, inner=[ts=1362692526.869344]]
2, connection_state_remove done

View file

@ -0,0 +1,50 @@
# @TEST-DOC: Test deferred initialization behavior for nested records and redef.
# @TEST-EXEC: zeek -b %INPUT >output
# @TEST-EXEC: TEST_DIF_CANONIFIER= btest-diff output
module Test;
global seq = 0;
function my_seq(): count {
print seq, "my_seq()";
return ++seq;
}
type InnerMost: record { };
type Inner: record {
inner_most: InnerMost;
};
type State: record {
seq: count &default=my_seq();
inner: Inner;
};
type OtherState: record {
inner_most: InnerMost;
};
# s1$seq and s2$seq receive 1, 2
global s1 = State();
global s2 = State();
global os1 = OtherState();
global os2 = OtherState();
# This uses up seq 3,4,5,6 for nested InnerMost in s1,s2,os1,os2.
redef record InnerMost += {
seq: count &default=my_seq();
};
# This uses seq 7, 8 for s1 and s2.
redef record Inner += {
seq: count &default=my_seq();
};
print seq, "printing";
print seq, "s1", s1;
print seq, "s2", s2;
print seq, "os1", os1;
print seq, "os2", os2;

View file

@ -0,0 +1,31 @@
# @TEST-DOC: Test deferred initialization behavior at parse time.
# @TEST-EXEC: zeek -b %INPUT >output
# @TEST-EXEC: TEST_DIF_CANONIFIER= btest-diff output
module Test;
global seq = 0;
function my_seq(): count {
print seq, "my_seq()";
return ++seq;
}
type Inner: record { };
type State: record {
seq: count &default=my_seq();
inner: Inner;
};
global s1 = State();
global s2 = State();
redef record Inner += {
seq: count &default=my_seq();
};
print seq, "printing";
print seq, "s1", s1;
print seq, "s2", s2;

View file

@ -0,0 +1,115 @@
# @TEST-DOC: Test deferred initialization behavior at parse time placing records into tables.
# @TEST-EXEC: zeek -b %INPUT >output
# @TEST-EXEC: TEST_DIF_CANONIFIER= btest-diff output
module Test;
global seq = 0;
function my_seq(): count {
print seq, "my_seq()";
return ++seq;
}
type Inner: record { };
type State: record {
seq: count &default=my_seq();
inner: Inner;
};
redef record Inner += {
seq: count &default=my_seq();
};
global tbl: table[State] of State;
global s1 = State();
global s2 = State();
tbl[s1] = s1;
tbl[s2] = s2;
print seq, "printing";
print seq, "s1", s1;
print seq, "s2", s2;
print seq, "tbl", tbl;
print seq, "done";
# @TEST-START-NEXT
# Same as before, but redef after creating globals.
#
#
module Test;
global seq = 0;
function my_seq(): count {
print seq, "my_seq()";
return ++seq;
}
type Inner: record { };
type State: record {
seq: count &default=my_seq();
inner: Inner;
};
global tbl: table[State] of State;
global s1 = State();
global s2 = State();
redef record Inner += {
seq: count &default=my_seq();
};
tbl[s1] = s1;
tbl[s2] = s2;
print seq, "printing";
print seq, "s1", s1;
print seq, "s2", s2;
print seq, "tbl", tbl;
print seq, "done";
# @TEST-START-NEXT
# Same as before, but in zeek_init() with locals.
#
#
module Test;
global seq = 0;
function my_seq(): count {
print seq, "my_seq()";
return ++seq;
}
type Inner: record { };
type State: record {
seq: count &default=my_seq();
inner: Inner;
};
redef record Inner += {
seq: count &default=my_seq();
};
event zeek_init()
{
local tbl: table[State] of State;
local s1 = State();
local s2 = State();
tbl[s1] = s1;
tbl[s2] = s2;
print seq, "printing";
print seq, "s1", s1;
print seq, "s2", s2;
print seq, "tbl", tbl;
print seq, "done";
}

View file

@ -0,0 +1,175 @@
# @TEST-DOC: Nested records with non-const &defaults are not deferred initialized. Regression test for #3260
# @TEST-EXEC: zeek -b -r $TRACES/http/get.trace %INPUT >output
# @TEST-EXEC: TEST_DIFF_CANONIFIER= btest-diff output
module Test;
global seq = 0;
function my_network_time(): time
{
++seq;
print seq, "my_network_time() called", network_time();
return network_time();
}
type Inner: record {
ts: time &default=my_network_time();
};
type State: record {
ts: time &default=my_network_time();
inner: Inner;
};
global tbl: table[string] of State;
event new_connection(c: connection)
{
print seq, "new_connection", c$uid, network_time();
tbl[c$uid] = State();
print seq, "new_connection done";
}
event connection_state_remove(c: connection)
{
print seq, "connection_state_remove", c$uid, network_time();
local s = tbl[c$uid];
print seq, "state", c$uid, s;
print seq, "connection_state_remove done";
}
# @TEST-START-NEXT
# Same as before, but Inner contains two default fields
module Test;
global seq = 0;
function my_network_time(): time
{
++seq;
print seq, "my_network_time() called", network_time();
return network_time();
}
type Inner: record {
ts: time &default=my_network_time();
ts_other: time &default=my_network_time();
};
type State: record {
ts: time &default=my_network_time();
inner: Inner;
};
global tbl: table[string] of State;
event new_connection(c: connection)
{
print seq, "new_connection", c$uid, network_time();
tbl[c$uid] = State();
print seq, "new_connection done";
}
event connection_state_remove(c: connection)
{
print seq, "connection_state_remove", c$uid, network_time();
local s = tbl[c$uid];
print seq, "state", c$uid, s;
print seq, "connection_state_remove done";
}
# @TEST-START-NEXT
# Same as before, but Inner is instead redef'ed with non-const &default
module Test;
global seq = 0;
function my_network_time(): time
{
++seq;
print seq, "my_network_time() called", network_time();
return network_time();
}
type Inner: record { };
type State: record {
ts: time &default=my_network_time();
inner: Inner;
};
redef record Inner += {
ts: time &default=my_network_time();
};
global tbl: table[string] of State;
event new_connection(c: connection)
{
print seq, "new_connection", c$uid, network_time();
tbl[c$uid] = State();
print seq, "new_connection done";
}
event connection_state_remove(c: connection)
{
print seq, "connection_state_remove", c$uid, network_time();
local s = tbl[c$uid];
print seq, "state", c$uid, s;
print seq, "connection_state_remove done";
}
# @TEST-START-NEXT
# Same as before, but State has two Inner fields and the Inner redef happens twice.
module Test;
global seq = 0;
function my_network_time(): time
{
++seq;
print seq, "my_network_time() called", network_time();
return network_time();
}
type Inner: record { };
type State: record {
ts: time &default=my_network_time();
inner: Inner;
inner_other: Inner;
};
redef record Inner += {
ts: time &default=my_network_time();
};
redef record Inner += {
ts_other: time &default=my_network_time();
};
global tbl: table[string] of State;
event new_connection(c: connection)
{
print seq, "new_connection", c$uid, network_time();
tbl[c$uid] = State();
print seq, "new_connection done";
}
event connection_state_remove(c: connection)
{
print seq, "connection_state_remove", c$uid, network_time();
local s = tbl[c$uid];
print seq, "state", c$uid, s;
print seq, "connection_state_remove done";
}