diff -r 9f5ae1728557 -r db3f5fa34ec7 messagingfw/msgtestfw/TestActions/Base/src/CMtfTestActionResetMessageStore.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingfw/msgtestfw/TestActions/Base/src/CMtfTestActionResetMessageStore.cpp Wed Nov 03 22:41:46 2010 +0530 @@ -0,0 +1,213 @@ +// Copyright (c) 2003-2009 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: +// __ACTION_INFO_BEGIN__ +// [Action Name] +// ResetMessageStore +// [Action Parameters] +// Session : Reference to the session. +// [Action Description] +// Deletes all entries in the message folder. If an entry cannot be deleted ignores the entry. +// After deleting all entries that can be deleted reads msgs.rsc and checks that the structure +// provided in msgs.rsc is the same as the message store. +// [APIs Used] +// none. +// __ACTION_INFO_END__ +// +// + +/** + @file +*/ + + + +#include +#include +#include +#include +#include + +#include "CMtfAsyncWaiter.h" + +#include +#include "messagingtestutility.h" +#include + +#include "CMtfTestActionResetMessageStore.h" +#include "CMtfTestCase.h" +#include "CMtfTestActionParameters.h" + +_LIT(KServerResourceFile,"z:\\resource\\messaging\\msgs.rsc"); + +_LIT(KStoreInitFileName, "c:\\private\\1000484b\\StoreInit.tmp"); + +CMtfTestAction* CMtfTestActionResetMessageStore::NewL(CMtfTestCase& aTestCase,CMtfTestActionParameters* aActionParameters) + { + CMtfTestActionResetMessageStore* self = new (ELeave) CMtfTestActionResetMessageStore(aTestCase); + CleanupStack::PushL(self); + self->ConstructL(aActionParameters); + CleanupStack::Pop(); + return self; + } + + +CMtfTestActionResetMessageStore::CMtfTestActionResetMessageStore(CMtfTestCase& aTestCase) + : CMtfTestAction(aTestCase) + { + } + + +CMtfTestActionResetMessageStore::~CMtfTestActionResetMessageStore() + { + } + + +void CMtfTestActionResetMessageStore::ExecuteActionL() + { + TestCase().INFO_PRINTF2(_L("Test Action %S start..."), &KTestActionResetMessageStore); + iSession = ObtainParameterReferenceL(TestCase(),ActionParameters().Parameter(0)); + + iDeleteAllChildren = new (ELeave) CMtfTestActionUtilsDeleteAllChildren(iSession,KMsvRootIndexEntryId); + iDeleteAllChildren->StartL(iStatus); + CActiveScheduler::Add(this); + SetActive(); + TestCase().INFO_PRINTF2(_L("Test Action %S completed."), &KTestActionResetMessageStore); + } + + +void CMtfTestActionResetMessageStore::DoCancel() + { + iDeleteAllChildren->Cancel(); + } + +void CMtfTestActionResetMessageStore::RunL() + { + TInt undeleted = iDeleteAllChildren->Undeleted(); + delete iDeleteAllChildren; + + User::LeaveIfError(iStatus.Int()); + + RFs fs; + User::LeaveIfError(fs.Connect()); + + TFileName fileName; + TParse parse; + parse.Set(KServerResourceFile,&fileName,NULL); + fileName = parse.FullName(); + BaflUtils::NearestLanguageFile(fs, fileName); + + RResourceFile resource; + resource.OpenL(fs,fileName); + CleanupClosePushL(resource); + + TResourceReader reader; + HBufC8* buf = resource.AllocReadLC(R_SERVER_INDEX_STARTUP); + reader.SetBuffer(buf); + + const TInt numberOfEntries = reader.ReadInt16(); + if (undeleted != numberOfEntries) + User::Leave(KErrGeneral); + + RMessagingTestUtilityServer ts; + User::LeaveIfError(ts.Connect()); + CleanupClosePushL(ts); + // delete "StoreInit.tmp" + ts.DeleteFile(KStoreInitFileName); + CleanupStack::PopAndDestroy(&ts); + + // central repository cleanup + CEmailAccounts* accounts = CEmailAccounts::NewLC(); + + // delete pop3 accounts + RArray pop3Accounts; + CleanupClosePushL(pop3Accounts); + accounts->GetPopAccountsL(pop3Accounts); + for (TInt i=0; iDeletePopAccountL(pop3Accounts[i]); + } + + // delete imap4 accounts + RArray imap4Accounts; + CleanupClosePushL(imap4Accounts); + accounts->GetImapAccountsL(imap4Accounts); + for (TInt j=0; jDeleteImapAccountL(imap4Accounts[j]); + } + + // delete smtp accounts + RArray smtpAccounts; + CleanupClosePushL(smtpAccounts); + accounts->GetSmtpAccountsL(smtpAccounts); + for (TInt k=0; kDeleteSmtpAccountL(smtpAccounts[k]); + } + + CleanupStack::PopAndDestroy(4, accounts); + + for (TInt i=0; iGetEntryL(id); + CleanupStack::PushL(clientEntry); + + + if (clientEntry->HasStoreL()) + { + CMsvStore* store = clientEntry->EditStoreL(); + CleanupStack::PushL(store); + + MMsvAttachmentManager& attManager = store->AttachmentManagerL(); + TInt count = attManager.AttachmentCount(); + CMtfAsyncWaiter* waiter = CMtfAsyncWaiter::NewL(); + CleanupStack::PushL(waiter); + for( TInt i=0; iiStatus ); + waiter->StartAndWait(); + User::LeaveIfError(waiter->Result()); + } + store->CommitL(); + CleanupStack::PopAndDestroy(waiter); + + store->DeleteL(); + CleanupStack::PopAndDestroy(store); + } + + TMsvEntry indexEntry = clientEntry->Entry(); + + if (!((indexEntry.Parent() == reader.ReadInt32()) && + (indexEntry.iServiceId == reader.ReadInt32()) && + (indexEntry.iType.iUid == reader.ReadInt32()) && + (indexEntry.iMtm.iUid == reader.ReadInt32()) && +// (indexEntry.iData == reader.ReadInt32()) && + ((reader.ReadInt32()) | 1) && + (!indexEntry.iDescription.Compare(reader.ReadTPtrC())) && + (!indexEntry.iDetails.Compare(reader.ReadTPtrC())))) + User::Leave(KErrGeneral); + + CleanupStack::PopAndDestroy(clientEntry); + } + + CleanupStack::PopAndDestroy(buf); + CleanupStack::PopAndDestroy(); // resource + + fs.Close(); + TestCase().INFO_PRINTF1(_L("CMtfTestActionResetMessageStore completed")); + TestCase().ActionCompletedL(*this); + } +