Update contrib.
1 // Copyright (c) 1998-2009 Nokia Corporation and/or its subsidiary(-ies).
2 // All rights reserved.
3 // This component and the accompanying materials are made available
4 // under the terms of "Eclipse Public License v1.0"
5 // which accompanies this distribution, and is available
6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
8 // Initial Contributors:
9 // Nokia Corporation - initial contribution.
16 // MSVC++ up to 5.0 has problems with expanding inline functions
17 // This disables the mad warnings for the whole project
18 #if defined(NDEBUG) && defined(__VC32__) && _MSC_VER<=1100
19 #pragma warning(disable : 4710) // function not expanded. MSVC 5.0 is stupid
34 #undef __UHEAP_MARKEND
35 #define __UHEAP_MARKEND
37 #define __UHEAP_CHECK(a)
38 #undef __UHEAP_FAILNEXT
39 #define __UHEAP_FAILNEXT(a)
41 LOCAL_D TDBMS_CRCChecks TheCrcChecker;
43 #ifndef __linux__ //No CRC test on LINUX
45 const TPtrC KCrcRecord=_L("\\epoc32\\winscw\\c\\dbms-tst\\T_BIG.CRC");
47 const TPtrC KCrcRecord=_L("C:\\dbms-tst\\T_BIG.CRC");
54 void Start(const TDesC& aDes);
60 LOCAL_D RTest test(_L("T_BIG - Test Large DBMS objects"));
61 LOCAL_D CTrapCleanup* TheTrapCleanup;
62 LOCAL_D CFileStore* TheStore;
63 LOCAL_D RDbStoreDatabase TheDatabase;
64 LOCAL_D RDbTable TheTable;
67 const TInt KTestCleanupStack=0x20;
70 const TPtrC KTestDir=_L(".\\dbms-tst\\");
72 const TPtrC KTestDir=_L("C:\\dbms-tst\\");
75 const TPtrC KTestFile=_L("T_BIG.DB");
76 const TPtrC KTableName(_S("table"));
77 const TPtrC KIndexText=_S("text");
78 const TPtrC KIndexInt=_S("int");
79 const TPtrC KColumnText=_S("text");
80 const TPtrC KColumnInt=_S("int");
81 const TPtrC KIncFormat=_S("%5d\r");
82 const TInt KRecords=1000;
83 const TPtrC KOtherTable=_S("extra");
86 static TTimer TheTimer;
88 void TTimer::Start(const TDesC& aDes)
90 test.Printf(_L(" %S: "),&aDes);
91 iTicks=User::FastCounter();
96 TUint ticks = User::FastCounter() - iTicks;
98 test(HAL::Get(HAL::EFastCounterFrequency, freq) == KErrNone);
99 const TInt KMicroSecIn1Sec = 1000000;
100 const TInt KMsIn1Sec = 1000;
101 double v = ((double)ticks * KMicroSecIn1Sec) / (double)freq; TInt v2 = (TInt)v;
102 test.Printf(_L("%d ms\r\n"),v2/KMsIn1Sec);
107 @SYMTestCaseID SYSLIB-DBMS-CT-1309
108 @SYMTestCaseDesc Create the database-in-a-store
109 @SYMTestPriority Medium
110 @SYMTestActions Calls up RDbStoreDatabase::CreateL() function
111 @SYMTestExpectedResults Test must not fail
114 LOCAL_C void CreateDatabaseL()
116 test.Next(_L(" @SYMTestCaseID:SYSLIB-DBMS-CT-1309 "));
117 CFileStore* store=CPermanentFileStore::ReplaceLC(TheFs,KTestFile,EFileRead|EFileWrite);
118 store->SetTypeL(KPermanentFileStoreLayoutUid);
120 id=TheDatabase.CreateL(store);
128 @SYMTestCaseID SYSLIB-DBMS-CT-1310
129 @SYMTestCaseDesc Open the database-in-a-store
130 @SYMTestPriority Medium
131 @SYMTestActions Call up RDbStoreDatabase::OpenL()
132 @SYMTestExpectedResults Test must not fail
135 LOCAL_C void OpenDatabaseL()
137 test.Next(_L(" @SYMTestCaseID:SYSLIB-DBMS-CT-1310 "));
138 CFileStore* store=CPermanentFileStore::OpenLC(TheFs,KTestFile,EFileRead|EFileWrite);
139 TheDatabase.OpenL(store,store->Root());
145 @SYMTestCaseID SYSLIB-DBMS-CT-1311
146 @SYMTestCaseDesc Close the database in store
147 @SYMTestPriority Medium
148 @SYMTestActions Test for RDbStoreDatabase::Close() function
149 @SYMTestExpectedResults Test must not fail
152 LOCAL_C void CloseDatabaseL()
154 test.Next(_L(" @SYMTestCaseID:SYSLIB-DBMS-CT-1311 "));
157 TInt err = TheCrcChecker.GenerateCrcL(KTestFile);
158 test(err == KErrNone);
161 LOCAL_C void CreateTable()
163 CDbColSet *cs=CDbColSet::NewLC();
164 TDbCol col1(KColumnInt,EDbColInt32);
165 col1.iAttributes=TDbCol::ENotNull;
167 TDbCol col2(KColumnText,EDbColText,200/sizeof(TText));
168 col2.iAttributes=TDbCol::ENotNull;
170 test(TheDatabase.CreateTable(KTableName,*cs)==KErrNone);
171 CleanupStack::PopAndDestroy();
174 LOCAL_C void WriteRecords(TInt aCount)
178 for (TInt ii=0;ii<aCount;++ii)
184 TheTable.SetColL(1,jj);
186 TheTable.SetColL(2,text);
192 @SYMTestCaseID SYSLIB-DBMS-CT-1312
193 @SYMTestCaseDesc Create a table in database
194 @SYMTestPriority Medium
195 @SYMTestActions Build a table and write records into the table.Test for commiting the transactions.
196 @SYMTestExpectedResults Test must not fail
199 LOCAL_C void BuildTable(TInt aCount)
201 test.Next(_L(" @SYMTestCaseID:SYSLIB-DBMS-CT-1312 "));
203 TheTimer.Start(_L("build"));
207 test(TheTable.Open(TheDatabase,KTableName)==KErrNone);
208 WriteRecords(aCount);
209 test(TheDatabase.Commit()==KErrNone);
217 @SYMTestCaseID SYSLIB-DBMS-CT-1313
218 @SYMTestCaseDesc Tests for total rows in the rowset
219 @SYMTestPriority Medium
220 @SYMTestActions Iterate through the table.Test for the total numbers of rows available
221 @SYMTestExpectedResults Test must not fail
224 LOCAL_C void IterateL(RDbTable::TPosition aDirection)
226 test.Next(_L(" @SYMTestCaseID:SYSLIB-DBMS-CT-1313 "));
228 TheTimer.Start(_L("iterate"));
231 while (TheTable.GotoL(aDirection))
239 test(cc=TheTable.CountL());
243 @SYMTestCaseID SYSLIB-DBMS-CT-0580
244 @SYMTestCaseDesc Tests the database definition and enquiry functions
245 @SYMTestPriority Medium
246 @SYMTestActions Tests by setting an active index for the table.
247 @SYMTestExpectedResults Test must not fail
250 LOCAL_C void TestIndex(const TDesC& aName,const CDbKey& aKey)
252 test.Next(_L(" @SYMTestCaseID:SYSLIB-DBMS-CT-0580 "));
254 TheTimer.Start(_L("build"));
256 test(TheDatabase.CreateIndex(aName,KTableName,aKey)==KErrNone);
260 test(TheTable.Open(TheDatabase,KTableName)==KErrNone);
261 test(TheTable.SetIndex(aName)==KErrNone);
262 IterateL(TheTable.ENext);
267 @SYMTestCaseID SYSLIB-DBMS-CT-0581
268 @SYMTestCaseDesc Tests the database definition and enquiry functions
269 @SYMTestPriority Medium
270 @SYMTestActions Tests for bookmark which saves the current location of a rowset.
271 @SYMTestExpectedResults Test must not fail
274 LOCAL_C void TestBookmark()
276 test.Start(_L(" @SYMTestCaseID:SYSLIB-DBMS-CT-0581 creating alien bookmark "));
277 CDbColSet* cs=CDbColSet::NewLC();
278 TDbCol col(_L("column"),EDbColUint8);
279 col.iAttributes=TDbCol::ENotNull+TDbCol::EAutoIncrement;
281 test (TheDatabase.CreateTable(KOtherTable,*cs)==KErrNone);
282 CleanupStack::PopAndDestroy();
284 test (extra.Open(TheDatabase,KOtherTable)==KErrNone);
287 TDbBookmark alien=extra.Bookmark();
290 test.Next(_L("Alien bookmark"));
291 test (TheTable.Open(TheDatabase,KTableName)==KErrNone);
292 TRAPD(r,TheTable.GotoL(alien));
293 test (r==KErrNotFound);
294 test (TheTable.SetIndex(KIndexInt)==KErrNone);
295 TRAP(r,TheTable.GotoL(alien));
296 test (r==KErrNotFound);
297 test (TheTable.SetIndex(KIndexText)==KErrNone);
298 TRAP(r,TheTable.GotoL(alien));
299 test (r==KErrNotFound);
301 test.Next(_L("Cross-view bookmarks"));
302 TheTable.LastL(); // indexed view
303 TheTable.PreviousL();
304 TDbBookmark mark=TheTable.Bookmark();
305 test (extra.Open(TheDatabase,KTableName)==KErrNone);
306 TRAP(r,extra.GotoL(mark));
308 test (extra.PreviousL());
309 TRAP(r,TheTable.GotoL(extra.Bookmark()));
313 test.Next(_L("Bookmark persistence"));
315 test (TheTable.Open(TheDatabase,KTableName)==KErrNone);
316 TRAP(r,TheTable.GotoL(mark));
320 test.Next(_L("Delete alien record"));
321 test (extra.Open(TheDatabase,KOtherTable)==KErrNone);
322 TRAP(r, extra.GotoL(mark));
323 test (r==KErrNotFound);
324 TRAP(r,extra.GotoL(alien));
327 TRAP(r,extra.GotoL(alien));
328 test (r==KErrNotFound);
331 test.Next(_L("Delete extra table"));
332 test (TheDatabase.DropTable(KOtherTable)==KErrNone);
333 test (TheTable.Open(TheDatabase,KTableName)==KErrNone);
334 TRAP(r,TheTable.GotoL(alien));
335 test (r==KErrNotFound);
342 @SYMTestCaseID SYSLIB-DBMS-CT-1314
343 @SYMTestCaseDesc Discarding indexes belonging to the table on database
344 @SYMTestPriority Medium
345 @SYMTestActions Tests for RDbIncremental::DropTable(),RDbIncremental::Next() function.
346 @SYMTestExpectedResults Test must not fail
349 LOCAL_C void BreakIndex()
351 test.Next(_L(" @SYMTestCaseID:SYSLIB-DBMS-CT-1314 "));
353 TheTimer.Start(_L("break"));
357 test(drop.DropTable(TheDatabase,KTableName,step)==KErrNone);
358 test(drop.Next(step)==KErrNone);
360 drop.Close(); // abort the drop
361 test(TheDatabase.IsDamaged());
368 @SYMTestCaseID SYSLIB-DBMS-CT-1315
369 @SYMTestCaseDesc Database recovery test
370 @SYMTestPriority Medium
371 @SYMTestActions Calls up RDbStoreDatabase::Recover() function
372 @SYMTestExpectedResults Test must not fail
375 LOCAL_C void Recover()
377 test.Next(_L(" @SYMTestCaseID:SYSLIB-DBMS-CT-1315 "));
379 TheTimer.Start(_L("recover"));
381 test(TheDatabase.Recover()==KErrNone);
385 test(!TheDatabase.IsDamaged());
389 @SYMTestCaseID SYSLIB-DBMS-CT-1316
390 @SYMTestCaseDesc Tests for dropping an index
391 @SYMTestPriority Medium
392 @SYMTestActions Drop an integer and text index from the table. Test for damage of database
393 @SYMTestExpectedResults Test must not fail
396 LOCAL_C void DropIndexes()
398 test.Next(_L(" @SYMTestCaseID:SYSLIB-DBMS-CT-1316 "));
400 TheTimer.Start(_L("drop Int[32]"));
402 test(TheDatabase.DropIndex(KIndexInt,KTableName)==KErrNone);
405 TheTimer.Start(_L("drop Text[200]"));
407 test(TheDatabase.DropIndex(KIndexText,KTableName)==KErrNone);
411 test(!TheDatabase.IsDamaged());
415 @SYMTestCaseID SYSLIB-DBMS-CT-1317
416 @SYMTestCaseDesc Deleting a table from the database
417 @SYMTestPriority Medium
418 @SYMTestActions Delete the rows from the rowset.Check for empty rows in the rowset.
419 @SYMTestExpectedResults Test must not fail
422 LOCAL_C void DeleteTable()
424 test.Next(_L(" @SYMTestCaseID:SYSLIB-DBMS-CT-1317 "));
425 const TInt KTenthRecords=KRecords/10;
427 test (TheTable.Open(TheDatabase,KTableName)==KErrNone);
430 for (ii=0;ii<15;++ii)
436 TDbBookmark mark=TheTable.Bookmark();
438 TheDatabase.Commit();
442 TheTimer.Start(_L("delete table"));
444 test (TheTable.Open(TheDatabase,KTableName)==KErrNone);
446 TheTable.GotoL(mark);
448 for (ii=0;ii<KTenthRecords*2-16;++ii)
454 for (ii=0;ii<KTenthRecords*2;++ii)
456 TheTable.PreviousL();
459 TheTable.BeginningL();
460 for (ii=0;ii<KTenthRecords*3;++ii)
462 for (ii=0;ii<KTenthRecords*2;++ii)
467 for (ii=0;ii<KTenthRecords*2;++ii)
469 TheTable.PreviousL();
472 for (ii=0;ii<KTenthRecords;++ii)
477 for (ii=0;ii<KTenthRecords;++ii)
479 TheTable.PreviousL();
482 test (TheTable.CountL()==0);
483 test (!TheTable.NextL());
484 test (!TheTable.PreviousL());
485 test (TheDatabase.Commit()==KErrNone);
493 @SYMTestCaseID SYSLIB-DBMS-CT-0579
494 @SYMTestCaseDesc Tests the database definition and enquiry functions
495 @SYMTestPriority Medium
496 @SYMTestActions Executes the index and bookmark tests
497 @SYMTestExpectedResults Test must not fail
500 LOCAL_C void BigTestL()
502 test.Start(_L(" @SYMTestCaseID:SYSLIB-DBMS-CT-0579 Table "));
504 BuildTable(KRecords);
505 test(TheTable.Open(TheDatabase,KTableName)==KErrNone);
507 IterateL(TheTable.EPrevious);
508 TheTable.BeginningL();
509 IterateL(TheTable.ENext);
511 IterateL(TheTable.EPrevious);
513 test.Next(_L("Int32 Index"));
514 CDbKey *key=CDbKey::NewLC();
515 key->AddL(KColumnInt);
517 TestIndex(KIndexInt,*key);
518 test.Next(_L("Text[200] Index"));
520 key->AddL(KColumnText);
522 TestIndex(KIndexText,*key);
523 test.Next(_L("Bookmarks"));
525 test.Next(_L("Int32 Index"));
527 TheTimer.Start(_L("drop"));
529 test(TheDatabase.DropIndex(KIndexInt,KTableName)==KErrNone);
534 key->AddL(KColumnInt);
536 TestIndex(KIndexInt,*key);
537 CleanupStack::PopAndDestroy();
538 test.Next(_L("Break & Recover"));
541 test.Next(_L("Drop Indexes"));
543 test.Next(_L("Delete all records"));
550 // Prepare the test directory.
552 LOCAL_C void setupTestDirectory()
554 TInt r=TheFs.Connect();
556 r=TheFs.MkDir(KTestDir);
557 test(r==KErrNone || r==KErrAlreadyExists);
558 r=TheFs.SetSessionPath(KTestDir);
561 // On TOOLS2 - RFs::SetSessionPath() will affect all RFs Sessions,
562 // the two RFs need same session path anyway
564 r=TheCrcChecker.SetSessionPath(KTestDir);
570 // Initialise the cleanup stack.
572 LOCAL_C void setupCleanup()
574 TheTrapCleanup=CTrapCleanup::New();
575 test(TheTrapCleanup!=NULL);
578 for (TInt i=KTestCleanupStack;i>0;i--)\
579 CleanupStack::PushL((TAny*)0);\
580 CleanupStack::Pop(KTestCleanupStack);\
585 LOCAL_C void DeleteDataFile(const TDesC& aFullName)
588 TInt err = fsSession.Connect();
592 if(fsSession.Entry(aFullName, entry) == KErrNone)
594 RDebug::Print(_L("Deleting \"%S\" file.\n"), &aFullName);
595 err = fsSession.SetAtt(aFullName, 0, KEntryAttReadOnly);
598 RDebug::Print(_L("Error %d changing \"%S\" file attributes.\n"), err, &aFullName);
600 err = fsSession.Delete(aFullName);
603 RDebug::Print(_L("Error %d deleting \"%S\" file.\n"), err, &aFullName);
610 RDebug::Print(_L("Error %d connecting file session. File: %S.\n"), err, &aFullName);
614 GLDEF_C TInt E32Main()
617 setupTestDirectory();
621 test.Start(_L("Standard database"));
624 test.Next(_L("Secure database"));
628 // clean up data files used by this test - must be done before call to End() - DEF047652
630 _LIT(KTestDbName, "C:\\dbms-tst\\T_BIG.DB");
632 _LIT(KTestDbName, "T_BIG.DB");
634 ::DeleteDataFile(KTestDbName);
639 TRAPD(lc, err = TheCrcChecker.DumpCrcRecordsL(KCrcRecord));
643 TRAPD(lc, err = TheCrcChecker.ValidateCrcRecordsL(KCrcRecord));
645 TheCrcChecker.ErrorReportL(err, errmsg);
646 RDebug::Print(errmsg);
647 test(err==KErrNone || err==TDBMS_CRCChecks::ECrcCheckOk);
654 delete TheTrapCleanup;