2 * Copyright 2000, International Business Machines Corporation and others.
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
10 #include <sys/types.h>
11 #include <netinet/in.h>
13 #include <afsconfig.h>
14 #include <afs/param.h>
20 #include <afs/budb_client.h>
22 #include <rx/rx_globals.h>
24 extern struct udbHandleS udbHandle;
26 #define ERROR(code) {err = code; printf(" - Got error %d.\n", err); goto error;}
33 struct ubik_client *cstruct;
37 * Setup RX connection and establish connection with the buserver
39 code = rx_Init(htons(0));
41 printf("Error in rx_Init call\n");
51 code = udbClientInit(0, 0, cellName);
53 printf("Error in udbClientInit call\n");
58 code = ubik_BUDB_T_GetVersion(udbHandle.uh_client, 0, &version);
60 printf("Error in ubik_Call to BUDB_T_GetVersion\n");
63 printf("BUDB Server Version = %d\n", version);
73 afs_int32 status, orphans, host;
76 ubik_BUDB_DbVerify(udbHandle.uh_client, 0, &status, &orphans,
79 printf("Error in ubik_Call to BUDB_DbVerify\n");
84 printf("DATABASE OK ");
86 printf("DATABASE NOT OK ");
87 printf("- orphans %d; host %d.%d.%d.%d\n", orphans,
88 ((host & 0xFF000000) >> 24), ((host & 0xFF0000) >> 16),
89 ((host & 0xFF00) >> 8), (host & 0xFF));
100 budb_dumpsList dumps;
102 dumps.budb_dumpsList_len = 0;
103 dumps.budb_dumpsList_val = 0;
105 code = bcdb_deleteDump(dumpID, 0, 0, &dumps);
121 struct budb_dumpEntry dumpEntry[NDUMPS];
122 struct budb_tapeEntry tapeEntry[NTAPES];
123 struct budb_volumeEntry volumeEntry[NVOLUMES];
125 code = connect_buserver();
127 printf("Error in connect_buserver call\n");
131 for (pass = 0; pass < NPASS; pass++) {
132 printf("PASS %d\n", pass + 1);
135 for (d = 0; d < NDUMPS; d++) {
136 /* ************************ */
137 /* Create and finish a dump */
138 /* ************************ */
140 dumpEntry[d].parent = 0;
141 dumpEntry[d].level = 0;
142 dumpEntry[d].flags = 0;
143 strcpy(dumpEntry[d].volumeSetName, "TestVolSetName");
144 strcpy(dumpEntry[d].dumpPath, "/TestDumpPath");
145 strcpy(dumpEntry[d].name, "TestVolSetName.TestDumpPath");
146 dumpEntry[d].created = 0;
147 dumpEntry[d].incTime = 0;
148 dumpEntry[d].nVolumes = 0;
149 dumpEntry[d].tapes.id = 0;
150 strcpy(dumpEntry[d].tapes.tapeServer, "");
151 strcpy(dumpEntry[d].tapes.format,
152 "TestVolSetName.TestDumpPath.%d");
153 dumpEntry[d].tapes.maxTapes = 1;
154 dumpEntry[d].tapes.a = 0;
155 dumpEntry[d].tapes.b = 1;
156 strcpy(dumpEntry[d].dumper.name, "admin");
157 strcpy(dumpEntry[d].dumper.instance, "");
158 strcpy(dumpEntry[d].dumper.cell, "");
159 dumpEntry[d].initialDumpID = 0;
161 dumpEntry[d].initialDumpID = dumpEntry[0].id;
162 dumpEntry[d].appendedDumpID = 0;
164 code = bcdb_CreateDump(&dumpEntry[d]);
166 printf("Error in bcdb_CreateDump call\n");
169 printf("\nCreated dump %s (DumpID %u)\n", dumpEntry[d].name,
172 for (t = 0; t < NTAPES; t++) {
173 /* ************************ */
174 /* Create and finish a tape */
175 /* ************************ */
176 sprintf(tapeEntry[t].name, "TestVolSetName.TestDumpPath.%d",
178 tapeEntry[t].flags = 0;
179 tapeEntry[t].written = 0;
180 tapeEntry[t].expires = 0; /* date tape expires */
181 tapeEntry[t].nMBytes = 0;
182 tapeEntry[t].nBytes = 0;
183 tapeEntry[t].nFiles = 0;
184 tapeEntry[t].nVolumes = 0;
185 tapeEntry[t].seq = (t + 1); /* Tape in sequence */
186 tapeEntry[t].tapeid = 0;
187 tapeEntry[t].useCount = 999; /* Number of time tape is used */
188 tapeEntry[t].useKBytes = 0;
189 tapeEntry[t].dump = dumpEntry[d].id;
191 bcdb_UseTape(&tapeEntry[t], &newTape);
193 printf("Error in bcdb_UseTape call\n");
196 printf(" Created tape %s (%u)\n", tapeEntry[t].name,
199 for (v = 0; v < NVOLUMES; v++) {
200 /* ************************* */
201 /* Create a volume */
202 /* ************************* */
203 sprintf(volumeEntry[v].name, "TestVolumeName.%d",
204 (t * NVOLUMES) + (v + 1));
205 volumeEntry[v].flags =
206 (BUDB_VOL_FIRSTFRAG | BUDB_VOL_LASTFRAG);
207 volumeEntry[v].id = 1234567890; /* volume id */
208 strcpy(volumeEntry[v].server, "");
209 volumeEntry[v].partition = 0;
210 volumeEntry[v].tapeSeq = 0;
211 volumeEntry[v].position = v + 2; /* positin on tape */
212 volumeEntry[v].clone = 0; /* clone date */
213 volumeEntry[v].incTime = 0;
214 volumeEntry[v].startByte = 0;
215 volumeEntry[v].nBytes = (v + 1) * 100000; /* vary size of volume */
216 volumeEntry[v].seq = 1; /* The first fragment */
217 volumeEntry[v].dump = dumpEntry[d].id; /* the dump id */
218 strcpy(volumeEntry[v].tape, tapeEntry[t].name); /* the tape name */
220 code = bcdb_AddVolume(&volumeEntry[v]);
222 printf("Error in bcdb_AddVolume call\n");
225 printf(" Added volume %s\n", volumeEntry[v].name);
228 tapeEntry[t].nFiles = 77777;
229 tapeEntry[t].useKBytes = 88888;
230 code = bcdb_FinishTape(&tapeEntry[t]);
232 printf("Error in bcdb_FinishTape call\n");
235 printf(" Finished tape %s (%u)\n", tapeEntry[t].name,
239 code = bcdb_FinishDump(&dumpEntry[d]);
241 printf("Error in bcdb_FinishDump call\n");
244 printf("Finished dump %s (DumpID %u)\n", dumpEntry[d].name,
249 printf("Error in verifyDb call\n");
254 /* ********************************************** */
255 /* Delete one of the dumps - only if not appended */
256 /* ********************************************** */
257 if (!dumpEntry[(pass % NDUMPS)].initialDumpID) {
258 code = deleteDump(dumpEntry[(pass % NDUMPS)].id);
260 printf("Error in deleteDump call\n");
263 printf("Deleted DumpID %u\n", dumpEntry[(pass % NDUMPS)].id);
268 printf("Error in verifyDb call\n");