diff --git a/testing/btest/Baseline/javascript.log-delay/.stdout b/testing/btest/Baseline/javascript.log-delay/.stdout new file mode 100644 index 0000000000..2f2bd3a208 --- /dev/null +++ b/testing/btest/Baseline/javascript.log-delay/.stdout @@ -0,0 +1,4 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +1362692527.009775 delaying record +1362692527.080972 delay finish +1362692527.080972 HTTP::log_policy CHhAvVGS1DHFjwGM9 141.142.228.5 192.150.187.43 JS: after delay diff --git a/testing/btest/Baseline/javascript.log-delay/http.log.cut b/testing/btest/Baseline/javascript.log-delay/http.log.cut new file mode 100644 index 0000000000..2b573a5c1b --- /dev/null +++ b/testing/btest/Baseline/javascript.log-delay/http.log.cut @@ -0,0 +1,3 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +ts uid id.orig_h id.resp_h new_field +XXXXXXXXXX.XXXXXX CHhAvVGS1DHFjwGM9 141.142.228.5 192.150.187.43 JS: after delay diff --git a/testing/btest/javascript/log-delay.js b/testing/btest/javascript/log-delay.js new file mode 100644 index 0000000000..e3c1fe2edd --- /dev/null +++ b/testing/btest/javascript/log-delay.js @@ -0,0 +1,53 @@ +/* + * @TEST-DOC: Test delaying a log record from JavaScript + * @TEST-REQUIRES: $SCRIPTS/have-javascript + * @TEST-EXEC: zeek -b -Cr $TRACES/http/get.trace main.zeek exit_only_after_terminate=T + * @TEST-EXEC: TEST_DIFF_CANONIFIER= btest-diff .stdout + * @TEST-EXEC: zeek-cut -m ts uid id.orig_h id.resp_h new_field < http.log > http.log.cut + * @TEST-EXEC: btest-diff http.log.cut + */ +@TEST-START-FILE main.zeek +@load base/protocols/http + +redef record HTTP::Info += { + new_field: string &optional &log; +}; + +# Load the JavaScript pieces +@load ./main.js +@TEST-END-FILE + +@TEST-START-FILE main.js +zeek.hook('Log::log_stream_policy', (rec, id) => { + if ( id != "HTTP::LOG" ) + return; + + let nt = zeek.invoke('network_time'); + console.log(nt, 'delaying record'); + + // Log::delay() of the in-flight write. + let token = zeek.invoke('Log::delay', [id, rec]); + + // 10msec delayed record enrichment + setTimeout(() => { + let nt = zeek.invoke('network_time'); + rec.new_field = "JS: after delay"; + console.log(nt, 'delay finish'); + zeek.invoke('Log::delay_finish', [id, rec, token]); + + // Shutdown, too. + zeek.invoke('terminate'); + }, 10); + +}); + +zeek.hook('HTTP::log_policy', (rec, id, filter) => { + let nt = zeek.invoke('network_time'); + console.log(nt, 'HTTP::log_policy', rec.uid, rec.id.orig_h, rec.id.resp_h, rec.new_field); +}); + +setTimeout(() => { + console.error('force exit'); + process.exit(1); +}, 5000); +@TEST-END-FILE