rabbitmq-server/deps/rabbit/BUILD.bazel

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

1246 lines
28 KiB
Python
Raw Normal View History

load("@rules_erlang//:eunit2.bzl", "eunit")
load("@rules_erlang//:xref2.bzl", "xref")
load("@rules_erlang//:dialyze.bzl", "dialyze", "plt")
load("//:rabbitmq_home.bzl", "rabbitmq_home")
load("//:rabbitmq_run.bzl", "rabbitmq_run")
load(
"//:rabbitmq.bzl",
"ENABLE_FEATURE_MAYBE_EXPR",
"RABBITMQ_DIALYZER_OPTS",
"assert_suites",
"rabbitmq_app",
"rabbitmq_integration_suite",
2021-05-11 16:44:28 +08:00
"rabbitmq_suite",
"without",
)
load(
":app.bzl",
"all_beam_files",
"all_srcs",
"all_test_beam_files",
"test_suite_beam_files",
)
load(":bats.bzl", "bats")
exports_files(glob([
"scripts/**",
]) + ["INSTALL"])
_APP_ENV = """[
%% See https://www.rabbitmq.com/consumers.html#acknowledgement-timeout
%% 30 minutes
{consumer_timeout, 1800000},
{tcp_listeners, [5672]},
{num_tcp_acceptors, 10},
{ssl_listeners, []},
{num_ssl_acceptors, 10},
{ssl_options, []},
{vm_memory_high_watermark, 0.4},
{vm_memory_high_watermark_paging_ratio, 0.5},
{vm_memory_calculation_strategy, rss},
{memory_monitor_interval, 2500},
{disk_free_limit, 50000000}, %% 50MB
{msg_store_index_module, rabbit_msg_store_ets_index},
{backing_queue_module, rabbit_variable_queue},
%% 0 ("no limit") would make a better default, but that
%% breaks the QPid Java client
{frame_max, 131072},
%% see rabbitmq-server#1593
{channel_max, 2047},
{ranch_connection_max, infinity},
{heartbeat, 60},
{msg_store_file_size_limit, 16777216},
{msg_store_shutdown_timeout, 600000},
{fhc_write_buffering, true},
{fhc_read_buffering, false},
{queue_index_max_journal_entries, 32768},
{queue_index_embed_msgs_below, 4096},
{default_user, <<"guest">>},
{default_pass, <<"guest">>},
{default_user_tags, [administrator]},
{default_vhost, <<"/">>},
{default_permissions, [<<".*">>, <<".*">>, <<".*">>]},
{loopback_users, [<<"guest">>]},
{password_hashing_module, rabbit_password_hashing_sha256},
{server_properties, []},
{collect_statistics, none},
{collect_statistics_interval, 5000},
{mnesia_table_loading_retry_timeout, 30000},
{mnesia_table_loading_retry_limit, 10},
{auth_mechanisms, ['PLAIN', 'AMQPLAIN']},
{auth_backends, [rabbit_auth_backend_internal]},
{delegate_count, 16},
{trace_vhosts, []},
{ssl_cert_login_from, distinguished_name},
{ssl_handshake_timeout, 5000},
{ssl_allow_poodle_attack, false},
{handshake_timeout, 10000},
{reverse_dns_lookups, false},
{cluster_partition_handling, ignore},
{cluster_keepalive_interval, 10000},
{autoheal_state_transition_timeout, 60000},
{tcp_listen_options, [{backlog, 128},
{nodelay, true},
{linger, {true, 0}},
{exit_on_close, false}
]},
{halt_on_upgrade_failure, true},
{ssl_apps, [asn1, crypto, public_key, ssl]},
%% classic queue storage implementation version
{classic_queue_default_version, 2},
%% see rabbitmq-server#114
{mirroring_flow_control, true},
{mirroring_sync_batch_size, 4096},
%% see rabbitmq-server#227 and related tickets.
%% msg_store_credit_disc_bound only takes effect when
%% messages are persisted to the message store. If messages
%% are embedded on the queue index, then modifying this
%% setting has no effect because credit_flow is not used when
%% writing to the queue index. See the setting
%% queue_index_embed_msgs_below above.
{msg_store_credit_disc_bound, {4000, 800}},
{msg_store_io_batch_size, 4096},
%% see rabbitmq-server#143,
%% rabbitmq-server#949, rabbitmq-server#1098
{credit_flow_default_credit, {400, 200}},
{quorum_commands_soft_limit, 32},
{quorum_cluster_size, 3},
%% see rabbitmq-server#248
%% and rabbitmq-server#667
{channel_operation_timeout, 15000},
%% see rabbitmq-server#486
{autocluster,
[{peer_discovery_backend, rabbit_peer_discovery_classic_config}]
},
%% used by rabbit_peer_discovery_classic_config
{cluster_nodes, {[], disc}},
{config_entry_decoder, [{passphrase, undefined}]},
%% rabbitmq-server#973
{queue_explicit_gc_run_operation_threshold, 1000},
{background_gc_enabled, false},
{background_gc_target_interval, 60000},
%% rabbitmq-server#589
{proxy_protocol, false},
{disk_monitor_failure_retries, 10},
{disk_monitor_failure_retry_interval, 120000},
%% either "stop_node" or "continue".
%% by default we choose to not terminate the entire node if one
%% vhost had to shut down, see server#1158 and server#1280
{vhost_restart_strategy, continue},
%% {global, prefetch count}
{default_consumer_prefetch, {false, 0}},
%% interval at which the channel can perform periodic actions
{channel_tick_interval, 60000},
%% Default max message size is 128 MB
{max_message_size, 134217728},
%% Socket writer will run GC every 1 GB of outgoing data
{writer_gc_threshold, 1000000000},
%% interval at which connection/channel tracking executes post operations
{tracking_execution_timeout, 15000},
{stream_messages_soft_limit, 256},
2022-01-15 00:11:38 +08:00
{track_auth_attempt_source, false},
{credentials_obfuscation_fallback_secret, <<"nocookie">>},
{dead_letter_worker_consumer_prefetch, 32},
{dead_letter_worker_publisher_confirm_timeout, 180000},
%% EOL date for the current release series, if known/announced
{release_series_eol_date, none}
]
"""
2021-05-19 16:54:56 +08:00
APP_MODULE = "rabbit"
APP_REGISTERED = [
"rabbit_amqqueue_sup",
"rabbit_direct_client_sup",
"rabbit_log",
"rabbit_node_monitor",
"rabbit_router",
]
all_beam_files(name = "all_beam_files")
all_test_beam_files(name = "all_test_beam_files")
all_srcs(name = "all_srcs")
test_suite_beam_files(name = "test_suite_beam_files")
# gazelle:erlang_apps_dirs apps
# gazelle:erlang_app_extra_app sasl
# gazelle:erlang_app_extra_app os_mon
# gazelle:erlang_app_extra_app inets
# gazelle:erlang_app_extra_app compiler
# gazelle:erlang_app_extra_app crypto
# gazelle:erlang_app_extra_app public_key
# gazelle:erlang_app_extra_app ssl
# gazelle:erlang_app_extra_app syntax_tools
# gazelle:erlang_app_extra_app xmerl
# gazelle:erlang_app_dep cuttlefish
# gazelle:erlang_app_dep syslog
# gazelle:erlang_app_dep observer_cli
# gazelle:erlang_app_dep redbug
# gazelle:erlang_app_dep sysmon_handler
# gazelle:erlang_app_dep systemd
rabbitmq_app(
name = "erlang_app",
srcs = [":all_srcs"],
hdrs = [":public_hdrs"],
app_description = "RabbitMQ",
app_env = _APP_ENV,
2021-05-19 16:54:56 +08:00
app_module = APP_MODULE,
app_name = "rabbit",
app_registered = APP_REGISTERED,
beam_files = [":beam_files"],
extra_apps = [
"compiler",
"inets",
"os_mon",
"public_key",
"sasl",
"ssl",
"syntax_tools",
"xmerl",
"crypto",
],
license_files = [":license_files"],
priv = [":priv"],
deps = [
"//deps/amqp10_common:erlang_app",
"//deps/rabbit/apps/rabbitmq_prelaunch:erlang_app",
"//deps/rabbit_common:erlang_app",
"@cuttlefish//:erlang_app",
"@observer_cli//:erlang_app",
"@osiris//:erlang_app",
"@ra//:erlang_app",
"@ranch//:erlang_app",
"@recon//:erlang_app",
"@redbug//:erlang_app",
"@seshat//:erlang_app",
"@stdout_formatter//:erlang_app",
"@syslog//:erlang_app",
"@sysmon_handler//:erlang_app",
"@systemd//:erlang_app",
],
)
xref(
name = "xref",
target = ":erlang_app",
)
2021-05-28 19:27:21 +08:00
plt(
name = "deps_plt",
apps = [
"mnesia", # keep
2023-05-25 23:23:35 +08:00
"runtime_tools", # keep
],
for_target = ":erlang_app",
ignore_warnings = True,
plt = "//:base_plt",
2023-05-25 23:23:35 +08:00
deps = [
"@looking_glass//:erlang_app", # keep
],
2021-05-28 19:27:21 +08:00
)
dialyze(
name = "dialyze",
2023-05-25 23:23:35 +08:00
dialyzer_opts = RABBITMQ_DIALYZER_OPTS,
plt = ":deps_plt",
target = ":erlang_app",
2021-05-28 19:27:21 +08:00
)
bats(
srcs = glob(["test/**/*.bats"]),
data = glob(
["scripts/*"],
exclude = ["scripts/*.bat"],
),
tags = ["bats"],
)
rabbitmq_home(
name = "broker-for-tests-home",
testonly = True,
plugins = [
":test_erlang_app",
"//deps/rabbitmq_ct_client_helpers:erlang_app",
"@inet_tcp_proxy_dist//:erlang_app",
"@meck//:erlang_app",
],
)
rabbitmq_run(
name = "rabbitmq-for-tests-run",
testonly = True,
home = ":broker-for-tests-home",
)
rabbitmq_suite(
name = "amqqueue_backward_compatibility_SUITE",
size = "small",
)
rabbitmq_integration_suite(
name = "backing_queue_SUITE",
size = "large",
)
rabbitmq_integration_suite(
name = "channel_interceptor_SUITE",
size = "medium",
additional_beam = [
"test/dummy_interceptor.beam",
"test/failing_dummy_interceptor.beam",
],
)
rabbitmq_integration_suite(
name = "channel_operation_timeout_SUITE",
size = "medium",
additional_beam = [
"test/channel_operation_timeout_test_queue.beam",
],
)
rabbitmq_integration_suite(
name = "classic_queue_prop_SUITE",
size = "large",
shard_count = 6,
sharding_method = "case",
deps = [
"@proper//:erlang_app",
],
)
rabbitmq_integration_suite(
name = "cluster_rename_SUITE",
size = "large",
flaky = True,
shard_count = 2,
)
rabbitmq_integration_suite(
name = "cluster_SUITE",
size = "medium",
)
rabbitmq_integration_suite(
name = "quorum_queue_member_reconciliation_SUITE",
size = "medium",
additional_beam = [
":test_quorum_queue_utils_beam",
],
)
rabbitmq_integration_suite(
name = "clustering_management_SUITE",
size = "large",
flaky = True,
shard_count = 18,
sharding_method = "case",
)
rabbitmq_integration_suite(
name = "clustering_recovery_SUITE",
size = "medium",
shard_count = 2,
sharding_method = "case",
)
rabbitmq_integration_suite(
name = "config_schema_SUITE",
size = "medium",
data = [
"test/definition_import_SUITE_data/case1.json",
],
)
rabbitmq_integration_suite(
name = "confirms_rejects_SUITE",
size = "medium",
)
rabbitmq_integration_suite(
name = "consumer_timeout_SUITE",
size = "medium",
additional_beam = [
":test_quorum_queue_utils_beam",
],
)
rabbitmq_integration_suite(
name = "crashing_queues_SUITE",
size = "medium",
)
rabbitmq_integration_suite(
name = "dead_lettering_SUITE",
size = "large",
additional_beam = [
":test_quorum_queue_utils_beam",
],
shard_count = 7,
)
rabbitmq_integration_suite(
name = "definition_import_SUITE",
size = "medium",
)
Deprecated features: New module to manage deprecated features (!) This introduces a way to declare deprecated features in the code, not only in our communication. The new module allows to disallow the use of a deprecated feature and/or warn the user when he relies on such a feature. [Why] Currently, we only tell people about deprecated features through blog posts and the mailing-list. This might be insufficiant for our users that a feature they use will be removed in a future version: * They may not read our blog or mailing-list * They may not understand that they use such a deprecated feature * They might wait for the big removal before they plan testing * They might not take it seriously enough The idea behind this patch is to increase the chance that users notice that they are using something which is about to be dropped from RabbitMQ. Anopther benefit is that they should be able to test how RabbitMQ will behave in the future before the actual removal. This should allow them to test and plan changes. [How] When a feature is deprecated in other large projects (such as FreeBSD where I took the idea from), it goes through a lifecycle: 1. The feature is still available, but users get a warning somehow when they use it. They can disable it to test. 2. The feature is still available, but disabled out-of-the-box. Users can re-enable it (and get a warning). 3. The feature is disconnected from the build. Therefore, the code behind it is still there, but users have to recompile the thing to be able to use it. 4. The feature is removed from the source code. Users have to adapt or they can't upgrade anymore. The solution in this patch offers the same lifecycle. A deprecated feature will be in one of these deprecation phases: 1. `permitted_by_default`: The feature is available. Users get a warning if they use it. They can disable it from the configuration. 2. `denied_by_default`: The feature is available but disabled by default. Users get an error if they use it and RabbitMQ behaves like the feature is removed. They can re-enable is from the configuration and get a warning. 3. `disconnected`: The feature is present in the source code, but is disabled and can't be re-enabled without recompiling RabbitMQ. Users get the same behavior as if the code was removed. 4. `removed`: The feature's code is gone. The whole thing is based on the feature flags subsystem, but it has the following differences with other feature flags: * The semantic is reversed: the feature flag behind a deprecated feature is disabled when the deprecated feature is permitted, or enabled when the deprecated feature is denied. * The feature flag behind a deprecated feature is enabled out-of-the-box (meaning the deprecated feature is denied): * if the deprecation phase is `permitted_by_default` and the configuration denies the deprecated feature * if the deprecation phase is `denied_by_default` and the configuration doesn't permit the deprecated feature * if the deprecation phase is `disconnected` or `removed` * Feature flags behind deprecated feature don't appear in feature flags listings. Otherwise, deprecated features' feature flags are managed like other feature flags, in particular inside clusters. To declare a deprecated feature: -rabbit_deprecated_feature( {my_deprecated_feature, #{deprecation_phase => permitted_by_default, msgs => #{when_permitted => "This feature will be removed in RabbitMQ X.0"}, }}). Then, to check the state of a deprecated feature in the code: case rabbit_deprecated_features:is_permitted(my_deprecated_feature) of true -> %% The deprecated feature is still permitted. ok; false -> %% The deprecated feature is gone or should be considered %% unavailable. error end. Warnings and errors are logged automatically. A message is generated automatically, but it is possible to define a message in the deprecated feature flag declaration like in the example above. Here is an example of a logged warning that was generated automatically: Feature `my_deprecated_feature` is deprecated. By default, this feature can still be used for now. Its use will not be permitted by default in a future minor RabbitMQ version and the feature will be removed from a future major RabbitMQ version; actual versions to be determined. To continue using this feature when it is not permitted by default, set the following parameter in your configuration: "deprecated_features.permit.my_deprecated_feature = true" To test RabbitMQ as if the feature was removed, set this in your configuration: "deprecated_features.permit.my_deprecated_feature = false" To override the default state of `permitted_by_default` and `denied_by_default` deprecation phases, users can set the following configuration: # In rabbitmq.conf: deprecated_features.permit.my_deprecated_feature = true # or false The actual behavior protected by a deprecated feature check is out of scope for this subsystem. It is the repsonsibility of each deprecated feature code to determine what to do when the deprecated feature is denied. V1: Deprecated feature states are initially computed during the initialization of the registry, based on their deprecation phase and possibly the configuration. They don't go through the `enable/1` code at all. V2: Manage deprecated feature states as any other non-required feature flags. This allows to execute an `is_feature_used()` callback to determine if a deprecated feature can be denied. This also allows to prevent the RabbitMQ node from starting if it continues to use a deprecated feature. V3: Manage deprecated feature states from the registry initialization again. This is required because we need to know very early if some of them are denied, so that an upgrade to a version of RabbitMQ where a deprecated feature is disconnected or removed can be performed. To still prevent the start of a RabbitMQ node when a denied deprecated feature is actively used, we run the `is_feature_used()` callback of all denied deprecated features as part of the `sync_cluster()` task. This task is executed as part of a feature flag refresh executed when RabbitMQ starts or when plugins are enabled. So even though a deprecated feature is marked as denied in the registry early in the boot process, we will still abort the start of a RabbitMQ node if the feature is used. V4: Support context-dependent warnings. It is now possible to set a specific message when deprecated feature is permitted, when it is denied and when it is removed. Generic per-context messages are still generated. V5: Improve default warning messages, thanks to @pstack2021. V6: Rename the configuration variable from `permit_deprecated_features.*` to `deprecated_features.permit.*`. As @michaelklishin said, we tend to use shorter top-level names.
2023-02-23 00:26:52 +08:00
rabbitmq_integration_suite(
name = "deprecated_features_SUITE",
size = "medium",
additional_beam = [
":feature_flags_v2_SUITE_beam_files",
],
)
rabbitmq_integration_suite(
name = "disconnect_detected_during_alarm_SUITE",
size = "medium",
)
rabbitmq_integration_suite(
name = "disk_monitor_SUITE",
size = "medium",
)
rabbitmq_integration_suite(
name = "dynamic_ha_SUITE",
size = "large",
flaky = True,
shard_count = 20,
sharding_method = "case",
deps = [
"@proper//:erlang_app",
],
)
rabbitmq_integration_suite(
name = "dynamic_qq_SUITE",
size = "large",
additional_beam = [
":test_quorum_queue_utils_beam",
],
flaky = True,
deps = [
"@proper//:erlang_app",
],
)
rabbitmq_integration_suite(
name = "eager_sync_SUITE",
size = "large",
additional_beam = [
":sync_detection_SUITE_beam_files",
],
flaky = True,
shard_count = 5,
sharding_method = "case",
tags = ["classic-queue"],
)
rabbitmq_integration_suite(
name = "feature_flags_SUITE",
size = "large",
flaky = True,
shard_count = 5,
runtime_deps = [
"//deps/rabbit/test/feature_flags_SUITE_data/my_plugin:erlang_app",
],
)
rabbitmq_integration_suite(
name = "feature_flags_v2_SUITE",
size = "large",
)
rabbitmq_integration_suite(
name = "feature_flags_with_unpriveleged_user_SUITE",
size = "large",
additional_beam = [
":feature_flags_SUITE_beam_files",
],
flaky = True,
shard_count = 2,
# The enabling_* tests chmod files and then expect writes to be blocked.
# This probably doesn't work because we are root in the remote docker image.
tags = ["exclusive"],
runtime_deps = [
"//deps/rabbit/test/feature_flags_SUITE_data/my_plugin:erlang_app",
],
)
rabbitmq_integration_suite(
name = "list_consumers_sanity_check_SUITE",
size = "medium",
)
rabbitmq_integration_suite(
name = "list_queues_online_and_offline_SUITE",
size = "medium",
)
rabbitmq_integration_suite(
name = "logging_SUITE",
runtime_deps = [
"@syslog//:erlang_app",
],
)
rabbitmq_suite(
name = "lqueue_SUITE",
size = "small",
deps = [
"@proper//:erlang_app",
],
)
rabbitmq_integration_suite(
name = "maintenance_mode_SUITE",
size = "medium",
additional_beam = [
":test_quorum_queue_utils_beam",
],
)
rabbitmq_integration_suite(
name = "many_node_ha_SUITE",
size = "medium",
additional_beam = [
":test_rabbit_ha_test_consumer_beam",
":test_rabbit_ha_test_producer_beam",
],
)
Move plugin rabbitmq-message-timestamp to the core As reported in https://groups.google.com/g/rabbitmq-users/c/x8ACs4dBlkI/ plugins that implement rabbit_channel_interceptor break with Native MQTT in 3.12 because Native MQTT does not use rabbit_channel anymore. Specifically, these plugins don't work anymore in 3.12 when sending a message from an MQTT publisher to an AMQP 0.9.1 consumer. Two of these plugins are https://github.com/rabbitmq/rabbitmq-message-timestamp and https://github.com/rabbitmq/rabbitmq-routing-node-stamp This commit moves both plugins into rabbitmq-server. Therefore, these plugins are deprecated starting in 3.12. Instead of using these plugins, the user gets the same behaviour by configuring rabbitmq.conf as follows: ``` incoming_message_interceptors.set_header_timestamp.overwrite = false incoming_message_interceptors.set_header_routing_node.overwrite = false ``` While both plugins were incompatible to be used together, this commit allows setting both headers. We name the top level configuration key `incoming_message_interceptors` because only incoming messages are intercepted. Currently, only `set_header_timestamp` and `set_header_routing_node` are supported. (We might support more in the future.) Both can set `overwrite` to `false` or `true`. The meaning of `overwrite` is the same as documented in https://github.com/rabbitmq/rabbitmq-message-timestamp#always-overwrite-timestamps i.e. whether headers should be overwritten if they are already present in the message. Both `set_header_timestamp` and `set_header_routing_node` behave exactly to plugins `rabbitmq-message-timestamp` and `rabbitmq-routing-node-stamp`, respectively. Upon node boot, the configuration is put into persistent_term to not cause any performance penalty in the default case where these settings are disabled. The channel and MQTT connection process will intercept incoming messages and - if configured - add the desired AMQP 0.9.1 headers. For now, this allows using Native MQTT in 3.12 with the old plugins behaviour. In the future, once "message containers" are implemented, we can think about more generic message interceptors where plugins can be written to modify arbitrary headers or message contents for various protocols. Likewise, in the future, once MQTT 5.0 is implemented, we can think about an MQTT connection interceptor which could function similar to a `rabbit_channel_interceptor` allowing to modify any MQTT packet.
2023-05-12 22:12:50 +08:00
rabbitmq_integration_suite(
name = "rabbit_message_interceptor_SUITE",
size = "medium",
)
rabbitmq_integration_suite(
name = "message_size_limit_SUITE",
size = "medium",
)
rabbitmq_integration_suite(
name = "per_node_limit_SUITE",
size = "medium",
)
rabbitmq_integration_suite(
name = "metrics_SUITE",
size = "medium",
deps = [
"@proper//:erlang_app",
],
)
rabbitmq_integration_suite(
name = "mirrored_supervisor_SUITE",
size = "small",
additional_beam = [
"test/mirrored_supervisor_SUITE_gs.beam",
],
)
rabbitmq_suite(
name = "msg_store_SUITE",
size = "small",
deps = [
"//deps/rabbit_common:erlang_app",
],
)
rabbitmq_integration_suite(
name = "peer_discovery_classic_config_SUITE",
size = "large",
flaky = True,
)
rabbitmq_integration_suite(
name = "peer_discovery_dns_SUITE",
size = "medium",
)
rabbitmq_integration_suite(
name = "per_user_connection_channel_limit_partitions_SUITE",
size = "large",
)
rabbitmq_integration_suite(
name = "per_user_connection_channel_limit_SUITE",
size = "medium",
)
rabbitmq_integration_suite(
name = "per_user_connection_channel_tracking_SUITE",
size = "medium",
)
rabbitmq_integration_suite(
name = "per_user_connection_tracking_SUITE",
size = "medium",
)
rabbitmq_integration_suite(
name = "per_vhost_connection_limit_partitions_SUITE",
size = "medium",
)
rabbitmq_integration_suite(
name = "per_vhost_connection_limit_SUITE",
size = "medium",
)
rabbitmq_integration_suite(
name = "per_vhost_msg_store_SUITE",
size = "medium",
)
rabbitmq_integration_suite(
name = "per_vhost_queue_limit_SUITE",
size = "medium",
)
rabbitmq_integration_suite(
name = "policy_SUITE",
size = "medium",
)
rabbitmq_integration_suite(
name = "priority_queue_recovery_SUITE",
size = "medium",
)
rabbitmq_integration_suite(
name = "priority_queue_SUITE",
size = "medium",
)
rabbitmq_integration_suite(
name = "product_info_SUITE",
size = "medium",
)
rabbitmq_integration_suite(
name = "proxy_protocol_SUITE",
size = "medium",
)
rabbitmq_integration_suite(
name = "publisher_confirms_parallel_SUITE",
size = "medium",
additional_beam = [
":test_quorum_queue_utils_beam",
],
)
rabbitmq_integration_suite(
name = "queue_length_limits_SUITE",
size = "medium",
)
rabbitmq_integration_suite(
name = "queue_master_location_SUITE",
size = "large",
shard_count = 2,
)
rabbitmq_integration_suite(
name = "queue_parallel_SUITE",
size = "large",
additional_beam = [
":test_quorum_queue_utils_beam",
],
shard_count = 6,
)
rabbitmq_integration_suite(
name = "queue_type_SUITE",
size = "medium",
)
rabbitmq_integration_suite(
name = "quorum_queue_SUITE",
size = "large",
additional_beam = [
":test_quorum_queue_utils_beam",
],
flaky = True,
shard_count = 6,
)
rabbitmq_suite(
name = "rabbit_confirms_SUITE",
size = "small",
deps = [
"//deps/rabbit_common:erlang_app",
],
)
rabbitmq_integration_suite(
name = "rabbit_core_metrics_gc_SUITE",
size = "medium",
)
rabbitmq_suite(
name = "rabbit_cuttlefish_SUITE",
)
rabbitmq_suite(
name = "rabbit_fifo_int_SUITE",
size = "medium",
deps = [
"//deps/rabbit_common:erlang_app",
"@aten//:erlang_app",
"@gen_batch_server//:erlang_app",
"@meck//:erlang_app",
"@ra//:erlang_app",
],
)
rabbitmq_suite(
name = "rabbit_fifo_prop_SUITE",
size = "large",
additional_beam = [
":test_test_util_beam",
],
deps = [
"//deps/rabbit_common:erlang_app",
"@proper//:erlang_app",
"@ra//:erlang_app",
],
)
rabbitmq_suite(
name = "rabbit_fifo_dlx_SUITE",
size = "small",
deps = [
"//deps/rabbit_common:erlang_app",
],
)
rabbitmq_integration_suite(
name = "rabbit_fifo_dlx_integration_SUITE",
size = "medium",
additional_beam = [
":test_test_util_beam",
":test_quorum_queue_utils_beam",
":quorum_queue_SUITE_beam_files",
],
deps = [
"@proper//:erlang_app",
"@ra//:erlang_app",
],
)
rabbitmq_suite(
name = "rabbit_fifo_SUITE",
size = "medium",
additional_beam = [
":test_test_util_beam",
":rabbit_fifo_v0_SUITE_beam_files",
],
deps = [
"//deps/rabbit_common:erlang_app",
"@meck//:erlang_app",
"@ra//:erlang_app",
],
)
rabbitmq_suite(
name = "rabbit_fifo_v0_SUITE",
size = "medium",
additional_beam = [
":test_test_util_beam",
],
deps = [
"//deps/rabbit_common:erlang_app",
"@meck//:erlang_app",
"@ra//:erlang_app",
],
)
rabbitmq_suite(
name = "rabbit_msg_record_SUITE",
size = "medium",
deps = [
"//deps/amqp10_common:erlang_app",
"//deps/rabbit_common:erlang_app",
],
)
rabbitmq_suite(
name = "rabbit_stream_coordinator_SUITE",
deps = [
"//deps/rabbit_common:erlang_app",
],
)
rabbitmq_suite(
name = "rabbit_stream_sac_coordinator_SUITE",
runtime_deps = [
"@meck//:erlang_app",
],
deps = [
"//deps/rabbit_common:erlang_app",
],
)
rabbitmq_integration_suite(
name = "rabbit_stream_queue_SUITE",
size = "large",
additional_beam = [
":test_quorum_queue_utils_beam",
],
shard_count = 12,
deps = [
"@proper//:erlang_app",
],
)
rabbitmq_integration_suite(
name = "rabbitmq_4_0_deprecations_SUITE",
size = "large",
)
rabbitmq_integration_suite(
name = "rabbitmq_queues_cli_integration_SUITE",
size = "medium",
)
rabbitmq_integration_suite(
name = "rabbitmqctl_integration_SUITE",
size = "medium",
flaky = True,
)
rabbitmq_integration_suite(
name = "rabbitmqctl_shutdown_SUITE",
size = "medium",
)
rabbitmq_integration_suite(
name = "signal_handling_SUITE",
size = "medium",
)
rabbitmq_integration_suite(
name = "simple_ha_SUITE",
size = "large",
additional_beam = [
":test_rabbit_ha_test_consumer_beam",
":test_rabbit_ha_test_producer_beam",
],
shard_count = 4,
)
rabbitmq_integration_suite(
name = "single_active_consumer_SUITE",
size = "medium",
additional_beam = [
":test_quorum_queue_utils_beam",
],
)
rabbitmq_integration_suite(
name = "sync_detection_SUITE",
size = "medium",
)
rabbitmq_integration_suite(
name = "term_to_binary_compat_prop_SUITE",
deps = [
"@proper//:erlang_app",
],
)
rabbitmq_integration_suite(
name = "topic_permission_SUITE",
size = "medium",
)
rabbitmq_integration_suite(
name = "unit_access_control_authn_authz_context_propagation_SUITE",
size = "medium",
additional_beam = [
"test/rabbit_auth_backend_context_propagation_mock.beam",
"test/rabbit_foo_protocol_connection_info.beam",
],
)
rabbitmq_integration_suite(
name = "unit_access_control_credential_validation_SUITE",
size = "medium",
deps = [
"@proper//:erlang_app",
],
)
rabbitmq_integration_suite(
name = "unit_access_control_SUITE",
size = "medium",
additional_beam = [
"test/rabbit_dummy_protocol_connection_info.beam",
],
)
rabbitmq_suite(
name = "unit_amqp091_content_framing_SUITE",
size = "small",
deps = [
"//deps/rabbit_common:erlang_app",
],
)
rabbitmq_integration_suite(
name = "unit_amqp091_server_properties_SUITE",
size = "medium",
)
rabbitmq_integration_suite(
name = "unit_app_management_SUITE",
size = "medium",
)
rabbitmq_suite(
name = "unit_cluster_formation_locking_mocks_SUITE",
size = "small",
deps = [
"@meck//:erlang_app",
],
)
rabbitmq_suite(
name = "unit_collections_SUITE",
size = "small",
deps = [
"//deps/rabbit_common:erlang_app",
],
)
rabbitmq_suite(
name = "unit_config_value_encryption_SUITE",
size = "medium",
deps = [
"//deps/rabbit/apps/rabbitmq_prelaunch:test_erlang_app",
"//deps/rabbit_common:test_erlang_app",
"@credentials_obfuscation//:erlang_app",
],
)
rabbitmq_integration_suite(
name = "unit_connection_tracking_SUITE",
size = "medium",
)
rabbitmq_integration_suite(
name = "unit_credit_flow_SUITE",
size = "medium",
)
rabbitmq_integration_suite(
name = "unit_disk_monitor_SUITE",
size = "medium",
)
rabbitmq_integration_suite(
name = "unit_file_handle_cache_SUITE",
size = "medium",
)
rabbitmq_integration_suite(
name = "unit_gen_server2_SUITE",
size = "medium",
)
rabbitmq_suite(
name = "unit_gm_SUITE",
size = "small",
deps = [
"//deps/rabbitmq_ct_helpers:erlang_app",
"@meck//:erlang_app",
],
)
rabbitmq_integration_suite(
name = "unit_log_management_SUITE",
size = "medium",
)
rabbitmq_suite(
name = "unit_operator_policy_SUITE",
size = "small",
deps = [
"//deps/rabbit_common:test_erlang_app",
],
)
rabbitmq_suite(
name = "unit_pg_local_SUITE",
size = "small",
)
rabbitmq_suite(
name = "unit_plugin_directories_SUITE",
size = "small",
deps = [
"//deps/rabbit_common:test_erlang_app",
],
)
rabbitmq_integration_suite(
name = "unit_plugin_versioning_SUITE",
size = "small",
)
rabbitmq_integration_suite(
name = "unit_policy_validators_SUITE",
size = "small",
)
rabbitmq_suite(
name = "unit_priority_queue_SUITE",
size = "small",
)
rabbitmq_suite(
name = "unit_queue_consumers_SUITE",
size = "small",
)
rabbitmq_integration_suite(
name = "unit_stats_and_metrics_SUITE",
size = "medium",
additional_beam = [
"test/dummy_event_receiver.beam",
],
)
rabbitmq_suite(
name = "unit_supervisor2_SUITE",
size = "small",
additional_beam = [
"test/dummy_supervisor2.beam",
],
)
rabbitmq_integration_suite(
name = "unit_vm_memory_monitor_SUITE",
size = "medium",
)
rabbitmq_integration_suite(
name = "upgrade_preparation_SUITE",
size = "medium",
)
rabbitmq_integration_suite(
name = "vhost_SUITE",
size = "medium",
additional_beam = [
"test/test_rabbit_event_handler.beam",
],
)
rabbitmq_suite(
name = "unit_classic_mirrored_queue_sync_throttling_SUITE",
size = "small",
deps = [
"//deps/rabbit_common:erlang_app",
],
)
rabbitmq_suite(
name = "unit_classic_mirrored_queue_throughput_SUITE",
size = "small",
deps = [
"//deps/rabbit_common:erlang_app",
],
)
rabbitmq_integration_suite(
name = "direct_exchange_routing_v2_SUITE",
size = "medium",
additional_beam = [
":test_quorum_queue_utils_beam",
],
)
rabbitmq_integration_suite(
name = "rabbit_direct_reply_to_prop_SUITE",
size = "medium",
deps = [
"@proper//:erlang_app",
],
)
rabbitmq_integration_suite(
name = "unicode_SUITE",
size = "medium",
)
rabbitmq_integration_suite(
name = "exchanges_SUITE",
size = "medium",
additional_beam = [
":test_quorum_queue_utils_beam",
],
)
rabbitmq_integration_suite(
name = "bindings_SUITE",
size = "medium",
)
rabbitmq_integration_suite(
name = "rabbit_db_queue_SUITE",
size = "medium",
)
rabbitmq_integration_suite(
name = "rabbit_db_maintenance_SUITE",
size = "medium",
)
rabbitmq_integration_suite(
name = "rabbit_db_topic_exchange_SUITE",
size = "medium",
)
rabbitmq_integration_suite(
name = "rabbit_db_exchange_SUITE",
size = "medium",
)
rabbitmq_integration_suite(
name = "rabbit_db_binding_SUITE",
size = "medium",
)
rabbitmq_integration_suite(
name = "rabbit_db_msup_SUITE",
size = "medium",
)
rabbitmq_integration_suite(
name = "rabbit_db_policy_SUITE",
size = "medium",
)
2023-04-18 07:29:12 +08:00
rabbitmq_integration_suite(
name = "runtime_parameters_SUITE",
size = "small",
additional_beam = [
"test/dummy_runtime_parameters.beam",
2023-04-18 07:29:12 +08:00
],
)
assert_suites()
filegroup(
name = "manpages",
srcs = glob([
"docs/*.1",
"docs/*.2",
"docs/*.3",
"docs/*.4",
"docs/*.5",
"docs/*.6",
"docs/*.7",
"docs/*.8",
"docs/*.9",
]),
)
genrule(
name = "manpages-dir",
srcs = [":manpages"],
outs = ["manpages.tar"],
cmd = """set -euo pipefail
DESTDIR=share/man
mkdir -p $${DESTDIR}
for mp in $(SRCS); do
section=$${mp##*.}
mkdir -p $${DESTDIR}/man$$section
gzip < $$mp \\
> $${DESTDIR}/man$$section/$$(basename $$mp).gz
done
tar -cf $@ share
rm -dr share
""",
visibility = ["//visibility:public"],
)
genrule(
name = "web-manpages",
srcs = [":manpages"],
outs = ["web-manpages.tar"],
cmd = """set -euo pipefail
mkdir web-manpages-tmp
for mp in $(SRCS); do
d=web-manpages-tmp/$$(basename $${mp}).html
echo "Converting $$mp to $$d..."
mandoc -T html -O 'fragment,man=%N.%S.html' "$$mp" | \\
awk '\\
/^<table class="head">$$/ { remove_table=1; next; } \\
/^<table class="foot">$$/ { remove_table=1; next; } \\
/^<\\/table>$$/ { if (remove_table) { remove_table=0; next; } } \\
{ if (!remove_table) { \\
line=$$0; \\
gsub(/<h2/, "<h3", line); \\
gsub(/<\\/h2>/, "</h3>", line); \\
gsub(/<h1/, "<h2", line); \\
gsub(/<\\/h1>/, "</h2>", line); \\
gsub(/class="D1"/, "class=\"D1 lang-bash\"", line); \\
gsub(/class="Bd Bd-indent"/, "class=\"Bd Bd-indent lang-bash\"", line); \\
gsub(/&#[xX]201[cCdD];/, "\\&quot;", line); \\
print line; \\
} } \\
' > "$$d"
done
tar --strip-components 1 -cf $@ web-manpages-tmp/*
rm -dr web-manpages-tmp
""",
visibility = ["//visibility:public"],
)
alias(
name = "rabbit",
actual = ":erlang_app",
visibility = ["//visibility:public"],
)
eunit(
name = "eunit",
compiled_suites = [
":test_channel_operation_timeout_test_queue_beam",
":test_dummy_event_receiver_beam",
":test_dummy_interceptor_beam",
":test_dummy_runtime_parameters_beam",
":test_dummy_supervisor2_beam",
":test_failing_dummy_interceptor_beam",
":test_mirrored_supervisor_SUITE_gs_beam",
":test_quorum_queue_utils_beam",
":test_rabbit_auth_backend_context_propagation_mock_beam",
":test_rabbit_dummy_protocol_connection_info_beam",
":test_rabbit_foo_protocol_connection_info_beam",
":test_rabbit_ha_test_consumer_beam",
":test_rabbit_ha_test_producer_beam",
":test_test_util_beam",
":test_test_rabbit_event_handler_beam",
],
erl_extra_args = [ENABLE_FEATURE_MAYBE_EXPR],
target = ":test_erlang_app",
)