Refactor how selenium suites are run

This commit is contained in:
Marcial Rosales 2022-10-03 13:10:21 +02:00
parent f07151b9b3
commit bb9d7a134e
33 changed files with 516 additions and 235 deletions

View File

@ -6,7 +6,7 @@ on:
- v3.11.x
- bump-otp-for-oci
- bump-rbe-*
- bump-rules_erlang
- bump-rules_erlang
paths:
- 'deps/**'
- 'scripts/**'
@ -84,98 +84,14 @@ jobs:
run: |
docker network create ${DOCKER_NETWORK}
- name: Start RabbitMQ
run: |
RABBITMQ_CONFIG_DIR="${PWD}/${SELENIUM_DIR}/test/oauth/with-uaa"
docker run \
--detach \
--name rabbitmq \
--net ${DOCKER_NETWORK} \
-p 15672:15672 -p 5672:5672 \
-v ${RABBITMQ_CONFIG_DIR}/logging.conf:/etc/rabbitmq/conf.d/logging.conf:ro \
-v ${RABBITMQ_CONFIG_DIR}/rabbitmq-headless.config:/etc/rabbitmq/rabbitmq.config:ro \
-v ${RABBITMQ_CONFIG_DIR}/enabled_plugins:/etc/rabbitmq/enabled_plugins \
bazel/packaging/docker-image:rabbitmq
- name: Start Selenium
run: |
docker run \
--detach \
--name selenium \
--net ${DOCKER_NETWORK} \
-p 4444:4444 \
--shm-size=2g \
selenium/standalone-${{ matrix.browser }}:103.0
- name: Start UAA
run: |
UAA_CONFIG="${PWD}/${SELENIUM_DIR}/test/oauth/with-uaa/uaa-headless"
docker run \
--detach \
--name uaa \
--net ${DOCKER_NETWORK} \
--publish 8080:8080 \
--mount "type=bind,source=${UAA_CONFIG},target=/uaa" \
--env UAA_CONFIG_PATH="/uaa" \
--env JAVA_OPTS="-Djava.security.egd=file:/dev/./urandom" \
cloudfoundry/uaa:75.21.0
- name: Build Test Runner Image
run: |
cd ${SELENIUM_DIR}
docker build -t mocha-test --target test .
- name: Wait for UAA to be Up
- name: Run Suites
run: |
cd ${PWD}/${SELENIUM_DIR}/test/oauth/with-uaa
./waitTillUAAReady
- name: Run Suite Test oauth/with-uaa
run: |
TEST_DIR="${PWD}/${SELENIUM_DIR}/test"
docker run \
--rm \
--name mocha \
--net ${DOCKER_NETWORK} \
--env RABBITMQ_URL=http://rabbitmq:15672 \
--env RUN_LOCAL=false \
-v ${TEST_DIR}:/code/test \
-v ${PWD}/screens:/screens \
mocha-test /code/test/oauth/with-uaa
- name: Save UAA Logs
if: always()
run: |
mkdir logs
docker container ls | grep uaa && docker logs uaa > logs/uaa.log || echo "uaa not running"
- name: Stop UAA
run: |
docker kill uaa && docker rm uaa
- name: Run Suite Test oauth/with-uaa-down
run: |
TEST_DIR="${PWD}/${SELENIUM_DIR}/test"
docker run \
--rm \
--name mocha \
--net ${DOCKER_NETWORK} \
--env RABBITMQ_URL=http://rabbitmq:15672 \
--env RUN_LOCAL=false \
-v ${TEST_DIR}:/code/test \
-v ${PWD}/screens:/screens \
mocha-test /code/test/oauth/with-uaa-down
#! - name: Setup tmate session
#! uses: mxschmitt/action-tmate@v3
#! if: always()
- name: Save Logs
if: always()
run: |
docker container ls | grep rabbitmq && docker logs rabbitmq > logs/rabbitmq.log || echo "rabbitmq not running"
docker container ls | grep selenium && docker logs selenium > logs/selenium.log || echo "selenium not running"
${SELENIUM_DIR}/run-suites.sh
- name: Upload Test Artifacts
if: always()

View File

@ -30,3 +30,5 @@ test/config_schema_SUITE_data/schema/
selenium/node_modules
selenium/package-lock.json
selenium/screens/*/*
selenium/logs

View File

@ -1,43 +0,0 @@
.ONESHELL:# single shell invocation for all lines in the recipe
SHELL = bash# we depend on bash expansion for e.g. queue patterns
.DEFAULT_GOAL = help
ifndef SUITE
override SUITE = "test/oauth/with-uaa"
endif
SELENIUM_VERSION := 104.0
### TARGETS ###
help:
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
start-chrome: ## Install Selenium Chrome
@(echo "Installing Selenium Chrome")
@(docker network inspect rabbitmq_net >/dev/null 2>&1 || docker network create rabbitmq_net)
@(docker rm -f selenium 2>/dev/null || echo "selenium was not running")
@(docker run -d --name selenium --net rabbitmq_net -p 4444:4444 --shm-size=2g selenium/standalone-chrome:$(SELENIUM_VERSION))
#@(docker run -d --name selenium --net rabbitmq_selenimum_net -p 4444:4444 --shm-size=2g selenium/standalone-chrome)
@(echo "Selenium Standalone is running on http://localhost:4444/ && http://selenium:4444/")
stop-chrome: ## Stop Selenium Chrome
@(docker rm -f selenium 2>/dev/null || echo "selenium was not running")
build-test-runner-image: ## Prepare docker image to run tests
@(docker build -t mocha-test --target test .)
setup: ## Deploy infrastructure for headless mode to run $(SUITE)
$(SUITE)/setup.sh
teardown: ## Undeploy infrastructure for headless mode to run
$(SUITE)/teardown.sh
run-test: ## Run tests using selenium hub (headless mode)
@(docker network inspect rabbitmq_net >/dev/null 2>&1 || docker network create rabbitmq_net)
@(echo "Running tests in headless mode for suite $(SUITE) ...")
@(docker run --rm --name mocha --net rabbitmq_net \
--env RABBITMQ_URL=http://rabbitmq:15672 \
--env RUN_LOCAL=false \
-v ${PWD}/screens:/screens \
-v ${PWD}/test:/code/test mocha-test $(SUITE)
)

View File

@ -10,28 +10,20 @@ To run the tests we need:
# How tests are organized
All tests are hanging from the `test` folder. We can use subfolders to better organize them.
For instance, all OAuth2 related tests are under `test/oauth`. And under this folder
we have another subfolder, `tests/oauth/with-uaa` to group all the tests cases which run against UAA as OAuth2 server.
All test cases are under the `test` folder and grouped into subfolders based on the area of functionality
they are testing. For instance, under `oauth` folder, we have test cases about OAuth 2.0.
Furthermore, within an area of functionality like OAuth 2.0 we want to test under different configuration.
For instance under `test/oauth/with-uaa` we group all test cases which run against UAA. Whereas
under `test/oauth/with-uaa-down` we group all test cases which run against a UAA which is down.
At the moment, there are no smart around discovering all the tests under subfolders. That will come later.
Under the `test` folder we have test cases and some configuration files. And under `suites` folder we have
the test suites where we literally script the following:
- the suite's **setup**, e.g. start RabbitMQ and UAA with a specific configuration
- the test cases, e.g. run all tests under `test/oauth/with-uaa`
- the suite's **teardown**, e.g. stop RabbitMQ and UAA
- and save all logs and screen captures if any
The idea is that every folder is a suite of test cases which have in common a runtime environment. For instance,
the test suite `test/oauth/with-uaa` has a `setup.sh` script which deploys RabbitMQ and a UAA server.
Whereas the test suite `test/oath/with-uaa-down` has a `setup.sh` script which only deploys RabbitMQ.
# How run the tests
But regardless how we run the tests, we are going to compile RabbitMQ server and build its docker image first.
```
make package-generic-unix
make docker-image
```
From the output of the `make docker-image` we copy the image's tag and run the following
command, e.g.
```
export RABBITMQ_IMAGE_TAG=3.8.10-1696.g171734f.dirty
```
# How to run the tests
There are two ways to run the tests.
@ -43,51 +35,22 @@ from source to speed things up. Otherwise, we would have to build a docker image
**Headless mode** - If we are not making any code changes to RabbitMQ and instead
we are only writing tests or simply we want to run them, then we want to run the tests in headless mode.
**IMPORTANT**: RabbitMQ and UAA configuration is different for each mode. The reason is the hostname used
for both, RabbitMQ and UAA. In headless mode, everything runs in containers and we refer to each container but its
name, e.g. `rabbitmq` or `uaa`. Whereas in interactive mode, we run most of the components locally (i.e `localhost`), such as RabbitMQ or UAA.
## Run tests in headless-mode
In this mode, we are running the following containers within the same
docker network in our local machine:
- RabbitMQ
- UAA
- the browser
- and the test runner
In this mode, we are run suite of tests, not individual tests.
First, we launch **Selenium Hub** which is where the headless chrome browser runs:
If we want to run just one particular suite, run it directly:
```
cd selenium
make start-chrome
suites/oauth-with-uaa.sh
```
Then we run the setup.sh script which deploys the runtime requirement for the suite test we are going to run:
Or we can run all suites:
```
make setup SUITE=test/oauth/with-uaa
```
And now we run the tests
```
make run-test SUITE=test/oauth/with-uaa
```
> By default, if we do not specify any SUITE, it uses `test/oauth/with-uaa`
And to tear down the runtime for the test suite we run:
```
make teardown SUITE=test/oauth/with-uaa
```
At the moment there are only 2 suites of tests. The first one is `test/oauth/with-uaa` that we just discussed above.
The second one is `test/oauth/with-uaa-down` which runs a test case with UAA down.
To run this suite, we would proceed as follows:
```
make setup SUITE=test/oauth/with-uaa-down
make run-test SUITE=test/oauth/with-uaa-down
make teardown SUITE=test/oauth/with-uaa-down
```
**Note**: If at any stage, the tests take a long time to run, try restarting the selenium-hub by running. Sometimes it becomes unresponsive.
```
make start-chrome
run-suites.sh
```
@ -107,13 +70,9 @@ cd selenium
npm install
```
Access the test suite folder:
```
cd test/oauth/with-uaa
```
Start UAA:
```
cd test/oauth
make start-uaa
```
@ -122,11 +81,16 @@ Start RabbitMQ from source (it runs `make run-broker`):
make start-rabbitmq
```
Access the test case folder:
```
cd with-uaa
```
To run all tests under the suite:
```
make run-test
make test
```
Or to run a single tests under the suite:
```
make run-test TEST=landing.js
make test TEST=landing.js
```

View File

@ -0,0 +1,10 @@
#!/usr/bin/env bash
SCRIPT="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
for f in $SCRIPT/suites/*.sh
do
SUITE=$(basename -- "$f")
echo "Running suite $SUITE ..."
$f
done

View File

@ -0,0 +1,24 @@
#!/usr/bin/env bash
SCRIPT="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
# Name of the suite used to generate log and screen folders
SUITE=$( basename "${BASH_SOURCE[0]}" .sh)
# Path to the test cases this suite should run. It is relative to the selenium/test folder
TEST_CASES_PATH=/oauth/with-uaa-down
# Path to the folder where all configuration file reside. It is relative to the selenim/test folder
TEST_CONFIG_PATH=/oauth
source $SCRIPT/suite_template
_setup () {
start_rabbitmq
}
_save_logs() {
save_container_logs rabbitmq
}
_teardown() {
kill_container_if_exist rabbitmq
}
run

View File

@ -0,0 +1,29 @@
#!/usr/bin/env bash
SCRIPT="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
# Name of the suite used to generate log and screen folders
SUITE=$( basename "${BASH_SOURCE[0]}" .sh)
# Path to the test cases this suite should run. It is relative to the selenium/test folder
TEST_CASES_PATH=/oauth/with-uaa
# Path to the folder where all configuration file reside. It is relative to the selenim/test folder
TEST_CONFIG_PATH=/oauth
# Path to the uaa configuration. It is relative to the TEST_CONFIG_PATH
UAA_CONFIG_PATH=/uaa
source $SCRIPT/suite_template
_setup () {
start_rabbitmq
start_uaa
}
_save_logs() {
save_container_logs rabbitmq
save_container_logs uaa
}
_teardown() {
kill_container_if_exist rabbitmq
kill_container_if_exist uaa
}
run

View File

@ -0,0 +1,173 @@
#!/usr/bin/env bash
SCRIPT="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
SUITE=${SUITE:?"missing SUITE"}
init_suite() {
TEST_DIR=${SCRIPT}/../test
TEST_CASES_DIR=${TEST_DIR}${TEST_CASES_PATH:?"missing TEST_CASES_PATH"}
TEST_CONFIG_DIR=${TEST_DIR}${TEST_CONFIG_PATH:?"missing TEST_CONFIG_PATH"}
DOCKER_NETWORK=${DOCKER_NETWORK:-rabbitmq_net}
echo "TEST_CASES_DIR: ${TEST_CASES_DIR} "
echo "TEST_CONFIG_DIR: ${TEST_CONFIG_DIR} "
echo "DOCKER_NETWORK: ${DOCKER_NETWORK} "
}
BIN=${SCRIPT}/../bin
LOGS=$PWD/logs/${SUITE}
SCREENS=$PWD/screens/${SUITE}
build_mocha_image() {
if [[ "$(docker images -q mocha-test 2> /dev/null)" == "" ]]; then
docker build -t mocha-test --target test $SCRIPT/..
fi
}
start_selenium() {
echo "Selenimum starting ..."
kill_container_if_exist selenium
docker run \
--detach \
--name selenium \
--net ${DOCKER_NETWORK} \
-p 4444:4444 \
--shm-size=2g \
selenium/standalone-chrome:103.0
wait_for_message selenium "Started Selenium Standalone"
echo "Selenimum ready"
}
kill_container_if_exist() {
docker stop $1 &> /dev/null || true && docker rm $1 &> /dev/null || true
}
wait_for_message() {
while ! docker logs $1 | grep -q "$2";
do
sleep 5
echo "Waiting 5sec for $1 to start ..."
done
}
init_rabbitmq() {
RABBITMQ_CONFIG_DIR=${TEST_CONFIG_DIR}
RABBITMQ_DOCKER_IMAGE=${RABBITMQ_DOCKER_IMAGE:-rabbitmq}
RABBITMQ_URL=${RABBITMQ_URL:-http://rabbitmq:15672}
RABBITMQ_CONFIG_FILENAME=${RABBITMQ_CONFIG_FILENAME:-rabbitmq.config}
RABBITMQ_CONFIG_FILE=${RABBITMQ_CONFIG_DIR}/${RABBITMQ_CONFIG_FILENAME}
echo "RABBITMQ_CONFIG_DIR: ${RABBITMQ_CONFIG_DIR}"
echo "RABBITMQ_CONFIG_FILE: ${RABBITMQ_CONFIG_FILE}"
echo "RABBITMQ_DOCKER_IMAGE: ${RABBITMQ_DOCKER_IMAGE}"
echo "RABBITMQ_URL: ${RABBITMQ_URL}"
}
start_rabbitmq () {
init_rabbitmq
kill_container_if_exist rabbitmq
echo "RabbitMQ starting ..."
docker run \
--detach \
--name rabbitmq \
--net ${DOCKER_NETWORK} \
-p 15672:15672 -p 5672:5672 \
-v ${RABBITMQ_CONFIG_DIR}/logging.conf:/etc/rabbitmq/conf.d/logging.conf:ro \
-v ${RABBITMQ_CONFIG_FILE}:/etc/rabbitmq/rabbitmq.config:ro \
-v ${RABBITMQ_CONFIG_DIR}/enabled_plugins:/etc/rabbitmq/enabled_plugins \
${RABBITMQ_DOCKER_IMAGE}
wait_for_message rabbitmq "Server startup complete"
echo "RabbitMQ ready"
}
init_uaa() {
UAA_CONFIG_PATH=${UAA_CONFIG_PATH:?"missing UAA_CONFIG_PATH"}
UAA_CONFIG_DIR=${TEST_CONFIG_DIR}${UAA_CONFIG_PATH}
echo "UAA_CONFIG: ${UAA_CONFIG_DIR}"
}
start_uaa() {
init_uaa
kill_container_if_exist uaa
docker run \
--detach \
--name uaa \
--net ${DOCKER_NETWORK} \
--publish 8080:8080 \
--mount "type=bind,source=${UAA_CONFIG_DIR},target=/uaa" \
--env UAA_CONFIG_PATH="/uaa" \
--env JAVA_OPTS="-Djava.security.egd=file:/dev/./urandom" \
cloudfoundry/uaa:75.21.0
wait_for_uaa
}
wait_for_uaa() {
max_retry=10
counter=0
until (docker run --net rabbitmq_net --rm curlimages/curl:7.85.0 -L -v http://uaa:8080/.well-known/openid-configuration >/dev/null 2>&1)
echo "Waiting for UAA to start"
do
sleep 5
[[ counter -eq $max_retry ]] && echo "Failed!" && exit 1
echo "Trying again. Try #$counter"
((counter++))
done
sleep 20 # There is something else not fully initialized in UAA that even after getting a 200 OK it is not ready
echo "UAA is ready"
}
test () {
kill_container_if_exist mocha
docker run \
--rm \
--name mocha \
--net ${DOCKER_NETWORK} \
--env RABBITMQ_URL=${RABBITMQ_URL} \
--env RUN_LOCAL=false \
-v ${TEST_DIR}:/code/test \
-v ${SCREENS}:/screens \
mocha-test /code/test${TEST_CASES_PATH}
}
save_logs() {
mkdir -p $LOGS
save_container_logs selenium
save_container_logs mocha
}
save_container_logs() {
docker container ls | grep $1 && docker logs $1 > $LOGS/$1.log || echo "$1 not running"
}
run() {
init_suite
build_mocha_image
start_selenium
echo "Set up ..."
[[ $(type -t _setup) == function ]] && _setup
echo "Running test cases ..."
test
TEST_RESULT=$?
echo "Saving Logs to $LOGS ..."
save_logs
[[ $(type -t _save_logs) == function ]] && _save_logs
echo "Tear down ..."
[[ $(type -t _teardown) == function ]] && _teardown
kill_container_if_exist selenium
exit $TEST_RESULT
}

View File

@ -2,7 +2,7 @@
SHELL = bash# we depend on bash expansion for e.g. queue patterns
.DEFAULT_GOAL = help
RABBITMQ_SERVER_ROOT = ../../../../../../
RABBITMQ_SERVER_ROOT = ../../../../../
### TARGETS ###
@ -14,10 +14,10 @@ start-rabbitmq: ## Start RabbitMQ
@(docker kill rabbitmq >/dev/null 2>&1 && docker rm rabbitmq)
@(gmake --directory=${RABBITMQ_SERVER_ROOT} run-broker \
RABBITMQ_ENABLED_PLUGINS="rabbitmq_auth_backend_oauth2,rabbitmq_management" \
RABBITMQ_CONFIG_FILE=deps/rabbitmq_management/selenium/test/oauth/with-uaa/rabbitmq.config)
RABBITMQ_CONFIG_FILE=deps/rabbitmq_management/selenium/test/oauth/rabbitmq-localhost.config)
start-uaa: ## Start UAA
@(UAA_CONFIG=${PWD}/uaa ./start-uaa.sh)
@(UAA_CONFIG=${PWD}/uaa-localhost ./start-uaa.sh)
stop-uaa: ## Stop UAA
@(./stop-uaa.sh)

View File

@ -6,6 +6,7 @@
{login_session_timeout, 1}, %% in minutes
{enable_uaa, true},
{oauth_enabled, true},
{path_prefix, "/my-prefix"},
{oauth_client_id, "rabbit_client_code"},
{oauth_client_secret, "rabbit_client_code"},
{oauth_provider_url, "http://localhost:8080"}

View File

@ -0,0 +1,33 @@
[
{rabbit, [
{auth_backends, [rabbit_auth_backend_oauth2]}
]},
{rabbitmq_management, [
{login_session_timeout, 1}, %% in minutes
{enable_uaa, true},
{oauth_enabled, true},
{path_prefix, "/my-prefix"},
{oauth_client_id, "rabbit_client_code"},
{oauth_client_secret, "rabbit_client_code"},
{oauth_provider_url, "http://uaa:8080"}
]},
{rabbitmq_auth_backend_oauth2, [
{resource_server_id, <<"rabbitmq">>},
{extra_scopes_source, <<"extra_scope">>},
{key_config, [
{default_key, <<"legacy-token-key">>},
{signing_keys,
#{<<"legacy-token-key">> => {pem, <<"-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2dP+vRn+Kj+S/oGd49kq
6+CKNAduCC1raLfTH7B3qjmZYm45yDl+XmgK9CNmHXkho9qvmhdksdzDVsdeDlhK
IdcIWadhqDzdtn1hj/22iUwrhH0bd475hlKcsiZ+oy/sdgGgAzvmmTQmdMqEXqV2
B9q9KFBmo4Ahh/6+d4wM1rH9kxl0RvMAKLe+daoIHIjok8hCO4cKQQEw/ErBe4SF
2cr3wQwCfF1qVu4eAVNVfxfy/uEvG3Q7x005P3TcK+QcYgJxav3lictSi5dyWLgG
QAvkknWitpRK8KVLypEj5WKej6CF8nq30utn15FQg0JkHoqzwiCqqeen8GIPteI7
VwIDAQAB
-----END PUBLIC KEY-----">>}
}
}]
}
]}
].

View File

@ -0,0 +1,171 @@
logging:
config: /uaa/log4j2.properties
issuer:
uri: http://uaa:8080/
encryption:
active_key_label: CHANGE-THIS-KEY
encryption_keys:
- label: CHANGE-THIS-KEY
passphrase: CHANGEME
logout:
redirect:
parameter:
disable: false
whitelist:
http://rabbitmq:15672/*
login:
serviceProviderKey: |
-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQDHtC5gUXxBKpEqZTLkNvFwNGnNIkggNOwOQVNbpO0WVHIivig5
L39WqS9u0hnA+O7MCA/KlrAR4bXaeVVhwfUPYBKIpaaTWFQR5cTR1UFZJL/OF9vA
fpOwznoD66DDCnQVpbCjtDYWX+x6imxn8HCYxhMol6ZnTbSsFW6VZjFMjQIDAQAB
AoGAVOj2Yvuigi6wJD99AO2fgF64sYCm/BKkX3dFEw0vxTPIh58kiRP554Xt5ges
7ZCqL9QpqrChUikO4kJ+nB8Uq2AvaZHbpCEUmbip06IlgdA440o0r0CPo1mgNxGu
lhiWRN43Lruzfh9qKPhleg2dvyFGQxy5Gk6KW/t8IS4x4r0CQQD/dceBA+Ndj3Xp
ubHfxqNz4GTOxndc/AXAowPGpge2zpgIc7f50t8OHhG6XhsfJ0wyQEEvodDhZPYX
kKBnXNHzAkEAyCA76vAwuxqAd3MObhiebniAU3SnPf2u4fdL1EOm92dyFs1JxyyL
gu/DsjPjx6tRtn4YAalxCzmAMXFSb1qHfwJBAM3qx3z0gGKbUEWtPHcP7BNsrnWK
vw6By7VC8bk/ffpaP2yYspS66Le9fzbFwoDzMVVUO/dELVZyBnhqSRHoXQcCQQCe
A2WL8S5o7Vn19rC0GVgu3ZJlUrwiZEVLQdlrticFPXaFrn3Md82ICww3jmURaKHS
N+l4lnMda79eSp3OMmq9AkA0p79BvYsLshUJJnvbk76pCjR28PK4dV1gSDUEqQMB
qy45ptdwJLqLJCeNoR0JUcDNIRhOCuOPND7pcMtX6hI/
-----END RSA PRIVATE KEY-----
serviceProviderKeyPassword: password
serviceProviderCertificate: |
-----BEGIN CERTIFICATE-----
MIIDSTCCArKgAwIBAgIBADANBgkqhkiG9w0BAQQFADB8MQswCQYDVQQGEwJhdzEO
MAwGA1UECBMFYXJ1YmExDjAMBgNVBAoTBWFydWJhMQ4wDAYDVQQHEwVhcnViYTEO
MAwGA1UECxMFYXJ1YmExDjAMBgNVBAMTBWFydWJhMR0wGwYJKoZIhvcNAQkBFg5h
cnViYUBhcnViYS5hcjAeFw0xNTExMjAyMjI2MjdaFw0xNjExMTkyMjI2MjdaMHwx
CzAJBgNVBAYTAmF3MQ4wDAYDVQQIEwVhcnViYTEOMAwGA1UEChMFYXJ1YmExDjAM
BgNVBAcTBWFydWJhMQ4wDAYDVQQLEwVhcnViYTEOMAwGA1UEAxMFYXJ1YmExHTAb
BgkqhkiG9w0BCQEWDmFydWJhQGFydWJhLmFyMIGfMA0GCSqGSIb3DQEBAQUAA4GN
ADCBiQKBgQDHtC5gUXxBKpEqZTLkNvFwNGnNIkggNOwOQVNbpO0WVHIivig5L39W
qS9u0hnA+O7MCA/KlrAR4bXaeVVhwfUPYBKIpaaTWFQR5cTR1UFZJL/OF9vAfpOw
znoD66DDCnQVpbCjtDYWX+x6imxn8HCYxhMol6ZnTbSsFW6VZjFMjQIDAQABo4Ha
MIHXMB0GA1UdDgQWBBTx0lDzjH/iOBnOSQaSEWQLx1syGDCBpwYDVR0jBIGfMIGc
gBTx0lDzjH/iOBnOSQaSEWQLx1syGKGBgKR+MHwxCzAJBgNVBAYTAmF3MQ4wDAYD
VQQIEwVhcnViYTEOMAwGA1UEChMFYXJ1YmExDjAMBgNVBAcTBWFydWJhMQ4wDAYD
VQQLEwVhcnViYTEOMAwGA1UEAxMFYXJ1YmExHTAbBgkqhkiG9w0BCQEWDmFydWJh
QGFydWJhLmFyggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAYvBJ
0HOZbbHClXmGUjGs+GS+xC1FO/am2suCSYqNB9dyMXfOWiJ1+TLJk+o/YZt8vuxC
KdcZYgl4l/L6PxJ982SRhc83ZW2dkAZI4M0/Ud3oePe84k8jm3A7EvH5wi5hvCkK
RpuRBwn3Ei+jCRouxTbzKPsuCVB+1sNyxMTXzf0=
-----END CERTIFICATE-----
#The secret that an external login server will use to authenticate to the uaa using the id `login`
LOGIN_SECRET: loginsecret
jwt:
token:
policy:
# Will override global validity policies for the default zone only.
accessTokenValiditySeconds: 15
keys:
legacy-token-key:
signingKey: |
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEA2dP+vRn+Kj+S/oGd49kq6+CKNAduCC1raLfTH7B3qjmZYm45
yDl+XmgK9CNmHXkho9qvmhdksdzDVsdeDlhKIdcIWadhqDzdtn1hj/22iUwrhH0b
d475hlKcsiZ+oy/sdgGgAzvmmTQmdMqEXqV2B9q9KFBmo4Ahh/6+d4wM1rH9kxl0
RvMAKLe+daoIHIjok8hCO4cKQQEw/ErBe4SF2cr3wQwCfF1qVu4eAVNVfxfy/uEv
G3Q7x005P3TcK+QcYgJxav3lictSi5dyWLgGQAvkknWitpRK8KVLypEj5WKej6CF
8nq30utn15FQg0JkHoqzwiCqqeen8GIPteI7VwIDAQABAoIBAFsB5FszYepa11o3
4zSPxgv4qyUjuYf3GfoNW0rRGp3nJLtoHAIYa0CcLX9kzsQfmLtxoY46mdppxr8Z
2qUZpBdRVO7ILNfyXhthdQKI2NuyFDhtYK1p8bx6BXe095HMcvm2ohjXzPdTP4Hq
HrXAYXjUndUbClbjMJ82AnPF8pM70kBq7g733UqkdfrMuv6/d95Jiyw4cC7dGsI3
Ruz9DGhiAyCBtQ0tUB+6Kqn5DChSB+ccfMJjr6GnCVYmERxEQ5DJCTIX8am8C6KX
mAxUwHMTsEGBU6GzhcUgAwUFEK3I9RptdlRFp7F8E/P0LxmPkFdgaBNUhrdnB7Y4
01n1R1kCgYEA/huFJgwVWSBSK/XIouFuQrxZOI9JbBbdmpFT7SBGCdFg26Or9y7j
+N5HE7yuoZ9PkBh17zzosZdsJhGocRYvO0LSq8cXvKXKCwn2fTMM7uJ/oQe68sxG
cF/fC0M/8LvRESWShH920rrERu0s161RuasdOPre0aXu7ZQzkQ68O6MCgYEA23NO
DHKNblBOdFEWsvotLqV8DrIbQ4le7sSgQr56/bdn9GScZk2JU0f+pqzpiGUy9bIt
6uujvt5ar0IvpIQVdjf3dbp6Fy+Dwhd4yTR4dMdDECest7jL++/21x8Y0ywFhBIK
yEd+QxpOLXP6qaSKTGxL2rnTXRjl8/g629xQPL0CgYEAkNNOh+jLIgjxzGxA9dRV
62M91qaTyi8eDkJV+wgx4taaxZP7Jt5qwCSvjegz/5m01wOZ88hbNxx+XxQhVJK4
SKZFO/I07Sfwh2oeOi0maeBdrYGiY09ZtiJuFRU3FBV3irZHU4zyRBh+VY5HyITX
12JXPWp+JC7WhkG5QiuLzNECgYEA15OBzICLpx6Es4clAVT6JaSzJcyZM9MyyuOl
e2ubbrpJCK/9ZBIvIPzMj/e0wiSH1wzeRrSM+ud7tkcSfk6ytptsIN67KSOoD3b3
VNCStEU7ABe5eBG1cRzeI52MyYWpNYBzzyNMSacBvWz9hMD6ivCn44pAtGfNHclw
KKNYvxECgYBOamf25md9Jy6rtQsJVEJWw+8sB4lBlKEEadc5qekR7ZQ0hwj8CnTm
WOo856ynI28Sog62iw8F/do/z0B29RuGuxw+prkBkn3lg/VQXEitzqcYvota6osa
8XSfaPiTyQwWpzbFNZzzemlTsIDiF3UqwkHvWaMYPDf4Ng3cokPPxw==
-----END RSA PRIVATE KEY-----
scim:
users:
- rabbit_admin|rabbit_admin|scim.read,openid,rabbitmq.read:*/*,rabbitmq.write:*/*,rabbitmq.configure:*/*,rabbitmq.tag:administrator
- rabbitmq_management|rabbitmq_management|scim.read,openid,rabbitmq.read:*/*,rabbitmq.write:*/*,rabbitmq.configure:*/*,rabbitmq.tag:management
- rabbit_monitor|rabbit_monitor|scim.read,openid,rabbitmq.tag:monitoring
groups:
'rabbitmq.read:*/*': Read all
'rabbitmq.write:*/*': Write all
'rabbitmq.configure:*/*': Configure all
'rabbitmq.tag:management': Management
'rabbitmq.tag:monitoring': Monitoring
'rabbitmq.tag:administrator': Administrator
oauth:
# Always override clients on startup
client:
override: true
# List of OAuth clients
clients:
admin:
id: admin
secret: adminsecret
authorized-grant-types: client_credentials
scope: none
authorities: uaa.admin,clients.admin,clients.read,clients.write,clients.secret,scim.write,scim.read,uaa.resource
mgt_api_client:
id: mgt_api_client
secret: mgt_api_client
authorized-grant-types: client_credentials
authorities: rabbitmq.tag:monitoring
rabbit_client_code:
id: rabbit_client_code
secret: rabbit_client_code
authorized-grant-types: authorization_code
scope: rabbitmq.*,openid,profile
authorities: uaa.resource,rabbitmq
redirect-uri: http://rabbitmq:15672/my-prefix/
autoapprove: true
mgt_api_client_2:
id: mgt_api_client_2
secret: mgt_api_client_2
authorized-grant-types: client_credentials
authorities: api://rabbitmq:management
producer:
id: producer
secret: producer_secret
authorities: rabbitmq.write:%2F/x-* rabbitmq.write:%2F/q-* rabbitmq.read:%2F/x-* rabbitmq.configure:%2F/*
authorized-grant-types: client_credentials
consumer:
id: consumer
secret: consumer_secret
authorities: rabbitmq.read:*/* rabbitmq.configure:*/* rabbitmq.write:*/x-* rabbitmq.write:*/q-*
authorized-grant-types: client_credentials
jms_producer:
id: jms_producer
secret: jms_producer_secret
authorities: rabbitmq.write:%2F/x-* rabbitmq.write:%2F/q-* rabbitmq.read:%2F/x-* rabbitmq.configure:%2F/* rabbitmq.configure:*/jms.durable.queues rabbitmq.write:*/jms.durable.queues rabbitmq.read:*/jms.durable.queues
authorized-grant-types: client_credentials
jms_consumer:
id: jms_consumer
secret: jms_consumer_secret
authorities: rabbitmq.read:*/* rabbitmq.configure:*/* rabbitmq.write:*/x-* rabbitmq.write:*/q-* rabbitmq.write:*/jms.durable.queues
authorized-grant-types: client_credentials
producer_with_roles:
id: producer_with_roles
secret: producer_with_roles_secret
authorities: rabbitmq.*,api://rabbitmq:producer,api://rabbitmq:Administrator
authorized-grant-types: client_credentials
consumer_with_roles:
id: consumer_with_roles
secret: consumer_with_roles_secret
authorities: rabbitmq.* api://rabbitmq:Read.All api://rabbitmq:Configure.All api://rabbitmq:Write.All
authorized-grant-types: client_credentials

View File

@ -0,0 +1,30 @@
status = error
dest = err
name = UaaLog
property.log_pattern=[%d{yyyy-MM-dd'T'HH:mm:ss.nnnnnn}{GMT+0}Z] uaa%X{context} - %pid [%t] .... %5p --- %c{1}: %replace{%m}{(?<=password=|client_secret=)([^&]*)}{<redacted>}%n
appender.uaaDefaultAppender.type = File
appender.uaaDefaultAppender.name = UaaDefaultAppender
appender.uaaDefaultAppender.fileName = logs/uaa.log
appender.uaaDefaultAppender.layout.type = PatternLayout
appender.uaaDefaultAppender.layout.pattern = ${log_pattern}
appender.uaaAuditAppender.type = File
appender.uaaAuditAppender.name = UaaAuditAppender
appender.uaaAuditAppender.fileName = logs/uaa_events.log
appender.uaaAuditAppender.layout.type = PatternLayout
appender.uaaAuditAppender.layout.pattern = ${log_pattern}
rootLogger.level = debug
rootLogger.appenderRef.uaaDefaultAppender.ref = UaaDefaultAppender
logger.UAAAudit.name = UAA.Audit
logger.UAAAudit.level = info
logger.UAAAudit.additivity = true
logger.UAAAudit.appenderRef.auditEventLog.ref = UaaAuditAppender
logger.cfIdentity.name = org.cloudfoundry.identity
logger.cfIdentity.level = info
logger.cfIdentity.additivity = false
logger.cfIdentity.appenderRef.uaaDefaultAppender.ref = UaaDefaultAppender

View File

@ -10,4 +10,5 @@ do
echo "Trying again. Try #$counter"
((counter++))
done
sleep 10
echo "UAA is ready"

View File

@ -8,6 +8,7 @@ var SSOHomePage = require('../../pageobjects/SSOHomePage')
describe("Management UI without UAA running", function() {
var driver;
var homePage;
var captureScreen;
before(async function() {
driver = buildDriver();

View File

@ -1,8 +0,0 @@
#!/usr/bin/env bash
SCRIPT="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
export RABBITMQ_CONFIG=${SCRIPT}/../with-uaa/rabbitmq-headless.config
export ENABLED_PLUGINS=${SCRIPT}/../with-uaa/enabled_plugins
${SCRIPT}/../../../bin/start-rabbitmq.sh

View File

@ -1,5 +0,0 @@
#!/usr/bin/env bash
SCRIPT="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
$SCRIPT/../../../bin/stop-rabbitmq.sh

View File

@ -11,7 +11,8 @@ describe("An UAA user with administrator tag", function() {
var homePage;
var uaaLogin;
var overview;
var captureScreen;
before(async function() {
driver = buildDriver();
await goToHome(driver);

View File

@ -11,6 +11,7 @@ describe("Once user is logged in", function() {
var homePage;
var uaaLogin;
var overview;
var captureScreen;
this.timeout(65000); // hard-coded to 25secs because this test requires 25sec to run
before(async function() {

View File

@ -8,6 +8,7 @@ var SSOHomePage = require('../../pageobjects/SSOHomePage')
describe("Management UI with UAA running", function() {
var driver;
var homePage;
var captureScreen
before(async function() {
driver = buildDriver();

View File

@ -13,8 +13,8 @@ describe("When a logged in user", function() {
var captureScreen
before(async function() {
driver = buildDriver();
await goToHome(driver);
driver = buildDriver()
await goToHome(driver)
homePage = new SSOHomePage(driver)
uaaLogin = new UAALoginPage(driver)
overview = new OverviewPage(driver)
@ -23,16 +23,10 @@ describe("When a logged in user", function() {
it("logs out", async function() {
await homePage.clickToLogin();
// await takeAndSaveScreenshot(driver, require('path').basename(__filename), '01-beforeLogin');
await uaaLogin.login("rabbit_admin", "rabbit_admin");
// await takeAndSaveScreenshot(driver, require('path').basename(__filename), '02-afterLogin');
await overview.isLoaded()
// await takeAndSaveScreenshot(driver, require('path').basename(__filename), '03-overview');
await overview.logout()
await homePage.isLoaded()
// await takeAndSaveScreenshot(driver, require('path').basename(__filename), '05-afterUaaLogin');
});
after(async function() {

View File

@ -1,10 +0,0 @@
#!/usr/bin/env bash
SCRIPT="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
export RABBITMQ_CONFIG=${SCRIPT}/rabbitmq-headless.config
export ENABLED_PLUGINS=${SCRIPT}/enabled_plugins
export UAA_CONFIG=${SCRIPT}/uaa-headless
${SCRIPT}/../../../bin/start-rabbitmq.sh
${SCRIPT}/start-uaa.sh

View File

@ -1,6 +0,0 @@
#!/usr/bin/env bash
SCRIPT="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
$SCRIPT/../../../bin/stop-rabbitmq.sh
$SCRIPT/stop-uaa.sh

View File

@ -11,6 +11,7 @@ describe("Once user is logged in", function() {
var homePage;
var uaaLogin;
var overview;
var captureScreen;
this.timeout(25000); // hard-coded to 25secs because this test requires 25sec to run
before(async function() {