You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by ja...@apache.org on 2011/07/04 16:23:25 UTC

svn commit: r1142685 - in /couchdb/trunk: src/couchdb/couch_httpd_vhost.erl test/etap/160-vhosts.t

Author: jan
Date: Mon Jul  4 14:23:24 2011
New Revision: 1142685

URL: http://svn.apache.org/viewvc?rev=1142685&view=rev
Log:
Allow "/" as a vhost target.

Includes a single whitespace fix.

Modified:
    couchdb/trunk/src/couchdb/couch_httpd_vhost.erl
    couchdb/trunk/test/etap/160-vhosts.t

Modified: couchdb/trunk/src/couchdb/couch_httpd_vhost.erl
URL: http://svn.apache.org/viewvc/couchdb/trunk/src/couchdb/couch_httpd_vhost.erl?rev=1142685&r1=1142684&r2=1142685&view=diff
==============================================================================
--- couchdb/trunk/src/couchdb/couch_httpd_vhost.erl (original)
+++ couchdb/trunk/src/couchdb/couch_httpd_vhost.erl Mon Jul  4 14:23:24 2011
@@ -127,11 +127,16 @@ dispatch_host(MochiReq) ->
             end
     end,
     FinalMochiReq.
-        
+
+append_path("/"=_Target, "/"=_Path) ->
+    "/";
+append_path(Target, Path) ->
+    Target ++ Path.
+
 % default redirect vhost handler 
 redirect_to_vhost(MochiReq, VhostTarget) ->
     Path = MochiReq:get(raw_path),
-    Target = VhostTarget ++ Path,
+    Target = append_path(VhostTarget, Path),
 
     ?LOG_DEBUG("Vhost Target: '~p'~n", [Target]),
 

Modified: couchdb/trunk/test/etap/160-vhosts.t
URL: http://svn.apache.org/viewvc/couchdb/trunk/test/etap/160-vhosts.t?rev=1142685&r1=1142684&r2=1142685&view=diff
==============================================================================
--- couchdb/trunk/test/etap/160-vhosts.t (original)
+++ couchdb/trunk/test/etap/160-vhosts.t Mon Jul  4 14:23:24 2011
@@ -52,7 +52,7 @@ admin_user_ctx() -> {user_ctx, #user_ctx
 main(_) ->
     test_util:init_code_path(),
 
-    etap:plan(14),
+    etap:plan(15),
     case (catch test()) of
         ok ->
             etap:end_tests();
@@ -115,6 +115,7 @@ test() ->
     ok = couch_config:set("vhosts", "*/test", "/etap-test-db", false), 
     ok = couch_config:set("vhosts", "*/test1", 
             "/etap-test-db/_design/doc1/_show/test", false), 
+    ok = couch_config:set("vhosts", "example3.com", "/", false),
 
     %% reload rules
     couch_httpd_vhost:reload(),
@@ -133,6 +134,7 @@ test() ->
     test_vhost_request_path1(),
     test_vhost_request_path2(),
     test_vhost_request_path3(),
+    test_vhost_request_to_root(),
 
     %% restart boilerplate
     couch_db:close(Db),
@@ -289,3 +291,13 @@ test_vhost_request_path3() ->
             end, true, <<"path in req ok">>);
         _Else -> etap:is(false, true, <<"ibrowse fail">>)
     end.
+
+test_vhost_request_to_root() ->
+    Uri = server(),
+    case ibrowse:send_req(Uri, [], get, [], []) of
+        {ok, _, _, Body} ->
+            {JsonBody} = ejson:decode(Body),
+            HasCouchDBWelcome = proplists:is_defined(<<"couchdb">>, JsonBody),
+            etap:is(HasCouchDBWelcome, true, "should allow redirect to /");
+        _Else -> etap:is(false, true, <<"ibrowse fail">>)
+    end.