Added null string tests.
[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 String str3 = "";
13
14 int numbers[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
15 int_Array vect;
16
17 main()
18 {
19     sStruct Sret, Ssend;
20     fStruct fret;
21     int i;
22     int fd;
23     int eid;
24     int total;
25     intStruct is;
26     testUser *remote = 0;
27     float pracF = 0.3945;
28     double pracD = 0.3945;
29     is.style = 5;
30     fd = RPCprocessCreate(&eid, "localhost", "", "server3");
31     if (fd < 0) {
32         perror("process Create");
33         exit(-1);
34     }
35
36     remote = new testUser(fd, NULL, NULL);
37
38
39     remote->nullNull();
40
41     assert(remote->intNull() == 0);
42     assert(remote->doubleDouble(pracD) == pracD);
43     assert(remote->floatFloat(pracF) == pracF);
44     fret.fval = pracF; fret.dval = pracD;
45     fret = remote->fTest(fret);
46     assert((fret.fval == pracF) && (fret.dval == pracD));
47     remote->nullStruct(is);
48
49     sStruct_Array sArr;
50     sArr.count = 5;
51     sArr.data = new sStruct[5];
52     int j, sum1, sum2;
53     sum1 = 0;
54     for (j=0; j<sArr.count; ++j)
55       {
56          sArr.data[j].computer = j;
57          sArr.data[j].name = strdup("happy");
58          sum1 += sArr.data[j].computer;
59       }
60
61     sum2 = remote->classArrayTest(sArr);
62     assert(sum1 == sum2);
63     for (j=0; j<sArr.count; ++j)
64        free( sArr.data[j].name);
65     delete [] sArr.data;
66
67     assert(strlen(str1) == remote->intString(str1));
68     assert(strlen(str3) == remote->intString(str3));
69     assert(-1 == remote->intString((char*) 0));
70     assert(remote->callErr == 0);
71
72     str2 = remote->stringString(str1);
73     assert(!strcmp(str2, str1));
74
75     assert(remote->add(1, 1) == 2);
76     assert(remote->add(-1, -13) == -14);
77
78     Ssend.computer = 2;
79     Ssend.name = strdup("happy");
80     Sret = remote->msTest(Ssend);
81     free(Sret.name);
82     free(Ssend.name);
83
84     vect.count = sizeof(numbers)/sizeof(int);
85     vect.data = numbers;
86     for (i=0, total = 0; i < vect.count; i++) {
87         total += numbers[i];
88     }
89     assert(remote->sumVector(vect) == total);
90
91     remote->triggerSyncUpcall(42);
92
93     remote->triggerAsyncUpcall(-10);
94
95     for (i=0; i < 10000; i++) {
96         remote->add(1, i);
97     }
98     printf("RPC test1 passed\n");
99     delete (remote);
100 }
101
102 void testUser::syncUpcall(int val)
103 {
104     printf("syncUpcall called with value = %d\n", val);
105 }
106
107 void testUser::asyncUpcall(int val)
108 {
109     printf("asyncUpcall called with value = %d\n", val);
110 }
111
112 void testUser::VasyncUpcall(int val)
113 {
114     printf("asyncUpcall called with value = %d\n", val);
115 }