/*
* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
* which accompanies this distribution, and is available
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
*
* Description:
* ?description_line
*
*/
// INCLUDES
#include "FT_CPosTp102.h"
#include <EPos_CPosLandmarkDatabase.h>
#include <EPos_CPosLmDatabaseManager.h>
#include "FT_DatabaseUtility.h"
#include <EPos_CPosLmTextCriteria.h>
// ================= MEMBER FUNCTIONS =======================
// ---------------------------------------------------------
// CPosTp102::CloseTest
//
// (other items were commented in a header).
// ---------------------------------------------------------
//
void CPosTp102::CloseTest()
{
iLog->Log(_L("CloseTest"));
TRAPD(err, RemoveAllLmDatabasesL());
if (err != KErrNone) iLog->Log(_L("RemoveAllLmDatabasesL() leaved"));
}
// ---------------------------------------------------------
// CPosTp102::StartL
//
// (other items were commented in a header).
// ---------------------------------------------------------
//
void CPosTp102::StartL()
{
_LIT(KDatabase1, "Tp102_Database1.ldb");
_LIT(KDatabaseUri1, "file://C:Tp102_Database1.ldb");
_LIT(KDatabase1MissingProtocol, "C:Tp102_Database1.ldb");
_LIT(KDatabase1MissingDrive, "Tp102_Database1.ldb");
_LIT(KDatabase1MissingExtension, "C:Tp102_Database1");
_LIT(KDatabase1FullPath, "c:\\private\\100012a5\\DBS_101FE978_Tp102_Database1.ldb");
_LIT(KRemoteDatabaseUri, "http://c:eposlm.ldb");
_LIT(KDatabase3, "C:Tp102_DBMS_Database3.ldb");
_LIT(KDatabaseUri3, "file://C:Tp102_DBMS_Database3.ldb");
// Change here if path to private area ever changes
_LIT(KDatabase4FullPath, "c:\\private\\100012a5\\DBS_101FE978_Tp102_DefaultDatabase.ldb");
_LIT(KDatabase4, "Tp102_DefaultDatabase.ldb");
_LIT(KDatabaseUri4, "file://C:Tp102_DefaultDatabase.ldb");
_LIT(KDatabaseUri5, "file://R:NonExistingDrive.ldb");
#ifdef __WINS__
// D on wins
_LIT(KDbOnMedia, "D:TP102EPOSLM.LDB");
_LIT(KDbOnMediaUri, "file://D:TP102EPOSLM.LDB");
_LIT(KDbOnMedia2, "D:TP102EPOSLM_2.LDB");
_LIT(KDbOnMedia2Uri, "file://D:TP102EPOSLM_2.LDB");
_LIT(KDbOnMedia2MissingDrive, "file://TP102EPOSLM_2.LDB");
#else
_LIT(KDbOnMedia, "F:TP102EPOSLM.LDB");
_LIT(KDbOnMediaUri, "file://F:TP102EPOSLM.LDB");
_LIT(KDbOnMedia2, "F:TP102EPOSLM_2.LDB");
_LIT(KDbOnMedia2Uri, "file://F:TP102EPOSLM_2.LDB");
_LIT(KDbOnMedia2MissingDrive, "file://TP102EPOSLM_2.LDB");
#endif
_LIT(KEmptyURI, "");
iLog->Log(_L("Warning: this test case requires E: drive"));
TInt err=KErrNone;
RemoveAllLmDatabasesL();
// Create defaultdb
CPosLmDatabaseManager* dbManager = CPosLmDatabaseManager::NewL();
CleanupStack::PushL(dbManager);
HPosLmDatabaseInfo* dbInfo4 = HPosLmDatabaseInfo::NewLC(KDatabase4);
dbManager->CreateDatabaseL(*dbInfo4);
CleanupStack::PopAndDestroy(dbInfo4);
dbManager->SetDefaultDatabaseUriL(KDatabase4);
// 1) Remove all landmark db
RemoveAllLmDatabasesL();
// check the count of databases that could not be delted since they were in use
CDesCArray* dbList = dbManager->ListDatabasesLC();
TInt count = dbList->Count();
// 2) Verify no *.ldb files on file system
VerifyNrOfDatabasesL(count);
// 3) Check default db
HBufC* defaultDbUri;
defaultDbUri = dbManager->DefaultDatabaseUriLC();
// 4) List all database, should return 0
VerifyNrOfDatabasesL(count);
// 5) Check that database does not exist
if (dbManager->DatabaseExistsL(KDatabaseUri1))
{
iLog->Log(_L("This database should not exist"));
User::Leave(-1);
}
// 6) Create a new database using db api
HPosLmDatabaseInfo* dbInfo1 = HPosLmDatabaseInfo::NewLC(KDatabase1);
dbManager->CreateDatabaseL(*dbInfo1);
CleanupStack::PopAndDestroy(dbInfo1);
// 7) List dbs, should contain db created in step6
CDesCArray* dbArray = dbManager->ListDatabasesLC();
if (dbArray->Count() != count+1)
{
iLog->Log(_L("Database does not contain the last created db"));
User::Leave(-1);
}
iLog->Log((*dbArray)[0]);
// 8) Check that dabase does not exist
if (!dbManager->DatabaseExistsL(KDatabaseUri1))
{
iLog->Log(_L("This database should exist"));
User::Leave(-1);
}
CleanupStack::PopAndDestroy(dbArray);
// 9)
CPosLandmarkDatabase* db1 = CPosLandmarkDatabase::OpenL(KDatabaseUri1);
CleanupStack::PushL(db1);
if (db1->IsInitializingNeeded())
{
iLog->Log(_L("db1->InitializeL"));
ExecuteAndDeleteLD(db1->InitializeL());
}
CleanupStack::PopAndDestroy(db1);
CleanupStack::PopAndDestroy(defaultDbUri);
// 11) Open the default db
CPosLandmarkDatabase* defaultDatabase = CPosLandmarkDatabase::OpenL();
CleanupStack::PushL(defaultDatabase);
iLog->Log(_L("12) List all databases"));
// 12) List all databases
TInt verifyDbCount = count +2;
VerifyNrOfDatabasesL(verifyDbCount, KDatabaseUri4);
// 13)
iLog->Log(_L("13) Does defaultDB exist"));
if (!dbManager->DatabaseExistsL(KDatabaseUri4))
{
iLog->Log(_L("The default database should have been created"));
User::Leave(-1);
}
// 14) Try to delete the physical file while db is open
// Fix this path
err = iFileSession.Delete(KDatabase4FullPath);
if (err != KErrInUse)
{
iLog->Log(_L("It was possible to delete default db from file system"));
User::Leave(err);
}
CleanupStack::PopAndDestroy(defaultDatabase);
// 15) Create a landmark database using the DBMS API
iLog->Log(_L("15) Create a landmark database using the DBMS API"));
FTDatabaseUtility::CreateDatabaseL(KDatabase3);
// 16)
verifyDbCount = count +3;
VerifyNrOfDatabasesL(verifyDbCount, KDatabaseUri3);
// 17) Create a database on a removable media
iLog->Log(_L("17) Create a database on a removable media"));
HPosLmDatabaseInfo* dbInfoMedia = HPosLmDatabaseInfo::NewLC(KDbOnMedia);
dbManager->CreateDatabaseL(*dbInfoMedia);
CleanupStack::PopAndDestroy(dbInfoMedia);
// 18) Verify database
verifyDbCount = count + 4;
VerifyNrOfDatabasesL(verifyDbCount, KDbOnMediaUri);
// 19) Retrieve the display name for the default db, it should be different from actual the filename
iLog->Log(_L("19) Retrieve the display name for the default db, it should be different from actual the filename"));
HBufC* defUri = dbManager->DefaultDatabaseUriLC();
HPosLmDatabaseInfo* dbInfoReadback = HPosLmDatabaseInfo::NewLC(*defUri);
dbManager->GetDatabaseInfoL(*dbInfoReadback);
TPosLmDatabaseSettings settings = dbInfoReadback->Settings();
TPtrC name1 = settings.DatabaseName();
CleanupStack::PopAndDestroy(dbInfoReadback);
CleanupStack::PopAndDestroy(defUri);
// 20) Set a new db as default
dbManager->SetDefaultDatabaseUriL(KDbOnMediaUri);
// 21) Retrieve the display name for the new default db, should be the same as in step 19
iLog->Log(_L("21) Retrieve the display name for the new default db, should be the same as in step 19"));
dbInfoReadback = HPosLmDatabaseInfo::NewLC(KDbOnMediaUri);
dbManager->GetDatabaseInfoL(*dbInfoReadback);
TPosLmDatabaseSettings settings2 = dbInfoReadback->Settings();
TPtrC name2 = settings2.DatabaseName();
CleanupStack::PopAndDestroy(dbInfoReadback);
if (name1.Compare(name2) != 0)
{
iLog->Log(_L("Names does not match"));
User::Leave(-1);
}
_LIT(KFileColonSlashSlash, "file://");
_LIT(KCColonSomeTestDbDotLdb, "c:SomeTestDb.ldb");
_LIT(KFileColonSlashSlashSomeTestDb2DotLdb, "file://SomeTestDb2.ldb");
_LIT(KCColonSomeTestDb3DotDoc, "c:SomeTestDb3.doc");
_LIT(KEmptyString, "");
_LIT(KFileColonSlahSlashCColonDotLdb, "file://C:.LDB");
_LIT(KVeryLongString, "c:\\SomeVeryLongFilename1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890.ldb");
HPosLmDatabaseInfo* dbInfoFileColonSlashSlash = HPosLmDatabaseInfo::NewLC(KFileColonSlashSlash);
HPosLmDatabaseInfo* dbInfoCColonSomeTestDbDotLdb = HPosLmDatabaseInfo::NewLC(KCColonSomeTestDbDotLdb);
HPosLmDatabaseInfo* dbInfoFileColonSlashSlashSomeTestDb2DotLdb = HPosLmDatabaseInfo::NewLC(KFileColonSlashSlashSomeTestDb2DotLdb);
HPosLmDatabaseInfo* dbInfoCColonSomeTestDb3DotDoc = HPosLmDatabaseInfo::NewLC(KCColonSomeTestDb3DotDoc);
HPosLmDatabaseInfo* dbInfoEmptyString = HPosLmDatabaseInfo::NewLC(KEmptyString);
HPosLmDatabaseInfo* dbInfoFileColonSlahSlashCColonDotLdb = HPosLmDatabaseInfo::NewLC(KFileColonSlahSlashCColonDotLdb);
HPosLmDatabaseInfo* dbInfoVeryLongString = HPosLmDatabaseInfo::NewLC(KVeryLongString);
// 22) Createa db with same name as an existing
dbInfo1 = HPosLmDatabaseInfo::NewLC(KDatabase1);
TRAP(err, dbManager->CreateDatabaseL(*dbInfo1));
CleanupStack::PopAndDestroy(dbInfo1);
if (err != KErrAlreadyExists)
{
iLog->Log(_L("22 Should leave with KErrAlreadyExist"));
User::Leave(err);
}
// 23) Create a new database using the db management API with a nonsense URI
TRAP(err, dbManager->CreateDatabaseL(*dbInfoFileColonSlashSlash));
if (err != KErrArgument)
{
iLog->Log(_L("23 Should leave with KErrArgument"));
User::Leave(err);
}
// 24) Create a new database using the db management API with a URI specifying a remote database
HPosLmDatabaseInfo* dbInfoRem = HPosLmDatabaseInfo::NewLC(KRemoteDatabaseUri);
TRAP(err, dbManager->CreateDatabaseL(*dbInfoRem));
CleanupStack::PopAndDestroy(dbInfoRem);
if (err != KErrNotSupported)
{
iLog->Log(_L("24 Should leave with KErrNotSupported"));
User::Leave(err);
}
// 25) Create a new database using the db management API with a URI with missing protocol
TRAP(err, dbManager->CreateDatabaseL(*dbInfoCColonSomeTestDbDotLdb));
if (err != KErrNone)
{
iLog->Log(_L("25 Should NOT leave"));
User::Leave(err);
}
// 26) Create a new database using the db management API with a URI with missing drive
TRAP(err, dbManager->CreateDatabaseL(*dbInfoFileColonSlashSlashSomeTestDb2DotLdb));
if (err != KErrNone)
{
iLog->Log(_L("26 Should NOT leave"));
User::Leave(err);
}
// 27) Create a new database using the db management API with a URI that does not end with *.ldb
TRAP(err, dbManager->CreateDatabaseL(*dbInfoCColonSomeTestDb3DotDoc));
if (err != KErrArgument)
{
iLog->Log(_L("27 Should leave with KErrArgument"));
User::Leave(err);
}
// 28) Create a new database using the db management API with a URI containing the path to the database file
HPosLmDatabaseInfo* dbInfoUri1 = HPosLmDatabaseInfo::NewLC(KDatabaseUri1);
TRAP(err, dbManager->CreateDatabaseL(*dbInfoUri1));
CleanupStack::PopAndDestroy(dbInfoUri1);
if (err != KErrAlreadyExists)
{
iLog->Log(_L("28 Should leave with KErrAlreadyExist"));
User::Leave(err);
}
// 29) Create a new database using the db management API with an empty URI
TRAP(err, dbManager->CreateDatabaseL(*dbInfoEmptyString));
if (err != KErrArgument)
{
iLog->Log(_L("29 Should leave with KErrArgument"));
User::Leave(err);
}
// 29b) Create a new database using the db management API with an empty URI (containing file://c:.ldb)
TRAP(err, dbManager->CreateDatabaseL(*dbInfoFileColonSlahSlashCColonDotLdb));
if (err != KErrArgument)
{
iLog->Log(_L("29b Should leave with KErrArgument"));
User::Leave(err);
}
// 30) Create a new database using the db management API with a URI that is longer than allowed
TRAP(err, dbManager->CreateDatabaseL(*dbInfoVeryLongString));
if (err != KErrArgument)
{
iLog->Log(_L(" Should leave with KErrArgument"));
User::Leave(err);
}
CleanupStack::PopAndDestroy(dbInfoVeryLongString);
CleanupStack::PopAndDestroy(dbInfoFileColonSlahSlashCColonDotLdb);
CleanupStack::PopAndDestroy(dbInfoEmptyString);
CleanupStack::PopAndDestroy(dbInfoCColonSomeTestDb3DotDoc);
CleanupStack::PopAndDestroy(dbInfoFileColonSlashSlashSomeTestDb2DotLdb);
CleanupStack::PopAndDestroy(dbInfoCColonSomeTestDbDotLdb);
CleanupStack::PopAndDestroy(dbInfoFileColonSlashSlash);
// 31 Try to delete an existing db
dbManager->DeleteDatabaseL(KDatabaseUri1);
// 32) Check that it is deleted from file system
iLog->Log(_L("Trap error below:"));
verifyDbCount = count + 5;
TRAP(err, VerifyNrOfDatabasesL(verifyDbCount, KDatabaseUri1));
if (err != KErrNotFound)
{
iLog->Log(_L("32 Should not be found"));
User::Leave(err);
}
// 33) Delete same file again, according to header file, nothing should happen
// when the file does not exist
TRAP(err, dbManager->DeleteDatabaseL(KDatabaseUri1));
if (err != KErrNone)
{
iLog->Log(_L("33 DeleteDatbaseL, nothing should happen"));
User::Leave(err);
}
iLog->Log(_L("After DeleteDatabaseL"));
CFileMan* fileMan = NULL;
fileMan = CFileMan::NewL(iFileSession);
CleanupStack::PushL(fileMan);
dbInfo1 = HPosLmDatabaseInfo::NewLC(KDatabase1);
dbManager->CreateDatabaseL(*dbInfo1);
CleanupStack::PopAndDestroy(dbInfo1);
verifyDbCount = count +6;
VerifyNrOfDatabasesL(verifyDbCount, KDatabaseUri1);
// 34 Set an existing non-default db to be read-only (attribute found in F32FILE.H)
err = fileMan->Attribs(KDatabase1FullPath, KEntryAttReadOnly, KEntryAttNormal, TTime(0));
if (err != KErrNone)
{
iLog->Log(_L("Attributes could not be changed for KDatabase1FullPath"));
User::Leave(err);
}
// 35) Try to delete db with read only
TRAP(err, dbManager->DeleteDatabaseL(KDatabaseUri1));
if (err != KErrAccessDenied)
{
iLog->Log(_L("35 Err delete of KDatabaseUri1"));
User::Leave(err);
}
// Change back to writeable (attribute found in F32FILE.H)
err = fileMan->Attribs(KDatabase1FullPath, KEntryAttNormal, KEntryAttReadOnly, TTime(0));
if (err != KErrNone)
{
iLog->Log(_L("Attributes could not be changed KDatabase1FullPath"));
User::Leave(err);
}
// 36) Take a read lock on a db by using a search operation
CPosLandmarkDatabase* lmd = CPosLandmarkDatabase::OpenL(KDatabaseUri1);
CleanupStack::PushL(lmd);
if (lmd->IsInitializingNeeded())
{
ExecuteAndDeleteLD(lmd->InitializeL());
}
CPosLandmarkSearch* landmarkSearch = CPosLandmarkSearch::NewL(*lmd);
CleanupStack::PushL(landmarkSearch);
CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
textCriteria->SetTextL(_L("*"));
iOperation = landmarkSearch->StartLandmarkSearchL(*textCriteria, EFalse);
// 37) Try to delete db with read lock
TRAP(err, dbManager->DeleteDatabaseL(KDatabaseUri1));
if (err != KErrInUse)
{
iLog->Log(_L("37) Err delete of Read Locked KDatabaseUri1"));
User::Leave(err);
}
ExecuteAndDeleteLD(iOperation);
// 38) List databases
verifyDbCount = count + 6;
VerifyNrOfDatabasesL(verifyDbCount, KDatabaseUri1);
//39) Take a write lock on a db by trying to delete all landmarks operations
iOperation = lmd->RemoveAllLandmarksL();
// 40) Try to delete db with write lock
TRAP(err, dbManager->DeleteDatabaseL(KDatabaseUri1));
if (err != KErrInUse)
{
iLog->Log(_L("40) Err delete of Write Locked KDatabaseUri1"));
User::Leave(err);
}
ExecuteAndDeleteLD(iOperation);
// 41) List databases
verifyDbCount = count + 6;
VerifyNrOfDatabasesL(verifyDbCount, KDatabaseUri1);
CleanupStack::PopAndDestroy(textCriteria);
CleanupStack::PopAndDestroy(landmarkSearch);
CleanupStack::PopAndDestroy(lmd);
CleanupStack::PopAndDestroy(fileMan);
// 42) Try to delete a non-existing URI
TRAP(err, dbManager->DeleteDatabaseL(_L("c:\\NonsenseURI")));
if (err != KErrArgument)
{
iLog->Log(_L("42: Should leave with KErrArgument11"));
User::Leave(err);
}
// 43) Try to delete a remote URI
TRAP(err, dbManager->DeleteDatabaseL(KRemoteDatabaseUri));
if (err!=KErrNotSupported)
{
iLog->Log(_L("43) Err KRemoteDatabaseUri"));
User::Leave(err);
}
// 44) Try to delete a local db specifying URI with missing protocol
dbManager->DeleteDatabaseL(KDatabase1MissingProtocol);
// 45) List databases
verifyDbCount = count + 5;
VerifyNrOfDatabasesL(verifyDbCount);
// 46) Try to delete a db on removable media excluding drive in URI
// Since the DeleteDatabaseL just returns if the db is not found, verify that no db has been removed
HPosLmDatabaseInfo* dbInfoMedia2 = HPosLmDatabaseInfo::NewLC(KDbOnMedia2);
dbManager->CreateDatabaseL(*dbInfoMedia2);
CleanupStack::PopAndDestroy(dbInfoMedia2);
verifyDbCount = count +6;
VerifyNrOfDatabasesL(verifyDbCount, KDbOnMedia2Uri);
TRAP(err , dbManager->DeleteDatabaseL(KDbOnMedia2MissingDrive));
if (err != KErrNone)
{
TBuf<100> buffe;
buffe.Format(_L("46) Wrong error when deleting KDbOnMedia2MissingDrive, was %d should be %d"), err, KErrNone);
iLog->Log(buffe);
User::Leave(err);
}
verifyDbCount = count + 6;
VerifyNrOfDatabasesL(verifyDbCount, KDbOnMedia2Uri);
// 47) Try to delete a db on c drive excluding drive in URI
iLog->Log(_L("47) Try to delete a db on c drive excluding drive in URI"));
dbInfo1 = HPosLmDatabaseInfo::NewLC(KDatabase1);
TRAP(err, dbManager->CreateDatabaseL(*dbInfo1));
CleanupStack::PopAndDestroy(dbInfo1);
if (err != KErrNone && err != KErrAlreadyExists)
{
iLog->Log(_L("Problem creating file KDatabase1"));
User::Leave(err);
}
TRAP(err, dbManager->DeleteDatabaseL(KDatabase1MissingDrive));
if (err != KErrNone)
{
iLog->Log(_L("Wrong errro when deleting file"));
User::Leave(err);
}
verifyDbCount = count + 6;
VerifyNrOfDatabasesL(verifyDbCount);
dbInfo1 = HPosLmDatabaseInfo::NewLC(KDatabase1);
dbManager->CreateDatabaseL(*dbInfo1);
CleanupStack::PopAndDestroy(dbInfo1);
verifyDbCount = count +7;
VerifyNrOfDatabasesL(verifyDbCount, KDatabaseUri1);
// 48) Try to delete a db with URI that does not end with .ldb
iLog->Log(_L("48) Try to delete a db with URI that does not end with .ldb"));
TRAP(err, dbManager->DeleteDatabaseL(KDatabase1MissingExtension));
if (err != KErrArgument)
{
iLog->Log(_L("48) Wrong error when deleting KDatabase1MissingExtension"));
User::Leave(err);
}
// 49) Try to delete a database with a URI that includes the path to the database
iLog->Log(_L("49) Try to delete a database with a URI that includes the path to the database"));
TRAP(err, dbManager->DeleteDatabaseL(KDatabase1FullPath));
if (err != KErrArgument)
{
iLog->Log(_L("Wrong error when deleting KDatabase1FullPath"));
User::Leave(err);
}
verifyDbCount = count +7;
VerifyNrOfDatabasesL(verifyDbCount);
// 50 Delete with empty URI
iLog->Log(_L("50) "));
TRAP(err, dbManager->DeleteDatabaseL(KEmptyURI));
if (err != KErrArgument)
{
iLog->Log(_L("Wrong error when deleting KEmptyURI"));
User::Leave(err);
}
// 51) Try to delete a db with URI that is longer than allowed
iLog->Log(_L("51) "));
TRAP(err, dbManager->DeleteDatabaseL(_L("SomeVeryLongFilename1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890.ldb")));
if (err != KErrArgument)
{
iLog->Log(_L("Wrong error when deleting long filename file"));
User::Leave(err);
}
// 52) Try to delete the existing default db
iLog->Log(_L("52) "));
dbManager->SetDefaultDatabaseUriL(KDatabase1);
dbManager->DeleteDatabaseL(KDatabase1);
// 53) List databases
iLog->Log(_L("53) "));
verifyDbCount = count +6;
VerifyNrOfDatabasesL(verifyDbCount);
// 54 Create db on drive that does not exist
HPosLmDatabaseInfo* dbInfoUri5 = HPosLmDatabaseInfo::NewLC(KDatabaseUri5);
TRAP(err, dbManager->CreateDatabaseL(*dbInfoUri5));
CleanupStack::PopAndDestroy(dbInfoUri5);
if (err != KErrNotReady)
{
iLog->Log(_L("54) Wrong error when creating db on media that does not exist"));
User::Leave(err);
}
verifyDbCount = count +6;
VerifyNrOfDatabasesL(verifyDbCount);
// 55 Delete db on drive that does not exist
TRAP(err, dbManager->DeleteDatabaseL(KDatabaseUri5));
if (err != KErrNotReady)
{
iLog->Log(_L("55) Wrong error when deleting db on media that does not exist"));
User::Leave(err);
}
_LIT(KLongFileName, "file://C:ABCDEFGHIJKLMNOPQRSTABCDEFGHIJKLMNOPQRSTABCDEFGHIJKLMNOPQRSTABCDEFGHIJKLMNOPQRSTABCDEFGHIJKLMNOPQRST.ldb");
// 56 Create db with long filename
HPosLmDatabaseInfo* dbInfoLong = HPosLmDatabaseInfo::NewLC(KLongFileName);
TRAP(err, dbManager->CreateDatabaseL(*dbInfoLong));
CleanupStack::PopAndDestroy(dbInfoLong);
if (err != KErrArgument)
{
iLog->Log(_L("57) Wrong error when creating db with long filename"));
User::Leave(err);
}
verifyDbCount = count +6;
VerifyNrOfDatabasesL(verifyDbCount);
// 57) Check that database with long filename does not exist
if (dbManager->DatabaseExistsL(KLongFileName))
{
//LogErrorAndLeave(_L("Database with long filename should not exist"));
iLog->Log(_L("57) Database with long filename should not exist"));
User::Leave(-1);
}
// 58) Check error ESLI-6ARN66, delete a db with strange filename
HPosLmDatabaseInfo* dbInfoWeird =
HPosLmDatabaseInfo::NewLC(_L("file://c:!#¤%&()=+`´^¨~'§½-_,;.{}[]$£@0123456789åäöÅÄÖ.ldb"));
dbManager->CreateDatabaseL(*dbInfoWeird);
CleanupStack::PopAndDestroy(dbInfoWeird);
verifyDbCount = count +7;
VerifyNrOfDatabasesL(verifyDbCount);
CleanupStack::PopAndDestroy(dbList);
CleanupStack::PopAndDestroy(dbManager);
TRAP(err, RemoveAllLmDatabasesL());
if (err != KErrNone)
{
iLog->Log(_L("RemoveAllLmDatabasesL should not leave with error"));
User::Leave(err);
}
TestDifferentUrisL();
}
// ---------------------------------------------------------
// CPosTp102::TestDifferentUrisL
//
// (other items were commented in a header).
// ---------------------------------------------------------
//
void CPosTp102::TestDifferentUrisL()
{
iLog->Log(_L("TestDifferentUrisL"));
_LIT(KDbUri1, "file://:://c:::en helt \" sjuk .ldb databas\".ldb.ldb.ldb");
_LIT(KDbUri2, "file://c:en helt sjuk databas.ldb");
_LIT(KDbUri3, "file:///c:en helt sjuk databas.ldb");
_LIT(KDbUri4, "file://c::en helt sjuk databas.ldb");
_LIT(KDbUri5, "file://c:en helt sjuk .ldb databas.ldb");
_LIT(KDbUri6, "file://c:en helt sjuk databas.ldb.ldb.ldb");
_LIT(KDbUri7, "file://c:en helt \" sjuk databas.ldb");
_LIT(KDbUri8, "file://c:en helt < sjuk databas.ldb");
_LIT(KDbUri9, "file://c:en helt > sjuk databas.ldb");
_LIT(KDbUri10, "file://c:en helt | sjuk databas.ldb");
_LIT(KDbUri11, "file://c:en helt / sjuk databas.ldb");
_LIT(KDbUri12, "file://c:en helt ? sjuk databas.ldb");
_LIT(KDbUri13, "file://c:en helt \\ sjuk databas.ldb");
_LIT(KDbUri14, "file://c:en helt : sjuk databas.ldb");
// Below tested separately in step 58)
//_LIT(KDbUri15, "file://c:!#¤%&()=+`´^¨~'§½-_,;.{}[]$£@0123456789åäöÅÄÖ.ldb");
_LIT(KDbUri16, "file://c:qwertyuiopasdfghjklzxcvbnmQWERTYUIOPLKJHGFDSAZXCVBNM.ldb");
_LIT(KDbUri17, "file://en otroligt helt sjuk databas.ldb");
_LIT(KDbUri18, "c:en helsjuk databas.ldb");
_LIT(KDbUri19, "file://c:\\system\\data\\en helt sjuk databas.ldb");
_LIT(KDbUri20, "file://c:.ldb");
_LIT(KDbUri21, "file://c:filename");
_LIT(KDbUri22, "file://c:filename.dip");
_LIT(KDbUri23, "file://c:filename. ldb");
_LIT(KDbUri24, "file://c:*.ldb");
_LIT(KDbUri25, "file://allan:en helt sjuk databas.ldb");
_LIT(KDbUri26, "file://g:en helt sjuk databas.ldb");
_LIT(KDbUri27, "file://c:filename.ldb");
_LIT(KDbUri28, "file://c:012345678901234567890123456789012345678901234567890123456789.ldb");
const TInt KNrOfUris = 8;
const TDesC* listOfUris[] = {&KDbUri2, &KDbUri5, &KDbUri6
, &KDbUri16 , &KDbUri17, &KDbUri18
, &KDbUri27, &KDbUri28
};
/* &KDbUri1*/
const TInt KNrOfNonWorkingUris = 19;
const TDesC* listOfUrisNonWorking[] = {&KDbUri1, &KDbUri3 ,&KDbUri4, &KDbUri7, &KDbUri8, &KDbUri9
, &KDbUri10, &KDbUri11, &KDbUri12, &KDbUri13, &KDbUri14, &KDbUri19, &KDbUri20, &KDbUri21
, &KDbUri22, &KDbUri23, &KDbUri24, &KDbUri25, &KDbUri26};
TInt errorList[] = {KErrArgument, KErrBadName, KErrBadName, KErrBadName, KErrBadName ,KErrBadName,KErrBadName,
KErrBadName, KErrBadName, KErrArgument, KErrBadName, KErrArgument, KErrArgument,
KErrArgument, KErrArgument,KErrArgument, KErrBadName, KErrBadName, KErrNotReady};
CPosLmDatabaseManager* dbManager = CPosLmDatabaseManager::NewL();
CleanupStack::PushL(dbManager);
RemoveAllLmDatabasesL();
TBuf<100> buf;
// get the count of dbs that have notbeen deleted isnce they are in use
CDesCArray* dbArray1 = dbManager->ListDatabasesLC();
TInt count = dbArray1->Count();
TInt verifyDbcount;
for (TInt i=0;i<KNrOfUris;i++)
{
HPosLmDatabaseInfo* dbInfo = HPosLmDatabaseInfo::NewLC(*listOfUris[i]);
iLog->Log(_L("Creating db:"));
iLog->Log(*listOfUris[i]);
TRAPD(err, dbManager->CreateDatabaseL(*dbInfo));
if (err != KErrNone)
{
buf.Format(_L("Failed with err %d"), err);
iLog->Log(buf);
User::Leave(err);
}
else
{
iLog->Log(_L("Db created..."));
}
CleanupStack::PopAndDestroy(dbInfo);
verifyDbcount = count + i+1;
VerifyNrOfDatabasesL(verifyDbcount);
CDesCArray* dbArray = dbManager->ListDatabasesLC();
TInt nr = dbArray->Count();
buf.Format(_L("DB count %d"), nr);
iLog->Log(buf);
CleanupStack::PopAndDestroy(dbArray);
}
for (TInt i=0;i<KNrOfNonWorkingUris;i++)
{
HPosLmDatabaseInfo* dbInfo = HPosLmDatabaseInfo::NewLC(*listOfUrisNonWorking[i]);
iLog->Log(_L("Trying to create db:"));
iLog->Log(*listOfUrisNonWorking[i]);
TRAPD(err, dbManager->CreateDatabaseL(*dbInfo));
if (err != errorList[i])
{
buf.Format(_L("Failed with err %d should be %d"), err, errorList[i]);
iLog->Log(buf);
iLog->Log(buf);
User::Leave(err);
}
CleanupStack::PopAndDestroy(dbInfo);
verifyDbcount = count + KNrOfUris;
VerifyNrOfDatabasesL(verifyDbcount);
}
CleanupStack::PopAndDestroy(dbArray1);
CleanupStack::PopAndDestroy(dbManager);
iLog->Log(_L("TestDifferentUrisL"));
}
// ---------------------------------------------------------
// CPosTp102::VerifyNrOfDatabasesL
//
// (other items were commented in a header).
// ---------------------------------------------------------
//
void CPosTp102::VerifyNrOfDatabasesL(TInt aExpNrOfDatabases, const TDesC& aDatabaseUri)
{
iLog->Log(_L("VerifyNrOfDatabasesL"));
CPosLmDatabaseManager* dbManager = CPosLmDatabaseManager::NewL();
CleanupStack::PushL(dbManager);
CDesCArray* dbArray = dbManager->ListDatabasesLC();
TInt nr = dbArray->Count();
if (nr != aExpNrOfDatabases)
{
CleanupStack::PopAndDestroy(dbArray);
CleanupStack::PopAndDestroy(dbManager);
TBuf<100> buf;
buf.Format(_L("Wrong number of databases, was %d, should be %d"), nr, aExpNrOfDatabases);
iLog->Log(buf);
User::Leave(-1);
}
TBool found = EFalse;
if (aDatabaseUri != KNullDesC)
{
for (TInt i=0;i<nr;i++)
{
iLog->Log((*dbArray)[i]);
if ((*dbArray)[i].Compare(aDatabaseUri) == KErrNone)
{
found = ETrue;
}
}
}
CleanupStack::PopAndDestroy(dbArray);
CleanupStack::PopAndDestroy(dbManager);
if (aDatabaseUri != KNullDesC && !found)
{
iLog->Log(_L("Database was not found"));
User::Leave(KErrNotFound);
}
}
// End of File