Author: dylan
Date: 2005-08-01 10:57:33 -0400 (Mon, 01 Aug 2005)
New Revision: 899

Added:
   trunk/perl/server/t/006_fail_order.t
Log:
bd_'s test case.


Added: trunk/perl/server/t/006_fail_order.t
===================================================================
--- trunk/perl/server/t/006_fail_order.t        2005-08-01 02:18:28 UTC (rev 
898)
+++ trunk/perl/server/t/006_fail_order.t        2005-08-01 14:57:33 UTC (rev 
899)
@@ -0,0 +1,85 @@
+#!/usr/bin/perl
+use strict;
+use warnings;
+
+use Test::More tests => 1;
+use IO::Socket::INET;
+use Data::Dumper;
+
+sub fmt {
+    my ($prefix, $str) = @_;
+    $str =~ tr/\r//d;
+    my @lines = split /\n/, $str;
+    return join("\n", map { "# $prefix$_" } @lines), "\n";
+}
+
+use constant {
+    CONTINUE => 0,
+    OK => 1,
+    NOK => 2,
+    SKIP => 3,
+};
+
+my @script = (
+    {
+        send => "HAVER\ttest-case/0.0\r\n",
+        expect => [
+            qr{^HAVER.*\r\n} => CONTINUE,
+            qr{\r\n} => SKIP,
+            ],
+    },
+    {
+        send => "IDENT\tt$$\r\n",
+        expect => [
+            qr{^HELLO\tt$$\r\n} => CONTINUE,
+            qr{\r\n} => SKIP,
+            ],
+    },
+    {
+        send => "FOO\r\nPOKE\t42\r\n",
+        expect => [
+            qr{^OUCH} => NOK,
+            qr{^FAIL\tFOO\tunknown.cmd\r\nOUCH\t42\r\n} => OK,
+            qr{^FAIL\t} => NOK,
+            qr{\r\n} => SKIP,
+            ],
+    }
+);
+
+my $buf = '';
+my $h   = new IO::Socket::INET(
+    PeerAddr => 'hardison.net',
+    PeerPort => 7575,
+    Proto => 'tcp',
+);
+unless ($h) {
+    SKIP: skip "can't connect: $!", 1;
+    exit 0;
+}
+
+S: while (@script) {
+    my $stage = shift @script;
+    print $h $stage->{send};
+    print fmt("C: ", $stage->{send});
+    while (<$h>) {
+        print fmt("S: ", $_);
+        $buf .= $_;
+        my @expect = @{$stage->{expect}};
+        while (@expect) {
+            my $re = shift @expect;
+            my $action = shift @expect;
+            if ($buf =~ s/^(.*?$re)//) {
+                if ($action == CONTINUE) {
+                    next S;
+                } elsif ($action == SKIP) {
+                    SKIP: skip "skipping: " . Dumper $1, 1;
+                    exit 0;
+                } else {
+                    ok($action == OK, "S: FAIL behavior");
+                    exit 0;
+                }
+            }
+        }
+    }
+}
+    


Reply via email to