Added isodate() utility method (was in Test/Ping.pm)
[irspy-moved-to-github.git] / lib / ZOOM / IRSpy.pm
index 71c84bd..fea7d59 100644 (file)
@@ -1,4 +1,4 @@
-# $Id: IRSpy.pm,v 1.8 2006-07-21 11:27:02 mike Exp $
+# $Id: IRSpy.pm,v 1.11 2006-07-24 17:00:36 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'");
 
@@ -79,7 +80,7 @@ sub targets {
        my($host, $port, $db, $newtarget) = _parse_target_string($target);
        if ($newtarget ne $target) {
            $this->log("irspy_debug", "rewriting '$target' to '$newtarget'");
-           $target = $newtarget; ### Does this get written through the ref?
+           $target = $newtarget; # This written through the ref
        }
        push @qlist,
            (qq[(host = "$host" and port = "$port" and path="$db")]);
@@ -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);
@@ -192,7 +193,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 +209,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 +224,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 +252,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