diff options
author | Eric Wong <normalperson@yhbt.net> | 2010-10-27 13:51:12 -0700 |
---|---|---|
committer | Eric Wong <normalperson@yhbt.net> | 2010-10-27 21:14:09 +0000 |
commit | cb2c86aaa692c02f0e1810facfe244f28ddb36ae (patch) | |
tree | 00c3ebf0c7602c5f4c3b9b54cd104d5c305cc8da /t | |
parent | 19b0ac826b9afd283f4cf5c57d554d20f24d2b46 (diff) | |
download | unicorn-cb2c86aaa692c02f0e1810facfe244f28ddb36ae.tar.gz |
If a configuration directive is set at startup and later unset, it correctly restores the original default value as if it had never been set in the first place. This applies to the majority of the configuration values with a few exceptions: * This only applies to stderr_path and stdout_path when daemonized (the usual case, they'll be redirected to "/dev/null"). When NOT daemonized, we cannot easily redirect back to the original stdout/stderr destinations. * Unsetting working_directory does not restore the original working directory where Unicorn was started. As far as we can tell unsetting this after setting it is rarely desirable and greatly increases the probability of user error. (cherry picked from commit 51b2b90284000aee8d79b37a5406173c45ae212d)
Diffstat (limited to 't')
-rwxr-xr-x | t/t0012-reload-empty-config.sh | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/t/t0012-reload-empty-config.sh b/t/t0012-reload-empty-config.sh new file mode 100755 index 0000000..c18c030 --- /dev/null +++ b/t/t0012-reload-empty-config.sh @@ -0,0 +1,82 @@ +#!/bin/sh +. ./test-lib.sh +t_plan 9 "reloading unset config resets defaults" + +t_begin "setup and start" && { + unicorn_setup + rtmpfiles unicorn_config_orig before_reload after_reload + cat $unicorn_config > $unicorn_config_orig + cat >> $unicorn_config <<EOF +logger Logger.new(STDOUT) +preload_app true +timeout 0x7fffffff +worker_processes 2 +after_fork { |s,w| } +\$dump_cfg = lambda { |fp,srv| + defaults = Unicorn::Configurator::DEFAULTS + defaults.keys.map { |x| x.to_s }.sort.each do |key| + next if key =~ %r{\Astd(?:err|out)_path\z} + key = key.to_sym + def_value = defaults[key] + srv_value = srv.__send__(key) + fp << "#{key}|#{srv_value}|#{def_value}\\n" + end +} +before_fork { |s,w| + File.open("$before_reload", "a") { |fp| \$dump_cfg.call(fp, s) } +} +before_exec { |s| } +EOF + unicorn -D -c $unicorn_config env.ru + unicorn_wait_start +} + +t_begin "ensure worker is started" && { + curl -sSf http://$listen/ > $tmp +} + +t_begin "replace config file with original(-ish)" && { + grep -v ^pid < $unicorn_config_orig > $unicorn_config + cat >> $unicorn_config <<EOF +before_fork { |s,w| + File.open("$after_reload", "a") { |fp| \$dump_cfg.call(fp, s) } +} +EOF +} + +t_begin "reload signal succeeds" && { + kill -HUP $unicorn_pid + while ! egrep '(done|error) reloading' $r_err >/dev/null + do + sleep 1 + done + + grep 'done reloading' $r_err >/dev/null +} + +t_begin "ensure worker is started" && { + curl -sSf http://$listen/ > $tmp +} + +t_begin "pid file no longer exists" && { + if test -f $pid + then + die "pid=$pid should not exist" + fi +} + +t_begin "killing succeeds" && { + kill $unicorn_pid +} + +t_begin "check stderr" && { + check_stderr +} + +t_begin "ensure reloading restored settings" && { + awk < $after_reload -F'|' ' +$1 != "before_fork" && $2 != $3 { print $0; exit(1) } +' +} + +t_done |