blob: 13cbc3cacc8b77356c59ab70d853f77b78424de4 [file] [view]
# Integration tests for Bookkeeper
## Prerequisites
### Workaround for running the tests with Mac Apple Silicon
The current version of the outdated Maven plugin requires a workaround. This is also necessary for running the tests
with an outdated Arquillian Cube version.
Install socat
```bash
brew install socat
```
Run a TCP -> Unix socket proxy for docker in a separate terminal
```bash
socat TCP-LISTEN:2375,bind=127.0.0.1,reuseaddr,fork UNIX-CLIENT:/var/run/docker.sock &
```
Set the `DOCKER_HOST` environment variable in the terminal where you run the tests
```bash
export DOCKER_HOST=tcp://localhost:2375
```
Here's a shell script function to automate starting the proxy and setting `DOCKER_HOST`:
```bash
function docker_socket_proxy() {
local port=2375
socat /dev/null TCP4:127.0.0.1:$port,connect-timeout=2 &> /dev/null
if [ $? -ne 0 ]; then
echo "Starting socat tcp proxy on port $port for docker socket /var/run/docker.sock"
socat TCP-LISTEN:$port,bind=127.0.0.1,reuseaddr,fork UNIX-CLIENT:/var/run/docker.sock &> /dev/null &
echo "Stop the proxy with 'kill $!'"
fi
export DOCKER_HOST=tcp://127.0.0.1:$port
echo "Added DOCKER_HOST=$DOCKER_HOST to environment"
}
```
You can add the function to your shell profile (`~/.bashrc`, `~/.zshrc`, etc.).
### Support for connecting to docker network from Mac host
You will also need to install [docker-mac-net-connect](https://github.com/chipmk/docker-mac-net-connect). It allows the
tests to connect to the Docker network from the Mac host.
Disable host network mode in Docker Desktop settings before enabling `docker-mac-net-connect`, as they cannot be enabled
simultaneously.
```bash
brew install chipmk/tap/docker-mac-net-connect
sudo brew services start chipmk/tap/docker-mac-net-connect
```
You will also need to add the following to the Docker Desktop Docker Engine configuration on MacOS:
```yaml
{
"default-network-opts": {
"bridge": {
"com.docker.network.bridge.gateway_mode_ipv4": "nat-unprotected"
}
}
}
```
Stop `docker-mac-net-connect` when you no longer need it:
```bash
sudo brew services stop chipmk/tap/docker-mac-net-connect
```
## Running the tests
Remember to start the unix socket proxy for docker as described in the previous section and set the `DOCKER_HOST` environment variable in the terminal where you run the tests.
### Building the docker images together with the project source code
```bash
# remove possible remaining python client versions from previous builds
git clean -fdx -- stream/clients/python
# build the project and docker images
# currentVersionOnly profile avoids downloading old Bookkeeper releases.
mvn -B -nsu clean install -Pdocker,currentVersionOnly -DskipTests
docker images | grep apachebookkeeper
```
### Running integration tests
```bash
# Run metadata driver tests
mvn -f metadata-drivers/pom.xml test -DintegrationTests -DredirectTestOutputToFile=false -DtestRetryCount=0
# Run all integration tests
mvn -f tests/pom.xml test -DintegrationTests -DredirectTestOutputToFile=false -DtestRetryCount=0
```
### Running backward compatibility tests
Building docker images with `-Pdocker` is required to build the docker images for backward compatibility tests.
The `currentVersionOnly` profile shouldn't be active.
```bash
# Test current server with old clients
mvn -DbackwardCompatTests -pl :backward-compat-current-server-old-clients test -DredirectTestOutputToFile=false -DtestRetryCount=0
# Test progressive upgrade
mvn -DbackwardCompatTests -pl :upgrade test -DredirectTestOutputToFile=false -DtestRetryCount=0
# Other backward compat tests
mvn -DbackwardCompatTests -pl :bc-non-fips,:hierarchical-ledger-manager,:hostname-bookieid,:old-cookie-new-cluster,:recovery-no-password,:upgrade-direct,:yahoo-custom-version test -DredirectTestOutputToFile=false -DtestRetryCount=0
```