diff --git a/.github/workflows/test-rabbitmq-alphas.yml b/.github/workflows/test-rabbitmq-alphas.yml index 3f4b26b13a..eca3f8e212 100644 --- a/.github/workflows/test-rabbitmq-alphas.yml +++ b/.github/workflows/test-rabbitmq-alphas.yml @@ -43,19 +43,19 @@ jobs: run: make deps - name: Test with NIO run: | - ./mvnw verify -P use-nio -Drabbitmqctl.bin=DOCKER:rabbitmq \ - -Dtest-broker.A.nodename=rabbit@$(hostname) -Dtest-broker.B.nodename=hare@$(hostname) \ + ./mvnw verify -P use-nio -Drabbitmqctl.bin=DOCKER:rabbitmq0 \ + -Dtest-broker.A.nodename=rabbit@node0 -Dtest-broker.B.nodename=rabbit@node1 \ + -Dca.certificate=./tls-gen/basic/result/ca_certificate.pem \ + -Dclient.certificate=./tls-gen/basic/result/client_$(hostname)_certificate.pem \ -Dmaven.javadoc.skip=true \ - -Dtest-client-cert.password= -Dtest-tls-certs.dir=rabbitmq-configuration/tls \ --no-transfer-progress - name: Test with blocking IO run: | - ./mvnw verify -Drabbitmqctl.bin=DOCKER:rabbitmq \ - -Dtest-broker.A.nodename=rabbit@$(hostname) -Dtest-broker.B.nodename=hare@$(hostname) \ - -Dmaven.javadoc.skip=true \ - -Dtest-client-cert.password= -Dtest-tls-certs.dir=rabbitmq-configuration/tls \ - --no-transfer-progress - - name: Stop broker A - run: docker stop rabbitmq && docker rm rabbitmq - - name: Stop broker B - run: docker stop hare && docker rm hare + ./mvnw verify -Drabbitmqctl.bin=DOCKER:rabbitmq0 \ + -Dtest-broker.A.nodename=rabbit@node0 -Dtest-broker.B.nodename=rabbit@node1 \ + -Dca.certificate=./tls-gen/basic/result/ca_certificate.pem \ + -Dclient.certificate=./tls-gen/basic/result/client_$(hostname)_certificate.pem \ + -Dmaven.javadoc.skip=true \ + --no-transfer-progress + - name: Stop cluster + run: docker compose --file ci/cluster/docker-compose.yml down diff --git a/.github/workflows/test-supported-java-versions-5.x.yml b/.github/workflows/test-supported-java-versions-5.x.yml index 8427652743..0c9a36d00f 100644 --- a/.github/workflows/test-supported-java-versions-5.x.yml +++ b/.github/workflows/test-supported-java-versions-5.x.yml @@ -45,17 +45,19 @@ jobs: run: | ./mvnw verify -P use-nio -Drabbitmqctl.bin=DOCKER:rabbitmq \ -Dtest-broker.A.nodename=rabbit@$(hostname) -Dmaven.javadoc.skip=true \ - -Dtest-client-cert.password= -Dtest-tls-certs.dir=rabbitmq-configuration/tls \ + -Dca.certificate=./tls-gen/basic/result/ca_certificate.pem \ + -Dclient.certificate=./tls-gen/basic/result/client_$(hostname)_certificate.pem \ -Dit.test=ClientTestSuite,FunctionalTestSuite,ServerTestSuite,SslTestSuite \ --no-transfer-progress \ -Dnet.bytebuddy.experimental=true - name: Test with blocking IO run: | ./mvnw verify -Drabbitmqctl.bin=DOCKER:rabbitmq \ - -Dtest-broker.A.nodename=rabbit@$(hostname) -Dmaven.javadoc.skip=true \ - -Dtest-client-cert.password= -Dtest-tls-certs.dir=rabbitmq-configuration/tls \ - -Dit.test=ClientTestSuite,FunctionalTestSuite,ServerTestSuite,SslTestSuite \ - --no-transfer-progress \ - -Dnet.bytebuddy.experimental=true + -Dtest-broker.A.nodename=rabbit@$(hostname) -Dmaven.javadoc.skip=true \ + -Dca.certificate=./tls-gen/basic/result/ca_certificate.pem \ + -Dclient.certificate=./tls-gen/basic/result/client_$(hostname)_certificate.pem \ + -Dit.test=ClientTestSuite,FunctionalTestSuite,ServerTestSuite,SslTestSuite \ + --no-transfer-progress \ + -Dnet.bytebuddy.experimental=true - name: Stop broker run: docker stop rabbitmq && docker rm rabbitmq diff --git a/.github/workflows/test-supported-java-versions-main.yml b/.github/workflows/test-supported-java-versions-main.yml index 6bf72c3675..902b70bd0b 100644 --- a/.github/workflows/test-supported-java-versions-main.yml +++ b/.github/workflows/test-supported-java-versions-main.yml @@ -43,17 +43,19 @@ jobs: run: | ./mvnw verify -P use-nio -Drabbitmqctl.bin=DOCKER:rabbitmq \ -Dtest-broker.A.nodename=rabbit@$(hostname) -Dmaven.javadoc.skip=true \ - -Dtest-client-cert.password= -Dtest-tls-certs.dir=rabbitmq-configuration/tls \ + -Dca.certificate=./tls-gen/basic/result/ca_certificate.pem \ + -Dclient.certificate=./tls-gen/basic/result/client_$(hostname)_certificate.pem \ -Dit.test=ClientTestSuite,FunctionalTestSuite,ServerTestSuite,SslTestSuite \ --no-transfer-progress \ -Dnet.bytebuddy.experimental=true - name: Test with blocking IO run: | ./mvnw verify -Drabbitmqctl.bin=DOCKER:rabbitmq \ - -Dtest-broker.A.nodename=rabbit@$(hostname) -Dmaven.javadoc.skip=true \ - -Dtest-client-cert.password= -Dtest-tls-certs.dir=rabbitmq-configuration/tls \ - -Dit.test=ClientTestSuite,FunctionalTestSuite,ServerTestSuite,SslTestSuite \ - --no-transfer-progress \ - -Dnet.bytebuddy.experimental=true + -Dtest-broker.A.nodename=rabbit@$(hostname) -Dmaven.javadoc.skip=true \ + -Dca.certificate=./tls-gen/basic/result/ca_certificate.pem \ + -Dclient.certificate=./tls-gen/basic/result/client_$(hostname)_certificate.pem \ + -Dit.test=ClientTestSuite,FunctionalTestSuite,ServerTestSuite,SslTestSuite \ + --no-transfer-progress \ + -Dnet.bytebuddy.experimental=true - name: Stop broker run: docker stop rabbitmq && docker rm rabbitmq diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index f9513a60b9..126c9ffe5f 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -41,22 +41,23 @@ jobs: run: make deps - name: Test with NIO run: | - ./mvnw verify -P use-nio -Drabbitmqctl.bin=DOCKER:rabbitmq \ - -Dtest-broker.A.nodename=rabbit@$(hostname) -Dtest-broker.B.nodename=hare@$(hostname) \ + ./mvnw verify -P use-nio -Drabbitmqctl.bin=DOCKER:rabbitmq0 \ + -Dtest-broker.A.nodename=rabbit@node0 -Dtest-broker.B.nodename=rabbit@node1 \ + -Dca.certificate=./tls-gen/basic/result/ca_certificate.pem \ + -Dclient.certificate=./tls-gen/basic/result/client_$(hostname)_certificate.pem \ -Dmaven.javadoc.skip=true \ - -Dtest-client-cert.password= -Dtest-tls-certs.dir=rabbitmq-configuration/tls \ --no-transfer-progress - name: Test with blocking IO run: | - ./mvnw verify -Drabbitmqctl.bin=DOCKER:rabbitmq \ - -Dtest-broker.A.nodename=rabbit@$(hostname) -Dtest-broker.B.nodename=hare@$(hostname) \ - -Dmaven.javadoc.skip=true \ - -Dtest-client-cert.password= -Dtest-tls-certs.dir=rabbitmq-configuration/tls \ - --no-transfer-progress - - name: Stop broker A - run: docker stop rabbitmq && docker rm rabbitmq - - name: Stop broker B - run: docker stop hare && docker rm hare + ./mvnw verify -Drabbitmqctl.bin=DOCKER:rabbitmq0 \ + -Dtest-broker.A.nodename=rabbit@node0 -Dtest-broker.B.nodename=rabbit@node1 \ + -Dca.certificate=./tls-gen/basic/result/ca_certificate.pem \ + -Dclient.certificate=./tls-gen/basic/result/client_$(hostname)_certificate.pem \ + -Dmaven.javadoc.skip=true \ + -Dtest-client-cert.password= -Dtest-tls-certs.dir=rabbitmq-configuration/tls \ + --no-transfer-progress + - name: Stop cluster + run: docker compose --file ci/cluster/docker-compose.yml down - name: Publish snapshot if: ${{ github.event_name != 'pull_request' }} run: ./mvnw clean deploy -Psnapshots -DskipITs -DskipTests --no-transfer-progress diff --git a/ci/_start-cluster.sh b/ci/_start-cluster.sh new file mode 100755 index 0000000000..6b01992d96 --- /dev/null +++ b/ci/_start-cluster.sh @@ -0,0 +1,84 @@ +#!/usr/bin/env bash + +LOCAL_SCRIPT="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" + +RABBITMQ_IMAGE=${RABBITMQ_IMAGE:-rabbitmq:4.0} + +wait_for_message() { + while ! docker logs "$1" | grep -q "$2"; + do + sleep 5 + echo "Waiting 5 seconds for $1 to start..." + done +} + +make -C "${PWD}"/tls-gen/basic + +mv tls-gen/basic/result/server_$(hostname -s)_certificate.pem tls-gen/basic/result/server_certificate.pem +mv tls-gen/basic/result/server_$(hostname -s)_key.pem tls-gen/basic/result/server_key.pem +mv tls-gen/basic/server_$(hostname -s) tls-gen/basic/server +mv tls-gen/basic/client_$(hostname -s) tls-gen/basic/client + +rm -rf rabbitmq-configuration +mkdir -p rabbitmq-configuration/tls + +cp -R "${PWD}"/tls-gen/basic/* rabbitmq-configuration/tls +chmod -R o+r rabbitmq-configuration/tls/* +chmod -R g+r rabbitmq-configuration/tls/* +./mvnw -q clean resources:testResources -Dtest-tls-certs.dir=/etc/rabbitmq/tls +cp target/test-classes/rabbit@localhost.config rabbitmq-configuration/rabbit@localhost.config +cp target/test-classes/hare@localhost.config rabbitmq-configuration/hare@localhost.config + +echo "Running RabbitMQ ${RABBITMQ_IMAGE}" + +docker rm -f rabbitmq 2>/dev/null || echo "rabbitmq was not running" +docker run -d --name rabbitmq \ + --network host \ + -v "${PWD}"/rabbitmq-configuration:/etc/rabbitmq \ + --env RABBITMQ_CONFIG_FILE=/etc/rabbitmq/rabbit@localhost.config \ + --env RABBITMQ_NODENAME=rabbit@$(hostname) \ + --env RABBITMQ_NODE_PORT=5672 \ + --env RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS="-setcookie do-not-do-this-in-production" \ + "${RABBITMQ_IMAGE}" + +# for CLI commands to share the same cookie +docker exec rabbitmq bash -c "echo 'do-not-do-this-in-production' > /var/lib/rabbitmq/.erlang.cookie" +docker exec rabbitmq chmod 0600 /var/lib/rabbitmq/.erlang.cookie + +wait_for_message rabbitmq "completed with" + +docker run -d --name hare \ + --network host \ + -v "${PWD}"/rabbitmq-configuration:/etc/rabbitmq \ + --env RABBITMQ_CONFIG_FILE=/etc/rabbitmq/hare@localhost.config \ + --env RABBITMQ_NODENAME=hare@$(hostname) \ + --env RABBITMQ_NODE_PORT=5673 \ + --env RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS="-setcookie do-not-do-this-in-production" \ + "${RABBITMQ_IMAGE}" + +# for CLI commands to share the same cookie +docker exec hare bash -c "echo 'do-not-do-this-in-production' > /var/lib/rabbitmq/.erlang.cookie" +docker exec hare chmod 0600 /var/lib/rabbitmq/.erlang.cookie + +wait_for_message hare "completed with" + +docker exec hare rabbitmqctl --node hare@$(hostname) status + +docker exec rabbitmq rabbitmq-diagnostics --node rabbit@$(hostname) is_running +docker exec hare rabbitmq-diagnostics --node hare@$(hostname) is_running + +docker exec hare rabbitmqctl --node hare@$(hostname) stop_app +docker exec hare rabbitmqctl --node hare@$(hostname) join_cluster rabbit@$(hostname) +docker exec hare rabbitmqctl --node hare@$(hostname) start_app + +sleep 10 + +docker exec hare rabbitmqctl --node hare@$(hostname) await_startup + +docker exec hare rabbitmqctl --node hare@$(hostname) enable_feature_flag --opt-in khepri_db +docker exec rabbitmq rabbitmqctl --node rabbit@$(hostname) enable_feature_flag --opt-in khepri_db + +docker exec rabbitmq rabbitmq-diagnostics --node rabbit@$(hostname) erlang_version +docker exec rabbitmq rabbitmqctl --node rabbit@$(hostname) version +docker exec rabbitmq rabbitmqctl --node rabbit@$(hostname) status +docker exec rabbitmq rabbitmqctl --node rabbit@$(hostname) cluster_status diff --git a/ci/cluster/configuration/rabbitmq.conf b/ci/cluster/configuration/rabbitmq.conf new file mode 100644 index 0000000000..652395d768 --- /dev/null +++ b/ci/cluster/configuration/rabbitmq.conf @@ -0,0 +1,20 @@ +cluster_formation.peer_discovery_backend = rabbit_peer_discovery_classic_config +cluster_formation.classic_config.nodes.1 = rabbit@node0 +cluster_formation.classic_config.nodes.2 = rabbit@node1 +cluster_formation.classic_config.nodes.3 = rabbit@node2 +loopback_users = none + +listeners.ssl.default = 5671 + +ssl_options.cacertfile = /etc/rabbitmq/tls/ca_certificate.pem +ssl_options.certfile = /etc/rabbitmq/tls/server_certificate.pem +ssl_options.keyfile = /etc/rabbitmq/tls/server_key.pem +ssl_options.verify = verify_peer +ssl_options.fail_if_no_peer_cert = false +ssl_options.honor_cipher_order = true + +auth_mechanisms.1 = PLAIN +auth_mechanisms.2 = ANONYMOUS +auth_mechanisms.3 = AMQPLAIN +auth_mechanisms.4 = EXTERNAL +auth_mechanisms.5 = RABBIT-CR-DEMO diff --git a/ci/cluster/docker-compose.yml b/ci/cluster/docker-compose.yml new file mode 100644 index 0000000000..2d438519ba --- /dev/null +++ b/ci/cluster/docker-compose.yml @@ -0,0 +1,49 @@ +services: + node0: + environment: + - RABBITMQ_ERLANG_COOKIE='secret_cookie' + networks: + - rabbitmq-cluster + hostname: node0 + container_name: rabbitmq0 + image: ${RABBITMQ_IMAGE:-rabbitmq:4.0} + pull_policy: always + ports: + - "5672:5672" + - "5671:5671" + tty: true + volumes: + - ./configuration/:/etc/rabbitmq/ + - ../../rabbitmq-configuration/tls:/etc/rabbitmq/tls/ + node1: + environment: + - RABBITMQ_ERLANG_COOKIE='secret_cookie' + networks: + - rabbitmq-cluster + hostname: node1 + container_name: rabbitmq1 + image: ${RABBITMQ_IMAGE:-rabbitmq:4.0} + pull_policy: always + ports: + - "5673:5672" + tty: true + volumes: + - ./configuration/:/etc/rabbitmq/ + - ../../rabbitmq-configuration/tls:/etc/rabbitmq/tls/ + node2: + environment: + - RABBITMQ_ERLANG_COOKIE='secret_cookie' + networks: + - rabbitmq-cluster + hostname: node2 + container_name: rabbitmq2 + image: ${RABBITMQ_IMAGE:-rabbitmq:4.0} + pull_policy: always + ports: + - "5674:5672" + tty: true + volumes: + - ./configuration/:/etc/rabbitmq/ + - ../../rabbitmq-configuration/tls:/etc/rabbitmq/tls/ +networks: + rabbitmq-cluster: diff --git a/ci/start-broker.sh b/ci/start-broker.sh index 89ab76572d..ad13368cfb 100755 --- a/ci/start-broker.sh +++ b/ci/start-broker.sh @@ -12,21 +12,33 @@ wait_for_message() { done } -make -C "${PWD}"/tls-gen/basic +rm -rf rabbitmq-configuration +mkdir -p rabbitmq-configuration/tls -mv tls-gen/basic/result/server_$(hostname -s)_certificate.pem tls-gen/basic/result/server_certificate.pem -mv tls-gen/basic/result/server_$(hostname -s)_key.pem tls-gen/basic/result/server_key.pem -mv tls-gen/basic/server_$(hostname -s) tls-gen/basic/server -mv tls-gen/basic/client_$(hostname -s) tls-gen/basic/client +make -C "${PWD}"/tls-gen/basic rm -rf rabbitmq-configuration mkdir -p rabbitmq-configuration/tls - -cp -R "${PWD}"/tls-gen/basic/* rabbitmq-configuration/tls -chmod -R o+r rabbitmq-configuration/tls/* -chmod -R g+r rabbitmq-configuration/tls/* -./mvnw -q clean resources:testResources -Dtest-tls-certs.dir=/etc/rabbitmq/tls -cp target/test-classes/rabbit@localhost.config rabbitmq-configuration/rabbitmq.config +cp -R "${PWD}"/tls-gen/basic/result/* rabbitmq-configuration/tls +chmod o+r rabbitmq-configuration/tls/* +chmod g+r rabbitmq-configuration/tls/* + +echo "loopback_users = none + +listeners.ssl.default = 5671 + +ssl_options.cacertfile = /etc/rabbitmq/tls/ca_certificate.pem +ssl_options.certfile = /etc/rabbitmq/tls/server_$(hostname)_certificate.pem +ssl_options.keyfile = /etc/rabbitmq/tls/server_$(hostname)_key.pem +ssl_options.verify = verify_peer +ssl_options.fail_if_no_peer_cert = false +ssl_options.honor_cipher_order = true + +auth_mechanisms.1 = PLAIN +auth_mechanisms.2 = ANONYMOUS +auth_mechanisms.3 = AMQPLAIN +auth_mechanisms.4 = EXTERNAL +auth_mechanisms.5 = RABBIT-CR-DEMO" >> rabbitmq-configuration/rabbitmq.conf echo "Running RabbitMQ ${RABBITMQ_IMAGE}" diff --git a/ci/start-cluster.sh b/ci/start-cluster.sh index 6b01992d96..85a8ce5c11 100755 --- a/ci/start-cluster.sh +++ b/ci/start-cluster.sh @@ -1,84 +1,39 @@ #!/usr/bin/env bash -LOCAL_SCRIPT="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" - -RABBITMQ_IMAGE=${RABBITMQ_IMAGE:-rabbitmq:4.0} +export RABBITMQ_IMAGE=${RABBITMQ_IMAGE:-rabbitmq:4.0} wait_for_message() { while ! docker logs "$1" | grep -q "$2"; do - sleep 5 - echo "Waiting 5 seconds for $1 to start..." + sleep 2 + echo "Waiting 2 seconds for $1 to start..." done } -make -C "${PWD}"/tls-gen/basic - -mv tls-gen/basic/result/server_$(hostname -s)_certificate.pem tls-gen/basic/result/server_certificate.pem -mv tls-gen/basic/result/server_$(hostname -s)_key.pem tls-gen/basic/result/server_key.pem -mv tls-gen/basic/server_$(hostname -s) tls-gen/basic/server -mv tls-gen/basic/client_$(hostname -s) tls-gen/basic/client - rm -rf rabbitmq-configuration mkdir -p rabbitmq-configuration/tls -cp -R "${PWD}"/tls-gen/basic/* rabbitmq-configuration/tls -chmod -R o+r rabbitmq-configuration/tls/* -chmod -R g+r rabbitmq-configuration/tls/* -./mvnw -q clean resources:testResources -Dtest-tls-certs.dir=/etc/rabbitmq/tls -cp target/test-classes/rabbit@localhost.config rabbitmq-configuration/rabbit@localhost.config -cp target/test-classes/hare@localhost.config rabbitmq-configuration/hare@localhost.config - -echo "Running RabbitMQ ${RABBITMQ_IMAGE}" - -docker rm -f rabbitmq 2>/dev/null || echo "rabbitmq was not running" -docker run -d --name rabbitmq \ - --network host \ - -v "${PWD}"/rabbitmq-configuration:/etc/rabbitmq \ - --env RABBITMQ_CONFIG_FILE=/etc/rabbitmq/rabbit@localhost.config \ - --env RABBITMQ_NODENAME=rabbit@$(hostname) \ - --env RABBITMQ_NODE_PORT=5672 \ - --env RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS="-setcookie do-not-do-this-in-production" \ - "${RABBITMQ_IMAGE}" - -# for CLI commands to share the same cookie -docker exec rabbitmq bash -c "echo 'do-not-do-this-in-production' > /var/lib/rabbitmq/.erlang.cookie" -docker exec rabbitmq chmod 0600 /var/lib/rabbitmq/.erlang.cookie - -wait_for_message rabbitmq "completed with" - -docker run -d --name hare \ - --network host \ - -v "${PWD}"/rabbitmq-configuration:/etc/rabbitmq \ - --env RABBITMQ_CONFIG_FILE=/etc/rabbitmq/hare@localhost.config \ - --env RABBITMQ_NODENAME=hare@$(hostname) \ - --env RABBITMQ_NODE_PORT=5673 \ - --env RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS="-setcookie do-not-do-this-in-production" \ - "${RABBITMQ_IMAGE}" - -# for CLI commands to share the same cookie -docker exec hare bash -c "echo 'do-not-do-this-in-production' > /var/lib/rabbitmq/.erlang.cookie" -docker exec hare chmod 0600 /var/lib/rabbitmq/.erlang.cookie - -wait_for_message hare "completed with" +make -C "${PWD}"/tls-gen/basic -docker exec hare rabbitmqctl --node hare@$(hostname) status +rm -rf rabbitmq-configuration +mkdir -p rabbitmq-configuration/tls +cp -R "${PWD}"/tls-gen/basic/result/* rabbitmq-configuration/tls +mv rabbitmq-configuration/tls/server_$(hostname)_certificate.pem rabbitmq-configuration/tls/server_certificate.pem +mv rabbitmq-configuration/tls/server_$(hostname)_key.pem rabbitmq-configuration/tls/server_key.pem +chmod o+r rabbitmq-configuration/tls/* +chmod g+r rabbitmq-configuration/tls/* -docker exec rabbitmq rabbitmq-diagnostics --node rabbit@$(hostname) is_running -docker exec hare rabbitmq-diagnostics --node hare@$(hostname) is_running +docker compose --file ci/cluster/docker-compose.yml down +docker compose --file ci/cluster/docker-compose.yml up --detach -docker exec hare rabbitmqctl --node hare@$(hostname) stop_app -docker exec hare rabbitmqctl --node hare@$(hostname) join_cluster rabbit@$(hostname) -docker exec hare rabbitmqctl --node hare@$(hostname) start_app +wait_for_message rabbitmq0 "completed with" -sleep 10 +docker exec rabbitmq0 rabbitmqctl await_online_nodes 3 -docker exec hare rabbitmqctl --node hare@$(hostname) await_startup +docker exec rabbitmq0 rabbitmqctl enable_feature_flag --opt-in khepri_db +docker exec rabbitmq1 rabbitmqctl enable_feature_flag --opt-in khepri_db +docker exec rabbitmq2 rabbitmqctl enable_feature_flag --opt-in khepri_db -docker exec hare rabbitmqctl --node hare@$(hostname) enable_feature_flag --opt-in khepri_db -docker exec rabbitmq rabbitmqctl --node rabbit@$(hostname) enable_feature_flag --opt-in khepri_db +docker exec rabbitmq0 rabbitmqctl cluster_status -docker exec rabbitmq rabbitmq-diagnostics --node rabbit@$(hostname) erlang_version -docker exec rabbitmq rabbitmqctl --node rabbit@$(hostname) version -docker exec rabbitmq rabbitmqctl --node rabbit@$(hostname) status -docker exec rabbitmq rabbitmqctl --node rabbit@$(hostname) cluster_status +docker compose --file ci/cluster/docker-compose.yml ps diff --git a/pom.xml b/pom.xml index 2b131fcf65..ada6a2309c 100644 --- a/pom.xml +++ b/pom.xml @@ -78,7 +78,6 @@ 3.3.1 2.1.1 2.4.21 - 1.7 3.6.0 3.14.0 3.5.2 @@ -117,16 +116,10 @@ ${deps.dir}/rabbit ${rabbitmq.dir}/scripts/rabbitmqctl - ${project.build.directory}/ca.keystore - ${project.build.directory}/empty.keystore - bunnies - rabbit@localhost 5672 - ${project.build.directory}/test-classes/${test-broker.A.nodename} - hare@localhost + rabbit@node1 5673 - ${project.build.directory}/test-classes/${test-broker.B.nodename} 6026DFCA @@ -185,35 +178,6 @@ - - - use-provided-test-keystores - - - ${test-tls-certs.dir}/testca/cacert.pem - - - - - - org.codehaus.mojo - keytool-maven-plugin - ${keytool.maven.plugin.version} - - false - - - - - - - - generate-test-resources - remove-old-test-keystores - - execute - - - - ${groovy-scripts.dir}/remove_old_test_keystores.groovy - - - @@ -840,47 +778,6 @@ - - - org.codehaus.mojo - keytool-maven-plugin - ${keytool.maven.plugin.version} - - true - - - - generate-test-ca-keystore - generate-test-resources - - importCertificate - - - ${test-tls-certs.dir}/testca/cacert.pem - ${test-keystore.ca} - ${test-keystore.password} - true - server1 - - - - generate-test-empty-keystore - generate-test-resources - - importCertificate - deleteAlias - - - ${test-tls-certs.dir}/testca/cacert.pem - ${test-keystore.empty} - ${test-keystore.password} - true - server1 - - - - - org.apache.maven.plugins maven-jar-plugin diff --git a/src/main/scripts/query_test_tls_certs_dir.groovy b/src/main/scripts/query_test_tls_certs_dir.groovy deleted file mode 100644 index 2c86bb8c10..0000000000 --- a/src/main/scripts/query_test_tls_certs_dir.groovy +++ /dev/null @@ -1,25 +0,0 @@ -String[] command = [ - properties['make.bin'], - '-C', properties['rabbitmq.dir'], - '--no-print-directory', - 'show-test-tls-certs-dir', - "DEPS_DIR=${properties['deps.dir']}", -] - -def pb = new ProcessBuilder(command) -pb.redirectErrorStream(true) - -def process = pb.start() - -// We are only interested in the last line of output. Previous lines, if -// any, are related to the generation of the test certificates. -def whole_output = "" -process.inputStream.eachLine { - whole_output += it - project.properties['test-tls-certs.dir'] = it.trim() -} -process.waitFor() -if (process.exitValue() != 0) { - println(whole_output.trim()) - fail("Failed to query test TLS certs directory with command: ${command.join(' ')}") -} diff --git a/src/main/scripts/remove_old_test_keystores.groovy b/src/main/scripts/remove_old_test_keystores.groovy deleted file mode 100644 index e08775e4e0..0000000000 --- a/src/main/scripts/remove_old_test_keystores.groovy +++ /dev/null @@ -1,8 +0,0 @@ -def dir = new File(project.build.directory) - -// This pattern starts with `.*`. This is normally useless and even -// inefficient but the matching doesn't work without it... -def pattern = ~/.*\.keystore$/ -dir.eachFileMatch(pattern) { file -> - file.delete() -} diff --git a/src/test/java/com/rabbitmq/client/AmqpClientTestExtension.java b/src/test/java/com/rabbitmq/client/AmqpClientTestExtension.java index 58abd3efeb..dcffa744b2 100644 --- a/src/test/java/com/rabbitmq/client/AmqpClientTestExtension.java +++ b/src/test/java/com/rabbitmq/client/AmqpClientTestExtension.java @@ -1,4 +1,5 @@ -// Copyright (c) 2023-2025 Broadcom. All Rights Reserved. The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries. +// Copyright (c) 2023-2025 Broadcom. All Rights Reserved. The term "Broadcom" refers to Broadcom +// Inc. and/or its subsidiaries. // // This software, the RabbitMQ Java client library, is triple-licensed under the // Mozilla Public License 2.0 ("MPL"), the GNU General Public License version 2 @@ -24,9 +25,7 @@ import com.rabbitmq.client.test.server.ServerTestSuite; import com.rabbitmq.client.test.ssl.SslTestSuite; import com.rabbitmq.tools.Host; -import java.io.File; import java.net.Socket; -import java.util.Properties; import org.junit.jupiter.api.extension.AfterEachCallback; import org.junit.jupiter.api.extension.BeforeAllCallback; import org.junit.jupiter.api.extension.BeforeEachCallback; @@ -36,31 +35,11 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class AmqpClientTestExtension implements ExecutionCondition, BeforeAllCallback, - BeforeEachCallback, - AfterEachCallback { +public class AmqpClientTestExtension + implements ExecutionCondition, BeforeAllCallback, BeforeEachCallback, AfterEachCallback { private static final Logger LOGGER = LoggerFactory.getLogger(AmqpClientTestExtension.class); - static { - Properties TESTS_PROPS = new Properties(System.getProperties()); - String make = System.getenv("MAKE"); - if (make != null) { - TESTS_PROPS.setProperty("make.bin", make); - } - try { - TESTS_PROPS.load(Host.class.getClassLoader().getResourceAsStream("config.properties")); - } catch (Exception e) { - System.out.println( - "\"build.properties\" or \"config.properties\" not found" + - " in classpath. Please copy \"build.properties\" and" + - " \"config.properties\" into src/test/resources. Ignore" + - " this message if running with ant."); - } finally { - System.setProperties(TESTS_PROPS); - } - } - private static boolean isFunctionalSuite(ExtensionContext context) { return isTestSuite(context, FunctionalTestSuite.class); } @@ -86,8 +65,7 @@ public static boolean requiredProperties() { String rabbitmqctl = Host.rabbitmqctlCommand(); if (rabbitmqctl == null) { System.err.println( - "rabbitmqctl required; please set \"rabbitmqctl.bin\" system" + - " property"); + "rabbitmqctl required; please set \"rabbitmqctl.bin\" system" + " property"); return false; } @@ -95,20 +73,7 @@ public static boolean requiredProperties() { } public static boolean isSSLAvailable() { - String sslClientCertsDir = System.getProperty("test-client-cert.path"); - String hostname = System.getProperty("broker.hostname"); - String port = System.getProperty("broker.sslport"); - if (sslClientCertsDir == null || hostname == null || port == null) { - return false; - } - - // If certificate is present and some server is listening on port 5671 - if (new File(sslClientCertsDir).exists() && - checkServerListening(hostname, Integer.parseInt(port))) { - return true; - } else { - return false; - } + return checkServerListening("localhost", 5671); } private static boolean checkServerListening(String host, int port) { @@ -132,40 +97,42 @@ private static boolean checkServerListening(String host, int port) { public ConditionEvaluationResult evaluateExecutionCondition(ExtensionContext context) { // HA test suite must be checked first because it contains other test suites if (isHaSuite(context)) { - return requiredProperties() ? enabled("Required properties available") + return requiredProperties() + ? enabled("Required properties available") : disabled("Required properties not available"); } else if (isServerSuite(context)) { - return requiredProperties() ? enabled("Required properties available") + return requiredProperties() + ? enabled("Required properties available") : disabled("Required properties not available"); } else if (isFunctionalSuite(context)) { - return requiredProperties() ? enabled("Required properties available") + return requiredProperties() + ? enabled("Required properties available") : disabled("Required properties not available"); } else if (isSslSuite(context)) { - return requiredProperties() && isSSLAvailable() ? enabled( - "Required properties and TLS available") + return requiredProperties() && isSSLAvailable() + ? enabled("Required properties and TLS available") : disabled("Required properties or TLS not available"); } return enabled("ok"); } @Override - public void beforeAll(ExtensionContext context) { - - } + public void beforeAll(ExtensionContext context) {} @Override public void beforeEach(ExtensionContext context) { LOGGER.info( "Starting test: {}.{} (nio? {})", - context.getTestClass().get().getSimpleName(), context.getTestMethod().get().getName(), - TestUtils.USE_NIO - ); + context.getTestClass().get().getSimpleName(), + context.getTestMethod().get().getName(), + TestUtils.USE_NIO); } @Override public void afterEach(ExtensionContext context) { - LOGGER.info("Test finished: {}.{}", - context.getTestClass().get().getSimpleName(), context.getTestMethod().get().getName()); + LOGGER.info( + "Test finished: {}.{}", + context.getTestClass().get().getSimpleName(), + context.getTestMethod().get().getName()); } - } diff --git a/src/test/java/com/rabbitmq/client/test/functional/ConnectionRecovery.java b/src/test/java/com/rabbitmq/client/test/functional/ConnectionRecovery.java index b54507d5df..4257c5a7b3 100644 --- a/src/test/java/com/rabbitmq/client/test/functional/ConnectionRecovery.java +++ b/src/test/java/com/rabbitmq/client/test/functional/ConnectionRecovery.java @@ -23,7 +23,6 @@ import com.rabbitmq.client.test.BrokerTestCase; import com.rabbitmq.client.test.TestUtils; import com.rabbitmq.tools.Host; -import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import java.io.IOException; @@ -368,7 +367,6 @@ private void testClientNamedQueueRecoveryWith(String q, boolean noWait) throws I } // bug 26552 - @Disabled @Test public void clientNamedTransientAutoDeleteQueueAndBindingRecovery() throws IOException, InterruptedException, TimeoutException { String q = UUID.randomUUID().toString(); String x = "tmp-fanout"; diff --git a/src/test/java/com/rabbitmq/client/test/functional/DurableOnTransient.java b/src/test/java/com/rabbitmq/client/test/functional/DurableOnTransient.java index f3dec6d0fe..08508a71f3 100644 --- a/src/test/java/com/rabbitmq/client/test/functional/DurableOnTransient.java +++ b/src/test/java/com/rabbitmq/client/test/functional/DurableOnTransient.java @@ -20,7 +20,6 @@ import java.io.IOException; -import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import com.rabbitmq.client.GetResponse; @@ -68,7 +67,6 @@ protected void releaseResources() throws IOException { assertNotNull(basicGet()); } - @Disabled("Does not apply with Khepri (update datastore while second node is down)") @Test public void semiDurableBindingRemoval() throws IOException { if (clusteredConnection != null) { deleteExchange("x"); @@ -78,18 +76,25 @@ protected void releaseResources() throws IOException { channel.queueBind("q", "x", "k"); stopSecondary(); + boolean restarted = false; + try { + deleteExchange("x"); - deleteExchange("x"); - - startSecondary(); + startSecondary(); + restarted = true; - declareTransientTopicExchange("x"); + declareTransientTopicExchange("x"); - basicPublishVolatile("x", "k"); - assertDelivered("q", 0); + basicPublishVolatile("x", "k"); + assertDelivered("q", 0); - deleteQueue("q"); - deleteExchange("x"); + deleteQueue("q"); + deleteExchange("x"); + } finally { + if (!restarted) { + startSecondary(); + } + } } } } diff --git a/src/test/java/com/rabbitmq/client/test/server/LoopbackUsers.java b/src/test/java/com/rabbitmq/client/test/server/LoopbackUsers.java index b97162c4c7..e81de3703e 100644 --- a/src/test/java/com/rabbitmq/client/test/server/LoopbackUsers.java +++ b/src/test/java/com/rabbitmq/client/test/server/LoopbackUsers.java @@ -48,14 +48,26 @@ public class LoopbackUsers { @Test public void loopback() throws IOException, TimeoutException { if (!Host.isOnDocker()) { String addr = findRealIPAddress().getHostAddress(); - assertGuestFail(addr); - Host.rabbitmqctl("eval 'application:set_env(rabbit, loopback_users, []).'"); - assertGuestSucceed(addr); - Host.rabbitmqctl("eval 'application:set_env(rabbit, loopback_users, [<<\"guest\">>]).'"); - assertGuestFail(addr); + String initialValue = getLoopbackUsers(); + try { + setLoopbackUsers("[]"); + assertGuestSucceed(addr); + setLoopbackUsers("[<<\"guest\">>]"); + assertGuestFail(addr); + } finally { + setLoopbackUsers(initialValue); + } } } + private static String getLoopbackUsers() throws IOException { + return Host.rabbitmqctl("eval '{ok, V} = application:get_env(rabbit, loopback_users), V.'").output(); + } + + private static void setLoopbackUsers(String value) throws IOException { + Host.rabbitmqctl(String.format("eval 'application:set_env(rabbit, loopback_users, %s).'", value)); + } + private void assertGuestSucceed(String addr) throws IOException, TimeoutException { succeedConnect("guest", addr); succeedConnect("guest", "localhost"); diff --git a/src/test/java/com/rabbitmq/client/test/ssl/TlsTestUtils.java b/src/test/java/com/rabbitmq/client/test/ssl/TlsTestUtils.java index 9fe5004107..f85829c119 100644 --- a/src/test/java/com/rabbitmq/client/test/ssl/TlsTestUtils.java +++ b/src/test/java/com/rabbitmq/client/test/ssl/TlsTestUtils.java @@ -1,4 +1,5 @@ -// Copyright (c) 2007-2025 Broadcom. All Rights Reserved. The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries. +// Copyright (c) 2007-2025 Broadcom. All Rights Reserved. The term "Broadcom" refers to Broadcom +// Inc. and/or its subsidiaries. // // This software, the RabbitMQ Java client library, is triple-licensed under the // Mozilla Public License 2.0 ("MPL"), the GNU General Public License version 2 @@ -15,82 +16,38 @@ package com.rabbitmq.client.test.ssl; -import static org.junit.jupiter.api.Assertions.assertNotNull; - +import com.rabbitmq.tools.Host; import java.io.FileInputStream; +import java.net.InetAddress; +import java.net.UnknownHostException; import java.security.KeyStore; import java.security.NoSuchAlgorithmException; +import java.security.cert.Certificate; +import java.security.cert.CertificateFactory; +import java.security.cert.X509Certificate; import java.util.Arrays; import java.util.Collection; import java.util.stream.Collectors; -import javax.net.ssl.KeyManagerFactory; import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManagerFactory; class TlsTestUtils { + static final String[] PROTOCOLS = new String[] {"TLSv1.3", "TLSv1.2"}; + private TlsTestUtils() {} static SSLContext badVerifiedSslContext() throws Exception { - return verifiedSslContext(() -> getSSLContext(), emptyKeystoreCa()); + return sslContext(trustManagerFactory(clientCertificate())); } static SSLContext verifiedSslContext() throws Exception { - return verifiedSslContext(() -> getSSLContext(), keystoreCa()); - } - - static SSLContext verifiedSslContext(CallableSupplier sslContextSupplier) throws Exception { - return verifiedSslContext(sslContextSupplier, keystoreCa()); - } - - static SSLContext verifiedSslContext(CallableSupplier sslContextSupplier, String keystorePath) throws Exception { - // for local testing, run ./mvnw test-compile -Dtest-tls-certs.dir=/tmp/tls-gen/basic - // (generates the Java keystores) - assertNotNull(keystorePath); - String keystorePasswd = keystorePassword(); - assertNotNull(keystorePasswd); - char [] keystorePassword = keystorePasswd.toCharArray(); - - KeyStore tks = KeyStore.getInstance("JKS"); - tks.load(new FileInputStream(keystorePath), keystorePassword); - - TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509"); - tmf.init(tks); - - String p12Path = clientCertPath(); - assertNotNull(p12Path); - String p12Passwd = clientCertPassword(); - assertNotNull(p12Passwd); - KeyStore ks = KeyStore.getInstance("PKCS12"); - char [] p12Password = p12Passwd.toCharArray(); - ks.load(new FileInputStream(p12Path), p12Password); - - KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509"); - kmf.init(ks, p12Password); - - SSLContext c = sslContextSupplier.get(); - c.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null); - return c; + return sslContext(trustManagerFactory(caCertificate())); } - static String keystoreCa() { - return System.getProperty("test-keystore.ca", "./target/ca.keystore"); - } - - static String emptyKeystoreCa() { - return System.getProperty("test-keystore.empty", "./target/empty.keystore"); - } - - static String keystorePassword() { - return System.getProperty("test-keystore.password", "bunnies"); - } - - static String clientCertPath() { - return System.getProperty("test-client-cert.path", "/tmp/tls-gen/basic/client/keycert.p12"); - } - - static String clientCertPassword() { - return System.getProperty("test-client-cert.password", ""); + static SSLContext verifiedSslContext(CallableSupplier sslContextSupplier) + throws Exception { + return sslContext(sslContextSupplier, trustManagerFactory(caCertificate())); } public static SSLContext getSSLContext() throws NoSuchAlgorithmException { @@ -112,15 +69,78 @@ public static SSLContext getSSLContext() throws NoSuchAlgorithmException { static Collection availableTlsProtocols() { try { String[] protocols = SSLContext.getDefault().getSupportedSSLParameters().getProtocols(); - return Arrays.stream(protocols).filter(p -> p.toLowerCase().startsWith("tls")).collect( - Collectors.toList()); + return Arrays.stream(protocols) + .filter(p -> p.toLowerCase().startsWith("tls")) + .collect(Collectors.toList()); } catch (NoSuchAlgorithmException e) { throw new RuntimeException(e); } } + static SSLContext sslContext(TrustManagerFactory trustManagerFactory) throws Exception { + return sslContext(() -> SSLContext.getInstance(PROTOCOLS[0]), trustManagerFactory); + } + + static SSLContext sslContext( + CallableSupplier sslContextSupplier, TrustManagerFactory trustManagerFactory) + throws Exception { + SSLContext sslContext = sslContextSupplier.get(); + sslContext.init( + null, trustManagerFactory == null ? null : trustManagerFactory.getTrustManagers(), null); + return sslContext; + } + + static TrustManagerFactory trustManagerFactory(Certificate certificate) throws Exception { + KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType()); + keyStore.load(null, null); + keyStore.setCertificateEntry("some-certificate", certificate); + TrustManagerFactory trustManagerFactory = + TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); + trustManagerFactory.init(keyStore); + return trustManagerFactory; + } + + static X509Certificate caCertificate() throws Exception { + return loadCertificate(caCertificateFile()); + } + + static String caCertificateFile() { + return tlsArtefactPath( + System.getProperty("ca.certificate", "./rabbitmq-configuration/tls/ca_certificate.pem")); + } + + static X509Certificate clientCertificate() throws Exception { + return loadCertificate(clientCertificateFile()); + } + + static String clientCertificateFile() { + return tlsArtefactPath( + System.getProperty( + "client.certificate", + "./rabbitmq-configuration/tls/client_" + hostname() + "_certificate.pem")); + } + + static X509Certificate loadCertificate(String file) throws Exception { + try (FileInputStream inputStream = new FileInputStream(file)) { + CertificateFactory fact = CertificateFactory.getInstance("X.509"); + return (X509Certificate) fact.generateCertificate(inputStream); + } + } + + private static String tlsArtefactPath(String in) { + return in.replace("$(hostname)", hostname()).replace("$(hostname -s)", hostname()); + } + + private static String hostname() { + try { + return InetAddress.getLocalHost().getHostName(); + } catch (UnknownHostException e) { + return Host.hostname(); + } + } + @FunctionalInterface - interface CallableSupplier { + interface CallableSupplier { T get() throws Exception; } diff --git a/src/test/java/com/rabbitmq/tools/Host.java b/src/test/java/com/rabbitmq/tools/Host.java index 11c9f0355a..9adf1fc7fc 100644 --- a/src/test/java/com/rabbitmq/tools/Host.java +++ b/src/test/java/com/rabbitmq/tools/Host.java @@ -42,6 +42,14 @@ public class Host { private static final String DOCKER_PREFIX = "DOCKER:"; private static final Pattern CONNECTION_NAME_PATTERN = Pattern.compile("\"connection_name\",\"(?[a-zA-Z0-9\\-]+)?\""); + public static String hostname() { + try { + return executeCommand("hostname").output(); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + public static String capture(InputStream is) throws IOException { @@ -72,7 +80,7 @@ public static ProcessState executeCommand(String command) throws IOException return new ProcessState(pr, inputState, errorState); } - static class ProcessState { + public static class ProcessState { private final Process process; private final InputStreamPumpState inputState; @@ -85,7 +93,7 @@ static class ProcessState { this.errorState = errorState; } - private String output() { + public String output() { return inputState.buffer.toString(); } @@ -189,17 +197,6 @@ public static void clearResourceAlarm(String source) throws IOException { rabbitmqctl("eval 'rabbit_alarm:clear_alarm({resource_limit, " + source + ", node()}).'"); } - public static ProcessState invokeMakeTarget(String command) throws IOException { - File rabbitmqctl = new File(rabbitmqctlCommand()); - return executeCommand(makeCommand() + - " -C \'" + rabbitmqDir() + "\'" + - " RABBITMQCTL=\'" + rabbitmqctl.getAbsolutePath() + "\'" + - " RABBITMQ_NODENAME=\'" + nodenameA() + "\'" + - " RABBITMQ_NODE_PORT=" + node_portA() + - " RABBITMQ_CONFIG_FILE=\'" + config_fileA() + "\'" + - " " + command); - } - public static void startRabbitOnNode() throws IOException { rabbitmqctl("start_app"); tryConnectFor(10_000); @@ -210,7 +207,7 @@ public static void stopRabbitOnNode() throws IOException { } public static void tryConnectFor(int timeoutInMs) throws IOException { - tryConnectFor(timeoutInMs, node_portA() == null ? 5672 : Integer.valueOf(node_portA())); + tryConnectFor(timeoutInMs, 5672); } public static void tryConnectFor(int timeoutInMs, int port) throws IOException { @@ -245,15 +242,6 @@ public static String nodenameA() return System.getProperty("test-broker.A.nodename"); } - public static String node_portA() - { - return System.getProperty("test-broker.A.node_port"); - } - - public static String config_fileA() - { - return System.getProperty("test-broker.A.config_file"); - } public static String nodenameB() { @@ -265,11 +253,6 @@ public static String node_portB() return System.getProperty("test-broker.B.node_port"); } - public static String config_fileB() - { - return System.getProperty("test-broker.B.config_file"); - } - public static String rabbitmqctlCommand() { String rabbitmqCtl = System.getProperty("rabbitmqctl.bin"); if (rabbitmqCtl == null) { @@ -291,11 +274,6 @@ public static boolean isOnDocker() { return rabbitmqCtl.startsWith(DOCKER_PREFIX); } - public static String rabbitmqDir() - { - return System.getProperty("rabbitmq.dir"); - } - public static void closeConnection(String pid) throws IOException { rabbitmqctl("close_connection '" + pid + "' 'Closed via rabbitmqctl'"); } diff --git a/src/test/resources/config.properties b/src/test/resources/config.properties deleted file mode 100644 index 6562e2f80e..0000000000 --- a/src/test/resources/config.properties +++ /dev/null @@ -1,3 +0,0 @@ -broker.hostname=localhost -broker.port=5672 -broker.sslport=5671 diff --git a/src/test/resources/hare@localhost.config b/src/test/resources/hare@localhost.config deleted file mode 100644 index 41667a9c70..0000000000 --- a/src/test/resources/hare@localhost.config +++ /dev/null @@ -1,15 +0,0 @@ -% vim:ft=erlang: - -[ - {rabbit, [ - {ssl_listeners, [5670]}, - {ssl_options, [ - {cacertfile, "${test-tls-certs.dir}/testca/cacert.pem"}, - {certfile, "${test-tls-certs.dir}/server/cert.pem"}, - {keyfile, "${test-tls-certs.dir}/server/key.pem"}, - {verify, verify_peer}, - {fail_if_no_peer_cert, false}, - {honor_cipher_order, true}]}, - {auth_mechanisms, ['PLAIN', 'ANONYMOUS', 'AMQPLAIN', 'EXTERNAL', 'RABBIT-CR-DEMO']} - ]} -]. diff --git a/src/test/resources/log4j2-test.properties b/src/test/resources/log4j2-test.properties deleted file mode 100644 index b7e0a68699..0000000000 --- a/src/test/resources/log4j2-test.properties +++ /dev/null @@ -1,12 +0,0 @@ -status = error -dest = err -name = PropertiesConfig - -appender.console.type = Console -appender.console.name = STDOUT -appender.console.layout.type = PatternLayout -appender.console.layout.pattern = %m%n - -logger.com.rabbitmq.level = info -rootLogger.level = error -rootLogger.appenderRef.stdout.ref = STDOUT \ No newline at end of file diff --git a/src/test/resources/rabbit@localhost.config b/src/test/resources/rabbit@localhost.config deleted file mode 100644 index 9e3b77c94d..0000000000 --- a/src/test/resources/rabbit@localhost.config +++ /dev/null @@ -1,15 +0,0 @@ -% vim:ft=erlang: - -[ - {rabbit, [ - {ssl_listeners, [5671]}, - {ssl_options, [ - {cacertfile, "${test-tls-certs.dir}/testca/cacert.pem"}, - {certfile, "${test-tls-certs.dir}/server/cert.pem"}, - {keyfile, "${test-tls-certs.dir}/server/key.pem"}, - {verify, verify_peer}, - {fail_if_no_peer_cert, false}, - {honor_cipher_order, true}]}, - {auth_mechanisms, ['PLAIN', 'ANONYMOUS', 'AMQPLAIN', 'EXTERNAL', 'RABBIT-CR-DEMO']} - ]} -].