2022-05-17 20:07:16 +08:00
|
|
|
load(
|
|
|
|
"@rules_erlang//:erlang_bytecode.bzl",
|
|
|
|
"erlang_bytecode",
|
|
|
|
)
|
2021-03-31 15:03:28 +08:00
|
|
|
load(
|
2022-01-06 03:57:48 +08:00
|
|
|
"@rules_erlang//:erlang_app.bzl",
|
2021-03-31 15:03:28 +08:00
|
|
|
"DEFAULT_ERLC_OPTS",
|
|
|
|
"DEFAULT_TEST_ERLC_OPTS",
|
2022-01-06 03:57:48 +08:00
|
|
|
"erlang_app",
|
|
|
|
"test_erlang_app",
|
2021-03-31 15:03:28 +08:00
|
|
|
)
|
2022-02-28 18:45:49 +08:00
|
|
|
load(
|
2022-05-17 20:07:16 +08:00
|
|
|
"@rules_erlang//:ct.bzl",
|
2022-02-28 18:45:49 +08:00
|
|
|
"ct_suite",
|
|
|
|
"ct_suite_variant",
|
|
|
|
_assert_suites = "assert_suites",
|
|
|
|
)
|
2021-05-11 16:44:28 +08:00
|
|
|
load("//:rabbitmq_home.bzl", "rabbitmq_home")
|
|
|
|
load("//:rabbitmq_run.bzl", "rabbitmq_run")
|
2021-03-29 17:01:43 +08:00
|
|
|
|
2022-01-03 19:38:06 +08:00
|
|
|
def without(item, elements):
|
|
|
|
c = list(elements)
|
|
|
|
c.remove(item)
|
|
|
|
return c
|
|
|
|
|
2022-01-06 03:57:48 +08:00
|
|
|
STARTS_BACKGROUND_BROKER_TAG = "starts-background-broker"
|
|
|
|
|
|
|
|
MIXED_VERSION_CLUSTER_TAG = "mixed-version-cluster"
|
|
|
|
|
2022-01-03 19:38:06 +08:00
|
|
|
RABBITMQ_ERLC_OPTS = DEFAULT_ERLC_OPTS + [
|
|
|
|
"-DINSTR_MOD=gm",
|
|
|
|
]
|
2021-03-29 17:01:43 +08:00
|
|
|
|
2021-03-31 15:03:28 +08:00
|
|
|
RABBITMQ_TEST_ERLC_OPTS = DEFAULT_TEST_ERLC_OPTS + [
|
2021-03-29 17:01:43 +08:00
|
|
|
"+nowarn_export_all",
|
2022-01-03 19:38:06 +08:00
|
|
|
"-DINSTR_MOD=gm",
|
2021-03-29 17:01:43 +08:00
|
|
|
]
|
|
|
|
|
2021-06-01 16:19:10 +08:00
|
|
|
RABBITMQ_DIALYZER_OPTS = [
|
|
|
|
"-Werror_handling",
|
|
|
|
"-Wunmatched_returns",
|
|
|
|
]
|
|
|
|
|
2022-07-28 15:20:37 +08:00
|
|
|
APP_VERSION = "3.12.0"
|
2021-03-29 17:01:43 +08:00
|
|
|
|
2022-04-07 23:19:35 +08:00
|
|
|
BROKER_VERSION_REQUIREMENTS_ANY = """
|
|
|
|
{broker_version_requirements, []}
|
|
|
|
"""
|
|
|
|
|
2021-09-30 21:49:08 +08:00
|
|
|
ALL_PLUGINS = [
|
2022-01-06 03:57:48 +08:00
|
|
|
"//deps/rabbit:erlang_app",
|
|
|
|
"//deps/rabbitmq_amqp1_0:erlang_app",
|
|
|
|
"//deps/rabbitmq_auth_backend_cache:erlang_app",
|
|
|
|
"//deps/rabbitmq_auth_backend_http:erlang_app",
|
|
|
|
"//deps/rabbitmq_auth_backend_ldap:erlang_app",
|
|
|
|
"//deps/rabbitmq_auth_backend_oauth2:erlang_app",
|
|
|
|
"//deps/rabbitmq_auth_mechanism_ssl:erlang_app",
|
|
|
|
"//deps/rabbitmq_consistent_hash_exchange:erlang_app",
|
|
|
|
"//deps/rabbitmq_event_exchange:erlang_app",
|
|
|
|
"//deps/rabbitmq_federation:erlang_app",
|
|
|
|
"//deps/rabbitmq_federation_management:erlang_app",
|
|
|
|
"//deps/rabbitmq_jms_topic_exchange:erlang_app",
|
|
|
|
"//deps/rabbitmq_management:erlang_app",
|
|
|
|
"//deps/rabbitmq_mqtt:erlang_app",
|
|
|
|
"//deps/rabbitmq_peer_discovery_aws:erlang_app",
|
|
|
|
"//deps/rabbitmq_peer_discovery_consul:erlang_app",
|
|
|
|
"//deps/rabbitmq_peer_discovery_etcd:erlang_app",
|
|
|
|
"//deps/rabbitmq_peer_discovery_k8s:erlang_app",
|
|
|
|
"//deps/rabbitmq_prometheus:erlang_app",
|
|
|
|
"//deps/rabbitmq_random_exchange:erlang_app",
|
|
|
|
"//deps/rabbitmq_recent_history_exchange:erlang_app",
|
|
|
|
"//deps/rabbitmq_sharding:erlang_app",
|
|
|
|
"//deps/rabbitmq_shovel:erlang_app",
|
|
|
|
"//deps/rabbitmq_shovel_management:erlang_app",
|
|
|
|
"//deps/rabbitmq_stomp:erlang_app",
|
|
|
|
"//deps/rabbitmq_stream:erlang_app",
|
|
|
|
"//deps/rabbitmq_stream_management:erlang_app",
|
|
|
|
"//deps/rabbitmq_top:erlang_app",
|
|
|
|
"//deps/rabbitmq_tracing:erlang_app",
|
|
|
|
"//deps/rabbitmq_trust_store:erlang_app",
|
|
|
|
"//deps/rabbitmq_web_dispatch:erlang_app",
|
|
|
|
"//deps/rabbitmq_web_mqtt:erlang_app",
|
|
|
|
"//deps/rabbitmq_web_stomp:erlang_app",
|
2021-09-30 21:49:08 +08:00
|
|
|
]
|
|
|
|
|
2021-04-16 16:22:44 +08:00
|
|
|
LABELS_WITH_TEST_VERSIONS = [
|
2022-01-06 03:57:48 +08:00
|
|
|
"//deps/amqp10_common:erlang_app",
|
|
|
|
"//deps/rabbit_common:erlang_app",
|
|
|
|
"//deps/rabbit:erlang_app",
|
|
|
|
"//deps/rabbit/apps/rabbitmq_prelaunch:erlang_app",
|
2021-04-16 16:22:44 +08:00
|
|
|
]
|
|
|
|
|
2021-09-30 21:49:08 +08:00
|
|
|
def all_plugins(rabbitmq_workspace = "@rabbitmq-server"):
|
2022-05-17 20:07:16 +08:00
|
|
|
return [
|
|
|
|
Label("{}{}".format(rabbitmq_workspace, p))
|
|
|
|
for p in ALL_PLUGINS
|
|
|
|
]
|
2021-09-30 21:49:08 +08:00
|
|
|
|
2021-04-16 16:22:44 +08:00
|
|
|
def with_test_versions(deps):
|
|
|
|
r = []
|
|
|
|
for d in deps:
|
|
|
|
if d in LABELS_WITH_TEST_VERSIONS:
|
2022-01-06 03:57:48 +08:00
|
|
|
r.append(d.replace(":erlang_app", ":test_erlang_app"))
|
2021-04-16 16:22:44 +08:00
|
|
|
else:
|
|
|
|
r.append(d)
|
|
|
|
return r
|
|
|
|
|
2022-01-06 03:57:48 +08:00
|
|
|
def rabbitmq_app(
|
2021-03-29 17:01:43 +08:00
|
|
|
app_name = "",
|
|
|
|
app_version = APP_VERSION,
|
|
|
|
app_description = "",
|
|
|
|
app_module = "",
|
|
|
|
app_registered = [],
|
2022-04-05 18:02:42 +08:00
|
|
|
app_env = "",
|
|
|
|
app_extra_keys = "",
|
2021-03-29 17:01:43 +08:00
|
|
|
extra_apps = [],
|
2022-05-17 20:07:16 +08:00
|
|
|
extra_hdrs = [],
|
|
|
|
extra_srcs = [],
|
2021-11-12 18:34:19 +08:00
|
|
|
extra_priv = [],
|
2021-03-29 17:01:43 +08:00
|
|
|
build_deps = [],
|
|
|
|
deps = [],
|
|
|
|
runtime_deps = []):
|
2022-01-06 03:57:48 +08:00
|
|
|
erlang_app(
|
2021-03-29 17:01:43 +08:00
|
|
|
app_name = app_name,
|
|
|
|
app_version = app_version,
|
|
|
|
app_description = app_description,
|
|
|
|
app_module = app_module,
|
|
|
|
app_registered = app_registered,
|
|
|
|
app_env = app_env,
|
2022-05-17 20:07:16 +08:00
|
|
|
app_extra_keys = app_extra_keys,
|
2021-03-29 17:01:43 +08:00
|
|
|
extra_apps = extra_apps,
|
2022-05-17 20:07:16 +08:00
|
|
|
extra_hdrs = extra_hdrs,
|
|
|
|
extra_srcs = extra_srcs,
|
2021-11-12 18:34:19 +08:00
|
|
|
extra_priv = extra_priv,
|
2022-01-03 19:38:06 +08:00
|
|
|
erlc_opts = select({
|
|
|
|
"//:debug_build": without("+deterministic", RABBITMQ_ERLC_OPTS),
|
|
|
|
"//conditions:default": RABBITMQ_ERLC_OPTS,
|
|
|
|
}),
|
2021-03-29 17:01:43 +08:00
|
|
|
build_deps = build_deps,
|
|
|
|
deps = deps,
|
|
|
|
runtime_deps = runtime_deps,
|
|
|
|
)
|
|
|
|
|
2022-01-06 03:57:48 +08:00
|
|
|
test_erlang_app(
|
2021-03-29 17:01:43 +08:00
|
|
|
app_name = app_name,
|
|
|
|
app_version = app_version,
|
|
|
|
app_description = app_description,
|
|
|
|
app_module = app_module,
|
|
|
|
app_registered = app_registered,
|
|
|
|
app_env = app_env,
|
2022-05-17 20:07:16 +08:00
|
|
|
app_extra_keys = app_extra_keys,
|
2021-03-29 17:01:43 +08:00
|
|
|
extra_apps = extra_apps,
|
2022-05-17 20:07:16 +08:00
|
|
|
extra_hdrs = extra_hdrs,
|
|
|
|
extra_srcs = extra_srcs,
|
2021-11-12 18:34:19 +08:00
|
|
|
extra_priv = extra_priv,
|
2022-01-03 19:38:06 +08:00
|
|
|
erlc_opts = select({
|
|
|
|
"//:debug_build": without("+deterministic", RABBITMQ_TEST_ERLC_OPTS),
|
|
|
|
"//conditions:default": RABBITMQ_TEST_ERLC_OPTS,
|
|
|
|
}),
|
2021-04-16 16:22:44 +08:00
|
|
|
build_deps = with_test_versions(build_deps),
|
|
|
|
deps = with_test_versions(deps),
|
|
|
|
runtime_deps = with_test_versions(runtime_deps),
|
2021-03-29 17:01:43 +08:00
|
|
|
)
|
|
|
|
|
2021-05-11 16:44:28 +08:00
|
|
|
def rabbitmq_suite(erlc_opts = [], test_env = {}, **kwargs):
|
|
|
|
ct_suite(
|
|
|
|
erlc_opts = RABBITMQ_TEST_ERLC_OPTS + erlc_opts,
|
|
|
|
test_env = dict({
|
|
|
|
"RABBITMQ_CT_SKIP_AS_ERROR": "true",
|
2022-05-09 17:48:56 +08:00
|
|
|
"LANG": "C.UTF-8",
|
2021-05-11 16:44:28 +08:00
|
|
|
}.items() + test_env.items()),
|
|
|
|
**kwargs
|
|
|
|
)
|
2021-07-12 21:55:56 +08:00
|
|
|
return kwargs["name"]
|
2021-05-11 16:44:28 +08:00
|
|
|
|
2022-05-17 20:07:16 +08:00
|
|
|
def broker_for_integration_suites(extra_plugins = []):
|
2021-05-11 16:44:28 +08:00
|
|
|
rabbitmq_home(
|
|
|
|
name = "broker-for-tests-home",
|
|
|
|
plugins = [
|
2022-07-26 20:41:40 +08:00
|
|
|
"//deps/rabbit:test_erlang_app",
|
|
|
|
":test_erlang_app",
|
2022-05-17 20:07:16 +08:00
|
|
|
] + extra_plugins,
|
2021-07-19 22:03:59 +08:00
|
|
|
testonly = True,
|
2021-05-11 16:44:28 +08:00
|
|
|
)
|
|
|
|
|
|
|
|
rabbitmq_run(
|
|
|
|
name = "rabbitmq-for-tests-run",
|
|
|
|
home = ":broker-for-tests-home",
|
2021-07-19 22:03:59 +08:00
|
|
|
testonly = True,
|
2021-05-11 16:44:28 +08:00
|
|
|
)
|
|
|
|
|
2022-05-17 20:07:16 +08:00
|
|
|
def rabbitmq_test_helper(
|
|
|
|
erlc_opts = RABBITMQ_TEST_ERLC_OPTS,
|
|
|
|
**kwargs):
|
|
|
|
erlang_bytecode(
|
|
|
|
testonly = True,
|
|
|
|
dest = "test",
|
|
|
|
erlc_opts = erlc_opts,
|
|
|
|
**kwargs
|
|
|
|
)
|
|
|
|
|
2021-03-29 17:01:43 +08:00
|
|
|
def rabbitmq_integration_suite(
|
2021-05-10 23:38:03 +08:00
|
|
|
package,
|
2021-07-19 20:33:25 +08:00
|
|
|
name = None,
|
|
|
|
tags = [],
|
2021-03-29 17:01:43 +08:00
|
|
|
data = [],
|
2021-05-11 16:44:28 +08:00
|
|
|
erlc_opts = [],
|
2021-07-19 20:33:25 +08:00
|
|
|
additional_hdrs = [],
|
|
|
|
additional_srcs = [],
|
2021-03-29 17:01:43 +08:00
|
|
|
test_env = {},
|
|
|
|
tools = [],
|
|
|
|
deps = [],
|
|
|
|
runtime_deps = [],
|
|
|
|
**kwargs):
|
2022-04-05 18:02:42 +08:00
|
|
|
extra_deps = [
|
|
|
|
"//deps/rabbit_common:erlang_app",
|
|
|
|
"//deps/rabbitmq_ct_helpers:erlang_app",
|
|
|
|
]
|
|
|
|
if package != "deps/amqp_client":
|
|
|
|
extra_deps.append("//deps/amqp_client:erlang_app")
|
|
|
|
|
2021-03-29 17:01:43 +08:00
|
|
|
ct_suite(
|
2021-07-19 20:33:25 +08:00
|
|
|
name = name,
|
|
|
|
suite_name = name,
|
2022-01-06 03:57:48 +08:00
|
|
|
tags = tags + [STARTS_BACKGROUND_BROKER_TAG],
|
2022-01-03 19:38:06 +08:00
|
|
|
erlc_opts = select({
|
|
|
|
"//:debug_build": without("+deterministic", RABBITMQ_TEST_ERLC_OPTS + erlc_opts),
|
|
|
|
"//conditions:default": RABBITMQ_TEST_ERLC_OPTS + erlc_opts,
|
|
|
|
}),
|
2021-07-19 20:33:25 +08:00
|
|
|
additional_hdrs = additional_hdrs,
|
|
|
|
additional_srcs = additional_srcs,
|
2021-11-02 23:04:06 +08:00
|
|
|
data = data,
|
2021-03-29 17:01:43 +08:00
|
|
|
test_env = dict({
|
2021-05-11 17:22:36 +08:00
|
|
|
"SKIP_MAKE_TEST_DIST": "true",
|
2021-03-29 17:01:43 +08:00
|
|
|
"RABBITMQ_CT_SKIP_AS_ERROR": "true",
|
2021-05-10 23:38:03 +08:00
|
|
|
"RABBITMQ_RUN": "$TEST_SRCDIR/$TEST_WORKSPACE/{}/rabbitmq-for-tests-run".format(package),
|
|
|
|
"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),
|
2021-05-11 17:22:36 +08:00
|
|
|
"RABBITMQ_QUEUES": "$TEST_SRCDIR/$TEST_WORKSPACE/{}/broker-for-tests-home/sbin/rabbitmq-queues".format(package),
|
2022-05-09 17:48:56 +08:00
|
|
|
"LANG": "C.UTF-8",
|
2021-03-29 17:01:43 +08:00
|
|
|
}.items() + test_env.items()),
|
|
|
|
tools = [
|
2021-05-10 23:38:03 +08:00
|
|
|
":rabbitmq-for-tests-run",
|
2021-03-29 17:01:43 +08:00
|
|
|
] + tools,
|
|
|
|
runtime_deps = [
|
2022-05-17 20:07:16 +08:00
|
|
|
"//bazel/elixir:erlang_app",
|
2021-03-29 17:01:43 +08:00
|
|
|
"//deps/rabbitmq_cli:rabbitmqctl",
|
2022-01-06 03:57:48 +08:00
|
|
|
"//deps/rabbitmq_ct_client_helpers:erlang_app",
|
2021-03-29 17:01:43 +08:00
|
|
|
] + runtime_deps,
|
2022-04-05 18:02:42 +08:00
|
|
|
deps = extra_deps + deps,
|
2021-03-29 17:01:43 +08:00
|
|
|
**kwargs
|
|
|
|
)
|
2021-07-19 20:33:25 +08:00
|
|
|
|
|
|
|
ct_suite_variant(
|
|
|
|
name = name + "-mixed",
|
|
|
|
suite_name = name,
|
2022-01-06 03:57:48 +08:00
|
|
|
tags = tags + [STARTS_BACKGROUND_BROKER_TAG, MIXED_VERSION_CLUSTER_TAG],
|
2021-11-02 23:04:06 +08:00
|
|
|
data = data,
|
2021-07-19 20:33:25 +08:00
|
|
|
test_env = dict({
|
|
|
|
"SKIP_MAKE_TEST_DIST": "true",
|
2022-07-22 23:36:16 +08:00
|
|
|
# The feature flags listed below are required. This means they must
|
|
|
|
# be enabled in mixed-version testing before even starting cluster
|
|
|
|
# because newer node don't have the corresponding
|
|
|
|
# compatibility/migration code.
|
|
|
|
#
|
|
|
|
# Starting from 3.11.0:
|
|
|
|
# quorum_queue
|
|
|
|
# implicit_default_bindings
|
|
|
|
# virtual_host_metadata
|
|
|
|
# maintenance_mode_status
|
|
|
|
# user_limits
|
|
|
|
"RABBITMQ_FEATURE_FLAGS": "quorum_queue,implicit_default_bindings,virtual_host_metadata,maintenance_mode_status,user_limits",
|
2021-07-19 20:33:25 +08:00
|
|
|
"RABBITMQ_RUN": "$TEST_SRCDIR/$TEST_WORKSPACE/{}/rabbitmq-for-tests-run".format(package),
|
|
|
|
"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),
|
2022-07-22 22:25:50 +08:00
|
|
|
"RABBITMQ_RUN_SECONDARY": "$TEST_SRCDIR/.secondary_umbrella.rabbitmq-server-generic-unix-3.10/rabbitmq-run",
|
2022-05-09 17:48:56 +08:00
|
|
|
"LANG": "C.UTF-8",
|
2021-07-19 20:33:25 +08:00
|
|
|
}.items() + test_env.items()),
|
|
|
|
tools = [
|
|
|
|
":rabbitmq-for-tests-run",
|
2022-07-22 22:25:50 +08:00
|
|
|
"@rabbitmq-server-generic-unix-3.10//:rabbitmq-run",
|
2021-07-19 20:33:25 +08:00
|
|
|
] + tools,
|
|
|
|
runtime_deps = [
|
2022-05-17 20:07:16 +08:00
|
|
|
"//bazel/elixir:erlang_app",
|
2021-07-19 20:33:25 +08:00
|
|
|
"//deps/rabbitmq_cli:rabbitmqctl",
|
2022-01-06 03:57:48 +08:00
|
|
|
"//deps/rabbitmq_ct_client_helpers:erlang_app",
|
2021-07-19 20:33:25 +08:00
|
|
|
] + runtime_deps,
|
2022-04-05 18:02:42 +08:00
|
|
|
deps = extra_deps + deps,
|
2021-07-19 20:33:25 +08:00
|
|
|
**kwargs
|
|
|
|
)
|
|
|
|
|
|
|
|
return name
|
2021-07-12 21:55:56 +08:00
|
|
|
|
|
|
|
def assert_suites(suite_names, suite_files):
|
2022-02-28 18:45:49 +08:00
|
|
|
_assert_suites(suite_names, suite_files)
|