Fixed unhelpful coredump when parsing (invalid) command-line arguments,
[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
71     str2 = remote->stringString(str1);
72     assert(!strcmp(str2, str1));
73
74     assert(remote->add(1, 1) == 2);
75     assert(remote->add(-1, -13) == -14);
76
77     Ssend.computer = 2;
78     Ssend.name = strdup("happy");
79     Sret = remote->msTest(Ssend);
80     free(Sret.name);
81     free(Ssend.name);
82
83     vect.count = sizeof(numbers)/sizeof(int);
84     vect.data = numbers;
85     for (i=0, total = 0; i < vect.count; i++) {
86         total += numbers[i];
87     }
88     assert(remote->sumVector(vect) == total);
89
90     remote->triggerAsyncUpcall(-10);
91
92     for (i=0; i < 10000; i++) {
93         remote->add(1, i);
94     }
95     printf("RPC test1 passed\n");
96     delete (remote);
97 }
98
99
100 void testUser::asyncUpcall(int val)
101 {
102     printf("asyncUpcall called with value = %d\n", val);
103 }
104
105 void testUser::VasyncUpcall(int val)
106 {
107     printf("asyncUpcall called with value = %d\n", val);
108 }