DEVEL15-kill-ubik-pthread-env-20080718
[openafs.git] / src / ubik / utst_client.c
1 /*
2  * Copyright 2000, International Business Machines Corporation and others.
3  * All Rights Reserved.
4  * 
5  * This software has been released under the terms of the IBM Public
6  * License.  For details, see the LICENSE file in the top-level source
7  * directory or online at http://www.openafs.org/dl/license10.html
8  */
9
10 #include <afsconfig.h>
11 #include <afs/param.h>
12
13 RCSID
14     ("$Header$");
15
16 #include <sys/types.h>
17 #ifdef AFS_NT40_ENV
18 #include <winsock2.h>
19 #include <afsutil.h>
20 #else
21 #include <sys/file.h>
22 #include <netdb.h>
23 #include <netinet/in.h>
24 #endif
25 #include <time.h>
26 #include <stdio.h>
27 #include <string.h>
28 #include <rx/xdr.h>
29 #include <rx/rx.h>
30 #include <lock.h>
31 #include "ubik.h"
32 #include "utst_int.h"
33
34 extern int SAMPLE_Inc(), SAMPLE_Test(), SAMPLE_Get(), SAMPLE_Trun(),
35 SAMPLE_QGet();
36
37 /* main program */
38
39 #include "AFS_component_version_number.c"
40
41 main(argc, argv)
42      int argc;
43      char **argv;
44 {
45     register afs_int32 code;
46     struct ubik_client *cstruct = 0;
47     afs_int32 serverList[MAXSERVERS];
48     struct rx_connection *serverconns[MAXSERVERS];
49     struct rx_securityClass *sc;
50     register afs_int32 i;
51     afs_int32 temp;
52
53     if (argc == 1) {
54         printf
55             ("uclient: usage is 'uclient -servers ... [-try] [-get] [-inc] [-minc] [-trunc]\n");
56         exit(0);
57     }
58 #ifdef AFS_NT40_ENV
59     /* initialize winsock */
60     if (afs_winsockInit() < 0)
61         return -1;
62 #endif
63     /* first parse '-servers <server-1> <server-2> ... <server-n>' from command line */
64     code = ubik_ParseClientList(argc, argv, serverList);
65     if (code) {
66         printf("could not parse server list, code %d\n", code);
67         exit(1);
68     }
69     rx_Init(0);
70     sc = rxnull_NewClientSecurityObject();
71     for (i = 0; i < MAXSERVERS; i++) {
72         if (serverList[i]) {
73             serverconns[i] =
74                 rx_NewConnection(serverList[i], htons(3000), USER_SERVICE_ID,
75                                  sc, 0);
76         } else {
77             serverconns[i] = (struct rx_connection *)0;
78             break;
79         }
80     }
81
82     /* next, pass list of server rx_connections (in serverconns), and
83      * a place to put the returned client structure that we'll use in
84      * all of our rpc calls (via ubik_Calll) */
85     code = ubik_ClientInit(serverconns, &cstruct);
86
87     /* check code from init */
88     if (code) {
89         printf("ubik client init failed with code %d\n", code);
90         return;
91     }
92
93     /* parse command line for our own operations */
94     for (i = 1; i < argc; i++) {
95         if (!strcmp(argv[i], "-inc")) {
96             /* use ubik_Call to do the work, finding an up server and handling
97              * the job of finding a sync site, if need be */
98             code = ubik_Call(SAMPLE_Inc, cstruct, 0);
99             printf("return code is %d\n", code);
100         } else if (!strcmp(argv[i], "-try")) {
101             code = ubik_Call(SAMPLE_Test, cstruct, 0);
102             printf("return code is %d\n", code);
103         } else if (!strcmp(argv[i], "-qget")) {
104             code = ubik_Call(SAMPLE_QGet, cstruct, 0, &temp);
105             printf("got quick value %d (code %d)\n", temp, code);
106         } else if (!strcmp(argv[i], "-get")) {
107             code = ubik_Call(SAMPLE_Get, cstruct, 0, &temp);
108             printf("got value %d (code %d)\n", temp, code);
109         } else if (!strcmp(argv[i], "-trunc")) {
110             code = ubik_Call(SAMPLE_Trun, cstruct, 0);
111             printf("return code is %d\n", code);
112         } else if (!strcmp(argv[i], "-minc")) {
113             afs_int32 temp;
114             struct timeval tv;
115             tv.tv_sec = 1;
116             tv.tv_usec = 0;
117             printf("ubik_client: Running minc...\n");
118
119             while (1) {
120                 temp = 0;
121                 code = ubik_Call(SAMPLE_Get, cstruct, 0, &temp);
122                 if (code != 0) {
123                     printf("SAMPLE_Inc #1 failed with code %ld\n", code);
124                 } else {
125                     printf("SAMPLE_Get #1 succeeded, got value %d\n", temp);
126                 }
127
128                 temp = 0;
129                 code = ubik_Call(SAMPLE_Inc, cstruct, 0);
130                 if (code != 0) {
131                     printf("SAMPLE_Inc #1 failed with code %ld\n", code);
132                 } else {
133                     printf("SAMPLE_Inc #1 succeeded, incremented integer\n");
134                 }
135                 temp = 0;
136                 code = ubik_Call(SAMPLE_Get, cstruct, 0, &temp);
137                 if (code != 0) {
138                     printf("SAMPLE_Get #2 failed with code %ld\n", code);
139                 } else {
140                     printf("SAMPLE_Get #2 succeeded, got value %d\n", temp);
141                 }
142
143                 temp = 0;
144                 code = ubik_Call(SAMPLE_Inc, cstruct, 0);
145                 if (code != 0)
146                     printf("SAMPLE_Inc #2 failed with code %ld\n", code);
147                 else
148                     printf("SAMPLE_Inc #2 succeeded, incremented integer\n");
149
150                 tv.tv_sec = 1;
151                 tv.tv_usec = 0;
152 #ifdef AFS_PTHREAD_ENV
153                 select(0, 0, 0, 0, &tv);
154 #else
155                 IOMGR_Select(0, 0, 0, 0, &tv);
156 #endif
157                 printf("Repeating the SAMPLE operations again...\n");
158             }
159         } else if (!strcmp(argv[i], "-mget")) {
160             afs_int32 temp;
161             struct timeval tv;
162             tv.tv_sec = 1;
163             tv.tv_usec = 0;
164             while (1) {
165                 code = ubik_Call(SAMPLE_Get, cstruct, 0, &temp);
166                 printf("got value %d (code %d)\n", temp, code);
167
168                 code = ubik_Call(SAMPLE_Inc, cstruct, 0);
169                 printf("update return code is %d\n", code);
170
171                 code = ubik_Call(SAMPLE_Get, cstruct, 0, &temp);
172                 printf("got value %d (code %d)\n", temp, code);
173
174                 code = ubik_Call(SAMPLE_Get, cstruct, 0, &temp);
175                 printf("got value %d (code %d)\n", temp, code);
176
177                 tv.tv_sec = 1;
178                 tv.tv_usec = 0;
179 #ifdef AFS_PTHREAD_ENV
180                 select(0, 0, 0, 0, &tv);
181 #else
182                 IOMGR_Select(0, 0, 0, 0, &tv);
183 #endif
184             }
185         }
186     }
187 }