1# vim:set ft= ts=4 sw=4 et fdm=marker:
2use lib '.';
3use t::TestCore::Stream;
4
5log_level('error');
6
7repeat_each(1);
8
9plan tests => repeat_each() * (blocks() * 2 + 5);
10
11add_block_preprocessor(sub {
12    my $block = shift;
13
14    my $stream_config = $block->stream_config || '';
15    my $init_by_lua_block = $block->init_by_lua_block || '';
16
17    $stream_config .= <<_EOC_;
18    lua_package_path '$t::TestCore::Stream::lua_package_path';
19    init_by_lua_block {
20        $t::TestCore::Stream::init_by_lua_block
21        $init_by_lua_block
22    }
23_EOC_
24
25    $block->set_value("stream_config", $stream_config);
26});
27
28no_long_string();
29run_tests();
30
31__DATA__
32
33=== TEST 1: errlog.raw_log with bad log level (ngx.ERROR, -1)
34--- stream_server_config
35    content_by_lua_block {
36        local errlog = require "ngx.errlog"
37
38        local pok, err = pcall(errlog.raw_log, ngx.ERROR, "hello, log")
39        if not pok then
40            ngx.say("not ok: ", err)
41            return
42        end
43
44        ngx.say("ok")
45    }
46--- stream_response
47not ok: bad log level
48--- no_error_log
49[error]
50
51
52
53=== TEST 2: errlog.raw_log with bad levels (9)
54--- stream_server_config
55    content_by_lua_block {
56        local errlog = require "ngx.errlog"
57
58        local pok, err = pcall(errlog.raw_log, 9, "hello, log")
59        if not pok then
60            ngx.say("not ok: ", err)
61            return
62        end
63
64        ngx.say("ok")
65    }
66--- stream_response
67not ok: bad log level
68--- no_error_log
69[error]
70
71
72
73=== TEST 3: errlog.raw_log with bad log message
74--- stream_server_config
75    content_by_lua_block {
76        local errlog = require "ngx.errlog"
77
78        local pok, err = pcall(errlog.raw_log, ngx.ERR, 123)
79        if not pok then
80            ngx.say("not ok: ", err)
81            return
82        end
83
84        ngx.say("ok")
85    }
86--- stream_response
87not ok: bad argument #2 to 'raw_log' (must be a string)
88--- no_error_log
89[error]
90
91
92
93=== TEST 4: errlog.raw_log test log-level ERR
94--- stream_server_config
95    content_by_lua_block {
96        local errlog = require "ngx.errlog"
97
98        errlog.raw_log(ngx.ERR, "hello world")
99    }
100--- error_log eval
101qr/\[error\] \S+: \S+ hello world/
102
103
104
105=== TEST 5: errlog.raw_log JITs
106--- init_by_lua_block
107    -- local verbose = true
108    local verbose = false
109    local outfile = errlog_file
110    -- local outfile = "/tmp/v.log"
111    if verbose then
112        local dump = require "jit.dump"
113        dump.on(nil, outfile)
114    else
115        local v = require "jit.v"
116        v.on(outfile)
117    end
118
119    require "resty.core"
120    -- jit.opt.start("hotloop=1")
121    -- jit.opt.start("loopunroll=1000000")
122    -- jit.off()
123--- stream_server_config
124    content_by_lua_block {
125        local errlog = require "ngx.errlog"
126
127        for i = 1, 100 do
128            errlog.raw_log(ngx.ERR, "hello world")
129        end
130    }
131--- error_log eval
132qr/\[TRACE\s+\d+ content_by_lua\(nginx.conf:\d+\):4 loop\]/
133
134
135
136=== TEST 6: errlog.raw_log in init_by_lua
137--- init_by_lua_block
138    local errlog = require "ngx.errlog"
139    errlog.raw_log(ngx.ERR, "hello world from init_by_lua")
140--- stream_server_config
141    content_by_lua_block {
142        ngx.say("ok")
143    }
144--- grep_error_log chop
145hello world from init_by_lua
146--- grep_error_log_out eval
147["hello world from init_by_lua\n", ""]
148
149
150
151=== TEST 7: errlog.raw_log in init_worker_by_lua
152--- stream_config
153    init_worker_by_lua_block {
154        local errlog = require "ngx.errlog"
155        errlog.raw_log(ngx.ERR, "hello world from init_worker_by_lua")
156    }
157--- stream_server_config
158    content_by_lua_block {
159        ngx.say("ok")
160    }
161--- grep_error_log chop
162hello world from init_worker_by_lua
163--- grep_error_log_out eval
164["hello world from init_worker_by_lua\n", ""]
165
166
167
168=== TEST 8: errlog.raw_log with \0 in the log message
169--- stream_server_config
170    content_by_lua_block {
171        local errlog = require "ngx.errlog"
172        errlog.raw_log(ngx.ERR, "hello\0world")
173        ngx.say("ok")
174    }
175--- stream_response
176ok
177--- error_log eval
178"hello\0world, client: "
179
180
181
182=== TEST 9: errlog.raw_log is captured by errlog.get_logs()
183--- stream_config
184    lua_capture_error_log 4k;
185--- stream_server_config
186    content_by_lua_block {
187        local errlog = require "ngx.errlog"
188        errlog.raw_log(ngx.ERR, "hello from raw_log()")
189
190        local res, err = errlog.get_logs()
191        if not res then
192            error("FAILED " .. err)
193        end
194
195        ngx.say("log lines: ", #res / 3)
196    }
197--- stream_response
198log lines: 1
199--- error_log eval
200qr/\[error\] .*? hello from raw_log\(\)/
201--- skip_nginx: 3: <1.11.2
202