Einweg-VM zur Runtime erstellen

Zugriff auf die VM

VMs, die über das Vagrant-Binding erstellt wurden, können auch direkt von Java aus angesprochen werden. Aktuell ist es möglich, Dateien zur Laufzeit auf die VM hochzuladen und Befehle über SSH abzusetzen. Hierbei kann man sich jeweils entscheiden, ob man das ganze unter Root-Rechten oder als normaler User durchführen möchte. Hier ein Beispiel, wie eine VM direkt angesprochen werden kann:

vagrantEnvironmet.up();
vagrantEnvironmet.getVm(0).createConnection().execute("touch /tmp/newFile.tmp", false);
vagrantEnvironmet.getVm(0).createConnection().upload("path/to/local/file", "path/on/vm");
JUnit Support

Eine Aufgabe, in der das Vagrant-Binding Entwickler unterstützen soll, sind UnitTests, die externe Tools wie Datenbanken benötigen. Hierfür stellt Vagrant-Binding ein spezielles JUnit Rule zur Verfügung. Die @Rule-Annotation ist ein spezielles Feature von JUnit, welches dabei hilft, Tests besser zu konfigurieren. Weitere Informationen gibt es unter http://kentbeck.github.com/junit/javadoc/4.10/org/junit/Rule.html. Den „VagrantTestRule“ kann für jeden UnitTest angegeben werden. Er erstellt eine konfigurierte VM-Umgebung vor dem Test und zerstört diese direkt nach dem Test. So kann man z.B. sehr einfach eine virtuelle Maschine mit einer laufenden MySQL-Datenbank für jeden UnitTest aufsetzen. Die Tests können dann direkt gegen die neue und saubere Datenbank arbeiten. Nach dem Testlauf wird die VM wieder zerstört – egal ob der Test erfolgreich war oder fehl schlug. Ein vereinfachtes Beispiel sieht wie folgt aus:

public class DbHandlerTest {
	@Rule
	public VagrantTestRule testRule = new VagrantTestRule(createConfig());

	public static VagrantConfiguration createConfig() {
		return VagrantConfigurationBuilder.create()...build();
	}

	@Test
	public void testJdbc() {
		//Dieser Test kann die mit der VagrantTestRule erstellten VMs nutzen.
	}
}

Hier einmal ein kleines Schaubild, das den Ablauf von UnitTest mit der VagrantTestRule verdeutlicht:

Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.