Gather targets when running in "all targets in DB" mode.
[irspy-moved-to-github.git] / lib / ZOOM / IRSpy.pm
index d9674b7..d7ed4d6 100644 (file)
@@ -1,4 +1,4 @@
-# $Id: IRSpy.pm,v 1.9 2006-07-21 11:28:16 mike Exp $
+# $Id: IRSpy.pm,v 1.12 2006-07-25 15:18:03 mike Exp $
 
 package ZOOM::IRSpy;
 
@@ -49,6 +49,7 @@ sub new {
        targets => undef,       # filled in later
        target2record => undef, # filled in later
        pod => undef,           # filled in later
+       tests => [],            # stack of tests currently being executed
     }, $class;
     $this->log("irspy", "starting up with database '$dbname'");
 
@@ -100,7 +101,7 @@ sub _parse_target_string {
        ($host, $db) = ($target =~ /(.*?)\/(.*)/);
        $target = "$host:$port/$db";
     }
-    die "invalid target string '$target'"
+    die "$0: invalid target string '$target'"
        if !defined $host;
 
     return ($host, $port, $db, $target);
@@ -152,6 +153,8 @@ sub initialise {
        my $zeerex = _render_record($rs, $i-1, "zeerex");
        $target2record{lc($target)} =
            new ZOOM::IRSpy::Record($target, $zeerex);
+       push @{ $this->{targets} }, $target
+           if $this->{allrecords};
     }
 
     foreach my $target (keys %target2record) {
@@ -192,7 +195,15 @@ sub _render_record {
 sub check {
     my $this = shift();
 
-    return $this->_run_test("Main");
+    my $res = $this->_run_test("Main");
+    foreach my $target (sort keys %{ $this->{target2record} }) {
+       my $rec = $this->{target2record}->{$target};
+       print STDERR "$target: zeerex='", $rec->{zeerex}, "' = \n",
+           $rec->{zeerex}->toString(), "\n";
+       ### Write record back to database, if modified.
+    }
+    return $res;
+
 }
 
 
@@ -200,6 +211,10 @@ sub _run_test {
     my $this = shift();
     my($tname) = @_;
 
+    die("$0: test-hierarchy loop detected: " .
+       join(" -> ", @{ $this->{tests} }, $tname))
+       if grep { $_ eq $tname } @{ $this->{tests} };
+
     eval {
        my $slashSeperatedTname = $tname;
        $slashSeperatedTname =~ s/::/\//g;
@@ -211,8 +226,11 @@ sub _run_test {
     }
 
     $this->log("irspy", "running test '$tname'");
+    push @{ $this->{tests} }, $tname;
     my $test = "ZOOM::IRSpy::Test::$tname"->new($this);
-    return $test->run();
+    my $res =$test->run();
+    pop @{ $this->{tests} };
+    return $res;
 }
 
 
@@ -236,6 +254,16 @@ sub record {
 }
 
 
+# Utility method, really nothing to do with IRSpy
+sub isodate {
+    my $this = shift();
+    my($time) = @_;
+
+    my($sec, $min, $hour, $mday, $mon, $year) = localtime($time);
+    return sprintf("%04d-%02d-%02dT%02d:%02d:%02d",
+                  $year+1900, $mon+1, $mday, $hour, $min, $sec);
+}
+
 
 =head1 SEE ALSO