/
11-runner.t
119 lines (108 loc) · 2.98 KB
/
11-runner.t
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#!perl
use warnings;
use strict;
use Test::More;
use utf8;
use lib 't'; use Utils;
BEGIN {
plan skip_all => "Need Test::TCP 1.06 to run this test"
unless eval 'require Test::TCP; $Test::TCP::VERSION >= 1.06';
}
use Test::TCP;
my $feersum_script;
for my $dir (qw(blib/script blib/bin)) {
if (-f "$dir/feersum") {
$feersum_script = "$dir/feersum";
last;
}
}
plan skip_all => "can't locate feersum starter script"
unless $feersum_script;
plan tests => 15;
ok -f 'eg/app.feersum' && -r _, "found eg/app.feersum";
ok -f 'eg/chat.feersum' && -r _, "found eg/chat.feersum";
test_tcp(
client => sub {
my $port = shift;
my $cv = AE::cv;
$cv->begin;
my $cli = simple_client GET => '/',
port => $port,
name => 'manual runner',
sub {
my ($body,$headers) = @_;
is $headers->{Status}, 200, "http success";
like $body, qr/^Hello customer number 0x[0-9a-f]+$/;
$cv->end;
};
$cv->recv;
},
server => sub {
use_ok 'Feersum::Runner';
my $port = shift;
my $runner;
eval {
my $app = do 'eg/app.feersum';
ok $app, "did the app";
$runner = Feersum::Runner->new(
listen => ["localhost:$port"],
app => $app
);
ok $runner, "got a runner";
};
warn $@ if $@;
eval {
ok $runner->{app}, "still got the app";
$runner->run();
};
warn $@ if $@;
},
);
test_tcp(
client => sub {
my $port = shift;
my $cv = AE::cv;
$cv->begin;
my $cli = simple_client GET => '/',
port => $port,
name => 'script runner',
sub {
my ($body,$headers) = @_;
is $headers->{Status}, 200, "script http success";
like $body, qr/^Hello customer number 0x[0-9a-f]+$/;
$cv->end;
};
$cv->recv;
},
server => sub {
my $port = shift;
exec "$^X -Mblib $feersum_script --listen localhost:$port ".
"--native eg/app.feersum";
},
);
SKIP: {
skip "can't locate JSON::XS", 3
unless eval "require JSON::XS";
test_tcp(
client => sub {
my $port = shift;
my $cv = AE::cv;
$cv->begin;
my $cli = simple_client GET => '/',
port => $port,
name => 'chat runner',
sub {
my ($body,$headers) = @_;
is $headers->{Status}, 200, "chat http success";
like $body, qr{<title>Chat!</title>};
$cv->end;
};
$cv->recv;
},
server => sub {
my $port = shift;
exec "$^X -Mblib $feersum_script --listen localhost:$port ".
"--native eg/chat.feersum";
},
);
}