Cherry-pick a fix for #122 to stable, resolve conflicts

This commit is contained in:
Michael Klishin 2016-01-29 04:05:56 +03:00
parent 59547c3142
commit f54e2f986c
1 changed files with 139 additions and 129 deletions

View File

@ -28,7 +28,7 @@ overview_test() ->
%% didn't blow up. %% didn't blow up.
true = 0 < length(pget(listeners, http_get("/overview"))), true = 0 < length(pget(listeners, http_get("/overview"))),
http_put("/users/myuser", [{password, <<"myuser">>}, http_put("/users/myuser", [{password, <<"myuser">>},
{tags, <<"management">>}], ?NO_CONTENT), {tags, <<"management">>}], [?CREATED, ?NO_CONTENT]),
http_get("/overview", "myuser", "myuser", ?OK), http_get("/overview", "myuser", "myuser", ?OK),
http_delete("/users/myuser", ?NO_CONTENT), http_delete("/users/myuser", ?NO_CONTENT),
%% TODO uncomment when priv works in test %% TODO uncomment when priv works in test
@ -37,7 +37,7 @@ overview_test() ->
cluster_name_test() -> cluster_name_test() ->
http_put("/users/myuser", [{password, <<"myuser">>}, http_put("/users/myuser", [{password, <<"myuser">>},
{tags, <<"management">>}], ?NO_CONTENT), {tags, <<"management">>}], [?CREATED, ?NO_CONTENT]),
http_put("/cluster-name", [{name, "foo"}], "myuser", "myuser", ?NOT_AUTHORISED), http_put("/cluster-name", [{name, "foo"}], "myuser", "myuser", ?NOT_AUTHORISED),
http_put("/cluster-name", [{name, "foo"}], ?NO_CONTENT), http_put("/cluster-name", [{name, "foo"}], ?NO_CONTENT),
[{name, "foo"}] = http_get("/cluster-name", "myuser", "myuser", ?OK), [{name, "foo"}] = http_get("/cluster-name", "myuser", "myuser", ?OK),
@ -46,9 +46,9 @@ cluster_name_test() ->
nodes_test() -> nodes_test() ->
http_put("/users/user", [{password, <<"user">>}, http_put("/users/user", [{password, <<"user">>},
{tags, <<"management">>}], ?NO_CONTENT), {tags, <<"management">>}], [?CREATED, ?NO_CONTENT]),
http_put("/users/monitor", [{password, <<"monitor">>}, http_put("/users/monitor", [{password, <<"monitor">>},
{tags, <<"monitoring">>}], ?NO_CONTENT), {tags, <<"monitoring">>}], [?CREATED, ?NO_CONTENT]),
DiscNode = [{type, <<"disc">>}, {running, true}], DiscNode = [{type, <<"disc">>}, {running, true}],
assert_list([DiscNode], http_get("/nodes")), assert_list([DiscNode], http_get("/nodes")),
assert_list([DiscNode], http_get("/nodes", "monitor", "monitor", ?OK)), assert_list([DiscNode], http_get("/nodes", "monitor", "monitor", ?OK)),
@ -64,7 +64,7 @@ nodes_test() ->
auth_test() -> auth_test() ->
http_put("/users/user", [{password, <<"user">>}, http_put("/users/user", [{password, <<"user">>},
{tags, <<"">>}], ?NO_CONTENT), {tags, <<"">>}], [?CREATED, ?NO_CONTENT]),
test_auth(?NOT_AUTHORISED, []), test_auth(?NOT_AUTHORISED, []),
test_auth(?NOT_AUTHORISED, [auth_header("user", "user")]), test_auth(?NOT_AUTHORISED, [auth_header("user", "user")]),
test_auth(?NOT_AUTHORISED, [auth_header("guest", "gust")]), test_auth(?NOT_AUTHORISED, [auth_header("guest", "gust")]),
@ -77,7 +77,7 @@ auth_test() ->
vhosts_test() -> vhosts_test() ->
assert_list([[{name, <<"/">>}]], http_get("/vhosts")), assert_list([[{name, <<"/">>}]], http_get("/vhosts")),
%% Create a new one %% Create a new one
http_put("/vhosts/myvhost", none, ?NO_CONTENT), http_put("/vhosts/myvhost", none, [?CREATED, ?NO_CONTENT]),
%% PUT should be idempotent %% PUT should be idempotent
http_put("/vhosts/myvhost", none, ?NO_CONTENT), http_put("/vhosts/myvhost", none, ?NO_CONTENT),
%% Check it's there %% Check it's there
@ -93,7 +93,7 @@ vhosts_test() ->
http_delete("/vhosts/myvhost", ?NOT_FOUND). http_delete("/vhosts/myvhost", ?NOT_FOUND).
vhosts_trace_test() -> vhosts_trace_test() ->
http_put("/vhosts/myvhost", none, ?NO_CONTENT), http_put("/vhosts/myvhost", none, [?CREATED, ?NO_CONTENT]),
Disabled = [{name, <<"myvhost">>}, {tracing, false}], Disabled = [{name, <<"myvhost">>}, {tracing, false}],
Enabled = [{name, <<"myvhost">>}, {tracing, true}], Enabled = [{name, <<"myvhost">>}, {tracing, true}],
Disabled = http_get("/vhosts/myvhost"), Disabled = http_get("/vhosts/myvhost"),
@ -111,7 +111,7 @@ users_test() ->
http_get("/users/myuser", ?NOT_FOUND), http_get("/users/myuser", ?NOT_FOUND),
http_put_raw("/users/myuser", "Something not JSON", ?BAD_REQUEST), http_put_raw("/users/myuser", "Something not JSON", ?BAD_REQUEST),
http_put("/users/myuser", [{flim, <<"flam">>}], ?BAD_REQUEST), http_put("/users/myuser", [{flim, <<"flam">>}], ?BAD_REQUEST),
http_put("/users/myuser", [{tags, <<"management">>}], ?NO_CONTENT), http_put("/users/myuser", [{tags, <<"management">>}], [?CREATED, ?NO_CONTENT]),
http_put("/users/myuser", [{password_hash, <<"not_hash">>}], ?BAD_REQUEST), http_put("/users/myuser", [{password_hash, <<"not_hash">>}], ?BAD_REQUEST),
http_put("/users/myuser", [{password_hash, http_put("/users/myuser", [{password_hash,
<<"IECV6PZI/Invh0DL187KFpkO5Jc=">>}, <<"IECV6PZI/Invh0DL187KFpkO5Jc=">>},
@ -143,8 +143,8 @@ users_test() ->
ok. ok.
users_legacy_administrator_test() -> users_legacy_administrator_test() ->
http_put("/users/myuser1", [{administrator, <<"true">>}], ?NO_CONTENT), http_put("/users/myuser1", [{administrator, <<"true">>}], [?CREATED, ?NO_CONTENT]),
http_put("/users/myuser2", [{administrator, <<"false">>}], ?NO_CONTENT), http_put("/users/myuser2", [{administrator, <<"false">>}], [?CREATED, ?NO_CONTENT]),
assert_item([{name, <<"myuser1">>}, {tags, <<"administrator">>}], assert_item([{name, <<"myuser1">>}, {tags, <<"administrator">>}],
http_get("/users/myuser1")), http_get("/users/myuser1")),
assert_item([{name, <<"myuser2">>}, {tags, <<"">>}], assert_item([{name, <<"myuser2">>}, {tags, <<"">>}],
@ -172,16 +172,16 @@ permissions_list_test() ->
http_get("/permissions"), http_get("/permissions"),
http_put("/users/myuser1", [{password, <<"">>}, {tags, <<"administrator">>}], http_put("/users/myuser1", [{password, <<"">>}, {tags, <<"administrator">>}],
?NO_CONTENT), [?CREATED, ?NO_CONTENT]),
http_put("/users/myuser2", [{password, <<"">>}, {tags, <<"administrator">>}], http_put("/users/myuser2", [{password, <<"">>}, {tags, <<"administrator">>}],
?NO_CONTENT), [?CREATED, ?NO_CONTENT]),
http_put("/vhosts/myvhost1", none, ?NO_CONTENT), http_put("/vhosts/myvhost1", none, [?CREATED, ?NO_CONTENT]),
http_put("/vhosts/myvhost2", none, ?NO_CONTENT), http_put("/vhosts/myvhost2", none, [?CREATED, ?NO_CONTENT]),
Perms = [{configure, <<"foo">>}, {write, <<"foo">>}, {read, <<"foo">>}], Perms = [{configure, <<"foo">>}, {write, <<"foo">>}, {read, <<"foo">>}],
http_put("/permissions/myvhost1/myuser1", Perms, ?NO_CONTENT), http_put("/permissions/myvhost1/myuser1", Perms, [?CREATED, ?NO_CONTENT]),
http_put("/permissions/myvhost2/myuser1", Perms, ?NO_CONTENT), http_put("/permissions/myvhost2/myuser1", Perms, [?CREATED, ?NO_CONTENT]),
http_put("/permissions/myvhost1/myuser2", Perms, ?NO_CONTENT), http_put("/permissions/myvhost1/myuser2", Perms, [?CREATED, ?NO_CONTENT]),
4 = length(http_get("/permissions")), 4 = length(http_get("/permissions")),
2 = length(http_get("/users/myuser1/permissions")), 2 = length(http_get("/users/myuser1/permissions")),
@ -198,12 +198,12 @@ permissions_list_test() ->
permissions_test() -> permissions_test() ->
http_put("/users/myuser", [{password, <<"myuser">>}, {tags, <<"administrator">>}], http_put("/users/myuser", [{password, <<"myuser">>}, {tags, <<"administrator">>}],
?NO_CONTENT), [?CREATED, ?NO_CONTENT]),
http_put("/vhosts/myvhost", none, ?NO_CONTENT), http_put("/vhosts/myvhost", none, [?CREATED, ?NO_CONTENT]),
http_put("/permissions/myvhost/myuser", http_put("/permissions/myvhost/myuser",
[{configure, <<"foo">>}, {write, <<"foo">>}, {read, <<"foo">>}], [{configure, <<"foo">>}, {write, <<"foo">>}, {read, <<"foo">>}],
?NO_CONTENT), [?CREATED, ?NO_CONTENT]),
Permission = [{user,<<"myuser">>}, Permission = [{user,<<"myuser">>},
{vhost,<<"myvhost">>}, {vhost,<<"myvhost">>},
@ -245,14 +245,14 @@ test_auth(Code, Headers) ->
exchanges_test() -> exchanges_test() ->
%% Can pass booleans or strings %% Can pass booleans or strings
Good = [{type, <<"direct">>}, {durable, <<"true">>}], Good = [{type, <<"direct">>}, {durable, <<"true">>}],
http_put("/vhosts/myvhost", none, ?NO_CONTENT), http_put("/vhosts/myvhost", none, [?CREATED, ?NO_CONTENT]),
http_get("/exchanges/myvhost/foo", ?NOT_AUTHORISED), http_get("/exchanges/myvhost/foo", ?NOT_AUTHORISED),
http_put("/exchanges/myvhost/foo", Good, ?NOT_AUTHORISED), http_put("/exchanges/myvhost/foo", Good, ?NOT_AUTHORISED),
http_put("/permissions/myvhost/guest", http_put("/permissions/myvhost/guest",
[{configure, <<".*">>}, {write, <<".*">>}, {read, <<".*">>}], [{configure, <<".*">>}, {write, <<".*">>}, {read, <<".*">>}],
?NO_CONTENT), [?CREATED, ?NO_CONTENT]),
http_get("/exchanges/myvhost/foo", ?NOT_FOUND), http_get("/exchanges/myvhost/foo", ?NOT_FOUND),
http_put("/exchanges/myvhost/foo", Good, ?NO_CONTENT), http_put("/exchanges/myvhost/foo", Good, [?CREATED, ?NO_CONTENT]),
http_put("/exchanges/myvhost/foo", Good, ?NO_CONTENT), http_put("/exchanges/myvhost/foo", Good, ?NO_CONTENT),
http_get("/exchanges/%2f/foo", ?NOT_FOUND), http_get("/exchanges/%2f/foo", ?NOT_FOUND),
assert_item([{name,<<"foo">>}, assert_item([{name,<<"foo">>},
@ -283,7 +283,7 @@ exchanges_test() ->
queues_test() -> queues_test() ->
Good = [{durable, true}], Good = [{durable, true}],
http_get("/queues/%2f/foo", ?NOT_FOUND), http_get("/queues/%2f/foo", ?NOT_FOUND),
http_put("/queues/%2f/foo", Good, ?NO_CONTENT), http_put("/queues/%2f/foo", Good, [?CREATED, ?NO_CONTENT]),
http_put("/queues/%2f/foo", Good, ?NO_CONTENT), http_put("/queues/%2f/foo", Good, ?NO_CONTENT),
http_get("/queues/%2f/foo", ?OK), http_get("/queues/%2f/foo", ?OK),
@ -295,7 +295,7 @@ queues_test() ->
[{durable, false}], [{durable, false}],
?BAD_REQUEST), ?BAD_REQUEST),
http_put("/queues/%2f/baz", Good, ?NO_CONTENT), http_put("/queues/%2f/baz", Good, [?CREATED, ?NO_CONTENT]),
Queues = http_get("/queues/%2f"), Queues = http_get("/queues/%2f"),
Queue = http_get("/queues/%2f/foo"), Queue = http_get("/queues/%2f/foo"),
@ -327,10 +327,10 @@ queues_test() ->
bindings_test() -> bindings_test() ->
XArgs = [{type, <<"direct">>}], XArgs = [{type, <<"direct">>}],
QArgs = [], QArgs = [],
http_put("/exchanges/%2f/myexchange", XArgs, ?NO_CONTENT), http_put("/exchanges/%2f/myexchange", XArgs, [?CREATED, ?NO_CONTENT]),
http_put("/queues/%2f/myqueue", QArgs, ?NO_CONTENT), http_put("/queues/%2f/myqueue", QArgs, [?CREATED, ?NO_CONTENT]),
BArgs = [{routing_key, <<"routing">>}, {arguments, []}], BArgs = [{routing_key, <<"routing">>}, {arguments, []}],
http_post("/bindings/%2f/e/myexchange/q/myqueue", BArgs, ?CREATED), http_post("/bindings/%2f/e/myexchange/q/myqueue", BArgs, [?CREATED, ?NO_CONTENT]),
http_get("/bindings/%2f/e/myexchange/q/myqueue/routing", ?OK), http_get("/bindings/%2f/e/myexchange/q/myqueue/routing", ?OK),
http_get("/bindings/%2f/e/myexchange/q/myqueue/rooting", ?NOT_FOUND), http_get("/bindings/%2f/e/myexchange/q/myqueue/rooting", ?NOT_FOUND),
Binding = Binding =
@ -369,13 +369,13 @@ bindings_post_test() ->
XArgs = [{type, <<"direct">>}], XArgs = [{type, <<"direct">>}],
QArgs = [], QArgs = [],
BArgs = [{routing_key, <<"routing">>}, {arguments, [{foo, <<"bar">>}]}], BArgs = [{routing_key, <<"routing">>}, {arguments, [{foo, <<"bar">>}]}],
http_put("/exchanges/%2f/myexchange", XArgs, ?NO_CONTENT), http_put("/exchanges/%2f/myexchange", XArgs, [?CREATED, ?NO_CONTENT]),
http_put("/queues/%2f/myqueue", QArgs, ?NO_CONTENT), http_put("/queues/%2f/myqueue", QArgs, [?CREATED, ?NO_CONTENT]),
http_post("/bindings/%2f/e/myexchange/q/badqueue", BArgs, ?NOT_FOUND), http_post("/bindings/%2f/e/myexchange/q/badqueue", BArgs, ?NOT_FOUND),
http_post("/bindings/%2f/e/badexchange/q/myqueue", BArgs, ?NOT_FOUND), http_post("/bindings/%2f/e/badexchange/q/myqueue", BArgs, ?NOT_FOUND),
Headers1 = http_post("/bindings/%2f/e/myexchange/q/myqueue", [], ?CREATED), Headers1 = http_post("/bindings/%2f/e/myexchange/q/myqueue", [], [?CREATED, ?NO_CONTENT]),
"../../../../%2F/e/myexchange/q/myqueue/~" = pget("location", Headers1), "../../../../%2F/e/myexchange/q/myqueue/~" = pget("location", Headers1),
Headers2 = http_post("/bindings/%2f/e/myexchange/q/myqueue", BArgs, ?CREATED), Headers2 = http_post("/bindings/%2f/e/myexchange/q/myqueue", BArgs, [?CREATED, ?NO_CONTENT]),
PropertiesKey = "routing~V4mGFgnPNrdtRmluZIxTDA", PropertiesKey = "routing~V4mGFgnPNrdtRmluZIxTDA",
PropertiesKeyBin = list_to_binary(PropertiesKey), PropertiesKeyBin = list_to_binary(PropertiesKey),
"../../../../%2F/e/myexchange/q/myqueue/" ++ PropertiesKey = "../../../../%2F/e/myexchange/q/myqueue/" ++ PropertiesKey =
@ -398,7 +398,7 @@ bindings_e2e_test() ->
BArgs = [{routing_key, <<"routing">>}, {arguments, []}], BArgs = [{routing_key, <<"routing">>}, {arguments, []}],
http_post("/bindings/%2f/e/amq.direct/e/badexchange", BArgs, ?NOT_FOUND), http_post("/bindings/%2f/e/amq.direct/e/badexchange", BArgs, ?NOT_FOUND),
http_post("/bindings/%2f/e/badexchange/e/amq.fanout", BArgs, ?NOT_FOUND), http_post("/bindings/%2f/e/badexchange/e/amq.fanout", BArgs, ?NOT_FOUND),
Headers = http_post("/bindings/%2f/e/amq.direct/e/amq.fanout", BArgs, ?CREATED), Headers = http_post("/bindings/%2f/e/amq.direct/e/amq.fanout", BArgs, [?CREATED, ?NO_CONTENT]),
"../../../../%2F/e/amq.direct/e/amq.fanout/routing" = "../../../../%2F/e/amq.direct/e/amq.fanout/routing" =
pget("location", Headers), pget("location", Headers),
[{source,<<"amq.direct">>}, [{source,<<"amq.direct">>},
@ -410,7 +410,7 @@ bindings_e2e_test() ->
{properties_key,<<"routing">>}] = {properties_key,<<"routing">>}] =
http_get("/bindings/%2f/e/amq.direct/e/amq.fanout/routing", ?OK), http_get("/bindings/%2f/e/amq.direct/e/amq.fanout/routing", ?OK),
http_delete("/bindings/%2f/e/amq.direct/e/amq.fanout/routing", ?NO_CONTENT), http_delete("/bindings/%2f/e/amq.direct/e/amq.fanout/routing", ?NO_CONTENT),
http_post("/bindings/%2f/e/amq.direct/e/amq.headers", BArgs, ?CREATED), http_post("/bindings/%2f/e/amq.direct/e/amq.headers", BArgs, [?CREATED, ?NO_CONTENT]),
Binding = Binding =
[{source,<<"amq.direct">>}, [{source,<<"amq.direct">>},
{vhost,<<"/">>}, {vhost,<<"/">>},
@ -432,9 +432,9 @@ bindings_e2e_test() ->
permissions_administrator_test() -> permissions_administrator_test() ->
http_put("/users/isadmin", [{password, <<"isadmin">>}, http_put("/users/isadmin", [{password, <<"isadmin">>},
{tags, <<"administrator">>}], ?NO_CONTENT), {tags, <<"administrator">>}], [?CREATED, ?NO_CONTENT]),
http_put("/users/notadmin", [{password, <<"notadmin">>}, http_put("/users/notadmin", [{password, <<"notadmin">>},
{tags, <<"administrator">>}], ?NO_CONTENT), {tags, <<"administrator">>}], [?CREATED, ?NO_CONTENT]),
http_put("/users/notadmin", [{password, <<"notadmin">>}, http_put("/users/notadmin", [{password, <<"notadmin">>},
{tags, <<"management">>}], ?NO_CONTENT), {tags, <<"management">>}], ?NO_CONTENT),
Test = Test =
@ -460,19 +460,19 @@ permissions_vhost_test() ->
QArgs = [], QArgs = [],
PermArgs = [{configure, <<".*">>}, {write, <<".*">>}, {read, <<".*">>}], PermArgs = [{configure, <<".*">>}, {write, <<".*">>}, {read, <<".*">>}],
http_put("/users/myuser", [{password, <<"myuser">>}, http_put("/users/myuser", [{password, <<"myuser">>},
{tags, <<"management">>}], ?NO_CONTENT), {tags, <<"management">>}], [?CREATED, ?NO_CONTENT]),
http_put("/vhosts/myvhost1", none, ?NO_CONTENT), http_put("/vhosts/myvhost1", none, [?CREATED, ?NO_CONTENT]),
http_put("/vhosts/myvhost2", none, ?NO_CONTENT), http_put("/vhosts/myvhost2", none, [?CREATED, ?NO_CONTENT]),
http_put("/permissions/myvhost1/myuser", PermArgs, ?NO_CONTENT), http_put("/permissions/myvhost1/myuser", PermArgs, [?CREATED, ?NO_CONTENT]),
http_put("/permissions/myvhost1/guest", PermArgs, ?NO_CONTENT), http_put("/permissions/myvhost1/guest", PermArgs, [?CREATED, ?NO_CONTENT]),
http_put("/permissions/myvhost2/guest", PermArgs, ?NO_CONTENT), http_put("/permissions/myvhost2/guest", PermArgs, [?CREATED, ?NO_CONTENT]),
assert_list([[{name, <<"/">>}], assert_list([[{name, <<"/">>}],
[{name, <<"myvhost1">>}], [{name, <<"myvhost1">>}],
[{name, <<"myvhost2">>}]], http_get("/vhosts", ?OK)), [{name, <<"myvhost2">>}]], http_get("/vhosts", ?OK)),
assert_list([[{name, <<"myvhost1">>}]], assert_list([[{name, <<"myvhost1">>}]],
http_get("/vhosts", "myuser", "myuser", ?OK)), http_get("/vhosts", "myuser", "myuser", ?OK)),
http_put("/queues/myvhost1/myqueue", QArgs, ?NO_CONTENT), http_put("/queues/myvhost1/myqueue", QArgs, [?CREATED, ?NO_CONTENT]),
http_put("/queues/myvhost2/myqueue", QArgs, ?NO_CONTENT), http_put("/queues/myvhost2/myqueue", QArgs, [?CREATED, ?NO_CONTENT]),
Test1 = Test1 =
fun(Path) -> fun(Path) ->
Results = http_get(Path, "myuser", "myuser", ?OK), Results = http_get(Path, "myuser", "myuser", ?OK),
@ -514,8 +514,8 @@ permissions_amqp_test() ->
PermArgs = [{configure, <<"foo.*">>}, {write, <<"foo.*">>}, PermArgs = [{configure, <<"foo.*">>}, {write, <<"foo.*">>},
{read, <<"foo.*">>}], {read, <<"foo.*">>}],
http_put("/users/myuser", [{password, <<"myuser">>}, http_put("/users/myuser", [{password, <<"myuser">>},
{tags, <<"management">>}], ?NO_CONTENT), {tags, <<"management">>}], [?CREATED, ?NO_CONTENT]),
http_put("/permissions/%2f/myuser", PermArgs, ?NO_CONTENT), http_put("/permissions/%2f/myuser", PermArgs, [?CREATED, ?NO_CONTENT]),
http_put("/queues/%2f/bar-queue", QArgs, "myuser", "myuser", http_put("/queues/%2f/bar-queue", QArgs, "myuser", "myuser",
?NOT_AUTHORISED), ?NOT_AUTHORISED),
http_put("/queues/%2f/bar-queue", QArgs, "nonexistent", "nonexistent", http_put("/queues/%2f/bar-queue", QArgs, "nonexistent", "nonexistent",
@ -542,12 +542,12 @@ get_conn(Username, Password) ->
permissions_connection_channel_consumer_test() -> permissions_connection_channel_consumer_test() ->
PermArgs = [{configure, <<".*">>}, {write, <<".*">>}, {read, <<".*">>}], PermArgs = [{configure, <<".*">>}, {write, <<".*">>}, {read, <<".*">>}],
http_put("/users/user", [{password, <<"user">>}, http_put("/users/user", [{password, <<"user">>},
{tags, <<"management">>}], ?NO_CONTENT), {tags, <<"management">>}], [?CREATED, ?NO_CONTENT]),
http_put("/permissions/%2f/user", PermArgs, ?NO_CONTENT), http_put("/permissions/%2f/user", PermArgs, [?CREATED, ?NO_CONTENT]),
http_put("/users/monitor", [{password, <<"monitor">>}, http_put("/users/monitor", [{password, <<"monitor">>},
{tags, <<"monitoring">>}], ?NO_CONTENT), {tags, <<"monitoring">>}], [?CREATED, ?NO_CONTENT]),
http_put("/permissions/%2f/monitor", PermArgs, ?NO_CONTENT), http_put("/permissions/%2f/monitor", PermArgs, [?CREATED, ?NO_CONTENT]),
http_put("/queues/%2f/test", [], ?NO_CONTENT), http_put("/queues/%2f/test", [], [?CREATED, ?NO_CONTENT]),
{Conn1, UserConn, UserCh, UserConnCh} = get_conn("user", "user"), {Conn1, UserConn, UserCh, UserConnCh} = get_conn("user", "user"),
{Conn2, MonConn, MonCh, MonConnCh} = get_conn("monitor", "monitor"), {Conn2, MonConn, MonCh, MonConnCh} = get_conn("monitor", "monitor"),
@ -603,7 +603,7 @@ permissions_connection_channel_consumer_test() ->
consumers_test() -> consumers_test() ->
http_put("/queues/%2f/test", [], ?NO_CONTENT), http_put("/queues/%2f/test", [], [?CREATED, ?NO_CONTENT]),
{Conn, _ConnPath, _ChPath, _ConnChPath} = get_conn("guest", "guest"), {Conn, _ConnPath, _ChPath, _ConnChPath} = get_conn("guest", "guest"),
{ok, Ch} = amqp_connection:open_channel(Conn), {ok, Ch} = amqp_connection:open_channel(Conn),
amqp_channel:subscribe( amqp_channel:subscribe(
@ -629,9 +629,9 @@ defs_v(Key, URI, CreateMethod, Args) ->
defs(Key, Rep1(URI, "%2f"), CreateMethod, Rep2(Args, <<"/">>)), defs(Key, Rep1(URI, "%2f"), CreateMethod, Rep2(Args, <<"/">>)),
%% Test against new vhost %% Test against new vhost
http_put("/vhosts/test", none, ?NO_CONTENT), http_put("/vhosts/test", none, [?CREATED, ?NO_CONTENT]),
PermArgs = [{configure, <<".*">>}, {write, <<".*">>}, {read, <<".*">>}], PermArgs = [{configure, <<".*">>}, {write, <<".*">>}, {read, <<".*">>}],
http_put("/permissions/test/guest", PermArgs, ?NO_CONTENT), http_put("/permissions/test/guest", PermArgs, [?CREATED, ?NO_CONTENT]),
defs(Key, Rep1(URI, "test"), CreateMethod, Rep2(Args, <<"test">>), defs(Key, Rep1(URI, "test"), CreateMethod, Rep2(Args, <<"test">>),
fun(URI2) -> http_delete(URI2, ?NO_CONTENT), fun(URI2) -> http_delete(URI2, ?NO_CONTENT),
http_delete("/vhosts/test", ?NO_CONTENT) end). http_delete("/vhosts/test", ?NO_CONTENT) end).
@ -639,11 +639,13 @@ defs_v(Key, URI, CreateMethod, Args) ->
defs(Key, URI, CreateMethod, Args, DeleteFun) -> defs(Key, URI, CreateMethod, Args, DeleteFun) ->
%% Create the item %% Create the item
URI2 = case CreateMethod of URI2 = case CreateMethod of
put -> http_put(URI, Args, ?NO_CONTENT), put -> http_put(URI, Args, [?CREATED, ?NO_CONTENT]),
URI; URI;
post -> Headers = http_post(URI, Args, ?CREATED), put_update -> http_put(URI, Args, ?NO_CONTENT),
rabbit_web_dispatch_util:unrelativise( URI;
URI, pget("location", Headers)) post -> Headers = http_post(URI, Args, [?CREATED, ?NO_CONTENT]),
rabbit_web_dispatch_util:unrelativise(
URI, pget("location", Headers))
end, end,
%% Make sure it ends up in definitions %% Make sure it ends up in definitions
Definitions = http_get("/definitions", ?OK), Definitions = http_get("/definitions", ?OK),
@ -702,8 +704,7 @@ definitions_test() ->
http_put("/permissions/%2f/guest", http_put("/permissions/%2f/guest",
[{configure, <<".*">>}, [{configure, <<".*">>},
{write, <<".*">>}, {write, <<".*">>},
{read, <<".*">>}], ?NO_CONTENT), {read, <<".*">>}], [?CREATED, ?NO_CONTENT]),
BrokenConfig = BrokenConfig =
[{users, []}, [{users, []},
{vhosts, []}, {vhosts, []},
@ -808,7 +809,7 @@ definitions_server_named_queue_test() ->
Definitions = http_get("/definitions", ?OK), Definitions = http_get("/definitions", ?OK),
http_delete(Path, ?NO_CONTENT), http_delete(Path, ?NO_CONTENT),
http_get(Path, ?NOT_FOUND), http_get(Path, ?NOT_FOUND),
http_post("/definitions", Definitions, ?CREATED), http_post("/definitions", Definitions, [?CREATED, ?NO_CONTENT]),
http_get(Path, ?OK), http_get(Path, ?OK),
http_delete(Path, ?NO_CONTENT), http_delete(Path, ?NO_CONTENT),
ok. ok.
@ -826,9 +827,9 @@ arguments_test() ->
BArgs = [{routing_key, <<"">>}, BArgs = [{routing_key, <<"">>},
{arguments, [{'x-match', <<"all">>}, {arguments, [{'x-match', <<"all">>},
{foo, <<"bar">>}]}], {foo, <<"bar">>}]}],
http_put("/exchanges/%2f/myexchange", XArgs, ?NO_CONTENT), http_put("/exchanges/%2f/myexchange", XArgs, [?CREATED, ?NO_CONTENT]),
http_put("/queues/%2f/myqueue", QArgs, ?NO_CONTENT), http_put("/queues/%2f/myqueue", QArgs, [?CREATED, ?NO_CONTENT]),
http_post("/bindings/%2f/e/myexchange/q/myqueue", BArgs, ?CREATED), http_post("/bindings/%2f/e/myexchange/q/myqueue", BArgs, [?CREATED, ?NO_CONTENT]),
Definitions = http_get("/definitions", ?OK), Definitions = http_get("/definitions", ?OK),
http_delete("/exchanges/%2f/myexchange", ?NO_CONTENT), http_delete("/exchanges/%2f/myexchange", ?NO_CONTENT),
http_delete("/queues/%2f/myqueue", ?NO_CONTENT), http_delete("/queues/%2f/myqueue", ?NO_CONTENT),
@ -850,7 +851,7 @@ arguments_table_test() ->
<<"amqp://localhost/%2f/upstream2">>]}], <<"amqp://localhost/%2f/upstream2">>]}],
XArgs = [{type, <<"headers">>}, XArgs = [{type, <<"headers">>},
{arguments, Args}], {arguments, Args}],
http_put("/exchanges/%2f/myexchange", XArgs, ?NO_CONTENT), http_put("/exchanges/%2f/myexchange", XArgs, [?CREATED, ?NO_CONTENT]),
Definitions = http_get("/definitions", ?OK), Definitions = http_get("/definitions", ?OK),
http_delete("/exchanges/%2f/myexchange", ?NO_CONTENT), http_delete("/exchanges/%2f/myexchange", ?NO_CONTENT),
http_post("/definitions", Definitions, ?CREATED), http_post("/definitions", Definitions, ?CREATED),
@ -860,7 +861,7 @@ arguments_table_test() ->
queue_purge_test() -> queue_purge_test() ->
QArgs = [], QArgs = [],
http_put("/queues/%2f/myqueue", QArgs, ?NO_CONTENT), http_put("/queues/%2f/myqueue", QArgs, [?CREATED, ?NO_CONTENT]),
{ok, Conn} = amqp_connection:start(#amqp_params_network{}), {ok, Conn} = amqp_connection:start(#amqp_params_network{}),
{ok, Ch} = amqp_connection:open_channel(Conn), {ok, Ch} = amqp_connection:open_channel(Conn),
Publish = fun() -> Publish = fun() ->
@ -887,7 +888,7 @@ queue_purge_test() ->
ok. ok.
queue_actions_test() -> queue_actions_test() ->
http_put("/queues/%2f/q", [], ?NO_CONTENT), http_put("/queues/%2f/q", [], [?CREATED, ?NO_CONTENT]),
http_post("/queues/%2f/q/actions", [{action, sync}], ?NO_CONTENT), http_post("/queues/%2f/q/actions", [{action, sync}], ?NO_CONTENT),
http_post("/queues/%2f/q/actions", [{action, cancel_sync}], ?NO_CONTENT), http_post("/queues/%2f/q/actions", [{action, cancel_sync}], ?NO_CONTENT),
http_post("/queues/%2f/q/actions", [{action, change_colour}], ?BAD_REQUEST), http_post("/queues/%2f/q/actions", [{action, change_colour}], ?BAD_REQUEST),
@ -963,13 +964,13 @@ connections_channels_pagination_test() ->
exchanges_pagination_test() -> exchanges_pagination_test() ->
QArgs = [], QArgs = [],
PermArgs = [{configure, <<".*">>}, {write, <<".*">>}, {read, <<".*">>}], PermArgs = [{configure, <<".*">>}, {write, <<".*">>}, {read, <<".*">>}],
http_put("/vhosts/vh1", none, ?NO_CONTENT), http_put("/vhosts/vh1", none, [?CREATED, ?NO_CONTENT]),
http_put("/permissions/vh1/guest", PermArgs, ?NO_CONTENT), http_put("/permissions/vh1/guest", PermArgs, [?CREATED, ?NO_CONTENT]),
http_get("/exchanges/vh1?page=1&page_size=2", ?OK), http_get("/exchanges/vh1?page=1&page_size=2", ?OK),
http_put("/exchanges/%2f/test0", QArgs, ?NO_CONTENT), http_put("/exchanges/%2f/test0", QArgs, [?CREATED, ?NO_CONTENT]),
http_put("/exchanges/vh1/test1", QArgs, ?NO_CONTENT), http_put("/exchanges/vh1/test1", QArgs, [?CREATED, ?NO_CONTENT]),
http_put("/exchanges/%2f/test2_reg", QArgs, ?NO_CONTENT), http_put("/exchanges/%2f/test2_reg", QArgs, [?CREATED, ?NO_CONTENT]),
http_put("/exchanges/vh1/reg_test3", QArgs, ?NO_CONTENT), http_put("/exchanges/vh1/reg_test3", QArgs, [?CREATED, ?NO_CONTENT]),
PageOfTwo = http_get("/exchanges?page=1&page_size=2", ?OK), PageOfTwo = http_get("/exchanges?page=1&page_size=2", ?OK),
?assertEqual(19, proplists:get_value(total_count, PageOfTwo)), ?assertEqual(19, proplists:get_value(total_count, PageOfTwo)),
?assertEqual(19, proplists:get_value(filtered_count, PageOfTwo)), ?assertEqual(19, proplists:get_value(filtered_count, PageOfTwo)),
@ -1021,15 +1022,15 @@ exchanges_pagination_test() ->
exchanges_pagination_permissions_test() -> exchanges_pagination_permissions_test() ->
http_put("/users/admin", [{password, <<"admin">>}, http_put("/users/admin", [{password, <<"admin">>},
{tags, <<"administrator">>}], ?NO_CONTENT), {tags, <<"administrator">>}], [?CREATED, ?NO_CONTENT]),
Perms = [{configure, <<".*">>}, Perms = [{configure, <<".*">>},
{write, <<".*">>}, {write, <<".*">>},
{read, <<".*">>}], {read, <<".*">>}],
http_put("/vhosts/vh1", none, ?NO_CONTENT), http_put("/vhosts/vh1", none, [?CREATED, ?NO_CONTENT]),
http_put("/permissions/vh1/admin", Perms, ?NO_CONTENT), http_put("/permissions/vh1/admin", Perms, [?CREATED, ?NO_CONTENT]),
QArgs = [], QArgs = [],
http_put("/exchanges/%2f/test0", QArgs, ?NO_CONTENT), http_put("/exchanges/%2f/test0", QArgs, [?CREATED, ?NO_CONTENT]),
http_put("/exchanges/vh1/test1", QArgs, "admin","admin", ?NO_CONTENT), http_put("/exchanges/vh1/test1", QArgs, "admin","admin", [?CREATED, ?NO_CONTENT]),
FirstPage = http_get("/exchanges?page=1&name=test1","admin","admin", ?OK), FirstPage = http_get("/exchanges?page=1&name=test1","admin","admin", ?OK),
?assertEqual(8, proplists:get_value(total_count, FirstPage)), ?assertEqual(8, proplists:get_value(total_count, FirstPage)),
?assertEqual(1, proplists:get_value(item_count, FirstPage)), ?assertEqual(1, proplists:get_value(item_count, FirstPage)),
@ -1048,15 +1049,15 @@ exchanges_pagination_permissions_test() ->
queue_pagination_test() -> queue_pagination_test() ->
QArgs = [], QArgs = [],
PermArgs = [{configure, <<".*">>}, {write, <<".*">>}, {read, <<".*">>}], PermArgs = [{configure, <<".*">>}, {write, <<".*">>}, {read, <<".*">>}],
http_put("/vhosts/vh1", none, ?NO_CONTENT), http_put("/vhosts/vh1", none, [?CREATED, ?NO_CONTENT]),
http_put("/permissions/vh1/guest", PermArgs, ?NO_CONTENT), http_put("/permissions/vh1/guest", PermArgs, [?CREATED, ?NO_CONTENT]),
http_get("/queues/vh1?page=1&page_size=2", ?OK), http_get("/queues/vh1?page=1&page_size=2", ?OK),
http_put("/queues/%2f/test0", QArgs, ?NO_CONTENT), http_put("/queues/%2f/test0", QArgs, [?CREATED, ?NO_CONTENT]),
http_put("/queues/vh1/test1", QArgs, ?NO_CONTENT), http_put("/queues/vh1/test1", QArgs, [?CREATED, ?NO_CONTENT]),
http_put("/queues/%2f/test2_reg", QArgs, ?NO_CONTENT), http_put("/queues/%2f/test2_reg", QArgs, [?CREATED, ?NO_CONTENT]),
http_put("/queues/vh1/reg_test3", QArgs, ?NO_CONTENT), http_put("/queues/vh1/reg_test3", QArgs, [?CREATED, ?NO_CONTENT]),
PageOfTwo = http_get("/queues?page=1&page_size=2", ?OK), PageOfTwo = http_get("/queues?page=1&page_size=2", ?OK),
?assertEqual(4, proplists:get_value(total_count, PageOfTwo)), ?assertEqual(4, proplists:get_value(total_count, PageOfTwo)),
?assertEqual(4, proplists:get_value(filtered_count, PageOfTwo)), ?assertEqual(4, proplists:get_value(filtered_count, PageOfTwo)),
@ -1147,15 +1148,15 @@ queue_pagination_test() ->
queues_pagination_permissions_test() -> queues_pagination_permissions_test() ->
http_put("/users/admin", [{password, <<"admin">>}, http_put("/users/admin", [{password, <<"admin">>},
{tags, <<"administrator">>}], ?NO_CONTENT), {tags, <<"administrator">>}], [?CREATED, ?NO_CONTENT]),
Perms = [{configure, <<".*">>}, Perms = [{configure, <<".*">>},
{write, <<".*">>}, {write, <<".*">>},
{read, <<".*">>}], {read, <<".*">>}],
http_put("/vhosts/vh1", none, ?NO_CONTENT), http_put("/vhosts/vh1", none, [?CREATED, ?NO_CONTENT]),
http_put("/permissions/vh1/admin", Perms, ?NO_CONTENT), http_put("/permissions/vh1/admin", Perms, [?CREATED, ?NO_CONTENT]),
QArgs = [], QArgs = [],
http_put("/queues/%2f/test0", QArgs, ?NO_CONTENT), http_put("/queues/%2f/test0", QArgs, [?CREATED, ?NO_CONTENT]),
http_put("/queues/vh1/test1", QArgs, "admin","admin", ?NO_CONTENT), http_put("/queues/vh1/test1", QArgs, "admin","admin", [?CREATED, ?NO_CONTENT]),
FirstPage = http_get("/queues?page=1","admin","admin", ?OK), FirstPage = http_get("/queues?page=1","admin","admin", ?OK),
?assertEqual(1, proplists:get_value(total_count, FirstPage)), ?assertEqual(1, proplists:get_value(total_count, FirstPage)),
?assertEqual(1, proplists:get_value(item_count, FirstPage)), ?assertEqual(1, proplists:get_value(item_count, FirstPage)),
@ -1226,7 +1227,7 @@ samples_range_test() ->
%% Queues. %% Queues.
http_put("/queues/%2f/test0", [], ?NO_CONTENT), http_put("/queues/%2f/test0", [], [?CREATED, ?NO_CONTENT]),
http_get("/queues/%2f?lengths_age=60&lengths_incr=1", ?OK), http_get("/queues/%2f?lengths_age=60&lengths_incr=1", ?OK),
http_get("/queues/%2f?lengths_age=6000&lengths_incr=1", ?BAD_REQUEST), http_get("/queues/%2f?lengths_age=6000&lengths_incr=1", ?BAD_REQUEST),
@ -1237,7 +1238,7 @@ samples_range_test() ->
%% Vhosts. %% Vhosts.
http_put("/vhosts/vh1", none, ?NO_CONTENT), http_put("/vhosts/vh1", none, [?CREATED, ?NO_CONTENT]),
http_get("/vhosts?lengths_age=60&lengths_incr=1", ?OK), http_get("/vhosts?lengths_age=60&lengths_incr=1", ?OK),
http_get("/vhosts?lengths_age=6000&lengths_incr=1", ?BAD_REQUEST), http_get("/vhosts?lengths_age=6000&lengths_incr=1", ?BAD_REQUEST),
@ -1251,12 +1252,12 @@ samples_range_test() ->
sorting_test() -> sorting_test() ->
QArgs = [], QArgs = [],
PermArgs = [{configure, <<".*">>}, {write, <<".*">>}, {read, <<".*">>}], PermArgs = [{configure, <<".*">>}, {write, <<".*">>}, {read, <<".*">>}],
http_put("/vhosts/vh1", none, ?NO_CONTENT), http_put("/vhosts/vh1", none, [?CREATED, ?NO_CONTENT]),
http_put("/permissions/vh1/guest", PermArgs, ?NO_CONTENT), http_put("/permissions/vh1/guest", PermArgs, [?CREATED, ?NO_CONTENT]),
http_put("/queues/%2f/test0", QArgs, ?NO_CONTENT), http_put("/queues/%2f/test0", QArgs, [?CREATED, ?NO_CONTENT]),
http_put("/queues/vh1/test1", QArgs, ?NO_CONTENT), http_put("/queues/vh1/test1", QArgs, [?CREATED, ?NO_CONTENT]),
http_put("/queues/%2f/test2", QArgs, ?NO_CONTENT), http_put("/queues/%2f/test2", QArgs, [?CREATED, ?NO_CONTENT]),
http_put("/queues/vh1/test3", QArgs, ?NO_CONTENT), http_put("/queues/vh1/test3", QArgs, [?CREATED, ?NO_CONTENT]),
assert_list([[{name, <<"test0">>}], assert_list([[{name, <<"test0">>}],
[{name, <<"test2">>}], [{name, <<"test2">>}],
[{name, <<"test1">>}], [{name, <<"test1">>}],
@ -1293,9 +1294,9 @@ sorting_test() ->
format_output_test() -> format_output_test() ->
QArgs = [], QArgs = [],
PermArgs = [{configure, <<".*">>}, {write, <<".*">>}, {read, <<".*">>}], PermArgs = [{configure, <<".*">>}, {write, <<".*">>}, {read, <<".*">>}],
http_put("/vhosts/vh1", none, ?NO_CONTENT), http_put("/vhosts/vh1", none, [?CREATED, ?NO_CONTENT]),
http_put("/permissions/vh1/guest", PermArgs, ?NO_CONTENT), http_put("/permissions/vh1/guest", PermArgs, [?CREATED, ?NO_CONTENT]),
http_put("/queues/%2f/test0", QArgs, ?NO_CONTENT), http_put("/queues/%2f/test0", QArgs, [?CREATED, ?NO_CONTENT]),
assert_list([[{name, <<"test0">>}, assert_list([[{name, <<"test0">>},
{consumer_utilisation, null}, {consumer_utilisation, null},
{exclusive_consumer_tag, null}, {exclusive_consumer_tag, null},
@ -1306,7 +1307,7 @@ format_output_test() ->
columns_test() -> columns_test() ->
http_put("/queues/%2f/test", [{arguments, [{<<"foo">>, <<"bar">>}]}], http_put("/queues/%2f/test", [{arguments, [{<<"foo">>, <<"bar">>}]}],
?NO_CONTENT), [?CREATED, ?NO_CONTENT]),
[[{name, <<"test">>}, {arguments, [{foo, <<"bar">>}]}]] = [[{name, <<"test">>}, {arguments, [{foo, <<"bar">>}]}]] =
http_get("/queues?columns=arguments.foo,name", ?OK), http_get("/queues?columns=arguments.foo,name", ?OK),
[{name, <<"test">>}, {arguments, [{foo, <<"bar">>}]}] = [{name, <<"test">>}, {arguments, [{foo, <<"bar">>}]}] =
@ -1320,7 +1321,7 @@ get_test() ->
[{table, [{table,
[{<<"uri">>, longstr, [{<<"uri">>, longstr,
<<"amqp://localhost/%2f/upstream">>}]}]}], <<"amqp://localhost/%2f/upstream">>}]}]}],
http_put("/queues/%2f/myqueue", [], ?NO_CONTENT), http_put("/queues/%2f/myqueue", [], [?CREATED, ?NO_CONTENT]),
{ok, Conn} = amqp_connection:start(#amqp_params_network{}), {ok, Conn} = amqp_connection:start(#amqp_params_network{}),
{ok, Ch} = amqp_connection:open_channel(Conn), {ok, Ch} = amqp_connection:open_channel(Conn),
Publish = fun (Payload) -> Publish = fun (Payload) ->
@ -1363,7 +1364,7 @@ get_test() ->
get_fail_test() -> get_fail_test() ->
http_put("/users/myuser", [{password, <<"password">>}, http_put("/users/myuser", [{password, <<"password">>},
{tags, <<"management">>}], ?NO_CONTENT), {tags, <<"management">>}], ?NO_CONTENT),
http_put("/queues/%2f/myqueue", [], ?NO_CONTENT), http_put("/queues/%2f/myqueue", [], [?CREATED, ?NO_CONTENT]),
http_post("/queues/%2f/myqueue/get", http_post("/queues/%2f/myqueue/get",
[{requeue, false}, [{requeue, false},
{count, 1}, {count, 1},
@ -1375,7 +1376,7 @@ get_fail_test() ->
publish_test() -> publish_test() ->
Headers = [{'x-forwarding', [[{uri,<<"amqp://localhost/%2f/upstream">>}]]}], Headers = [{'x-forwarding', [[{uri,<<"amqp://localhost/%2f/upstream">>}]]}],
Msg = msg(<<"myqueue">>, Headers, <<"Hello world">>), Msg = msg(<<"myqueue">>, Headers, <<"Hello world">>),
http_put("/queues/%2f/myqueue", [], ?NO_CONTENT), http_put("/queues/%2f/myqueue", [], [?CREATED, ?NO_CONTENT]),
?assertEqual([{routed, true}], ?assertEqual([{routed, true}],
http_post("/exchanges/%2f/amq.default/publish", Msg, ?OK)), http_post("/exchanges/%2f/amq.default/publish", Msg, ?OK)),
[Msg2] = http_post("/queues/%2f/myqueue/get", [{requeue, false}, [Msg2] = http_post("/queues/%2f/myqueue/get", [{requeue, false},
@ -1393,7 +1394,7 @@ publish_test() ->
publish_accept_json_test() -> publish_accept_json_test() ->
Headers = [{'x-forwarding', [[{uri, <<"amqp://localhost/%2f/upstream">>}]]}], Headers = [{'x-forwarding', [[{uri, <<"amqp://localhost/%2f/upstream">>}]]}],
Msg = msg(<<"myqueue">>, Headers, <<"Hello world">>), Msg = msg(<<"myqueue">>, Headers, <<"Hello world">>),
http_put("/queues/%2f/myqueue", [], ?NO_CONTENT), http_put("/queues/%2f/myqueue", [], [?CREATED, ?NO_CONTENT]),
?assertEqual([{routed, true}], ?assertEqual([{routed, true}],
http_post_accept_json("/exchanges/%2f/amq.default/publish", http_post_accept_json("/exchanges/%2f/amq.default/publish",
Msg, ?OK)), Msg, ?OK)),
@ -1414,9 +1415,9 @@ publish_accept_json_test() ->
publish_fail_test() -> publish_fail_test() ->
Msg = msg(<<"myqueue">>, [], <<"Hello world">>), Msg = msg(<<"myqueue">>, [], <<"Hello world">>),
http_put("/queues/%2f/myqueue", [], ?NO_CONTENT), http_put("/queues/%2f/myqueue", [], [?CREATED, ?NO_CONTENT]),
http_put("/users/myuser", [{password, <<"password">>}, http_put("/users/myuser", [{password, <<"password">>},
{tags, <<"management">>}], ?NO_CONTENT), {tags, <<"management">>}], [?CREATED, ?NO_CONTENT]),
http_post("/exchanges/%2f/amq.default/publish", Msg, "myuser", "password", http_post("/exchanges/%2f/amq.default/publish", Msg, "myuser", "password",
?NOT_AUTHORISED), ?NOT_AUTHORISED),
Msg2 = [{exchange, <<"">>}, Msg2 = [{exchange, <<"">>},
@ -1447,7 +1448,7 @@ publish_base64_test() ->
Msg = msg(<<"myqueue">>, [], <<"YWJjZA==">>, <<"base64">>), Msg = msg(<<"myqueue">>, [], <<"YWJjZA==">>, <<"base64">>),
BadMsg1 = msg(<<"myqueue">>, [], <<"flibble">>, <<"base64">>), BadMsg1 = msg(<<"myqueue">>, [], <<"flibble">>, <<"base64">>),
BadMsg2 = msg(<<"myqueue">>, [], <<"YWJjZA==">>, <<"base99">>), BadMsg2 = msg(<<"myqueue">>, [], <<"YWJjZA==">>, <<"base99">>),
http_put("/queues/%2f/myqueue", [], ?NO_CONTENT), http_put("/queues/%2f/myqueue", [], [?CREATED, ?NO_CONTENT]),
http_post("/exchanges/%2f/amq.default/publish", Msg, ?OK), http_post("/exchanges/%2f/amq.default/publish", Msg, ?OK),
http_post("/exchanges/%2f/amq.default/publish", BadMsg1, ?BAD_REQUEST), http_post("/exchanges/%2f/amq.default/publish", BadMsg1, ?BAD_REQUEST),
http_post("/exchanges/%2f/amq.default/publish", BadMsg2, ?BAD_REQUEST), http_post("/exchanges/%2f/amq.default/publish", BadMsg2, ?BAD_REQUEST),
@ -1464,9 +1465,9 @@ publish_unrouted_test() ->
http_post("/exchanges/%2f/amq.default/publish", Msg, ?OK)). http_post("/exchanges/%2f/amq.default/publish", Msg, ?OK)).
if_empty_unused_test() -> if_empty_unused_test() ->
http_put("/exchanges/%2f/test", [], ?NO_CONTENT), http_put("/exchanges/%2f/test", [], [?CREATED, ?NO_CONTENT]),
http_put("/queues/%2f/test", [], ?NO_CONTENT), http_put("/queues/%2f/test", [], [?CREATED, ?NO_CONTENT]),
http_post("/bindings/%2f/e/test/q/test", [], ?CREATED), http_post("/bindings/%2f/e/test/q/test", [], [?CREATED, ?NO_CONTENT]),
http_post("/exchanges/%2f/amq.default/publish", http_post("/exchanges/%2f/amq.default/publish",
msg(<<"test">>, [], <<"Hello world">>), ?OK), msg(<<"test">>, [], <<"Hello world">>), ?OK),
http_delete("/queues/%2f/test?if-empty=true", ?BAD_REQUEST), http_delete("/queues/%2f/test?if-empty=true", ?BAD_REQUEST),
@ -1486,8 +1487,8 @@ if_empty_unused_test() ->
parameters_test() -> parameters_test() ->
rabbit_runtime_parameters_test:register(), rabbit_runtime_parameters_test:register(),
http_put("/parameters/test/%2f/good", [{value, <<"ignore">>}], ?NO_CONTENT), http_put("/parameters/test/%2f/good", [{value, <<"ignore">>}], [?CREATED, ?NO_CONTENT]),
http_put("/parameters/test/%2f/maybe", [{value, <<"good">>}], ?NO_CONTENT), http_put("/parameters/test/%2f/maybe", [{value, <<"good">>}], [?CREATED, ?NO_CONTENT]),
http_put("/parameters/test/%2f/maybe", [{value, <<"bad">>}], ?BAD_REQUEST), http_put("/parameters/test/%2f/maybe", [{value, <<"bad">>}], ?BAD_REQUEST),
http_put("/parameters/test/%2f/bad", [{value, <<"good">>}], ?BAD_REQUEST), http_put("/parameters/test/%2f/bad", [{value, <<"good">>}], ?BAD_REQUEST),
http_put("/parameters/test/um/good", [{value, <<"ignore">>}], ?NOT_FOUND), http_put("/parameters/test/um/good", [{value, <<"ignore">>}], ?NOT_FOUND),
@ -1536,11 +1537,11 @@ policy_test() ->
http_put( http_put(
"/policies/%2f/policy_pos", "/policies/%2f/policy_pos",
lists:keydelete(key, 1, PolicyPos), lists:keydelete(key, 1, PolicyPos),
?NO_CONTENT), [?CREATED, ?NO_CONTENT]),
http_put( http_put(
"/policies/%2f/policy_even", "/policies/%2f/policy_even",
lists:keydelete(key, 1, PolicyEven), lists:keydelete(key, 1, PolicyEven),
?NO_CONTENT), [?CREATED, ?NO_CONTENT]),
assert_item(PolicyPos, http_get("/policies/%2f/policy_pos", ?OK)), assert_item(PolicyPos, http_get("/policies/%2f/policy_pos", ?OK)),
assert_item(PolicyEven, http_get("/policies/%2f/policy_even", ?OK)), assert_item(PolicyEven, http_get("/policies/%2f/policy_even", ?OK)),
List = [PolicyPos, PolicyEven], List = [PolicyPos, PolicyEven],
@ -1558,31 +1559,32 @@ policy_permissions_test() ->
rabbit_runtime_parameters_test:register(), rabbit_runtime_parameters_test:register(),
http_put("/users/admin", [{password, <<"admin">>}, http_put("/users/admin", [{password, <<"admin">>},
{tags, <<"administrator">>}], ?NO_CONTENT), {tags, <<"administrator">>}], [?CREATED, ?NO_CONTENT]),
http_put("/users/mon", [{password, <<"monitor">>}, http_put("/users/mon", [{password, <<"monitor">>},
{tags, <<"monitoring">>}], ?NO_CONTENT), {tags, <<"monitoring">>}], [?CREATED, ?NO_CONTENT]),
http_put("/users/policy", [{password, <<"policy">>}, http_put("/users/policy", [{password, <<"policy">>},
{tags, <<"policymaker">>}], ?NO_CONTENT), {tags, <<"policymaker">>}], [?CREATED, ?NO_CONTENT]),
http_put("/users/mgmt", [{password, <<"mgmt">>}, http_put("/users/mgmt", [{password, <<"mgmt">>},
{tags, <<"management">>}], ?NO_CONTENT), {tags, <<"management">>}], [?CREATED, ?NO_CONTENT]),
Perms = [{configure, <<".*">>}, Perms = [{configure, <<".*">>},
{write, <<".*">>}, {write, <<".*">>},
{read, <<".*">>}], {read, <<".*">>}],
http_put("/vhosts/v", none, ?NO_CONTENT), http_put("/vhosts/v", none, [?CREATED, ?NO_CONTENT]),
http_put("/permissions/v/admin", Perms, ?NO_CONTENT), http_put("/permissions/v/admin", Perms, [?CREATED, ?NO_CONTENT]),
http_put("/permissions/v/mon", Perms, ?NO_CONTENT), http_put("/permissions/v/mon", Perms, [?CREATED, ?NO_CONTENT]),
http_put("/permissions/v/policy", Perms, ?NO_CONTENT), http_put("/permissions/v/policy", Perms, [?CREATED, ?NO_CONTENT]),
http_put("/permissions/v/mgmt", Perms, ?NO_CONTENT), http_put("/permissions/v/mgmt", Perms, [?CREATED, ?NO_CONTENT]),
Policy = [{pattern, <<".*">>}, Policy = [{pattern, <<".*">>},
{definition, [{<<"ha-mode">>, <<"all">>}]}], {definition, [{<<"ha-mode">>, <<"all">>}]}],
Param = [{value, <<"">>}], Param = [{value, <<"">>}],
http_put("/policies/%2f/HA", Policy, ?NO_CONTENT), http_put("/policies/%2f/HA", Policy, [?CREATED, ?NO_CONTENT]),
http_put("/parameters/test/%2f/good", Param, ?NO_CONTENT), http_put("/parameters/test/%2f/good", Param, [?CREATED, ?NO_CONTENT]),
Pos = fun (U) -> Pos = fun (U) ->
http_put("/policies/v/HA", Policy, U, U, ?NO_CONTENT), Expected = case U of "admin" -> [?CREATED, ?NO_CONTENT]; _ -> ?NO_CONTENT end,
http_put("/policies/v/HA", Policy, U, U, Expected),
http_put( http_put(
"/parameters/test/v/good", Param, U, U, ?NO_CONTENT), "/parameters/test/v/good", Param, U, U, ?NO_CONTENT),
1 = length(http_get("/policies", U, U, ?OK)), 1 = length(http_get("/policies", U, U, ?OK)),
@ -1621,7 +1623,7 @@ policy_permissions_test() ->
[AlwaysNeg(U) || U <- ["mon", "mgmt", "admin", "policy"]], [AlwaysNeg(U) || U <- ["mon", "mgmt", "admin", "policy"]],
%% This one is deliberately different between admin and policymaker. %% This one is deliberately different between admin and policymaker.
http_put("/parameters/test/v/admin", Param, "admin", "admin", ?NO_CONTENT), http_put("/parameters/test/v/admin", Param, "admin", "admin", [?CREATED, ?NO_CONTENT]),
http_put("/parameters/test/v/admin", Param, "policy", "policy", http_put("/parameters/test/v/admin", Param, "policy", "policy",
?BAD_REQUEST), ?BAD_REQUEST),
@ -1733,6 +1735,14 @@ http_delete(Path, User, Pass, CodeExp) ->
assert_code(CodeExp, CodeAct, "DELETE", Path, ResBody), assert_code(CodeExp, CodeAct, "DELETE", Path, ResBody),
decode(CodeExp, Headers, ResBody). decode(CodeExp, Headers, ResBody).
assert_code(CodesExpected, CodeAct, Type, Path, Body) when is_list(CodesExpected) ->
case lists:member(CodeAct, CodesExpected) of
true ->
ok;
false ->
throw({expected, CodesExpected, got, CodeAct, type, Type,
path, Path, body, Body})
end;
assert_code(CodeExp, CodeAct, Type, Path, Body) -> assert_code(CodeExp, CodeAct, Type, Path, Body) ->
case CodeExp of case CodeExp of
CodeAct -> ok; CodeAct -> ok;