Man page for igen.
[dyninst.git] / igen / tests / client3.C
1 extern "C" {
2 #include <rpc/xdr.h>
3 }
4
5 #include <unistd.h>
6 #include <assert.h>
7 #include "test3.CLNT.h"
8 #include <string.h>
9
10 String str1 = "A Test String with server words in it";
11 String str2 = "Different String";
12
13 int numbers[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
14 int_Array vect;
15
16 main()
17 {
18     sStruct Sret, Ssend;
19     int i;
20     int fd;
21     int eid;
22     int total;
23     intStruct is;
24     testUser *remote = 0;
25
26     is.style = 5;
27     fd = RPCprocessCreate(&eid, "localhost", "", "server3");
28     if (fd < 0) {
29         perror("process Create");
30         exit(-1);
31     }
32
33     remote = new testUser(fd, NULL, NULL);
34
35
36     remote->nullNull();
37
38     assert(remote->intNull() == 0);
39
40     remote->nullStruct(is);
41
42     assert(strlen(str1) == remote->intString(str1));
43
44     str2 = remote->stringString(str1);
45     assert(!strcmp(str2, str1));
46
47     assert(remote->add(1, 1) == 2);
48     assert(remote->add(-1, -13) == -14);
49
50     Ssend.computer = 2;
51     Ssend.name = strdup("happy");
52     Sret = remote->msTest(Ssend);
53     free(Sret.name);
54     free(Ssend.name);
55
56     vect.count = sizeof(numbers)/sizeof(int);
57     vect.data = numbers;
58     for (i=0, total = 0; i < vect.count; i++) {
59         total += numbers[i];
60     }
61     assert(remote->sumVector(vect) == total);
62
63     remote->triggerSyncUpcall(42);
64
65     remote->triggerAsyncUpcall(-10);
66
67     for (i=0; i < 10000; i++) {
68         remote->add(1, i);
69     }
70     printf("RPC test1 passed\n");
71     delete (remote);
72 }
73
74 void testUser::syncUpcall(int val)
75 {
76     printf("syncUpcall called with value = %d\n", val);
77 }
78
79 void testUser::asyncUpcall(int val)
80 {
81     printf("asyncUpcall called with value = %d\n", val);
82 }