rabbitmq-server/deps/rabbit/BUILD.bazel

1132 lines
29 KiB
Python
Raw Normal View History

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",
"RABBITMQ_DIALYZER_OPTS",
"assert_suites",
"rabbitmq_app",
"rabbitmq_integration_suite",
2021-05-11 16:44:28 +08:00
"rabbitmq_suite",
"rabbitmq_test_helper",
)
load(":bats.bzl", "bats")
exports_files(glob([
"scripts/**",
]) + ["INSTALL"])
_APP_ENV = """[
{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},
{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]},
%% 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},
{lazy_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}
]
"""
DEPS = [
"//deps/amqp10_common:erlang_app",
"//deps/rabbit_common:erlang_app",
"@ra//:erlang_app",
"@ranch//:erlang_app",
"@stdout_formatter//:erlang_app",
"@syslog//:erlang_app",
]
RUNTIME_DEPS = [
"//deps/rabbit/apps/rabbitmq_prelaunch:erlang_app",
"@cuttlefish//:erlang_app",
"@observer_cli//:erlang_app",
"@osiris//:erlang_app",
"@recon//:erlang_app",
"@redbug//:erlang_app",
"@seshat//:erlang_app",
"@sysmon_handler//:erlang_app",
"@systemd//:erlang_app",
]
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",
]
EXTRA_APPS = [
"sasl",
"rabbitmq_prelaunch",
"os_mon",
"inets",
"compiler",
"public_key",
"crypto",
"ssl",
"syntax_tools",
"xmerl",
]
rabbitmq_app(
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,
extra_apps = EXTRA_APPS,
runtime_deps = RUNTIME_DEPS,
deps = DEPS,
)
xref()
2021-05-19 16:54:56 +08:00
2021-05-28 19:27:21 +08:00
plt_apps = [
"mnesia",
] + EXTRA_APPS
plt_apps.remove("rabbitmq_prelaunch")
plt(
name = "base_plt",
apps = plt_apps,
plt = "//:base_plt",
deps = DEPS,
2021-05-28 19:27:21 +08:00
)
dialyze(
dialyzer_opts = RABBITMQ_DIALYZER_OPTS,
2021-05-28 19:27:21 +08:00
plt = ":base_plt",
2022-02-21 16:19:56 +08:00
warnings_as_errors = False,
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_test_helper(
name = "quorum_queue_utils",
srcs = [
"test/quorum_queue_utils.erl",
],
)
rabbitmq_test_helper(
name = "rabbit_ha_test_consumer",
srcs = [
"test/rabbit_ha_test_consumer.erl",
],
deps = [
"//deps/amqp_client:erlang_app",
"//deps/rabbit_common:erlang_app",
],
)
rabbitmq_test_helper(
name = "rabbit_ha_test_producer",
srcs = [
"test/rabbit_ha_test_producer.erl",
],
deps = [
"//deps/amqp_client:erlang_app",
"//deps/rabbit_common:erlang_app",
],
)
rabbitmq_test_helper(
name = "test_util",
srcs = [
"test/test_util.erl",
],
)
PACKAGE = "deps/rabbit"
suites = [
rabbitmq_suite(
name = "amqqueue_backward_compatibility_SUITE",
size = "small",
),
rabbitmq_integration_suite(
PACKAGE,
name = "backing_queue_SUITE",
size = "large",
),
rabbitmq_integration_suite(
PACKAGE,
name = "channel_interceptor_SUITE",
size = "medium",
additional_srcs = [
"test/dummy_interceptor.erl",
"test/failing_dummy_interceptor.erl",
],
),
rabbitmq_integration_suite(
PACKAGE,
name = "channel_operation_timeout_SUITE",
size = "medium",
additional_srcs = [
"test/channel_operation_timeout_test_queue.erl",
],
),
2021-11-10 22:26:10 +08:00
rabbitmq_integration_suite(
PACKAGE,
name = "classic_queue_prop_SUITE",
size = "large",
shard_count = 3,
2022-02-02 23:06:35 +08:00
sharding_method = "case",
2021-11-10 22:26:10 +08:00
deps = [
2022-01-25 18:26:20 +08:00
"@proper//:erlang_app",
2021-11-10 22:26:10 +08:00
],
),
rabbitmq_integration_suite(
PACKAGE,
name = "cluster_rename_SUITE",
2021-07-23 18:57:16 +08:00
size = "large",
flaky = True,
shard_count = 2,
),
rabbitmq_integration_suite(
PACKAGE,
name = "cluster_SUITE",
2021-07-23 18:57:16 +08:00
size = "medium",
),
rabbitmq_integration_suite(
PACKAGE,
name = "clustering_management_SUITE",
size = "large",
flaky = True,
shard_count = 19,
sharding_method = "case",
),
rabbitmq_integration_suite(
PACKAGE,
name = "config_schema_SUITE",
size = "medium",
data = [
"test/definition_import_SUITE_data/case1.json",
],
),
rabbitmq_integration_suite(
PACKAGE,
name = "confirms_rejects_SUITE",
size = "medium",
),
rabbitmq_integration_suite(
PACKAGE,
name = "consumer_timeout_SUITE",
size = "medium",
additional_beam = [
":quorum_queue_utils",
],
),
rabbitmq_integration_suite(
PACKAGE,
name = "crashing_queues_SUITE",
size = "medium",
),
rabbitmq_integration_suite(
PACKAGE,
name = "dead_lettering_SUITE",
2021-07-23 18:57:16 +08:00
size = "large",
additional_beam = [
":quorum_queue_utils",
],
flaky = True,
2022-01-25 16:55:22 +08:00
shard_count = 7,
),
rabbitmq_integration_suite(
PACKAGE,
name = "definition_import_SUITE",
size = "medium",
),
rabbitmq_integration_suite(
PACKAGE,
name = "disconnect_detected_during_alarm_SUITE",
2021-07-27 16:57:50 +08:00
size = "medium",
),
rabbitmq_integration_suite(
PACKAGE,
name = "disk_monitor_SUITE",
size = "medium",
),
rabbitmq_integration_suite(
PACKAGE,
name = "dynamic_ha_SUITE",
size = "large",
flaky = True,
shard_count = 20,
sharding_method = "case",
deps = [
"@proper//:erlang_app",
],
),
rabbitmq_integration_suite(
PACKAGE,
name = "dynamic_qq_SUITE",
2021-07-23 18:57:16 +08:00
size = "large",
additional_beam = [
":quorum_queue_utils",
],
flaky = True,
deps = [
"@proper//:erlang_app",
],
),
rabbitmq_integration_suite(
PACKAGE,
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(
PACKAGE,
name = "feature_flags_SUITE",
size = "large",
flaky = True,
rabbit_feature_flags: Add a feature flags controller process This gen_statem-based process is responsible for handling concurrency when feature flags are enabled and synchronized when a cluster is expanded. This clarifies and stabilizes the behavior of the feature flag subsystem w.r.t. situations where e.g. a feature flag migration function takes time to update data and a new node joins a cluster and synchronizes its feature flag states with the cluster. There was a chance that the feature flag was marked as enabled on the joining node, even though the migration function didn't take care of that node. With this new feature flags controller, enabling or synchronizing feature flags blocks and delays any concurrent operations which try to modify feature flags states too. This change also clarifies where and when the migration function is called: it is called at least once on each node who knows the feature flag and when the state goes from "disabled" to "enabled" on that node. Note that even if the feature flag is being enabled on a subset of the nodes (because other nodes already have it enabled), it is marked as "state_changing" everywhere during the migration. This is to prevent that a node where it is enabled assumes it is enabled on all nodes who know the feature flag. There is a new feature as well: just after a feature flag is enabled, the migration function is called a second time for any post-enable actions. The feature flag is marked as enabled between these "enable" and "post-enable" steps. The success or failure of this "post-enable" run does not affect the state of the feature flag (i.e. it is ignored). A new migration function API is introduced to allow more advanced things. The new API is: my_migration_function( #ffcommand{name = ..., props = ..., command = enable | post_enable, extra = #{...}}) The record is defined in `include/feature_flags.hrl`. Here is the meaning of each field: * `name` and `props` are the equivalent of the `FeatureName` and `FeatureProps` arguments of the previous migration function API. * `command` is basically the same as the previous `Arg` arguments. * `extra` is map containing context-specific information. For instance, it contains the list of nodes where the feature flag state changes. This whole new behavior is behind a new feature flag called `feature_flags_v2`. If a feature flag uses the new migration function API, `feature_flags_v2` will be automatically enabled. If many feature flags are enabled at once (like when a fresh RabbitMQ node is started for the first time), `feature_flags_v2` will be enabled first if it is in the list.
2021-12-15 01:50:59 +08:00
shard_count = 9,
runtime_deps = [
"//deps/rabbit/test/feature_flags_SUITE_data/my_plugin:erlang_app",
],
),
rabbit_feature_flags: Add a feature flags controller process This gen_statem-based process is responsible for handling concurrency when feature flags are enabled and synchronized when a cluster is expanded. This clarifies and stabilizes the behavior of the feature flag subsystem w.r.t. situations where e.g. a feature flag migration function takes time to update data and a new node joins a cluster and synchronizes its feature flag states with the cluster. There was a chance that the feature flag was marked as enabled on the joining node, even though the migration function didn't take care of that node. With this new feature flags controller, enabling or synchronizing feature flags blocks and delays any concurrent operations which try to modify feature flags states too. This change also clarifies where and when the migration function is called: it is called at least once on each node who knows the feature flag and when the state goes from "disabled" to "enabled" on that node. Note that even if the feature flag is being enabled on a subset of the nodes (because other nodes already have it enabled), it is marked as "state_changing" everywhere during the migration. This is to prevent that a node where it is enabled assumes it is enabled on all nodes who know the feature flag. There is a new feature as well: just after a feature flag is enabled, the migration function is called a second time for any post-enable actions. The feature flag is marked as enabled between these "enable" and "post-enable" steps. The success or failure of this "post-enable" run does not affect the state of the feature flag (i.e. it is ignored). A new migration function API is introduced to allow more advanced things. The new API is: my_migration_function( #ffcommand{name = ..., props = ..., command = enable | post_enable, extra = #{...}}) The record is defined in `include/feature_flags.hrl`. Here is the meaning of each field: * `name` and `props` are the equivalent of the `FeatureName` and `FeatureProps` arguments of the previous migration function API. * `command` is basically the same as the previous `Arg` arguments. * `extra` is map containing context-specific information. For instance, it contains the list of nodes where the feature flag state changes. This whole new behavior is behind a new feature flag called `feature_flags_v2`. If a feature flag uses the new migration function API, `feature_flags_v2` will be automatically enabled. If many feature flags are enabled at once (like when a fresh RabbitMQ node is started for the first time), `feature_flags_v2` will be enabled first if it is in the list.
2021-12-15 01:50:59 +08:00
rabbitmq_integration_suite(
PACKAGE,
name = "feature_flags_v2_SUITE",
size = "large",
),
rabbitmq_integration_suite(
PACKAGE,
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(
PACKAGE,
name = "lazy_queue_SUITE",
size = "medium",
),
rabbitmq_integration_suite(
PACKAGE,
name = "list_consumers_sanity_check_SUITE",
size = "medium",
),
rabbitmq_integration_suite(
PACKAGE,
name = "list_queues_online_and_offline_SUITE",
size = "medium",
),
rabbitmq_integration_suite(
PACKAGE,
name = "logging_SUITE",
runtime_deps = [
"@syslog//:erlang_app",
],
),
rabbitmq_suite(
name = "lqueue_SUITE",
size = "small",
deps = [
"@proper//:erlang_app",
],
),
rabbitmq_integration_suite(
PACKAGE,
name = "maintenance_mode_SUITE",
size = "medium",
additional_beam = [
":quorum_queue_utils",
],
),
rabbitmq_integration_suite(
PACKAGE,
name = "many_node_ha_SUITE",
size = "medium",
additional_beam = [
":rabbit_ha_test_consumer",
":rabbit_ha_test_producer",
],
),
rabbitmq_integration_suite(
PACKAGE,
name = "message_size_limit_SUITE",
2021-07-27 15:54:44 +08:00
size = "medium",
),
rabbitmq_integration_suite(
PACKAGE,
name = "metrics_SUITE",
size = "medium",
deps = [
"@proper//:erlang_app",
],
),
rabbitmq_suite(
name = "mirrored_supervisor_SUITE",
size = "small",
additional_srcs = [
"test/mirrored_supervisor_SUITE_gs.erl",
],
deps = [
"//deps/rabbit_common:erlang_app",
],
),
rabbitmq_suite(
name = "msg_store_SUITE",
size = "small",
deps = [
"//deps/rabbit_common:erlang_app",
],
),
rabbitmq_integration_suite(
PACKAGE,
name = "peer_discovery_classic_config_SUITE",
size = "medium",
flaky = True,
),
rabbitmq_integration_suite(
PACKAGE,
name = "peer_discovery_dns_SUITE",
size = "medium",
),
rabbitmq_integration_suite(
PACKAGE,
name = "per_user_connection_channel_limit_partitions_SUITE",
size = "large",
),
rabbitmq_integration_suite(
PACKAGE,
name = "per_user_connection_channel_limit_SUITE",
size = "medium",
),
rabbitmq_integration_suite(
PACKAGE,
name = "per_user_connection_channel_tracking_SUITE",
size = "medium",
),
rabbitmq_integration_suite(
PACKAGE,
name = "per_user_connection_tracking_SUITE",
size = "medium",
),
rabbitmq_integration_suite(
PACKAGE,
name = "per_vhost_connection_limit_partitions_SUITE",
size = "medium",
),
rabbitmq_integration_suite(
PACKAGE,
name = "per_vhost_connection_limit_SUITE",
size = "medium",
flaky = True,
),
rabbitmq_integration_suite(
PACKAGE,
name = "per_vhost_msg_store_SUITE",
size = "medium",
),
rabbitmq_integration_suite(
PACKAGE,
name = "per_vhost_queue_limit_SUITE",
size = "medium",
),
rabbitmq_integration_suite(
PACKAGE,
name = "policy_SUITE",
size = "medium",
),
rabbitmq_integration_suite(
PACKAGE,
name = "priority_queue_recovery_SUITE",
size = "medium",
),
rabbitmq_integration_suite(
PACKAGE,
name = "priority_queue_SUITE",
size = "medium",
),
rabbitmq_integration_suite(
PACKAGE,
name = "product_info_SUITE",
size = "medium",
),
rabbitmq_integration_suite(
PACKAGE,
name = "proxy_protocol_SUITE",
size = "medium",
),
rabbitmq_integration_suite(
PACKAGE,
name = "publisher_confirms_parallel_SUITE",
size = "medium",
additional_beam = [
":quorum_queue_utils",
],
),
rabbitmq_integration_suite(
PACKAGE,
name = "queue_length_limits_SUITE",
size = "medium",
),
rabbitmq_integration_suite(
PACKAGE,
name = "queue_master_location_SUITE",
size = "large",
shard_count = 2,
),
rabbitmq_integration_suite(
PACKAGE,
name = "queue_parallel_SUITE",
size = "large",
additional_beam = [
":quorum_queue_utils",
],
flaky = True,
shard_count = 6,
),
rabbitmq_integration_suite(
PACKAGE,
name = "queue_type_SUITE",
size = "medium",
),
rabbitmq_integration_suite(
PACKAGE,
name = "quorum_queue_SUITE",
size = "large",
additional_beam = [
":quorum_queue_utils",
],
flaky = True,
shard_count = 6,
),
rabbitmq_suite(
name = "rabbit_confirms_SUITE",
size = "small",
deps = [
"//deps/rabbit_common:erlang_app",
],
),
rabbitmq_integration_suite(
PACKAGE,
name = "rabbit_core_metrics_gc_SUITE",
size = "medium",
),
rabbitmq_suite(
name = "rabbit_fifo_int_SUITE",
size = "medium",
runtime_deps = [
"@aten//:erlang_app",
"@gen_batch_server//:erlang_app",
"@meck//:erlang_app",
"@ra//:erlang_app",
],
deps = [
"//deps/rabbit_common:erlang_app",
],
),
rabbitmq_suite(
name = "rabbit_fifo_prop_SUITE",
2021-12-17 04:55:29 +08:00
size = "large",
additional_beam = [
":test_util",
],
additional_hdrs = [
"src/rabbit_fifo.hrl",
],
erlc_opts = [
"-I",
"deps/rabbit", # allow rabbit_fifo.hrl to be included at src/rabbit_fifo.hrl
],
runtime_deps = [
"@ra//:erlang_app",
],
deps = [
"//deps/rabbit_common:erlang_app",
"@proper//:erlang_app",
],
),
2021-12-13 20:00:56 +08:00
rabbitmq_suite(
name = "rabbit_fifo_dlx_SUITE",
size = "small",
additional_hdrs = [
"src/rabbit_fifo.hrl",
"src/rabbit_fifo_dlx.hrl",
],
deps = [
"//deps/rabbit_common:erlang_app",
],
2021-12-13 20:00:56 +08:00
),
rabbitmq_integration_suite(
PACKAGE,
name = "rabbit_fifo_dlx_integration_SUITE",
size = "medium",
additional_beam = [
":test_util",
":quorum_queue_utils",
":quorum_queue_SUITE_beam_files",
],
additional_hdrs = [
"src/rabbit_fifo.hrl",
"src/rabbit_fifo_dlx.hrl",
],
runtime_deps = [
"@ra//:erlang_app",
2021-12-13 20:00:56 +08:00
],
deps = [
"@proper//:erlang_app",
2021-12-13 20:00:56 +08:00
],
),
rabbitmq_suite(
name = "rabbit_fifo_SUITE",
size = "medium",
additional_beam = [
":test_util",
":rabbit_fifo_v0_SUITE_beam_files",
],
additional_hdrs = [
"src/rabbit_fifo.hrl",
],
runtime_deps = [
"@meck//:erlang_app",
"@ra//:erlang_app",
],
deps = [
"//deps/rabbit_common:erlang_app",
],
),
rabbitmq_suite(
name = "rabbit_fifo_v0_SUITE",
size = "medium",
additional_beam = [
":test_util",
],
additional_hdrs = [
"src/rabbit_fifo_v0.hrl",
],
erlc_opts = [
"-I",
"deps/rabbit", # allow rabbit_fifo.hrl to be included at src/rabbit_fifo.hrl
],
runtime_deps = [
"@meck//:erlang_app",
"@ra//:erlang_app",
],
deps = [
"//deps/rabbit_common: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(
2021-12-17 00:45:34 +08:00
name = "rabbit_stream_sac_coordinator_SUITE",
deps = [
2022-01-27 16:50:44 +08:00
"//deps/rabbit_common:erlang_app",
],
),
rabbitmq_integration_suite(
PACKAGE,
name = "rabbit_stream_queue_SUITE",
size = "large",
additional_beam = [
":quorum_queue_utils",
],
flaky = True,
shard_count = 12,
deps = [
"@proper//:erlang_app",
],
),
rabbitmq_integration_suite(
PACKAGE,
name = "rabbitmq_queues_cli_integration_SUITE",
size = "medium",
),
rabbitmq_integration_suite(
PACKAGE,
name = "rabbitmqctl_integration_SUITE",
size = "medium",
flaky = True,
),
rabbitmq_integration_suite(
PACKAGE,
name = "rabbitmqctl_shutdown_SUITE",
size = "medium",
),
rabbitmq_integration_suite(
PACKAGE,
name = "signal_handling_SUITE",
size = "medium",
),
rabbitmq_integration_suite(
PACKAGE,
name = "simple_ha_SUITE",
size = "large",
additional_beam = [
":rabbit_ha_test_consumer",
":rabbit_ha_test_producer",
],
shard_count = 4,
),
rabbitmq_integration_suite(
PACKAGE,
name = "single_active_consumer_SUITE",
size = "medium",
additional_beam = [
":quorum_queue_utils",
],
),
rabbitmq_integration_suite(
PACKAGE,
name = "sync_detection_SUITE",
size = "medium",
),
rabbitmq_integration_suite(
PACKAGE,
name = "term_to_binary_compat_prop_SUITE",
deps = [
"@proper//:erlang_app",
],
),
rabbitmq_integration_suite(
PACKAGE,
name = "topic_permission_SUITE",
size = "medium",
),
rabbitmq_integration_suite(
PACKAGE,
name = "unit_access_control_authn_authz_context_propagation_SUITE",
size = "medium",
additional_srcs = [
"test/rabbit_auth_backend_context_propagation_mock.erl",
"test/rabbit_foo_protocol_connection_info.erl",
],
),
rabbitmq_integration_suite(
PACKAGE,
name = "unit_access_control_credential_validation_SUITE",
size = "medium",
deps = [
"@proper//:erlang_app",
],
),
rabbitmq_integration_suite(
PACKAGE,
name = "unit_access_control_SUITE",
size = "medium",
additional_srcs = [
"test/rabbit_dummy_protocol_connection_info.erl",
],
),
rabbitmq_suite(
name = "unit_amqp091_content_framing_SUITE",
size = "small",
deps = [
"//deps/rabbit_common:erlang_app",
],
),
rabbitmq_integration_suite(
PACKAGE,
name = "unit_amqp091_server_properties_SUITE",
2021-07-23 15:43:05 +08:00
size = "medium",
),
rabbitmq_integration_suite(
PACKAGE,
name = "unit_app_management_SUITE",
2021-07-23 18:57:16 +08:00
size = "medium",
),
rabbitmq_suite(
name = "unit_cluster_formation_locking_mocks_SUITE",
size = "small",
runtime_deps = [
"@meck//:erlang_app",
],
),
rabbitmq_suite(
name = "unit_collections_SUITE",
size = "small",
runtime_deps = [
"//deps/rabbit_common:erlang_app",
],
),
rabbitmq_suite(
name = "unit_config_value_encryption_SUITE",
size = "medium",
runtime_deps = [
"//deps/rabbit/apps/rabbitmq_prelaunch:test_erlang_app",
"//deps/rabbit_common:test_erlang_app",
"@credentials_obfuscation//:erlang_app",
],
),
rabbitmq_integration_suite(
PACKAGE,
name = "unit_connection_tracking_SUITE",
2021-08-03 23:06:12 +08:00
size = "medium",
),
rabbitmq_integration_suite(
PACKAGE,
name = "unit_credit_flow_SUITE",
2021-07-23 18:57:16 +08:00
size = "medium",
),
rabbitmq_integration_suite(
PACKAGE,
name = "unit_disk_monitor_SUITE",
2021-07-27 15:54:44 +08:00
size = "medium",
),
rabbitmq_integration_suite(
PACKAGE,
name = "unit_file_handle_cache_SUITE",
size = "medium",
),
rabbitmq_integration_suite(
PACKAGE,
name = "unit_gen_server2_SUITE",
2021-08-04 20:55:44 +08:00
size = "medium",
),
rabbitmq_suite(
name = "unit_gm_SUITE",
size = "small",
runtime_deps = [
"//deps/rabbitmq_ct_helpers:erlang_app",
"@meck//:erlang_app",
],
),
rabbitmq_integration_suite(
PACKAGE,
name = "unit_log_management_SUITE",
2021-07-23 15:43:05 +08:00
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(
PACKAGE,
name = "unit_plugin_versioning_SUITE",
size = "small",
),
rabbitmq_integration_suite(
PACKAGE,
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(
PACKAGE,
name = "unit_stats_and_metrics_SUITE",
2021-07-28 14:37:14 +08:00
size = "medium",
additional_srcs = [
"test/dummy_event_receiver.erl",
],
),
rabbitmq_suite(
name = "unit_supervisor2_SUITE",
size = "small",
additional_srcs = [
"test/dummy_supervisor2.erl",
],
),
rabbitmq_integration_suite(
PACKAGE,
name = "unit_vm_memory_monitor_SUITE",
2021-08-03 21:51:02 +08:00
size = "medium",
),
rabbitmq_integration_suite(
PACKAGE,
name = "upgrade_preparation_SUITE",
size = "medium",
),
rabbitmq_integration_suite(
PACKAGE,
name = "vhost_SUITE",
size = "medium",
flaky = True,
),
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(
PACKAGE,
name = "direct_exchange_routing_v2_SUITE",
size = "medium",
additional_beam = [
":quorum_queue_utils",
],
),
rabbitmq_integration_suite(
PACKAGE,
name = "rabbit_direct_reply_to_prop_SUITE",
size = "small",
deps = [
"@proper//:erlang_app",
],
),
]
assert_suites(
suites,
glob(["test/**/*_SUITE.erl"]),
)
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=manpages-tmp/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 --strip-components 1 -cf $@ manpages-tmp/*
rm -dr manpages-tmp
""",
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"],
)