diff options
author | Eric Wong <normalperson@yhbt.net> | 2012-03-14 17:53:30 -0700 |
---|---|---|
committer | Eric Wong <normalperson@yhbt.net> | 2012-03-14 17:53:30 -0700 |
commit | fcbe015155f0cbbfc45a152192f5bd6a9c6b03b8 (patch) | |
tree | c856ac1881dc4811952a4d04ecd6188b58824dbe | |
parent | 340ea0d698b7b9f6197d4caaeaac6c0e7a603301 (diff) | |
download | cmogstored-fcbe015155f0cbbfc45a152192f5bd6a9c6b03b8.tar.gz |
We'll ensure "server=none" setups will disable HTTP support entirely.
-rw-r--r-- | cfg.c | 4 | ||||
-rw-r--r-- | cmogstored.c | 4 | ||||
-rw-r--r-- | test/cmogstored-cfg.rb | 73 |
3 files changed, 80 insertions, 1 deletions
@@ -157,6 +157,10 @@ static bool svc_from_cfg(void *cfg_ptr, void *ignored) die("failed to load svc from docroot=%s\n", cfg->docroot); svc->mgmt_fd = bind_or_die(cfg->mgmtlisten, "dataready"); + + if (cfg->server && strcmp(cfg->server, "none") == 0) + return true; + svc->http_fd = bind_or_die(cfg->httplisten, "httpready"); svc->httpget_fd = bind_or_die(cfg->httpgetlisten, "httpready"); diff --git a/cmogstored.c b/cmogstored.c index e7e7d50..4bebf66 100644 --- a/cmogstored.c +++ b/cmogstored.c @@ -44,7 +44,9 @@ static struct argp_option options[] = { { .name = "pidfile", .key = CFG_KEY(pidfile), .arg = "<path>", .doc = "path to PID file" }, - { .name = "server", .key = CFG_KEY(server), .flags = OPTION_HIDDEN }, + { .name = "server", .key = CFG_KEY(server), .flags = OPTION_HIDDEN, + .arg = "(perlbal|none)" + }, { /* hidden for now, don't break compat with Perl mogstored */ .name = "multi", .key = 'M', .flags = OPTION_HIDDEN diff --git a/test/cmogstored-cfg.rb b/test/cmogstored-cfg.rb index 24ea85e..137812c 100644 --- a/test/cmogstored-cfg.rb +++ b/test/cmogstored-cfg.rb @@ -40,6 +40,7 @@ class TestCmogstoredConfig < Test::Unit::TestCase def test_worker_processes nproc = 2 @cmd << "--worker-processes=#{nproc}" + @cmd << "--docroot=#@tmpdir" @cmd << "--mgmtlisten=#@host:#@port" tmp = Tempfile.new("err") @pid = fork do @@ -256,4 +257,76 @@ class TestCmogstoredConfig < Test::Unit::TestCase _, status = Process.waitpid2(@pid) assert status.success?, status.inspect end + + def test_server_none + http = rand_port + @cmd << "--docroot=#@tmpdir" + @cmd << "--server=none" + @cmd << "--mgmtlisten=#@host:#@port" + @cmd << "--httplisten=#@host:#{http}" + tmp = Tempfile.new('err') + @pid = fork do + $stderr.reopen(tmp) + exec(*@cmd) + end + pre_kill + assert_raises(Errno::ECONNREFUSED) { TCPSocket.new(@host, http) } + Process.kill(:QUIT, @pid) + _, status = Process.waitpid2(@pid) + assert status.success?, status.inspect + end + + def test_server_perlbal + http = rand_port + FileUtils.mkpath("#@tmpdir/dev666") + @cmd << "--docroot=#@tmpdir" + @cmd << "--server=perlbal" + @cmd << "--mgmtlisten=#@host:#@port" + @cmd << "--httplisten=#@host:#{http}" + tmp = Tempfile.new('err') + @pid = fork do + $stderr.reopen(tmp) + exec(*@cmd) + end + pre_kill + Net::HTTP.start(@host, http) do |c| + put = Net::HTTP::Put.new("/dev666/foo") + body = StringIO.new("BODY!") + put.content_type = "application/octet-stream" + put.body_stream = body + put.content_length = body.size + resp = c.request(put) + assert_equal 201, resp.code.to_i + assert_equal "BODY!", IO.read("#@tmpdir/dev666/foo") + end + Process.kill(:QUIT, @pid) + _, status = Process.waitpid2(@pid) + assert status.success?, status.inspect + tmp.rewind + assert_match(/W: using internal HTTP for 'server = perlbal'/, tmp.read) + end + + def test_unsupported_servers + http = rand_port + FileUtils.mkpath("#@tmpdir/dev666") + @cmd << "--docroot=#@tmpdir" + @cmd << "--httplisten=#@host:#@port" + tmp = Tempfile.new("err") + + %w(apache lighttpd nginx).each do |srv| + cmd = @cmd.dup + cmd << "--server=#{srv}" + tmp.rewind + tmp.truncate(0) + pid = fork do + $stderr.reopen(tmp) + exec(*cmd) + end + _, status = Process.waitpid2(pid) + assert ! status.success?, status.inspect + tmp.rewind + assert_match(%r{E: 'server = #{srv}' not understood by cmogstored}, + tmp.read) + end + end end |