--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mobilemessaging/smsmtm/test/src/T_SmcmFail.cpp Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,678 @@
+// Copyright (c) 2000-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_SmcmFail.h"
+#include <biodb.h>
+
+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);
+ }
+
+LOCAL_C void doMainL()
+ {
+ CActiveScheduler* scheduler = new (ELeave) CActiveScheduler;
+ CleanupStack::PushL(scheduler);
+ CActiveScheduler::Install(scheduler);
+
+ CSmsTestUtils* smsTest = CSmsTestUtils::NewL(test);
+ CleanupStack::PushL(smsTest);
+ TInt nextTest = 0;
+
+ CSmcmFailTest* SmcmTest = CSmcmFailTest::NewL(*smsTest, KNullDesC, nextTest);
+ CleanupStack::PushL(SmcmTest);
+
+ SmcmTest->StartL();
+
+ CleanupStack::PopAndDestroy(3); //SmcmTest. scheduler
+ }
+
+CSmcmFailTest::CSmcmFailTest(CSmsTestUtils& aSmsTest, const TDesC& aScriptFile, TInt& aCurrentTest)
+: CSmsTestBase(aSmsTest, aScriptFile, aCurrentTest)
+ {
+ }
+
+void CSmcmFailTest::RunAutoL()
+ {
+ iSmsTest.TestStart(++iNextTest, _L("CSmsSettings Fail"));
+ TestSettingsFailL();
+ iSmsTest.TestFinish(iNextTest);
+
+ iSmsTest.TestStart(++iNextTest, _L("CSmsNumber Fail"));
+ TestNumberFailL();
+ iSmsTest.TestFinish(iNextTest);
+
+ iSmsTest.TestStart(++iNextTest, _L("CSmsHeader Fail"));
+ TestHeaderFailL();
+ iSmsTest.TestFinish(iNextTest);
+
+ iSmsTest.TestStart(++iNextTest, _L("Load Fail"));
+ TestLoadFailL(); //Cannot be done 'cause of defect in message server
+ iSmsTest.TestFinish(iNextTest);
+
+ iSmsTest.TestStart(++iNextTest, _L("Save Fail"));
+ TestSaveFailL(); //Cannot be done 'cause of defect in message server
+ iSmsTest.TestFinish(iNextTest);
+
+ iSmsTest.TestStart(++iNextTest, _L("Addressee Fail"));
+ TestAddresseeFailL(); //Cannot be done 'cause of defect in message server
+ iSmsTest.TestFinish(iNextTest);
+
+ iSmsTest.TestStart(++iNextTest, _L("Bio Fail"));
+ this->TestBifFailL();
+ iSmsTest.TestFinish(iNextTest);
+
+
+ iSmsTest.TestStart(++iNextTest, _L("Reply Fail"));
+ TestReplyFailL();
+ iSmsTest.TestFinish(iNextTest);
+
+ iSmsTest.TestStart(++iNextTest, _L("Forward Fail"));
+ TestForwardFailL(); //Cannot be done 'cause of defect in message server
+ iSmsTest.TestFinish(iNextTest);
+ }
+
+CSmcmFailTest::~CSmcmFailTest()
+ {
+ delete iRichText;
+ delete iParaLayer;
+ delete iCharLayer;
+ }
+
+void CSmcmFailTest::ConstructL()
+ {
+ iSmsTest.SetLogToFile();
+ iSmsTest.InstantiateClientMtmsL();
+
+ iSelection = new (ELeave) CMsvEntrySelection();
+ iTimer = CTestTimer::NewL();
+
+ iParaLayer =CParaFormatLayer::NewL();
+ iCharLayer = CCharFormatLayer::NewL();
+ iRichText = CRichText::NewL(iParaLayer, iCharLayer, CEditableText::EFlatStorage,256);
+
+ CActiveScheduler::Add(this);
+ }
+
+CSmcmFailTest* CSmcmFailTest::NewL(CSmsTestUtils& aSmsTest, const TDesC& aScriptFile, TInt& aCurrentTest)
+ {
+ CSmcmFailTest* self = new (ELeave) CSmcmFailTest(aSmsTest, aScriptFile, aCurrentTest);
+ CleanupStack::PushL(self);
+
+ self->ConstructL();
+
+ CleanupStack::Pop();
+ return self;
+ }
+
+void CSmcmFailTest::ShowMenuL()
+ {
+ iSmsTest.ResetMenu();
+
+ iSmsTest.AppendToMenuL(_L("Start"));
+
+ TInt result = iSmsTest.DisplayMenu(_L("SMS Client MTM Test"));
+
+ if (result <= 0)
+ return;
+
+ switch (result)
+ {
+ case 1:
+ RunAutoL();
+ break;
+ default:
+ User::Leave(KErrArgument);
+ break;
+ }
+
+ if (!iSmsTest.RunAuto())
+ {
+ iSmsTest.Printf(_L("Press any key to continue...\n"));
+ test.Getch();
+ }
+
+ ShowMenuL();
+ }
+
+void CSmcmFailTest::TestSettingsFailL()
+ {
+ CSmsSettings* settings = NULL;
+
+ TInt error;
+ TInt failCount = 0;
+
+ //Failure Test CSmsSettings::NewL
+ do
+ {
+ __UHEAP_FAILNEXT(failCount++);
+
+ TRAP(error, settings = CSmsSettings::NewL());
+
+ __UHEAP_RESET;
+
+ if (error)
+ {
+ test(error == KErrNoMemory);
+ }
+
+ }
+ while (error);
+
+ iSmsTest.Printf(_L("CSmsSettings::NewL Fail Count %d\n"), failCount);
+ CleanupStack::PushL(settings);
+
+ failCount = 0;
+
+ //Failure Test CSmsSettings::AddServiceCenterL()
+ do
+ {
+ __UHEAP_FAILNEXT(failCount++);
+
+ TInt scCount = settings->ServiceCenterCount();
+ TRAP(error, settings->AddServiceCenterL(_L("Anthony"), _L("+44")));
+
+ __UHEAP_RESET;
+
+ if (error)
+ {
+ test(error == KErrNoMemory);
+ test(scCount == settings->ServiceCenterCount());
+ }
+ else
+ {
+ test(scCount == settings->ServiceCenterCount() - 1);
+ }
+ }
+ while (error);
+
+ iSmsTest.Printf(_L("CSmsSettings::AddSCAddress Fail Count %d\n"), failCount);
+ CSmsSettings* settings2 = CSmsSettings::NewL();
+ CleanupStack::PushL(settings2);
+ failCount = 0;
+
+ //Failure Test CSmsSettings::CopyL()
+ do
+ {
+ __UHEAP_FAILNEXT(failCount++);
+
+ TRAP(error, settings2->CopyL(*settings));
+
+ __UHEAP_RESET;
+
+ if (error)
+ {
+ test(error == KErrNoMemory);
+ }
+ }
+ while (error);
+
+ iSmsTest.Printf(_L("CSmsSettings::CopyL Fail Count %d\n"), failCount);
+
+ CleanupStack::PopAndDestroy(); //settings2
+ CleanupStack::PopAndDestroy(); //settings
+ }
+
+void CSmcmFailTest::TestHeaderFailL()
+ {
+ CSmsHeader* header = NULL;
+
+ TInt error;
+ TInt failCount = 0;
+
+ //Failure Test CSmsHeader::NewL, Deliver
+ do
+ {
+ __UHEAP_FAILNEXT(failCount++);
+
+ TRAP(error, header = CSmsHeader::NewL(CSmsPDU::ESmsDeliver,*iRichText));
+
+ __UHEAP_RESET;
+
+ if (error)
+ {
+ test(error == KErrNoMemory);
+ }
+
+ }
+ while (error);
+
+ iSmsTest.Printf(_L("CSmsHeader::NewL (Deliver) Fail Count %d\n"), failCount);
+ delete header;
+
+ failCount = 0;
+
+ //Failure Test CSmsHeader::NewL, StatusReport
+ do
+ {
+ __UHEAP_FAILNEXT(failCount++);
+
+ TRAP(error, header = CSmsHeader::NewL(CSmsPDU::ESmsStatusReport,*iRichText));
+
+ __UHEAP_RESET;
+
+ if (error)
+ {
+ test(error == KErrNoMemory);
+ }
+ }
+ while (error);
+
+ iSmsTest.Printf(_L("CSmsHeader::NewL (StatusReport) Fail Count %d\n"), failCount);
+ delete header;
+
+ failCount = 0;
+
+ //Failure Test CSmsHeader::NewL, Submit
+ do
+ {
+ __UHEAP_FAILNEXT(failCount++);
+
+ TRAP(error, header = CSmsHeader::NewL(CSmsPDU::ESmsSubmit,*iRichText));
+
+ __UHEAP_RESET;
+
+ if (error)
+ {
+ test(error == KErrNoMemory);
+ }
+
+ }
+ while (error);
+
+ iSmsTest.Printf(_L("CSmsHeader::NewL (Submit) Fail Count %d\n"), failCount);
+ delete header;
+ }
+
+void CSmcmFailTest::TestNumberFailL()
+ {
+ CSmsNumber* number = NULL;
+
+ TInt error;
+ TInt failCount = 0;
+
+ //Failure Test CSmsNumber::NewL
+ do
+ {
+ __UHEAP_FAILNEXT(failCount++);
+
+ TRAP(error, number = CSmsNumber::NewL());
+
+ __UHEAP_RESET;
+
+ if (error)
+ {
+ test(error == KErrNoMemory);
+ }
+
+ }
+ while (error);
+
+ iSmsTest.Printf(_L("CSmsNumber::NewL Fail Count %d\n"), failCount);
+ CleanupStack::PushL(number);
+ CSmsNumber* number2 = NULL;
+
+ failCount = 0;
+
+ //Failure Test CSmsNumber::NewL,2
+ do
+ {
+ __UHEAP_FAILNEXT(failCount++);
+
+ TRAP(error, number2 = CSmsNumber::NewL(*number));
+
+ __UHEAP_RESET;
+
+ if (error)
+ {
+ test(error == KErrNoMemory);
+ }
+
+ }
+ while (error);
+
+ iSmsTest.Printf(_L("CSmsNumber::NewL (Number) Fail Count %d\n"), failCount);
+ CleanupStack::PushL(number2);
+
+ number->SetAddressL(_L("44"));
+ number->SetNameL(_L("AA"));
+
+ failCount = 0;
+
+ //Failure Test CSmsNumber::CopyL
+ do
+ {
+ __UHEAP_FAILNEXT(failCount++);
+
+ TRAP(error, number2->CopyL(*number));
+
+ __UHEAP_RESET;
+
+ if (error)
+ {
+ test(error == KErrNoMemory);
+ }
+ else
+ {
+ test(number->Name() == number2->Name());
+ test(number->Address() == number2->Address());
+ }
+ }
+ while (error);
+
+ iSmsTest.Printf(_L("CSmsNumber::CopyL Fail Count %d\n"), failCount);
+ CleanupStack::PopAndDestroy(); //number
+ CleanupStack::PopAndDestroy(); //number2
+ }
+
+
+void CSmcmFailTest::TestReplyFailL()
+ {
+ iSmsTest.Test().Next(_L("CSmsClientMtm Reply Fail"));
+
+ CMsvOperationWait* wait = CMsvOperationWait::NewLC();
+ CMsvOperation* op = NULL;
+ TInt error;
+ TMsvPartList part=0;
+ TInt failCount = 0;
+
+ do
+ {
+ CleanFolderL(KMsvDraftEntryId);
+ CleanFolderL(KMsvGlobalOutBoxIndexEntryId);
+ CleanFolderL(KMsvGlobalInBoxIndexEntryId);
+
+ TMsvId id = iSmsTest.CreateDummyMessageToReceiveL();
+ Session().CleanupEntryPushL(id);
+ Client().SwitchCurrentEntryL(id); // Lets go to the received area
+ Client().LoadMessageL();
+
+ __UHEAP_FAILNEXT(failCount++);
+
+ TRAP(error, op = Client().ReplyL(KMsvDraftEntryId, part, wait->iStatus));
+
+ __UHEAP_RESET;
+
+ if (error)
+ {
+ test(error == KErrNoMemory);
+
+ if (failCount % 100 == 0)
+ iSmsTest.Printf(_L("CSmsClientMtm::ReplyL still failing, count = %d\n"), failCount);
+ }
+
+ CleanupStack::PopAndDestroy(); //id
+ }
+ while (error);
+
+ iSmsTest.Printf(_L("CSmsClientMtm::ReplyL Fail Count %d\n"), failCount);
+ CleanupStack::PushL(op);
+ wait->Start();
+ CActiveScheduler::Start();
+
+ CleanupStack::PopAndDestroy(2); //op, wait
+ }
+
+void CSmcmFailTest::CleanFolderL(TMsvId aFolder)
+ {
+ CMsvOperationWait* wait = CMsvOperationWait::NewLC();
+ CMsvOperation* op = NULL;
+
+ iSmsTest.SetEntryL(aFolder);
+ CMsvEntrySelection* sel = MsvEntry().ChildrenL();
+
+ CleanupStack::PushL(sel);
+ if (sel->Count())
+ {
+ iSmsTest.Printf(_L("Deleting %d existing messages\n"), sel->Count());
+ op = MsvEntry().DeleteL(*sel, wait->iStatus);
+ CleanupStack::PushL(op);
+ wait->Start();
+ CActiveScheduler::Start();
+ CleanupStack::PopAndDestroy(); //op
+ }
+ CleanupStack::PopAndDestroy(2); //sel, wait
+ }
+
+void CSmcmFailTest::TestForwardFailL()
+ {
+ iSmsTest.Test().Next(_L("CSmsClientMtm Forward Fail"));
+
+ CleanFolderL(KMsvDraftEntryId);
+ CleanFolderL(KMsvGlobalOutBoxIndexEntryId);
+ CleanFolderL(KMsvGlobalInBoxIndexEntryId);
+
+ TMsvId id = iSmsTest.CreateDummyMessageToReceiveL();
+ Client().SwitchCurrentEntryL(id);
+ Client().LoadMessageL();
+
+ TMsvPartList part=0;
+
+ TInt error;
+ TInt failCount = 0;
+ CMsvOperationWait* wait = CMsvOperationWait::NewLC();
+ CMsvOperation* op = NULL;
+
+ do
+ {
+ __UHEAP_FAILNEXT(failCount++);
+
+ TRAP(error, op = Client().ForwardL(KMsvDraftEntryId, part, wait->iStatus));
+
+ __UHEAP_RESET;
+
+ if (error)
+ {
+ test(error == KErrNoMemory);
+
+ if (failCount % 100 == 0)
+ iSmsTest.Printf(_L("CSmsClientMtm::ForwardL still failing, count = %d\n"), failCount);
+ }
+
+ }
+ while (error);
+
+ CleanupStack::PushL(op);
+ iSmsTest.Printf(_L("CSmsClientMtm::ForwardL Fail Count %d\n"), failCount);
+ wait->Start();
+ CActiveScheduler::Start();
+
+ CleanupStack::PopAndDestroy(2); //op, wait
+ }
+
+void CSmcmFailTest::TestLoadFailL()
+ {
+ iSmsTest.Test().Next(_L("CSmsClientMtm Load Fail"));
+
+ CleanFolderL(KMsvDraftEntryId);
+ CleanFolderL(KMsvGlobalOutBoxIndexEntryId);
+ CleanFolderL(KMsvGlobalInBoxIndexEntryId);
+
+ TMsvId id = iSmsTest.CreateDummyMessageToSendL();
+ Client().SwitchCurrentEntryL(id);
+
+ TInt error;
+ TInt failCount = 0;
+
+ do
+ {
+ __UHEAP_FAILNEXT(failCount++);
+
+ TRAP(error, Client().LoadMessageL());
+
+ __UHEAP_RESET;
+
+ if (error)
+ {
+ test(error == KErrNoMemory);
+ }
+ }
+ while (error);
+
+ iSmsTest.Printf(_L("CSmsClientMtm::LoadMessageL Fail Count %d\n"), failCount);
+ }
+
+void CSmcmFailTest::TestSaveFailL()
+ {
+ iSmsTest.Test().Next(_L("CSmsClientMtm Save Fail"));
+
+ CleanFolderL(KMsvDraftEntryId);
+ CleanFolderL(KMsvGlobalOutBoxIndexEntryId);
+ CleanFolderL(KMsvGlobalInBoxIndexEntryId);
+
+ TMsvId id = iSmsTest.CreateDummyMessageToSendL();
+ Client().SwitchCurrentEntryL(id);
+ Client().LoadMessageL();
+
+ TInt error;
+ TInt failCount = 0;
+
+ do
+ {
+ __UHEAP_FAILNEXT(failCount++);
+
+ TRAP(error, Client().SaveMessageL());
+
+ __UHEAP_RESET;
+
+ if (error)
+ {
+ test(error == KErrNoMemory);
+ }
+ }
+ while (error);
+
+ iSmsTest.Printf(_L("CSmsClientMtm::SaveMessageL Fail Count %d\n"), failCount);
+ }
+
+void CSmcmFailTest::TestAddresseeFailL()
+ {
+ iSmsTest.Test().Next(_L("CSmsClientMtm Save Fail"));
+
+ CleanFolderL(KMsvDraftEntryId);
+ CleanFolderL(KMsvGlobalOutBoxIndexEntryId);
+ CleanFolderL(KMsvGlobalInBoxIndexEntryId);
+
+ TMsvId id = iSmsTest.CreateDummyMessageToSendL();
+ Client().SwitchCurrentEntryL(id);
+ Client().LoadMessageL();
+
+ TInt error;
+ TInt failCount = 0;
+
+ do
+ {
+ __UHEAP_FAILNEXT(failCount++);
+
+ TInt count = Client().AddresseeList().Count();
+ TRAP(error, Client().AddAddresseeL(_L("44")));
+
+ __UHEAP_RESET;
+
+ if (error)
+ {
+ test(error == KErrNoMemory);
+ test(count == Client().AddresseeList().Count());
+ }
+ else
+ {
+ test(count == Client().AddresseeList().Count() - 1);
+ }
+ }
+ while (error);
+
+ iSmsTest.Printf(_L("CSmsClientMtm Addressee1 Fail Count %d\n"), failCount);
+
+ failCount = 0;
+
+ do
+ {
+ __UHEAP_FAILNEXT(failCount++);
+
+ TInt count = Client().AddresseeList().Count();
+ TRAP(error, Client().AddAddresseeL(_L("44"), _L("AA")));
+
+ __UHEAP_RESET;
+
+ if (error)
+ {
+ test(error == KErrNoMemory);
+ test(count == Client().AddresseeList().Count());
+ }
+ else
+ {
+ test(count == Client().AddresseeList().Count() - 1);
+ }
+ }
+ while (error);
+
+ iSmsTest.Printf(_L("CSmsClientMtm Addressee2 Fail Count %d\n"), failCount);
+ }
+
+void CSmcmFailTest::TestBifFailL()
+ {
+ iSmsTest.Test().Next(_L("CSmsClientMtm Bio Fail"));
+
+ CleanFolderL(KMsvDraftEntryId);
+ CleanFolderL(KMsvGlobalOutBoxIndexEntryId);
+ CleanFolderL(KMsvGlobalInBoxIndexEntryId);
+
+ TMsvId id = iSmsTest.CreateDummyMessageToSendL();
+ Client().SwitchCurrentEntryL(id);
+ Client().LoadMessageL();
+
+ TInt error;
+ TInt failCount = 0;
+
+ CBIODatabase* bdb = CBIODatabase::NewLC(Session().FileSession());
+
+ if (!bdb->BIOCount())
+ {
+ CleanupStack::PopAndDestroy(); //bdb
+ iSmsTest.Printf(_L("No Bio messages in Bio DB\n"));
+ return;
+ }
+
+ // Get the whole bif file class
+ const CBioInfoFileReader& reader = bdb->BifReader(0);
+
+ do
+ {
+ __UHEAP_FAILNEXT(failCount++);
+
+ TRAP(error, Client().BioTypeChangedL(reader.MessageTypeUid()));
+
+ __UHEAP_RESET;
+
+ if (error)
+ {
+ test(error == KErrNoMemory || error == KErrNotFound);
+ }
+ }
+ while (error && error != KErrNotFound);
+
+ iSmsTest.Printf(_L("CSmsClientMtm::BioTypeChangedL Fail Count %d\n"), failCount);
+ CleanupStack::PopAndDestroy(); //bdb
+ }