00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
#include <stdio.h>
00022 
#include <string.h>
00023 
00024 
#include "PbProcs.h"
00025 
00026 
VOID
00027 
PbDumpMcb (
00028     IN 
PMCB Mcb
00029     );
00030 
00031 
00032 
00033 
#ifndef SIMULATOR
00034 ULONG 
IoInitIncludeDevices;
00035 
#endif // SIMULATOR
00036 
00037 BOOLEAN 
McbTest();
00038 
00039 
int
00040 main(
00041     
int argc,
00042     
char *argv[]
00043     )
00044 {
00045     
extern ULONG 
IoInitIncludeDevices;
00046     
VOID KiSystemStartup();
00047 
00048     
DbgPrint(
"sizeof(MCB) = %d\n", 
sizeof(
MCB));
00049 
00050     
IoInitIncludeDevices = 0; 
00051                               
00052                               
00053     
TestFunction = 
McbTest;
00054 
00055     
KiSystemStartup();
00056 
00057     
return( 0 );
00058 }
00059 
00060 BOOLEAN
00061 McbTest()
00062 {
00063     BOOLEAN 
TestAddEntry();
00064     BOOLEAN 
TestRemoveEntry();
00065     BOOLEAN 
TestLookupEntry();
00066     BOOLEAN 
TestGetEntry();
00067     BOOLEAN 
TestLookupLastEntry();
00068 
00069     
if (!
TestAddEntry()) {
00070         
return FALSE;
00071     }
00072 
00073     
if (!
TestRemoveEntry()) {
00074         
return FALSE;
00075     }
00076 
00077     
if (!
TestLookupEntry()) {
00078         
return FALSE;
00079     }
00080 
00081     
if (!
TestGetEntry()) {
00082         
return FALSE;
00083     }
00084 
00085     
if (!
TestLookupLastEntry()) {
00086         
return FALSE;
00087     }
00088 
00089     
return TRUE;
00090 
00091 }
00092 
00093 BOOLEAN
00094 TestAddEntry()
00095 {
00096     
MCB Mcb;
00097     ULONG i;
00098     ULONG Vbn,Lbn,Length;
00099 
00100     
DbgPrint(
"\n\n\n>>>> Test PbAddMcbEntry <<<<\n");
00101 
00102     
00103     
00104     
00105     
00106     
00107 
00108     PbInitializeMcb(Mcb, 
NonPagedPool);
00109 
00110     
DbgPrint(
"\nTest 0:|--NewRun--|\n");
00111     
if (!PbAddMcbEntry(Mcb,  0, 1000, 10)) {
DbgPrint(
"Error\n");
return FALSE;}
00112     
PbDumpMcb( Mcb );
00113 
00114     
DbgPrint(
"\nTest --LastRun--|--NewRun--|\n");
00115     
if (!PbAddMcbEntry(Mcb, 10, 1010, 10)) {
DbgPrint(
"Error\n");
return FALSE;}
00116     
PbDumpMcb( Mcb );
00117 
00118     
DbgPrint(
"\nTest --LastRun--||--NewRun--|\n");
00119     
if (!PbAddMcbEntry(Mcb, 20, 2020, 10)) {
DbgPrint(
"Error\n");
return FALSE;}
00120     
PbDumpMcb( Mcb );
00121 
00122     
DbgPrint(
"\nTest --LastRun--|  hole  |--NewRun--|\n");
00123     
if (!PbAddMcbEntry(Mcb, 40, 1040, 10)) {
DbgPrint(
"Error\n");
return FALSE;}
00124     
PbDumpMcb( Mcb );
00125 
00126     
DbgPrint(
"\nTest over writing an existing run\n");
00127     
if (PbAddMcbEntry(Mcb, 40, 1190, 5)) {
DbgPrint(
"Error\n");
return FALSE;}
00128     
if (PbAddMcbEntry(Mcb, 25, 1190, 10)) {
DbgPrint(
"Error\n");
return FALSE;}
00129     
if (PbAddMcbEntry(Mcb, 15, 1190, 10)) {
DbgPrint(
"Error\n");
return FALSE;}
00130 
00131     PbUninitializeMcb(Mcb);
00132 
00133     
00134     
00135     
00136     
00137     
00138 
00139     PbInitializeMcb(Mcb, 
NonPagedPool);
00140 
00141     
DbgPrint(
"\nTest 0:  hole  |--NewRun--|\n");
00142     
if (!PbAddMcbEntry(Mcb, 90, 1090, 10)) {
DbgPrint(
"Error\n");
return FALSE;}
00143     
PbDumpMcb( Mcb );
00144 
00145     
DbgPrint(
"\nTest 0:  hole  |--NewRun--|  hole  |--FollowingRun--\n");
00146     
if (!PbAddMcbEntry(Mcb, 50, 1050, 10)) {
DbgPrint(
"Error\n");
return FALSE;}
00147     
PbDumpMcb( Mcb );
00148 
00149     
DbgPrint(
"\nTest --PreviousRun--|  hole  |--NewRun--|  hole  |--FollowingRun--\n");
00150     
if (!PbAddMcbEntry(Mcb, 70, 1070, 10)) {
DbgPrint(
"Error\n");
return FALSE;}
00151     
PbDumpMcb( Mcb );
00152 
00153     
DbgPrint(
"\nTest --PreviousRun--|--NewRun--|  hole  |--FollowingRun--\n");
00154     
if (!PbAddMcbEntry(Mcb, 60, 1060,  5)) {
DbgPrint(
"Error\n");
return FALSE;}
00155     
PbDumpMcb( Mcb );
00156 
00157     
DbgPrint(
"\nTest --PreviousRun--||--NewRun--|  hole  |--FollowingRun--\n");
00158     
if (!PbAddMcbEntry(Mcb, 80, 1180,  5)) {
DbgPrint(
"Error\n");
return FALSE;}
00159     
PbDumpMcb( Mcb );
00160 
00161     
DbgPrint(
"\nTest 0:|--NewRun--|  hole  |--FollowingRun--\n");
00162     
if (!PbAddMcbEntry(Mcb,  0, 1000, 10)) {
DbgPrint(
"Error\n");
return FALSE;}
00163     
PbDumpMcb( Mcb );
00164 
00165     
DbgPrint(
"\nTest --PreviousRun--|  hole  |--NewRun--|--FollowingRun--\n");
00166     
if (!PbAddMcbEntry(Mcb, 40, 1040, 10)) {
DbgPrint(
"Error\n");
return FALSE;}
00167     
PbDumpMcb( Mcb );
00168 
00169     
DbgPrint(
"\nTest --PreviousRun--|  hole  |--NewRun--||--FollowingRun--\n");
00170     
if (!PbAddMcbEntry(Mcb, 30, 1130, 10)) {
DbgPrint(
"Error\n");
return FALSE;}
00171     
PbDumpMcb( Mcb );
00172 
00173     PbUninitializeMcb(Mcb);
00174 
00175     
00176     
00177     
00178     
00179     
00180 
00181     PbInitializeMcb(Mcb, 
NonPagedPool);
00182     
if (!PbAddMcbEntry(Mcb, 90, 1090, 10)) {
DbgPrint(
"Error\n");
return FALSE;}
00183 
00184     
DbgPrint(
"\nTest 0:  hole  |--NewRun--|--FollowingRun--\n");
00185     
if (!PbAddMcbEntry(Mcb, 80, 1080, 10)) {
DbgPrint(
"Error\n");
return FALSE;}
00186     
PbDumpMcb( Mcb );
00187 
00188     
DbgPrint(
"\nTest 0:  hole  |--NewRun--||--FollowingRun--\n");
00189     
if (!PbAddMcbEntry(Mcb, 70, 1170, 10)) {
DbgPrint(
"Error\n");
return FALSE;}
00190     
PbDumpMcb( Mcb );
00191 
00192     
if (!PbAddMcbEntry(Mcb, 50, 1150, 10)) {
DbgPrint(
"Error\n");
return FALSE;}
00193     
DbgPrint(
"\nTest --PreviousRun--|--NewRun--|--FollowingRun--\n");
00194     
if (!PbAddMcbEntry(Mcb, 60, 1160, 10)) {
DbgPrint(
"Error\n");
return FALSE;}
00195     
PbDumpMcb( Mcb );
00196 
00197     
if (!PbAddMcbEntry(Mcb, 30, 1030, 10)) {
DbgPrint(
"Error\n");
return FALSE;}
00198     
DbgPrint(
"\nTest --PreviousRun--||--NewRun--|--FollowingRun--\n");
00199     
if (!PbAddMcbEntry(Mcb, 40, 1140, 10)) {
DbgPrint(
"Error\n");
return FALSE;}
00200     
PbDumpMcb( Mcb );
00201 
00202     
if (!PbAddMcbEntry(Mcb, 10, 1110, 10)) {
DbgPrint(
"Error\n");
return FALSE;}
00203     
DbgPrint(
"\nTest --PreviousRun--|--NewRun--||--FollowingRun--\n");
00204     
if (!PbAddMcbEntry(Mcb, 20, 1120, 10)) {
DbgPrint(
"Error\n");
return FALSE;}
00205     
PbDumpMcb( Mcb );
00206 
00207     
DbgPrint(
"\nTest 0:|--NewRun--|--FollowingRun--\n");
00208     
if (!PbAddMcbEntry(Mcb,  0, 1100, 10)) {
DbgPrint(
"Error\n");
return FALSE;}
00209     
PbDumpMcb( Mcb );
00210 
00211     PbUninitializeMcb(Mcb);
00212 
00213     
00214     
00215     
00216     
00217     
00218 
00219     PbInitializeMcb(Mcb, 
NonPagedPool);
00220     
if (!PbAddMcbEntry(Mcb, 90, 1090, 10)) {
DbgPrint(
"Error\n");
return FALSE;}
00221 
00222     
if (!PbAddMcbEntry(Mcb, 70, 1070, 10)) {
DbgPrint(
"Error\n");
return FALSE;}
00223     
DbgPrint(
"\nTest --PreviousRun--||--NewRun--||--FollowingRun--\n");
00224     
if (!PbAddMcbEntry(Mcb, 80, 1010, 10)) {
DbgPrint(
"Error\n");
return FALSE;}
00225     
PbDumpMcb( Mcb );
00226 
00227     
DbgPrint(
"\nTest 0:|--NewRun--||--FollowingRun--\n");
00228     
if (!PbAddMcbEntry(Mcb,  0, 1100, 70)) {
DbgPrint(
"Error\n");
return FALSE;}
00229     
PbDumpMcb( Mcb );
00230 
00231     PbUninitializeMcb(Mcb);
00232 
00233     
return TRUE;
00234 
00235 }
00236 
00237 
00238 BOOLEAN
00239 TestRemoveEntry()
00240 {
00241     
MCB Mcb;
00242     ULONG i;
00243     ULONG Vbn,Lbn,Length;
00244 
00245     
DbgPrint(
"\n\n\n>>>> Test PbRemoveMcbEntry <<<<\n");
00246 
00247     PbInitializeMcb(Mcb, 
NonPagedPool);
00248     
if (!PbAddMcbEntry(Mcb, 0, 1000, 100)) {
DbgPrint(
"Error\n");
return FALSE;}
00249 
00250     
DbgPrint(
"\nTest --Previous--|  Hole\n");
00251     PbRemoveMcbEntry(Mcb, 90, 10);
00252     
PbDumpMcb( Mcb );
00253 
00254     
DbgPrint(
"\nTest --Previous--|  Hole  |--Following--\n");
00255     PbRemoveMcbEntry(Mcb, 50, 10);
00256     
PbDumpMcb( Mcb );
00257 
00258     
DbgPrint(
"\nTest --Previous--|  Hole  |--Hole--\n");
00259     PbRemoveMcbEntry(Mcb, 40, 10);
00260     
PbDumpMcb( Mcb );
00261 
00262     
DbgPrint(
"\nTest --hole--|  Hole  |--Following--\n");
00263     PbRemoveMcbEntry(Mcb, 60, 10);
00264     
PbDumpMcb( Mcb );
00265 
00266     
DbgPrint(
"\nTest --hole--|  Hole\n");
00267     PbRemoveMcbEntry(Mcb, 70, 20);
00268     
PbDumpMcb( Mcb );
00269 
00270     
DbgPrint(
"\nTest 0:  Hole  |--Following--\n");
00271     PbRemoveMcbEntry(Mcb, 0, 10);
00272     
PbDumpMcb( Mcb );
00273 
00274     
DbgPrint(
"\nTest over remove\n");
00275     PbRemoveMcbEntry(Mcb, 0, 100);
00276     
PbDumpMcb( Mcb );
00277 
00278     PbUninitializeMcb(Mcb);
00279 
00280 
00281 
00282     PbInitializeMcb(Mcb, 
NonPagedPool);
00283     
if (!PbAddMcbEntry(Mcb, 0, 1000, 100)) {
DbgPrint(
"Error\n");
return FALSE;}
00284 
00285     PbRemoveMcbEntry(Mcb, 10, 10);
00286     
DbgPrint(
"\nTest 0:  Hole |--Hole--\n");
00287     PbRemoveMcbEntry(Mcb,  0, 10);
00288     
PbDumpMcb( Mcb );
00289 
00290     PbRemoveMcbEntry(Mcb, 30, 10);
00291     
DbgPrint(
"\nTest --Hole--|  Hole  |--Hole--\n");
00292     PbRemoveMcbEntry(Mcb, 20, 10);
00293     
PbDumpMcb( Mcb );
00294 
00295     
DbgPrint(
"\nTest over remove\n");
00296     PbRemoveMcbEntry(Mcb, 0, 100);
00297     
PbDumpMcb( Mcb );
00298 
00299     PbUninitializeMcb(Mcb);
00300 
00301 
00302 
00303     PbInitializeMcb(Mcb, 
NonPagedPool);
00304     
if (!PbAddMcbEntry(Mcb, 0, 1000, 100)){
DbgPrint(
"Error\n");
return FALSE;}
00305 
00306     
DbgPrint(
"\nTest 0:  Hole\n");
00307     PbRemoveMcbEntry(Mcb, 0, 100);
00308     
PbDumpMcb( Mcb );
00309 
00310     
if (!PbAddMcbEntry(Mcb,  0, 1000,  30)) {
DbgPrint(
"Error\n");
return FALSE;}
00311     
if (!PbAddMcbEntry(Mcb, 30, 1130,  30)) {
DbgPrint(
"Error\n");
return FALSE;}
00312     
if (!PbAddMcbEntry(Mcb, 60, 1060,  30)) {
DbgPrint(
"Error\n");
return FALSE;}
00313     
if (!PbAddMcbEntry(Mcb, 90, 1190,  10)) {
DbgPrint(
"Error\n");
return FALSE;}
00314 
00315     
DbgPrint(
"\nTest --Previous--|  Hole  |--Index--||--Following--\n");
00316     PbRemoveMcbEntry(Mcb, 30, 10);
00317     
PbDumpMcb( Mcb );
00318 
00319     
DbgPrint(
"\nTest --Hole--|  Hole  |--Index--||--Following--\n");
00320     PbRemoveMcbEntry(Mcb, 40, 10);
00321     
PbDumpMcb( Mcb );
00322 
00323     
DbgPrint(
"\nTest --Previous--||--Index--|  Hole  |--Following--\n");
00324     PbRemoveMcbEntry(Mcb, 80, 10);
00325     
PbDumpMcb( Mcb );
00326 
00327     
DbgPrint(
"\nTest --Previous--||--Index--|  Hole  |--Hole--\n");
00328     PbRemoveMcbEntry(Mcb, 70, 10);
00329     
PbDumpMcb( Mcb );
00330 
00331     
DbgPrint(
"\nTest 0:|--Index--|  Hole  |--Index--||--Following--\n");
00332     PbRemoveMcbEntry(Mcb, 10, 10);
00333     
PbDumpMcb( Mcb );
00334 
00335     
DbgPrint(
"\nTest over remove\n");
00336     PbRemoveMcbEntry(Mcb, 0, 100);
00337     
PbDumpMcb( Mcb );
00338 
00339 
00340 
00341     
if (!PbAddMcbEntry(Mcb,  0, 1000,  30)) {
DbgPrint(
"Error\n");
return FALSE;}
00342     
if (!PbAddMcbEntry(Mcb, 30, 1130,  30)) {
DbgPrint(
"Error\n");
return FALSE;}
00343     
if (!PbAddMcbEntry(Mcb, 60, 1060,  30)) {
DbgPrint(
"Error\n");
return FALSE;}
00344     
if (!PbAddMcbEntry(Mcb, 90, 1190,  10)) {
DbgPrint(
"Error\n");
return FALSE;}
00345 
00346     
DbgPrint(
"\nTest --Previous--||--Index--|  Hole  |--Index--||--Following--\n");
00347     PbRemoveMcbEntry(Mcb, 40, 10);
00348     
PbDumpMcb( Mcb );
00349 
00350     
DbgPrint(
"\nTest 0:|--Index--|  Hole  |--Following--\n");
00351     PbRemoveMcbEntry(Mcb, 20, 10);
00352     
PbDumpMcb( Mcb );
00353 
00354     
DbgPrint(
"\nTest --Previous--||--Index--|  Hole\n");
00355     PbRemoveMcbEntry(Mcb, 80, 20);
00356     
PbDumpMcb( Mcb );
00357 
00358     
DbgPrint(
"\nTest over remove\n");
00359     PbRemoveMcbEntry(Mcb, 0, 100);
00360     
PbDumpMcb( Mcb );
00361 
00362 
00363     
if (!PbAddMcbEntry(Mcb,  0, 1000,  100)){
DbgPrint(
"Error\n");
return FALSE;}
00364 
00365     
DbgPrint(
"\nTest 0:--Index--|  Hole\n");
00366     PbRemoveMcbEntry(Mcb, 50, 50);
00367     
PbDumpMcb( Mcb );
00368 
00369     
DbgPrint(
"\nTest over remove\n");
00370     PbRemoveMcbEntry(Mcb, 0, 100);
00371     
PbDumpMcb( Mcb );
00372 
00373 
00374 
00375     
if (!PbAddMcbEntry(Mcb,  0, 1000,  50)) {
DbgPrint(
"Error\n");
return FALSE;}
00376     
if (!PbAddMcbEntry(Mcb, 50, 1150,  50)) {
DbgPrint(
"Error\n");
return FALSE;}
00377 
00378     
DbgPrint(
"\nTest 0:  hole  |--Index--||--Following--\n");
00379     PbRemoveMcbEntry(Mcb,  0, 20);
00380     
PbDumpMcb( Mcb );
00381 
00382     PbUninitializeMcb(Mcb);
00383 
00384     
return TRUE;
00385 
00386 }
00387 
00388 
00389 BOOLEAN
00390 TestLookupEntry()
00391 {
00392     
MCB Mcb;
00393     ULONG i;
00394     ULONG Vbn,Lbn,Length;
00395 
00396     
DbgPrint(
"\n\n\n>>>> Test PbLookupMcbEntry <<<<\n");
00397 
00398     PbInitializeMcb(Mcb, 
NonPagedPool);
00399 
00400     
for (i =  0; i < 100; i += 30) {
00401         
if (!PbAddMcbEntry(Mcb, i, 1000+i, 10))
00402             {
DbgPrint(
"Add1Error\n");
return FALSE;}
00403     }
00404     
for (i = 10; i < 100; i += 30) {
00405         
if (!PbAddMcbEntry(Mcb, i, 1100+i, 10))
00406             {
DbgPrint(
"Add2Error\n");
return FALSE;}
00407     }
00408 
00409     
PbDumpMcb( Mcb );
00410 
00411     
for (i =  0; i < 100; i += 30) {
00412         
if (!PbLookupMcbEntry(Mcb,i,&Lbn,&Length))
00413             {
DbgPrint(
"Lookup1Error %d\n", i);
return FALSE;}
00414         
if ((Lbn != 1000+i) || (Length != 10))
00415             {
DbgPrint(
"Result1Error %d, %d, %d\n", i, Lbn, Length);
return FALSE;}
00416         
if (!PbLookupMcbEntry(Mcb,i+5,&Lbn,&Length))
00417             {
DbgPrint(
"Lookup2Error %d\n", i);
return FALSE;}
00418         
if ((Lbn != 1000+i+5) || (Length != 5))
00419             {
DbgPrint(
"Result2Error %d, %d, %d\n", i, Lbn, Length);
return FALSE;}
00420     }
00421 
00422     
for (i = 20; i < 100; i += 30) {
00423         
if (!PbLookupMcbEntry(Mcb,i,&Lbn,&Length))
00424             {
DbgPrint(
"Lookup3Error %d\n", i);
return FALSE;}
00425         
if ((Lbn != 0) || (Length != 10))
00426             {
DbgPrint(
"Result3Error %d, %d, %d\n", i, Lbn, Length);
return FALSE;}
00427 
00428         
if (!PbLookupMcbEntry(Mcb,i+5,&Lbn,&Length))
00429             {
DbgPrint(
"Lookup4Error %d\n", i);
return FALSE;}
00430         
if ((Lbn != 0) || (Length != 5)) {
00431             
DbgPrint(
"Result4Error %d", i+5);
00432             
DbgPrint(
", %08lx",   Lbn);
00433             
DbgPrint(
", %08lx\n", Length);
00434             
return FALSE;
00435         }
00436     }
00437 
00438     PbUninitializeMcb(Mcb);
00439 
00440     
return TRUE;
00441 
00442 }
00443 
00444 
00445 BOOLEAN
00446 TestGetEntry()
00447 {
00448     
MCB Mcb;
00449     ULONG i;
00450     ULONG Vbn,Lbn,Length;
00451 
00452     
DbgPrint(
"\n\n\n>>>> TestPbNumberOfRunsInMcb <<<<\n");
00453 
00454     PbInitializeMcb(Mcb, 
NonPagedPool);
00455 
00456     
for (i =  0; i < 100; i += 30) {
00457         
if (!PbAddMcbEntry(Mcb, i, 1000+i, 10))
00458             {
DbgPrint(
"Add1Error\n");
return FALSE;}
00459     }
00460     
for (i = 10; i < 100; i += 30) {
00461         
if (!PbAddMcbEntry(Mcb, i, 1100+i, 10))
00462             {
DbgPrint(
"Add2Error\n");
return FALSE;}
00463     }
00464 
00465     
PbDumpMcb( Mcb );
00466 
00467     i = PbNumberOfRunsInMcb(Mcb);
00468     
if (i != 10) {
DbgPrint(
"Error\n");
return FALSE;}
00469     
for (i = 0; i < 10; i += 1) {
00470         
if (!PbGetNextMcbEntry(Mcb,i,&Vbn,&Lbn,&Length))
00471             {
DbgPrint(
"Error\n");
return FALSE;}
00472         
DbgPrint(
"%d", i);
00473         
DbgPrint(
", %ld", Vbn);
00474         
DbgPrint(
", %ld", Lbn);
00475         
DbgPrint(
", %ld\n", Length);
00476     }
00477 
00478     PbUninitializeMcb(Mcb);
00479 
00480     
return TRUE;
00481 
00482 }
00483 
00484 
00485 BOOLEAN
00486 TestLookupLastEntry()
00487 {
00488     
MCB Mcb;
00489     ULONG i;
00490     ULONG Vbn,Lbn,Length;
00491 
00492 
00493     
DbgPrint(
"\n\n\n>>>> Test PbLookupLastMcbEntry <<<<\n");
00494 
00495     PbInitializeMcb(Mcb, 
NonPagedPool);
00496 
00497     
if (!PbAddMcbEntry(Mcb,  0, 1000, 100)) {
DbgPrint(
"Error\n");
return FALSE;}
00498 
00499     
if (!PbLookupLastMcbEntry(Mcb, &Vbn, &Lbn)) {
DbgPrint(
"Error\n");
return FALSE;}
00500     
if ((Vbn != 99) && (Lbn != 1099)) {
DbgPrint(
"Lookup Error\n");
return FALSE;}
00501 
00502     PbUninitializeMcb(Mcb);
00503 
00504     
return TRUE;
00505 }
00506