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 <afs/param.h>
14 #include <afs/budb_client.h>
16 #include <rx/rx_globals.h>
18 extern struct udbHandleS udbHandle;
20 #define ERROR(code) {err = code; printf(" - Got error %d.\n", err); goto error;}
27 struct ubik_client *cstruct;
31 * Setup RX connection and establish connection with the buserver
33 code = rx_Init(htons(0));
35 printf("Error in rx_Init call\n");
45 code = udbClientInit(0, 0, cellName);
47 printf("Error in udbClientInit call\n");
52 code = ubik_BUDB_T_GetVersion(udbHandle.uh_client, 0, &version);
54 printf("Error in ubik_Call to BUDB_T_GetVersion\n");
57 printf("BUDB Server Version = %d\n", version);
67 afs_int32 status, orphans, host;
70 ubik_BUDB_DbVerify(udbHandle.uh_client, 0, &status, &orphans,
73 printf("Error in ubik_Call to BUDB_DbVerify\n");
78 printf("DATABASE OK ");
80 printf("DATABASE NOT OK ");
81 printf("- orphans %d; host %d.%d.%d.%d\n", orphans,
82 ((host & 0xFF000000) >> 24), ((host & 0xFF0000) >> 16),
83 ((host & 0xFF00) >> 8), (host & 0xFF));
96 dumps.budb_dumpsList_len = 0;
97 dumps.budb_dumpsList_val = 0;
99 code = bcdb_deleteDump(dumpID, 0, 0, &dumps);
115 struct budb_dumpEntry dumpEntry[NDUMPS];
116 struct budb_tapeEntry tapeEntry[NTAPES];
117 struct budb_volumeEntry volumeEntry[NVOLUMES];
119 code = connect_buserver();
121 printf("Error in connect_buserver call\n");
125 for (pass = 0; pass < NPASS; pass++) {
126 printf("PASS %d\n", pass + 1);
129 for (d = 0; d < NDUMPS; d++) {
130 /* ************************ */
131 /* Create and finish a dump */
132 /* ************************ */
134 dumpEntry[d].parent = 0;
135 dumpEntry[d].level = 0;
136 dumpEntry[d].flags = 0;
137 strcpy(dumpEntry[d].volumeSetName, "TestVolSetName");
138 strcpy(dumpEntry[d].dumpPath, "/TestDumpPath");
139 strcpy(dumpEntry[d].name, "TestVolSetName.TestDumpPath");
140 dumpEntry[d].created = 0;
141 dumpEntry[d].incTime = 0;
142 dumpEntry[d].nVolumes = 0;
143 dumpEntry[d].tapes.id = 0;
144 strcpy(dumpEntry[d].tapes.tapeServer, "");
145 strcpy(dumpEntry[d].tapes.format,
146 "TestVolSetName.TestDumpPath.%d");
147 dumpEntry[d].tapes.maxTapes = 1;
148 dumpEntry[d].tapes.a = 0;
149 dumpEntry[d].tapes.b = 1;
150 strcpy(dumpEntry[d].dumper.name, "admin");
151 strcpy(dumpEntry[d].dumper.instance, "");
152 strcpy(dumpEntry[d].dumper.cell, "");
153 dumpEntry[d].initialDumpID = 0;
155 dumpEntry[d].initialDumpID = dumpEntry[0].id;
156 dumpEntry[d].appendedDumpID = 0;
158 code = bcdb_CreateDump(&dumpEntry[d]);
160 printf("Error in bcdb_CreateDump call\n");
163 printf("\nCreated dump %s (DumpID %u)\n", dumpEntry[d].name,
166 for (t = 0; t < NTAPES; t++) {
167 /* ************************ */
168 /* Create and finish a tape */
169 /* ************************ */
170 sprintf(tapeEntry[t].name, "TestVolSetName.TestDumpPath.%d",
172 tapeEntry[t].flags = 0;
173 tapeEntry[t].written = 0;
174 tapeEntry[t].expires = 0; /* date tape expires */
175 tapeEntry[t].nMBytes = 0;
176 tapeEntry[t].nBytes = 0;
177 tapeEntry[t].nFiles = 0;
178 tapeEntry[t].nVolumes = 0;
179 tapeEntry[t].seq = (t + 1); /* Tape in sequence */
180 tapeEntry[t].tapeid = 0;
181 tapeEntry[t].useCount = 999; /* Number of time tape is used */
182 tapeEntry[t].useKBytes = 0;
183 tapeEntry[t].dump = dumpEntry[d].id;
185 bcdb_UseTape(&tapeEntry[t], &newTape);
187 printf("Error in bcdb_UseTape call\n");
190 printf(" Created tape %s (%u)\n", tapeEntry[t].name,
193 for (v = 0; v < NVOLUMES; v++) {
194 /* ************************* */
195 /* Create a volume */
196 /* ************************* */
197 sprintf(volumeEntry[v].name, "TestVolumeName.%d",
198 (t * NVOLUMES) + (v + 1));
199 volumeEntry[v].flags =
200 (BUDB_VOL_FIRSTFRAG | BUDB_VOL_LASTFRAG);
201 volumeEntry[v].id = 1234567890; /* volume id */
202 strcpy(volumeEntry[v].server, "");
203 volumeEntry[v].partition = 0;
204 volumeEntry[v].tapeSeq = 0;
205 volumeEntry[v].position = v + 2; /* positin on tape */
206 volumeEntry[v].clone = 0; /* clone date */
207 volumeEntry[v].incTime = 0;
208 volumeEntry[v].startByte = 0;
209 volumeEntry[v].nBytes = (v + 1) * 100000; /* vary size of volume */
210 volumeEntry[v].seq = 1; /* The first fragment */
211 volumeEntry[v].dump = dumpEntry[d].id; /* the dump id */
212 strcpy(volumeEntry[v].tape, tapeEntry[t].name); /* the tape name */
214 code = bcdb_AddVolume(&volumeEntry[v]);
216 printf("Error in bcdb_AddVolume call\n");
219 printf(" Added volume %s\n", volumeEntry[v].name);
222 tapeEntry[t].nFiles = 77777;
223 tapeEntry[t].useKBytes = 88888;
224 code = bcdb_FinishTape(&tapeEntry[t]);
226 printf("Error in bcdb_FinishTape call\n");
229 printf(" Finished tape %s (%u)\n", tapeEntry[t].name,
233 code = bcdb_FinishDump(&dumpEntry[d]);
235 printf("Error in bcdb_FinishDump call\n");
238 printf("Finished dump %s (DumpID %u)\n", dumpEntry[d].name,
243 printf("Error in verifyDb call\n");
248 /* ********************************************** */
249 /* Delete one of the dumps - only if not appended */
250 /* ********************************************** */
251 if (!dumpEntry[(pass % NDUMPS)].initialDumpID) {
252 code = deleteDump(dumpEntry[(pass % NDUMPS)].id);
254 printf("Error in deleteDump call\n");
257 printf("Deleted DumpID %u\n", dumpEntry[(pass % NDUMPS)].id);
262 printf("Error in verifyDb call\n");