messagingfw/wappushfw/tpush/t_simessage.cpp
changeset 0 8e480a14352b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/wappushfw/tpush/t_simessage.cpp	Mon Jan 18 20:36:02 2010 +0200
@@ -0,0 +1,291 @@
+// 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  <push/sislpushmsgutils.h>
+
+#include "pushtests.h"
+#include "dummywapstack.h"
+#include "wappushmsggen.h"
+
+// si text message data
+
+_LIT8(KSIAction,"delete");
+_LIT8(KSIHref, "http://www.xyz.com/ppaid/123/abc.wml");
+_LIT8(KSINewHref, "http://www.xyz.com/ppaid/123/new.wml");
+_LIT8(KSIOldDate,		"2000-01-01T15:23:15Z");
+_LIT8(KSeptemberDate,	"2000-09-30T00:00:00Z");
+_LIT8(KOctoberDate,		"2000-10-30T00:00:00Z");
+_LIT8(KSISiId, "http://www.xyz.com/ppaid/123/abc.wml");
+
+/** set test name to 'Service Indication'
+	@param void
+	@return string
+		string represents test name
+*/
+const TDesC& CWapPushSIMessageTest::TestName()
+{
+	_LIT(KTextSIMessageTest, "Service Indication");
+	return KTextSIMessageTest;
+}
+
+/** set the number of test messages to use */
+void CWapPushSIMessageTest::NumberTestCasesToRun()
+{
+	iNumberOfTestCases = 8;
+}
+
+/** build different test messages to test specific SI reception aspects
+	in the SI content handler processing code.
+	@param TInt
+		the number of test messages to create and use
+	@return void
+*/
+void CWapPushSIMessageTest::PrepareTestMessageL(TInt aTestCase)
+{
+	// this set of test messages adds a test message
+	// to the store for the match cases, 
+	// replaces the stored message and ends with no stored si message 	
+	const TUint8 KMessageHeader2[] = 
+		{
+		//0xB0,  //Content type "application/vnd.wap.slc"
+		0xAD,  //Content type "application/vnd.wap.si" 
+		0x92,  // Date
+		0x04,  // length of field
+		0x39,  // Monday 15 August 2000 10:41:37 GMT
+		0x90,	
+		0x6a,
+		0xd0,
+		0x94,  // Expires 
+		0x04,  // length of field
+		0x39,  // Monday 15 August 2000 10:41:37 GMT
+		0x9a,	
+		0x6a,
+		0xd0,
+		0xAF,  //X-Wap-Application-ID
+		0x82  // Short int - 0x02 represent x-wap-application:push.ua
+		};	
+
+	TBuf8<40> tempBuf;
+	TUint8 value;
+	for (TInt i = 0; i < 15; i++)
+		{
+		value = KMessageHeader2[i];
+		tempBuf.Append(value);
+		}
+
+	iHeadersBuf.Copy(tempBuf);
+	tempBuf.Copy(_L8(""));
+
+	iBodyBuf.Delete(0,KBufferSize);
+	//iBodyBuf.Zero();
+		
+	CWapPushMsgGen* msgGen = CWapPushMsgGen::NewL();
+	CleanupStack::PushL(msgGen);
+
+	msgGen->StartNewMsgL(CWapPushMsgGen::EServiceIndication);
+		
+	switch (aTestCase)
+		{
+	case 0 : // no action - msg stored with action = "signal-medium"
+			// this initial msg will match in cases 2 and 3...
+		msgGen->AppendFieldL(CWapPushMsgGen::EHRef, KSIHref);
+		msgGen->AppendFieldL(CWapPushMsgGen::EServiceIndicationID, KSISiId);
+		msgGen->AppendFieldL(CWapPushMsgGen::EServiceIndicationCreated, KSeptemberDate);
+		break;
+	case 1 : // message expired - delete
+		msgGen->AppendFieldL(CWapPushMsgGen::EServiceIndicationExpires, KSIOldDate);
+		msgGen->AppendFieldL(CWapPushMsgGen::EServiceIndicationID, _L8("do not store this message"));
+		break;	
+	case 2 : // match existing si - delete received si 
+		msgGen->AppendFieldL(CWapPushMsgGen::EHRef, KSIHref);
+		msgGen->AppendFieldL(CWapPushMsgGen::EServiceIndicationCreated, KSIOldDate);
+		break;
+	case 3 : // match existing si - delete existing si
+			 // deletes msg created in case 0 and will replace it
+		msgGen->AppendFieldL(CWapPushMsgGen::EServiceIndicationID, KSISiId);
+		msgGen->AppendFieldL(CWapPushMsgGen::EServiceIndicationCreated, KOctoberDate); // date > stored date
+		break;
+	case 4 : // match existing si and discard receved message
+		     // matches msg from case 3 
+		msgGen->AppendFieldL(CWapPushMsgGen::EHRef, KSINewHref);
+		msgGen->AppendFieldL(CWapPushMsgGen::EServiceIndicationID, KSISiId);
+		msgGen->AppendFieldL(CWapPushMsgGen::EServiceIndicationCreated, KOctoberDate);	// date = stored date
+		break;
+	case 5 : // action = delete; href set but no si-id (no deletion occurs)
+			 // store msg but has si-id equal to received msg href.... 
+		msgGen->AppendFieldL(CWapPushMsgGen::EAction, KSIAction);
+		msgGen->AppendFieldL(CWapPushMsgGen::EHRef, KSIHref);
+		break;
+	case 6 : // action = delete; si-id set (delete msg)
+			// any matching record will already have been deleted
+		msgGen->AppendFieldL(CWapPushMsgGen::EAction, KSIAction);
+		msgGen->AppendFieldL(CWapPushMsgGen::EServiceIndicationID, KSISiId);
+		msgGen->AppendFieldL(CWapPushMsgGen::EServiceIndicationCreated, KOctoberDate);
+		break;
+	case 7 :
+		// testing fix for INC038455 - Apostrophe char (0x27) in SI message makes CXmlLibrary leave with -13106
+		PrepareApostropheTestMessageL();
+		break;
+	default: 
+		// do nothing
+		break;
+	}
+	msgGen->AppendFieldL(CWapPushMsgGen::EServiceIndicationText, _L8("You have 4 new e-mails"));
+
+	HBufC8* msg = msgGen->CreateMsgLC();
+	// copy data to iBodyBuf
+	if (aTestCase!=7)
+		{
+		iBodyBuf = msg->Des(); 
+		}
+	CleanupStack::PopAndDestroy(2); //msgGen, msg
+}
+
+/** confirm the message has been stored.
+	Writes the number of stored messages found to the log file - if present.
+	@param void
+	@return TBool
+		returns ETrue if messages found
+		returns EFalse if no messages found 
+*/
+TBool CWapPushSIMessageTest::ConfirmMessagesSavedL()
+	{
+	CSISLPushMsgUtils* wapPushUtils = CSISLPushMsgUtils::NewL();
+	CleanupStack::PushL(wapPushUtils);
+	
+	TMsvId localFolderId;
+	wapPushUtils->GetPushMsgFolderIdL(localFolderId);
+	
+	const TDesC& siId16 = _L("http://www.xyz.com/ppaid/123/abc.wml"); 
+	CMsvEntrySelection* matchingIdList = wapPushUtils->FindSiIdLC(siId16);
+
+	// check there are any entries - zero indicates no matches
+	TInt foundCount;
+	if (matchingIdList) 
+		foundCount = matchingIdList->Count(); 
+	else
+		foundCount = 0;
+	
+	TBuf<KPushLogBuffer> buf;
+	_LIT(KLogSICount,"SI messages stored:\t%d");
+	buf.Format(KLogSICount,foundCount);
+	WPLPrintf(buf);	
+
+	CleanupStack::PopAndDestroy(2);  // wapPushUtils, matchingIdList
+	return foundCount;
+	}
+
+void CWapPushSIMessageTest::PrepareApostropheTestMessageL()
+	{
+	const TUint8 KMessageHeader2[] = 
+		{
+		0xAE,  //Content type "application/vnd.wap.si" 
+		0x92,  // Date
+		0x04,  // length of field
+		0x39,  // Monday 15 August 2000 10:41:37 GMT
+		0x90,	
+		0x6a,
+		0xd0,
+		0x94,  // Expires 
+		0x04,  // length of field
+		0x39,  // Monday 15 August 2000 10:41:37 GMT
+		0x9a,	
+		0x6a,
+		0xd0,
+		0xAF,  //X-Wap-Application-ID
+		0x82  // Short int - 0x02 represent x-wap-application:push.ua
+		};	
+
+	const TUint8 KBody[] = 
+		{
+		0x02,
+		0x05,
+		0x6A,
+		0x00,
+		0x45,
+		0xC6,
+		0x0C, 
+		0x03,
+		0x77,
+		0x61,
+		0x70,
+		0x2E,
+		0x67,
+		0x6F,
+		0x6F,
+		0x67,
+		0x6C,
+		0x65,
+		0x2E,
+		0x63,
+		0x6F,
+		0x6D,
+		0x00,
+		0x01,
+		0x03,
+		0xA0,
+		0x49,
+		0x74,
+		0x27, //
+//		0x22, //
+		0x73,
+		0xA0,
+		0x46,
+		0xA0,
+		0x46,
+		0xA0,
+		0x46,
+		0xA0,
+		0x46,
+		0x72,
+		0x69,
+		0x64,
+		0x61,
+		0x79,
+		0x21,
+		0x21,
+		0x21,
+		0xA0,
+		0x00,
+		0x01,
+		0x01
+		};	
+
+
+	TBuf8<60> tempBuf;
+	TUint8 value;
+	for (TInt i = 0; i < 15; i++)
+		{
+		value = KMessageHeader2[i];
+		tempBuf.Append(value);
+		}
+
+	iHeadersBuf.Copy(tempBuf);
+	tempBuf.Copy(_L8(""));
+
+	iBodyBuf.Delete(0,KBufferSize);
+		
+	for (TInt ii = 0; ii < 50; ii++)
+		{
+		value = KBody[ii];
+		tempBuf.Append(value);
+		}
+
+	// copy data to iBodyBuf
+	iBodyBuf.Copy(tempBuf); 
+	tempBuf.Copy(_L8(""));
+	}
+
+