Historique de la page
...
language | fr |
---|
Configuration
Le fichier services.json
Le fichier services.json
du projet de tests énumère les container/services (docker) nécessaire à l'exécution des tests.
Maven lancera les containers présent dans le fichier avant de lancer les tests et les arrêtera après.
Par exemple pour deux images docker, une pour la bd postgres et une pour un elasticsearch, le fichier contient :
Bloc de code |
---|
[{
"name":"bluemind/postgres-tests"
},{
"name":"bluemind/elasticsearch-tests"
}] |
Le fragment net.bluemind.pool.dockerconfig
Ce fragment permet de surcharger (remplacer) la classe BmConfIni.
Si le fragment est actif (non fermé) et que le projet de tests comporte un fichier services.json
, le fragment contactera l'instance docker pour trouver les adresses IP des containers correspondant aux images du fichier services.json
et remplacera/surchargera les divers paramètres que fournit BmConfIni
(l'hôte de la base de données par exemple).
Quand on fait tourner les tests dans Eclipse et qu'on veut utiliser les services fournis par une machine virtuelle BlueMind (postgres, elasticsearch etc..), il suffit de fermer le fragment. Les fichiers de configuration traditionnels prendront alors le relai (/etc/bm/bm.ini
, /etc/bm/mcast.id
, etc.)
Configuration maven
La configuration maven des projets de tests répertorie les differents plugins nécessaires au lancement des tests :
Bloc de code |
---|
<plugin>
<groupId>org.eclipse.tycho</groupId>
<artifactId>tycho-surefire-plugin</artifactId>
<configuration>
<showEclipseLog>true</showEclipseLog>
<useUIHarness>false</useUIHarness>
<useUIThread>false</useUIThread>
<product>org.eclipse.platform.ide</product>
</configuration>
</plugin>
<plugin>
<groupId>org.eclipse.tycho</groupId>
<artifactId>target-platform-configuration</artifactId>
<configuration>
<dependency-resolution>
<extraRequirements>
<requirement>
<type>eclipse-feature</type>
<id>net.bluemind.tests.feature</id>
<versionRange>0.0.0</versionRange>
</requirement>
</extraRequirements>
</dependency-resolution>
</configuration>
</plugin> |
Jouer les tests depuis Docker
Installer docker (préférer les paquets téléchargeables sur docker.com plutôt que les paquets fournis avec les distributions).
Mettre docker en écoute sur un socket, par exemple sur Debian/Ubuntu :
- éditer
/etc/default/docker
définir la variable suivante :
DOCKER_OPTS="-H tcp://<ip hote>:10000 -H unix:///var/run/docker.sock"
- relancer le service Docker
Sur la machine de développement, celle où se trouve Eclipse et les sources BlueMind, il faut ensuite indiquer quel service Docker utiliser en créant le fichier ~/.docker.io.properties
avec le contenu suivant :
Bloc de code |
---|
docker.io.url=http://<ip hote docker>:10000 |
Par la suite, ce sont les containers Docker qui devront-être accessibles depuis Eclipse. Il sera peut-être nécessaire d'ajouter une route sur la machine Eclipse pour accéder au réseau des containers.
D'autres méthodes possibles sont consultable sur le git docker-java.
Les images Docker
Il est actuellement nécessaire d'installer les images en local (sur le docker qui est utilisé pour les tests). Les images se trouvent dans le projet bm/bm-docker-devenv
:
Bloc de code |
---|
$ git clone https://forge.blue-mind.net/stash/scm/bm/bm-docker-devenv.git
$ ./build |
Remarque |
---|
Pensez à reconstruire vos images régulièrement afin d'utiliser des versions récentes des binaires BlueMind. |
Connecter des répertoires locaux en tant que volumes Docker
Cela se fait via un tableau (Array) "volumes".
Par exemple pour connecter le répertoire local "/tmp/backups/bluemind
" avec le répertoire "/var/backups/bluemind
" dans le container docker, on utilisera le code suivant :
Bloc de code |
---|
[{
"name":"bluemind/postgres-tests",
"volumes":[ { "localPath":"/tmp/backups/bluemind", "containerPath":"/var/backups/bluemind" } ]
}] |
Dans le DockerFile d'images docker, il faut en plus ajouter le VOLUME :
Bloc de code |
---|
VOLUME ["/var/backups/bluemind"] |
Jouer les tests depuis Eclipse
Construire une première fois le projet BlueMind :
Bloc de code |
---|
$ cd <sourcesBM>/open
$ mvn -Dmaven.test.skip=true clean install |
Démarrer les containers Docker nécessaires :
Bloc de code |
---|
$ cd <repertoire plugin test>
$ mvn pre-integration-test |
Enfin, lancer les tests dans Eclipse.
Remarque | ||
---|---|---|
Attention: Pour windows et MacOS, il est nécessaire d'ajouter une route sur l'hôte de la VM (windows ou MacOS) afin d'atteindre le réseau des containers Docker.
|
Tester sans container OSGI (Junit)
Les classes nommées *Test.java
(différentes de *Tests.java
) sont exécutées sans container OSGI.
Cela revient à lancer des tests dans Eclipse avec «Run as Junit Test»(au contraire de «Run as Junit Plugin Test») et résout des problèmes de Classpath avec des Frameworks de Mocking proxy based, comme Mockito. Les tests s'exécutent aussi plus vite
...
language | de |
---|
Konfiguration
Die Datei services.json
Die Datei services.json
im Testprojekt listet die Container/Services (Docker) auf, die zur Ausführung der Tests benötigt werden.
Maven wird die Container in der Datei starten, bevor die Tests ausgeführt werden und sie danach stoppen.
Am Beispiel von zwei Docker-Images, eines für die Postgres-Bd und eines für eine Elasticsearch, enthält die Datei:
Bloc de code |
---|
[{
"name":"bluemind/postgres-tests"
},{
"name":"bluemind/elasticsearch-tests"
}] |
Das Fragment net.bluemind.pool.dockerconfig
Dieses Fragment ermöglicht es, die Klasse BmConfIni
zu ersetzen.
Wenn das Fragment aktiv (nicht geschlossen) ist und das Testprojekt eine services.json
-Datei enthält, kontaktiert das Fragment die Docker-Instanz, um die IP-Adressen der Container zu finden, die den Images in der services.json
-Datei entsprechen, und überschreibt die verschiedenen von BmConfIni
bereitgestellten Parameter (z.B. den Datenbankhost).
Wenn Sie die Tests in Eclipse ausführen und die von einer virtuellen BlueMind-Maschine bereitgestellten Dienste (Postgres, Elasticsearch usw.) nutzen möchten, kann das Fragment einfach geschlossen werden. Die traditionellen Konfigurationsdateien werden dann übernommen (/etc/bm/bm.ini
, /etc/bm/mcast.id
, usw.)
Maven-Konfiguration
Die Maven-Konfiguration von Testprojekten listet die verschiedenen Plugins auf, die zum Starten der Tests benötigt werden:
Bloc de code |
---|
<plugin>
<groupId>org.eclipse.tycho</groupId>
<artifactId>tycho-surefire-plugin</artifactId>
<configuration>
<showEclipseLog>true</showEclipseLog>
<useUIHarness>false</useUIHarness>
<useUIThread>false</useUIThread>
<product>org.eclipse.platform.ide</product>
</configuration>
</plugin>
<plugin>
<groupId>org.eclipse.tycho</groupId>
<artifactId>target-platform-configuration</artifactId>
<configuration>
<dependency-resolution>
<extraRequirements>
<requirement>
<type>eclipse-feature</type>
<id>net.bluemind.tests.feature</id>
<versionRange>0.0.0</versionRange>
</requirement>
</extraRequirements>
</dependency-resolution>
</configuration>
</plugin> |
Tests ab Docker ablaufen lassen
Installieren Sie Docker (bevorzugen Sie Pakete, die Sie von docker.com herunterladen können, und nicht die Pakete, die mit den Distributionen geliefert werden).
Docker lauscht an einem Socket, z.B. unter Debian/Ubuntu:
/etc/default/docker
bearbeitenSetzen Sie die folgende Variable:
DOCKER_OPTS="-H tcp://<ip hote>:10000 -H unix:///var/run/docker.sock"
- Starten Sie den Docker-Dienst neu
Auf dem Entwicklungsrechner, auf dem sich Eclipse und die BlueMind-Quellen befinden, müssen Sie angeben, welcher Docker-Dienst verwendet werden soll, indem Sie die Datei ~/.docker.io.properties
mit dem folgenden Inhalt erstellen:
Bloc de code |
---|
docker.io.url=http://<ip hote docker>:10000 |
Anschließend müssen die Docker-Container von Eclipse aus zugänglich sein. Möglicherweise muss auf dem Eclipse-Rechner eine Route hinzugefügt werden, um auf das Container-Netzwerk zugreifen zu können.
Andere mögliche Methoden sind auf git docker-java verfügbar.
Docker-Images
Derzeit ist es erforderlich, die Images lokal zu installieren (auf dem Docker, der zum Testen verwendet wird). Die Images sind im Projekt bm/bm-docker-devenv
zu finden:
Bloc de code |
---|
$ git clone https://forge.blue-mind.net/stash/scm/bm/bm-docker-devenv.git
$ ./build |
Remarque |
---|
Denken Sie daran, Ihre Images regelmäßig neu zu erstellen, um aktuelle Versionen der BlueMind-Binärdateien verwenden zu können. |
Lokale Verzeichnisse als Docker-Volumes verbinden
Dies geschieht über eine Tabelle (Array) von "Volumes".
Um z.B. das lokale Verzeichnis "/tmp/backups/bluemind
" mit dem Verzeichnis "/var/backups/bluemind
" im Container Docker zu verbinden, wird der folgende Code verwendet:
Bloc de code |
---|
[{
"name":"bluemind/postgres-tests",
"volumes":[ { "localPath":"/tmp/backups/bluemind", "containerPath":"/var/backups/bluemind" } ]
}] |
In der DockerFile von Docker-Images muss auch das VOLUME hinzugefügt werden:
Bloc de code |
---|
VOLUME ["/var/backups/bluemind"] |
Tests ab Eclipse ablaufen lassen
Erstmalige Erstellung des BlueMind-Projekts:
Bloc de code |
---|
$ cd <sourcesBM>/open
$ mvn -Dmaven.test.skip=true clean install |
Starten Sie die notwendigen Docker-Container:
Bloc de code |
---|
$ cd <repertoire plugin test>
$ mvn pre-integration-test |
Führen Sie schließlich die Tests in Eclipse aus.
Remarque | ||
---|---|---|
Achtung: Für Windows und MacOS muss eine Route auf dem VM-Host (Windows oder MacOS) hinzugefügt werden, um das Netzwerk der Docker-Container zu erreichen.
|
Testen ohne OSGI-Container (Junit)
Klassen mit dem Namen *Test.java
(unterscheiden sich von *Tests.java
) werden ohne OSGI-Container ausgeführt.
...
.