1require IO::Socket;
2require Config;
3require Net::Daemon::Test;
4require RPC::PlClient;
5
6
7sub Test($) {
8    my $result = shift;
9    printf("%sok %d\n", ($result ? "" : "not "), ++$numTest);
10    $result;
11}
12
13sub RunTests (@) {
14    my $client;
15    my $key;
16
17    if ($_[0]  &&  $_[0] eq 'usercipher') {
18	shift;
19	$key = shift;
20    }
21
22    # Making a new connection
23    Test($client = eval { RPC::PlClient->new(@_) })
24	or print "Failed to make second connection: $@\n";
25    if ($key) { $client->{'cipher'} = $key }
26
27    # Creating a calculator object
28    my $calculator = eval { $client->ClientObject('Calculator', 'new') };
29    Test($calculator) or print "Failed to create calculator: $@\n";
30    print "Calculator is $calculator.\n";
31    print "Handle is $calculator->{'object'}.\n";
32    print "Client is $calculator->{'client'}.\n";
33
34    # Let him do calculations ...
35    my $result = eval { $calculator->add(4, 6, 7) };
36    Test($result and $result eq 17)
37	or printf("Expected 17, got %s, errstr $@\n",
38		  (defined($result) ? $result : "undef"));
39
40    $result = eval { $calculator->multiply(2, 3, 4) };
41    Test($result and $result eq 24);
42
43    $result = eval { $calculator->subtract(27, 12) };
44    Test($result and $result eq 15);
45
46    $result = eval { $calculator->subtract(27, 12, 7) };
47    Test($@ and $@ =~ /Usage/);
48
49    $result = eval { $calculator->divide(15, 3) };
50    Test($result and $result eq 5);
51
52    $result = eval { $calculator->divide(27, 12, 7) };
53    Test($@ and $@ =~ /Usage/);
54
55    $result = eval { $calculator->divide(27, 0) };
56    Test($@ and $@ =~ /zero/);
57
58    ($client, $calculator);
59}
60
61
621;
63