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 <afs/param.h>
14 #include <afsconfig.h>
19 #include <afs/budb_client.h>
21 #include <rx/rx_globals.h>
23 extern struct udbHandleS udbHandle;
25 #define ERROR(code) {err = code; printf(" - Got error %d.\n", err); goto error;}
27 int connect_buserver()
31 struct ubik_client *cstruct;
35 * Setup RX connection and establish connection with the buserver
37 code = rx_Init(htons(0));
40 printf("Error in rx_Init call\n");
50 code = udbClientInit(0, 0, cellName);
53 printf("Error in udbClientInit call\n");
58 code = ubik_Call (BUDB_T_GetVersion, udbHandle.uh_client, 0, &version);
61 printf("Error in ubik_Call to BUDB_T_GetVersion\n");
64 printf("BUDB Server Version = %d\n", version);
73 afs_int32 status, orphans, host;
75 code = ubik_Call(BUDB_DbVerify, udbHandle.uh_client, 0, &status, &orphans, &host);
78 printf("Error in ubik_Call to BUDB_DbVerify\n");
82 if (!status) printf("DATABASE OK ");
83 else printf("DATABASE NOT OK ");
84 printf("- orphans %d; host %d.%d.%d.%d\n", orphans,
85 ((host&0xFF000000)>>24), ((host&0xFF0000)>>16), ((host&0xFF00)>>8), (host&0xFF));
91 int deleteDump(dumpID)
97 dumps.budb_dumpsList_len = 0;
98 dumps.budb_dumpsList_val = 0;
100 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();
122 printf("Error in connect_buserver call\n");
126 for (pass=0; pass<NPASS; pass++)
128 printf("PASS %d\n", pass+1);
131 for (d=0; d<NDUMPS; d++)
133 /* ************************ */
134 /* Create and finish a dump */
135 /* ************************ */
137 dumpEntry[d].parent = 0;
138 dumpEntry[d].level = 0;
139 dumpEntry[d].flags = 0;
140 strcpy(dumpEntry[d].volumeSetName, "TestVolSetName");
141 strcpy(dumpEntry[d].dumpPath, "/TestDumpPath");
142 strcpy(dumpEntry[d].name, "TestVolSetName.TestDumpPath");
143 dumpEntry[d].created = 0;
144 dumpEntry[d].incTime = 0;
145 dumpEntry[d].nVolumes = 0;
146 dumpEntry[d].tapes.id = 0;
147 strcpy(dumpEntry[d].tapes.tapeServer, "");
148 strcpy(dumpEntry[d].tapes.format, "TestVolSetName.TestDumpPath.%d");
149 dumpEntry[d].tapes.maxTapes = 1;
150 dumpEntry[d].tapes.a = 0;
151 dumpEntry[d].tapes.b = 1;
152 strcpy(dumpEntry[d].dumper.name, "admin");
153 strcpy(dumpEntry[d].dumper.instance, "");
154 strcpy(dumpEntry[d].dumper.cell, "");
155 dumpEntry[d].initialDumpID = 0;
156 if (d == 1) dumpEntry[d].initialDumpID = dumpEntry[0].id;
157 dumpEntry[d].appendedDumpID = 0;
159 code = bcdb_CreateDump(&dumpEntry[d]);
162 printf("Error in bcdb_CreateDump call\n");
165 printf("\nCreated dump %s (DumpID %u)\n", dumpEntry[d].name, dumpEntry[d].id);
167 for (t=0; t<NTAPES; t++)
169 /* ************************ */
170 /* Create and finish a tape */
171 /* ************************ */
172 sprintf(tapeEntry[t].name, "TestVolSetName.TestDumpPath.%d", t+1);
173 tapeEntry[t].flags = 0;
174 tapeEntry[t].written = 0;
175 tapeEntry[t].expires = 0; /* date tape expires */
176 tapeEntry[t].nMBytes = 0;
177 tapeEntry[t].nBytes = 0;
178 tapeEntry[t].nFiles = 0;
179 tapeEntry[t].nVolumes = 0;
180 tapeEntry[t].seq = (t+1); /* Tape in sequence */
181 tapeEntry[t].tapeid = 0;
182 tapeEntry[t].useCount = 999; /* Number of time tape is used */
183 tapeEntry[t].useKBytes = 0;
184 tapeEntry[t].dump = dumpEntry[d].id;
186 bcdb_UseTape(&tapeEntry[t], &newTape);
189 printf("Error in bcdb_UseTape call\n");
192 printf(" Created tape %s (%u)\n", tapeEntry[t].name, tapeEntry[t].dump);
194 for (v=0; v<NVOLUMES; v++)
196 /* ************************* */
197 /* Create a volume */
198 /* ************************* */
199 sprintf(volumeEntry[v].name, "TestVolumeName.%d", (t*NVOLUMES)+(v+1));
200 volumeEntry[v].flags = (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]);
217 printf("Error in bcdb_AddVolume call\n");
220 printf(" Added volume %s\n", volumeEntry[v].name);
223 tapeEntry[t].nFiles = 77777;
224 tapeEntry[t].useKBytes = 88888;
225 code = bcdb_FinishTape(&tapeEntry[t]);
228 printf("Error in bcdb_FinishTape call\n");
231 printf(" Finished tape %s (%u)\n", tapeEntry[t].name, tapeEntry[t].dump);
234 code = bcdb_FinishDump(&dumpEntry[d]);
237 printf("Error in bcdb_FinishDump call\n");
240 printf("Finished dump %s (DumpID %u)\n", dumpEntry[d].name, dumpEntry[d].id);
245 printf("Error in verifyDb call\n");
250 /* ********************************************** */
251 /* Delete one of the dumps - only if not appended */
252 /* ********************************************** */
253 if (!dumpEntry[(pass%NDUMPS)].initialDumpID)
255 code = deleteDump(dumpEntry[(pass%NDUMPS)].id);
258 printf("Error in deleteDump call\n");
261 printf("Deleted DumpID %u\n", dumpEntry[(pass%NDUMPS)].id);
267 printf("Error in verifyDb call\n");