mobilemessaging/smsmtm/test/src/T_SmcmFail.cpp
changeset 0 72b543305e3a
--- /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
+	}