H2 en mode émulation est rapide, mais ne valide pas la compatibilité sur les
autres DB vendors.
Bonita doit tourner sur
Avant
## Ce qu'on a mis en place
Utilisation d’images docker déjà tunées pour les bases de donnée supportées.
## Ce qu'on a mis en place
La **configuration** est déjà dans l'image
```shell
#!/bin/bash
#max_prepared_transactions
sed -i "s/^.*max_prepared_transactions\s*=\s*\(.*\)$/max_prepared_transactions = 100/"
"$PGDATA"/postgresql.conf
```
## Ce qu'on a mis en place
Les **schémas / databases** nécessaires sont déjà dans l'image
Les **users** de connexion sont déjà dans l'image
```sql
CREATE ROLE bonita LOGIN PASSWORD 'bpm';
CREATE DATABASE bonita
WITH OWNER = bonita
ENCODING = 'UTF8'
TABLESPACE = pg_default
CONNECTION LIMIT = -1;
```
## Ce qu'on a mis en place
Possibilité de précharger des données à partir d'un dump
```
#!/bin/bash
if [ -f /opt/bonita/dump/bonita.dump ]; then
psql -h localhost -p 5432 -Ubonita bonita < /opt/bonita/dump/bonita.dump
date > /var/lib/postgresql/restore.lastExecution
echo "Database restored"
fi
```
A chaque lancement des tests d'intégration, on lance un nouveau conteneur Docker
io.fabric8docker-maven-plugin0.18.1
A chaque lancement des tests d'intégration, on lance un nouveau conteneur Docker
## Comment?
* Activation par profils maven (1 profil pour chaque DB vendor)
* Idem avec plugin gradle
## Tips: scalabilité
Le plugin Maven permet de choisir un port aléatoire. Plus de conflit de ports.

## Tips: Healthcheck
Docker permet de s'assurer que l'image est up & running avant de lancer les tests
```
FROM postgres:9.3
MAINTAINER Laurent Leseigneur
# restore dump on startup if dumpfile is present
VOLUME /opt/bonita/dump
COPY 0_init-databases.sql /docker-entrypoint-initdb.d/0_init-databases.sql
COPY 1_set-max_prepared_transactions.sh
/docker-entrypoint-initdb.d/1_set-max_prepared_transactions.sh
COPY 2_restore_dump.sh /docker-entrypoint-initdb.d/2_restore_dump.sh
COPY healthcheck.sh /usr/local/bin/healthcheck.sh
HEALTHCHECK --interval=5s --retries=120 CMD ["/usr/local/bin/healthcheck.sh"]
```
# Bénéfices
* env. clean avant chaque lancement
* lancement en local pour debugguer
* La R&D est complètement autonome
# Limitations
Pas d'image docker pour MS SQL Server (compatible avec bonita).
Ces tests tournent toujours "à l'ancienne".
## Questions? / Réponses!
Merci de votre attention.
## Références
Plugin Maven Docker: [Fabric8](https://maven.fabric8.io/)
Plugin Maven Docker: [Gradle Docker plugin](https://github.com/bmuschko/gradle-docker-plugin)
Image officielle docker avec des vrais morceaux de [Bonita](https://hub.docker.com/_/bonita/)
Cette [présentation](https://laurentleseigneur.github.io/human-talk-nov-2017/): https://github.com/laurentleseigneur/human-talk-nov-2017