1use common::sense;
2
3use List::Util;
4
5use Callback::Frame;
6
7use AnyEvent::Strict;
8use AnyEvent::Util;
9use AnyEvent::Task::Server;
10use AnyEvent::Task::Client;
11
12use Test::More tests => 16;
13
14
15## The point of this test is to verify that arguments, errors, and
16## return values are passed correctly between client and server.
17
18
19
20AnyEvent::Task::Server::fork_task_server(
21  listen => ['unix/', '/tmp/anyevent-task-test.socket'],
22  interface => sub {
23                     die "ERR: $_[1]" if $_[0] eq 'error';
24                     return \@_;
25                   },
26);
27
28
29
30my $client = AnyEvent::Task::Client->new(
31               connect => ['unix/', '/tmp/anyevent-task-test.socket'],
32               max_workers => 1,
33               name => 'MY CLIENT NAME',
34             );
35
36
37my $cv = AE::cv;
38
39
40{
41  $client->checkout->(1, [2], { three => 3, λ => '��' }, sub {
42    my ($checkout, $ret) = @_;
43
44    ok(!$@, 'no error set');
45    is(@$ret, 3);
46    is($ret->[0], 1);
47    is($ret->[1]->[0], 2);
48    is(ref($ret->[2]), 'HASH');
49    is($ret->[2]->{three}, 3);
50    is(ord($ret->[2]->{λ}), 0x1D1DA, 'unicode character round-tripped ok');
51  });
52
53  $client->checkout->some_method(1, sub {
54    my ($checkout, $ret) = @_;
55
56    ok(!$@, 'no error set 2');
57    ok(@$ret == 2);
58    ok($ret->[0] eq 'some_method');
59    ok($ret->[1] == 1);
60  });
61
62  $client->checkout->error('die please', frame(code => sub {
63    die "should never get here";
64  }, catch => sub {
65    ok($@, 'no error set 3');
66    ok($@ =~ /ERR: die please/);
67    ok($@ !~ /setup exception/i);
68  }));
69
70  frame(code => sub {
71    $client->checkout->error('again, plz die', sub {
72      die "should never get here 2";
73    });
74  }, catch => sub {
75    my $trace = shift;
76    ok($@ =~ /ERR: again, plz die/, '$@ has the exception');
77    ok($trace =~ /MY CLIENT NAME -> error/, 'argument to callback has stack trace');
78
79    $cv->send;
80  })->();
81
82}
83
84
85$cv->recv;
86