Zum Hauptinhalt gehen

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 :

  1. Bearbeiten Sie die docker.service, indem Sie systemctl edit docker.service eingeben
  2. 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
  1. 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
  1. Bearbeiten (oder erstellen Sie, wenn sie nicht existiert) die /etc/docker/daemon.json wie unten definiert:
    {
"insecure-registries" : [ "repository.blue-mind.loc:5001" ]
}
  1. Starten Sie den Daemon und den Docker-Service neu, indem Sie systemctl daemon-reload und dann systemctl 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.

Achtung

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.