Tests
Diese Seite zeigt die Ausführung und den Betrieb von Tests über mavin, eclipse, docker oder eine virtuelle Maschine.
Konfiguration
Die Datei services.json
Die Datei services.json
des Testprojekts listet die für die Ausführung der Tests erforderlichen Container/Dienste (Docker) auf.
Maven wird die in der Datei enthaltenen Container vor dem Start der Tests starten und sie danach beenden.
Zum Beispiel für zwei Docker-Images, eines für die Postgres-BD und eines für eine Elasticsearch, enthält die Datei :
[{
"name":"bluemind/postgres-tests"
},{
"name":"bluemind/elasticsearch-tests"
}]
Das Fragment net.bluemind.pool.dockerconfig
Dieses Fragment ermöglicht es, die Klasse BmConfIni
zu überschreiben (zu ersetzen).
Wenn das Fragment aktiv ist (nicht geschlossen) und das Testprojekt eine Datei services.json
enthält, wird das Fragment die Docker-Instanz kontaktieren, um die IP-Adressen der zu den Bildern in der Datei services.json
entsprechenden Container zu finden und die verschiedenen von BmConfIni
bereitgestellten Parameter zu ersetzen/überschreiben (zum Beispiel 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, schließen Sie einfach das Fragment. Die traditionellen Konfigurationsdateien werden dann übernehmen (/etc/bm/bm.ini
, /etc/bm/mcast.id
, usw.)
Maven-Konfiguration
Die Maven-Konfiguration der Testprojekte listet die verschiedenen Plugins auf, die für den Start der Tests erforderlich sind:
<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 spielen
Docker konfigurieren
Installieren Sie docker (bevorzugen Sie die herunterladbaren Pakete auf docker.com anstelle der mit den Distributionen gelieferten Pakete).
Für Ubuntu bevorzugen Sie die Installation über das Repository
Docker auf einen Socket lauschen lassen, z.B. auf Debian/Ubuntu :
- Bearbeiten Sie die docker.service, indem Sie
systemctl edit docker.service
eingeben - Definieren Sie die folgende Variable:
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://127.0.0.1:10000 -H unix:///var/run/docker.sock --insecure-registry=repository.blue-mind.loc:5001
- Auf der Entwicklungsmaschine, auf der Eclipse und die BlueMind-Quellen liegen, müssen Sie dann angeben, welchen Docker-Service Sie verwenden möchten, indem Sie die Datei
~/.docker.io.properties
mit dem folgenden Inhalt erstellen:
docker.io.url=http://127.0.0.1:10000
remote=repository.blue-mind.loc:5001
- Bearbeiten (oder erstellen Sie, wenn sie nicht existiert) die
/etc/docker/daemon.json
wie unten definiert:
{
"insecure-registries" : [ "repository.blue-mind.loc:5001" ]
}
- Starten Sie den Daemon und den Docker-Service neu, indem Sie
systemctl daemon-reload
und dannsystemctl restart docker
eingeben
Später müssen die Docker-Container von Eclipse aus zugänglich sein. Es könnte notwendig sein, eine Route auf der Eclipse-Maschine hinzuzufügen, um auf das Containernetzwerk zuzugreifen.
Andere mögliche Methoden finden Sie auf dem git docker-java.
Lokale Verzeichnisse als Docker-Volumes verbinden
Dies geschieht über ein Array (Array
) von "Volumes".
Zum Beispiel, um das lokale Verzeichnis "/tmp/backups/bluemind" mit dem Verzeichnis "/var/backups/bluemind" im Docker-Container zu verbinden, verwenden Sie den folgenden Code:
[{
"name":"bluemind/postgres-tests",
"volumes":[ { "localPath":"/tmp/backups/bluemind", "containerPath":"/var/backups/bluemind" } ]
}]
Im DockerFile der Docker-Images muss zusätzlich VOLUME hinzugefügt werden:
VOLUME ["/var/backups/bluemind"]
Tests von Eclipse aus abspielen
Erstellen Sie das BlueMind Projekt ein erstes Mal:
$ cd <sourcesBM>/open
$ mvn -Dmaven.test.skip=true clean install
Starten Sie die erforderlichen Docker-Container :
$ cd <repertoire plugin test>
$ mvn -D tycho.mode=maven net.bluemind:bm-docker-maven-plugin:start
Starten Sie schließlich die Tests in Eclipse.
Für Windows und macOS ist es notwendig, eine Route auf dem Host der VM (Windows oder macOS) hinzuzufügen, um das Netzwerk der Docker-Container zu erreichen. Sie müssen auch das Routing auf der Docker VM aktivieren:
$ sysctl -w net.ipv4.ip_forward=1
$ echo 'net.ipv4.ip_forward=1' > /etc/sysctl.conf
Testen ohne OSGI-Container (Junit)
Klassen mit dem Namen *Test.java
(unterscheiden sich von *Test**s**.java
) werden ohne OSGI-Container ausgeführt.
Dies entspricht dem Ausführen von Tests in Eclipse mit "Run as Junit Test" (im Gegensatz zu "Run as Junit Plugin Test") und löst Classpath-Probleme mit Mocking-Proxy-basierten Frameworks, wie Mockito. Die Tests werden auch schneller ausgeführt.