Saturday, 19. April 2008
Document-Driven-Development mit FIT (2)
javatux, 19:36h
Im ersten Teil hatten wir eine einfache Tabelle mit Rechnername und Portnummer, die wir mit Hilfe des FIT-Frameworks automatisch überprüft haben. Jetzt wollen wir alle aktiven Ports testen:
Für solche Aufgaben, wo evtl. Tabellen-Zeilen hinzukommen können, bietet sich die RowFixture an:
getTargetClass() liefert eine Klasse zurück, die eine Reihe in der Port-Tabelle vom letzten Mal repräsentiert, und die query()-Methode liefert alle Ergebnisse zurück. Fangen wir mit getTargetClass() an und definieren dafür die PortTester-Klasse:
Für die Klasse gelten die gleichen Regeln wie für die PortScannerFixture-Klasse vom letzten Mal: Überschriften werden zu Attribute bzw. zu Methoden, wenn sie mit "()" enden. Damit können wir jetzt schonmal den FileRunner aufrufen:
FIT bemängelt hier, das beim Test die beiden Zeilen mit Port 22 und 80 fehlen – dies liegt daran, dass query() noch ein leeres Array zurückliefert. Das wollen wir ändern und für jeden offenen Port ein PortTester-Objekt in einem Array sammeln:
Hier werden jeweils für die wellknown Ports zwischen 0 und 1023 ein PortTester-Objekt angelegt. Nur wenn der Aufruf von Status() "aktiv" ist, wird es in die Liste aufgenommen und am Ende als Array zurückgegeben. Das Ergebnis auf meinem Rechner sah danach so aus:
Mit "surplus" werden die Spalten markiert, die hinzugekommen sind. Offensichtlich sind auf meinem Rechner noch die Ports 111 und 631 offen. Ein Blick in List of TCP and UDP port numbers offenbart, dass sich dahinter das "sun protocol" (RPC-Aufruf) und das "Internet Printing Protocol (IPP)" verbirgt.
Damit ist der kleine Ausflug in FIT beendet. Wenn Sie Interesse daran gefunden haben, dann besuchen Sie mich doch auf meinem Vortrag "Wie man tote Dokumente zum Leben erweckt" auf dem Java Forum Stuttgart.
Viel Spaß mit FIT!
de.aosd.PortScannerFixture | ||
Rechner | Portnummer | Status() |
localhost | 22 | aktiv |
localhost | 80 | aktiv |
Für solche Aufgaben, wo evtl. Tabellen-Zeilen hinzukommen können, bietet sich die RowFixture an:
public class PortScannerRowFixture extends RowFixture {
@Override
public Class<?> getTargetClass() {
return PortTester.class;
}
@Override
public Object[] query() throws Exception {
return new Object[0];
}
}
getTargetClass() liefert eine Klasse zurück, die eine Reihe in der Port-Tabelle vom letzten Mal repräsentiert, und die query()-Methode liefert alle Ergebnisse zurück. Fangen wir mit getTargetClass() an und definieren dafür die PortTester-Klasse:
public class PortTester {
public String Rechner;
public int Portnummer;
public String Status() throws UnknownHostException {
return PortScanner.isActive(Rechner, Portnummer) ? "aktiv" : "inaktiv";
}
}
Für die Klasse gelten die gleichen Regeln wie für die PortScannerFixture-Klasse vom letzten Mal: Überschriften werden zu Attribute bzw. zu Methoden, wenn sie mit "()" enden. Damit können wir jetzt schonmal den FileRunner aufrufen:
de.aosd.PortScannerRowFixture | ||
Rechner | Portnummer | Status() |
localhost missing | 22 | aktiv |
localhost missing | 80 | aktiv |
FIT bemängelt hier, das beim Test die beiden Zeilen mit Port 22 und 80 fehlen – dies liegt daran, dass query() noch ein leeres Array zurückliefert. Das wollen wir ändern und für jeden offenen Port ein PortTester-Objekt in einem Array sammeln:
public Object[] query() throws Exception {
ArrayList active = new ArrayList();
for (int i = 0; i < 1023; i++) {
PortTester tester = new PortTester();
tester.Portnummer = i;
tester.Rechner = "localhost";
if (tester.Status().equals("aktiv")) {
active.add(tester);
}
}
return active.toArray();
}
Hier werden jeweils für die wellknown Ports zwischen 0 und 1023 ein PortTester-Objekt angelegt. Nur wenn der Aufruf von Status() "aktiv" ist, wird es in die Liste aufgenommen und am Ende als Array zurückgegeben. Das Ergebnis auf meinem Rechner sah danach so aus:
de.aosd.PortScannerRowFixture | ||
Rechner | Portnummer | Status() |
localhost | 22 | aktiv |
localhost | 80 | aktiv |
localhost surplus | 111 | aktiv |
localhost surplus | 631 | aktiv |
Mit "surplus" werden die Spalten markiert, die hinzugekommen sind. Offensichtlich sind auf meinem Rechner noch die Ports 111 und 631 offen. Ein Blick in List of TCP and UDP port numbers offenbart, dass sich dahinter das "sun protocol" (RPC-Aufruf) und das "Internet Printing Protocol (IPP)" verbirgt.
Damit ist der kleine Ausflug in FIT beendet. Wenn Sie Interesse daran gefunden haben, dann besuchen Sie mich doch auf meinem Vortrag "Wie man tote Dokumente zum Leben erweckt" auf dem Java Forum Stuttgart.
Viel Spaß mit FIT!
Links:
- Beispiel-Projekt: portscanner080419 (zip, 7 KB)
- FIT: fit.c2.com
- Fitnesse: www.fitnesse.org
... comment