/
thread-stress.t
48 lines (43 loc) · 1.33 KB
/
thread-stress.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
use Test;
use IO::Socket::Async::SSL;
my constant TEST_PORT = 54332;
my $ready = Promise.new;
start react {
my %conf =
private-key-file => 't/certs-and-keys/server.key',
certificate-file => 't/certs-and-keys/server-bundle.crt';
whenever IO::Socket::Async::SSL.listen('localhost', TEST_PORT, |%conf) -> $conn {
whenever $conn.Supply(:bin) -> $data {
whenever $conn.write($data) {}
}
}
$ready.keep(True);
}
await $ready;
await do for ^4 {
start {
for 1..50 -> $i {
my $ca-file = 't/certs-and-keys/ca.crt';
my $conn = await IO::Socket::Async::SSL.connect('localhost', TEST_PORT, :$ca-file);
my $expected = "[string $i]" x (8 * $i);
await $conn.write($expected.encode('ascii'));
my $got = '';
react {
whenever $conn.Supply(:bin) {
$got ~= .decode('ascii');
if $got.chars eq $expected.chars {
$conn.close;
done;
}
}
whenever Promise.in(5) {
$conn.close;
done;
}
}
die "Oops ($got ne $expected)" unless $got eq $expected;
}
}
}
pass 'Thread stress-test lived';
done-testing;