diff -r 238255e8b033 -r 84d9eb65b26f messagingappbase/smsmtm/test/src/t_smsdetails.cpp --- a/messagingappbase/smsmtm/test/src/t_smsdetails.cpp Fri Apr 16 14:56:15 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,698 +0,0 @@ -// Copyright (c) 2004-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 "t_smsdetails.h" - -#include -#include -#include -#include -#include -#include -#include -#include - -#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS -#include -#endif - -_LIT(KFailed,"Failed to complete tests."); -_LIT(KRecipientOk, "+447747065441"); // has to be the number of SIM in the data blok -_LIT(KMessageData, "This is a simple text message"); - -_LIT(KFirstName, "Joe"); -_LIT(KLastName, "Bloggs"); -_LIT(KContactInfo, "Joe Bloggs"); - -_LIT(KTestReceiveDetails_1, "Test receive details - number not in contacts database."); -_LIT(KTestReceiveDetails_2, "Test receive details - number in contacts database."); -_LIT(KTestReceiveDetails_3, "Test receive details - number duplicated in contacts database."); - -#if defined (__WINS__) -_LIT(KPddName,"ECDRV"); -_LIT(KLddName,"ECOMM"); -#else //__WINS__ -_LIT(KPddSirName,"ESIR"); -_LIT(KPddUartName,"ECUART4"); -_LIT(KLddName,"ECOMM"); -#endif //__WINS__ - -RTest test(_L("T_SmsDetails Test Harness")); - -const TTimeIntervalMicroSeconds32 KWaitForWatchersToStart = 20000000; -const TTimeIntervalMicroSeconds32 KWaitForWatchersToStartDisplayInterval = 5000000; - -LOCAL_C void DoTestsL() - { -#if defined (__WINS__) - User::LoadPhysicalDevice(KPddName); - User::LoadLogicalDevice(KLddName); -#else //__WINS__ - User::LoadPhysicalDevice(KPddSirName); - User::LoadPhysicalDevice(KPddUartName); - User::LoadLogicalDevice(KLddName); -#endif //__WINS__ - - TInt r = StartC32(); - if( (r != KErrNone) && (r != KErrAlreadyExists) ) - test.Printf(_L("Failed to start C32 %d\n"), r); - - // Create and install the active scheduler - CActiveScheduler* scheduler= new (ELeave) CActiveScheduler(); - CleanupStack::PushL(scheduler); - CActiveScheduler::Install(scheduler); - - // Create the test engine - CTestEngine* testEngine = CTestEngine::NewL(); - CleanupStack::PushL(testEngine); - - // Do tests... - testEngine->DoTestsL(); - - CleanupStack::PopAndDestroy(2, scheduler); - } - -GLDEF_C TInt E32Main() - { - __UHEAP_MARK; - CTrapCleanup* tc=CTrapCleanup::New(); - TRAPD(err,DoTestsL()); - if (err!=KErrNone) - User::Panic(KFailed, err); - delete tc; - test.Close(); - __UHEAP_MARKEND; - return KErrNone; - } - -/* - * CTestEngine - */ - -CTestEngine* CTestEngine::NewL() - { - CTestEngine* self = new (ELeave) CTestEngine(); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - return self; - } - -CTestEngine::~CTestEngine() - { - delete iTestUtils; - delete iWatchers; - - iSocket.Close(); - iSocketServ.Close(); - } - -CTestEngine::CTestEngine() -: CBase() - { - } - -void CTestEngine::DoTestsL() - { - CTestDetailsBase* testCase = NULL; - - testCase = CTestReceiveDetails_1::NewL(*iTestUtils, *this); - RunTestCaseL(*testCase); - - testCase = CTestReceiveDetails_2::NewL(*iTestUtils, *this); - RunTestCaseL(*testCase); - - testCase = CTestReceiveDetails_3::NewL(*iTestUtils, *this); - RunTestCaseL(*testCase); - - if( iTestFailCount > 0 ) - iTestUtils->Printf(_L("Test Complete -> %d Failures\n"), iTestFailCount); - else - iTestUtils->Printf(_L("Test Complete -> Passed\n")); - } - -void CTestEngine::RunTestCaseL(CTestDetailsBase& aTestCase) - { - CleanupStack::PushL(&aTestCase); - aTestCase.Start(); - CActiveScheduler::Start(); - CleanupStack::PopAndDestroy(&aTestCase); - } - -void CTestEngine::ConstructL() - { - // This should create the SMS service, including the service settings. - iTestUtils = CSmsTestUtils::NewL(test); - - // Remove the contacts database file - iTestUtils->DeleteContactsFileL(); - - // Notify the system agent that the phone is on. - iTestUtils->NotifySaPhoneOnL(); - - // Tell the tests utils to log to file - iTestUtils->SetLogToFile(); - - // Restore the service settings. - iTestUtils->SetEntryL(iTestUtils->iSmsServiceId); - CSmsAccount* account = CSmsAccount::NewLC(); - account->LoadSettingsL(*iTestUtils->iServiceSettings); - - // Remove the default service centres from the service settings - TInt count = iTestUtils->iServiceSettings->ServiceCenterCount(); - while( count-- ) - { - iTestUtils->iServiceSettings->RemoveServiceCenter(count); - } - - // Add the Vodafone service centre - store the settings. - iTestUtils->iServiceSettings->AddServiceCenterL(_L("Vodafone"), _L("+447785016005")); - - // Set delivery options - do matching and make reports visible. - iTestUtils->iServiceSettings->SetDeliveryReport(ETrue); - iTestUtils->iServiceSettings->SetStatusReportHandling(CSmsSettings::EMoveReportToInboxVisibleAndMatch); - - account->SaveSettingsL(*iTestUtils->iServiceSettings); - CleanupStack::PopAndDestroy(account); - - // Create a session with the SMS stack - note order of the next few things - // is important. - 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)); - - // Initialise phone... - iTestUtils->WaitForInitializeL(); - - // Start watchers... - StartWatcherL(); - } - -TBool CTestEngine::WatchersAlreadyRunningL() - { - RSocketServ server; - RSocket socket; - - User::LeaveIfError(server.Connect()); - CleanupClosePushL(server); - - // test if it's there... - TProtocolDesc protoInfo; - TProtocolName protocolname; - protocolname.Copy(KSmsDatagram); - User::LeaveIfError(server.FindProtocol(protocolname,protoInfo)); - - User::LeaveIfError(socket.Open(server, - protoInfo.iAddrFamily, - protoInfo.iSockType, - protoInfo.iProtocol)); - CleanupClosePushL(socket); - - TSmsAddr addr; - addr.SetSmsAddrFamily(ESmsAddrRecvAny); - TInt err = socket.Bind(addr); - - CleanupStack::Pop(2, &server); - socket.CancelAll(); - socket.Close(); - server.Close(); - return (err == KErrAlreadyExists); - } - -void CTestEngine::StartWatcherL() - { - iTestUtils->Printf(_L("Start the Watcher")); - - if( WatchersAlreadyRunningL() ) - { - iTestUtils->Printf(_L("Watchers are already running\n")); - return; - } - - iWatchers = CTestUtilsWatcherStarter::NewL(); - - TTimeIntervalMicroSeconds32 wait = KWaitForWatchersToStart; - TBool started = EFalse; - while( !started && wait.Int() > 0 ) - { - iTestUtils->Printf(_L("Waiting %d secs for watchers to start...\n"), wait.Int() / 1000000); - wait = wait.Int() - KWaitForWatchersToStartDisplayInterval.Int(); - User::After(KWaitForWatchersToStartDisplayInterval); - started = WatchersAlreadyRunningL(); - } - - if( !WatchersAlreadyRunningL() ) - { - iTestUtils->Printf(_L("WARNING: NBS Watcher has not started yet\n")); - } - } - -// methods from MTestObserver - -void CTestEngine::TestFailed() - { - iTestUtils->Printf(_L("!!Test Failed\n")); - ++iTestFailCount; - CActiveScheduler::Stop(); - } - -void CTestEngine::TestPassed() - { - iTestUtils->Printf(_L("!!Test Complete\n")); - CActiveScheduler::Stop(); - } - -/* - * CTestDetailsBase - */ - -CTestDetailsBase::~CTestDetailsBase() - { - Cancel(); - - delete iEntryForObserver; - delete iOperation; - } - -void CTestDetailsBase::Start() - { - iTestUtils.Printf(_L("Starting %S\n"), &TestName()); - iState = EClearFolders; - CompleteSelf(); - } - -CTestDetailsBase::CTestDetailsBase(CSmsTestUtils& aTestUtils, MTestObserver& aObserver) -: CActive(CActive::EPriorityStandard), iTestUtils(aTestUtils), iObserver(aObserver) - { - CActiveScheduler::Add(this); - } - -void CTestDetailsBase::ConstructL() - { - iEntryForObserver = Session().GetEntryL(KMsvGlobalInBoxIndexEntryId); - } - -void CTestDetailsBase::CompleteSelf() - { - TRequestStatus* pStat = &iStatus; - User::RequestComplete(pStat, KErrNone); - SetActive(); - } - -CMsvSession& CTestDetailsBase::Session() - { - return *iTestUtils.iMsvSession; - } - -CMsvEntry& CTestDetailsBase::MsvEntry() - { - return *iTestUtils.iMsvEntry; - } - -CSmsClientMtm& CTestDetailsBase::Client() - { - return *iTestUtils.iSmsClientMtm; - } - -CSmsSettings& CTestDetailsBase::ServiceSettings() - { - return *iTestUtils.iServiceSettings; - } - -void CTestDetailsBase::Test(TBool aTest) - { - if( !aTest ) - iObserver.TestFailed(); - } - -void CTestDetailsBase::ClearFoldersL() - { - iTestUtils.DeleteSmsMessagesL(KMsvGlobalOutBoxIndexEntryId); - iTestUtils.DeleteSmsMessagesL(KMsvGlobalInBoxIndexEntryId); - iTestUtils.DeleteSmsMessagesL(KMsvSentEntryId); - } - -void CTestDetailsBase::CreateMessageL() - { - iTestUtils.Printf(_L("Creating message...\n")); - - TMsvEntry entry; - entry.SetVisible(ETrue); - entry.SetInPreparation(ETrue); - entry.iServiceId = iTestUtils.iSmsServiceId; - entry.iType = KUidMsvMessageEntry; - entry.iMtm = KUidMsgTypeSMS; - entry.iDate.HomeTime(); - entry.iSize = 0; - entry.iDescription.Set(KNullDesC); - entry.iDetails.Set(KNullDesC); - - // Check send options... - TUint sendState = KMsvSendStateWaiting; - switch( ServiceSettings().Delivery() ) - { - case ESmsDeliveryScheduled: - sendState = KMsvSendStateScheduled; - break; - case ESmsDeliveryUponRequest: - sendState = KMsvSendStateUponRequest; - break; - default: - sendState = KMsvSendStateWaiting; - break; - } - entry.SetSendingState(sendState); - - // Create the SMS header object... - CSmsHeader* header = CSmsHeader::NewL(CSmsPDU::ESmsSubmit, *iTestUtils.iRichText); - CleanupStack::PushL(header); - - // Set the body text... - iTestUtils.iRichText->Reset(); - iTestUtils.iRichText->InsertL(0, KMessageData); - - // Copy the message settings... - header->SetSmsSettingsL(ServiceSettings()); - - // Set the service centre - TInt defaultIndex = ServiceSettings().DefaultServiceCenter(); - header->SetServiceCenterAddressL(ServiceSettings().GetServiceCenter(defaultIndex).Address()); - - // Set recipient - ask derived class - SetRecipientsL(*header); - - // Update entry description and details... - CArrayPtrFlat& recipient = header->Recipients(); - entry.iDetails.Set(recipient[0]->Address()); - entry.iDescription.Set(iTestUtils.iRichText->Read(0, ServiceSettings().DescriptionLength())); - entry.SetInPreparation(EFalse); - - // Create the entry - set context to the global outbox. - MsvEntry().SetEntryL(KMsvGlobalOutBoxIndexEntryId); - MsvEntry().CreateL(entry); - - // Create new store and save header information - MsvEntry().SetEntryL(entry.Id()); - CMsvStore* store = MsvEntry().EditStoreL(); - CleanupStack::PushL(store); - header->StoreL(*store); - store->StoreBodyTextL(*iTestUtils.iRichText); - store->CommitL(); - CleanupStack::PopAndDestroy(2, header); - - iMessageId = entry.Id(); - } - -void CTestDetailsBase::SetRecipientsL(CSmsHeader& aHeader) - { - CSmsNumber* rcpt0 = CSmsNumber::NewL(); - CleanupStack::PushL(rcpt0); - rcpt0->SetAddressL(KRecipientOk); - aHeader.Recipients().AppendL(rcpt0); - CleanupStack::Pop(rcpt0); - } - -void CTestDetailsBase::SendMessageL() - { - iTestUtils.Printf(_L("Sending message %d\n"), iMessageId); - - delete iOperation; - iOperation = NULL; - - CMsvEntrySelection* sel = new (ELeave) CMsvEntrySelection(); - CleanupStack::PushL(sel); - sel->AppendL(iMessageId); - - iTestUtils.DisplayMessageL(iMessageId); - - MsvEntry().SetEntryL(KMsvGlobalOutBoxIndexEntryId); - iOperation = MsvEntry().CopyL(*sel, iTestUtils.iSmsServiceId, iStatus); - CleanupStack::PopAndDestroy(sel); - - SetActive(); - } - -void CTestDetailsBase::ChangeServiceSettingsL() - { - // Restore the service settings. - iTestUtils.SetEntryL(iTestUtils.iSmsServiceId); - CSmsAccount* account = CSmsAccount::NewLC(); - account->LoadSettingsL(*iTestUtils.iServiceSettings); - - // Set the service settings - iTestUtils.iServiceSettings->SetValidityPeriod(TTimeIntervalMinutes(5)); - iTestUtils.iServiceSettings->SetDeliveryReport(ETrue); - iTestUtils.iServiceSettings->SetStatusReportHandling(CSmsSettings::EMoveReportToInboxVisibleAndMatch); - - // Store the new service settings - account->SaveSettingsL(*iTestUtils.iServiceSettings); - CleanupStack::PopAndDestroy(account); - } - -// methods from CActive - -void CTestDetailsBase::RunL() - { - User::LeaveIfError(iStatus.Int()); - - switch( iState ) - { - case EClearFolders: - { - ClearFoldersL(); - iState = EChangeServiceSettings; - CompleteSelf(); - } break; - case EChangeServiceSettings: - { - ChangeServiceSettingsL(); - iState = ECreateMessage; - CompleteSelf(); - } break; - case ECreateMessage: - { - CreateMessageL(); - iState = ESendMessage; - CompleteSelf(); - } break; - case ESendMessage: - { - SendMessageL(); - iState = EMessageSent; - } break; - case EMessageSent: - { - // Observer the in-box. - iEntryForObserver->SetEntryL(KMsvGlobalInBoxIndexEntryId); - iEntryForObserver->AddObserverL(*this); - - iState = EPendingReceivedMessage; - } break; - case EPendingReceivedMessage: - { - // End the test... - iObserver.TestPassed(); - } break; - default: - User::Invariant(); - break; - } - } - -void CTestDetailsBase::DoCancel() - { - } - -TInt CTestDetailsBase::RunError(TInt /*aError*/) - { - return KErrNone; - } - -// methods from MMsvEntryObserver - -void CTestDetailsBase::HandleEntryEventL(TMsvEntryEvent aEvent, TAny* aArg1, TAny* /*aArg2*/, TAny* /*aArg3*/) - { - __ASSERT_DEBUG( iState == EPendingReceivedMessage, User::Invariant() ); - - if( aEvent == EMsvNewChildren ) - { - iTestUtils.Printf(_L("Message received in in-box...\n")); - - CMsvEntrySelection* sel = (CMsvEntrySelection*)(aArg1); - - for( TInt ii=0; ii < sel->Count(); ++ii ) - { - CheckReceivedMessageL(sel->At(ii)); - } - - // Test should be over - complete-self. - CompleteSelf(); - } - } - -/* - * CTestReceiveDetails_1 - */ - -CTestReceiveDetails_1* CTestReceiveDetails_1::NewL(CSmsTestUtils& aTestUtils, MTestObserver& aObserver) - { - CTestReceiveDetails_1* self = new (ELeave) CTestReceiveDetails_1(aTestUtils, aObserver); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - return self; - } - -CTestReceiveDetails_1::~CTestReceiveDetails_1() - { - } - -CTestReceiveDetails_1::CTestReceiveDetails_1(CSmsTestUtils& aTestUtils, MTestObserver& aObserver) -: CTestDetailsBase(aTestUtils, aObserver) - { - } - -// methods from CTestSendBase - -void CTestReceiveDetails_1::CheckReceivedMessageL(TMsvId aMessageId) - { - iTestUtils.Printf(_L("Checking received message %d has correct details\n"), aMessageId); - - // Need to see that the details contains a telephone number - MsvEntry().SetEntryL(KMsvGlobalInBoxIndexEntryId); - MsvEntry().SetEntryL(aMessageId); - TMsvSmsEntry entry = MsvEntry().Entry(); - - // Recipient 2 delivered to first... - iTestUtils.Printf(_L("->Details info is %S - should be %S\n"), &entry.iDetails, &KRecipientOk()); - Test(entry.iDetails.CompareF(KRecipientOk()) == 0); - } - -const TDesC& CTestReceiveDetails_1::TestName() - { - return KTestReceiveDetails_1(); - } - -/* - * CTestReceiveDetails_2 - */ - -CTestReceiveDetails_2* CTestReceiveDetails_2::NewL(CSmsTestUtils& aTestUtils, MTestObserver& aObserver) - { - CTestReceiveDetails_2* self = new (ELeave) CTestReceiveDetails_2(aTestUtils, aObserver); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - return self; - } - -CTestReceiveDetails_2::~CTestReceiveDetails_2() - { - } - -CTestReceiveDetails_2::CTestReceiveDetails_2(CSmsTestUtils& aTestUtils, MTestObserver& aObserver) -: CTestDetailsBase(aTestUtils, aObserver) - { - } - -void CTestReceiveDetails_2::ConstructL() - { - CTestDetailsBase::ConstructL(); - - // Add contact to database... - TContactItemId contId = iTestUtils.CreateContactL(KFirstName, KLastName, KRecipientOk, KNullDesC); - if( contId == KNullContactId ) - User::Leave(KErrCorrupt); - } - -// methods from CTestSendBase - -void CTestReceiveDetails_2::CheckReceivedMessageL(TMsvId aMessageId) - { - iTestUtils.Printf(_L("Checking received message %d has correct details\n"), aMessageId); - - // Need to see that the details contains a telephone number - MsvEntry().SetEntryL(KMsvGlobalInBoxIndexEntryId); - MsvEntry().SetEntryL(aMessageId); - TMsvSmsEntry entry = MsvEntry().Entry(); - - // Recipient 2 delivered to first... - iTestUtils.Printf(_L("->Details info is %S - should be %S\n"), &entry.iDetails, &KContactInfo()); - Test(entry.iDetails.CompareF(KContactInfo()) == 0); - } - -const TDesC& CTestReceiveDetails_2::TestName() - { - return KTestReceiveDetails_2(); - } - -/* - * CTestReceiveDetails_3 - */ - -CTestReceiveDetails_3* CTestReceiveDetails_3::NewL(CSmsTestUtils& aTestUtils, MTestObserver& aObserver) - { - CTestReceiveDetails_3* self = new (ELeave) CTestReceiveDetails_3(aTestUtils, aObserver); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - return self; - } - -CTestReceiveDetails_3::~CTestReceiveDetails_3() - { - } - -CTestReceiveDetails_3::CTestReceiveDetails_3(CSmsTestUtils& aTestUtils, MTestObserver& aObserver) -: CTestDetailsBase(aTestUtils, aObserver) - { - } - -void CTestReceiveDetails_3::ConstructL() - { - CTestDetailsBase::ConstructL(); - - // Add contact to database - this is a duplicate... - TContactItemId contId = iTestUtils.CreateContactL(KFirstName, KLastName, KRecipientOk, KNullDesC); - if( contId == KNullContactId ) - User::Leave(KErrCorrupt); - } - -// methods from CTestSendBase - -void CTestReceiveDetails_3::CheckReceivedMessageL(TMsvId aMessageId) - { - iTestUtils.Printf(_L("Checking received message %d has correct details\n"), aMessageId); - - // Need to see that the details contains a telephone number - MsvEntry().SetEntryL(KMsvGlobalInBoxIndexEntryId); - MsvEntry().SetEntryL(aMessageId); - TMsvSmsEntry entry = MsvEntry().Entry(); - - // Recipient 2 delivered to first... - iTestUtils.Printf(_L("->Details info is %S - should be %S\n"), &entry.iDetails, &KRecipientOk()); - Test(entry.iDetails.CompareF(KRecipientOk()) == 0); - } - -const TDesC& CTestReceiveDetails_3::TestName() - { - return KTestReceiveDetails_3(); - }