diff -r 000000000000 -r 72b543305e3a mobilemessaging/smsmtm/test/src/t_smsbiofication.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mobilemessaging/smsmtm/test/src/t_smsbiofication.cpp Thu Dec 17 08:44:11 2009 +0200 @@ -0,0 +1,630 @@ +// Copyright (c) 1999-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: +// + +#include +#include +#include +#include +#include +#include "t_smsbiofication.h" +#include +#include + +RTest test(_L("T_SmsBiofication Testrig")); +CTrapCleanup* theCleanup; + +_LIT(KBioficationScript, "biofication.script"); +_LIT(KSmsTestFolderDetails, "Test folder"); +_LIT(KSmsTestFolderDescription, "Copied or moved message folder"); + + +CSmsBioficationTest* CSmsBioficationTest::NewLC(CSmsTestUtils& aSmsTest, const TDesC& aScriptFile, TInt& aNextTest) + { + CSmsBioficationTest* self = new (ELeave) CSmsBioficationTest(aSmsTest, aScriptFile, aNextTest); + CleanupStack::PushL(self); + + self->ConstructL(); + return self; + } + +CSmsBioficationTest::~CSmsBioficationTest() + { + delete iTestSelection; + + iSocket.Close(); + iSocketServ.Close(); + } + +CSmsBioficationTest::CSmsBioficationTest(CSmsTestUtils& aSmsTest, const TDesC& aScriptFile, TInt& aNextTest) +: CSmsTestBase(aSmsTest, aScriptFile, aNextTest), iState(EStateIdle) + { + } + +void CSmsBioficationTest::ConstructL() + { + SetTestNameL(KSmsBioficationTestName); + iSmsTest.SetLogToFile(); + + iSelection = new (ELeave) CMsvEntrySelection(); + iTestSelection = new (ELeave) CMsvEntrySelection(); + iTimer = CTestTimer::NewL(); + + User::LeaveIfError(iSocketServ.Connect()); + TProtocolDesc protoinfo; + TProtocolName protocolname(KSmsDatagram); + User::LeaveIfError(iSocketServ.FindProtocol(protocolname,protoinfo)); + + User::LeaveIfError(iSocket.Open(iSocketServ,protoinfo.iAddrFamily,protoinfo.iSockType,protoinfo.iProtocol)); + TSmsAddr smsaddr; + smsaddr.SetSmsAddrFamily(ESmsAddrSendOnly); + User::LeaveIfError(iSocket.Bind(smsaddr)); + + CActiveScheduler::Add(this); + } + +void CSmsBioficationTest::RunL() + { + CActiveScheduler::Stop(); + + iSmsTest(iStatus.Int() == KErrNone); + + iSmsTest.SetProgressL(*iOperation); + + switch (iState) + { + case EStateEnumerating: + { + RunEnumerateL(); + break; + } + case EStateCopyingToPhoneStore: + { + RunCopyToPhoneStoreL(); + break; + } + case EStateCopyingFromPhoneStore: + case EStateMovingFromPhoneStore: + case EStateDeletingFromPhoneStore: + { + RunCopyMoveDeleteFromPhoneStoreL(); + break; + } + case EStateSending: + { + ChangeMtmUidsL(*iSelection); + break; + } + default: + break; + } + iState=EStateIdle; + } + +void CSmsBioficationTest::DoCancel() + { + if (iOperation) + { + iOperation->Cancel(); + iSmsTest.Printf(_L("Operation Cancelled!\n")); + } + else + { + iSmsTest.Printf(_L("No operation to cancel!\n")); + } + + delete iOperation; + iOperation = NULL; + } + + +void CSmsBioficationTest::TestSetupL() + { + iSmsTest.Test().Next(_L("Test Setup")); + iState=EStateSettingUp; + TFullName name; + TFindProcess find(_L("watcher*")); + while (find.Next(name)==KErrNone) + { + RProcess process; + process.Open(find); + process.Terminate(KErrGeneral); + process.Close(); + } + // Create test folder + MsvEntry().SetEntryL(KMsvDraftEntryId); + TMsvEntry entry; + entry.iServiceId = iSmsTest.iSmsServiceId; + entry.SetVisible(ETrue); + entry.iMtm = KUidMsgTypeSMS; + entry.iDate.HomeTime(); + entry.iType = KUidMsvFolderEntry; + entry.iDetails.Set(KSmsTestFolderDetails); + entry.iDescription.Set(KSmsTestFolderDescription); + MsvEntry().CreateL(entry); + iTestFolderId=MsvEntry().EntryId(); + + TTime now; + now.HomeTime(); + iSmsTest.ReadScriptL(iScriptFile, KMsvNullIndexEntryId, *iSelection, now); + ChangeMtmUidsL(*iSelection); + + iState=EStateIdle; + + /* + User::LeaveIfError(iSocketServ.Connect()); + TProtocolDesc protoinfo; + TProtocolName protocolname(KSmsDatagram); + User::LeaveIfError(iSocketServ.FindProtocol(protocolname,protoinfo)); + + User::LeaveIfError(iSocket.Open(iSocketServ,protoinfo.iAddrFamily,protoinfo.iSockType,protoinfo.iProtocol)); + TSmsAddr smsaddr; + smsaddr.SetSmsAddrFamily(ESmsAddrSendOnly); + User::LeaveIfError(iSocket.Bind(smsaddr)); + */ + } + +void CSmsBioficationTest::TestEnumerateL() + { + iSmsTest.Test().Next(_L("Enumerate Phone Stores")); + iState = EStateEnumerating; + + iTestSelection->Reset(); + iTestSelection->AppendL(iSmsTest.iSmsServiceId); + + delete iOperation; + iOperation = NULL; + iOperation = Session().TransferCommandL(*iTestSelection, ESmsMtmCommandEnumeratePhoneStores, TPtrC8(), iStatus); + SetActive(); + CActiveScheduler::Start(); + } + +void CSmsBioficationTest::TestCopyToPhoneStoreL() + { + iSmsTest.Test().Next(_L("Copy To Phone Store")); + iState = EStateCopyingToPhoneStore; + + delete iTestSelection; + iTestSelection=iSelection->CopyL(); + iTestSelection->InsertL(0,iSmsTest.iSmsServiceId); + + delete iOperation; + iOperation = NULL; + iOperation = Session().TransferCommandL(*iTestSelection, ESmsMtmCommandCopyToPhoneStore, TPtrC8(), iStatus); + SetActive(); + CActiveScheduler::Start(); + } + +void CSmsBioficationTest::TestCopyFromPhoneStoreL() + { + iSmsTest.Test().Next(_L("Copy From Phone Store")); + iState = EStateCopyingFromPhoneStore; + + DeleteEntriesFromTestFolderL(); + + MsvEntry().SetEntryL(iEnumerationFolderId); + + delete iTestSelection; + iTestSelection = MsvEntry().ChildrenL(); + iTestSelection->InsertL(0,iSmsTest.iSmsServiceId); + + TPckgBuf pkg(iTestFolderId); + + delete iOperation; + iOperation = NULL; + iOperation = Session().TransferCommandL(*iTestSelection, ESmsMtmCommandCopyFromPhoneStore, pkg, iStatus); + SetActive(); + CActiveScheduler::Start(); + } + +void CSmsBioficationTest::TestMoveFromPhoneStoreL() + { + iSmsTest.Test().Next(_L("Move From Phone Store")); + iState = EStateMovingFromPhoneStore; + + DeleteEntriesFromTestFolderL(); + + MsvEntry().SetEntryL(iEnumerationFolderId); + delete iTestSelection; + iTestSelection = MsvEntry().ChildrenL(); + iTestSelection->InsertL(0,iSmsTest.iSmsServiceId); + + TPckgBuf pkg(iTestFolderId); + + delete iOperation; + iOperation = NULL; + iOperation = Session().TransferCommandL(*iTestSelection, ESmsMtmCommandMoveFromPhoneStore, pkg, iStatus); + SetActive(); + CActiveScheduler::Start(); + } + +void CSmsBioficationTest::TestDeleteFromPhoneStoreL() + { + iSmsTest.Test().Next(_L("Delete From SIM")); + iState = EStateDeletingFromPhoneStore; + + MsvEntry().SetEntryL(iEnumerationFolderId); + delete iTestSelection; + iTestSelection = MsvEntry().ChildrenL(); + iTestSelection->InsertL(0,iSmsTest.iSmsServiceId); + + delete iOperation; + iOperation = NULL; + iOperation = Session().TransferCommandL(*iTestSelection, ESmsMtmCommandDeleteFromPhoneStore, TPtrC8(), iStatus); + SetActive(); + CActiveScheduler::Start(); + } + +void CSmsBioficationTest::TestSendL() + { + iSmsTest.Test().Next(_L("Send")); + iState = EStateSending; + + iSmsTest.Test().Next(_L("Test Send Entry\n")); + + DeleteEntriesFromTestFolderL(); + + for (TInt i=iSelection->Count()-1; i>=0; i--) + { + MsvEntry().SetEntryL(iSelection->At(i)); + TMsvEntry entry=MsvEntry().Entry(); + if (entry.Parent()!=KMsvGlobalOutBoxIndexEntryId) + iSelection->Delete(i); + else + { + entry.iMtm=KUidMsgTypeSMS; + MsvEntry().ChangeL(entry); + MsvEntry().SetEntryL(KMsvGlobalOutBoxIndexEntryId); + MsvEntry().CopyL(iSelection->At(i),iTestFolderId); + } + } + + MsvEntry().SetEntryL(iTestFolderId); + delete iTestSelection; + iTestSelection = MsvEntry().ChildrenL(); + + delete iOperation; + iOperation = NULL; + iOperation = MsvEntry().CopyL(*iTestSelection, iSmsTest.iSmsServiceId, iStatus); + + SetActive(); + CActiveScheduler::Start(); + } + +void CSmsBioficationTest::TestDeleteEnumerationFolderL() + { + iSmsTest.Test().Next(_L("Test Delete Enumeration Folder\n")); + + iTestSelection->Reset(); + CMsvOperationWait* wait = CMsvOperationWait::NewLC(); + wait->Start(); + + iSmsTest.SetEntryL(iEnumerationFolderId); + iSmsTest.SetEntryL(iSmsTest.Entry().Parent()); + + CMsvOperation* op = iSmsTest.iMsvEntry->DeleteL(iEnumerationFolderId, wait->iStatus); + CleanupStack::PushL(op); + + CActiveScheduler::Start(); + + iSmsTest.Printf(_L("Remote DeleteL() completed with %d\n"), wait->iStatus.Int()); + + User::LeaveIfError(wait->iStatus.Int()); + + iSmsTest.SetProgressL(*op); + + iSmsTest.Printf(_L("Operation completed with %d, msg count %d\n"), iSmsTest.iProgress.iError, iSmsTest.iProgress.iMsgCount); + User::LeaveIfError(iSmsTest.iProgress.iError); + + CleanupStack::PopAndDestroy(2); //wait, op + iState = EStateIdle; + } + + +void CSmsBioficationTest::RunAutoL() + { + iSmsTest.SetLogToConsole(ETrue); + + iSmsTest.TestStart(++iNextTest, _L("Test 1 - Setup")); + TestSetupL(); + User::LeaveIfError(iStatus.Int()); + iSmsTest.TestFinish(iNextTest, KErrNone); + + + + iSmsTest.TestStart(++iNextTest, _L("Test 1 - Enumerate")); + TestEnumerateL(); + User::LeaveIfError(iStatus.Int()); + iSmsTest.TestFinish(iNextTest, KErrNone); + + + + if (iTestSelection->Count()) + { + iSmsTest.TestStart(++iNextTest, _L("Test 1 - Delete From Phone Store")); + TestDeleteFromPhoneStoreL(); + User::LeaveIfError(iStatus.Int()); + iSmsTest.TestFinish(iNextTest, KErrNone); + } + + + + iSmsTest.TestStart(++iNextTest, _L("Test 1 - Enumerate")); + TestEnumerateL(); + User::LeaveIfError(iStatus.Int()); + test(iTestSelection->Count()==0); + iSmsTest.TestFinish(iNextTest, KErrNone); + + const TInt KWaitAfterEnum = 10; + const TInt KWaitAfterSend = 10; + iSmsTest.Printf(_L("Waiting %d seconds after enum...\n"), KWaitAfterEnum); + User::After(KWaitAfterEnum * 1000000); + iSmsTest.Printf(_L("Finished waiting\n")); + + + + iSmsTest.TestStart(++iNextTest, _L("Test 2 - Copy to Phone Store")); + TestCopyToPhoneStoreL(); + User::LeaveIfError(iStatus.Int()); + iSmsTest.TestFinish(iNextTest, KErrNone); + + + + + iSmsTest.TestStart(++iNextTest, _L("Test 2 - Enumerate")); + TestEnumerateL(); + User::LeaveIfError(iStatus.Int()); + test(CompareSelectionsL(*iSelection,*iTestSelection)); + iSmsTest.TestFinish(iNextTest, KErrNone); + + + + iSmsTest.TestStart(++iNextTest, _L("Test 2 - Copy From Phone Store")); + TestCopyFromPhoneStoreL(); + User::LeaveIfError(iStatus.Int()); + test(CompareSelectionsL(*iSelection,*iTestSelection)); + iSmsTest.TestFinish(iNextTest, KErrNone); + + + + iSmsTest.TestStart(++iNextTest, _L("Test 2 - Delete From Phone Store")); + TestDeleteFromPhoneStoreL(); + User::LeaveIfError(iStatus.Int()); + iSmsTest.TestFinish(iNextTest, KErrNone); + + + + iSmsTest.TestStart(++iNextTest, _L("Test 2 - Enumerate")); + TestEnumerateL(); + User::LeaveIfError(iStatus.Int()); + test(iTestSelection->Count()==0); + iSmsTest.TestFinish(iNextTest, KErrNone); + + + + iSmsTest.TestStart(++iNextTest, _L("Test 3 - Send")); + TestSendL(); + User::LeaveIfError(iStatus.Int()); + iSmsTest.TestFinish(iNextTest, KErrNone); + + iSmsTest.Printf(_L("Waiting %d seconds after send...\n"), KWaitAfterSend); + User::After(KWaitAfterSend * 1000000); + iSmsTest.Printf(_L("Finished waiting\n")); + + iSmsTest.TestStart(++iNextTest, _L("Test 2 - Enumerate")); + TestEnumerateL(); + User::LeaveIfError(iStatus.Int()); + test(CompareSelectionsL(*iSelection,*iTestSelection)); + iSmsTest.TestFinish(iNextTest, KErrNone); + + iSmsTest.TestStart(++iNextTest, _L("Test 3 - Move from Phone Store")); + TestMoveFromPhoneStoreL(); + User::LeaveIfError(iStatus.Int()); + test(CompareSelectionsL(*iSelection,*iTestSelection)); + iSmsTest.TestFinish(iNextTest, KErrNone); + + iSmsTest.TestStart(++iNextTest, _L("Test 2 - Enumerate")); + TestEnumerateL(); + User::LeaveIfError(iStatus.Int()); + test(iTestSelection->Count()==0); + iSmsTest.TestFinish(iNextTest, KErrNone); + + iSmsTest.TestStart(++iNextTest, _L("Test 2 - Delete Enumeration Folder")); + TestDeleteEnumerationFolderL(); + User::LeaveIfError(iStatus.Int()); + iSmsTest.TestFinish(iNextTest, KErrNone); + } + +void CSmsBioficationTest::ShowMenuL() + { + } + +void CSmsBioficationTest::DeleteEntriesFromTestFolderL() + { + MsvEntry().SetEntryL(iTestFolderId); + delete iTestSelection; + iTestSelection = MsvEntry().ChildrenL(); + if (iTestSelection->Count()) + { + CMsvOperationWait* wait = CMsvOperationWait::NewLC(); + wait->Start(); + CMsvOperation* op=MsvEntry().DeleteL(*iTestSelection,wait->iStatus); + CleanupStack::PushL(op); + CActiveScheduler::Start(); + User::LeaveIfError(wait->iStatus.Int()); + iSmsTest.SetProgressL(*op); + User::LeaveIfError(iSmsTest.iProgress.iError); + CleanupStack::PopAndDestroy(2); //wait, op + iTestSelection->Reset(); + } + } + +void CSmsBioficationTest::ChangeMtmUidsL(CMsvEntrySelection& aSelection) + { + for (TInt i=0; iAt(j)); + if (thesame) + selection2->Delete(j); + } + CleanupStack::PopAndDestroy(); + } + return thesame; + } + +TBool CSmsBioficationTest::CompareEntriesL(TMsvId aId1, TMsvId aId2) + { + TBool thesame=iSmsTest.AreMessagesSameTextL(aId1,aId2); + if (thesame) + { + MsvEntry().SetEntryL(aId1); + TMsvEntry entry1=MsvEntry().Entry(); + MsvEntry().SetEntryL(aId2); + TMsvEntry entry2=MsvEntry().Entry(); + thesame=(entry1.iBioType==entry2.iBioType) && (entry1.iMtm==entry2.iMtm); + } + return thesame; + } + +void CSmsBioficationTest::RunEnumerateL() + { + TInt err = iStatus.Int(); + + if (err == KErrNone) + { + err = iSmsTest.iProgress.iError; + iStatus = err; + + if (err == KErrNone) + { + iEnumerationFolderId=iSmsTest.iProgress.iEnumerateFolder; + MsvEntry().SetEntryL(iEnumerationFolderId); + delete iTestSelection; + iTestSelection = MsvEntry().ChildrenL(); + + iSmsTest.Printf(_L("%d message(s) on SIM. %d message(s) now contained in folder %d.\n"), iSmsTest.iProgress.iMsgCount, iTestSelection->Count(), iEnumerationFolderId); + iSmsTest.DisplayMessagesL(*iTestSelection); + } + } + + iSmsTest.Printf(_L("Enumerate Phone Store completed with %d\n"), err); + iState = EStateIdle; + + delete iOperation; + iOperation = NULL; + } + +void CSmsBioficationTest::RunCopyToPhoneStoreL() + { + TInt err = iStatus.Int(); + + if (err == KErrNone) + { + err = iSmsTest.iProgress.iError; + } + + iSmsTest.Printf(_L("Copy To SIM completed with error %d\n"), err); + + iState = EStateIdle; + } + +void CSmsBioficationTest::RunCopyMoveDeleteFromPhoneStoreL() + { + TInt err = iStatus.Int(); + + if (err == KErrNone) + { + err = iSmsTest.iProgress.iError; + } + + MsvEntry().SetEntryL(iTestFolderId); + delete iTestSelection; + iTestSelection = MsvEntry().ChildrenL(); + + switch (iState) + { + case EStateCopyingFromPhoneStore: + iSmsTest.Printf(_L("Copy From Phone Store completed with error %d\n"), err); + break; + case EStateMovingFromPhoneStore: + iSmsTest.Printf(_L("Move From Phone Store completed with error %d\n"), err); + break; + case EStateDeletingFromPhoneStore: + iSmsTest.Printf(_L("Delete From Phone Store completed with error %d\n"), err); + break; + default: + break; + } + + iState = EStateIdle; + } + +LOCAL_C void doMainL() + { + CActiveScheduler* iScheduler = new (ELeave) CActiveScheduler; + CleanupStack::PushL(iScheduler); + CActiveScheduler::Install( iScheduler ); + + CSmsTestUtils* smsTest = CSmsTestUtils::NewL(test); + CleanupStack::PushL(smsTest); + TInt nextTest = 0; + + smsTest->NotifySaPhoneOnL(); + + CSmsBioficationTest* bioficationTest = CSmsBioficationTest::NewLC(*smsTest, KBioficationScript, nextTest); + + smsTest->WaitForInitializeL(); + + bioficationTest->StartL(); + + CleanupStack::PopAndDestroy(3); //bioficationTest, smsTest, iScheduler + } + +GLDEF_C TInt E32Main() + { + __UHEAP_MARK; + test.Start(_L("Setup")); + theCleanup = CTrapCleanup::New(); + TRAPD(ret,doMainL()); + test(ret==KErrNone); + delete theCleanup; + test.Console()->SetPos(0, 13); + test.End(); + test.Close(); + __UHEAP_MARKEND; + return(KErrNone); + } +