1load( 2 "@bazel-erlang//:bazel_erlang_lib.bzl", 3 "DEFAULT_ERLC_OPTS", 4 "DEFAULT_TEST_ERLC_OPTS", 5 "erlang_lib", 6 "test_erlang_lib", 7) 8load("@bazel-erlang//:ct_sharded.bzl", "ct_suite", "ct_suite_variant") 9load("//:rabbitmq_home.bzl", "rabbitmq_home") 10load("//:rabbitmq_run.bzl", "rabbitmq_run") 11 12RABBITMQ_ERLC_OPTS = DEFAULT_ERLC_OPTS 13 14RABBITMQ_TEST_ERLC_OPTS = DEFAULT_TEST_ERLC_OPTS + [ 15 "+nowarn_export_all", 16] 17 18RABBITMQ_DIALYZER_OPTS = [ 19 "-Werror_handling", 20 "-Wunmatched_returns", 21] 22 23APP_VERSION = "3.9.0" 24 25ALL_PLUGINS = [ 26 "//deps/rabbit:bazel_erlang_lib", 27 "//deps/rabbitmq_amqp1_0:bazel_erlang_lib", 28 "//deps/rabbitmq_auth_backend_cache:bazel_erlang_lib", 29 "//deps/rabbitmq_auth_backend_http:bazel_erlang_lib", 30 "//deps/rabbitmq_auth_backend_ldap:bazel_erlang_lib", 31 "//deps/rabbitmq_auth_backend_oauth2:bazel_erlang_lib", 32 "//deps/rabbitmq_auth_mechanism_ssl:bazel_erlang_lib", 33 "//deps/rabbitmq_consistent_hash_exchange:bazel_erlang_lib", 34 "//deps/rabbitmq_event_exchange:bazel_erlang_lib", 35 "//deps/rabbitmq_federation:bazel_erlang_lib", 36 "//deps/rabbitmq_federation_management:bazel_erlang_lib", 37 "//deps/rabbitmq_jms_topic_exchange:bazel_erlang_lib", 38 "//deps/rabbitmq_management:bazel_erlang_lib", 39 "//deps/rabbitmq_mqtt:bazel_erlang_lib", 40 "//deps/rabbitmq_peer_discovery_aws:bazel_erlang_lib", 41 "//deps/rabbitmq_peer_discovery_consul:bazel_erlang_lib", 42 "//deps/rabbitmq_peer_discovery_etcd:bazel_erlang_lib", 43 "//deps/rabbitmq_peer_discovery_k8s:bazel_erlang_lib", 44 "//deps/rabbitmq_prometheus:bazel_erlang_lib", 45 "//deps/rabbitmq_random_exchange:bazel_erlang_lib", 46 "//deps/rabbitmq_recent_history_exchange:bazel_erlang_lib", 47 "//deps/rabbitmq_sharding:bazel_erlang_lib", 48 "//deps/rabbitmq_shovel:bazel_erlang_lib", 49 "//deps/rabbitmq_shovel_management:bazel_erlang_lib", 50 "//deps/rabbitmq_stomp:bazel_erlang_lib", 51 "//deps/rabbitmq_stream:bazel_erlang_lib", 52 "//deps/rabbitmq_stream_management:bazel_erlang_lib", 53 "//deps/rabbitmq_top:bazel_erlang_lib", 54 "//deps/rabbitmq_tracing:bazel_erlang_lib", 55 "//deps/rabbitmq_trust_store:bazel_erlang_lib", 56 "//deps/rabbitmq_web_dispatch:bazel_erlang_lib", 57 "//deps/rabbitmq_web_mqtt:bazel_erlang_lib", 58 "//deps/rabbitmq_web_stomp:bazel_erlang_lib", 59] 60 61LABELS_WITH_TEST_VERSIONS = [ 62 "//deps/amqp10_common:bazel_erlang_lib", 63 "//deps/rabbit_common:bazel_erlang_lib", 64 "//deps/rabbit:bazel_erlang_lib", 65 "//deps/rabbit/apps/rabbitmq_prelaunch:bazel_erlang_lib", 66] 67 68def all_plugins(rabbitmq_workspace = "@rabbitmq-server"): 69 return [rabbitmq_workspace + p for p in ALL_PLUGINS] 70 71def with_test_versions(deps): 72 r = [] 73 for d in deps: 74 if d in LABELS_WITH_TEST_VERSIONS: 75 r.append(d.replace(":bazel_erlang_lib", ":test_bazel_erlang_lib")) 76 else: 77 r.append(d) 78 return r 79 80def rabbitmq_lib( 81 app_name = "", 82 app_version = APP_VERSION, 83 app_description = "", 84 app_module = "", 85 app_registered = [], 86 app_env = "[]", 87 extra_apps = [], 88 erlc_opts = RABBITMQ_ERLC_OPTS, 89 test_erlc_opts = RABBITMQ_TEST_ERLC_OPTS, 90 first_srcs = [], 91 extra_priv = [], 92 build_deps = [], 93 deps = [], 94 runtime_deps = []): 95 erlang_lib( 96 app_name = app_name, 97 app_version = app_version, 98 app_description = app_description, 99 app_module = app_module, 100 app_registered = app_registered, 101 app_env = app_env, 102 extra_apps = extra_apps, 103 extra_priv = extra_priv, 104 erlc_opts = erlc_opts, 105 first_srcs = first_srcs, 106 build_deps = build_deps, 107 deps = deps, 108 runtime_deps = runtime_deps, 109 ) 110 111 test_erlang_lib( 112 app_name = app_name, 113 app_version = app_version, 114 app_description = app_description, 115 app_module = app_module, 116 app_registered = app_registered, 117 app_env = app_env, 118 extra_apps = extra_apps, 119 extra_priv = extra_priv, 120 erlc_opts = test_erlc_opts, 121 first_srcs = first_srcs, 122 build_deps = with_test_versions(build_deps), 123 deps = with_test_versions(deps), 124 runtime_deps = with_test_versions(runtime_deps), 125 ) 126 127def rabbitmq_suite(erlc_opts = [], test_env = {}, **kwargs): 128 ct_suite( 129 erlc_opts = RABBITMQ_TEST_ERLC_OPTS + erlc_opts, 130 test_env = dict({ 131 "RABBITMQ_CT_SKIP_AS_ERROR": "true", 132 }.items() + test_env.items()), 133 **kwargs 134 ) 135 return kwargs["name"] 136 137def broker_for_integration_suites(): 138 rabbitmq_home( 139 name = "broker-for-tests-home", 140 plugins = [ 141 "//deps/rabbit:bazel_erlang_lib", 142 ":bazel_erlang_lib", 143 ], 144 ) 145 146 rabbitmq_run( 147 name = "rabbitmq-for-tests-run", 148 home = ":broker-for-tests-home", 149 ) 150 151def rabbitmq_integration_suite( 152 package, 153 name = None, 154 tags = [], 155 data = [], 156 erlc_opts = [], 157 additional_hdrs = [], 158 additional_srcs = [], 159 test_env = {}, 160 tools = [], 161 deps = [], 162 runtime_deps = [], 163 **kwargs): 164 ct_suite( 165 name = name, 166 suite_name = name, 167 tags = tags, 168 erlc_opts = RABBITMQ_TEST_ERLC_OPTS + erlc_opts, 169 additional_hdrs = additional_hdrs, 170 additional_srcs = additional_srcs, 171 data = data, 172 test_env = dict({ 173 "SKIP_MAKE_TEST_DIST": "true", 174 "RABBITMQ_CT_SKIP_AS_ERROR": "true", 175 "RABBITMQ_RUN": "$TEST_SRCDIR/$TEST_WORKSPACE/{}/rabbitmq-for-tests-run".format(package), 176 "RABBITMQCTL": "$TEST_SRCDIR/$TEST_WORKSPACE/{}/broker-for-tests-home/sbin/rabbitmqctl".format(package), 177 "RABBITMQ_PLUGINS": "$TEST_SRCDIR/$TEST_WORKSPACE/{}/broker-for-tests-home/sbin/rabbitmq-plugins".format(package), 178 "RABBITMQ_QUEUES": "$TEST_SRCDIR/$TEST_WORKSPACE/{}/broker-for-tests-home/sbin/rabbitmq-queues".format(package), 179 }.items() + test_env.items()), 180 tools = [ 181 ":rabbitmq-for-tests-run", 182 ] + tools, 183 runtime_deps = [ 184 "//deps/rabbitmq_cli:elixir_as_bazel_erlang_lib", 185 "//deps/rabbitmq_cli:rabbitmqctl", 186 "//deps/rabbitmq_ct_client_helpers:bazel_erlang_lib", 187 ] + runtime_deps, 188 deps = [ 189 "//deps/amqp_client:bazel_erlang_lib", 190 "//deps/rabbit_common:bazel_erlang_lib", 191 "//deps/rabbitmq_ct_helpers:bazel_erlang_lib", 192 ] + deps, 193 **kwargs 194 ) 195 196 ct_suite_variant( 197 name = name + "-mixed", 198 suite_name = name, 199 tags = tags + ["mixed-version-cluster"], 200 data = data, 201 test_env = dict({ 202 "SKIP_MAKE_TEST_DIST": "true", 203 "RABBITMQ_FEATURE_FLAGS": "", 204 "RABBITMQ_RUN": "$TEST_SRCDIR/$TEST_WORKSPACE/{}/rabbitmq-for-tests-run".format(package), 205 "RABBITMQCTL": "$TEST_SRCDIR/$TEST_WORKSPACE/{}/broker-for-tests-home/sbin/rabbitmqctl".format(package), 206 "RABBITMQ_PLUGINS": "$TEST_SRCDIR/$TEST_WORKSPACE/{}/broker-for-tests-home/sbin/rabbitmq-plugins".format(package), 207 "RABBITMQ_QUEUES": "$TEST_SRCDIR/$TEST_WORKSPACE/{}/broker-for-tests-home/sbin/rabbitmq-queues".format(package), 208 "RABBITMQ_RUN_SECONDARY": "$TEST_SRCDIR/rabbitmq-server-generic-unix-3.8.22/rabbitmq-run", 209 }.items() + test_env.items()), 210 tools = [ 211 ":rabbitmq-for-tests-run", 212 "@rabbitmq-server-generic-unix-3.8.22//:rabbitmq-run", 213 ] + tools, 214 runtime_deps = [ 215 "//deps/rabbitmq_cli:elixir_as_bazel_erlang_lib", 216 "//deps/rabbitmq_cli:rabbitmqctl", 217 "//deps/rabbitmq_ct_client_helpers:bazel_erlang_lib", 218 ] + runtime_deps, 219 deps = [ 220 "//deps/amqp_client:bazel_erlang_lib", 221 "//deps/rabbit_common:bazel_erlang_lib", 222 "//deps/rabbitmq_ct_helpers:bazel_erlang_lib", 223 ] + deps, 224 **kwargs 225 ) 226 227 return name 228 229def assert_suites(suite_names, suite_files): 230 for f in suite_files: 231 sn = f.rpartition("/")[-1].replace(".erl", "") 232 if not sn in suite_names: 233 fail("A bazel rule has not been defined for {} (expected {} in {}".format(f, sn, suite_names)) 234