Note that "in memory" and "persistent" are not mutually exclusive; persistent messages can be in memory as well as on disc, and transient messages can be paged out if memory is tight. Non-durable queues will consider all messages to be transient.
',
+ 'queue-messages-stream':
+ '
Approximate message counts.
Note that streams store some entries that are not user messages such as offset tracking data which is included in this count. Thus this value will never be completely correct.
',
+
'queue-dead-lettered':
'Applies to messages dead-lettered with dead-letter-strategy at-least-once.',
+ 'queue-delivery-limit':
+ 'The number of times a message can be returned to this queue before it is dead-lettered (if configured) or dropped.',
+
'queue-message-body-bytes':
'
The sum total of the sizes of the message bodies in this queue. This only counts message bodies; it does not include message properties (including headers) or metadata used by the queue.
Note that "in memory" and "persistent" are not mutually exclusive; persistent messages can be in memory as well as on disc, and transient messages can be paged out if memory is tight. Non-durable queues will consider all messages to be transient.
If a message is routed to multiple queues on publication, its body will be stored only once (in memory and on disk) and shared between queues. The value shown here does not take account of this effect.
',
@@ -442,10 +446,6 @@ var HELP = {
Rate at which empty queues are hit in response to basic.get.
\
Return
\
Rate at which basic.return is sent to publishers for unroutable messages published with the \'mandatory\' flag set.
\
-
Disk read
\
-
Rate at which queues read messages from disk.
\
-
Disk write
\
-
Rate at which queues write messages to disk.
\
\
\
Note that the last two items originate in queues rather than \
@@ -586,7 +586,10 @@ var HELP = {
Rate at which queues are created. Declaring a queue that already exists counts for a "Declared" event, but not for a "Created" event.
\
Deleted
\
Rate at which queues are deleted.
\
- '
+ ',
+
+ 'container-id':
+ 'Name of the client application as sent from client to RabbitMQ in the "container-id" field of the AMQP 1.0 open frame.'
};
diff --git a/deps/rabbitmq_management/priv/www/js/tmpl/connection.ejs b/deps/rabbitmq_management/priv/www/js/tmpl/connection.ejs
index f834b02fb5e0..07ee18ae5043 100644
--- a/deps/rabbitmq_management/priv/www/js/tmpl/connection.ejs
+++ b/deps/rabbitmq_management/priv/www/js/tmpl/connection.ejs
@@ -17,11 +17,20 @@
<% if (connection.client_properties.connection_name) { %>
@@ -30,6 +30,9 @@
<%
for (var i = 0; i < feature_flags.length; i++) {
var feature_flag = feature_flags[i];
+ if (feature_flag.stability == "experimental") {
+ continue;
+ }
var state_color = "grey";
if (feature_flag.state == "enabled") {
state_color = "green";
@@ -76,3 +79,76 @@
+
+
+
+
+
Opt-in Feature Flags
+
+<% if (feature_flags.length > 0) { %>
+
+These feature flags opt-in.
+
+These flags can be enabled in production deployments after an appropriate amount of testing in non-production environments.
+
+
+
+
+
<%= fmt_sort('Name', 'name') %>
+
<%= fmt_sort('State', 'state') %>
+
Description
+
+
+
+ <%
+ for (var i = 0; i < feature_flags.length; i++) {
+ var feature_flag = feature_flags[i];
+ if (feature_flag.stability != "experimental") {
+ continue;
+ }
+ var state_color = "grey";
+ if (feature_flag.state == "enabled") {
+ state_color = "green";
+ } else if (feature_flag.state == "disabled") {
+ state_color = "yellow";
+ } else if (feature_flag.state == "unsupported") {
+ state_color = "red";
+ }
+ %>
+
<% } %>
diff --git a/deps/rabbitmq_stream_management/test/http_SUITE_data/pom.xml b/deps/rabbitmq_stream_management/test/http_SUITE_data/pom.xml
index 5796f0c6f74c..b67c00419339 100644
--- a/deps/rabbitmq_stream_management/test/http_SUITE_data/pom.xml
+++ b/deps/rabbitmq_stream_management/test/http_SUITE_data/pom.xml
@@ -27,11 +27,11 @@
[0.12.0-SNAPSHOT,)
- 5.10.3
+ 5.11.13.26.31.2.133.12.1
- 3.3.1
+ 3.5.02.43.01.18.14.12.0
diff --git a/deps/rabbitmq_trust_store/Makefile b/deps/rabbitmq_trust_store/Makefile
index 77440b74080d..58b73990da58 100644
--- a/deps/rabbitmq_trust_store/Makefile
+++ b/deps/rabbitmq_trust_store/Makefile
@@ -10,7 +10,7 @@ define PROJECT_ENV
endef
DEPS = rabbit_common rabbit
-LOCAL_DEPS += ssl crypto public_key inets
+LOCAL_DEPS = ssl crypto public_key inets
## We need the Cowboy's test utilities
TEST_DEPS = rabbitmq_ct_helpers rabbitmq_ct_client_helpers amqp_client ct_helper trust_store_http
dep_ct_helper = git https://github.com/extend/ct_helper.git master
diff --git a/deps/rabbitmq_trust_store/priv/schema/rabbitmq_trust_store.schema b/deps/rabbitmq_trust_store/priv/schema/rabbitmq_trust_store.schema
index d3d33c251ccc..d9cc4a2afa51 100644
--- a/deps/rabbitmq_trust_store/priv/schema/rabbitmq_trust_store.schema
+++ b/deps/rabbitmq_trust_store/priv/schema/rabbitmq_trust_store.schema
@@ -124,7 +124,7 @@ end}.
[{datatype, {enum, [true, false]}}]}.
{mapping, "trust_store.ssl_options.password", "rabbitmq_trust_store.ssl_options.password",
- [{datatype, string}]}.
+ [{datatype, [tagged_binary, binary]}]}.
{mapping, "trust_store.ssl_options.psk_identity", "rabbitmq_trust_store.ssl_options.psk_identity",
[{datatype, string}]}.
diff --git a/deps/rabbitmq_trust_store/src/rabbit_trust_store_http_provider.erl b/deps/rabbitmq_trust_store/src/rabbit_trust_store_http_provider.erl
index 5e0aee535451..a5f0e59dbaf8 100644
--- a/deps/rabbitmq_trust_store/src/rabbit_trust_store_http_provider.erl
+++ b/deps/rabbitmq_trust_store/src/rabbit_trust_store_http_provider.erl
@@ -65,8 +65,8 @@ join_url(BaseUrl, CertPath) ->
string:strip(rabbit_data_coercion:to_list(CertPath), left, $/).
init(Config) ->
- inets:start(httpc, [{profile, ?PROFILE}]),
- _ = application:ensure_all_started(ssl),
+ _ = inets:start(httpc, [{profile, ?PROFILE}]),
+ {ok, _} = application:ensure_all_started(ssl),
Options = proplists:get_value(proxy_options, Config, []),
httpc:set_options(Options, ?PROFILE).
diff --git a/deps/rabbitmq_trust_store/test/config_schema_SUITE_data/rabbitmq_trust_store.snippets b/deps/rabbitmq_trust_store/test/config_schema_SUITE_data/rabbitmq_trust_store.snippets
index d45f48ecef45..b8d7f0457e3d 100644
--- a/deps/rabbitmq_trust_store/test/config_schema_SUITE_data/rabbitmq_trust_store.snippets
+++ b/deps/rabbitmq_trust_store/test/config_schema_SUITE_data/rabbitmq_trust_store.snippets
@@ -24,5 +24,5 @@
{url,"https://example.com"},
{ssl_options,
[{certfile,"test/config_schema_SUITE_data/certs/cert.pem"},
- {password,"i_am_password"}]}]}],
+ {password,<<"i_am_password">>}]}]}],
[rabbitmq_trust_store]}].
diff --git a/deps/rabbitmq_web_mqtt/BUILD.bazel b/deps/rabbitmq_web_mqtt/BUILD.bazel
index f9561e14ffaf..49b62e9f1aa8 100644
--- a/deps/rabbitmq_web_mqtt/BUILD.bazel
+++ b/deps/rabbitmq_web_mqtt/BUILD.bazel
@@ -103,11 +103,11 @@ eunit(
broker_for_integration_suites()
rabbitmq_integration_suite(
- name = "config_schema_SUITE",
+ name = "web_mqtt_config_schema_SUITE",
)
rabbitmq_integration_suite(
- name = "command_SUITE",
+ name = "web_mqtt_command_SUITE",
additional_beam = [
"test/rabbit_web_mqtt_test_util.beam",
],
@@ -117,7 +117,7 @@ rabbitmq_integration_suite(
)
rabbitmq_integration_suite(
- name = "proxy_protocol_SUITE",
+ name = "web_mqtt_proxy_protocol_SUITE",
additional_beam = [
"test/src/rabbit_ws_test_util.beam",
"test/src/rfc6455_client.beam",
@@ -125,7 +125,23 @@ rabbitmq_integration_suite(
)
rabbitmq_integration_suite(
- name = "system_SUITE",
+ name = "web_mqtt_shared_SUITE",
+ additional_beam = [
+ "test/src/rabbit_ws_test_util.beam",
+ "test/src/rfc6455_client.beam",
+ ],
+)
+
+rabbitmq_integration_suite(
+ name = "web_mqtt_system_SUITE",
+ additional_beam = [
+ "test/src/rabbit_ws_test_util.beam",
+ "test/src/rfc6455_client.beam",
+ ],
+)
+
+rabbitmq_integration_suite(
+ name = "web_mqtt_v5_SUITE",
additional_beam = [
"test/src/rabbit_ws_test_util.beam",
"test/src/rfc6455_client.beam",
diff --git a/deps/rabbitmq_web_mqtt/Makefile b/deps/rabbitmq_web_mqtt/Makefile
index 9919e7cb82cd..812d467f1911 100644
--- a/deps/rabbitmq_web_mqtt/Makefile
+++ b/deps/rabbitmq_web_mqtt/Makefile
@@ -19,7 +19,7 @@ export BUILD_WITHOUT_QUIC
LOCAL_DEPS = ssl
DEPS = rabbit_common rabbit cowboy rabbitmq_mqtt
-TEST_DEPS = emqtt rabbitmq_ct_helpers rabbitmq_ct_client_helpers rabbitmq_management
+TEST_DEPS = emqtt rabbitmq_ct_helpers rabbitmq_ct_client_helpers rabbitmq_management rabbitmq_stomp rabbitmq_consistent_hash_exchange
PLT_APPS += rabbitmqctl elixir cowlib
@@ -34,3 +34,9 @@ DEP_PLUGINS = rabbit_common/mk/rabbitmq-plugin.mk
include ../../rabbitmq-components.mk
include ../../erlang.mk
+
+# We are using mqtt_shared_SUITE from rabbitmq_mqtt.
+CT_OPTS += -pa ../rabbitmq_mqtt/test/
+
+test-build::
+ $(verbose) $(MAKE) -C ../rabbitmq_mqtt test-dir
diff --git a/deps/rabbitmq_web_mqtt/app.bzl b/deps/rabbitmq_web_mqtt/app.bzl
index 17ab4ecacb84..d7a5de02fdde 100644
--- a/deps/rabbitmq_web_mqtt/app.bzl
+++ b/deps/rabbitmq_web_mqtt/app.bzl
@@ -93,60 +93,76 @@ def all_srcs(name = "all_srcs"):
def test_suite_beam_files(name = "test_suite_beam_files"):
erlang_bytecode(
- name = "config_schema_SUITE_beam_files",
+ name = "test_src_rabbit_ws_test_util_beam",
testonly = True,
- srcs = ["test/config_schema_SUITE.erl"],
- outs = ["test/config_schema_SUITE.beam"],
+ srcs = ["test/src/rabbit_ws_test_util.erl"],
+ outs = ["test/src/rabbit_ws_test_util.beam"],
app_name = "rabbitmq_web_mqtt",
erlc_opts = "//:test_erlc_opts",
)
erlang_bytecode(
- name = "proxy_protocol_SUITE_beam_files",
+ name = "test_src_rfc6455_client_beam",
testonly = True,
- srcs = ["test/proxy_protocol_SUITE.erl"],
- outs = ["test/proxy_protocol_SUITE.beam"],
+ srcs = ["test/src/rfc6455_client.erl"],
+ outs = ["test/src/rfc6455_client.beam"],
app_name = "rabbitmq_web_mqtt",
erlc_opts = "//:test_erlc_opts",
)
+
erlang_bytecode(
- name = "system_SUITE_beam_files",
+ name = "test_rabbit_web_mqtt_test_util_beam",
testonly = True,
- srcs = ["test/system_SUITE.erl"],
- outs = ["test/system_SUITE.beam"],
+ srcs = ["test/rabbit_web_mqtt_test_util.erl"],
+ outs = ["test/rabbit_web_mqtt_test_util.beam"],
app_name = "rabbitmq_web_mqtt",
erlc_opts = "//:test_erlc_opts",
)
-
erlang_bytecode(
- name = "test_src_rabbit_ws_test_util_beam",
+ name = "web_mqtt_command_SUITE_beam_files",
testonly = True,
- srcs = ["test/src/rabbit_ws_test_util.erl"],
- outs = ["test/src/rabbit_ws_test_util.beam"],
+ srcs = ["test/web_mqtt_command_SUITE.erl"],
+ outs = ["test/web_mqtt_command_SUITE.beam"],
app_name = "rabbitmq_web_mqtt",
erlc_opts = "//:test_erlc_opts",
+ deps = ["//deps/amqp_client:erlang_app", "//deps/rabbitmq_mqtt:erlang_app"],
)
erlang_bytecode(
- name = "test_src_rfc6455_client_beam",
+ name = "web_mqtt_config_schema_SUITE_beam_files",
testonly = True,
- srcs = ["test/src/rfc6455_client.erl"],
- outs = ["test/src/rfc6455_client.beam"],
+ srcs = ["test/web_mqtt_config_schema_SUITE.erl"],
+ outs = ["test/web_mqtt_config_schema_SUITE.beam"],
app_name = "rabbitmq_web_mqtt",
erlc_opts = "//:test_erlc_opts",
)
erlang_bytecode(
- name = "command_SUITE_beam_files",
+ name = "web_mqtt_proxy_protocol_SUITE_beam_files",
testonly = True,
- srcs = ["test/command_SUITE.erl"],
- outs = ["test/command_SUITE.beam"],
+ srcs = ["test/web_mqtt_proxy_protocol_SUITE.erl"],
+ outs = ["test/web_mqtt_proxy_protocol_SUITE.beam"],
app_name = "rabbitmq_web_mqtt",
erlc_opts = "//:test_erlc_opts",
- deps = ["//deps/amqp_client:erlang_app", "//deps/rabbitmq_mqtt:erlang_app"],
)
erlang_bytecode(
- name = "test_rabbit_web_mqtt_test_util_beam",
+ name = "web_mqtt_shared_SUITE_beam_files",
testonly = True,
- srcs = ["test/rabbit_web_mqtt_test_util.erl"],
- outs = ["test/rabbit_web_mqtt_test_util.beam"],
+ srcs = ["test/web_mqtt_shared_SUITE.erl"],
+ outs = ["test/web_mqtt_shared_SUITE.beam"],
+ app_name = "rabbitmq_web_mqtt",
+ erlc_opts = "//:test_erlc_opts",
+ )
+ erlang_bytecode(
+ name = "web_mqtt_system_SUITE_beam_files",
+ testonly = True,
+ srcs = ["test/web_mqtt_system_SUITE.erl"],
+ outs = ["test/web_mqtt_system_SUITE.beam"],
+ app_name = "rabbitmq_web_mqtt",
+ erlc_opts = "//:test_erlc_opts",
+ )
+ erlang_bytecode(
+ name = "web_mqtt_v5_SUITE_beam_files",
+ testonly = True,
+ srcs = ["test/web_mqtt_v5_SUITE.erl"],
+ outs = ["test/web_mqtt_v5_SUITE.beam"],
app_name = "rabbitmq_web_mqtt",
erlc_opts = "//:test_erlc_opts",
)
diff --git a/deps/rabbitmq_web_mqtt/priv/schema/rabbitmq_web_mqtt.schema b/deps/rabbitmq_web_mqtt/priv/schema/rabbitmq_web_mqtt.schema
index 91d6b1878239..e4afd579d4b7 100644
--- a/deps/rabbitmq_web_mqtt/priv/schema/rabbitmq_web_mqtt.schema
+++ b/deps/rabbitmq_web_mqtt/priv/schema/rabbitmq_web_mqtt.schema
@@ -56,7 +56,7 @@
{mapping, "web_mqtt.ssl.cacertfile", "rabbitmq_web_mqtt.ssl_config.cacertfile",
[{datatype, string}, {validators, ["file_accessible"]}]}.
{mapping, "web_mqtt.ssl.password", "rabbitmq_web_mqtt.ssl_config.password",
- [{datatype, string}]}.
+ [{datatype, [tagged_binary, binary]}]}.
{translation,
"rabbitmq_web_mqtt.ssl_config",
diff --git a/deps/rabbitmq_web_mqtt/src/rabbit_web_mqtt_handler.erl b/deps/rabbitmq_web_mqtt/src/rabbit_web_mqtt_handler.erl
index 176a29e86842..67e99400b500 100644
--- a/deps/rabbitmq_web_mqtt/src/rabbit_web_mqtt_handler.erl
+++ b/deps/rabbitmq_web_mqtt/src/rabbit_web_mqtt_handler.erl
@@ -176,8 +176,9 @@ websocket_info({'$gen_cast', {duplicate_id, SendWill}},
rabbit_mqtt_processor:send_disconnect(?RC_SESSION_TAKEN_OVER, ProcState),
defer_close(?CLOSE_NORMAL, SendWill),
{[], State};
-websocket_info({'$gen_cast', {close_connection, Reason}}, State = #state{proc_state = ProcState,
- conn_name = ConnName}) ->
+websocket_info({'$gen_cast', {close_connection, Reason}},
+ State = #state{proc_state = ProcState,
+ conn_name = ConnName}) ->
?LOG_WARNING("Web MQTT disconnecting client with ID '~s' (~p), reason: ~s",
[rabbit_mqtt_processor:info(client_id, ProcState), ConnName, Reason]),
case Reason of
@@ -215,6 +216,14 @@ websocket_info({keepalive, Req}, State = #state{proc_state = ProcState,
[ConnName, Reason]),
stop(State)
end;
+websocket_info(credential_expired,
+ State = #state{proc_state = ProcState,
+ conn_name = ConnName}) ->
+ ?LOG_WARNING("Web MQTT disconnecting client with ID '~s' (~p) because credential expired",
+ [rabbit_mqtt_processor:info(client_id, ProcState), ConnName]),
+ rabbit_mqtt_processor:send_disconnect(?RC_MAXIMUM_CONNECT_TIME, ProcState),
+ defer_close(?CLOSE_NORMAL),
+ {[], State};
websocket_info(emit_stats, State) ->
{[], emit_stats(State), hibernate};
websocket_info({{'DOWN', _QName}, _MRef, process, _Pid, _Reason} = Evt,
diff --git a/deps/rabbitmq_web_mqtt/test/command_SUITE.erl b/deps/rabbitmq_web_mqtt/test/web_mqtt_command_SUITE.erl
similarity index 93%
rename from deps/rabbitmq_web_mqtt/test/command_SUITE.erl
rename to deps/rabbitmq_web_mqtt/test/web_mqtt_command_SUITE.erl
index c526d8c4f217..04d50f7fb582 100644
--- a/deps/rabbitmq_web_mqtt/test/command_SUITE.erl
+++ b/deps/rabbitmq_web_mqtt/test/web_mqtt_command_SUITE.erl
@@ -5,7 +5,7 @@
%% Copyright (c) 2007-2024 Broadcom. All Rights Reserved. The term “Broadcom” refers to Broadcom Inc. and/or its subsidiaries. All rights reserved.
--module(command_SUITE).
+-module(web_mqtt_command_SUITE).
-compile([export_all, nowarn_export_all]).
-include_lib("eunit/include/eunit.hrl").
@@ -16,6 +16,7 @@
[connect/3, connect/4]).
-define(COMMAND, 'Elixir.RabbitMQ.CLI.Ctl.Commands.ListWebMqttConnectionsCommand').
+-define(MQTT_COMMAND, 'Elixir.RabbitMQ.CLI.Ctl.Commands.ListMqttConnectionsCommand').
all() ->
[
@@ -93,12 +94,16 @@ run(BaseConfig) ->
[] = 'Elixir.Enum':to_list(?COMMAND:run([<<"client_id">>], Opts)),
%% Open a WebMQTT connection
-
C2 = connect(<<"simpleWebMqttClient">>, Config, [{ack_timeout, 1}]),
timer:sleep(200),
+ %% WebMQTT CLI should list only WebMQTT connection.
[[{client_id, <<"simpleWebMqttClient">>}]] =
- 'Elixir.Enum':to_list(?COMMAND:run([<<"client_id">>], Opts)),
+ 'Elixir.Enum':to_list(?COMMAND:run([<<"client_id">>], Opts)),
+
+ %% MQTT CLI should list only MQTT connection.
+ [[{client_id, <<"simpleMqttClient">>}]] =
+ 'Elixir.Enum':to_list(?MQTT_COMMAND:run([<<"client_id">>], Opts)),
C3 = connect(<<"simpleWebMqttClient1">>, Config, [{ack_timeout, 1}]),
timer:sleep(200),
diff --git a/deps/rabbitmq_web_mqtt/test/config_schema_SUITE.erl b/deps/rabbitmq_web_mqtt/test/web_mqtt_config_schema_SUITE.erl
similarity index 97%
rename from deps/rabbitmq_web_mqtt/test/config_schema_SUITE.erl
rename to deps/rabbitmq_web_mqtt/test/web_mqtt_config_schema_SUITE.erl
index 694d7ea5a25a..7b280eccfc1b 100644
--- a/deps/rabbitmq_web_mqtt/test/config_schema_SUITE.erl
+++ b/deps/rabbitmq_web_mqtt/test/web_mqtt_config_schema_SUITE.erl
@@ -5,7 +5,7 @@
%% Copyright (c) 2007-2024 Broadcom. All Rights Reserved. The term “Broadcom” refers to Broadcom Inc. and/or its subsidiaries. All rights reserved.
%%
--module(config_schema_SUITE).
+-module(web_mqtt_config_schema_SUITE).
-compile(export_all).
diff --git a/deps/rabbitmq_web_mqtt/test/web_mqtt_config_schema_SUITE_data/certs/cacert.pem b/deps/rabbitmq_web_mqtt/test/web_mqtt_config_schema_SUITE_data/certs/cacert.pem
new file mode 100644
index 000000000000..eaf6b67806ce
--- /dev/null
+++ b/deps/rabbitmq_web_mqtt/test/web_mqtt_config_schema_SUITE_data/certs/cacert.pem
@@ -0,0 +1 @@
+I'm not a certificate
diff --git a/deps/rabbitmq_web_mqtt/test/web_mqtt_config_schema_SUITE_data/certs/cert.pem b/deps/rabbitmq_web_mqtt/test/web_mqtt_config_schema_SUITE_data/certs/cert.pem
new file mode 100644
index 000000000000..eaf6b67806ce
--- /dev/null
+++ b/deps/rabbitmq_web_mqtt/test/web_mqtt_config_schema_SUITE_data/certs/cert.pem
@@ -0,0 +1 @@
+I'm not a certificate
diff --git a/deps/rabbitmq_web_mqtt/test/web_mqtt_config_schema_SUITE_data/certs/key.pem b/deps/rabbitmq_web_mqtt/test/web_mqtt_config_schema_SUITE_data/certs/key.pem
new file mode 100644
index 000000000000..eaf6b67806ce
--- /dev/null
+++ b/deps/rabbitmq_web_mqtt/test/web_mqtt_config_schema_SUITE_data/certs/key.pem
@@ -0,0 +1 @@
+I'm not a certificate
diff --git a/deps/rabbitmq_web_mqtt/test/config_schema_SUITE_data/rabbitmq_web_mqtt.snippets b/deps/rabbitmq_web_mqtt/test/web_mqtt_config_schema_SUITE_data/rabbitmq_web_mqtt.snippets
similarity index 78%
rename from deps/rabbitmq_web_mqtt/test/config_schema_SUITE_data/rabbitmq_web_mqtt.snippets
rename to deps/rabbitmq_web_mqtt/test/web_mqtt_config_schema_SUITE_data/rabbitmq_web_mqtt.snippets
index f8ef2916f6ef..4d592eee3124 100644
--- a/deps/rabbitmq_web_mqtt/test/config_schema_SUITE_data/rabbitmq_web_mqtt.snippets
+++ b/deps/rabbitmq_web_mqtt/test/web_mqtt_config_schema_SUITE_data/rabbitmq_web_mqtt.snippets
@@ -73,28 +73,28 @@
{ssl_with_listener,
"web_mqtt.ssl.listener = 127.0.0.2:15671
web_mqtt.ssl.backlog = 1024
- web_mqtt.ssl.certfile = test/config_schema_SUITE_data/certs/cert.pem
- web_mqtt.ssl.keyfile = test/config_schema_SUITE_data/certs/key.pem
- web_mqtt.ssl.cacertfile = test/config_schema_SUITE_data/certs/cacert.pem
+ web_mqtt.ssl.certfile = test/web_mqtt_config_schema_SUITE_data/certs/cert.pem
+ web_mqtt.ssl.keyfile = test/web_mqtt_config_schema_SUITE_data/certs/key.pem
+ web_mqtt.ssl.cacertfile = test/web_mqtt_config_schema_SUITE_data/certs/cacert.pem
web_mqtt.ssl.password = changeme",
[{rabbitmq_web_mqtt,
[{ssl_config,
[{ip,"127.0.0.2"},
{port,15671},
{backlog,1024},
- {certfile,"test/config_schema_SUITE_data/certs/cert.pem"},
- {keyfile,"test/config_schema_SUITE_data/certs/key.pem"},
- {cacertfile,"test/config_schema_SUITE_data/certs/cacert.pem"},
- {password,"changeme"}]}]}],
+ {certfile,"test/web_mqtt_config_schema_SUITE_data/certs/cert.pem"},
+ {keyfile,"test/web_mqtt_config_schema_SUITE_data/certs/key.pem"},
+ {cacertfile,"test/web_mqtt_config_schema_SUITE_data/certs/cacert.pem"},
+ {password,<<"changeme">>}]}]}],
[rabbitmq_web_mqtt]},
{ssl,
"web_mqtt.ssl.ip = 127.0.0.2
web_mqtt.ssl.port = 15671
web_mqtt.ssl.backlog = 1024
- web_mqtt.ssl.certfile = test/config_schema_SUITE_data/certs/cert.pem
- web_mqtt.ssl.keyfile = test/config_schema_SUITE_data/certs/key.pem
- web_mqtt.ssl.cacertfile = test/config_schema_SUITE_data/certs/cacert.pem
+ web_mqtt.ssl.certfile = test/web_mqtt_config_schema_SUITE_data/certs/cert.pem
+ web_mqtt.ssl.keyfile = test/web_mqtt_config_schema_SUITE_data/certs/key.pem
+ web_mqtt.ssl.cacertfile = test/web_mqtt_config_schema_SUITE_data/certs/cacert.pem
web_mqtt.ssl.password = changeme
web_mqtt.ssl.versions.tls1_2 = tlsv1.2
@@ -105,10 +105,10 @@
{ip,"127.0.0.2"},
{port,15671},
{backlog,1024},
- {certfile,"test/config_schema_SUITE_data/certs/cert.pem"},
- {keyfile,"test/config_schema_SUITE_data/certs/key.pem"},
- {cacertfile,"test/config_schema_SUITE_data/certs/cacert.pem"},
- {password,"changeme"},
+ {certfile,"test/web_mqtt_config_schema_SUITE_data/certs/cert.pem"},
+ {keyfile,"test/web_mqtt_config_schema_SUITE_data/certs/key.pem"},
+ {cacertfile,"test/web_mqtt_config_schema_SUITE_data/certs/cacert.pem"},
+ {password,<<"changeme">>},
{versions,['tlsv1.2','tlsv1.1']}
]}]}],
@@ -117,9 +117,9 @@
{ssl_ciphers,
"web_mqtt.ssl.port = 15671
web_mqtt.ssl.backlog = 1024
- web_mqtt.ssl.certfile = test/config_schema_SUITE_data/certs/cert.pem
- web_mqtt.ssl.keyfile = test/config_schema_SUITE_data/certs/key.pem
- web_mqtt.ssl.cacertfile = test/config_schema_SUITE_data/certs/cacert.pem
+ web_mqtt.ssl.certfile = test/web_mqtt_config_schema_SUITE_data/certs/cert.pem
+ web_mqtt.ssl.keyfile = test/web_mqtt_config_schema_SUITE_data/certs/key.pem
+ web_mqtt.ssl.cacertfile = test/web_mqtt_config_schema_SUITE_data/certs/cacert.pem
web_mqtt.ssl.password = changeme
web_mqtt.ssl.honor_cipher_order = true
@@ -142,10 +142,10 @@
[{ssl_config,
[{port,15671},
{backlog,1024},
- {certfile,"test/config_schema_SUITE_data/certs/cert.pem"},
- {keyfile,"test/config_schema_SUITE_data/certs/key.pem"},
- {cacertfile,"test/config_schema_SUITE_data/certs/cacert.pem"},
- {password,"changeme"},
+ {certfile,"test/web_mqtt_config_schema_SUITE_data/certs/cert.pem"},
+ {keyfile,"test/web_mqtt_config_schema_SUITE_data/certs/key.pem"},
+ {cacertfile,"test/web_mqtt_config_schema_SUITE_data/certs/cacert.pem"},
+ {password,<<"changeme">>},
{honor_cipher_order, true},
{honor_ecc_order, true},
diff --git a/deps/rabbitmq_web_mqtt/test/proxy_protocol_SUITE.erl b/deps/rabbitmq_web_mqtt/test/web_mqtt_proxy_protocol_SUITE.erl
similarity index 99%
rename from deps/rabbitmq_web_mqtt/test/proxy_protocol_SUITE.erl
rename to deps/rabbitmq_web_mqtt/test/web_mqtt_proxy_protocol_SUITE.erl
index d13426342d30..7f9e9adb2f8d 100644
--- a/deps/rabbitmq_web_mqtt/test/proxy_protocol_SUITE.erl
+++ b/deps/rabbitmq_web_mqtt/test/web_mqtt_proxy_protocol_SUITE.erl
@@ -5,7 +5,7 @@
%% Copyright (c) 2007-2024 Broadcom. All Rights Reserved. The term “Broadcom” refers to Broadcom Inc. and/or its subsidiaries. All rights reserved.
%%
--module(proxy_protocol_SUITE).
+-module(web_mqtt_proxy_protocol_SUITE).
-compile([export_all, nowarn_export_all]).
diff --git a/deps/rabbitmq_web_mqtt/test/web_mqtt_shared_SUITE.erl b/deps/rabbitmq_web_mqtt/test/web_mqtt_shared_SUITE.erl
new file mode 100644
index 000000000000..f3818b34ee06
--- /dev/null
+++ b/deps/rabbitmq_web_mqtt/test/web_mqtt_shared_SUITE.erl
@@ -0,0 +1,101 @@
+%% This Source Code Form is subject to the terms of the Mozilla Public
+%% License, v. 2.0. If a copy of the MPL was not distributed with this
+%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
+%%
+%% Copyright (c) 2007-2024 Broadcom. All Rights Reserved. The term “Broadcom” refers to Broadcom Inc. and/or its subsidiaries. All rights reserved.
+
+%% This test suite uses test cases shared by rabbitmq_mqtt.
+-module(web_mqtt_shared_SUITE).
+-compile([export_all,
+ nowarn_export_all]).
+
+all() ->
+ mqtt_shared_SUITE:all().
+
+groups() ->
+ mqtt_shared_SUITE:groups().
+
+suite() ->
+ mqtt_shared_SUITE:suite().
+
+init_per_suite(Config) ->
+ mqtt_shared_SUITE:init_per_suite(Config).
+
+end_per_suite(Config) ->
+ mqtt_shared_SUITE:end_per_suite(Config).
+
+init_per_group(mqtt, Config) ->
+ %% This is the main difference with rabbitmq_mqtt.
+ rabbit_ct_helpers:set_config(Config, {websocket, true});
+init_per_group(Group, Config) ->
+ mqtt_shared_SUITE:init_per_group(Group, Config).
+
+end_per_group(Group, Config) ->
+ mqtt_shared_SUITE:end_per_group(Group, Config).
+
+init_per_testcase(Testcase, Config) ->
+ mqtt_shared_SUITE:init_per_testcase(Testcase, Config).
+
+end_per_testcase(Testcase, Config) ->
+ mqtt_shared_SUITE:end_per_testcase(Testcase, Config).
+
+global_counters(Config) -> mqtt_shared_SUITE:?FUNCTION_NAME(Config).
+message_size_metrics(Config) -> mqtt_shared_SUITE:?FUNCTION_NAME(Config).
+block_only_publisher(Config) -> mqtt_shared_SUITE:?FUNCTION_NAME(Config).
+many_qos1_messages(Config) -> mqtt_shared_SUITE:?FUNCTION_NAME(Config).
+session_expiry(Config) -> mqtt_shared_SUITE:?FUNCTION_NAME(Config).
+cli_close_all_connections(Config) -> mqtt_shared_SUITE:?FUNCTION_NAME(Config).
+cli_close_all_user_connections(Config) -> mqtt_shared_SUITE:?FUNCTION_NAME(Config).
+management_plugin_connection(Config) -> mqtt_shared_SUITE:?FUNCTION_NAME(Config).
+management_plugin_enable(Config) -> mqtt_shared_SUITE:?FUNCTION_NAME(Config).
+disconnect(Config) -> mqtt_shared_SUITE:?FUNCTION_NAME(Config).
+pubsub_shared_connection(Config) -> mqtt_shared_SUITE:?FUNCTION_NAME(Config).
+pubsub_separate_connections(Config) -> mqtt_shared_SUITE:?FUNCTION_NAME(Config).
+will_with_disconnect(Config) -> mqtt_shared_SUITE:?FUNCTION_NAME(Config).
+will_without_disconnect(Config) -> mqtt_shared_SUITE:?FUNCTION_NAME(Config).
+decode_basic_properties(Config) -> mqtt_shared_SUITE:?FUNCTION_NAME(Config).
+quorum_queue_rejects(Config) -> mqtt_shared_SUITE:?FUNCTION_NAME(Config).
+events(Config) -> mqtt_shared_SUITE:?FUNCTION_NAME(Config).
+internal_event_handler(Config) -> mqtt_shared_SUITE:?FUNCTION_NAME(Config).
+non_clean_sess_reconnect_qos1(Config) -> mqtt_shared_SUITE:?FUNCTION_NAME(Config).
+non_clean_sess_reconnect_qos0(Config) -> mqtt_shared_SUITE:?FUNCTION_NAME(Config).
+non_clean_sess_reconnect_qos0_and_qos1(Config) -> mqtt_shared_SUITE:?FUNCTION_NAME(Config).
+non_clean_sess_empty_client_id(Config) -> mqtt_shared_SUITE:?FUNCTION_NAME(Config).
+subscribe_same_topic_same_qos(Config) -> mqtt_shared_SUITE:?FUNCTION_NAME(Config).
+subscribe_same_topic_different_qos(Config) -> mqtt_shared_SUITE:?FUNCTION_NAME(Config).
+subscribe_multiple(Config) -> mqtt_shared_SUITE:?FUNCTION_NAME(Config).
+large_message_mqtt_to_mqtt(Config) -> mqtt_shared_SUITE:?FUNCTION_NAME(Config).
+large_message_amqp_to_mqtt(Config) -> mqtt_shared_SUITE:?FUNCTION_NAME(Config).
+keepalive(Config) -> mqtt_shared_SUITE:?FUNCTION_NAME(Config).
+keepalive_turned_off(Config) -> mqtt_shared_SUITE:?FUNCTION_NAME(Config).
+block(Config) -> mqtt_shared_SUITE:?FUNCTION_NAME(Config).
+amqp_to_mqtt_qos0(Config) -> mqtt_shared_SUITE:?FUNCTION_NAME(Config).
+clean_session_disconnect_client(Config) -> mqtt_shared_SUITE:?FUNCTION_NAME(Config).
+clean_session_node_restart(Config) -> mqtt_shared_SUITE:?FUNCTION_NAME(Config).
+clean_session_node_kill(Config) -> mqtt_shared_SUITE:?FUNCTION_NAME(Config).
+rabbit_status_connection_count(Config) -> mqtt_shared_SUITE:?FUNCTION_NAME(Config).
+trace(Config) -> mqtt_shared_SUITE:?FUNCTION_NAME(Config).
+trace_large_message(Config) -> mqtt_shared_SUITE:?FUNCTION_NAME(Config).
+max_packet_size_unauthenticated(Config) -> mqtt_shared_SUITE:?FUNCTION_NAME(Config).
+max_packet_size_authenticated(Config) -> mqtt_shared_SUITE:?FUNCTION_NAME(Config).
+default_queue_type(Config) -> mqtt_shared_SUITE:?FUNCTION_NAME(Config).
+incoming_message_interceptors(Config) -> mqtt_shared_SUITE:?FUNCTION_NAME(Config).
+utf8(Config) -> mqtt_shared_SUITE:?FUNCTION_NAME(Config).
+retained_message_conversion(Config) -> mqtt_shared_SUITE:?FUNCTION_NAME(Config).
+bind_exchange_to_exchange(Config) -> mqtt_shared_SUITE:?FUNCTION_NAME(Config).
+bind_exchange_to_exchange_single_message(Config) -> mqtt_shared_SUITE:?FUNCTION_NAME(Config).
+pubsub(Config) -> mqtt_shared_SUITE:?FUNCTION_NAME(Config).
+queue_down_qos1(Config) -> mqtt_shared_SUITE:?FUNCTION_NAME(Config).
+consuming_classic_queue_down(Config) -> mqtt_shared_SUITE:?FUNCTION_NAME(Config).
+flow_quorum_queue(Config) -> mqtt_shared_SUITE:?FUNCTION_NAME(Config).
+flow_stream(Config) -> mqtt_shared_SUITE:?FUNCTION_NAME(Config).
+rabbit_mqtt_qos0_queue(Config) -> mqtt_shared_SUITE:?FUNCTION_NAME(Config).
+rabbit_mqtt_qos0_queue_kill_node(Config) -> mqtt_shared_SUITE:?FUNCTION_NAME(Config).
+cli_list_queues(Config) -> mqtt_shared_SUITE:?FUNCTION_NAME(Config).
+delete_create_queue(Config) -> mqtt_shared_SUITE:?FUNCTION_NAME(Config).
+session_reconnect(Config) -> mqtt_shared_SUITE:?FUNCTION_NAME(Config).
+session_takeover(Config) -> mqtt_shared_SUITE:?FUNCTION_NAME(Config).
+duplicate_client_id(Config) -> mqtt_shared_SUITE:?FUNCTION_NAME(Config).
+publish_to_all_queue_types_qos0(Config) -> mqtt_shared_SUITE:?FUNCTION_NAME(Config).
+publish_to_all_queue_types_qos1(Config) -> mqtt_shared_SUITE:?FUNCTION_NAME(Config).
+maintenance(Config) -> mqtt_shared_SUITE:?FUNCTION_NAME(Config).
diff --git a/deps/rabbitmq_web_mqtt/test/system_SUITE.erl b/deps/rabbitmq_web_mqtt/test/web_mqtt_system_SUITE.erl
similarity index 99%
rename from deps/rabbitmq_web_mqtt/test/system_SUITE.erl
rename to deps/rabbitmq_web_mqtt/test/web_mqtt_system_SUITE.erl
index 35af6e923d28..3b01af7f1e06 100644
--- a/deps/rabbitmq_web_mqtt/test/system_SUITE.erl
+++ b/deps/rabbitmq_web_mqtt/test/web_mqtt_system_SUITE.erl
@@ -5,7 +5,7 @@
%% Copyright (c) 2007-2024 Broadcom. All Rights Reserved. The term “Broadcom” refers to Broadcom Inc. and/or its subsidiaries. All rights reserved.
%%
--module(system_SUITE).
+-module(web_mqtt_system_SUITE).
-include_lib("eunit/include/eunit.hrl").
diff --git a/deps/rabbitmq_web_mqtt/test/web_mqtt_v5_SUITE.erl b/deps/rabbitmq_web_mqtt/test/web_mqtt_v5_SUITE.erl
new file mode 100644
index 000000000000..5012ddd4d0b8
--- /dev/null
+++ b/deps/rabbitmq_web_mqtt/test/web_mqtt_v5_SUITE.erl
@@ -0,0 +1,114 @@
+%% This Source Code Form is subject to the terms of the Mozilla Public
+%% License, v. 2.0. If a copy of the MPL was not distributed with this
+%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
+%%
+%% Copyright (c) 2007-2024 Broadcom. All Rights Reserved. The term “Broadcom” refers to Broadcom Inc. and/or its subsidiaries. All rights reserved.
+
+%% This test suite uses test cases shared by rabbitmq_mqtt.
+-module(web_mqtt_v5_SUITE).
+-compile([export_all,
+ nowarn_export_all]).
+
+all() ->
+ v5_SUITE:all().
+
+groups() ->
+ v5_SUITE:groups().
+
+suite() ->
+ v5_SUITE:suite().
+
+init_per_suite(Config) ->
+ v5_SUITE:init_per_suite(Config).
+
+end_per_suite(Config) ->
+ v5_SUITE:end_per_suite(Config).
+
+init_per_group(mqtt, Config) ->
+ %% This is the main difference with rabbitmq_mqtt.
+ rabbit_ct_helpers:set_config(Config, {websocket, true});
+init_per_group(Group, Config) ->
+ v5_SUITE:init_per_group(Group, Config).
+
+end_per_group(Group, Config) ->
+ v5_SUITE:end_per_group(Group, Config).
+
+init_per_testcase(Testcase, Config) ->
+ v5_SUITE:init_per_testcase(Testcase, Config).
+
+end_per_testcase(Testcase, Config) ->
+ v5_SUITE:end_per_testcase(Testcase, Config).
+
+client_set_max_packet_size_publish(Config) -> v5_SUITE:?FUNCTION_NAME(Config).
+client_set_max_packet_size_connack(Config) -> v5_SUITE:?FUNCTION_NAME(Config).
+client_set_max_packet_size_invalid(Config) -> v5_SUITE:?FUNCTION_NAME(Config).
+message_expiry(Config) -> v5_SUITE:?FUNCTION_NAME(Config).
+message_expiry_will_message(Config) -> v5_SUITE:?FUNCTION_NAME(Config).
+message_expiry_retained_message(Config) -> v5_SUITE:?FUNCTION_NAME(Config).
+session_expiry_classic_queue_disconnect_decrease(Config) -> v5_SUITE:?FUNCTION_NAME(Config).
+session_expiry_quorum_queue_disconnect_decrease(Config) -> v5_SUITE:?FUNCTION_NAME(Config).
+session_expiry_disconnect_zero_to_non_zero(Config) -> v5_SUITE:?FUNCTION_NAME(Config).
+session_expiry_disconnect_non_zero_to_zero(Config) -> v5_SUITE:?FUNCTION_NAME(Config).
+session_expiry_disconnect_infinity_to_zero(Config) -> v5_SUITE:?FUNCTION_NAME(Config).
+session_expiry_disconnect_to_infinity(Config) -> v5_SUITE:?FUNCTION_NAME(Config).
+session_expiry_reconnect_non_zero(Config) -> v5_SUITE:?FUNCTION_NAME(Config).
+session_expiry_reconnect_zero(Config) -> v5_SUITE:?FUNCTION_NAME(Config).
+session_expiry_reconnect_infinity_to_zero(Config) -> v5_SUITE:?FUNCTION_NAME(Config).
+client_publish_qos2(Config) -> v5_SUITE:?FUNCTION_NAME(Config).
+client_rejects_publish(Config) -> v5_SUITE:?FUNCTION_NAME(Config).
+client_receive_maximum_min(Config) -> v5_SUITE:?FUNCTION_NAME(Config).
+client_receive_maximum_large(Config) -> v5_SUITE:?FUNCTION_NAME(Config).
+unsubscribe_success(Config) -> v5_SUITE:?FUNCTION_NAME(Config).
+unsubscribe_topic_not_found(Config) -> v5_SUITE:?FUNCTION_NAME(Config).
+subscription_option_no_local(Config) -> v5_SUITE:?FUNCTION_NAME(Config).
+subscription_option_no_local_wildcards(Config) -> v5_SUITE:?FUNCTION_NAME(Config).
+subscription_option_retain_as_published(Config) -> v5_SUITE:?FUNCTION_NAME(Config).
+subscription_option_retain_as_published_wildcards(Config) -> v5_SUITE:?FUNCTION_NAME(Config).
+subscription_option_retain_handling(Config) -> v5_SUITE:?FUNCTION_NAME(Config).
+subscription_identifier(Config) -> v5_SUITE:?FUNCTION_NAME(Config).
+subscription_identifier_amqp091(Config) -> v5_SUITE:?FUNCTION_NAME(Config).
+subscription_identifier_at_most_once_dead_letter(Config) -> v5_SUITE:?FUNCTION_NAME(Config).
+at_most_once_dead_letter_detect_cycle(Config) -> v5_SUITE:?FUNCTION_NAME(Config).
+subscription_options_persisted(Config) -> v5_SUITE:?FUNCTION_NAME(Config).
+subscription_options_modify(Config) -> v5_SUITE:?FUNCTION_NAME(Config).
+subscription_options_modify_qos1(Config) -> v5_SUITE:?FUNCTION_NAME(Config).
+subscription_options_modify_qos0(Config) -> v5_SUITE:?FUNCTION_NAME(Config).
+session_upgrade_v3_v5_qos1(Config) -> v5_SUITE:?FUNCTION_NAME(Config).
+session_upgrade_v3_v5_qos0(Config) -> v5_SUITE:?FUNCTION_NAME(Config).
+session_upgrade_v3_v5_amqp091_pub(Config) -> v5_SUITE:?FUNCTION_NAME(Config).
+compatibility_v3_v5(Config) -> v5_SUITE:?FUNCTION_NAME(Config).
+session_upgrade_v3_v5_unsubscribe(Config) -> v5_SUITE:?FUNCTION_NAME(Config).
+session_upgrade_v4_v5_no_queue_bind_permission(Config) -> v5_SUITE:?FUNCTION_NAME(Config).
+amqp091_cc_header(Config) -> v5_SUITE:?FUNCTION_NAME(Config).
+publish_property_content_type(Config) -> v5_SUITE:?FUNCTION_NAME(Config).
+publish_property_payload_format_indicator(Config) -> v5_SUITE:?FUNCTION_NAME(Config).
+publish_property_response_topic_correlation_data(Config) -> v5_SUITE:?FUNCTION_NAME(Config).
+publish_property_user_property(Config) -> v5_SUITE:?FUNCTION_NAME(Config).
+disconnect_with_will(Config) -> v5_SUITE:?FUNCTION_NAME(Config).
+will_qos2(Config) -> v5_SUITE:?FUNCTION_NAME(Config).
+will_delay_greater_than_session_expiry(Config) -> v5_SUITE:?FUNCTION_NAME(Config).
+will_delay_less_than_session_expiry(Config) -> v5_SUITE:?FUNCTION_NAME(Config).
+will_delay_equals_session_expiry(Config) -> v5_SUITE:?FUNCTION_NAME(Config).
+will_delay_session_expiry_zero(Config) -> v5_SUITE:?FUNCTION_NAME(Config).
+will_delay_reconnect_no_will(Config) -> v5_SUITE:?FUNCTION_NAME(Config).
+will_delay_reconnect_with_will(Config) -> v5_SUITE:?FUNCTION_NAME(Config).
+will_delay_session_takeover(Config) -> v5_SUITE:?FUNCTION_NAME(Config).
+will_delay_message_expiry(Config) -> v5_SUITE:?FUNCTION_NAME(Config).
+will_delay_message_expiry_publish_properties(Config) -> v5_SUITE:?FUNCTION_NAME(Config).
+will_delay_properties(Config) -> v5_SUITE:?FUNCTION_NAME(Config).
+will_properties(Config) -> v5_SUITE:?FUNCTION_NAME(Config).
+retain_properties(Config) -> v5_SUITE:?FUNCTION_NAME(Config).
+topic_alias_client_to_server(Config) -> v5_SUITE:?FUNCTION_NAME(Config).
+topic_alias_server_to_client(Config) -> v5_SUITE:?FUNCTION_NAME(Config).
+topic_alias_bidirectional(Config) -> v5_SUITE:?FUNCTION_NAME(Config).
+topic_alias_invalid(Config) -> v5_SUITE:?FUNCTION_NAME(Config).
+topic_alias_unknown(Config) -> v5_SUITE:?FUNCTION_NAME(Config).
+topic_alias_disallowed(Config) -> v5_SUITE:?FUNCTION_NAME(Config).
+topic_alias_retained_message(Config) -> v5_SUITE:?FUNCTION_NAME(Config).
+topic_alias_disallowed_retained_message(Config) -> v5_SUITE:?FUNCTION_NAME(Config).
+extended_auth(Config) -> v5_SUITE:?FUNCTION_NAME(Config).
+headers_exchange(Config) -> v5_SUITE:?FUNCTION_NAME(Config).
+consistent_hash_exchange(Config) -> v5_SUITE:?FUNCTION_NAME(Config).
+session_migrate_v3_v5(Config) -> v5_SUITE:?FUNCTION_NAME(Config).
+session_takeover_v3_v5(Config) -> v5_SUITE:?FUNCTION_NAME(Config).
+will_delay_node_restart(Config) -> v5_SUITE:?FUNCTION_NAME(Config).
diff --git a/deps/rabbitmq_web_stomp/priv/schema/rabbitmq_web_stomp.schema b/deps/rabbitmq_web_stomp/priv/schema/rabbitmq_web_stomp.schema
index 273d30cb3a2b..c16e74837563 100644
--- a/deps/rabbitmq_web_stomp/priv/schema/rabbitmq_web_stomp.schema
+++ b/deps/rabbitmq_web_stomp/priv/schema/rabbitmq_web_stomp.schema
@@ -65,7 +65,7 @@
{mapping, "web_stomp.ssl.cacertfile", "rabbitmq_web_stomp.ssl_config.cacertfile",
[{datatype, string}, {validators, ["file_accessible"]}]}.
{mapping, "web_stomp.ssl.password", "rabbitmq_web_stomp.ssl_config.password",
- [{datatype, string}]}.
+ [{datatype, [tagged_binary, binary]}]}.
{translation,
"rabbitmq_web_stomp.ssl_config",
diff --git a/deps/rabbitmq_web_stomp/test/config_schema_SUITE_data/rabbitmq_web_stomp.snippets b/deps/rabbitmq_web_stomp/test/config_schema_SUITE_data/rabbitmq_web_stomp.snippets
index 8a41ce031b90..fc901e2d05a4 100644
--- a/deps/rabbitmq_web_stomp/test/config_schema_SUITE_data/rabbitmq_web_stomp.snippets
+++ b/deps/rabbitmq_web_stomp/test/config_schema_SUITE_data/rabbitmq_web_stomp.snippets
@@ -79,7 +79,7 @@
{certfile,"test/config_schema_SUITE_data/certs/cert.pem"},
{keyfile,"test/config_schema_SUITE_data/certs/key.pem"},
{cacertfile,"test/config_schema_SUITE_data/certs/cacert.pem"},
- {password,"changeme"}]}]}],
+ {password,<<"changeme">>}]}]}],
[rabbitmq_web_stomp]},
{ssl,
@@ -99,7 +99,7 @@
{certfile,"test/config_schema_SUITE_data/certs/cert.pem"},
{keyfile,"test/config_schema_SUITE_data/certs/key.pem"},
{cacertfile,"test/config_schema_SUITE_data/certs/cacert.pem"},
- {password,"changeme"},
+ {password,<<"changeme">>},
{versions,['tlsv1.2','tlsv1.1']}
]}]}],
@@ -136,7 +136,7 @@
{certfile,"test/config_schema_SUITE_data/certs/cert.pem"},
{keyfile,"test/config_schema_SUITE_data/certs/key.pem"},
{cacertfile,"test/config_schema_SUITE_data/certs/cacert.pem"},
- {password,"changeme"},
+ {password,<<"changeme">>},
{honor_cipher_order, true},
{honor_ecc_order, true},
diff --git a/deps/trust_store_http/Makefile b/deps/trust_store_http/Makefile
index 341d187df719..fa7c17d9ac6e 100644
--- a/deps/trust_store_http/Makefile
+++ b/deps/trust_store_http/Makefile
@@ -10,7 +10,8 @@ LOCAL_DEPS = ssl
DEPS = cowboy thoas
DEP_EARLY_PLUGINS = rabbit_common/mk/rabbitmq-early-plugin.mk
-DEP_PLUGINS = rabbit_common/mk/rabbitmq-plugin.mk
+# We do not depend on rabbit therefore can't run the broker.
+DEP_PLUGINS = rabbit_common/mk/rabbitmq-build.mk
include ../../rabbitmq-components.mk
include ../../erlang.mk
diff --git a/deps/trust_store_http/src/trust_store_http.erl b/deps/trust_store_http/src/trust_store_http.erl
index d32b647b547c..315196f8b042 100644
--- a/deps/trust_store_http/src/trust_store_http.erl
+++ b/deps/trust_store_http/src/trust_store_http.erl
@@ -5,8 +5,8 @@
main([]) ->
io:format("~nStarting trust store server ~n", []),
- application:ensure_all_started(trust_store_http),
+ {ok, _} = application:ensure_all_started(trust_store_http),
io:format("~nTrust store server started on port ~tp ~n",
[application:get_env(trust_store_http, port, undefined)]),
user_drv:start(),
- timer:sleep(infinity).
\ No newline at end of file
+ timer:sleep(infinity).
diff --git a/deps/trust_store_http/src/trust_store_http_app.erl b/deps/trust_store_http/src/trust_store_http_app.erl
index 2fd861405a51..84a2b7e83d0a 100644
--- a/deps/trust_store_http/src/trust_store_http_app.erl
+++ b/deps/trust_store_http/src/trust_store_http_app.erl
@@ -15,7 +15,7 @@ start(_Type, _Args) ->
{"/certs/[...]", cowboy_static,
{dir, Directory, [{mimetypes, {<<"text">>, <<"html">>, []}}]}}]}
]),
- case get_ssl_options() of
+ _ = case get_ssl_options() of
undefined -> start_http(Dispatch, Port);
SslOptions -> start_https(Dispatch, Port, SslOptions)
end,
diff --git a/deps/trust_store_http/src/trust_store_list_handler.erl b/deps/trust_store_http/src/trust_store_list_handler.erl
index a09bf0306cfe..416dfc253d99 100644
--- a/deps/trust_store_http/src/trust_store_list_handler.erl
+++ b/deps/trust_store_http/src/trust_store_list_handler.erl
@@ -25,7 +25,7 @@ respond(Files, Req, State) ->
respond_error(Reason, Req, State) ->
Error = io_lib:format("Error listing certificates ~tp", [Reason]),
logger:log(error, "~ts", [Error]),
- Req2 = cowboy_req:reply(500, [], iolist_to_binary(Error), Req),
+ Req2 = cowboy_req:reply(500, #{}, iolist_to_binary(Error), Req),
{ok, Req2, State}.
json_encode(Files) ->
@@ -40,7 +40,6 @@ cert_id(FileName, FileDate, FileHash) ->
cert_path(FileName) ->
iolist_to_binary(["/certs/", FileName]).
--spec list_files(string()) -> [{string(), file:date_time(), integer()}].
list_files(Directory) ->
case file:list_dir(Directory) of
{ok, FileNames} ->
diff --git a/erlang.mk b/erlang.mk
index 0e11784cbbc9..1d2e3be2a9c4 100644
--- a/erlang.mk
+++ b/erlang.mk
@@ -801,7 +801,7 @@ pkg_cuttlefish_description = cuttlefish configuration abstraction
pkg_cuttlefish_homepage = https://github.com/Kyorai/cuttlefish
pkg_cuttlefish_fetch = git
pkg_cuttlefish_repo = https://github.com/Kyorai/cuttlefish
-pkg_cuttlefish_commit = master
+pkg_cuttlefish_commit = main
PACKAGES += damocles
pkg_damocles_name = damocles
diff --git a/moduleindex.yaml b/moduleindex.yaml
index 39c0265ea927..ebadcd41d644 100755
--- a/moduleindex.yaml
+++ b/moduleindex.yaml
@@ -185,6 +185,9 @@ emqtt:
- emqtt_ws
enough:
- enough
+eunit_formatters:
+- binomial_heap
+- eunit_progress
gen_batch_server:
- gen_batch_server
getopt:
@@ -553,6 +556,7 @@ rabbit:
- rabbit_amqqueue_sup_sup
- rabbit_auth_backend_internal
- rabbit_auth_mechanism_amqplain
+- rabbit_auth_mechanism_anonymous
- rabbit_auth_mechanism_cr_demo
- rabbit_auth_mechanism_plain
- rabbit_autoheal
@@ -644,8 +648,10 @@ rabbit:
- rabbit_fifo_dlx_sup
- rabbit_fifo_dlx_worker
- rabbit_fifo_index
+- rabbit_fifo_q
- rabbit_fifo_v0
- rabbit_fifo_v1
+- rabbit_fifo_v3
- rabbit_file
- rabbit_global_counters
- rabbit_guid
@@ -664,6 +670,7 @@ rabbit:
- rabbit_metrics
- rabbit_mirror_queue_misc
- rabbit_mnesia
+- rabbit_msg_size_metrics
- rabbit_msg_store
- rabbit_msg_store_gc
- rabbit_networking
@@ -829,6 +836,7 @@ rabbitmq_auth_backend_oauth2:
- rabbit_auth_backend_oauth2
- rabbit_auth_backend_oauth2_app
- rabbit_oauth2_config
+- rabbit_oauth2_schema
- rabbit_oauth2_scope
- uaa_jwks
- uaa_jwt
@@ -890,6 +898,10 @@ rabbitmq_federation:
- rabbit_log_federation
rabbitmq_federation_management:
- rabbit_federation_mgmt
+rabbitmq_federation_prometheus:
+- rabbit_federation_prometheus_app
+- rabbit_federation_prometheus_collector
+- rabbit_federation_prometheus_sup
rabbitmq_jms_topic_exchange:
- rabbit_db_jms_exchange
- rabbit_db_jms_exchange_m2k_converter
@@ -978,6 +990,7 @@ rabbitmq_management:
- rabbit_mgmt_wm_quorum_queue_replicas_delete_member
- rabbit_mgmt_wm_quorum_queue_replicas_grow
- rabbit_mgmt_wm_quorum_queue_replicas_shrink
+- rabbit_mgmt_wm_quorum_queue_status
- rabbit_mgmt_wm_rebalance_queues
- rabbit_mgmt_wm_redirect
- rabbit_mgmt_wm_reset
@@ -1084,8 +1097,8 @@ rabbitmq_prometheus:
- prometheus_rabbitmq_alarm_metrics_collector
- prometheus_rabbitmq_core_metrics_collector
- prometheus_rabbitmq_dynamic_collector
-- prometheus_rabbitmq_federation_collector
- prometheus_rabbitmq_global_metrics_collector
+- prometheus_rabbitmq_message_size_metrics_collector
- rabbit_prometheus_app
- rabbit_prometheus_dispatcher
- rabbit_prometheus_handler
@@ -1122,8 +1135,13 @@ rabbitmq_shovel:
- rabbit_shovel_worker
- rabbit_shovel_worker_sup
rabbitmq_shovel_management:
-- rabbit_shovel_mgmt
+- rabbit_shovel_mgmt_shovel
+- rabbit_shovel_mgmt_shovels
- rabbit_shovel_mgmt_util
+rabbitmq_shovel_prometheus:
+- rabbit_shovel_prometheus_app
+- rabbit_shovel_prometheus_collector
+- rabbit_shovel_prometheus_sup
rabbitmq_stomp:
- Elixir.RabbitMQ.CLI.Ctl.Commands.ListStompConnectionsCommand
- rabbit_stomp
diff --git a/packaging/docker-image/Dockerfile b/packaging/docker-image/Dockerfile
index b74b68d5b468..5fe46736682d 100644
--- a/packaging/docker-image/Dockerfile
+++ b/packaging/docker-image/Dockerfile
@@ -146,7 +146,6 @@ RUN set -eux; \
--prefix="$ERLANG_INSTALL_PATH_PREFIX" \
--host="$hostArch" \
--build="$buildArch" \
- --disable-hipe \
--disable-sctp \
--disable-silent-rules \
--enable-builtin-zlib \
@@ -166,7 +165,6 @@ RUN set -eux; \
--without-et \
--without-eunit \
--without-ftp \
- --without-hipe \
--without-jinterface \
--without-megaco \
--without-observer \
@@ -329,4 +327,4 @@ RUN set eux; \
rm -rf /var/lib/apt/lists/*; \
rabbitmqadmin --version
-EXPOSE 15671 15672
\ No newline at end of file
+EXPOSE 15671 15672
diff --git a/plugins.mk b/plugins.mk
index 7536c6705ae1..b822296da018 100644
--- a/plugins.mk
+++ b/plugins.mk
@@ -15,6 +15,7 @@ PLUGINS := rabbitmq_amqp1_0 \
rabbitmq_event_exchange \
rabbitmq_federation \
rabbitmq_federation_management \
+ rabbitmq_federation_prometheus \
rabbitmq_jms_topic_exchange \
rabbitmq_management \
rabbitmq_management_agent \
@@ -30,6 +31,7 @@ PLUGINS := rabbitmq_amqp1_0 \
rabbitmq_sharding \
rabbitmq_shovel \
rabbitmq_shovel_management \
+ rabbitmq_shovel_prometheus \
rabbitmq_stomp \
rabbitmq_stream \
rabbitmq_stream_management \
diff --git a/rabbitmq-components.mk b/rabbitmq-components.mk
index 2962d95b0b27..b6361f61d0cd 100644
--- a/rabbitmq-components.mk
+++ b/rabbitmq-components.mk
@@ -6,106 +6,34 @@ ifeq ($(.DEFAULT_GOAL),)
endif
# PROJECT_VERSION defaults to:
-# 1. the version exported by rabbitmq-server-release;
+# 1. the version exported by environment;
# 2. the version stored in `git-revisions.txt`, if it exists;
# 3. a version based on git-describe(1), if it is a Git clone;
# 4. 0.0.0
+#
+# Note that in the case where git-describe(1) is used
+# (e.g. during development), running "git gc" may help
+# improve the performance.
PROJECT_VERSION := $(RABBITMQ_VERSION)
ifeq ($(PROJECT_VERSION),)
+ifneq ($(wildcard git-revisions.txt),)
PROJECT_VERSION = $(shell \
-if test -f git-revisions.txt; then \
head -n1 git-revisions.txt | \
- awk '{print $$$(words $(PROJECT_DESCRIPTION) version);}'; \
-else \
+ awk '{print $$$(words $(PROJECT_DESCRIPTION) version);}')
+else
+PROJECT_VERSION = $(shell \
(git describe --dirty --abbrev=7 --tags --always --first-parent \
- 2>/dev/null || echo rabbitmq_v0_0_0) | \
- sed -e 's/^rabbitmq_v//' -e 's/^v//' -e 's/_/./g' -e 's/-/+/' \
- -e 's/-/./g'; \
-fi)
+ 2>/dev/null || echo 0.0.0) | \
+ sed -e 's/^v//' -e 's/_/./g' -e 's/-/+/' -e 's/-/./g')
+endif
endif
# --------------------------------------------------------------------
# RabbitMQ components.
# --------------------------------------------------------------------
-# For RabbitMQ repositories, we want to checkout branches which match
-# the parent project. For instance, if the parent project is on a
-# release tag, dependencies must be on the same release tag. If the
-# parent project is on a topic branch, dependencies must be on the same
-# topic branch or fallback to `stable` or `main` whichever was the
-# base of the topic branch.
-
-dep_amqp_client = git_rmq-subfolder rabbitmq-erlang-client $(current_rmq_ref) $(base_rmq_ref) main
-dep_amqp10_client = git_rmq-subfolder rabbitmq-amqp1.0-client $(current_rmq_ref) $(base_rmq_ref) main
-dep_oauth2_client = git_rmq-subfolder oauth2-client $(current_rmq_ref) $(base_rmq_ref) main
-dep_amqp10_common = git_rmq-subfolder rabbitmq-amqp1.0-common $(current_rmq_ref) $(base_rmq_ref) main
-dep_rabbit = git_rmq-subfolder rabbitmq-server $(current_rmq_ref) $(base_rmq_ref) main
-dep_rabbit_common = git_rmq-subfolder rabbitmq-common $(current_rmq_ref) $(base_rmq_ref) main
-dep_rabbitmq_amqp1_0 = git_rmq-subfolder rabbitmq-amqp1.0 $(current_rmq_ref) $(base_rmq_ref) main
-dep_rabbitmq_auth_backend_amqp = git_rmq rabbitmq-auth-backend-amqp $(current_rmq_ref) $(base_rmq_ref) main
-dep_rabbitmq_auth_backend_cache = git_rmq-subfolder rabbitmq-auth-backend-cache $(current_rmq_ref) $(base_rmq_ref) main
-dep_rabbitmq_auth_backend_http = git_rmq-subfolder rabbitmq-auth-backend-http $(current_rmq_ref) $(base_rmq_ref) main
-dep_rabbitmq_auth_backend_ldap = git_rmq-subfolder rabbitmq-auth-backend-ldap $(current_rmq_ref) $(base_rmq_ref) main
-dep_rabbitmq_auth_backend_oauth2 = git_rmq-subfolder rabbitmq-auth-backend-oauth2 $(current_rmq_ref) $(base_rmq_ref) main
-dep_rabbitmq_auth_mechanism_ssl = git_rmq-subfolder rabbitmq-auth-mechanism-ssl $(current_rmq_ref) $(base_rmq_ref) main
-dep_rabbitmq_aws = git_rmq-subfolder rabbitmq-aws $(current_rmq_ref) $(base_rmq_ref) main
-dep_rabbitmq_boot_steps_visualiser = git_rmq rabbitmq-boot-steps-visualiser $(current_rmq_ref) $(base_rmq_ref) main
-dep_rabbitmq_cli = git_rmq-subfolder rabbitmq-cli $(current_rmq_ref) $(base_rmq_ref) main
-dep_rabbitmq_codegen = git_rmq-subfolder rabbitmq-codegen $(current_rmq_ref) $(base_rmq_ref) main
-dep_rabbitmq_consistent_hash_exchange = git_rmq-subfolder rabbitmq-consistent-hash-exchange $(current_rmq_ref) $(base_rmq_ref) main
-dep_rabbitmq_ct_client_helpers = git_rmq-subfolder rabbitmq-ct-client-helpers $(current_rmq_ref) $(base_rmq_ref) main
-dep_rabbitmq_ct_helpers = git_rmq-subfolder rabbitmq-ct-helpers $(current_rmq_ref) $(base_rmq_ref) main
-dep_rabbitmq_delayed_message_exchange = git_rmq rabbitmq-delayed-message-exchange $(current_rmq_ref) $(base_rmq_ref) main
-dep_rabbitmq_dotnet_client = git_rmq rabbitmq-dotnet-client $(current_rmq_ref) $(base_rmq_ref) main
-dep_rabbitmq_event_exchange = git_rmq-subfolder rabbitmq-event-exchange $(current_rmq_ref) $(base_rmq_ref) main
-dep_rabbitmq_federation = git_rmq-subfolder rabbitmq-federation $(current_rmq_ref) $(base_rmq_ref) main
-dep_rabbitmq_federation_management = git_rmq-subfolder rabbitmq-federation-management $(current_rmq_ref) $(base_rmq_ref) main
-dep_rabbitmq_java_client = git_rmq rabbitmq-java-client $(current_rmq_ref) $(base_rmq_ref) main
-dep_rabbitmq_jms_client = git_rmq rabbitmq-jms-client $(current_rmq_ref) $(base_rmq_ref) main
-dep_rabbitmq_jms_cts = git_rmq rabbitmq-jms-cts $(current_rmq_ref) $(base_rmq_ref) main
-dep_rabbitmq_jms_topic_exchange = git_rmq-subfolder rabbitmq-jms-topic-exchange $(current_rmq_ref) $(base_rmq_ref) main
-dep_rabbitmq_lvc_exchange = git_rmq rabbitmq-lvc-exchange $(current_rmq_ref) $(base_rmq_ref) main
-dep_rabbitmq_management = git_rmq-subfolder rabbitmq-management $(current_rmq_ref) $(base_rmq_ref) main
-dep_rabbitmq_management_agent = git_rmq-subfolder rabbitmq-management-agent $(current_rmq_ref) $(base_rmq_ref) main
-dep_rabbitmq_management_exchange = git_rmq rabbitmq-management-exchange $(current_rmq_ref) $(base_rmq_ref) main
-dep_rabbitmq_management_themes = git_rmq rabbitmq-management-themes $(current_rmq_ref) $(base_rmq_ref) main
-dep_rabbitmq_message_timestamp = git_rmq rabbitmq-message-timestamp $(current_rmq_ref) $(base_rmq_ref) main
-dep_rabbitmq_metronome = git_rmq rabbitmq-metronome $(current_rmq_ref) $(base_rmq_ref) main
-dep_rabbitmq_mqtt = git_rmq-subfolder rabbitmq-mqtt $(current_rmq_ref) $(base_rmq_ref) main
-dep_rabbitmq_objc_client = git_rmq rabbitmq-objc-client $(current_rmq_ref) $(base_rmq_ref) main
-dep_rabbitmq_peer_discovery_aws = git_rmq-subfolder rabbitmq-peer-discovery-aws $(current_rmq_ref) $(base_rmq_ref) main
-dep_rabbitmq_peer_discovery_common = git_rmq-subfolder rabbitmq-peer-discovery-common $(current_rmq_ref) $(base_rmq_ref) main
-dep_rabbitmq_peer_discovery_consul = git_rmq-subfolder rabbitmq-peer-discovery-consul $(current_rmq_ref) $(base_rmq_ref) main
-dep_rabbitmq_peer_discovery_etcd = git_rmq-subfolder rabbitmq-peer-discovery-etcd $(current_rmq_ref) $(base_rmq_ref) main
-dep_rabbitmq_peer_discovery_k8s = git_rmq-subfolder rabbitmq-peer-discovery-k8s $(current_rmq_ref) $(base_rmq_ref) main
-dep_rabbitmq_prelaunch = git_rmq-subfolder rabbitmq-prelaunch $(current_rmq_ref) $(base_rmq_ref) main
-dep_rabbitmq_prometheus = git_rmq-subfolder rabbitmq-prometheus $(current_rmq_ref) $(base_rmq_ref) main
-dep_rabbitmq_random_exchange = git_rmq-subfolder rabbitmq-random-exchange $(current_rmq_ref) $(base_rmq_ref) main
-dep_rabbitmq_recent_history_exchange = git_rmq-subfolder rabbitmq-recent-history-exchange $(current_rmq_ref) $(base_rmq_ref) main
-dep_rabbitmq_routing_node_stamp = git_rmq rabbitmq-routing-node-stamp $(current_rmq_ref) $(base_rmq_ref) main
-dep_rabbitmq_rtopic_exchange = git_rmq rabbitmq-rtopic-exchange $(current_rmq_ref) $(base_rmq_ref) main
-dep_rabbitmq_sharding = git_rmq-subfolder rabbitmq-sharding $(current_rmq_ref) $(base_rmq_ref) main
-dep_rabbitmq_shovel = git_rmq-subfolder rabbitmq-shovel $(current_rmq_ref) $(base_rmq_ref) main
-dep_rabbitmq_shovel_management = git_rmq-subfolder rabbitmq-shovel-management $(current_rmq_ref) $(base_rmq_ref) main
-dep_rabbitmq_stomp = git_rmq-subfolder rabbitmq-stomp $(current_rmq_ref) $(base_rmq_ref) main
-dep_rabbitmq_stream = git_rmq-subfolder rabbitmq-stream $(current_rmq_ref) $(base_rmq_ref) main
-dep_rabbitmq_stream_common = git_rmq-subfolder rabbitmq-stream-common $(current_rmq_ref) $(base_rmq_ref) main
-dep_rabbitmq_stream_management = git_rmq-subfolder rabbitmq-stream-management $(current_rmq_ref) $(base_rmq_ref) main
-dep_rabbitmq_toke = git_rmq rabbitmq-toke $(current_rmq_ref) $(base_rmq_ref) main
-dep_rabbitmq_top = git_rmq-subfolder rabbitmq-top $(current_rmq_ref) $(base_rmq_ref) main
-dep_rabbitmq_tracing = git_rmq-subfolder rabbitmq-tracing $(current_rmq_ref) $(base_rmq_ref) main
-dep_rabbitmq_trust_store = git_rmq-subfolder rabbitmq-trust-store $(current_rmq_ref) $(base_rmq_ref) main
-dep_rabbitmq_test = git_rmq rabbitmq-test $(current_rmq_ref) $(base_rmq_ref) main
-dep_rabbitmq_web_dispatch = git_rmq-subfolder rabbitmq-web-dispatch $(current_rmq_ref) $(base_rmq_ref) main
-dep_rabbitmq_web_stomp = git_rmq-subfolder rabbitmq-web-stomp $(current_rmq_ref) $(base_rmq_ref) main
-dep_rabbitmq_web_stomp_examples = git_rmq-subfolder rabbitmq-web-stomp-examples $(current_rmq_ref) $(base_rmq_ref) main
-dep_rabbitmq_web_mqtt = git_rmq-subfolder rabbitmq-web-mqtt $(current_rmq_ref) $(base_rmq_ref) main
-dep_rabbitmq_web_mqtt_examples = git_rmq-subfolder rabbitmq-web-mqtt-examples $(current_rmq_ref) $(base_rmq_ref) main
-dep_rabbitmq_website = git_rmq rabbitmq-website $(current_rmq_ref) $(base_rmq_ref) live main
-dep_toke = git_rmq toke $(current_rmq_ref) $(base_rmq_ref) master
-
# Third-party dependencies version pinning.
#
# We do that in this file, which is included by all projects, to ensure
@@ -115,88 +43,113 @@ dep_accept = hex 0.3.5
dep_cowboy = hex 2.12.0
dep_cowlib = hex 2.13.0
dep_credentials_obfuscation = hex 3.4.0
-dep_cuttlefish = hex 3.1.0
+dep_cuttlefish = hex 3.4.0
dep_gen_batch_server = hex 0.8.8
dep_jose = hex 1.11.10
-dep_khepri = hex 0.14.0
-dep_khepri_mnesia_migration = hex 0.5.0
+dep_khepri = hex 0.16.0
+dep_khepri_mnesia_migration = hex 0.7.0
+dep_osiris = git https://github.com/rabbitmq/osiris v1.8.3
dep_prometheus = hex 4.11.0
-dep_ra = hex 2.13.5
+dep_ra = hex 2.14.0
dep_ranch = hex 2.1.0
dep_recon = hex 2.5.3
dep_redbug = hex 2.0.7
+dep_systemd = hex 0.6.1
dep_thoas = hex 1.0.0
-dep_observer_cli = hex 1.7.3
+dep_observer_cli = hex 1.7.5
dep_seshat = git https://github.com/rabbitmq/seshat v0.6.1
dep_stdout_formatter = hex 0.2.4
dep_sysmon_handler = hex 1.3.0
-RABBITMQ_COMPONENTS = amqp_client \
- amqp10_common \
- amqp10_client \
- oauth2_client \
- rabbit \
- rabbit_common \
- rabbitmq_amqp1_0 \
- rabbitmq_auth_backend_amqp \
- rabbitmq_auth_backend_cache \
- rabbitmq_auth_backend_http \
- rabbitmq_auth_backend_ldap \
- rabbitmq_auth_backend_oauth2 \
- rabbitmq_auth_mechanism_ssl \
- rabbitmq_aws \
- rabbitmq_boot_steps_visualiser \
- rabbitmq_cli \
- rabbitmq_codegen \
- rabbitmq_consistent_hash_exchange \
- rabbitmq_ct_client_helpers \
- rabbitmq_ct_helpers \
- rabbitmq_delayed_message_exchange \
- rabbitmq_dotnet_client \
- rabbitmq_event_exchange \
- rabbitmq_federation \
- rabbitmq_federation_management \
- rabbitmq_java_client \
- rabbitmq_jms_client \
- rabbitmq_jms_cts \
- rabbitmq_jms_topic_exchange \
- rabbitmq_lvc_exchange \
- rabbitmq_management \
- rabbitmq_management_agent \
- rabbitmq_management_exchange \
- rabbitmq_management_themes \
- rabbitmq_message_timestamp \
- rabbitmq_metronome \
- rabbitmq_mqtt \
- rabbitmq_objc_client \
- rabbitmq_peer_discovery_aws \
- rabbitmq_peer_discovery_common \
- rabbitmq_peer_discovery_consul \
- rabbitmq_peer_discovery_etcd \
- rabbitmq_peer_discovery_k8s \
- rabbitmq_prometheus \
- rabbitmq_random_exchange \
- rabbitmq_recent_history_exchange \
- rabbitmq_routing_node_stamp \
- rabbitmq_rtopic_exchange \
- rabbitmq_server_release \
- rabbitmq_sharding \
- rabbitmq_shovel \
- rabbitmq_shovel_management \
- rabbitmq_stomp \
- rabbitmq_stream \
- rabbitmq_stream_common \
- rabbitmq_stream_management \
- rabbitmq_toke \
- rabbitmq_top \
- rabbitmq_tracing \
- rabbitmq_trust_store \
- rabbitmq_web_dispatch \
- rabbitmq_web_mqtt \
- rabbitmq_web_mqtt_examples \
- rabbitmq_web_stomp \
- rabbitmq_web_stomp_examples \
- rabbitmq_website
+# RabbitMQ applications found in the monorepo.
+#
+# Note that rabbitmq_server_release is not a real application
+# but is the name used in the top-level Makefile.
+
+RABBITMQ_BUILTIN = \
+ amqp10_client \
+ amqp10_common \
+ amqp_client \
+ oauth2_client \
+ rabbit \
+ rabbit_common \
+ rabbitmq_amqp1_0 \
+ rabbitmq_amqp_client \
+ rabbitmq_auth_backend_cache \
+ rabbitmq_auth_backend_http \
+ rabbitmq_auth_backend_ldap \
+ rabbitmq_auth_backend_oauth2 \
+ rabbitmq_auth_mechanism_ssl \
+ rabbitmq_aws \
+ rabbitmq_cli \
+ rabbitmq_codegen \
+ rabbitmq_consistent_hash_exchange \
+ rabbitmq_ct_client_helpers \
+ rabbitmq_ct_helpers \
+ rabbitmq_event_exchange \
+ rabbitmq_federation \
+ rabbitmq_federation_management \
+ rabbitmq_federation_prometheus \
+ rabbitmq_jms_topic_exchange \
+ rabbitmq_management \
+ rabbitmq_management_agent \
+ rabbitmq_mqtt \
+ rabbitmq_peer_discovery_aws \
+ rabbitmq_peer_discovery_common \
+ rabbitmq_peer_discovery_consul \
+ rabbitmq_peer_discovery_etcd \
+ rabbitmq_peer_discovery_k8s \
+ rabbitmq_prelaunch \
+ rabbitmq_prometheus \
+ rabbitmq_random_exchange \
+ rabbitmq_recent_history_exchange \
+ rabbitmq_server_release \
+ rabbitmq_sharding \
+ rabbitmq_shovel \
+ rabbitmq_shovel_management \
+ rabbitmq_stomp \
+ rabbitmq_stream \
+ rabbitmq_stream_common \
+ rabbitmq_stream_management \
+ rabbitmq_top \
+ rabbitmq_tracing \
+ rabbitmq_trust_store \
+ rabbitmq_web_dispatch \
+ rabbitmq_web_mqtt \
+ rabbitmq_web_mqtt_examples \
+ rabbitmq_web_stomp \
+ rabbitmq_web_stomp_examples \
+ trust_store_http
+
+# Applications outside of the monorepo maintained by Team RabbitMQ.
+
+RABBITMQ_COMMUNITY = \
+ rabbitmq_auth_backend_amqp \
+ rabbitmq_boot_steps_visualiser \
+ rabbitmq_delayed_message_exchange \
+ rabbitmq_lvc_exchange \
+ rabbitmq_management_exchange \
+ rabbitmq_management_themes \
+ rabbitmq_message_timestamp \
+ rabbitmq_metronome \
+ rabbitmq_routing_node_stamp \
+ rabbitmq_rtopic_exchange
+
+community_dep = git git@github.com:rabbitmq/$1.git $(if $2,$2,main)
+dep_rabbitmq_auth_backend_amqp = $(call community_dep,rabbitmq-auth-backend-amqp)
+dep_rabbitmq_boot_steps_visualiser = $(call community_dep,rabbitmq-boot-steps-visualiser,master)
+dep_rabbitmq_delayed_message_exchange = $(call community_dep,rabbitmq-delayed-message-exchange)
+dep_rabbitmq_lvc_exchange = $(call community_dep,rabbitmq-lvc-exchange)
+dep_rabbitmq_management_exchange = $(call community_dep,rabbitmq-management-exchange)
+dep_rabbitmq_management_themes = $(call community_dep,rabbitmq-management-themes,master)
+dep_rabbitmq_message_timestamp = $(call community_dep,rabbitmq-message-timestamp)
+dep_rabbitmq_metronome = $(call community_dep,rabbitmq-metronome,master)
+dep_rabbitmq_routing_node_stamp = $(call community_dep,rabbitmq-routing-node-stamp)
+dep_rabbitmq_rtopic_exchange = $(call community_dep,rabbitmq-rtopic-exchange)
+
+# All RabbitMQ applications.
+
+RABBITMQ_COMPONENTS = $(RABBITMQ_BUILTIN) $(RABBITMQ_COMMUNITY)
# Erlang.mk does not rebuild dependencies by default, once they were
# compiled once, except for those listed in the `$(FORCE_REBUILD)`
@@ -207,137 +160,10 @@ RABBITMQ_COMPONENTS = amqp_client \
FORCE_REBUILD = $(RABBITMQ_COMPONENTS)
-# Several components have a custom erlang.mk/build.config, mainly
-# to disable eunit. Therefore, we can't use the top-level project's
-# erlang.mk copy.
-NO_AUTOPATCH += $(RABBITMQ_COMPONENTS)
-
-ifeq ($(origin current_rmq_ref),undefined)
-ifneq ($(wildcard .git),)
-current_rmq_ref := $(shell (\
- ref=$$(LANG=C git branch --list | awk '/^\* \(.*detached / {ref=$$0; sub(/.*detached [^ ]+ /, "", ref); sub(/\)$$/, "", ref); print ref; exit;} /^\* / {ref=$$0; sub(/^\* /, "", ref); print ref; exit}');\
- if test "$$(git rev-parse --short HEAD)" != "$$ref"; then echo "$$ref"; fi))
-else
-current_rmq_ref := main
-endif
-endif
-export current_rmq_ref
-
-ifeq ($(origin base_rmq_ref),undefined)
-ifneq ($(wildcard .git),)
-possible_base_rmq_ref := main
-ifeq ($(possible_base_rmq_ref),$(current_rmq_ref))
-base_rmq_ref := $(current_rmq_ref)
-else
-base_rmq_ref := $(shell \
- (git rev-parse --verify -q main >/dev/null && \
- git rev-parse --verify -q $(possible_base_rmq_ref) >/dev/null && \
- git merge-base --is-ancestor $$(git merge-base main HEAD) $(possible_base_rmq_ref) && \
- echo $(possible_base_rmq_ref)) || \
- echo main)
-endif
-else
-base_rmq_ref := main
-endif
-endif
-export base_rmq_ref
-
-# Repository URL selection.
-#
-# First, we infer other components' location from the current project
-# repository URL, if it's a Git repository:
-# - We take the "origin" remote URL as the base
-# - The current project name and repository name is replaced by the
-# target's properties:
-# eg. rabbitmq-common is replaced by rabbitmq-codegen
-# eg. rabbit_common is replaced by rabbitmq_codegen
-#
-# If cloning from this computed location fails, we fallback to RabbitMQ
-# upstream which is GitHub.
-
-# Macro to transform eg. "rabbit_common" to "rabbitmq-common".
-rmq_cmp_repo_name = $(word 2,$(dep_$(1)))
-
-# Upstream URL for the current project.
-RABBITMQ_COMPONENT_REPO_NAME := $(call rmq_cmp_repo_name,$(PROJECT))
-RABBITMQ_UPSTREAM_FETCH_URL ?= https://github.com/rabbitmq/$(RABBITMQ_COMPONENT_REPO_NAME).git
-RABBITMQ_UPSTREAM_PUSH_URL ?= git@github.com:rabbitmq/$(RABBITMQ_COMPONENT_REPO_NAME).git
-
-# Current URL for the current project. If this is not a Git clone,
-# default to the upstream Git repository.
-ifneq ($(wildcard .git),)
-git_origin_fetch_url := $(shell git config remote.origin.url)
-git_origin_push_url := $(shell git config remote.origin.pushurl || git config remote.origin.url)
-RABBITMQ_CURRENT_FETCH_URL ?= $(git_origin_fetch_url)
-RABBITMQ_CURRENT_PUSH_URL ?= $(git_origin_push_url)
-else
-RABBITMQ_CURRENT_FETCH_URL ?= $(RABBITMQ_UPSTREAM_FETCH_URL)
-RABBITMQ_CURRENT_PUSH_URL ?= $(RABBITMQ_UPSTREAM_PUSH_URL)
-endif
-
-# Macro to replace the following pattern:
-# 1. /foo.git -> /bar.git
-# 2. /foo -> /bar
-# 3. /foo/ -> /bar/
-subst_repo_name = $(patsubst %/$(1)/%,%/$(2)/%,$(patsubst %/$(1),%/$(2),$(patsubst %/$(1).git,%/$(2).git,$(3))))
-
-# Macro to replace both the project's name (eg. "rabbit_common") and
-# repository name (eg. "rabbitmq-common") by the target's equivalent.
-#
-# This macro is kept on one line because we don't want whitespaces in
-# the returned value, as it's used in $(dep_fetch_git_rmq) in a shell
-# single-quoted string.
-dep_rmq_repo = $(if $(dep_$(2)),$(call subst_repo_name,$(PROJECT),$(2),$(call subst_repo_name,$(RABBITMQ_COMPONENT_REPO_NAME),$(call rmq_cmp_repo_name,$(2)),$(1))),$(pkg_$(1)_repo))
-
-dep_rmq_commits = $(if $(dep_$(1)), \
- $(wordlist 3,$(words $(dep_$(1))),$(dep_$(1))), \
- $(pkg_$(1)_commit))
-
-define dep_fetch_git_rmq
- fetch_url1='$(call dep_rmq_repo,$(RABBITMQ_CURRENT_FETCH_URL),$(1))'; \
- fetch_url2='$(call dep_rmq_repo,$(RABBITMQ_UPSTREAM_FETCH_URL),$(1))'; \
- if test "$$$$fetch_url1" != '$(RABBITMQ_CURRENT_FETCH_URL)' && \
- git clone -q -n -- "$$$$fetch_url1" $(DEPS_DIR)/$(call dep_name,$(1)); then \
- fetch_url="$$$$fetch_url1"; \
- push_url='$(call dep_rmq_repo,$(RABBITMQ_CURRENT_PUSH_URL),$(1))'; \
- elif git clone -q -n -- "$$$$fetch_url2" $(DEPS_DIR)/$(call dep_name,$(1)); then \
- fetch_url="$$$$fetch_url2"; \
- push_url='$(call dep_rmq_repo,$(RABBITMQ_UPSTREAM_PUSH_URL),$(1))'; \
- fi; \
- cd $(DEPS_DIR)/$(call dep_name,$(1)) && ( \
- $(foreach ref,$(call dep_rmq_commits,$(1)), \
- git checkout -q $(ref) >/dev/null 2>&1 || \
- ) \
- (echo "error: no valid pathspec among: $(call dep_rmq_commits,$(1))" \
- 1>&2 && false) ) && \
- (test "$$$$fetch_url" = "$$$$push_url" || \
- git remote set-url --push origin "$$$$push_url")
-endef
-
-define dep_fetch_git_rmq-subfolder
- fetch_url1='https://github.com/rabbitmq/rabbitmq-server.git'; \
- fetch_url2='git@github.com:rabbitmq/rabbitmq-server.git'; \
- if [ ! -d $(ERLANG_MK_TMP)/rabbitmq-server ]; then \
- if test "$$$$fetch_url1" != '$(RABBITMQ_CURRENT_FETCH_URL)' && \
- git clone -q -n -- "$$$$fetch_url1" $(ERLANG_MK_TMP)/rabbitmq-server; then \
- fetch_url="$$$$fetch_url1"; \
- push_url='$(call dep_rmq_repo,$(RABBITMQ_CURRENT_PUSH_URL),rabbitmq-server)'; \
- elif git clone -q -n -- "$$$$fetch_url2" $(ERLANG_MK_TMP)/rabbitmq-server; then \
- fetch_url="$$$$fetch_url2"; \
- push_url='$(call dep_rmq_repo,$(RABBITMQ_UPSTREAM_PUSH_URL),rabbitmq-server)'; \
- fi; \
- fi; \
- cd $(ERLANG_MK_TMP)/rabbitmq-server && ( \
- $(foreach ref,$(call dep_rmq_commits,$(1)), \
- git checkout -q $(ref) >/dev/null 2>&1 || \
- ) \
- (echo "error: no valid pathspec among: $(call dep_rmq_commits,$(1))" \
- 1>&2 && false) ) && \
- (test "$$$$fetch_url" = "$$$$push_url" || \
- git remote set-url --push origin "$$$$push_url")
- ln -s $(ERLANG_MK_TMP)/rabbitmq-server/deps/$(call dep_name,$(1)) \
- $(DEPS_DIR)/$(call dep_name,$(1));
-endef
+# We disable autopatching for community plugins as they sit in
+# their own repository and we want to avoid polluting the git
+# status with changes that should not be committed.
+NO_AUTOPATCH += $(RABBITMQ_COMMUNITY)
# --------------------------------------------------------------------
# Component distribution.
@@ -350,7 +176,7 @@ prepare-dist::
@:
# --------------------------------------------------------------------
-# Monorepo-specific settings.
+# RabbitMQ-specific settings.
# --------------------------------------------------------------------
# If the top-level project is a RabbitMQ component, we override
diff --git a/rabbitmq.bzl b/rabbitmq.bzl
index 8c51a2b16f71..c338031934d6 100644
--- a/rabbitmq.bzl
+++ b/rabbitmq.bzl
@@ -55,6 +55,7 @@ ALL_PLUGINS = [
"//deps/rabbitmq_event_exchange:erlang_app",
"//deps/rabbitmq_federation:erlang_app",
"//deps/rabbitmq_federation_management:erlang_app",
+ "//deps/rabbitmq_federation_prometheus:erlang_app",
"//deps/rabbitmq_jms_topic_exchange:erlang_app",
"//deps/rabbitmq_management:erlang_app",
"//deps/rabbitmq_mqtt:erlang_app",
@@ -68,6 +69,7 @@ ALL_PLUGINS = [
"//deps/rabbitmq_sharding:erlang_app",
"//deps/rabbitmq_shovel:erlang_app",
"//deps/rabbitmq_shovel_management:erlang_app",
+ "//deps/rabbitmq_shovel_prometheus:erlang_app",
"//deps/rabbitmq_stomp:erlang_app",
"//deps/rabbitmq_stream:erlang_app",
"//deps/rabbitmq_stream_management:erlang_app",
@@ -189,6 +191,7 @@ def rabbitmq_suite(
"COVERDATA_TO_LCOV_APPS_DIRS": "deps:deps/rabbit/apps",
}.items() + test_env.items()),
deps = [":test_erlang_app"] + deps + runtime_deps,
+ ct_run_extra_args = ["-kernel net_ticktime 5"],
**kwargs
)
return name
@@ -259,6 +262,7 @@ def rabbitmq_integration_suite(
":rabbitmq-for-tests-run",
] + tools,
deps = assumed_deps + deps + runtime_deps,
+ ct_run_extra_args = ["-kernel net_ticktime 5"],
**kwargs
)
@@ -286,14 +290,15 @@ def rabbitmq_integration_suite(
"RABBITMQCTL": "$TEST_SRCDIR/$TEST_WORKSPACE/{}/broker-for-tests-home/sbin/rabbitmqctl".format(package),
"RABBITMQ_PLUGINS": "$TEST_SRCDIR/$TEST_WORKSPACE/{}/broker-for-tests-home/sbin/rabbitmq-plugins".format(package),
"RABBITMQ_QUEUES": "$TEST_SRCDIR/$TEST_WORKSPACE/{}/broker-for-tests-home/sbin/rabbitmq-queues".format(package),
- "RABBITMQ_RUN_SECONDARY": "$(location @rabbitmq-server-generic-unix-3.13//:rabbitmq-run)",
+ "RABBITMQ_RUN_SECONDARY": "$(location @rabbitmq-server-generic-unix-4.0//:rabbitmq-run)",
"LANG": "C.UTF-8",
}.items() + test_env.items()),
tools = [
":rabbitmq-for-tests-run",
- "@rabbitmq-server-generic-unix-3.13//:rabbitmq-run",
+ "@rabbitmq-server-generic-unix-4.0//:rabbitmq-run",
] + tools,
deps = assumed_deps + deps + runtime_deps,
+ ct_run_extra_args = ["-kernel net_ticktime 5"],
**kwargs
)
diff --git a/release-notes/3.13.0.md b/release-notes/3.13.0.md
index 784549200a41..2db013ade808 100644
--- a/release-notes/3.13.0.md
+++ b/release-notes/3.13.0.md
@@ -172,14 +172,15 @@ connect to the same node, or inject a pause, or await a certain condition that i
is in place.
-### TLS Defaults
+### TLS Client (LDAP, Shovels, Federation) Defaults
Starting with Erlang 26, client side [TLS peer certificate chain verification](https://www.rabbitmq.com/docs/ssl#peer-verification) settings are enabled by default in most contexts:
from federation links to shovels to TLS-enabled LDAP client connections.
If using TLS peer certificate chain verification is not practical or necessary, it can be disabled.
Please refer to the docs of the feature in question, for example,
-this one [on TLS-enabled LDAP client](http://rabbitmq.com/docs/ldap/#tls) connections.
+this one [on TLS-enabled LDAP client](http://rabbitmq.com/docs/ldap/#tls) connections,
+two others on [TLS-enabled dynamic shovels](https://www.rabbitmq.com/docs/shovel#tls) and [dynamic shovel URI query parameters](https://www.rabbitmq.com/docs/uri-query-parameters).
### Management Plugin and HTTP API
@@ -232,7 +233,7 @@ Some of it's great features include:
* A reworked table of contents and navigation
* Search over both doc guides and blog content
-**Note**: We hope you enjoy the new website, more improvements are coming soon, we are revising the documentation table of contents that you see now and also adding some navigational topics to help you move around and find the documentation you are looking for faster in the future. We will keep you posted!
+**Note**: We hope you enjoy the new website, more improvements are coming soon, we are revising the documentation table of contents that you see now and also adding some navigational topics to help you move around and find the documentation you are looking for faster in the future. We will keep you posted!
### Core Server
@@ -251,7 +252,7 @@ Some of it's great features include:
that RabbitMQ clusters now **must have a majority of nodes online at all times**, or all client operations will be refused.
Like quorum queues and streams, Khepri uses [RabbitMQ's Raft implementation](https://github.com/rabbitmq/ra) under the hood. With Khepri enabled, all key modern features
- of RabbitMQ will use the same fundamental approach to recovery from failures, relying on a library that passes a [Jepsen test suite](https://github.com/rabbitmq/ra/#safety-verification).
+ of RabbitMQ will use the same fundamental approach to recovery from failures, relying on a library that passes a [Jepsen test suite](https://github.com/rabbitmq/ra/#safety-verification).
Team RabbitMQ intends to make Khepri the default schema database starting with RabbitMQ 4.0.
@@ -259,8 +260,8 @@ Some of it's great features include:
* Messages are now internally stored using a new common heavily AMQP 1.0-influenced container format. This is a major step towards a protocol-agnostic core:
a common format that encapsulates a sum of data types used by the protocols RabbitMQ supports, plus annotations for routng, dead-lettering state,
- and other purposes.
-
+ and other purposes.
+
AMQP 1.0, AMQP 0-9-1, MQTT and STOMP have or will adopt this internal representation in upcoming releases. RabbitMQ Stream protocol already uses the AMQP 1.0 message container
structure internally.
@@ -424,7 +425,7 @@ This release includes all bug fixes shipped in the `3.12.x` series.
enormously large responses.
A couple of relevant queue metrics or state fields were lifted to the top level.
-
+
**This is a potentially breaking change**.
Note that [Prometheus](https://www.rabbitmq.com/docs/prometheus) is the recommended option for monitoring,
diff --git a/release-notes/3.13.7.md b/release-notes/3.13.7.md
new file mode 100644
index 000000000000..93c23fcfdc05
--- /dev/null
+++ b/release-notes/3.13.7.md
@@ -0,0 +1,162 @@
+## RabbitMQ 3.13.7
+
+RabbitMQ `3.13.7` is a maintenance release in the `3.13.x` [release series](https://www.rabbitmq.com/release-information).
+
+This upgrade is **highly recommended** to all users currently on earlier `3.13.x` series and
+in particular between `3.13.3` and `3.13.5`, inclusive.
+
+Starting June 1st, 2024, community support for this series will only be provided to [regularly contributing users](https://github.com/rabbitmq/rabbitmq-server/blob/main/COMMUNITY_SUPPORT.md) and those
+who hold a valid [commercial support license](https://tanzu.vmware.com/rabbitmq/oss).
+
+Please refer to the upgrade section from the [3.13.0 release notes](https://github.com/rabbitmq/rabbitmq-server/releases/tag/v3.13.0)
+if upgrading from a version prior to 3.13.0.
+
+This release requires Erlang 26 and supports Erlang versions up to `26.2.x`.
+[RabbitMQ and Erlang/OTP Compatibility Matrix](https://www.rabbitmq.com/docs/which-erlang) has more details on
+Erlang version requirements for RabbitMQ.
+
+
+### Minimum Supported Erlang Version
+
+As of 3.13.0, RabbitMQ requires Erlang 26. Nodes **will fail to start** on older Erlang releases.
+
+Users upgrading from 3.12.x (or older releases) on Erlang 25 to 3.13.x on Erlang 26
+(both RabbitMQ *and* Erlang are upgraded at the same time) **must** consult
+the [v3.12.0 release notes](https://github.com/rabbitmq/rabbitmq-server/releases/tag/v3.12.0) and [v3.13.0 release notes](https://github.com/rabbitmq/rabbitmq-server/releases/tag/v3.13.0) first.
+
+
+## Changes Worth Mentioning
+
+Release notes can be found on GitHub at [rabbitmq-server/release-notes](https://github.com/rabbitmq/rabbitmq-server/tree/v3.13.x/release-notes).
+
+
+### Core Broker
+
+#### Bug Fixes
+
+ * Streams recover better from certain node process failures that may leave behind orphaned segment files
+ (that is, segment files that do not have a corresponding index file) or index files without a corresponding
+ segment file.
+
+ Kudos to @sysupbda for providing detailed reproduction steps and verifying the fix in the affected environment.
+
+ GitHub issue: [#12073](https://github.com/rabbitmq/rabbitmq-server/pull/12073)
+
+ * Config file [peer discovery](https://www.rabbitmq.com/docs/cluster-formation) now logs warnings for certain common user mistakes.
+
+ GitHub issues: [#11586](https://github.com/rabbitmq/rabbitmq-server/issues/11586), [#11898](https://github.com/rabbitmq/rabbitmq-server/pull/11898)
+
+ * Queue declaration operations now return more useful errors when Khepri is enabled and there's only a minority
+ of nodes online.
+
+ GitHub issues: [#12020](https://github.com/rabbitmq/rabbitmq-server/pull/12020), [#11991](https://github.com/rabbitmq/rabbitmq-server/pull/11991)
+
+ * Logging is now more defensive around exception handling. Previously a (very rare) logger exception could
+ lead to the `amq.rabbitmq.log` handler and exchange to be removed.
+
+ Contributed by @gomoripeti.
+
+ GitHub issue: [#12107](https://github.com/rabbitmq/rabbitmq-server/pull/12107)
+
+ * `rabbitmq-upgrade revive` unintentionally tried to perform operations on replicas that are not local to the node.
+ This could result in an exceptions some of which were not handled and the command failed.
+ Re-running the command usually helped.
+
+ GitHub issue: [#12038](https://github.com/rabbitmq/rabbitmq-server/pull/12038)
+
+
+#### Enhancements
+
+ * Enabling an experimental feature flag now involves an explicit confirmation.
+
+ GitHub issue: [#12059](https://github.com/rabbitmq/rabbitmq-server/pull/12059)
+
+ * Khepri projections are registered in a safer manner during node boot.
+
+ GitHub issue: [#11837](https://github.com/rabbitmq/rabbitmq-server/pull/11837)
+
+
+### MQTT
+
+#### Bug Fixes
+
+ * Clients that use JWT tokens are now disconnected when their token expires. Previously all newly attempted
+ operations with an expired token would be rejected but a completely passive connection was not closed.
+
+ GitHub issue: [#11869](https://github.com/rabbitmq/rabbitmq-server/pull/11869)
+
+#### Enhancements
+
+ * Connection that provide incorrect credentials now closed with a delay, just like for several
+ other protocols supported by RabbitMQ, as a throttling mechanism.
+
+ GitHub issue: [#11906](https://github.com/rabbitmq/rabbitmq-server/pull/11906)
+
+
+### CLI Tools
+
+#### Bug Fixes
+
+ * When the Khepri feature flag is not enabled, `rabbitmq-diagnostics metadata_store_status` will not try to retrieve
+ and display its status.
+
+ GitHub issue: [#12103](https://github.com/rabbitmq/rabbitmq-server/pull/12103)
+
+#### Enhancements
+
+ * `rabbitmq-upgrade await_quorum_plus_one` now produces more log messages when the operation times out.
+ When Khepri is enabled, it now also treats Khepri as a critical Raft-based component that may depend on replica quorum
+ just like queues and streams do.
+
+ GitHub issue: [#12117](https://github.com/rabbitmq/rabbitmq-server/pull/12117)
+
+
+### Management Plugin
+
+#### Bug Fixes
+
+ * When no virtual host limits are set, the limits collection was returned as a JSON array (and not a JSON object)
+ by `GET /api/vhost-limits`.
+
+ GitHub issue: [#12084](https://github.com/rabbitmq/rabbitmq-server/pull/12084)
+
+#### Enhancements
+
+ * `GET /api/queues/quorum/{vhost}/{name}/status` is a new endpoint that allows clients to retrieve several key quorum queue
+ replica and Raft metrics.
+
+ Contributed by @SimonUnge.
+
+ GitHub issue: [#12072](https://github.com/rabbitmq/rabbitmq-server/pull/12072)
+
+
+### Shovel Plugin
+
+#### Bug Fixes
+
+ * `GET /api/shovels/{vhost}/{name}` now correctly returns a single shovel instead of all shovels in the target
+ virtual host.
+
+ GitHub issue: [#12040](https://github.com/rabbitmq/rabbitmq-server/issues/12040)
+
+
+### Consistent Hashing Exchange Plugin
+
+#### Bug Fixes
+
+ * For an exchange declared with a `hash-header`, publishing failed with an exception when the client (usually unintentionally)
+ did not set that header.
+
+ GitHub issue: [#11808](https://github.com/rabbitmq/rabbitmq-server/pull/11808)
+
+
+### Dependency Changes
+
+ * Osiris was [upgraded to `1.8.3`](https://github.com/rabbitmq/osiris/releases)
+ * Cuttlefish was [upgraded to `3.4.0`](https://github.com/Kyorai/cuttlefish/releases)
+ * `observer_cli` was [upgraded to `1.7.5`](https://github.com/zhongwencool/observer_cli/releases)
+
+## Source Code Archives
+
+To obtain source code of the entire distribution, please download the archive named `rabbitmq-server-3.13.7.tar.xz`
+instead of the source tarball produced by GitHub.
diff --git a/release-notes/4.0.0.md b/release-notes/4.0.0.md
deleted file mode 100644
index 03322c7ac825..000000000000
--- a/release-notes/4.0.0.md
+++ /dev/null
@@ -1,92 +0,0 @@
-## RabbitMQ 4.0.0-beta.3
-
-RabbitMQ `4.0.0-beta.3` is a preview of a new major release.
-
-Starting June 1st, 2024, community support for this series will only be provided to [regularly contributing users](https://github.com/rabbitmq/rabbitmq-server/blob/main/COMMUNITY_SUPPORT.md) and those who hold a valid [commercial support license](https://tanzu.vmware.com/rabbitmq/oss).
-
-## Highlights
-
-Some key improvements in this release are listed below.
-
- * [Khepri](https://www.youtube.com/watch?v=whVqpgvep90), an [alternative schema data store](https://github.com/rabbitmq/rabbitmq-server/pull/7206) developed to replace Mnesia,
- has matured
- * AMQP 1.0 is now a core protocol that is always enabled. Its plugin is now a no-op that only exists to simplify upgrades.
- * The AMQP 1.0 implementation is now significantly more efficient: its peak throughput is [more than double than that of 3.13.x](https://github.com/rabbitmq/rabbitmq-server/pull/9022)
- on some workloads
- * [AMQP 1.0 clients now can manage topologies](https://github.com/rabbitmq/rabbitmq-server/pull/10559) similarly to how AMQP 0-9-1 clients do it
- * The AMQP 1.0 convention (address format) used for interacting with with AMQP 0-9-1 entities [is now easier to reason about](https://github.com/rabbitmq/rabbitmq-server/pull/11618)
- * Mirroring (replication) of classic queues [was removed](https://github.com/rabbitmq/rabbitmq-server/pull/9815) after several years of deprecation. For replicated messaging data types,
- use quorum queues and/or streams. Non-replicated classic queues remain and their development continues
- * Classic queue [storage efficiency improvements](https://github.com/rabbitmq/rabbitmq-server/pull/11112), in particular recovery time and storage of multi-MiB messages
- * Nodes with multiple enabled plugins and little on disk data to recover now [start up to 20-30% faster](https://github.com/rabbitmq/rabbitmq-server/pull/10989)
- * CQv1, [the original classic queue storage layer, was removed](https://github.com/rabbitmq/rabbitmq-server/pull/10656) except for the part that's necessary for upgrades
- * Several I/O-related metrics are dropped, they should be [monitored at the infrastructure and kernel layers](https://www.rabbitmq.com/docs/monitoring#system-metrics)
-
-See Compatibility Notes below to learn about **breaking or potentially breaking changes** in this release.
-
-## Release Artifacts
-
-RabbitMQ releases are distributed via [GitHub](https://github.com/rabbitmq/rabbitmq-server/releases).
-[Debian](https://rabbitmq.com/install-debian.html) and [RPM packages](https://rabbitmq.com/install-rpm.html) are available via Cloudsmith mirrors.
-
-[Community Docker image](https://hub.docker.com/_/rabbitmq/), [Chocolatey package](https://community.chocolatey.org/packages/rabbitmq), and the [Homebrew formula](https://www.rabbitmq.com/docs/install-homebrew)
-are other installation options. They are updated with a delay.
-
-
-## Erlang/OTP Compatibility Notes
-
-This release [requires Erlang 26.2](https://www.rabbitmq.com/docs/which-erlang).
-
-[Provisioning Latest Erlang Releases](https://www.rabbitmq.com/docs/which-erlang#erlang-repositories) explains
-what package repositories and tools can be used to provision latest patch versions of Erlang 26.x.
-
-
-## Upgrading to 4.0
-
-### Documentation guides on upgrades
-
-See the [Upgrading guide](https://www.rabbitmq.com/docs/upgrade) for documentation on upgrades and [GitHub releases](https://github.com/rabbitmq/rabbitmq-server/releases)
-for release notes of individual releases.
-
-This release series only supports upgrades from `3.13.x`.
-
-This release requires **all feature flags** in the 3.x series (specifically `3.13.x`) to be enabled before upgrading,
-there is no upgrade path from 3.12.14 (or a later patch release) straight to `4.0.0`.
-
-### Required Feature Flags
-
-This release does not [graduate](https://www.rabbitmq.com/docs/feature-flags#graduation) any feature flags.
-
-However, all users are highly encouraged to enable all feature flags before upgrading to this release from
-3.13.x.
-
-### Mixed version cluster compatibility
-
-RabbitMQ 4.0.0 nodes can run alongside `3.13.x` nodes. `4.0.x`-specific features can only be made available when all nodes in the cluster
-upgrade to 4.0.0 or a later patch release in the new series.
-
-While operating in mixed version mode, some aspects of the system may not behave as expected. The list of known behavior changes will be covered in future updates.
-Once all nodes are upgraded to 4.0.0, these irregularities will go away.
-
-Mixed version clusters are a mechanism that allows rolling upgrade and are not meant to be run for extended
-periods of time (no more than a few hours).
-
-### Recommended Post-upgrade Procedures
-
-TBD
-
-
-## Changes Worth Mentioning
-
-TBD
-
-
-### Dependency Changes
-
- * Ra was [upgraded to `2.13.5`](https://github.com/rabbitmq/ra/releases)
- * Khepri was [upgraded to `0.14.0`](https://github.com/rabbitmq/khepri/releases)
-
-## Source Code Archives
-
-To obtain source code of the entire distribution, please download the archive named `rabbitmq-server-4.0.0-beta.3.tar.xz`
-instead of the source tarball produced by GitHub.
diff --git a/release-notes/4.0.1.md b/release-notes/4.0.1.md
new file mode 100644
index 000000000000..a9b17b375c1a
--- /dev/null
+++ b/release-notes/4.0.1.md
@@ -0,0 +1,386 @@
+## RabbitMQ 4.0.1
+
+RabbitMQ `4.0` is a new major release.
+
+Starting June 1st, 2024, community support for this series will only be provided to [regularly contributing users](https://github.com/rabbitmq/rabbitmq-server/blob/main/COMMUNITY_SUPPORT.md)
+and those who hold a valid [commercial support license](https://tanzu.vmware.com/rabbitmq/oss).
+
+## Highlights
+
+Some key improvements in this release are listed below.
+
+ * [Khepri](https://www.youtube.com/watch?v=whVqpgvep90), an [alternative schema data store](https://github.com/rabbitmq/rabbitmq-server/pull/7206) developed to replace Mnesia,
+ has matured and is now fully supported (it previously was an experimental feature)
+ * [AMQP 1.0 is now a core protocol](https://www.rabbitmq.com/blog/2024/08/05/native-amqp) that is always enabled. Its plugin is now a no-op that only exists to simplify upgrades.
+ * The AMQP 1.0 implementation is now significantly more efficient: its peak throughput is [more than double than that of 3.13.x](https://www.rabbitmq.com/blog/2024/08/21/amqp-benchmarks)
+ on some workloads
+ * Efficient sub-linear [quorum queue recovery on node startup using checkpoints](https://www.rabbitmq.com/blog/2024/08/28/quorum-queues-in-4.0#faster-recovery-of-long-queues)
+ * Quorum queues now [support priorities](https://www.rabbitmq.com/blog/2024/08/28/quorum-queues-in-4.0#message-priorities) (but not exactly the same way as classic queues)
+ * [AMQP 1.0 clients now can manage topologies](https://github.com/rabbitmq/rabbitmq-server/pull/10559) similarly to how AMQP 0-9-1 clients do it
+ * The AMQP 1.0 convention (address format) used for interacting with with AMQP 0-9-1 entities [is now easier to reason about](https://www.rabbitmq.com/docs/next/amqp#addresses)
+ * Mirroring (replication) of classic queues [was removed](https://github.com/rabbitmq/rabbitmq-server/pull/9815) after several years of deprecation. For replicated messaging data types,
+ use quorum queues and/or streams. Non-replicated classic queues remain and their development continues
+ * Classic queue [storage efficiency improvements](https://github.com/rabbitmq/rabbitmq-server/pull/11112), in particular recovery time and storage of multi-MiB messages
+ * Nodes with multiple enabled plugins and little on disk data to recover now [start up to 20-30% faster](https://github.com/rabbitmq/rabbitmq-server/pull/10989)
+ * New exchange type: [Local Random Exchange](https://rabbitmq.com/docs/next/local-random-exchange)
+
+See Compatibility Notes below to learn about **breaking or potentially breaking changes** in this release.
+
+## Breaking Changes and Compatibility Notes
+
+### Classic Queues is Now a Non-Replicated Queue Type
+
+After three years of deprecation, classic queue mirroring was completely removed in this version.
+[Quorum queues](https://www.rabbitmq.com/docs/quorum-queues) and [streams](https://www.rabbitmq.com/docs/streams) are two mature
+replicated data types offered by RabbitMQ 4.x. Classic queues continue being supported without any breaking changes
+for client libraries and applications but they are now a non-replicated queue type.
+
+After an upgrade to 4.0, all classic queue mirroring-related parts of policies will have no effect.
+Classic queues will continue to work like before but with only one replica.
+
+Clients will be able to connect to any node to publish to and consume from any non-replicated classic queues.
+Therefore applications will be able to use the same classic queues as before.
+
+See [Mirrored Classic Queues Migration to Quorum Queues](https://www.rabbitmq.com/docs/migrate-mcq-to-qq) for guidance
+on how to migrate to quorum queues for the parts of the system that really need to use replication.
+
+### Quorum Queues Now Have a Default Redelivery Limit
+
+Quorum queues now have a default [redelivery limit](https://www.rabbitmq.com/docs/next/quorum-queues#poison-message-handling) set to `20`.
+Messages that are redelivered 20 times or more will be [dead-lettered](https://www.rabbitmq.com/docs/dlx) or dropped (removed).
+
+This limit is necessary to protect nodes from consumers that run into infinite fail-requeue-fail-requeue loops. Such
+consumers can drive a node out of disk space by making a quorum queue Raft log grow forever without allowing compaction
+of older entries to happen.
+
+If 20 deliveries per message is a common scenario for a queue, a dead-lettering target or a higher limit must be configured
+for such queues. The recommended way of doing that is via a [policy](https://www.rabbitmq.com/docs/parameters#policies).
+See the [Position Messaging Handling](https://www.rabbitmq.com/docs/next/quorum-queues#poison-message-handling) section
+in the quorum queue documentation guide.
+
+Note that increasing the limit is recommended against: usually the presence of messages that have been redelivered 20 times or more suggests
+that a consumer has entered a fail-requeue-fail-requeue loop, in which case even a much higher limit
+won't help avoid the dead-lettering.
+
+For specific cases where the RabbitMQ configuration cannot be updated to include a dead letter policy
+the delivery limit can be disabled by setting a delivery limit configuration of `-1`. However, the RabbitMQ team
+strongly recommends keeping the delivery limit in place to ensure cluster availability isn't
+accidentally sacrificed.
+
+### CQv1 Storage Implementation was Removed
+
+CQv1, [the original classic queue storage layer, was removed](https://github.com/rabbitmq/rabbitmq-server/pull/10656)
+except for the part that's necessary for upgrades to CQv2 (the 2nd generation).
+
+In case `rabbitmq.conf` explicitly sets `classic_queue.default_version` to `1` like so
+
+``` ini
+# this configuration value is no longer supported,
+# remove this line or set the version to 2
+classic_queue.default_version = 1
+```
+
+nodes will now fail to start. Removing the line will make the node start and perform
+the migration from CQv1 to CQv2.
+
+### Settings `cluster_formation.randomized_startup_delay_range.*` were Removed
+
+The following two deprecated `rabbitmq.conf` settings were [removed](https://github.com/rabbitmq/rabbitmq-server/pull/12050):
+```
+cluster_formation.randomized_startup_delay_range.min
+cluster_formation.randomized_startup_delay_range.max
+```
+RabbitMQ 4.0 will fail to boot if these settings are configured in `rabbitmq.conf`.
+
+### Several Disk I/O-Related Metrics were Removed
+
+Several I/O-related metrics are dropped, they should be [monitored at the infrastructure and kernel layers](https://www.rabbitmq.com/docs/monitoring#system-metrics)
+
+### Default Maximum Message Size Reduced to 16 MiB
+
+Default maximum message size is reduced to 16 MiB (from 128 MiB).
+
+The limit can be increased via a `rabbitmq.conf` setting:
+
+```ini
+# 32 MiB
+max_message_size = 33554432
+```
+
+However, it is recommended that such large multi-MiB messages are put into a blob store, and their
+IDs are passed around in messages instead of the entire payload.
+
+### AMQP 1.0
+
+RabbitMQ 3.13 `rabbitmq.conf` setting `rabbitmq_amqp1_0.default_vhost` is unsupported in RabbitMQ 4.0.
+
+Instead `default_vhost` will be used to determine the default vhost an AMQP 1.0 client connects to(i.e. when the AMQP 1.0 client
+does not define the vhost in the `hostname` field of the `open` frame).
+
+Starting with RabbitMQ 4.0, RabbitMQ strictly validates that
+[delivery annotations](https://docs.oasis-open.org/amqp/core/v1.0/os/amqp-core-messaging-v1.0-os.html#type-delivery-annotations),
+[message annotations](https://docs.oasis-open.org/amqp/core/v1.0/os/amqp-core-messaging-v1.0-os.html#type-message-annotations), and
+[footer](https://docs.oasis-open.org/amqp/core/v1.0/os/amqp-core-messaging-v1.0-os.html#type-footer) contain only
+[non-reserved annotation keys](https://docs.oasis-open.org/amqp/core/v1.0/os/amqp-core-messaging-v1.0-os.html#type-annotations).
+As a result, clients can only send symbolic keys that begin with `x-`.
+
+### MQTT
+
+RabbitMQ 3.13 [rabbitmq.conf](https://www.rabbitmq.com/docs/configure#config-file) settings `mqtt.default_user`, `mqtt.default_password`,
+and `amqp1_0.default_user` are unsupported in RabbitMQ 4.0.
+
+Instead, set the new RabbitMQ 4.0 settings `anonymous_login_user` and `anonymous_login_pass` (both values default to `guest`).
+For production scenarios, [disallow anonymous logins](https://www.rabbitmq.com/docs/next/production-checklist#anonymous-login).
+
+### TLS Client (LDAP, Shovels, Federation) Defaults
+
+Starting with Erlang 26, client side [TLS peer certificate chain verification](https://www.rabbitmq.com/docs/ssl#peer-verification) settings are enabled by default in most contexts:
+from federation links to shovels to TLS-enabled LDAP client connections.
+
+If using TLS peer certificate chain verification is not practical or necessary, it can be disabled.
+Please refer to the docs of the feature in question, for example,
+this one [on TLS-enabled LDAP client](http://rabbitmq.com/docs/ldap/#tls) connections,
+two others on [TLS-enabled dynamic shovels](https://www.rabbitmq.com/docs/shovel#tls) and [dynamic shovel URI query parameters](https://www.rabbitmq.com/docs/uri-query-parameters).
+
+### Shovels
+
+RabbitMQ Shovels will be able connect to a RabbitMQ 4.0 node via AMQP 1.0 only when the Shovel runs on a RabbitMQ node >= `3.13.7`.
+
+TLS-enabled Shovels will be affected by the TLS client default changes in Erlang 26 (see above).
+
+
+## Erlang/OTP Compatibility Notes
+
+This release [requires Erlang 26.2](https://www.rabbitmq.com/docs/which-erlang).
+
+[Provisioning Latest Erlang Releases](https://www.rabbitmq.com/docs/which-erlang#erlang-repositories) explains
+what package repositories and tools can be used to provision latest patch versions of Erlang 26.x.
+
+
+## Release Artifacts
+
+RabbitMQ releases are distributed via [GitHub](https://github.com/rabbitmq/rabbitmq-server/releases).
+[Debian](https://rabbitmq.com/docs/install-debian/) and [RPM packages](https://rabbitmq.com/docs/install-rpm/) are available via
+repositories maintained by the RabbitMQ Core Team.
+
+[Community Docker image](https://hub.docker.com/_/rabbitmq/), [Chocolatey package](https://community.chocolatey.org/packages/rabbitmq), and the [Homebrew formula](https://www.rabbitmq.com/docs/install-homebrew)
+are other installation options. They are updated with a delay.
+
+### Known Issue: Incorrect Version in Generic Binary Builds
+
+Generic binary builds of `4.0.1` incorrectly report their version as `4.0.0+2`. This also applies to plugin versions. This was [addressed in `4.0.2`](https://github.com/rabbitmq/rabbitmq-server/releases/tag/v4.0.2).
+
+Other artifacts (Debian and RPM packages, the Windows installer) are not affected.
+
+
+## Upgrading to 4.0
+
+### Documentation guides on upgrades
+
+See the [Upgrading guide](https://www.rabbitmq.com/docs/upgrade) for documentation on upgrades and [GitHub releases](https://github.com/rabbitmq/rabbitmq-server/releases)
+for release notes of individual releases.
+
+This release series only supports upgrades from `3.13.x`.
+
+This release requires **all feature flags** in the 3.x series (specifically `3.13.x`) to be enabled before upgrading,
+there is no upgrade path from 3.12.14 (or a later patch release) straight to `4.0.0`.
+
+### Required Feature Flags
+
+This release [graduates](https://www.rabbitmq.com/docs/feature-flags#graduation) all feature flags introduced up to `3.13.0`.
+
+All users must enable all stable [feature flags] before upgrading to 4.0 from
+the latest available 3.13.x patch release.
+
+### Mixed version cluster compatibility
+
+RabbitMQ 4.0.0 nodes can run alongside `3.13.x` nodes. `4.0.x`-specific features can only be made available when all nodes in the cluster
+upgrade to 4.0.0 or a later patch release in the new series.
+
+While operating in mixed version mode, some aspects of the system may not behave as expected. The list of known behavior changes will be covered in future updates.
+Once all nodes are upgraded to 4.0.0, these irregularities will go away.
+
+Mixed version clusters are a mechanism that allows rolling upgrade and are not meant to be run for extended
+periods of time (no more than a few hours).
+
+### Recommended Post-upgrade Procedures
+
+#### Configure Dead Lettering or Increase the Limit for Frequently Redelivered Messages
+
+In environments where messages can experience 20 redeliveries, the affected queues should have [dead lettering](https://www.rabbitmq.com/docs/dlx)
+configured (usually via a [policy](https://www.rabbitmq.com/docs/parameters#policies)) to make sure
+that messages that are redelivered 20 times are moved to a separate queue (or stream) instead of
+being dropped (removed) by the [crash-requeue-redelivery loop protection mechanism](https://www.rabbitmq.com/docs/next/quorum-queues#poison-message-handling).
+
+Alternatively, the limit can be [increased](https://www.rabbitmq.com/docs/next/quorum-queues#poison-message-handling) using a policy.
+This option is recommended against: usually the presence of messages that have been redelivered 20 times or more suggests
+that a consumer has entered a fail-requeue-fail-requeue loop, in which case even a much higher limit
+won't help avoid the dead-lettering.
+
+
+## Changes Worth Mentioning
+
+This section is incomplete and will be expanded as 4.0 approaches its release candidate stage.
+
+### Core Server
+
+#### Enhancements
+
+ * Efficient sub-linear quorum queue recovery on node startup using checkpoints.
+
+ GitHub issue: [#10637](https://github.com/rabbitmq/rabbitmq-server/pull/10637)
+
+ * Classic queue storage v2 (CQv2) optimizations. For example, CQv2 recovery time on node boot
+ is now twice as fast for some data sets.
+
+ GitHub issue: [#11112](https://github.com/rabbitmq/rabbitmq-server/pull/11112)
+
+ * Node startup time improvements. For some environments, nodes with very small on disk data sets
+ now start about 25% quicker.
+
+ GitHub issue: [#10989](https://github.com/rabbitmq/rabbitmq-server/pull/10989)
+
+ * Quorum queues now support [priorities](https://www.rabbitmq.com/docs/next/quorum-queues#priorities). However,
+ there are difference with how priorities work in classic queues.
+
+ GitHub issue: [#10637](https://github.com/rabbitmq/rabbitmq-server/pull/10637)
+
+ * Per-message metadata stored in the quorum queue Raft log now uses less disk space.
+
+ GitHub issue: [#8261](https://github.com/rabbitmq/rabbitmq-server/issues/8261)
+
+ * Single Active Consumer (SAC) implementation of quorum queues now [respects](https://www.rabbitmq.com/blog/2024/08/28/quorum-queues-in-4.0#consumer-priorities-combined-with-single-active-consumer) consumer priorities.
+
+ GitHub issue: [#8261](https://github.com/rabbitmq/rabbitmq-server/issues/8261)
+
+ * `rabbitmq.conf` now supports [encrypted values](https://www.rabbitmq.com/docs/next/configure#configuration-encryption)
+ with a prefix:
+
+ ``` ini
+ default_user = bunnies-444
+ default_pass = encrypted:F/bjQkteQENB4rMUXFKdgsJEpYMXYLzBY/AmcYG83Tg8AOUwYP7Oa0Q33ooNEpK9
+ ```
+
+ GitHub issue: [#11989](https://github.com/rabbitmq/rabbitmq-server/pull/11989)
+
+ * All feature flags up to `3.13.0` have [graduated](https://www.rabbitmq.com/docs/feature-flags#graduation) and are now mandatory.
+
+ GitHub issue: [#11659](https://github.com/rabbitmq/rabbitmq-server/pull/11659)
+
+ * Quorum queues now use a default [redelivery limit](https://www.rabbitmq.com/docs/next/quorum-queues#poison-message-handling) of 20.
+
+ GitHub issue: [#11937](https://github.com/rabbitmq/rabbitmq-server/pull/11937)
+
+ * `queue_master_locator` queue setting has been deprecated in favor of `queue_leader_locator` used by quorum queues
+ and streams.
+
+ GitHub issue: [#10702](https://github.com/rabbitmq/rabbitmq-server/issues/10702)
+
+
+### AMQP 1.0
+
+#### Bug Fixes
+
+ * AMQP 0-9-1 to AMQP 1.0 string data type conversion improvements.
+
+ GitHub issue: [#11715](https://github.com/rabbitmq/rabbitmq-server/pull/11715)
+
+#### Enhancements
+
+ * [AMQP 1.0 is now a core protocol](https://www.rabbitmq.com/blog/2024/08/05/native-amqp) that is always enabled.
+ Its plugin is now a no-op that only exists to simplify upgrades.
+
+ GitHub issues: [#9022](https://github.com/rabbitmq/rabbitmq-server/pull/9022), [#10662](https://github.com/rabbitmq/rabbitmq-server/pull/10662)
+
+ * The AMQP 1.0 implementation is now significantly more efficient: its peak throughput is [more than double than that of 3.13.x](https://www.rabbitmq.com/blog/2024/08/21/amqp-benchmarks)
+ on some workloads.
+
+ GitHub issue: [#9022](https://github.com/rabbitmq/rabbitmq-server/pull/9022)
+
+ * For AMQP 1.0, [resource alarms]() only block inbound `TRANSFER` frames instead of blocking all traffic.
+
+ GitHub issue: [#9022](https://github.com/rabbitmq/rabbitmq-server/pull/9022)
+
+ * AMQP 1.0 clients now can manage topologies (queues, exchanges, bindings).
+
+ GitHub issue: [#10559](https://github.com/rabbitmq/rabbitmq-server/pull/10559)
+
+ * AMQP 1.0 implementation now supports a new (v2) address format for referencing queues, exchanges, and so on.
+
+ GitHub issues: [#11604](https://github.com/rabbitmq/rabbitmq-server/pull/11604), [#11618](https://github.com/rabbitmq/rabbitmq-server/pull/11618)
+
+ * AMQP 1.0 implementation now supports consumer priorities.
+
+ GitHub issue: [#11705](https://github.com/rabbitmq/rabbitmq-server/pull/11705)
+
+ * Client-provided connection name will now be logged for AMQP 1.0 connections.
+
+ GitHub issue: [#11958](https://github.com/rabbitmq/rabbitmq-server/issues/11958)
+
+
+### Streams
+
+#### Enhancements
+
+ * Stream filtering is now supported for AMQP 1.0 clients.
+
+ GitHub issue: [#10098](https://github.com/rabbitmq/rabbitmq-server/pull/10098)
+
+
+### Prometheus Plugin
+
+#### Enhancements
+
+ * [Detailed memory breakdown](https://www.rabbitmq.com/docs/memory-use) metrics are now exposed via the Prometheus scraping endpoint.
+
+ GitHub issue: [#11743](https://github.com/rabbitmq/rabbitmq-server/issues/11743)
+
+ * New per-exchange and per-queue metrics.
+
+ Contributed by @LoisSotoLopez.
+
+ GitHub issue: [#11559](https://github.com/rabbitmq/rabbitmq-server/pull/11559)
+
+ * Shovel and Federation metrics are now available via two new plugins: `rabbitmq_shovel_prometheus` and `rabbitmq_federation_prometheus`.
+
+ Contributed by @SimonUnge.
+
+ GitHub issue: [#11942](https://github.com/rabbitmq/rabbitmq-server/pull/11942)
+
+
+### Shovel Plugin
+
+#### Enhancements
+
+ * Shovels now can be configured to use pre-declared topologies. This is primarily useful in environments where
+ schema definition comes from [definitions](https://www.rabbitmq.com/docs/definitions).
+
+ GitHub issue: [#10501](https://github.com/rabbitmq/rabbitmq-server/issues/10501)
+
+
+### Local Random Exchange Plugin
+
+This is an initial release that includes [Local Random Exchange](https://www.rabbitmq.com/docs/next/local-random-exchange).
+
+GitHub issues: [#8334](https://github.com/rabbitmq/rabbitmq-server/pull/8334), [#10091](https://github.com/rabbitmq/rabbitmq-server/pull/10091).
+
+
+### STOMP Plugin
+
+#### Enhancements
+
+ * STOMP now supports consumer priorities.
+
+ GitHub issue: [#11947](https://github.com/rabbitmq/rabbitmq-server/pull/11947)
+
+
+### Dependency Changes
+
+ * Ra was [upgraded to `2.14.0`](https://github.com/rabbitmq/ra/releases)
+ * Khepri was [upgraded to `0.16.0`](https://github.com/rabbitmq/khepri/releases)
+ * Cuttlefish was [upgraded to `3.4.0`](https://github.com/Kyorai/cuttlefish/releases)
+
+## Source Code Archives
+
+To obtain source code of the entire distribution, please download the archive named `rabbitmq-server-4.0.1.tar.xz`
+instead of the source tarball produced by GitHub.
diff --git a/release-notes/4.0.2.md b/release-notes/4.0.2.md
new file mode 100644
index 000000000000..c2f7b67801c3
--- /dev/null
+++ b/release-notes/4.0.2.md
@@ -0,0 +1,42 @@
+## RabbitMQ 4.0.2
+
+RabbitMQ `4.0.2` is a maintenance release in the `4.0.x` [release series](https://www.rabbitmq.com/release-information).
+
+Starting June 1st, 2024, community support for this series will only be provided to [regularly contributing users](https://github.com/rabbitmq/rabbitmq-server/blob/main/COMMUNITY_SUPPORT.md) and those
+who hold a valid [commercial support license](https://tanzu.vmware.com/rabbitmq/oss).
+
+Please refer to the upgrade section from the [4.0 release notes](https://github.com/rabbitmq/rabbitmq-server/releases/tag/v4.0.1)
+if upgrading from a version prior to 4.0.
+
+This release requires Erlang 26 and supports Erlang versions up to `26.2.x`.
+[RabbitMQ and Erlang/OTP Compatibility Matrix](https://www.rabbitmq.com/docs/which-erlang) has more details on
+Erlang version requirements for RabbitMQ.
+
+
+### Minimum Supported Erlang Version
+
+As of 4.0, RabbitMQ requires Erlang 26. Nodes **will fail to start** on older Erlang releases.
+
+
+## Changes Worth Mentioning
+
+Release notes can be found on GitHub at [rabbitmq-server/release-notes](https://github.com/rabbitmq/rabbitmq-server/tree/v4.0.x/release-notes).
+
+
+### Generic Binary Package
+
+#### Bug Fixes
+
+ * Generic binary packages used an incorrect version (`4.0.0+2` instead of `4.0.1`) at build time
+
+ GitHub issue: [#12339](https://github.com/rabbitmq/rabbitmq-server/issues/12339)
+
+
+### Dependency Changes
+
+None in this release.
+
+## Source Code Archives
+
+To obtain source code of the entire distribution, please download the archive named `rabbitmq-server-4.0.2.tar.xz`
+instead of the source tarball produced by GitHub.
diff --git a/release-notes/4.1.0.md b/release-notes/4.1.0.md
new file mode 100644
index 000000000000..432b4fd641f9
--- /dev/null
+++ b/release-notes/4.1.0.md
@@ -0,0 +1,5 @@
+## RabbitMQ 4.1.0
+
+## Potential incompatibilities
+
+* The default MQTT [Maximum Packet Size](https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html#_Toc3901086) changed from 256 MiB to 16 MiB. This default can be overriden by [configuring](https://www.rabbitmq.com/docs/configure#config-file) `mqtt.max_packet_size_authenticated`. Note that this value must not be greater than `max_message_size` (which also defaults to 16 MiB).
diff --git a/scripts/bazel/rabbitmq-run.bat b/scripts/bazel/rabbitmq-run.bat
index 0970de67d4d9..8e1f08b65318 100644
--- a/scripts/bazel/rabbitmq-run.bat
+++ b/scripts/bazel/rabbitmq-run.bat
@@ -81,10 +81,6 @@ set RABBITMQ_PLUGINS_EXPAND_DIR=%NODE_TMPDIR%\plugins
set RABBITMQ_FEATURE_FLAGS_FILE=%NODE_TMPDIR%\feature_flags
set RABBITMQ_ENABLED_PLUGINS_FILE=%NODE_TMPDIR%\enabled_plugins
-if not defined RABBITMQ_SERVER_START_ARGS (
- set RABBITMQ_SERVER_START_ARGS=-ra wal_sync_method sync
-)
-
if not defined RABBITMQ_LOG (
set RABBITMQ_LOG=debug,+color
)
@@ -115,8 +111,7 @@ if "%CMD%" == "run-broker" (
@echo {rabbitmq_mqtt, []},
@echo {rabbitmq_stomp, []},
@echo {ra, [
- @echo {data_dir, "!RABBITMQ_QUORUM_DIR:\=\\!"},
- @echo {wal_sync_method, sync}
+ @echo {data_dir, "!RABBITMQ_QUORUM_DIR:\=\\!"}
@echo ]},
@echo {osiris, [
@echo {data_dir, "!RABBITMQ_STREAM_DIR:\=\\!"}
diff --git a/scripts/bazel/rabbitmq-run.sh b/scripts/bazel/rabbitmq-run.sh
index af45cf8a239a..5324a3d559d8 100755
--- a/scripts/bazel/rabbitmq-run.sh
+++ b/scripts/bazel/rabbitmq-run.sh
@@ -78,8 +78,7 @@ write_config_file() {
${rabbitmq_prometheus_fragment}
]},
{ra, [
- {data_dir, "${RABBITMQ_QUORUM_DIR}"},
- {wal_sync_method, sync}
+ {data_dir, "${RABBITMQ_QUORUM_DIR}"}
]},
{osiris, [
{data_dir, "${RABBITMQ_STREAM_DIR}"}
@@ -195,8 +194,6 @@ fi
RABBITMQ_PLUGINS_DIR=${RABBITMQ_PLUGINS_DIR:=${DEFAULT_PLUGINS_DIR}}
export RABBITMQ_PLUGINS_DIR
-RABBITMQ_SERVER_START_ARGS="${RABBITMQ_SERVER_START_ARGS:=-ra wal_sync_method sync}"
-export RABBITMQ_SERVER_START_ARGS
# Enable colourful debug logging by default
# To change this, set RABBITMQ_LOG to info, notice, warning etc.
diff --git a/selenium/.gitignore b/selenium/.gitignore
new file mode 100644
index 000000000000..63c36b351eb4
--- /dev/null
+++ b/selenium/.gitignore
@@ -0,0 +1,9 @@
+node_modules
+package-lock.json
+screens/*/*
+logs
+suites/logs/*
+suites/screens/*
+test/oauth/*/h2/*.trace.db
+test/oauth/*/h2/*.lock.db
+*/target/*
diff --git a/deps/rabbitmq_management/selenium/Dockerfile b/selenium/Dockerfile
similarity index 85%
rename from deps/rabbitmq_management/selenium/Dockerfile
rename to selenium/Dockerfile
index 0998b81138a8..8e34be523f28 100644
--- a/deps/rabbitmq_management/selenium/Dockerfile
+++ b/selenium/Dockerfile
@@ -4,7 +4,6 @@ FROM atools/jdk-maven-node:mvn3-jdk11-node16 as base
WORKDIR /code
COPY package.json package.json
-COPY run-amqp10-roundtriptest run-amqp10-roundtriptest
FROM base as test
RUN npm install
diff --git a/deps/rabbitmq_management/selenium/README.md b/selenium/README.md
similarity index 78%
rename from deps/rabbitmq_management/selenium/README.md
rename to selenium/README.md
index 0f9fcee379be..131c0a370648 100644
--- a/deps/rabbitmq_management/selenium/README.md
+++ b/selenium/README.md
@@ -1,7 +1,38 @@
-# Automated End-to-End testing of the management ui with Selenium
-
-Selenium webdriver is used to drive web browser's interactions on the management ui.
-And Mocha is used as the testing framework for Javascript.
+# Automated End-to-End testing with Mocha and Selenium
+
+## What is it?
+
+It is a solution that allows you to write end-to-end tests in Javascript. The solution
+takes care of:
+
+ - generating the required RabbitMQ configuration
+ - deploying RabbitMQ with the generated configuration in 3 ways:
+ - from source via `make run-broker`.
+ - with docker via a single docker instance.
+ - with docker compose via a 3-node cluster.
+ - deploying any other dependencies required by the test case such as:
+ - keycloak
+ - uaa
+ - ldap
+ - http authentication backend
+ - http proxy
+ - http portal
+ - running the test cases
+ - capturing the logs from RabbitMQ and all the dependencies
+ - stopping RabbitMQ and all the dependencies
+
+## Integration with Github actions
+
+These are the three github workflows that run end-to-end tests:
+- [test-management-ui.yaml](.github/workflows/test-management-ui.yaml) Runs all the test suites
+listed on the file [short-suite-management-ui](selenium/short-suite-management-ui). It tests the management ui deployed on a 3-node cluster. It is invoked on every push to a branch.
+- [test-management-ui-for-prs.yaml](.github/workflows/test-management-ui.yaml) Runs all the test suites
+listed on the file [full-suite-management-ui](selenium/full-suite-management-ui). It tests the management ui deployed on a single docker instance. It is invoked on every push to a PR.
+- [test-authnz.yaml](.github/workflows/test-authnz.yaml) Runs all the test suites
+listed on the file [full-suite-authnz-messaging](selenium/full-suite-authnz-messaging). It is invoked on every push to a PR and/or branch.
+
+
+## Prerequisites
The following must be installed to run the tests:
- make
@@ -10,9 +41,9 @@ The following must be installed to run the tests:
# Organization of test cases
-`test` folder contains the test cases written in Javascript using Selenium webdriver. Test cases are grouped into folders based on the area of functionality.
-For instance, `test/basic-auth` contains test cases that validates basic authentication. Another example, a bit
-more complex, is `test/oauth` where the test cases are stored in subfolders. For instance, `test/oauth/with-sp-initiated` which validate OAuth 2 authorization where users come to RabbitMQ without any token and RabbitMQ initiates the authorization process.
+`test` folder contains the test cases written in Javascript using Mocha framework.
+Test cases are grouped into folders based on the area of functionality.
+For instance, `test/basic-auth` contains test cases that validates basic authentication. Another example, a bit more complex, is `test/oauth` where the test cases are stored in subfolders. For instance, `test/oauth/with-sp-initiated` which validate OAuth 2 authorization where users come to RabbitMQ without any token and RabbitMQ initiates the authorization process.
The `test` folder also contains the necessary configuration files. For instance, `test/basic-auth` contains `rabbitmq.conf` file which is also shared by other test cases such as `test/definitions` or `test/limits`.
diff --git a/deps/rabbitmq_management/selenium/amqp10-roundtriptest/pom.xml b/selenium/amqp10-roundtriptest/pom.xml
similarity index 98%
rename from deps/rabbitmq_management/selenium/amqp10-roundtriptest/pom.xml
rename to selenium/amqp10-roundtriptest/pom.xml
index 01f3780d1142..f39425a50ee4 100644
--- a/deps/rabbitmq_management/selenium/amqp10-roundtriptest/pom.xml
+++ b/selenium/amqp10-roundtriptest/pom.xml
@@ -10,7 +10,7 @@
5.9.32.3.0
- 1.2.11
+ 1.2.132.24.01.17.03.11.0
diff --git a/deps/rabbitmq_management/selenium/run-amqp10-roundtriptest b/selenium/amqp10-roundtriptest/run
similarity index 67%
rename from deps/rabbitmq_management/selenium/run-amqp10-roundtriptest
rename to selenium/amqp10-roundtriptest/run
index 4f76fbf41603..b91f0becf7a7 100755
--- a/deps/rabbitmq_management/selenium/run-amqp10-roundtriptest
+++ b/selenium/amqp10-roundtriptest/run
@@ -7,10 +7,10 @@ if [[ -f "/code/amqp10-roundtriptest" ]]; then
echo "Running amqp10-roundtriptest inside mocha-test docker image ..."
java -jar /code/amqp10-roundtriptest-1.0-SNAPSHOT-jar-with-dependencies.jar $@
else
- if [[ ! -f "amqp10-roundtriptest/target/amqp10-roundtriptest-1.0-SNAPSHOT-jar-with-dependencies.jar" ]]; then
+ if [[ ! -f "${SCRIPT}/target/amqp10-roundtriptest-1.0-SNAPSHOT-jar-with-dependencies.jar" ]]; then
echo "Building amqp10-roundtriptest jar ..."
mvn -f amqp10-roundtriptest package $@
fi
echo "Running amqp10-roundtriptest jar ..."
- java -jar amqp10-roundtriptest/target/amqp10-roundtriptest-1.0-SNAPSHOT-jar-with-dependencies.jar $@
+ java -jar ${SCRIPT}/target/amqp10-roundtriptest-1.0-SNAPSHOT-jar-with-dependencies.jar $@
fi
diff --git a/deps/rabbitmq_management/selenium/amqp10-roundtriptest/src/main/java/com/rabbitmq/amqp1_0/RoundTripTest.java b/selenium/amqp10-roundtriptest/src/main/java/com/rabbitmq/amqp1_0/RoundTripTest.java
similarity index 100%
rename from deps/rabbitmq_management/selenium/amqp10-roundtriptest/src/main/java/com/rabbitmq/amqp1_0/RoundTripTest.java
rename to selenium/amqp10-roundtriptest/src/main/java/com/rabbitmq/amqp1_0/RoundTripTest.java
diff --git a/deps/rabbitmq_management/selenium/bin/components/README.md b/selenium/bin/components/README.md
similarity index 100%
rename from deps/rabbitmq_management/selenium/bin/components/README.md
rename to selenium/bin/components/README.md
diff --git a/deps/rabbitmq_management/selenium/bin/components/devkeycloak b/selenium/bin/components/devkeycloak
similarity index 100%
rename from deps/rabbitmq_management/selenium/bin/components/devkeycloak
rename to selenium/bin/components/devkeycloak
diff --git a/deps/rabbitmq_management/selenium/bin/components/fakeportal b/selenium/bin/components/fakeportal
similarity index 100%
rename from deps/rabbitmq_management/selenium/bin/components/fakeportal
rename to selenium/bin/components/fakeportal
diff --git a/deps/rabbitmq_management/selenium/bin/components/fakeproxy b/selenium/bin/components/fakeproxy
similarity index 100%
rename from deps/rabbitmq_management/selenium/bin/components/fakeproxy
rename to selenium/bin/components/fakeproxy
diff --git a/deps/rabbitmq_management/selenium/bin/components/keycloak b/selenium/bin/components/keycloak
similarity index 100%
rename from deps/rabbitmq_management/selenium/bin/components/keycloak
rename to selenium/bin/components/keycloak
diff --git a/deps/rabbitmq_management/selenium/bin/components/mock-auth-backend-http b/selenium/bin/components/mock-auth-backend-http
similarity index 100%
rename from deps/rabbitmq_management/selenium/bin/components/mock-auth-backend-http
rename to selenium/bin/components/mock-auth-backend-http
diff --git a/deps/rabbitmq_management/selenium/bin/components/mock-auth-backend-ldap b/selenium/bin/components/mock-auth-backend-ldap
similarity index 100%
rename from deps/rabbitmq_management/selenium/bin/components/mock-auth-backend-ldap
rename to selenium/bin/components/mock-auth-backend-ldap
diff --git a/deps/rabbitmq_management/selenium/bin/components/prodkeycloak b/selenium/bin/components/prodkeycloak
similarity index 100%
rename from deps/rabbitmq_management/selenium/bin/components/prodkeycloak
rename to selenium/bin/components/prodkeycloak
diff --git a/deps/rabbitmq_management/selenium/bin/components/proxy b/selenium/bin/components/proxy
similarity index 100%
rename from deps/rabbitmq_management/selenium/bin/components/proxy
rename to selenium/bin/components/proxy
diff --git a/selenium/bin/components/rabbitmq b/selenium/bin/components/rabbitmq
new file mode 100644
index 000000000000..9eea9e13c2a7
--- /dev/null
+++ b/selenium/bin/components/rabbitmq
@@ -0,0 +1,183 @@
+#!/usr/bin/env bash
+
+init_rabbitmq() {
+ RABBITMQ_CONFIG_DIR=${TEST_CONFIG_DIR}
+ RABBITMQ_DOCKER_IMAGE=${RABBITMQ_DOCKER_IMAGE:-rabbitmq}
+
+ print "> RABBITMQ_CONFIG_DIR: ${RABBITMQ_CONFIG_DIR}"
+ print "> RABBITMQ_DOCKER_IMAGE: ${RABBITMQ_DOCKER_IMAGE}"
+ [[ -z "${OAUTH_SERVER_CONFIG_BASEDIR}" ]] || print "> OAUTH_SERVER_CONFIG_BASEDIR: ${OAUTH_SERVER_CONFIG_BASEDIR}"
+ [[ -z "${OAUTH_SERVER_CONFIG_DIR}" ]] || print "> OAUTH_SERVER_CONFIG_DIR: ${OAUTH_SERVER_CONFIG_DIR}"
+
+}
+
+start_rabbitmq() {
+ if [[ "$PROFILES" == *"docker"* ]]; then
+ if [[ "$PROFILES" == *"cluster"* ]]; then
+ start_docker_cluster_rabbitmq
+ else
+ start_docker_rabbitmq
+ fi
+ else
+ start_local_rabbitmq
+ fi
+}
+stop_rabbitmq() {
+ if [[ "$PROFILES" == *"docker"* ]]; then
+ if [[ "$PROFILES" == *"cluster"* ]]; then
+ docker compose -f $CONF_DIR/rabbitmq/compose.yml kill
+ else
+ kill_container_if_exist "$component"
+ fi
+ else
+ stop_local_rabbitmq
+ fi
+}
+stop_local_rabbitmq() {
+ RABBITMQ_SERVER_ROOT=$(realpath ../)
+ gmake --directory=${RABBITMQ_SERVER_ROOT} stop-node
+}
+save_logs_rabbitmq() {
+ if [[ "$PROFILES" == *"docker"* ]]; then
+ if [[ "$PROFILES" == *"cluster"* ]]; then
+ docker compose -f $CONF_DIR/rabbitmq/compose.yml logs > $LOGS/rabbitmq.log
+ else
+ save_container_logs "rabbitmq"
+ fi
+ fi
+}
+start_local_rabbitmq() {
+ begin "Starting rabbitmq ..."
+
+ init_rabbitmq
+
+ RABBITMQ_SERVER_ROOT=$(realpath ../)
+ MOUNT_RABBITMQ_CONF="/etc/rabbitmq/rabbitmq.conf"
+ MOUNT_ADVANCED_CONFIG="/etc/rabbitmq/advanced.config"
+
+ RABBITMQ_TEST_DIR="${RABBITMQ_CONFIG_DIR}" ${BIN_DIR}/gen-rabbitmq-conf ${RABBITMQ_CONFIG_DIR} $ENV_FILE /tmp$MOUNT_RABBITMQ_CONF
+
+ print "> EFFECTIVE RABBITMQ_CONFIG_FILE: /tmp$MOUNT_RABBITMQ_CONF"
+ ${BIN_DIR}/gen-advanced-config ${RABBITMQ_CONFIG_DIR} $ENV_FILE /tmp$MOUNT_ADVANCED_CONFIG
+ cp ${RABBITMQ_CONFIG_DIR}/enabled_plugins /tmp/etc/rabbitmq/
+ RESULT=$?
+ cp ${RABBITMQ_CONFIG_DIR}/enabled_plugins /tmp/etc/rabbitmq/
+ if [ $RESULT -eq 0 ]; then
+ print "> EFFECTIVE RABBITMQ_CONFIG_FILE: /tmp$MOUNT_ADVANCED_CONFIG"
+ gmake --directory=${RABBITMQ_SERVER_ROOT} run-broker \
+ RABBITMQ_ENABLED_PLUGINS_FILE=/tmp/etc/rabbitmq/enabled_plugins \
+ RABBITMQ_CONFIG_FILE=/tmp$MOUNT_RABBITMQ_CONF \
+ RABBITMQ_ADVANCED_CONFIG_FILE=/tmp$MOUNT_ADVANCED_CONFIG
+ else
+ gmake --directory=${RABBITMQ_SERVER_ROOT} run-broker \
+ RABBITMQ_ENABLED_PLUGINS_FILE=/tmp/etc/rabbitmq/enabled_plugins \
+ RABBITMQ_CONFIG_FILE=/tmp$MOUNT_RABBITMQ_CONF
+ fi
+ print "> RABBITMQ_TEST_DIR: ${RABBITMQ_CONFIG_DIR}"
+
+
+}
+start_docker_cluster_rabbitmq() {
+ begin "Starting rabbitmq cluster in docker ..."
+ init_rabbitmq
+ kill_container_if_exist rabbitmq
+ kill_container_if_exist rabbitmq1
+ kill_container_if_exist rabbitmq2
+
+ mkdir -p $CONF_DIR/rabbitmq
+
+ RABBITMQ_TEST_DIR="/var/rabbitmq" ${BIN_DIR}/gen-rabbitmq-conf ${RABBITMQ_CONFIG_DIR} $ENV_FILE $CONF_DIR/rabbitmq/rabbitmq.conf
+ print "> EFFECTIVE RABBITMQ_CONFIG_FILE: $CONF_DIR/rabbitmq/rabbitmq.conf"
+ ${BIN_DIR}/gen-advanced-config ${RABBITMQ_CONFIG_DIR} $ENV_FILE $CONF_DIR/rabbitmq/advanced.config
+ RESULT=$?
+ if [ $RESULT -eq 0 ]; then
+ if [ -s $RESULT ]; then
+ print "> EFFECTIVE ADVANCED_CONFIG_FILE: $CONF_DIR/rabbitmq/advanced.config"
+ else
+ rm $CONF_DIR/rabbitmq/advanced.config
+ fi
+ fi
+ if [ -f ${RABBITMQ_CONFIG_DIR}/logging.conf ]; then
+ mkdir -p $CONF_DIR/rabbitmq/conf.d/
+ cp ${RABBITMQ_CONFIG_DIR}/logging.conf $CONF_DIR/rabbitmq/conf.d/
+ fi
+ if [ -f ${RABBITMQ_CONFIG_DIR}/enabled_plugins ]; then
+ cp ${RABBITMQ_CONFIG_DIR}/enabled_plugins $CONF_DIR/rabbitmq
+ fi
+ if [ -d ${RABBITMQ_CONFIG_DIR}/certs ]; then
+ cp -r ${RABBITMQ_CONFIG_DIR}/certs $CONF_DIR/rabbitmq
+ fi
+ if [ -d ${RABBITMQ_CONFIG_DIR}/imports ]; then
+ cp -r ${RABBITMQ_CONFIG_DIR}/imports $CONF_DIR/rabbitmq
+ fi
+
+ cat > $CONF_DIR/rabbitmq/image_compose.yml < $CONF_DIR/rabbitmq/compose.yml
+ cat ${BIN_DIR}/components/../rabbit-compose.yml >> $CONF_DIR/rabbitmq/compose.yml
+
+ docker compose -f $CONF_DIR/rabbitmq/compose.yml up -d
+
+ wait_for_message rabbitmq "Server startup complete"
+ wait_for_message rabbitmq1 "Server startup complete"
+ wait_for_message rabbitmq2 "Server startup complete"
+ end "RabbitMQ cluster ready"
+}
+
+start_docker_rabbitmq() {
+ begin "Starting rabbitmq in docker ..."
+
+ init_rabbitmq
+ kill_container_if_exist rabbitmq
+
+ mkdir -p $CONF_DIR/rabbitmq
+
+ RABBITMQ_TEST_DIR="/var/rabbitmq" ${BIN_DIR}/gen-rabbitmq-conf ${RABBITMQ_CONFIG_DIR} $ENV_FILE $CONF_DIR/rabbitmq/rabbitmq.conf
+ print "> EFFECTIVE RABBITMQ_CONFIG_FILE: $CONF_DIR/rabbitmq/rabbitmq.conf"
+ ${BIN_DIR}/gen-advanced-config ${RABBITMQ_CONFIG_DIR} $ENV_FILE $CONF_DIR/rabbitmq/advanced.config
+ RESULT=$?
+ if [ $RESULT -eq 0 ]; then
+ if [ -s $RESULT ]; then
+ print "> EFFECTIVE ADVANCED_CONFIG_FILE: $CONF_DIR/rabbitmq/advanced.config"
+ else
+ rm $CONF_DIR/rabbitmq/advanced.config
+ fi
+ fi
+ if [ -f ${RABBITMQ_CONFIG_DIR}/logging.conf ]; then
+ mkdir -p $CONF_DIR/rabbitmq/conf.d/
+ cp ${RABBITMQ_CONFIG_DIR}/logging.conf $CONF_DIR/rabbitmq/conf.d/
+ fi
+ if [ -f ${RABBITMQ_CONFIG_DIR}/enabled_plugins ]; then
+ cp ${RABBITMQ_CONFIG_DIR}/enabled_plugins $CONF_DIR/rabbitmq
+ fi
+ if [ -d ${RABBITMQ_CONFIG_DIR}/certs ]; then
+ cp -r ${RABBITMQ_CONFIG_DIR}/certs $CONF_DIR/rabbitmq
+ fi
+ if [ -d ${RABBITMQ_CONFIG_DIR}/imports ]; then
+ cp -r ${RABBITMQ_CONFIG_DIR}/imports $CONF_DIR/rabbitmq
+ fi
+
+ print "> RABBITMQ_TEST_DIR: /var/rabbitmq"
+
+ docker run \
+ --detach \
+ --name rabbitmq \
+ --net ${DOCKER_NETWORK} \
+ -p 5672:5672 \
+ -p 5671:5671 \
+ -p 15672:15672 \
+ -p 15671:15671 \
+ -v $CONF_DIR/rabbitmq/:/etc/rabbitmq \
+ -v $CONF_DIR/rabbitmq/:/var/rabbitmq \
+ -v ${TEST_DIR}:/config \
+ ${RABBITMQ_DOCKER_IMAGE}
+
+ wait_for_message rabbitmq "Server startup complete"
+ end "RabbitMQ ready"
+}
diff --git a/deps/rabbitmq_management/selenium/bin/components/selenium b/selenium/bin/components/selenium
similarity index 96%
rename from deps/rabbitmq_management/selenium/bin/components/selenium
rename to selenium/bin/components/selenium
index 3ebf955053e1..2563927b4fb9 100644
--- a/deps/rabbitmq_management/selenium/bin/components/selenium
+++ b/selenium/bin/components/selenium
@@ -1,11 +1,11 @@
#!/usr/bin/env bash
-arch=$(uname -i)
+arch=$(uname -a)
if [[ $arch == arm* ]]; then
SELENIUM_DOCKER_IMAGE=selenium/standalone-chrome:123.0
else
SELENIUM_DOCKER_IMAGE=seleniarm/standalone-chromium:123.0
-fi
+fi
start_selenium() {
begin "Starting selenium ..."
diff --git a/deps/rabbitmq_management/selenium/bin/components/uaa b/selenium/bin/components/uaa
similarity index 100%
rename from deps/rabbitmq_management/selenium/bin/components/uaa
rename to selenium/bin/components/uaa
diff --git a/deps/rabbitmq_management/selenium/bin/find-template-files b/selenium/bin/find-template-files
similarity index 100%
rename from deps/rabbitmq_management/selenium/bin/find-template-files
rename to selenium/bin/find-template-files
diff --git a/deps/rabbitmq_management/selenium/bin/gen-advanced-config b/selenium/bin/gen-advanced-config
similarity index 97%
rename from deps/rabbitmq_management/selenium/bin/gen-advanced-config
rename to selenium/bin/gen-advanced-config
index 6f186afef2be..a0fc7a27df73 100755
--- a/deps/rabbitmq_management/selenium/bin/gen-advanced-config
+++ b/selenium/bin/gen-advanced-config
@@ -28,5 +28,6 @@ then
fi
if [ "$FOUND_TEMPLATES_COUNT" -lt 1 ]
then
+ rm $FINAL_CONFIG_FILE
exit -1
fi
diff --git a/deps/rabbitmq_management/selenium/bin/gen-env-file b/selenium/bin/gen-env-file
similarity index 100%
rename from deps/rabbitmq_management/selenium/bin/gen-env-file
rename to selenium/bin/gen-env-file
diff --git a/deps/rabbitmq_management/selenium/bin/gen-httpd-conf b/selenium/bin/gen-httpd-conf
similarity index 100%
rename from deps/rabbitmq_management/selenium/bin/gen-httpd-conf
rename to selenium/bin/gen-httpd-conf
diff --git a/deps/rabbitmq_management/selenium/bin/gen-keycloak-json b/selenium/bin/gen-keycloak-json
similarity index 100%
rename from deps/rabbitmq_management/selenium/bin/gen-keycloak-json
rename to selenium/bin/gen-keycloak-json
diff --git a/deps/rabbitmq_management/selenium/bin/gen-rabbitmq-conf b/selenium/bin/gen-rabbitmq-conf
similarity index 100%
rename from deps/rabbitmq_management/selenium/bin/gen-rabbitmq-conf
rename to selenium/bin/gen-rabbitmq-conf
diff --git a/deps/rabbitmq_management/selenium/bin/gen-uaa-yml b/selenium/bin/gen-uaa-yml
similarity index 100%
rename from deps/rabbitmq_management/selenium/bin/gen-uaa-yml
rename to selenium/bin/gen-uaa-yml
diff --git a/selenium/bin/rabbit-compose.yml b/selenium/bin/rabbit-compose.yml
new file mode 100644
index 000000000000..81cf57e48df9
--- /dev/null
+++ b/selenium/bin/rabbit-compose.yml
@@ -0,0 +1,49 @@
+
+
+# https://docs.docker.com/compose/compose-file/#networks
+networks:
+ rabbitmq_net:
+ name: rabbitmq_net
+ external: true
+
+services:
+ rmq0: &rabbitmq
+ # https://hub.docker.com/r/pivotalrabbitmq/rabbitmq-prometheus/tags
+ << : *rabbitmq_image
+ networks:
+ - "rabbitmq_net"
+ ports:
+ - "5672:5672"
+ - "15672:15672"
+ - "15692:15692"
+ # https://unix.stackexchange.com/questions/71940/killing-tcp-connection-in-linux
+ # https://en.wikipedia.org/wiki/Tcpkill
+ # https://www.digitalocean.com/community/tutorials/iptables-essentials-common-firewall-rules-and-commands#block-an-ip-address
+ cap_add:
+ - ALL
+ hostname: rabbitmq
+ container_name: rabbitmq
+ environment:
+ RABBITMQ_ERLANG_COOKIE: rmq0
+
+ # we want to simulate hitting thresholds
+ ulimits:
+ nofile:
+ soft: "2000"
+ hard: "2000"
+ rmq1:
+ << : *rabbitmq
+ container_name: rabbitmq1
+ hostname: rabbitmq1
+ ports:
+ - "5677:5672"
+ - "15677:15672"
+ - "15697:15692"
+ rmq2:
+ << : *rabbitmq
+ hostname: rabbitmq2
+ container_name: rabbitmq2
+ ports:
+ - "5678:5672"
+ - "15678:15672"
+ - "15698:15692"
diff --git a/deps/rabbitmq_management/selenium/bin/suite_template b/selenium/bin/suite_template
similarity index 83%
rename from deps/rabbitmq_management/selenium/bin/suite_template
rename to selenium/bin/suite_template
index 3c608016ade0..faad7cbb8031 100644
--- a/deps/rabbitmq_management/selenium/bin/suite_template
+++ b/selenium/bin/suite_template
@@ -1,6 +1,9 @@
#!/usr/bin/env bash
-#set -x
+if [[ ! -z "${DEBUG}" ]]; then
+ set -x
+fi
+
SCRIPT="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
SUITE=$(caller)
@@ -32,6 +35,8 @@ SCREENS=${SELENIUM_ROOT_FOLDER}/screens/${SUITE}
CONF_DIR=/tmp/selenium/${SUITE}
ENV_FILE=$CONF_DIR/.env
+rm -rf $CONF_DIR
+
for f in $SCRIPT/components/*; do
if [[ ! "$f" == *README.md ]]
then
@@ -54,6 +59,9 @@ parse_arguments() {
elif [[ "$1" == "stop-others" ]]
then
echo "stop-others"
+ elif [[ "$1" == "stop-rabbitmq" ]]
+ then
+ echo "stop-rabbitmq"
elif [[ "$1" == "test" ]]
then
echo "test $2"
@@ -107,7 +115,10 @@ init_suite() {
print "> TEST_CASES_DIR: ${TEST_CASES_DIR} "
print "> TEST_CONFIG_DIR: ${TEST_CONFIG_DIR} "
print "> DOCKER_NETWORK: ${DOCKER_NETWORK} "
- print "> PROFILES: ${PROFILES} "
+ print "> initial PROFILES: ${PROFILES} "
+ print "> (+) ADDON_PROFILES: ${ADDON_PROFILES} "
+ PROFILES="${PROFILES} ${ADDON_PROFILES}"
+ print "> (=) final PROFILES: ${PROFILES} "
print "> ENV_FILE: ${ENV_FILE} "
print "> COMMAND: ${COMMAND}"
end "Initialized suite"
@@ -239,25 +250,68 @@ wait_for_url_docker() {
done
}
-
+test_on_cluster() {
+ IFS=', ' read -r -a array <<< "$RABBITMQ_CLUSTER_NODES"
+ begin "Running against all nodes in cluster $RABBITMQ_CLUSTER_NODES :"
+ for item in "${array[@]}"
+ do
+ RMQ_HOST_0=${RABBITMQ_HOST:-rabbitmq:15672}
+ RMQ_HOST=$(rewrite_rabbitmq_hostname ${item} $RMQ_HOST_0)
+ PUBLIC_RMQ_HOST_0=${PUBLIC_RABBITMQ_HOST:-$RMQ_HOST}
+ PUBLIC_RMQ_HOST=$(rewrite_rabbitmq_hostname ${item} $PUBLIC_RMQ_HOST_0)
+ RMQ_URL=$(calculate_rabbitmq_url $PUBLIC_RMQ_HOST)
+ RMQ_HOSTNAME=${item}
+ _test $RMQ_HOST \
+ $PUBLIC_RMQ_HOST \
+ $RMQ_URL \
+ $RMQ_HOSTNAME
+ TEST_RESULT=$?
+ if [ $TEST_RESULT -ne 0 ]; then
+ break
+ fi
+ done
+ end "Finishing running test ($TEST_RESULT)"
+}
+rewrite_rabbitmq_hostname() {
+ IFS=':' read -r -a array <<< "$2"
+ if [ "${array[0]}" == "rabbitmq" ]; then
+ echo "${2//rabbitmq/$1}"
+ else
+ echo "$2"
+ fi
+}
test() {
+ if [[ "$PROFILES" == *"cluster"* && ! -z "$RABBITMQ_CLUSTER_NODES" ]]; then
+ test_on_cluster
+ else
+ RMQ_HOST=${RABBITMQ_HOST:-rabbitmq:15672}
+ PUBLIC_RMQ_HOST=${PUBLIC_RABBITMQ_HOST:-$RMQ_HOST}
+ _test $RABBITMQ_HOST \
+ $PUBLIC_RMQ_HOST \
+ $(calculate_rabbitmq_url $PUBLIC_RMQ_HOST) \
+ ${RABBITMQ_HOSTNAME:-rabbitmq}
+ fi
+}
+
+_test() {
+ RMQ_HOST=$1
+ PUBLIC_RMQ_HOST=$2
+ RMQ_URL=$3
+ RMQ_HOSTNAME=$4
+
kill_container_if_exist mocha
- begin "Running tests with env variables:"
+ begin "Running tests against $RMQ_HOSTNAME with these env variable:"
- RABBITMQ_HOST=${RABBITMQ_HOST:-rabbitmq:15672}
- PUBLIC_RABBITMQ_HOST=${PUBLIC_RABBITMQ_HOST:-$RABBITMQ_HOST}
- RABBITMQ_URL=$(calculate_rabbitmq_url $PUBLIC_RABBITMQ_HOST)
- RABBITMQ_HOSTNAME=${RABBITMQ_HOSTNAME:-rabbitmq}
SELENIUM_TIMEOUT=${SELENIUM_TIMEOUT:-20000}
SELENIUM_POLLING=${SELENIUM_POLLING:-500}
print "> SELENIUM_TIMEOUT: ${SELENIUM_TIMEOUT}"
print "> SELENIUM_POLLING: ${SELENIUM_POLLING}"
- print "> RABBITMQ_HOST: ${RABBITMQ_HOST}"
- print "> RABBITMQ_HOSTNAME: ${RABBITMQ_HOSTNAME}"
- print "> PUBLIC_RABBITMQ_HOST: ${PUBLIC_RABBITMQ_HOST}"
+ print "> RABBITMQ_HOST: ${RMQ_HOST}"
+ print "> RABBITMQ_HOSTNAME: ${RMQ_HOSTNAME}"
+ print "> PUBLIC_RABBITMQ_HOST: ${PUBLIC_RMQ_HOST}"
print "> RABBITMQ_PATH: ${RABBITMQ_PATH}"
- print "> RABBITMQ_URL: ${RABBITMQ_URL}"
+ print "> RABBITMQ_URL: ${RMQ_URL}"
print "> UAA_URL: ${UAA_URL}"
print "> FAKEPORTAL_URL: ${FAKEPORTAL_URL}"
mocha_test_tag=($(md5sum $SELENIUM_ROOT_FOLDER/package.json))
@@ -270,8 +324,8 @@ test() {
--rm \
--name mocha \
--net ${DOCKER_NETWORK} \
- --env RABBITMQ_URL=${RABBITMQ_URL} \
- --env RABBITMQ_HOSTNAME=${RABBITMQ_HOSTNAME} \
+ --env RABBITMQ_URL=${RMQ_URL} \
+ --env RABBITMQ_HOSTNAME=${RMQ_HOSTNAME} \
--env UAA_URL=${UAA_URL} \
--env FAKE_PORTAL_URL=${FAKEPORTAL_URL} \
--env RUN_LOCAL=false \
@@ -345,6 +399,9 @@ run_local_with() {
if [[ "$COMMAND" == "start-rabbitmq" ]]
then
start_local_rabbitmq
+elif [[ "$COMMAND" == "stop-rabbitmq" ]]
+ then
+ stop_local_rabbitmq
elif [[ "$COMMAND" == "start-others" ]]
then
start_local_others
@@ -354,6 +411,9 @@ run_local_with() {
elif [[ "$COMMAND" == "stop-others" ]]
then
teardown_local_others
+ elif [[ "$COMMAND" == "stop-rabbitmq" ]]
+ then
+ stop_local_rabbitmq
elif [[ "$COMMAND" =~ test[[:space:]]*([^[:space:]]*) ]]
then
test_local ${BASH_REMATCH[1]}
@@ -466,13 +526,15 @@ start_components() {
$start
done
}
+
teardown_components() {
begin "Tear down ..."
for i in "${REQUIRED_COMPONENTS[@]}"
do
local component="$i"
+ stop="stop_$i"
+ type "$stop" &>/dev/null && $stop || kill_container_if_exist "$component"
print "Tear down $component"
- kill_container_if_exist "$component"
done
end "Finished teardown"
}
@@ -481,8 +543,9 @@ save_components_logs() {
for i in "${REQUIRED_COMPONENTS[@]}"
do
local component="$i"
+ save="save_logs_$i"
+ type "$save" &>/dev/null && $save || save_container_logs "$component"
print "Saving logs for component $component"
- save_container_logs "$component"
done
end "Finished saving logs"
}
diff --git a/deps/rabbitmq_management/selenium/fakeportal/app.js b/selenium/fakeportal/app.js
similarity index 100%
rename from deps/rabbitmq_management/selenium/fakeportal/app.js
rename to selenium/fakeportal/app.js
diff --git a/deps/rabbitmq_management/selenium/fakeportal/proxy.js b/selenium/fakeportal/proxy.js
similarity index 100%
rename from deps/rabbitmq_management/selenium/fakeportal/proxy.js
rename to selenium/fakeportal/proxy.js
diff --git a/deps/rabbitmq_management/selenium/fakeportal/views/rabbitmq.html b/selenium/fakeportal/views/rabbitmq.html
similarity index 100%
rename from deps/rabbitmq_management/selenium/fakeportal/views/rabbitmq.html
rename to selenium/fakeportal/views/rabbitmq.html
diff --git a/deps/rabbitmq_management/selenium/full-suite-authnz-messaging b/selenium/full-suite-authnz-messaging
similarity index 100%
rename from deps/rabbitmq_management/selenium/full-suite-authnz-messaging
rename to selenium/full-suite-authnz-messaging
diff --git a/deps/rabbitmq_management/selenium/full-suite-management-ui b/selenium/full-suite-management-ui
similarity index 100%
rename from deps/rabbitmq_management/selenium/full-suite-management-ui
rename to selenium/full-suite-management-ui
diff --git a/deps/rabbitmq_management/selenium/package.json b/selenium/package.json
similarity index 86%
rename from deps/rabbitmq_management/selenium/package.json
rename to selenium/package.json
index 465febe009f7..5021dc3ef122 100644
--- a/deps/rabbitmq_management/selenium/package.json
+++ b/selenium/package.json
@@ -6,14 +6,14 @@
"scripts": {
"fakeportal": "node fakeportal/app.js",
"fakeproxy": "node fakeportal/proxy.js",
- "amqp10_roundtriptest": "eval $(cat $ENV_FILE ) &&./run-amqp10-roundtriptest",
+ "amqp10_roundtriptest": "eval $(cat $ENV_FILE ) && amqp10-roundtriptest/run",
"test": " eval $(cat $ENV_FILE ) && mocha --recursive --trace-warnings --timeout 40000"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
- "chromedriver": "^125.0.0",
+ "chromedriver": "^128.0.0",
"ejs": "^3.1.8",
"express": "^4.18.2",
"geckodriver": "^3.0.2",
diff --git a/deps/rabbitmq_management/selenium/run-suites.sh b/selenium/run-suites.sh
similarity index 100%
rename from deps/rabbitmq_management/selenium/run-suites.sh
rename to selenium/run-suites.sh
diff --git a/deps/rabbitmq_management/selenium/short-suite-management-ui b/selenium/short-suite-management-ui
similarity index 100%
rename from deps/rabbitmq_management/selenium/short-suite-management-ui
rename to selenium/short-suite-management-ui
diff --git a/deps/rabbitmq_management/selenium/suites/authnz-messaging/auth-cache-http-backends.sh b/selenium/suites/authnz-messaging/auth-cache-http-backends.sh
similarity index 100%
rename from deps/rabbitmq_management/selenium/suites/authnz-messaging/auth-cache-http-backends.sh
rename to selenium/suites/authnz-messaging/auth-cache-http-backends.sh
diff --git a/deps/rabbitmq_management/selenium/suites/authnz-messaging/auth-cache-ldap-backends.sh b/selenium/suites/authnz-messaging/auth-cache-ldap-backends.sh
similarity index 100%
rename from deps/rabbitmq_management/selenium/suites/authnz-messaging/auth-cache-ldap-backends.sh
rename to selenium/suites/authnz-messaging/auth-cache-ldap-backends.sh
diff --git a/deps/rabbitmq_management/selenium/suites/authnz-messaging/auth-http-backend.sh b/selenium/suites/authnz-messaging/auth-http-backend.sh
similarity index 100%
rename from deps/rabbitmq_management/selenium/suites/authnz-messaging/auth-http-backend.sh
rename to selenium/suites/authnz-messaging/auth-http-backend.sh
diff --git a/deps/rabbitmq_management/selenium/suites/authnz-messaging/auth-http-internal-backends-with-internal.sh b/selenium/suites/authnz-messaging/auth-http-internal-backends-with-internal.sh
similarity index 100%
rename from deps/rabbitmq_management/selenium/suites/authnz-messaging/auth-http-internal-backends-with-internal.sh
rename to selenium/suites/authnz-messaging/auth-http-internal-backends-with-internal.sh
diff --git a/deps/rabbitmq_management/selenium/suites/authnz-messaging/auth-http-internal-backends.sh b/selenium/suites/authnz-messaging/auth-http-internal-backends.sh
similarity index 100%
rename from deps/rabbitmq_management/selenium/suites/authnz-messaging/auth-http-internal-backends.sh
rename to selenium/suites/authnz-messaging/auth-http-internal-backends.sh
diff --git a/deps/rabbitmq_management/selenium/suites/authnz-messaging/auth-internal-backend.sh b/selenium/suites/authnz-messaging/auth-internal-backend.sh
similarity index 100%
rename from deps/rabbitmq_management/selenium/suites/authnz-messaging/auth-internal-backend.sh
rename to selenium/suites/authnz-messaging/auth-internal-backend.sh
diff --git a/deps/rabbitmq_management/selenium/suites/authnz-messaging/auth-internal-http-backends.sh b/selenium/suites/authnz-messaging/auth-internal-http-backends.sh
similarity index 100%
rename from deps/rabbitmq_management/selenium/suites/authnz-messaging/auth-internal-http-backends.sh
rename to selenium/suites/authnz-messaging/auth-internal-http-backends.sh
diff --git a/deps/rabbitmq_management/selenium/suites/authnz-messaging/auth-ldap-backend.sh b/selenium/suites/authnz-messaging/auth-ldap-backend.sh
similarity index 100%
rename from deps/rabbitmq_management/selenium/suites/authnz-messaging/auth-ldap-backend.sh
rename to selenium/suites/authnz-messaging/auth-ldap-backend.sh
diff --git a/deps/rabbitmq_management/selenium/suites/authnz-messaging/auth-oauth-backend-with-devproducer.sh b/selenium/suites/authnz-messaging/auth-oauth-backend-with-devproducer.sh
similarity index 100%
rename from deps/rabbitmq_management/selenium/suites/authnz-messaging/auth-oauth-backend-with-devproducer.sh
rename to selenium/suites/authnz-messaging/auth-oauth-backend-with-devproducer.sh
diff --git a/deps/rabbitmq_management/selenium/suites/authnz-messaging/auth-oauth-backend-with-prodproducer.sh b/selenium/suites/authnz-messaging/auth-oauth-backend-with-prodproducer.sh
similarity index 100%
rename from deps/rabbitmq_management/selenium/suites/authnz-messaging/auth-oauth-backend-with-prodproducer.sh
rename to selenium/suites/authnz-messaging/auth-oauth-backend-with-prodproducer.sh
diff --git a/deps/rabbitmq_management/selenium/suites/authnz-mgt/basic-auth-behind-proxy.sh b/selenium/suites/authnz-mgt/basic-auth-behind-proxy.sh
similarity index 100%
rename from deps/rabbitmq_management/selenium/suites/authnz-mgt/basic-auth-behind-proxy.sh
rename to selenium/suites/authnz-mgt/basic-auth-behind-proxy.sh
diff --git a/deps/rabbitmq_management/selenium/suites/authnz-mgt/basic-auth-with-mgt-prefix.sh b/selenium/suites/authnz-mgt/basic-auth-with-mgt-prefix.sh
similarity index 100%
rename from deps/rabbitmq_management/selenium/suites/authnz-mgt/basic-auth-with-mgt-prefix.sh
rename to selenium/suites/authnz-mgt/basic-auth-with-mgt-prefix.sh
diff --git a/deps/rabbitmq_management/selenium/suites/authnz-mgt/basic-auth.sh b/selenium/suites/authnz-mgt/basic-auth.sh
similarity index 100%
rename from deps/rabbitmq_management/selenium/suites/authnz-mgt/basic-auth.sh
rename to selenium/suites/authnz-mgt/basic-auth.sh
diff --git a/deps/rabbitmq_management/selenium/suites/authnz-mgt/multi-oauth-with-basic-auth-when-idps-down.sh b/selenium/suites/authnz-mgt/multi-oauth-with-basic-auth-when-idps-down.sh
similarity index 100%
rename from deps/rabbitmq_management/selenium/suites/authnz-mgt/multi-oauth-with-basic-auth-when-idps-down.sh
rename to selenium/suites/authnz-mgt/multi-oauth-with-basic-auth-when-idps-down.sh
diff --git a/deps/rabbitmq_management/selenium/suites/authnz-mgt/multi-oauth-with-basic-auth.sh b/selenium/suites/authnz-mgt/multi-oauth-with-basic-auth.sh
similarity index 100%
rename from deps/rabbitmq_management/selenium/suites/authnz-mgt/multi-oauth-with-basic-auth.sh
rename to selenium/suites/authnz-mgt/multi-oauth-with-basic-auth.sh
diff --git a/deps/rabbitmq_management/selenium/suites/authnz-mgt/multi-oauth-without-basic-auth-and-resource-label-and-scopes.sh b/selenium/suites/authnz-mgt/multi-oauth-without-basic-auth-and-resource-label-and-scopes.sh
similarity index 100%
rename from deps/rabbitmq_management/selenium/suites/authnz-mgt/multi-oauth-without-basic-auth-and-resource-label-and-scopes.sh
rename to selenium/suites/authnz-mgt/multi-oauth-without-basic-auth-and-resource-label-and-scopes.sh
diff --git a/deps/rabbitmq_management/selenium/suites/authnz-mgt/multi-oauth-without-basic-auth.sh b/selenium/suites/authnz-mgt/multi-oauth-without-basic-auth.sh
similarity index 100%
rename from deps/rabbitmq_management/selenium/suites/authnz-mgt/multi-oauth-without-basic-auth.sh
rename to selenium/suites/authnz-mgt/multi-oauth-without-basic-auth.sh
diff --git a/deps/rabbitmq_management/selenium/suites/authnz-mgt/oauth-and-basic-auth.sh b/selenium/suites/authnz-mgt/oauth-and-basic-auth.sh
similarity index 100%
rename from deps/rabbitmq_management/selenium/suites/authnz-mgt/oauth-and-basic-auth.sh
rename to selenium/suites/authnz-mgt/oauth-and-basic-auth.sh
diff --git a/deps/rabbitmq_management/selenium/suites/authnz-mgt/oauth-idp-initiated-with-uaa-and-prefix-via-proxy.sh b/selenium/suites/authnz-mgt/oauth-idp-initiated-with-uaa-and-prefix-via-proxy.sh
similarity index 100%
rename from deps/rabbitmq_management/selenium/suites/authnz-mgt/oauth-idp-initiated-with-uaa-and-prefix-via-proxy.sh
rename to selenium/suites/authnz-mgt/oauth-idp-initiated-with-uaa-and-prefix-via-proxy.sh
diff --git a/deps/rabbitmq_management/selenium/suites/authnz-mgt/oauth-idp-initiated-with-uaa-and-prefix.sh b/selenium/suites/authnz-mgt/oauth-idp-initiated-with-uaa-and-prefix.sh
similarity index 100%
rename from deps/rabbitmq_management/selenium/suites/authnz-mgt/oauth-idp-initiated-with-uaa-and-prefix.sh
rename to selenium/suites/authnz-mgt/oauth-idp-initiated-with-uaa-and-prefix.sh
diff --git a/deps/rabbitmq_management/selenium/suites/authnz-mgt/oauth-idp-initiated-with-uaa-via-proxy.sh b/selenium/suites/authnz-mgt/oauth-idp-initiated-with-uaa-via-proxy.sh
similarity index 100%
rename from deps/rabbitmq_management/selenium/suites/authnz-mgt/oauth-idp-initiated-with-uaa-via-proxy.sh
rename to selenium/suites/authnz-mgt/oauth-idp-initiated-with-uaa-via-proxy.sh
diff --git a/deps/rabbitmq_management/selenium/suites/authnz-mgt/oauth-idp-initiated-with-uaa.sh b/selenium/suites/authnz-mgt/oauth-idp-initiated-with-uaa.sh
similarity index 100%
rename from deps/rabbitmq_management/selenium/suites/authnz-mgt/oauth-idp-initiated-with-uaa.sh
rename to selenium/suites/authnz-mgt/oauth-idp-initiated-with-uaa.sh
diff --git a/deps/rabbitmq_management/selenium/suites/authnz-mgt/oauth-with-keycloak-with-verify-none.sh b/selenium/suites/authnz-mgt/oauth-with-keycloak-with-verify-none.sh
similarity index 100%
rename from deps/rabbitmq_management/selenium/suites/authnz-mgt/oauth-with-keycloak-with-verify-none.sh
rename to selenium/suites/authnz-mgt/oauth-with-keycloak-with-verify-none.sh
diff --git a/deps/rabbitmq_management/selenium/suites/authnz-mgt/oauth-with-keycloak.sh b/selenium/suites/authnz-mgt/oauth-with-keycloak.sh
similarity index 100%
rename from deps/rabbitmq_management/selenium/suites/authnz-mgt/oauth-with-keycloak.sh
rename to selenium/suites/authnz-mgt/oauth-with-keycloak.sh
diff --git a/deps/rabbitmq_management/selenium/suites/authnz-mgt/oauth-with-uaa-and-mgt-prefix.sh b/selenium/suites/authnz-mgt/oauth-with-uaa-and-mgt-prefix.sh
similarity index 100%
rename from deps/rabbitmq_management/selenium/suites/authnz-mgt/oauth-with-uaa-and-mgt-prefix.sh
rename to selenium/suites/authnz-mgt/oauth-with-uaa-and-mgt-prefix.sh
diff --git a/deps/rabbitmq_management/selenium/suites/authnz-mgt/oauth-with-uaa-down-but-with-basic-auth.sh b/selenium/suites/authnz-mgt/oauth-with-uaa-down-but-with-basic-auth.sh
similarity index 100%
rename from deps/rabbitmq_management/selenium/suites/authnz-mgt/oauth-with-uaa-down-but-with-basic-auth.sh
rename to selenium/suites/authnz-mgt/oauth-with-uaa-down-but-with-basic-auth.sh
diff --git a/deps/rabbitmq_management/selenium/suites/authnz-mgt/oauth-with-uaa-down.sh b/selenium/suites/authnz-mgt/oauth-with-uaa-down.sh
similarity index 100%
rename from deps/rabbitmq_management/selenium/suites/authnz-mgt/oauth-with-uaa-down.sh
rename to selenium/suites/authnz-mgt/oauth-with-uaa-down.sh
diff --git a/deps/rabbitmq_management/selenium/suites/authnz-mgt/oauth-with-uaa.sh b/selenium/suites/authnz-mgt/oauth-with-uaa.sh
similarity index 100%
rename from deps/rabbitmq_management/selenium/suites/authnz-mgt/oauth-with-uaa.sh
rename to selenium/suites/authnz-mgt/oauth-with-uaa.sh
diff --git a/deps/rabbitmq_management/selenium/suites/mgt/definitions.sh b/selenium/suites/mgt/definitions.sh
similarity index 100%
rename from deps/rabbitmq_management/selenium/suites/mgt/definitions.sh
rename to selenium/suites/mgt/definitions.sh
diff --git a/deps/rabbitmq_management/selenium/suites/mgt/exchanges.sh b/selenium/suites/mgt/exchanges.sh
similarity index 100%
rename from deps/rabbitmq_management/selenium/suites/mgt/exchanges.sh
rename to selenium/suites/mgt/exchanges.sh
diff --git a/deps/rabbitmq_management/selenium/suites/mgt/limits.sh b/selenium/suites/mgt/limits.sh
similarity index 100%
rename from deps/rabbitmq_management/selenium/suites/mgt/limits.sh
rename to selenium/suites/mgt/limits.sh
diff --git a/deps/rabbitmq_management/selenium/suites/mgt/mgt-only-exchanges.sh b/selenium/suites/mgt/mgt-only-exchanges.sh
similarity index 100%
rename from deps/rabbitmq_management/selenium/suites/mgt/mgt-only-exchanges.sh
rename to selenium/suites/mgt/mgt-only-exchanges.sh
diff --git a/deps/rabbitmq_management/selenium/suites/mgt/vhosts.sh b/selenium/suites/mgt/vhosts.sh
similarity index 100%
rename from deps/rabbitmq_management/selenium/suites/mgt/vhosts.sh
rename to selenium/suites/mgt/vhosts.sh
diff --git a/deps/rabbitmq_management/selenium/test/authnz-msg-protocols/advanced.auth-ldap.config b/selenium/test/authnz-msg-protocols/advanced.auth-ldap.config
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/authnz-msg-protocols/advanced.auth-ldap.config
rename to selenium/test/authnz-msg-protocols/advanced.auth-ldap.config
diff --git a/deps/rabbitmq_management/selenium/test/authnz-msg-protocols/amqp10.js b/selenium/test/authnz-msg-protocols/amqp10.js
similarity index 96%
rename from deps/rabbitmq_management/selenium/test/authnz-msg-protocols/amqp10.js
rename to selenium/test/authnz-msg-protocols/amqp10.js
index 3a679bb21587..0901ae039ce3 100644
--- a/deps/rabbitmq_management/selenium/test/authnz-msg-protocols/amqp10.js
+++ b/selenium/test/authnz-msg-protocols/amqp10.js
@@ -1,5 +1,5 @@
const assert = require('assert')
-const { getURLForProtocol, tokenFor, openIdConfiguration } = require('../utils')
+const { tokenFor, openIdConfiguration } = require('../utils')
const { reset, expectUser, expectVhost, expectResource, allow, verifyAll } = require('../mock_http_backend')
const {execSync} = require('child_process')
diff --git a/deps/rabbitmq_management/selenium/test/authnz-msg-protocols/enabled_plugins b/selenium/test/authnz-msg-protocols/enabled_plugins
similarity index 90%
rename from deps/rabbitmq_management/selenium/test/authnz-msg-protocols/enabled_plugins
rename to selenium/test/authnz-msg-protocols/enabled_plugins
index 59b57cb3828f..37e5fdfce132 100644
--- a/deps/rabbitmq_management/selenium/test/authnz-msg-protocols/enabled_plugins
+++ b/selenium/test/authnz-msg-protocols/enabled_plugins
@@ -12,5 +12,4 @@
rabbitmq_shovel_management,rabbitmq_stomp,rabbitmq_stream,
rabbitmq_stream_common,rabbitmq_stream_management,rabbitmq_top,
rabbitmq_tracing,rabbitmq_trust_store,rabbitmq_web_dispatch,
- rabbitmq_web_mqtt,rabbitmq_web_mqtt_examples,rabbitmq_web_stomp,
- rabbitmq_web_stomp_examples].
+ rabbitmq_web_mqtt,rabbitmq_web_stomp].
diff --git a/deps/rabbitmq_management/selenium/test/authnz-msg-protocols/env.auth-http.docker b/selenium/test/authnz-msg-protocols/env.auth-http.docker
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/authnz-msg-protocols/env.auth-http.docker
rename to selenium/test/authnz-msg-protocols/env.auth-http.docker
diff --git a/deps/rabbitmq_management/selenium/test/authnz-msg-protocols/env.auth-http.local b/selenium/test/authnz-msg-protocols/env.auth-http.local
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/authnz-msg-protocols/env.auth-http.local
rename to selenium/test/authnz-msg-protocols/env.auth-http.local
diff --git a/deps/rabbitmq_management/selenium/test/authnz-msg-protocols/env.auth-ldap.docker b/selenium/test/authnz-msg-protocols/env.auth-ldap.docker
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/authnz-msg-protocols/env.auth-ldap.docker
rename to selenium/test/authnz-msg-protocols/env.auth-ldap.docker
diff --git a/deps/rabbitmq_management/selenium/test/authnz-msg-protocols/env.auth-ldap.local b/selenium/test/authnz-msg-protocols/env.auth-ldap.local
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/authnz-msg-protocols/env.auth-ldap.local
rename to selenium/test/authnz-msg-protocols/env.auth-ldap.local
diff --git a/deps/rabbitmq_management/selenium/test/authnz-msg-protocols/env.auth-oauth-dev.docker b/selenium/test/authnz-msg-protocols/env.auth-oauth-dev.docker
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/authnz-msg-protocols/env.auth-oauth-dev.docker
rename to selenium/test/authnz-msg-protocols/env.auth-oauth-dev.docker
diff --git a/deps/rabbitmq_management/selenium/test/authnz-msg-protocols/env.auth-oauth-dev.local b/selenium/test/authnz-msg-protocols/env.auth-oauth-dev.local
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/authnz-msg-protocols/env.auth-oauth-dev.local
rename to selenium/test/authnz-msg-protocols/env.auth-oauth-dev.local
diff --git a/deps/rabbitmq_management/selenium/test/authnz-msg-protocols/env.auth-oauth-prod.docker b/selenium/test/authnz-msg-protocols/env.auth-oauth-prod.docker
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/authnz-msg-protocols/env.auth-oauth-prod.docker
rename to selenium/test/authnz-msg-protocols/env.auth-oauth-prod.docker
diff --git a/deps/rabbitmq_management/selenium/test/authnz-msg-protocols/env.auth-oauth-prod.local b/selenium/test/authnz-msg-protocols/env.auth-oauth-prod.local
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/authnz-msg-protocols/env.auth-oauth-prod.local
rename to selenium/test/authnz-msg-protocols/env.auth-oauth-prod.local
diff --git a/deps/rabbitmq_management/selenium/test/authnz-msg-protocols/env.docker.devkeycloak b/selenium/test/authnz-msg-protocols/env.docker.devkeycloak
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/authnz-msg-protocols/env.docker.devkeycloak
rename to selenium/test/authnz-msg-protocols/env.docker.devkeycloak
diff --git a/deps/rabbitmq_management/selenium/test/authnz-msg-protocols/env.docker.prodkeycloak b/selenium/test/authnz-msg-protocols/env.docker.prodkeycloak
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/authnz-msg-protocols/env.docker.prodkeycloak
rename to selenium/test/authnz-msg-protocols/env.docker.prodkeycloak
diff --git a/deps/rabbitmq_management/selenium/test/authnz-msg-protocols/env.http-user b/selenium/test/authnz-msg-protocols/env.http-user
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/authnz-msg-protocols/env.http-user
rename to selenium/test/authnz-msg-protocols/env.http-user
diff --git a/deps/rabbitmq_management/selenium/test/authnz-msg-protocols/env.internal-user b/selenium/test/authnz-msg-protocols/env.internal-user
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/authnz-msg-protocols/env.internal-user
rename to selenium/test/authnz-msg-protocols/env.internal-user
diff --git a/deps/rabbitmq_management/selenium/test/authnz-msg-protocols/env.ldap-user b/selenium/test/authnz-msg-protocols/env.ldap-user
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/authnz-msg-protocols/env.ldap-user
rename to selenium/test/authnz-msg-protocols/env.ldap-user
diff --git a/selenium/test/authnz-msg-protocols/env.local b/selenium/test/authnz-msg-protocols/env.local
new file mode 100644
index 000000000000..69f43736edd4
--- /dev/null
+++ b/selenium/test/authnz-msg-protocols/env.local
@@ -0,0 +1 @@
+export IMPORT_DIR=test/authnz-msg-protocols/imports
diff --git a/selenium/test/authnz-msg-protocols/env.local.devkeycloak b/selenium/test/authnz-msg-protocols/env.local.devkeycloak
new file mode 100644
index 000000000000..8e5a2f2e9285
--- /dev/null
+++ b/selenium/test/authnz-msg-protocols/env.local.devkeycloak
@@ -0,0 +1,2 @@
+export DEVKEYCLOAK_URL=https://localhost:8442/realms/dev
+export DEVKEYCLOAK_CA_CERT=test/multi-oauth/devkeycloak/ca_certificate.pem
diff --git a/selenium/test/authnz-msg-protocols/env.local.prodkeycloak b/selenium/test/authnz-msg-protocols/env.local.prodkeycloak
new file mode 100644
index 000000000000..c636bf8fcd55
--- /dev/null
+++ b/selenium/test/authnz-msg-protocols/env.local.prodkeycloak
@@ -0,0 +1,2 @@
+export PRODKEYCLOAK_URL=https://localhost:8443/realms/prod
+export PRODKEYCLOAK_CA_CERT=test/multi-oauth/prodkeycloak/ca_certificate.pem
diff --git a/deps/rabbitmq_management/selenium/test/authnz-msg-protocols/env.oauth-devproducer b/selenium/test/authnz-msg-protocols/env.oauth-devproducer
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/authnz-msg-protocols/env.oauth-devproducer
rename to selenium/test/authnz-msg-protocols/env.oauth-devproducer
diff --git a/deps/rabbitmq_management/selenium/test/authnz-msg-protocols/env.oauth-prodproducer b/selenium/test/authnz-msg-protocols/env.oauth-prodproducer
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/authnz-msg-protocols/env.oauth-prodproducer
rename to selenium/test/authnz-msg-protocols/env.oauth-prodproducer
diff --git a/deps/rabbitmq_management/selenium/test/authnz-msg-protocols/imports/users.json b/selenium/test/authnz-msg-protocols/imports/users.json
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/authnz-msg-protocols/imports/users.json
rename to selenium/test/authnz-msg-protocols/imports/users.json
diff --git a/deps/rabbitmq_management/selenium/test/authnz-msg-protocols/logging.conf b/selenium/test/authnz-msg-protocols/logging.conf
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/authnz-msg-protocols/logging.conf
rename to selenium/test/authnz-msg-protocols/logging.conf
diff --git a/deps/rabbitmq_management/selenium/test/authnz-msg-protocols/mock-auth-backend-http/defaultExpectations.json b/selenium/test/authnz-msg-protocols/mock-auth-backend-http/defaultExpectations.json
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/authnz-msg-protocols/mock-auth-backend-http/defaultExpectations.json
rename to selenium/test/authnz-msg-protocols/mock-auth-backend-http/defaultExpectations.json
diff --git a/deps/rabbitmq_management/selenium/test/authnz-msg-protocols/mock-auth-backend-ldap/import.ldif b/selenium/test/authnz-msg-protocols/mock-auth-backend-ldap/import.ldif
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/authnz-msg-protocols/mock-auth-backend-ldap/import.ldif
rename to selenium/test/authnz-msg-protocols/mock-auth-backend-ldap/import.ldif
diff --git a/deps/rabbitmq_management/selenium/test/authnz-msg-protocols/mqtt.js b/selenium/test/authnz-msg-protocols/mqtt.js
similarity index 96%
rename from deps/rabbitmq_management/selenium/test/authnz-msg-protocols/mqtt.js
rename to selenium/test/authnz-msg-protocols/mqtt.js
index e71916003ef9..8a665c871834 100644
--- a/deps/rabbitmq_management/selenium/test/authnz-msg-protocols/mqtt.js
+++ b/selenium/test/authnz-msg-protocols/mqtt.js
@@ -1,5 +1,5 @@
const assert = require('assert')
-const { getURLForProtocol, tokenFor, openIdConfiguration } = require('../utils')
+const { tokenFor, openIdConfiguration } = require('../utils')
const { reset, expectUser, expectVhost, expectResource, allow, verifyAll } = require('../mock_http_backend')
const mqtt = require('mqtt');
diff --git a/deps/rabbitmq_management/selenium/test/authnz-msg-protocols/rabbitmq.auth-http.conf b/selenium/test/authnz-msg-protocols/rabbitmq.auth-http.conf
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/authnz-msg-protocols/rabbitmq.auth-http.conf
rename to selenium/test/authnz-msg-protocols/rabbitmq.auth-http.conf
diff --git a/deps/rabbitmq_management/selenium/test/authnz-msg-protocols/rabbitmq.auth-ldap.conf b/selenium/test/authnz-msg-protocols/rabbitmq.auth-ldap.conf
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/authnz-msg-protocols/rabbitmq.auth-ldap.conf
rename to selenium/test/authnz-msg-protocols/rabbitmq.auth-ldap.conf
diff --git a/deps/rabbitmq_management/selenium/test/authnz-msg-protocols/rabbitmq.auth_backends-cache-http.conf b/selenium/test/authnz-msg-protocols/rabbitmq.auth_backends-cache-http.conf
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/authnz-msg-protocols/rabbitmq.auth_backends-cache-http.conf
rename to selenium/test/authnz-msg-protocols/rabbitmq.auth_backends-cache-http.conf
diff --git a/deps/rabbitmq_management/selenium/test/authnz-msg-protocols/rabbitmq.auth_backends-cache-ldap.conf b/selenium/test/authnz-msg-protocols/rabbitmq.auth_backends-cache-ldap.conf
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/authnz-msg-protocols/rabbitmq.auth_backends-cache-ldap.conf
rename to selenium/test/authnz-msg-protocols/rabbitmq.auth_backends-cache-ldap.conf
diff --git a/deps/rabbitmq_management/selenium/test/authnz-msg-protocols/rabbitmq.auth_backends-http-internal.conf b/selenium/test/authnz-msg-protocols/rabbitmq.auth_backends-http-internal.conf
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/authnz-msg-protocols/rabbitmq.auth_backends-http-internal.conf
rename to selenium/test/authnz-msg-protocols/rabbitmq.auth_backends-http-internal.conf
diff --git a/deps/rabbitmq_management/selenium/test/authnz-msg-protocols/rabbitmq.auth_backends-http.conf b/selenium/test/authnz-msg-protocols/rabbitmq.auth_backends-http.conf
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/authnz-msg-protocols/rabbitmq.auth_backends-http.conf
rename to selenium/test/authnz-msg-protocols/rabbitmq.auth_backends-http.conf
diff --git a/deps/rabbitmq_management/selenium/test/authnz-msg-protocols/rabbitmq.auth_backends-internal-http.conf b/selenium/test/authnz-msg-protocols/rabbitmq.auth_backends-internal-http.conf
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/authnz-msg-protocols/rabbitmq.auth_backends-internal-http.conf
rename to selenium/test/authnz-msg-protocols/rabbitmq.auth_backends-internal-http.conf
diff --git a/deps/rabbitmq_management/selenium/test/authnz-msg-protocols/rabbitmq.auth_backends-internal.conf b/selenium/test/authnz-msg-protocols/rabbitmq.auth_backends-internal.conf
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/authnz-msg-protocols/rabbitmq.auth_backends-internal.conf
rename to selenium/test/authnz-msg-protocols/rabbitmq.auth_backends-internal.conf
diff --git a/deps/rabbitmq_management/selenium/test/authnz-msg-protocols/rabbitmq.auth_backends-ldap.conf b/selenium/test/authnz-msg-protocols/rabbitmq.auth_backends-ldap.conf
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/authnz-msg-protocols/rabbitmq.auth_backends-ldap.conf
rename to selenium/test/authnz-msg-protocols/rabbitmq.auth_backends-ldap.conf
diff --git a/deps/rabbitmq_management/selenium/test/authnz-msg-protocols/rabbitmq.backends-oauth.conf b/selenium/test/authnz-msg-protocols/rabbitmq.backends-oauth.conf
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/authnz-msg-protocols/rabbitmq.backends-oauth.conf
rename to selenium/test/authnz-msg-protocols/rabbitmq.backends-oauth.conf
diff --git a/selenium/test/authnz-msg-protocols/rabbitmq.cluster.conf b/selenium/test/authnz-msg-protocols/rabbitmq.cluster.conf
new file mode 100644
index 000000000000..144cc7ab05ae
--- /dev/null
+++ b/selenium/test/authnz-msg-protocols/rabbitmq.cluster.conf
@@ -0,0 +1,6 @@
+cluster_name = rabbitmq-selenium
+
+cluster_formation.peer_discovery_backend = rabbit_peer_discovery_classic_config
+cluster_formation.classic_config.nodes.1 = rabbit@rabbitmq
+cluster_formation.classic_config.nodes.2 = rabbit@rabbitmq1
+cluster_formation.classic_config.nodes.3 = rabbit@rabbitmq2
diff --git a/deps/rabbitmq_management/selenium/test/authnz-msg-protocols/rabbitmq.conf b/selenium/test/authnz-msg-protocols/rabbitmq.conf
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/authnz-msg-protocols/rabbitmq.conf
rename to selenium/test/authnz-msg-protocols/rabbitmq.conf
diff --git a/deps/rabbitmq_management/selenium/test/basic-auth/ac-administrator-without-vhost-permissions.js b/selenium/test/basic-auth/ac-administrator-without-vhost-permissions.js
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/basic-auth/ac-administrator-without-vhost-permissions.js
rename to selenium/test/basic-auth/ac-administrator-without-vhost-permissions.js
diff --git a/deps/rabbitmq_management/selenium/test/basic-auth/ac-management-without-vhost-permissions.js b/selenium/test/basic-auth/ac-management-without-vhost-permissions.js
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/basic-auth/ac-management-without-vhost-permissions.js
rename to selenium/test/basic-auth/ac-management-without-vhost-permissions.js
diff --git a/deps/rabbitmq_management/selenium/test/basic-auth/ac-management.js b/selenium/test/basic-auth/ac-management.js
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/basic-auth/ac-management.js
rename to selenium/test/basic-auth/ac-management.js
diff --git a/deps/rabbitmq_management/selenium/test/basic-auth/ac-monitoring-without-vhost-permissions.js b/selenium/test/basic-auth/ac-monitoring-without-vhost-permissions.js
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/basic-auth/ac-monitoring-without-vhost-permissions.js
rename to selenium/test/basic-auth/ac-monitoring-without-vhost-permissions.js
diff --git a/deps/rabbitmq_management/selenium/test/multi-oauth/enabled_plugins b/selenium/test/basic-auth/enabled_plugins
similarity index 90%
rename from deps/rabbitmq_management/selenium/test/multi-oauth/enabled_plugins
rename to selenium/test/basic-auth/enabled_plugins
index c91f7ba880c3..ea686b9f2b51 100644
--- a/deps/rabbitmq_management/selenium/test/multi-oauth/enabled_plugins
+++ b/selenium/test/basic-auth/enabled_plugins
@@ -12,5 +12,4 @@
rabbitmq_shovel_management,rabbitmq_stomp,rabbitmq_stream,
rabbitmq_stream_common,rabbitmq_stream_management,rabbitmq_top,
rabbitmq_tracing,rabbitmq_trust_store,rabbitmq_web_dispatch,
- rabbitmq_web_mqtt,rabbitmq_web_mqtt_examples,rabbitmq_web_stomp,
- rabbitmq_web_stomp_examples].
+ rabbitmq_web_mqtt,rabbitmq_web_stomp].
diff --git a/deps/rabbitmq_management/selenium/test/basic-auth/env.docker.proxy b/selenium/test/basic-auth/env.docker.proxy
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/basic-auth/env.docker.proxy
rename to selenium/test/basic-auth/env.docker.proxy
diff --git a/deps/rabbitmq_management/selenium/test/basic-auth/env.local b/selenium/test/basic-auth/env.local
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/basic-auth/env.local
rename to selenium/test/basic-auth/env.local
diff --git a/deps/rabbitmq_management/selenium/test/basic-auth/env.local.proxy b/selenium/test/basic-auth/env.local.proxy
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/basic-auth/env.local.proxy
rename to selenium/test/basic-auth/env.local.proxy
diff --git a/deps/rabbitmq_management/selenium/test/basic-auth/happy-login.js b/selenium/test/basic-auth/happy-login.js
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/basic-auth/happy-login.js
rename to selenium/test/basic-auth/happy-login.js
diff --git a/deps/rabbitmq_management/selenium/test/basic-auth/httpd-proxy/.htpasswd b/selenium/test/basic-auth/httpd-proxy/.htpasswd
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/basic-auth/httpd-proxy/.htpasswd
rename to selenium/test/basic-auth/httpd-proxy/.htpasswd
diff --git a/deps/rabbitmq_management/selenium/test/basic-auth/httpd-proxy/httpd.conf b/selenium/test/basic-auth/httpd-proxy/httpd.conf
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/basic-auth/httpd-proxy/httpd.conf
rename to selenium/test/basic-auth/httpd-proxy/httpd.conf
diff --git a/deps/rabbitmq_management/selenium/test/basic-auth/imports/users.json b/selenium/test/basic-auth/imports/users.json
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/basic-auth/imports/users.json
rename to selenium/test/basic-auth/imports/users.json
diff --git a/deps/rabbitmq_management/selenium/test/basic-auth/landing.js b/selenium/test/basic-auth/landing.js
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/basic-auth/landing.js
rename to selenium/test/basic-auth/landing.js
diff --git a/deps/rabbitmq_management/selenium/test/basic-auth/logging.conf b/selenium/test/basic-auth/logging.conf
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/basic-auth/logging.conf
rename to selenium/test/basic-auth/logging.conf
diff --git a/deps/rabbitmq_management/selenium/test/basic-auth/logout.js b/selenium/test/basic-auth/logout.js
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/basic-auth/logout.js
rename to selenium/test/basic-auth/logout.js
diff --git a/selenium/test/basic-auth/rabbitmq.cluster.conf b/selenium/test/basic-auth/rabbitmq.cluster.conf
new file mode 100644
index 000000000000..144cc7ab05ae
--- /dev/null
+++ b/selenium/test/basic-auth/rabbitmq.cluster.conf
@@ -0,0 +1,6 @@
+cluster_name = rabbitmq-selenium
+
+cluster_formation.peer_discovery_backend = rabbit_peer_discovery_classic_config
+cluster_formation.classic_config.nodes.1 = rabbit@rabbitmq
+cluster_formation.classic_config.nodes.2 = rabbit@rabbitmq1
+cluster_formation.classic_config.nodes.3 = rabbit@rabbitmq2
diff --git a/deps/rabbitmq_management/selenium/test/basic-auth/rabbitmq.conf b/selenium/test/basic-auth/rabbitmq.conf
similarity index 84%
rename from deps/rabbitmq_management/selenium/test/basic-auth/rabbitmq.conf
rename to selenium/test/basic-auth/rabbitmq.conf
index f5e2add9f1af..7bacc14af27a 100644
--- a/deps/rabbitmq_management/selenium/test/basic-auth/rabbitmq.conf
+++ b/selenium/test/basic-auth/rabbitmq.conf
@@ -2,3 +2,5 @@ auth_backends.1 = rabbit_auth_backend_internal
management.login_session_timeout = 1
load_definitions = ${IMPORT_DIR}/users.json
+
+loopback_users = none
diff --git a/deps/rabbitmq_management/selenium/test/basic-auth/rabbitmq.mgt-prefix.conf b/selenium/test/basic-auth/rabbitmq.mgt-prefix.conf
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/basic-auth/rabbitmq.mgt-prefix.conf
rename to selenium/test/basic-auth/rabbitmq.mgt-prefix.conf
diff --git a/deps/rabbitmq_management/selenium/test/basic-auth/session-expired.js b/selenium/test/basic-auth/session-expired.js
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/basic-auth/session-expired.js
rename to selenium/test/basic-auth/session-expired.js
diff --git a/deps/rabbitmq_management/selenium/test/basic-auth/unauthorized.js b/selenium/test/basic-auth/unauthorized.js
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/basic-auth/unauthorized.js
rename to selenium/test/basic-auth/unauthorized.js
diff --git a/deps/rabbitmq_management/selenium/test/definitions/export.js b/selenium/test/definitions/export.js
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/definitions/export.js
rename to selenium/test/definitions/export.js
diff --git a/deps/rabbitmq_management/selenium/test/definitions/import-newguest-user.json b/selenium/test/definitions/import-newguest-user.json
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/definitions/import-newguest-user.json
rename to selenium/test/definitions/import-newguest-user.json
diff --git a/deps/rabbitmq_management/selenium/test/definitions/import.js b/selenium/test/definitions/import.js
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/definitions/import.js
rename to selenium/test/definitions/import.js
diff --git a/selenium/test/env.cluster b/selenium/test/env.cluster
new file mode 100644
index 000000000000..75b4e52bc939
--- /dev/null
+++ b/selenium/test/env.cluster
@@ -0,0 +1 @@
+export RABBITMQ_CLUSTER_NODES=rabbitmq,rabbitmq1,rabbitmq2
diff --git a/deps/rabbitmq_management/selenium/test/env.docker b/selenium/test/env.docker
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/env.docker
rename to selenium/test/env.docker
diff --git a/deps/rabbitmq_management/selenium/test/env.local b/selenium/test/env.local
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/env.local
rename to selenium/test/env.local
diff --git a/deps/rabbitmq_management/selenium/test/env.tls.docker b/selenium/test/env.tls.docker
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/env.tls.docker
rename to selenium/test/env.tls.docker
diff --git a/deps/rabbitmq_management/selenium/test/env.tls.local b/selenium/test/env.tls.local
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/env.tls.local
rename to selenium/test/env.tls.local
diff --git a/deps/rabbitmq_management/selenium/test/exchanges/management.js b/selenium/test/exchanges/management.js
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/exchanges/management.js
rename to selenium/test/exchanges/management.js
diff --git a/deps/rabbitmq_management/selenium/test/limits/users.js b/selenium/test/limits/users.js
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/limits/users.js
rename to selenium/test/limits/users.js
diff --git a/deps/rabbitmq_management/selenium/test/limits/virtual-hosts.js b/selenium/test/limits/virtual-hosts.js
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/limits/virtual-hosts.js
rename to selenium/test/limits/virtual-hosts.js
diff --git a/deps/rabbitmq_management/selenium/test/mgt-only/enabled_plugins b/selenium/test/mgt-only/enabled_plugins
similarity index 90%
rename from deps/rabbitmq_management/selenium/test/mgt-only/enabled_plugins
rename to selenium/test/mgt-only/enabled_plugins
index ea2a6a29ba53..12c30741f785 100644
--- a/deps/rabbitmq_management/selenium/test/mgt-only/enabled_plugins
+++ b/selenium/test/mgt-only/enabled_plugins
@@ -12,5 +12,4 @@
rabbitmq_shovel_management,rabbitmq_stomp,rabbitmq_stream,
rabbitmq_stream_common,rabbitmq_stream_management,rabbitmq_top,
rabbitmq_tracing,rabbitmq_trust_store,rabbitmq_web_dispatch,
- rabbitmq_web_mqtt,rabbitmq_web_mqtt_examples,rabbitmq_web_stomp,
- rabbitmq_web_stomp_examples].
+ rabbitmq_web_mqtt,rabbitmq_web_stomp].
diff --git a/deps/rabbitmq_management/selenium/test/mgt-only/imports/users.json b/selenium/test/mgt-only/imports/users.json
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/mgt-only/imports/users.json
rename to selenium/test/mgt-only/imports/users.json
diff --git a/deps/rabbitmq_management/selenium/test/mgt-only/logging.conf b/selenium/test/mgt-only/logging.conf
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/mgt-only/logging.conf
rename to selenium/test/mgt-only/logging.conf
diff --git a/deps/rabbitmq_management/selenium/test/mgt-only/rabbitmq.conf b/selenium/test/mgt-only/rabbitmq.conf
similarity index 89%
rename from deps/rabbitmq_management/selenium/test/mgt-only/rabbitmq.conf
rename to selenium/test/mgt-only/rabbitmq.conf
index d82fa0963fd1..b41e3430727e 100644
--- a/deps/rabbitmq_management/selenium/test/mgt-only/rabbitmq.conf
+++ b/selenium/test/mgt-only/rabbitmq.conf
@@ -3,3 +3,5 @@ auth_backends.1 = rabbit_auth_backend_internal
management.login_session_timeout = 150
management_agent.disable_metrics_collector = true
load_definitions = ${RABBITMQ_TEST_DIR}/imports/users.json
+
+loopback_users = none
diff --git a/deps/rabbitmq_management/selenium/test/mock_http_backend.js b/selenium/test/mock_http_backend.js
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/mock_http_backend.js
rename to selenium/test/mock_http_backend.js
diff --git a/deps/rabbitmq_management/selenium/test/multi-oauth/certs/ca_certificate.pem b/selenium/test/multi-oauth/certs/ca_certificate.pem
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/multi-oauth/certs/ca_certificate.pem
rename to selenium/test/multi-oauth/certs/ca_certificate.pem
diff --git a/deps/rabbitmq_management/selenium/test/multi-oauth/certs/server_rabbitmq_certificate.pem b/selenium/test/multi-oauth/certs/server_rabbitmq_certificate.pem
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/multi-oauth/certs/server_rabbitmq_certificate.pem
rename to selenium/test/multi-oauth/certs/server_rabbitmq_certificate.pem
diff --git a/deps/rabbitmq_management/selenium/test/multi-oauth/certs/server_rabbitmq_key.pem b/selenium/test/multi-oauth/certs/server_rabbitmq_key.pem
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/multi-oauth/certs/server_rabbitmq_key.pem
rename to selenium/test/multi-oauth/certs/server_rabbitmq_key.pem
diff --git a/deps/rabbitmq_management/selenium/test/multi-oauth/devkeycloak/ca_certificate.pem b/selenium/test/multi-oauth/devkeycloak/ca_certificate.pem
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/multi-oauth/devkeycloak/ca_certificate.pem
rename to selenium/test/multi-oauth/devkeycloak/ca_certificate.pem
diff --git a/deps/rabbitmq_management/selenium/test/multi-oauth/devkeycloak/dev-realm.json b/selenium/test/multi-oauth/devkeycloak/dev-realm.json
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/multi-oauth/devkeycloak/dev-realm.json
rename to selenium/test/multi-oauth/devkeycloak/dev-realm.json
diff --git a/deps/rabbitmq_management/selenium/test/multi-oauth/devkeycloak/server_devkeycloak.p12 b/selenium/test/multi-oauth/devkeycloak/server_devkeycloak.p12
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/multi-oauth/devkeycloak/server_devkeycloak.p12
rename to selenium/test/multi-oauth/devkeycloak/server_devkeycloak.p12
diff --git a/deps/rabbitmq_management/selenium/test/multi-oauth/devkeycloak/server_devkeycloak_certificate.pem b/selenium/test/multi-oauth/devkeycloak/server_devkeycloak_certificate.pem
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/multi-oauth/devkeycloak/server_devkeycloak_certificate.pem
rename to selenium/test/multi-oauth/devkeycloak/server_devkeycloak_certificate.pem
diff --git a/deps/rabbitmq_management/selenium/test/multi-oauth/devkeycloak/server_devkeycloak_key.pem b/selenium/test/multi-oauth/devkeycloak/server_devkeycloak_key.pem
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/multi-oauth/devkeycloak/server_devkeycloak_key.pem
rename to selenium/test/multi-oauth/devkeycloak/server_devkeycloak_key.pem
diff --git a/deps/rabbitmq_management/selenium/test/oauth/enabled_plugins b/selenium/test/multi-oauth/enabled_plugins
similarity index 90%
rename from deps/rabbitmq_management/selenium/test/oauth/enabled_plugins
rename to selenium/test/multi-oauth/enabled_plugins
index c91f7ba880c3..ea686b9f2b51 100644
--- a/deps/rabbitmq_management/selenium/test/oauth/enabled_plugins
+++ b/selenium/test/multi-oauth/enabled_plugins
@@ -12,5 +12,4 @@
rabbitmq_shovel_management,rabbitmq_stomp,rabbitmq_stream,
rabbitmq_stream_common,rabbitmq_stream_management,rabbitmq_top,
rabbitmq_tracing,rabbitmq_trust_store,rabbitmq_web_dispatch,
- rabbitmq_web_mqtt,rabbitmq_web_mqtt_examples,rabbitmq_web_stomp,
- rabbitmq_web_stomp_examples].
+ rabbitmq_web_mqtt,rabbitmq_web_stomp].
diff --git a/deps/rabbitmq_management/selenium/test/multi-oauth/env.docker b/selenium/test/multi-oauth/env.docker
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/multi-oauth/env.docker
rename to selenium/test/multi-oauth/env.docker
diff --git a/deps/rabbitmq_management/selenium/test/multi-oauth/env.docker.devkeycloak b/selenium/test/multi-oauth/env.docker.devkeycloak
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/multi-oauth/env.docker.devkeycloak
rename to selenium/test/multi-oauth/env.docker.devkeycloak
diff --git a/deps/rabbitmq_management/selenium/test/multi-oauth/env.docker.prodkeycloak b/selenium/test/multi-oauth/env.docker.prodkeycloak
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/multi-oauth/env.docker.prodkeycloak
rename to selenium/test/multi-oauth/env.docker.prodkeycloak
diff --git a/deps/rabbitmq_management/selenium/test/multi-oauth/env.local b/selenium/test/multi-oauth/env.local
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/multi-oauth/env.local
rename to selenium/test/multi-oauth/env.local
diff --git a/deps/rabbitmq_management/selenium/test/authnz-msg-protocols/env.local.devkeycloak b/selenium/test/multi-oauth/env.local.devkeycloak
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/authnz-msg-protocols/env.local.devkeycloak
rename to selenium/test/multi-oauth/env.local.devkeycloak
diff --git a/deps/rabbitmq_management/selenium/test/authnz-msg-protocols/env.local.prodkeycloak b/selenium/test/multi-oauth/env.local.prodkeycloak
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/authnz-msg-protocols/env.local.prodkeycloak
rename to selenium/test/multi-oauth/env.local.prodkeycloak
diff --git a/deps/rabbitmq_management/selenium/test/multi-oauth/imports/users.json b/selenium/test/multi-oauth/imports/users.json
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/multi-oauth/imports/users.json
rename to selenium/test/multi-oauth/imports/users.json
diff --git a/deps/rabbitmq_management/selenium/test/multi-oauth/prodkeycloak/ca_certificate.pem b/selenium/test/multi-oauth/prodkeycloak/ca_certificate.pem
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/multi-oauth/prodkeycloak/ca_certificate.pem
rename to selenium/test/multi-oauth/prodkeycloak/ca_certificate.pem
diff --git a/deps/rabbitmq_management/selenium/test/multi-oauth/prodkeycloak/prod-realm.json b/selenium/test/multi-oauth/prodkeycloak/prod-realm.json
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/multi-oauth/prodkeycloak/prod-realm.json
rename to selenium/test/multi-oauth/prodkeycloak/prod-realm.json
diff --git a/deps/rabbitmq_management/selenium/test/multi-oauth/prodkeycloak/server_prodkeycloak.p12 b/selenium/test/multi-oauth/prodkeycloak/server_prodkeycloak.p12
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/multi-oauth/prodkeycloak/server_prodkeycloak.p12
rename to selenium/test/multi-oauth/prodkeycloak/server_prodkeycloak.p12
diff --git a/deps/rabbitmq_management/selenium/test/multi-oauth/prodkeycloak/server_prodkeycloak_certificate.pem b/selenium/test/multi-oauth/prodkeycloak/server_prodkeycloak_certificate.pem
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/multi-oauth/prodkeycloak/server_prodkeycloak_certificate.pem
rename to selenium/test/multi-oauth/prodkeycloak/server_prodkeycloak_certificate.pem
diff --git a/deps/rabbitmq_management/selenium/test/multi-oauth/prodkeycloak/server_prodkeycloak_key.pem b/selenium/test/multi-oauth/prodkeycloak/server_prodkeycloak_key.pem
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/multi-oauth/prodkeycloak/server_prodkeycloak_key.pem
rename to selenium/test/multi-oauth/prodkeycloak/server_prodkeycloak_key.pem
diff --git a/deps/rabbitmq_management/selenium/test/multi-oauth/rabbitmq.basic-management.conf b/selenium/test/multi-oauth/rabbitmq.basic-management.conf
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/multi-oauth/rabbitmq.basic-management.conf
rename to selenium/test/multi-oauth/rabbitmq.basic-management.conf
diff --git a/selenium/test/multi-oauth/rabbitmq.cluster.conf b/selenium/test/multi-oauth/rabbitmq.cluster.conf
new file mode 100644
index 000000000000..144cc7ab05ae
--- /dev/null
+++ b/selenium/test/multi-oauth/rabbitmq.cluster.conf
@@ -0,0 +1,6 @@
+cluster_name = rabbitmq-selenium
+
+cluster_formation.peer_discovery_backend = rabbit_peer_discovery_classic_config
+cluster_formation.classic_config.nodes.1 = rabbit@rabbitmq
+cluster_formation.classic_config.nodes.2 = rabbit@rabbitmq1
+cluster_formation.classic_config.nodes.3 = rabbit@rabbitmq2
diff --git a/deps/rabbitmq_management/selenium/test/multi-oauth/rabbitmq.conf b/selenium/test/multi-oauth/rabbitmq.conf
similarity index 98%
rename from deps/rabbitmq_management/selenium/test/multi-oauth/rabbitmq.conf
rename to selenium/test/multi-oauth/rabbitmq.conf
index a53547c10edf..81a8c55a9161 100644
--- a/deps/rabbitmq_management/selenium/test/multi-oauth/rabbitmq.conf
+++ b/selenium/test/multi-oauth/rabbitmq.conf
@@ -46,3 +46,5 @@ management.oauth_resource_servers.2.oauth_client_id = rabbit_dev_mgt_ui
management.oauth_resource_servers.3.id = rabbit_internal
management.oauth_resource_servers.3.disabled = true
+
+loopback_users = none
diff --git a/deps/rabbitmq_management/selenium/test/multi-oauth/rabbitmq.enable-basic-auth.conf b/selenium/test/multi-oauth/rabbitmq.enable-basic-auth.conf
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/multi-oauth/rabbitmq.enable-basic-auth.conf
rename to selenium/test/multi-oauth/rabbitmq.enable-basic-auth.conf
diff --git a/deps/rabbitmq_management/selenium/test/multi-oauth/rabbitmq.tls.conf b/selenium/test/multi-oauth/rabbitmq.tls.conf
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/multi-oauth/rabbitmq.tls.conf
rename to selenium/test/multi-oauth/rabbitmq.tls.conf
diff --git a/deps/rabbitmq_management/selenium/test/multi-oauth/rabbitmq.with-resource-label.conf b/selenium/test/multi-oauth/rabbitmq.with-resource-label.conf
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/multi-oauth/rabbitmq.with-resource-label.conf
rename to selenium/test/multi-oauth/rabbitmq.with-resource-label.conf
diff --git a/deps/rabbitmq_management/selenium/test/multi-oauth/rabbitmq.with-resource-scopes.conf b/selenium/test/multi-oauth/rabbitmq.with-resource-scopes.conf
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/multi-oauth/rabbitmq.with-resource-scopes.conf
rename to selenium/test/multi-oauth/rabbitmq.with-resource-scopes.conf
diff --git a/deps/rabbitmq_management/selenium/test/multi-oauth/with-basic-auth-idps-down/happy-login.js b/selenium/test/multi-oauth/with-basic-auth-idps-down/happy-login.js
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/multi-oauth/with-basic-auth-idps-down/happy-login.js
rename to selenium/test/multi-oauth/with-basic-auth-idps-down/happy-login.js
diff --git a/deps/rabbitmq_management/selenium/test/multi-oauth/with-basic-auth-idps-down/landing.js b/selenium/test/multi-oauth/with-basic-auth-idps-down/landing.js
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/multi-oauth/with-basic-auth-idps-down/landing.js
rename to selenium/test/multi-oauth/with-basic-auth-idps-down/landing.js
diff --git a/deps/rabbitmq_management/selenium/test/multi-oauth/with-basic-auth/happy-login.js b/selenium/test/multi-oauth/with-basic-auth/happy-login.js
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/multi-oauth/with-basic-auth/happy-login.js
rename to selenium/test/multi-oauth/with-basic-auth/happy-login.js
diff --git a/deps/rabbitmq_management/selenium/test/multi-oauth/with-basic-auth/landing.js b/selenium/test/multi-oauth/with-basic-auth/landing.js
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/multi-oauth/with-basic-auth/landing.js
rename to selenium/test/multi-oauth/with-basic-auth/landing.js
diff --git a/deps/rabbitmq_management/selenium/test/multi-oauth/without-basic-auth/happy-login.js b/selenium/test/multi-oauth/without-basic-auth/happy-login.js
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/multi-oauth/without-basic-auth/happy-login.js
rename to selenium/test/multi-oauth/without-basic-auth/happy-login.js
diff --git a/deps/rabbitmq_management/selenium/test/multi-oauth/without-basic-auth/landing.js b/selenium/test/multi-oauth/without-basic-auth/landing.js
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/multi-oauth/without-basic-auth/landing.js
rename to selenium/test/multi-oauth/without-basic-auth/landing.js
diff --git a/deps/rabbitmq_management/selenium/test/oauth/certs/ca_certificate.pem b/selenium/test/oauth/certs/ca_certificate.pem
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/oauth/certs/ca_certificate.pem
rename to selenium/test/oauth/certs/ca_certificate.pem
diff --git a/deps/rabbitmq_management/selenium/test/oauth/certs/server_rabbitmq_certificate.pem b/selenium/test/oauth/certs/server_rabbitmq_certificate.pem
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/oauth/certs/server_rabbitmq_certificate.pem
rename to selenium/test/oauth/certs/server_rabbitmq_certificate.pem
diff --git a/deps/rabbitmq_management/selenium/test/oauth/certs/server_rabbitmq_key.pem b/selenium/test/oauth/certs/server_rabbitmq_key.pem
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/oauth/certs/server_rabbitmq_key.pem
rename to selenium/test/oauth/certs/server_rabbitmq_key.pem
diff --git a/deps/rabbitmq_management/selenium/test/basic-auth/enabled_plugins b/selenium/test/oauth/enabled_plugins
similarity index 57%
rename from deps/rabbitmq_management/selenium/test/basic-auth/enabled_plugins
rename to selenium/test/oauth/enabled_plugins
index c91f7ba880c3..8dbd7d6cbf63 100644
--- a/deps/rabbitmq_management/selenium/test/basic-auth/enabled_plugins
+++ b/selenium/test/oauth/enabled_plugins
@@ -4,13 +4,13 @@
rabbitmq_auth_backend_oauth2,rabbitmq_auth_mechanism_ssl,rabbitmq_aws,
rabbitmq_consistent_hash_exchange,rabbitmq_event_exchange,
rabbitmq_federation,rabbitmq_federation_management,
- rabbitmq_jms_topic_exchange,rabbitmq_management,rabbitmq_management_agent,
- rabbitmq_mqtt,rabbitmq_peer_discovery_aws,rabbitmq_peer_discovery_common,
+ rabbitmq_federation_prometheus,rabbitmq_jms_topic_exchange,
+ rabbitmq_management,rabbitmq_management_agent,rabbitmq_mqtt,
+ rabbitmq_peer_discovery_aws,rabbitmq_peer_discovery_common,
rabbitmq_peer_discovery_consul,rabbitmq_peer_discovery_etcd,
rabbitmq_peer_discovery_k8s,rabbitmq_prometheus,rabbitmq_random_exchange,
rabbitmq_recent_history_exchange,rabbitmq_sharding,rabbitmq_shovel,
- rabbitmq_shovel_management,rabbitmq_stomp,rabbitmq_stream,
- rabbitmq_stream_common,rabbitmq_stream_management,rabbitmq_top,
- rabbitmq_tracing,rabbitmq_trust_store,rabbitmq_web_dispatch,
- rabbitmq_web_mqtt,rabbitmq_web_mqtt_examples,rabbitmq_web_stomp,
- rabbitmq_web_stomp_examples].
+ rabbitmq_shovel_management,rabbitmq_shovel_prometheus,rabbitmq_stomp,
+ rabbitmq_stream,rabbitmq_stream_common,rabbitmq_stream_management,
+ rabbitmq_top,rabbitmq_tracing,rabbitmq_trust_store,rabbitmq_web_dispatch,
+ rabbitmq_web_mqtt,rabbitmq_web_stomp].
diff --git a/deps/rabbitmq_management/selenium/test/oauth/env.docker b/selenium/test/oauth/env.docker
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/oauth/env.docker
rename to selenium/test/oauth/env.docker
diff --git a/deps/rabbitmq_management/selenium/test/oauth/env.docker.fakeportal b/selenium/test/oauth/env.docker.fakeportal
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/oauth/env.docker.fakeportal
rename to selenium/test/oauth/env.docker.fakeportal
diff --git a/deps/rabbitmq_management/selenium/test/oauth/env.docker.fakeproxy b/selenium/test/oauth/env.docker.fakeproxy
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/oauth/env.docker.fakeproxy
rename to selenium/test/oauth/env.docker.fakeproxy
diff --git a/deps/rabbitmq_management/selenium/test/oauth/env.docker.keycloak b/selenium/test/oauth/env.docker.keycloak
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/oauth/env.docker.keycloak
rename to selenium/test/oauth/env.docker.keycloak
diff --git a/deps/rabbitmq_management/selenium/test/oauth/env.docker.uaa b/selenium/test/oauth/env.docker.uaa
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/oauth/env.docker.uaa
rename to selenium/test/oauth/env.docker.uaa
diff --git a/deps/rabbitmq_management/selenium/test/oauth/env.enabled_basic_auth b/selenium/test/oauth/env.enabled_basic_auth
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/oauth/env.enabled_basic_auth
rename to selenium/test/oauth/env.enabled_basic_auth
diff --git a/deps/rabbitmq_management/selenium/test/oauth/env.fakeportal-oauth-provider b/selenium/test/oauth/env.fakeportal-oauth-provider
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/oauth/env.fakeportal-oauth-provider
rename to selenium/test/oauth/env.fakeportal-oauth-provider
diff --git a/deps/rabbitmq_management/selenium/test/oauth/env.fakeproxy b/selenium/test/oauth/env.fakeproxy
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/oauth/env.fakeproxy
rename to selenium/test/oauth/env.fakeproxy
diff --git a/deps/rabbitmq_management/selenium/test/oauth/env.keycloak b/selenium/test/oauth/env.keycloak
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/oauth/env.keycloak
rename to selenium/test/oauth/env.keycloak
diff --git a/deps/rabbitmq_management/selenium/test/oauth/env.keycloak-oauth-provider b/selenium/test/oauth/env.keycloak-oauth-provider
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/oauth/env.keycloak-oauth-provider
rename to selenium/test/oauth/env.keycloak-oauth-provider
diff --git a/selenium/test/oauth/env.local b/selenium/test/oauth/env.local
new file mode 100644
index 000000000000..80cfe7430e52
--- /dev/null
+++ b/selenium/test/oauth/env.local
@@ -0,0 +1 @@
+export OAUTH_SERVER_CONFIG_BASEDIR=selenium/test
diff --git a/deps/rabbitmq_management/selenium/test/oauth/env.local.fakeportal b/selenium/test/oauth/env.local.fakeportal
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/oauth/env.local.fakeportal
rename to selenium/test/oauth/env.local.fakeportal
diff --git a/deps/rabbitmq_management/selenium/test/oauth/env.local.fakeproxy b/selenium/test/oauth/env.local.fakeproxy
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/oauth/env.local.fakeproxy
rename to selenium/test/oauth/env.local.fakeproxy
diff --git a/deps/rabbitmq_management/selenium/test/oauth/env.local.keycloak b/selenium/test/oauth/env.local.keycloak
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/oauth/env.local.keycloak
rename to selenium/test/oauth/env.local.keycloak
diff --git a/deps/rabbitmq_management/selenium/test/oauth/env.local.uaa b/selenium/test/oauth/env.local.uaa
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/oauth/env.local.uaa
rename to selenium/test/oauth/env.local.uaa
diff --git a/deps/rabbitmq_management/selenium/test/oauth/env.mgt-prefix b/selenium/test/oauth/env.mgt-prefix
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/oauth/env.mgt-prefix
rename to selenium/test/oauth/env.mgt-prefix
diff --git a/deps/rabbitmq_management/selenium/test/oauth/env.uaa b/selenium/test/oauth/env.uaa
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/oauth/env.uaa
rename to selenium/test/oauth/env.uaa
diff --git a/deps/rabbitmq_management/selenium/test/oauth/env.uaa-oauth-provider b/selenium/test/oauth/env.uaa-oauth-provider
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/oauth/env.uaa-oauth-provider
rename to selenium/test/oauth/env.uaa-oauth-provider
diff --git a/deps/rabbitmq_management/selenium/test/oauth/imports/users.json b/selenium/test/oauth/imports/users.json
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/oauth/imports/users.json
rename to selenium/test/oauth/imports/users.json
diff --git a/deps/rabbitmq_management/selenium/test/oauth/keycloak/ca_certificate.pem b/selenium/test/oauth/keycloak/ca_certificate.pem
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/oauth/keycloak/ca_certificate.pem
rename to selenium/test/oauth/keycloak/ca_certificate.pem
diff --git a/deps/rabbitmq_management/selenium/test/oauth/keycloak/server_keycloak_certificate.pem b/selenium/test/oauth/keycloak/server_keycloak_certificate.pem
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/oauth/keycloak/server_keycloak_certificate.pem
rename to selenium/test/oauth/keycloak/server_keycloak_certificate.pem
diff --git a/deps/rabbitmq_management/selenium/test/oauth/keycloak/server_keycloak_key.pem b/selenium/test/oauth/keycloak/server_keycloak_key.pem
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/oauth/keycloak/server_keycloak_key.pem
rename to selenium/test/oauth/keycloak/server_keycloak_key.pem
diff --git a/deps/rabbitmq_management/selenium/test/oauth/keycloak/signing-key.pem b/selenium/test/oauth/keycloak/signing-key.pem
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/oauth/keycloak/signing-key.pem
rename to selenium/test/oauth/keycloak/signing-key.pem
diff --git a/deps/rabbitmq_management/selenium/test/oauth/keycloak/test-realm.json b/selenium/test/oauth/keycloak/test-realm.json
similarity index 99%
rename from deps/rabbitmq_management/selenium/test/oauth/keycloak/test-realm.json
rename to selenium/test/oauth/keycloak/test-realm.json
index c287be00464f..7e812c257494 100644
--- a/deps/rabbitmq_management/selenium/test/oauth/keycloak/test-realm.json
+++ b/selenium/test/oauth/keycloak/test-realm.json
@@ -1468,8 +1468,8 @@
"enabled" : true,
"alwaysDisplayInConsole" : false,
"clientAuthenticatorType" : "client-secret",
- "redirectUris" : [ "${RABBITMQ_SCHEME}://${RABBITMQ_HOST}${RABBITMQ_PATH}/*" ],
- "webOrigins" : [ "+" ],
+ "redirectUris" : [ "*" ],
+ "webOrigins" : [ "*" ],
"notBefore" : 0,
"bearerOnly" : false,
"consentRequired" : false,
diff --git a/deps/rabbitmq_management/selenium/test/oauth/logging.conf b/selenium/test/oauth/logging.conf
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/oauth/logging.conf
rename to selenium/test/oauth/logging.conf
diff --git a/selenium/test/oauth/rabbitmq.cluster.conf b/selenium/test/oauth/rabbitmq.cluster.conf
new file mode 100644
index 000000000000..144cc7ab05ae
--- /dev/null
+++ b/selenium/test/oauth/rabbitmq.cluster.conf
@@ -0,0 +1,6 @@
+cluster_name = rabbitmq-selenium
+
+cluster_formation.peer_discovery_backend = rabbit_peer_discovery_classic_config
+cluster_formation.classic_config.nodes.1 = rabbit@rabbitmq
+cluster_formation.classic_config.nodes.2 = rabbit@rabbitmq1
+cluster_formation.classic_config.nodes.3 = rabbit@rabbitmq2
diff --git a/deps/rabbitmq_management/selenium/test/oauth/rabbitmq.conf b/selenium/test/oauth/rabbitmq.conf
similarity index 94%
rename from deps/rabbitmq_management/selenium/test/oauth/rabbitmq.conf
rename to selenium/test/oauth/rabbitmq.conf
index d8534a9a1fe0..02b0227d4bf8 100644
--- a/deps/rabbitmq_management/selenium/test/oauth/rabbitmq.conf
+++ b/selenium/test/oauth/rabbitmq.conf
@@ -10,3 +10,6 @@ auth_oauth2.resource_server_id = rabbitmq
auth_oauth2.preferred_username_claims.1 = user_name
auth_oauth2.preferred_username_claims.2 = preferred_username
auth_oauth2.preferred_username_claims.3 = email
+
+
+loopback_users = none
diff --git a/deps/rabbitmq_management/selenium/test/oauth/rabbitmq.enable-basic-auth.conf b/selenium/test/oauth/rabbitmq.enable-basic-auth.conf
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/oauth/rabbitmq.enable-basic-auth.conf
rename to selenium/test/oauth/rabbitmq.enable-basic-auth.conf
diff --git a/deps/rabbitmq_management/selenium/test/oauth/rabbitmq.fakeportal-mgt-oauth-provider.conf b/selenium/test/oauth/rabbitmq.fakeportal-mgt-oauth-provider.conf
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/oauth/rabbitmq.fakeportal-mgt-oauth-provider.conf
rename to selenium/test/oauth/rabbitmq.fakeportal-mgt-oauth-provider.conf
diff --git a/deps/rabbitmq_management/selenium/test/oauth/rabbitmq.idp-initiated.conf b/selenium/test/oauth/rabbitmq.idp-initiated.conf
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/oauth/rabbitmq.idp-initiated.conf
rename to selenium/test/oauth/rabbitmq.idp-initiated.conf
diff --git a/deps/rabbitmq_management/selenium/test/oauth/rabbitmq.keycloak-mgt-oauth-provider.conf b/selenium/test/oauth/rabbitmq.keycloak-mgt-oauth-provider.conf
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/oauth/rabbitmq.keycloak-mgt-oauth-provider.conf
rename to selenium/test/oauth/rabbitmq.keycloak-mgt-oauth-provider.conf
diff --git a/deps/rabbitmq_management/selenium/test/oauth/rabbitmq.keycloak-oauth-provider.conf b/selenium/test/oauth/rabbitmq.keycloak-oauth-provider.conf
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/oauth/rabbitmq.keycloak-oauth-provider.conf
rename to selenium/test/oauth/rabbitmq.keycloak-oauth-provider.conf
diff --git a/deps/rabbitmq_management/selenium/test/oauth/rabbitmq.keycloak-verify-none-oauth-provider.conf b/selenium/test/oauth/rabbitmq.keycloak-verify-none-oauth-provider.conf
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/oauth/rabbitmq.keycloak-verify-none-oauth-provider.conf
rename to selenium/test/oauth/rabbitmq.keycloak-verify-none-oauth-provider.conf
diff --git a/deps/rabbitmq_management/selenium/test/oauth/rabbitmq.load-user-definitions.conf b/selenium/test/oauth/rabbitmq.load-user-definitions.conf
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/oauth/rabbitmq.load-user-definitions.conf
rename to selenium/test/oauth/rabbitmq.load-user-definitions.conf
diff --git a/deps/rabbitmq_management/selenium/test/oauth/rabbitmq.mgt-prefix.conf b/selenium/test/oauth/rabbitmq.mgt-prefix.conf
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/oauth/rabbitmq.mgt-prefix.conf
rename to selenium/test/oauth/rabbitmq.mgt-prefix.conf
diff --git a/deps/rabbitmq_management/selenium/test/oauth/rabbitmq.tls.conf b/selenium/test/oauth/rabbitmq.tls.conf
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/oauth/rabbitmq.tls.conf
rename to selenium/test/oauth/rabbitmq.tls.conf
diff --git a/deps/rabbitmq_management/selenium/test/oauth/rabbitmq.uaa-mgt-oauth-provider.conf b/selenium/test/oauth/rabbitmq.uaa-mgt-oauth-provider.conf
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/oauth/rabbitmq.uaa-mgt-oauth-provider.conf
rename to selenium/test/oauth/rabbitmq.uaa-mgt-oauth-provider.conf
diff --git a/deps/rabbitmq_management/selenium/test/oauth/rabbitmq.uaa-oauth-provider.conf b/selenium/test/oauth/rabbitmq.uaa-oauth-provider.conf
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/oauth/rabbitmq.uaa-oauth-provider.conf
rename to selenium/test/oauth/rabbitmq.uaa-oauth-provider.conf
diff --git a/deps/rabbitmq_management/selenium/test/oauth/uaa/log4j2.properties b/selenium/test/oauth/uaa/log4j2.properties
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/oauth/uaa/log4j2.properties
rename to selenium/test/oauth/uaa/log4j2.properties
diff --git a/deps/rabbitmq_management/selenium/test/oauth/uaa/signing-key.pem b/selenium/test/oauth/uaa/signing-key.pem
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/oauth/uaa/signing-key.pem
rename to selenium/test/oauth/uaa/signing-key.pem
diff --git a/deps/rabbitmq_management/selenium/test/oauth/uaa/uaa.yml b/selenium/test/oauth/uaa/uaa.yml
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/oauth/uaa/uaa.yml
rename to selenium/test/oauth/uaa/uaa.yml
diff --git a/deps/rabbitmq_management/selenium/test/oauth/with-basic-auth-idp-down/happy-login.js b/selenium/test/oauth/with-basic-auth-idp-down/happy-login.js
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/oauth/with-basic-auth-idp-down/happy-login.js
rename to selenium/test/oauth/with-basic-auth-idp-down/happy-login.js
diff --git a/deps/rabbitmq_management/selenium/test/oauth/with-basic-auth-idp-down/landing.js b/selenium/test/oauth/with-basic-auth-idp-down/landing.js
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/oauth/with-basic-auth-idp-down/landing.js
rename to selenium/test/oauth/with-basic-auth-idp-down/landing.js
diff --git a/deps/rabbitmq_management/selenium/test/oauth/with-basic-auth/happy-login.js b/selenium/test/oauth/with-basic-auth/happy-login.js
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/oauth/with-basic-auth/happy-login.js
rename to selenium/test/oauth/with-basic-auth/happy-login.js
diff --git a/deps/rabbitmq_management/selenium/test/oauth/with-basic-auth/landing.js b/selenium/test/oauth/with-basic-auth/landing.js
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/oauth/with-basic-auth/landing.js
rename to selenium/test/oauth/with-basic-auth/landing.js
diff --git a/deps/rabbitmq_management/selenium/test/oauth/with-basic-auth/unauthorized.js b/selenium/test/oauth/with-basic-auth/unauthorized.js
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/oauth/with-basic-auth/unauthorized.js
rename to selenium/test/oauth/with-basic-auth/unauthorized.js
diff --git a/deps/rabbitmq_management/selenium/test/oauth/with-idp-down/landing.js b/selenium/test/oauth/with-idp-down/landing.js
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/oauth/with-idp-down/landing.js
rename to selenium/test/oauth/with-idp-down/landing.js
diff --git a/deps/rabbitmq_management/selenium/test/oauth/with-idp-initiated-via-proxy/happy-login.js b/selenium/test/oauth/with-idp-initiated-via-proxy/happy-login.js
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/oauth/with-idp-initiated-via-proxy/happy-login.js
rename to selenium/test/oauth/with-idp-initiated-via-proxy/happy-login.js
diff --git a/deps/rabbitmq_management/selenium/test/oauth/with-idp-initiated/happy-login.js b/selenium/test/oauth/with-idp-initiated/happy-login.js
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/oauth/with-idp-initiated/happy-login.js
rename to selenium/test/oauth/with-idp-initiated/happy-login.js
diff --git a/deps/rabbitmq_management/selenium/test/oauth/with-idp-initiated/landing.js b/selenium/test/oauth/with-idp-initiated/landing.js
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/oauth/with-idp-initiated/landing.js
rename to selenium/test/oauth/with-idp-initiated/landing.js
diff --git a/deps/rabbitmq_management/selenium/test/oauth/with-idp-initiated/logout.js b/selenium/test/oauth/with-idp-initiated/logout.js
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/oauth/with-idp-initiated/logout.js
rename to selenium/test/oauth/with-idp-initiated/logout.js
diff --git a/deps/rabbitmq_management/selenium/test/oauth/with-idp-initiated/token-expires.js b/selenium/test/oauth/with-idp-initiated/token-expires.js
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/oauth/with-idp-initiated/token-expires.js
rename to selenium/test/oauth/with-idp-initiated/token-expires.js
diff --git a/deps/rabbitmq_management/selenium/test/oauth/with-idp-initiated/unauthorized.js b/selenium/test/oauth/with-idp-initiated/unauthorized.js
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/oauth/with-idp-initiated/unauthorized.js
rename to selenium/test/oauth/with-idp-initiated/unauthorized.js
diff --git a/deps/rabbitmq_management/selenium/test/oauth/with-multi-resources/happy-login.js b/selenium/test/oauth/with-multi-resources/happy-login.js
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/oauth/with-multi-resources/happy-login.js
rename to selenium/test/oauth/with-multi-resources/happy-login.js
diff --git a/deps/rabbitmq_management/selenium/test/oauth/with-multi-resources/landing.js b/selenium/test/oauth/with-multi-resources/landing.js
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/oauth/with-multi-resources/landing.js
rename to selenium/test/oauth/with-multi-resources/landing.js
diff --git a/deps/rabbitmq_management/selenium/test/oauth/with-sp-initiated/happy-login.js b/selenium/test/oauth/with-sp-initiated/happy-login.js
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/oauth/with-sp-initiated/happy-login.js
rename to selenium/test/oauth/with-sp-initiated/happy-login.js
diff --git a/deps/rabbitmq_management/selenium/test/oauth/with-sp-initiated/landing.js b/selenium/test/oauth/with-sp-initiated/landing.js
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/oauth/with-sp-initiated/landing.js
rename to selenium/test/oauth/with-sp-initiated/landing.js
diff --git a/deps/rabbitmq_management/selenium/test/oauth/with-sp-initiated/logout.js b/selenium/test/oauth/with-sp-initiated/logout.js
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/oauth/with-sp-initiated/logout.js
rename to selenium/test/oauth/with-sp-initiated/logout.js
diff --git a/deps/rabbitmq_management/selenium/test/oauth/with-sp-initiated/redirection-after-login.js b/selenium/test/oauth/with-sp-initiated/redirection-after-login.js
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/oauth/with-sp-initiated/redirection-after-login.js
rename to selenium/test/oauth/with-sp-initiated/redirection-after-login.js
diff --git a/deps/rabbitmq_management/selenium/test/oauth/with-sp-initiated/token-refresh.js b/selenium/test/oauth/with-sp-initiated/token-refresh.js
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/oauth/with-sp-initiated/token-refresh.js
rename to selenium/test/oauth/with-sp-initiated/token-refresh.js
diff --git a/deps/rabbitmq_management/selenium/test/oauth/with-sp-initiated/unauthorized.js b/selenium/test/oauth/with-sp-initiated/unauthorized.js
similarity index 97%
rename from deps/rabbitmq_management/selenium/test/oauth/with-sp-initiated/unauthorized.js
rename to selenium/test/oauth/with-sp-initiated/unauthorized.js
index 846f2f91f158..5a81f6e18a06 100644
--- a/deps/rabbitmq_management/selenium/test/oauth/with-sp-initiated/unauthorized.js
+++ b/selenium/test/oauth/with-sp-initiated/unauthorized.js
@@ -47,7 +47,7 @@ describe('An user without management tag', function () {
})
it('should get redirected to home page again without error message', async function(){
- await homePage.isLoaded()
+ await driver.sleep(250)
const visible = await homePage.isWarningVisible()
assert.ok(!visible)
})
diff --git a/deps/rabbitmq_management/selenium/test/pageobjects/AdminTab.js b/selenium/test/pageobjects/AdminTab.js
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/pageobjects/AdminTab.js
rename to selenium/test/pageobjects/AdminTab.js
diff --git a/deps/rabbitmq_management/selenium/test/pageobjects/BasePage.js b/selenium/test/pageobjects/BasePage.js
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/pageobjects/BasePage.js
rename to selenium/test/pageobjects/BasePage.js
diff --git a/deps/rabbitmq_management/selenium/test/pageobjects/ExchangePage.js b/selenium/test/pageobjects/ExchangePage.js
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/pageobjects/ExchangePage.js
rename to selenium/test/pageobjects/ExchangePage.js
diff --git a/deps/rabbitmq_management/selenium/test/pageobjects/ExchangesPage.js b/selenium/test/pageobjects/ExchangesPage.js
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/pageobjects/ExchangesPage.js
rename to selenium/test/pageobjects/ExchangesPage.js
diff --git a/deps/rabbitmq_management/selenium/test/pageobjects/FakePortalPage.js b/selenium/test/pageobjects/FakePortalPage.js
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/pageobjects/FakePortalPage.js
rename to selenium/test/pageobjects/FakePortalPage.js
diff --git a/deps/rabbitmq_management/selenium/test/pageobjects/KeycloakLoginPage.js b/selenium/test/pageobjects/KeycloakLoginPage.js
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/pageobjects/KeycloakLoginPage.js
rename to selenium/test/pageobjects/KeycloakLoginPage.js
diff --git a/deps/rabbitmq_management/selenium/test/pageobjects/LimitsAdminTab.js b/selenium/test/pageobjects/LimitsAdminTab.js
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/pageobjects/LimitsAdminTab.js
rename to selenium/test/pageobjects/LimitsAdminTab.js
diff --git a/deps/rabbitmq_management/selenium/test/pageobjects/LoginPage.js b/selenium/test/pageobjects/LoginPage.js
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/pageobjects/LoginPage.js
rename to selenium/test/pageobjects/LoginPage.js
diff --git a/deps/rabbitmq_management/selenium/test/pageobjects/OverviewPage.js b/selenium/test/pageobjects/OverviewPage.js
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/pageobjects/OverviewPage.js
rename to selenium/test/pageobjects/OverviewPage.js
diff --git a/deps/rabbitmq_management/selenium/test/pageobjects/SSOHomePage.js b/selenium/test/pageobjects/SSOHomePage.js
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/pageobjects/SSOHomePage.js
rename to selenium/test/pageobjects/SSOHomePage.js
diff --git a/deps/rabbitmq_management/selenium/test/pageobjects/UAALoginPage.js b/selenium/test/pageobjects/UAALoginPage.js
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/pageobjects/UAALoginPage.js
rename to selenium/test/pageobjects/UAALoginPage.js
diff --git a/deps/rabbitmq_management/selenium/test/pageobjects/VhostAdminTab.js b/selenium/test/pageobjects/VhostAdminTab.js
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/pageobjects/VhostAdminTab.js
rename to selenium/test/pageobjects/VhostAdminTab.js
diff --git a/deps/rabbitmq_management/selenium/test/pageobjects/VhostsAdminTab.js b/selenium/test/pageobjects/VhostsAdminTab.js
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/pageobjects/VhostsAdminTab.js
rename to selenium/test/pageobjects/VhostsAdminTab.js
diff --git a/deps/rabbitmq_management/selenium/test/utils.js b/selenium/test/utils.js
similarity index 91%
rename from deps/rabbitmq_management/selenium/test/utils.js
rename to selenium/test/utils.js
index efa9a5196c95..c71ab1a13d7e 100644
--- a/deps/rabbitmq_management/selenium/test/utils.js
+++ b/selenium/test/utils.js
@@ -9,13 +9,20 @@ const KeycloakLoginPage = require('./pageobjects/KeycloakLoginPage')
const assert = require('assert')
const uaaUrl = process.env.UAA_URL || 'http://localhost:8080'
-const baseUrl = process.env.RABBITMQ_URL || 'http://localhost:15672/'
+const baseUrl = randomly_pick_baseurl(process.env.RABBITMQ_URL) || 'http://localhost:15672/'
const hostname = process.env.RABBITMQ_HOSTNAME || 'localhost'
const runLocal = String(process.env.RUN_LOCAL).toLowerCase() != 'false'
const seleniumUrl = process.env.SELENIUM_URL || 'http://selenium:4444'
const screenshotsDir = process.env.SCREENSHOTS_DIR || '/screens'
const profiles = process.env.PROFILES || ''
+function randomly_pick_baseurl(baseUrl) {
+ urls = baseUrl.split(",")
+ return urls[getRandomInt(urls.length)]
+}
+function getRandomInt(max) {
+ return Math.floor(Math.random() * max);
+}
class CaptureScreenshot {
driver
test
@@ -49,8 +56,14 @@ module.exports = {
if (!runLocal) {
builder = builder.usingServer(seleniumUrl)
}
- var chromeCapabilities = Capabilities.chrome();
+ let chromeCapabilities = Capabilities.chrome();
chromeCapabilities.setAcceptInsecureCerts(true);
+ chromeCapabilities.set('goog:chromeOptions', {
+ args: [
+ "--lang=en",
+ "--disable-search-engine-choice-screen"
+ ]
+ });
driver = builder
.forBrowser('chrome')
.withCapabilities(chromeCapabilities)
diff --git a/deps/rabbitmq_management/selenium/test/vhosts/admin-vhosts.js b/selenium/test/vhosts/admin-vhosts.js
similarity index 100%
rename from deps/rabbitmq_management/selenium/test/vhosts/admin-vhosts.js
rename to selenium/test/vhosts/admin-vhosts.js