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