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:35:13 UTC

svn commit: r1142689 - in /couchdb/branches/1.1.x: src/couchdb/couch_httpd_vhost.erl test/etap/160-vhosts.t

Author: jan
Date: Mon Jul  4 14:35:13 2011
New Revision: 1142689

URL: http://svn.apache.org/viewvc?rev=1142689&view=rev
Log:
Backport r1142685 from trunk: Allow "/" as vhost target.

Includes a one-line whitespace fix.

Modified:
    couchdb/branches/1.1.x/src/couchdb/couch_httpd_vhost.erl
    couchdb/branches/1.1.x/test/etap/160-vhosts.t

Modified: couchdb/branches/1.1.x/src/couchdb/couch_httpd_vhost.erl
URL: http://svn.apache.org/viewvc/couchdb/branches/1.1.x/src/couchdb/couch_httpd_vhost.erl?rev=1142689&r1=1142688&r2=1142689&view=diff
==============================================================================
--- couchdb/branches/1.1.x/src/couchdb/couch_httpd_vhost.erl (original)
+++ couchdb/branches/1.1.x/src/couchdb/couch_httpd_vhost.erl Mon Jul  4 14:35:13 2011
@@ -216,15 +216,19 @@ code_change(_OldVsn, State, _Extra) ->
     {ok, State}.
 
 
+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]),
-    
+
     Headers = mochiweb_headers:enter("x-couchdb-vhost-path", Path, 
         MochiReq:get(headers)),
 

Modified: couchdb/branches/1.1.x/test/etap/160-vhosts.t
URL: http://svn.apache.org/viewvc/couchdb/branches/1.1.x/test/etap/160-vhosts.t?rev=1142689&r1=1142688&r2=1142689&view=diff
==============================================================================
--- couchdb/branches/1.1.x/test/etap/160-vhosts.t (original)
+++ couchdb/branches/1.1.x/test/etap/160-vhosts.t Mon Jul  4 14:35:13 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", "*.example2.com/test", "/*", false),
     ok = couch_config:set("vhosts", "*/test1", 
             "/etap-test-db/_design/doc1/_show/test", false), 
+    ok = couch_config:set("vhosts", "example3.com", "/", false),
 
     % let couch_httpd restart
     timer:sleep(100),
@@ -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} = couch_util:json_decode(Body),
+            HasCouchDBWelcome = proplists:is_defined(<<"couchdb">>, JsonBody),
+            etap:is(HasCouchDBWelcome, true, "should allow redirect to /");
+        _Else -> etap:is(false, true, <<"ibrowse fail">>)
+    end.