fix enable_cluster_http for admin-party clusters
diff --git a/src/setup.erl b/src/setup.erl
index 4067956..7537173 100644
--- a/src/setup.erl
+++ b/src/setup.erl
@@ -69,14 +69,25 @@
enable_cluster_http(Options)
end.
+get_remote_request_options(Options) ->
+ case couch_util:get_value(remote_current_user, Options, undefined) of
+ undefined ->
+ [];
+ _ ->
+ [
+ {basic_auth, {
+ binary_to_list(couch_util:get_value(remote_current_user, Options)),
+ binary_to_list(couch_util:get_value(remote_current_password, Options))
+ }}
+ ]
+ end.
+
enable_cluster_http(Options) ->
% POST to nodeB/_setup
- RequestOptions = [
- {basic_auth, {
- binary_to_list(couch_util:get_value(remote_current_user, Options)),
- binary_to_list(couch_util:get_value(remote_current_password, Options))
- }}
- ],
+ couch_log:notice("enable_cluster_http: ~p~n", [Options]),
+ RequestOptions = get_remote_request_options(Options),
+ couch_log:notice("enable_cluster_http RequestOptions: ~p~n", [RequestOptions]),
+
Body = ?JSON_ENCODE({[
{<<"action">>, <<"enable_cluster">>},
@@ -138,8 +149,10 @@
case Port of
undefined ->
ok;
- Port ->
- config:set("chttpd", "port", integer_to_list(Port))
+ Port when is_binary(Port) ->
+ config:set("chttpd", "port", binary_to_list(Port));
+ Port when is_integer(Port) ->
+ config:set_integer("chttpd", "port", Port)
end,
couch_log:notice("Enable Cluster: ~p~n", [Options]).
%cluster_state:set(enabled).
@@ -168,7 +181,7 @@
add_node_int(_Options, no) ->
{error, cluster_not_enabled};
add_node_int(Options, ok) ->
- couch_log:notice("add node: ~p~n", [Options]),
+ couch_log:notice("add node_int: ~p~n", [Options]),
ErlangCookie = erlang:get_cookie(),
% POST to nodeB/_setup
diff --git a/test/t-admin-party.sh b/test/t-admin-party.sh
new file mode 100755
index 0000000..9c45086
--- /dev/null
+++ b/test/t-admin-party.sh
@@ -0,0 +1,61 @@
+#!/bin/sh -ex
+# Licensed under the Apache License, Version 2.0 (the "License"); you may not
+# use this file except in compliance with the License. You may obtain a copy of
+# the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations under
+# the License.
+
+HEADERS="-HContent-Type:application/json"
+# show cluster state:
+curl 127.0.0.1:15986/_nodes/_all_docs
+
+# Enable Cluster on node A
+curl 127.0.0.1:15984/_cluster_setup -d '{"action":"enable_cluster","username":"a","password":"b","bind_address":"0.0.0.0"}' $HEADERS
+
+# Enable Cluster on node B
+curl a:b@127.0.0.1:15984/_cluster_setup -d '{"action":"enable_cluster","remote_node":"127.0.0.1","port":"25984","username":"a","password":"b","bind_address":"0.0.0.0"}' $HEADERS
+
+# Add node B on node A
+curl a:b@127.0.0.1:15984/_cluster_setup -d '{"action":"add_node","username":"a","password":"b","host":"127.0.0.1","port":25984}' $HEADERS
+
+
+# Show cluster state:
+curl a:b@127.0.0.1:15986/_nodes/_all_docs
+
+# Show db doesn’t exist on node A
+curl a:b@127.0.0.1:15984/foo
+
+# Show db doesn’t exist on node B
+curl a:b@127.0.0.1:25984/foo
+
+# Create database (on node A)
+curl -X PUT a:b@127.0.0.1:15984/foo
+
+# Show db does exist on node A
+curl a:b@127.0.0.1:15984/foo
+
+# Show db does exist on node B
+curl a:b@127.0.0.1:25984/foo
+
+# Finish cluster
+curl a:b@127.0.0.1:15984/_cluster_setup -d '{"action":"finish_cluster"}' $HEADERS
+
+# Show system dbs exist on node A
+curl a:b@127.0.0.1:15984/_users
+curl a:b@127.0.0.1:15984/_replicator
+curl a:b@127.0.0.1:15984/_metadata
+curl a:b@127.0.0.1:15984/_global_changes
+
+# Show system dbs exist on node B
+curl a:b@127.0.0.1:25984/_users
+curl a:b@127.0.0.1:25984/_replicator
+curl a:b@127.0.0.1:25984/_metadata
+curl a:b@127.0.0.1:25984/_global_changes
+
+echo "YAY ALL GOOD"