about summary refs log tree commit homepage
path: root/test/test_server.rb
diff options
context:
space:
mode:
Diffstat (limited to 'test/test_server.rb')
-rw-r--r--test/test_server.rb62
1 files changed, 62 insertions, 0 deletions
diff --git a/test/test_server.rb b/test/test_server.rb
index e49c8ea..96dc546 100644
--- a/test/test_server.rb
+++ b/test/test_server.rb
@@ -460,4 +460,66 @@ class TestServer < Testcase
     quit_wait(pid)
     FileUtils.rm_rf(tmpdir)
   end
+
+  module MockSwitchUser
+    def self.included(cls)
+      cls.__send__(:remove_method, :switch_user)
+      cls.__send__(:alias_method, :switch_user, :mock_switch_user)
+    end
+
+    def mock_switch_user(user, group = nil)
+      $yahns_user = [ $$, user, group ]
+    end
+  end
+
+  def test_user_no_workers
+    refute defined?($yahns_user), "$yahns_user global should be undefined"
+    err = @err
+    cfg = Yahns::Config.new
+    host, port = @srv.addr[3], @srv.addr[1]
+    cfg.instance_eval do
+      ru = lambda do |_|
+        b = $yahns_user.inspect
+        [ 200, {'Content-Length'=>b.size.to_s }, [b] ]
+      end
+      GTL.synchronize { app(:rack, ru) { listen "#{host}:#{port}" } }
+      user "nobody"
+      stderr_path err.path
+    end
+    pid = mkserver(cfg) { Yahns::Server.__send__(:include, MockSwitchUser) }
+    expect = [ pid, "nobody", nil ].inspect
+    run_client(host, port) { |res| assert_equal expect, res.body }
+    refute defined?($yahns_user), "$yahns_user global should be undefined"
+  ensure
+    quit_wait(pid)
+  end
+
+  def test_user_workers
+    refute defined?($yahns_user), "$yahns_user global should be undefined"
+    err = @err
+    cfg = Yahns::Config.new
+    host, port = @srv.addr[3], @srv.addr[1]
+    cfg.instance_eval do
+      ru = lambda do |_|
+        b = $yahns_user.inspect
+        [ 200, {'Content-Length'=>b.size.to_s, 'X-Pid' => "#$$" }, [b] ]
+      end
+      GTL.synchronize { app(:rack, ru) { listen "#{host}:#{port}" } }
+      user "nobody"
+      stderr_path err.path
+      worker_processes 1
+    end
+    pid = mkserver(cfg) { Yahns::Server.__send__(:include, MockSwitchUser) }
+    run_client(host, port) do |res|
+      worker_pid = res["X-Pid"].to_i
+      assert_operator worker_pid, :>, 0
+      refute_equal pid, worker_pid
+      refute_equal $$, worker_pid
+      expect = [ worker_pid, "nobody", nil ].inspect
+      assert_equal expect, res.body
+    end
+    refute defined?($yahns_user), "$yahns_user global should be undefined"
+  ensure
+    quit_wait(pid)
+  end
 end