Man page for igen.
[dyninst.git] / igen / tests / client4.C
1 #include <rpc/xdr.h>
2 #include <unistd.h>
3 #include <assert.h>
4 #include "test4.CLNT.h"
5
6 String str1 = "A Test String with server words in it";
7 String str2 = "Different String";
8
9 int numbers[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
10 int_Array vect;
11
12 extern void serverMainFunc(int);
13
14 main()
15 {
16     int i;
17     int fd;
18     int eid;
19     int tid;
20     int total;
21     intStruct is;
22     testUser *remote;
23
24     // do a thread create???
25     thr_create(0, 0, serverMainFunc, thr_self(), 0, (unsigned int *) &tid);
26
27     remote = new testUser(tid);
28
29     remote->nullNull();
30
31     assert(remote->intNull() == 0);
32
33     remote->nullStruct(is);
34
35     assert(strlen(str1) == remote->intString(str1));
36
37     str2 = remote->stringString(str1);
38     assert(!strcmp(str2, str1));
39
40     assert(remote->add(1, 1) == 2);
41     assert(remote->add(-1, -13) == -14);
42
43     vect.count = sizeof(numbers)/sizeof(int);
44     vect.data = numbers;
45     for (i=0, total = 0; i < vect.count; i++) {
46         total += numbers[i];
47     }
48     assert(remote->sumVector(vect) == total);
49
50     // This causes deadlock now.  I am not sure if it should be fixed though.
51     //   This has to due with the way procedures wait for data.
52     //   hollings 1/18/94
53     // remote->triggerSyncUpcall(42);
54
55     remote->triggerAsyncUpcall(-10);
56
57     for (i=0; i < 10000; i++) {
58         remote->add(1, 0);
59     }
60
61     printf("ThreadPC test1 passed\n");
62     delete (remote);
63 }
64
65 void testUser::syncUpcall(int val)
66 {
67     printf("syncUpcall called with value = %d\n", val);
68 }
69
70 void testUser::asyncUpcall(int val)
71 {
72     printf("asyncUpcall called with value = %d\n", val);
73 }