# @TEST-EXEC: mv input1.log input.log
# @TEST-EXEC: btest-bg-run zeek zeek -b %INPUT
# @TEST-EXEC: $SCRIPTS/wait-for-file zeek/got1 5 || (btest-bg-wait -k 1 && false)
# @TEST-EXEC: mv input2.log input.log
# @TEST-EXEC: $SCRIPTS/wait-for-file zeek/got2 5 || (btest-bg-wait -k 1 && false)
# @TEST-EXEC: mv input3.log input.log
# @TEST-EXEC: $SCRIPTS/wait-for-file zeek/got3 5 || (btest-bg-wait -k 1 && false)
# @TEST-EXEC: mv input4.log input.log
# @TEST-EXEC: $SCRIPTS/wait-for-file zeek/got4 5 || (btest-bg-wait -k 1 && false)
# @TEST-EXEC: mv input5.log input.log
# @TEST-EXEC: btest-bg-wait 10
# @TEST-EXEC: btest-diff out
#

# @TEST-START-FILE input1.log
#separator \x09
#path	ssh
#fields	i	b	s	ss
#types	int	bool	string	string
1	T	test1	idx1
2	T	test2	idx2
# @TEST-END-FILE

# @TEST-START-FILE input2.log
#separator \x09
#path	ssh
#fields	i	b	s	ss
#types	int	bool	string	string
1	F	test1	idx1
2	T	test2	idx2
# @TEST-END-FILE

# @TEST-START-FILE input3.log
#separator \x09
#path	ssh
#fields	i	b	s	ss
#types	int	bool	string	string
1	F	test1	idx1
2	F	test2	idx2
# @TEST-END-FILE

# @TEST-START-FILE input4.log
#separator \x09
#path	ssh
#fields	i	b	s	ss
#types	int	bool	string	string
2	F	test2	idx2
# @TEST-END-FILE

# @TEST-START-FILE input5.log
#separator \x09
#path	ssh
#fields	i	b	s	ss
#types	int	bool	string	string
1	T	test1	idx1
# @TEST-END-FILE

redef exit_only_after_terminate = T;

redef InputAscii::empty_field = "EMPTY";

module A;

type Idx: record {
	i: int;
	ss: string;
};

type Val: record {
	b: bool;
	s: string;
};

global servers: table[int, string] of Val = table();
global outfile: file;
global try: count;

event zeek_init()
	{
	try = 0;
	outfile = open("../out");
	# first read in the old stuff into the table...
	Input::add_table([$source="../input.log", $name="input", $idx=Idx, $val=Val, $destination=servers, $mode=Input::REREAD,
				$pred(typ: Input::Event, left: Idx, right: Val) = { 
				if ( left$i == 1 )
					right$s = "testmodified";
				if ( left$i == 2 )
					left$ss = "idxmodified";
				return T; 
				}
				]);
	}

event Input::end_of_data(name: string, source: string)
	{
	try = try + 1;
	print outfile, fmt("Update_finished for %s, try %d", name, try);
	print outfile, servers;

	if ( try == 1 )
		system("touch got1");
	else if ( try == 2 )
		system("touch got2");
	else if ( try == 3 )
		system("touch got3");
	else if ( try == 4 )
		system("touch got4");
	if ( try == 5 )
		{
		close(outfile);
		Input::remove("input");
		terminate();
		}
	}
