telephonyserver/etelpacketdata/Te_EtelPacket/Te_EtelPacketTestPCO_IE.cpp
changeset 0 3553901f7fa8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserver/etelpacketdata/Te_EtelPacket/Te_EtelPacketTestPCO_IE.cpp	Tue Feb 02 01:41:59 2010 +0200
@@ -0,0 +1,451 @@
+// 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:
+// EtelPacketTestAuthenticationAndDNS.cpp
+// This is the cpp file for Packet Data Context Data Structure
+// File created 03-11-2004
+// 
+//
+
+// Symbian OS includes
+#include <e32base.h>
+#include <etelpckt.h>
+#include <etelutils.h>
+#include <pcktcs.h>
+
+
+#include "Te_EtelPacketTestStepBase.h"
+#include "testdef.h"
+#include "Te_etelpckt_defs.h"
+#include "Te_EtelPacketTestPCO_IE.h"
+
+
+CEtelPacketTestPCO_IE::CEtelPacketTestPCO_IE()
+{
+	// store the name of this test case
+	SetTestStepName(_L("PCO_IE"));
+}
+
+// destructor
+CEtelPacketTestPCO_IE::~CEtelPacketTestPCO_IE()
+{
+}
+
+enum TVerdict CEtelPacketTestPCO_IE::doTestStepL( void )
+/**
+ * Test step AuthorizationData
+ * 
+ */
+{
+	TInt ret;
+
+	//	---------------------------------------------------
+	//	TEST CASE 1 - Construction
+	//	---------------------------------------------------
+	const TInt KZero=0;
+	const TInt KMinimumBufferSize = 1;
+	const TInt KSmallBuffer=20;
+	
+	//	Create Item
+	const TUint16 XId=1;
+	const TUint16 YId=10;
+	
+	RPacketContext::TPcoId pcoIdX(XId);
+	RPacketContext::TPcoId pcoIdY(YId);
+	
+	//	Create Item Buffers
+	const TInt KAppendableBufferSize=3;
+
+	//	BufferX
+	TBuf8<KAppendableBufferSize> appendableBufferX(_L8("xxx"));	
+	appendableBufferX.SetLength(KAppendableBufferSize);
+	TPtr8 appendablePtrX(const_cast<TUint8*>(appendableBufferX.Ptr()),appendableBufferX.Length(),appendableBufferX.Length());
+
+	//	BufferY
+	TBuf8<KAppendableBufferSize> appendableBufferY(_L8("yyy"));	
+	appendableBufferY.SetLength(KAppendableBufferSize);
+	TPtr8 appendablePtrY(const_cast<TUint8*>(appendableBufferY.Ptr()),appendableBufferY.Length(),appendableBufferY.Length());
+	
+	//	Create Buffer for TLV struct
+	TBuf8<KSmallBuffer> smallBuffer;		//	MaxLength = 20
+	smallBuffer.SetLength(smallBuffer.MaxLength());
+	smallBuffer.FillZ();
+	TPtr8 smallPtr(smallBuffer.LeftTPtr(smallBuffer.MaxLength()));
+	smallPtr.SetLength(0);
+
+	//	Create Zero length buffer
+	TPtr8 zeroSizePtr=smallPtr.LeftTPtr(KZero);
+	TTlvStruct<RPacketContext::TPcoId,RPacketContext::TPcoItemDataLength> zeroTLV(zeroSizePtr,KZero);
+
+	//	Create TLV struct with size=20
+	TTlvStruct<RPacketContext::TPcoId,RPacketContext::TPcoItemDataLength> smallTLV(smallPtr,KZero);	
+
+	//	---------------------------------------------------
+	//	TEST CASE 2 - AppendItemL
+	//	---------------------------------------------------
+	
+	//	Append an Item to zero length Tlv
+	ret=zeroTLV.AppendItemL(pcoIdX,appendablePtrX);
+	TEST(ret==KErrOverflow);
+	
+	//	Append a larger buffer 
+	const TInt KLargeBuffer=30;
+	TBuf8<KLargeBuffer> largeBuffer(_L8("xxxxxxxxx"));	
+	largeBuffer.SetLength(KLargeBuffer);
+	TPtr8 largePtr(const_cast<TUint8*>(largeBuffer.Ptr()),largeBuffer.Length(),largeBuffer.Length());
+
+	//	Append
+	ret=smallTLV.AppendItemL(pcoIdX,largePtr);
+	TEST(ret==KErrOverflow);
+	
+	//	Append 3 Items	-  X + Y + X
+	ret=smallTLV.AppendItemL(pcoIdX,appendablePtrX);
+	TEST(ret==KErrNone);
+
+	ret=smallTLV.AppendItemL(pcoIdY,appendablePtrY);
+	TEST(ret==KErrNone);
+	
+	ret=smallTLV.AppendItemL(pcoIdX,appendablePtrX);
+	TEST(ret==KErrNone);
+	
+	//	Overflow the buffer
+	ret=smallTLV.AppendItemL(pcoIdY,appendablePtrY);
+	TEST(ret==KErrOverflow);
+
+	//	---------------------------------------------------
+	//	TEST CASE 3 - NextItemL
+	//	Buffer contains = XYX
+	//	---------------------------------------------------
+	//	Construct TPtr8 buffers for retrieval
+	//	Buffer large enough to handle data
+	const TInt KBigEnoughBuf=5;
+	TBuf8<KBigEnoughBuf> bigEnoughBuf;
+	bigEnoughBuf.SetLength(0);
+	TPtr8 bigEnoughPtr(const_cast<TUint8*>(bigEnoughBuf.Ptr()),bigEnoughBuf.Length(),bigEnoughBuf.MaxLength());
+
+	//	Buffer too small to hold data
+	const TInt KTooSmallBuf=2;
+	TBuf8<KTooSmallBuf> tooSmallBuf;
+	tooSmallBuf.SetLength(0);
+	TPtr8 tooSmallPtr(const_cast<TUint8*>(tooSmallBuf.Ptr()),tooSmallBuf.Length(),tooSmallBuf.MaxLength());
+
+	//	Get Next Item from zero length TLV
+	ret=zeroTLV.NextItemL(pcoIdY,bigEnoughPtr);
+	TEST(ret==KErrNotFound);
+	
+	//	Create Item Z	
+	smallTLV.ResetCursorPos();
+	const TUint16 ZId=2;
+	RPacketContext::TPcoId pcoIdZ(ZId);
+			
+	//	Get a non existant item	
+	TInt err(KErrNone);
+	TInt leaveErr(KErrNone);
+	TRAP(leaveErr,err=smallTLV.NextItemL(pcoIdZ,bigEnoughPtr));
+	TEST(leaveErr==KErrNone && err==KErrNotFound);
+
+	
+	//	Get an existing item in bigEnoughBuffer
+	ret=smallTLV.NextItemL(pcoIdX,bigEnoughPtr);
+	TEST(ret==KErrNone);
+	TEST(bigEnoughPtr==appendablePtrX);
+	
+	//	Get last item 
+	ret=smallTLV.NextItemL(pcoIdX,bigEnoughPtr);
+	TEST(ret==KErrNone);
+	TEST(bigEnoughPtr==appendablePtrX);
+	
+	//	Cursor should be at end, try to get item before cursor
+	ret=smallTLV.NextItemL(pcoIdY,bigEnoughPtr);
+	TEST(ret==KErrNotFound);
+	
+	//	reset cursor
+	smallTLV.ResetCursorPos();
+	
+	//	get item
+	ret=smallTLV.NextItemL(pcoIdY,bigEnoughPtr);
+	TEST(ret==KErrNone);
+	TEST(bigEnoughPtr==appendablePtrY);
+
+	
+	//	---------------------------------------------------
+	//	TEST CASE 4 - RemoveNextItemL
+	//	Buffer contains = XYX
+	//	---------------------------------------------------
+	//	remove item form zero length TLV
+	ret=zeroTLV.RemoveNextItemL(pcoIdX);
+	TEST(ret==KErrNotFound);
+	
+	//	reset cursor
+	smallTLV.ResetCursorPos();
+
+	//	remove pcoIdX
+	ret=smallTLV.RemoveNextItemL(pcoIdX);
+	TEST(ret==KErrNone);
+	
+	//	remove pcoIdX
+	ret=smallTLV.RemoveNextItemL(pcoIdX);
+	TEST(ret==KErrNone);
+	
+	ret=smallTLV.AppendItemL(pcoIdZ,appendablePtrX);
+	TEST(ret==KErrNone);
+	ret=smallTLV.AnyNextItemL(pcoIdY,bigEnoughPtr);
+	TEST(ret==KErrNone);
+	TEST(pcoIdY.Id()==YId);	
+	TEST(bigEnoughPtr==appendablePtrY);
+	
+	ret=smallTLV.AnyNextItemL(pcoIdZ,bigEnoughPtr);
+	TEST(ret==KErrNone);
+	TEST(pcoIdZ.Id()==ZId);	
+	TEST(bigEnoughPtr==appendablePtrX);
+		
+	// 	remove pcoIdY
+	ret=smallTLV.RemoveNextItemL(pcoIdY);
+	TEST(ret==KErrNotFound);
+
+	//	reset cursor
+	smallTLV.ResetCursorPos();
+	ret=smallTLV.RemoveNextItemL(pcoIdX);
+	TEST(ret==KErrNotFound);
+	ret=smallTLV.RemoveNextItemL(pcoIdY);
+	TEST(ret==KErrNone);
+	ret=smallTLV.RemoveNextItemL(pcoIdZ);
+	TEST(ret==KErrNone);
+
+
+	//	---------------------------------------------------
+	//	TEST CASE 4 - AnyNextItemL
+	//	Buffer is Empty
+	//	---------------------------------------------------
+	//	Get any next item from zero length TLV
+	ret=zeroTLV.AnyNextItemL(pcoIdY,bigEnoughPtr);
+	TEST(ret==KErrNotFound);
+
+	ret=smallTLV.AnyNextItemL(pcoIdY,tooSmallPtr);
+	TEST(ret==KErrNotFound);
+
+	//	Append Item
+	ret=smallTLV.AppendItemL(pcoIdX,appendablePtrX);
+	TEST(ret==KErrNone);
+	
+	//	Get item after appending an existing item
+	ret=smallTLV.NextItemL(pcoIdX,bigEnoughPtr);
+	TEST(ret==KErrNone);
+	TEST(bigEnoughPtr==appendablePtrX);
+			
+	ret=smallTLV.AppendItemL(pcoIdY,appendablePtrY);
+	TEST(ret==KErrNone);
+	ret=smallTLV.AppendItemL(pcoIdX,appendablePtrX);
+	TEST(ret==KErrNone);
+
+	//	Searching for item while cursor at end of buffer
+	ret=smallTLV.AnyNextItemL(pcoIdY,bigEnoughPtr);
+	TEST(ret==KErrNone);
+	TEST(pcoIdY.Id()==YId);	
+	TEST(bigEnoughPtr==appendablePtrY);
+	
+	//	Reset cursor
+	smallTLV.ResetCursorPos();
+		
+	//	Get item into tooSmallbuf
+	ret=smallTLV.AnyNextItemL(pcoIdX,tooSmallPtr);
+	TEST(ret==KErrNone);
+
+	//	Reset cursor
+	smallTLV.ResetCursorPos();
+		
+	//	Get 3 items
+	ret=smallTLV.AnyNextItemL(pcoIdX,bigEnoughPtr);
+	TEST(ret==KErrNone);
+	TEST(pcoIdX.Id()==XId);	
+	TEST(bigEnoughPtr==appendablePtrX);
+	
+	//	second item
+	ret=smallTLV.AnyNextItemL(pcoIdY,bigEnoughPtr);
+	TEST(ret==KErrNone);
+	TEST(pcoIdY.Id()==YId);	
+	TEST(bigEnoughPtr==appendablePtrY);
+	
+	//	third item
+	ret=smallTLV.AnyNextItemL(pcoIdX,bigEnoughPtr);
+	TEST(ret==KErrNone);
+	TEST(pcoIdX.Id()==XId);	
+	TEST(bigEnoughPtr==appendablePtrX);
+
+	//	try get item at end of buffer
+	ret=smallTLV.AnyNextItemL(pcoIdY,bigEnoughPtr);
+	TEST(ret==KErrNotFound);
+
+	//	---------------------------------------------------
+	//	TEST CASE 5 - Random pattern of calls
+	//	Buffer contains XYX
+	//	---------------------------------------------------
+	//	Clear Buffer
+	//	reset cursor
+	smallTLV.ResetCursorPos();
+	//	remove pcoIdX
+
+	ret=smallTLV.RemoveNextItemL(pcoIdX);
+	TEST(ret== KErrNone);
+
+	// 	remove pcoIdY
+	ret=smallTLV.RemoveNextItemL(pcoIdY);
+	TEST(ret== KErrNone);
+
+	//	remove pcoIdX
+	ret=smallTLV.RemoveNextItemL(pcoIdX);
+	TEST(ret== KErrNone);	
+
+	//  Buffer is Empty
+	//	Append Item
+	ret=smallTLV.AppendItemL(pcoIdX,appendablePtrX);
+	TEST(ret==KErrNone);
+		
+	// 	remove pcoIdX after appending pcoIdX
+	ret=smallTLV.RemoveNextItemL(pcoIdX);
+	TEST(ret==KErrNone);
+	
+	//	Append Item
+	ret=smallTLV.AppendItemL(pcoIdY,appendablePtrY);
+	TEST(ret==KErrNone);
+
+	//	try get any item after adding pcoIdY
+	ret=smallTLV.AnyNextItemL(pcoIdY,bigEnoughPtr);
+	TEST(ret==KErrNone);
+	TEST(pcoIdY.Id()==YId);	
+	TEST(bigEnoughPtr==appendablePtrY);
+	
+	//	reset cursor
+	//	Buffer contains Y
+	smallTLV.ResetCursorPos();
+
+	//	get item
+	ret=smallTLV.AnyNextItemL(pcoIdY,bigEnoughPtr);
+	TEST(ret==KErrNone);
+	TEST(pcoIdY.Id()==YId);
+	
+	//	Get item pcoIdY
+	ret=smallTLV.NextItemL(pcoIdY,bigEnoughPtr);
+	TEST(ret==KErrNotFound);
+
+	// 	remove pcoIdX
+	ret=smallTLV.RemoveNextItemL(pcoIdX);
+	TEST(ret==KErrNotFound);
+	
+	
+	//	---------------------------------------------------
+	//	Test CASE 6 - TPcoId
+	//	---------------------------------------------------
+	const TUint16 KFirstPcoId=257;
+	const TUint16 KSecondPcoId=0x103;
+	const TUint16 KSecondPcoIdFlipped=0x301;
+	const TInt KTwoByte=0xFFFE;
+	const TInt KTwoByteFlipped=0xFEFF;
+	const TInt16 KIDSize=sizeof(TUint16);
+	
+	//	Create  PCO_ID's
+	RPacketContext::TPcoId firstId(KFirstPcoId);
+	
+	//	---------------------------------------------------
+	//	-- ExternalizeL
+	//	---------------------------------------------------
+	//	-- to buffer large enough to hold value
+	//	-- Memory to contain ID - 4 bytes
+	TInt bigExternalizedBuff(KZero);
+	
+	//	Create TPtr to the first byte
+	TPtr8 bigExternalizedPtr(reinterpret_cast<TUint8*>(&bigExternalizedBuff),sizeof(TInt),sizeof(TInt));
+
+	firstId.ExternalizeL(bigExternalizedPtr);
+	TEST(bigExternalizedBuff==KFirstPcoId);
+		
+	//	-- to buffer to small to hold value
+	//	-- Memory to contain ID - 1 byte
+	TUint8 smallExternalizedBuff(KZero);
+	//	Create TPtr to the first byte
+	TPtr8 smallExternalizedPtr(static_cast<TUint8*>(&smallExternalizedBuff),sizeof(TUint8),sizeof(TUint8));
+
+	//	Externalize to a pointer with size less than needed.
+	TRAP(err,firstId.ExternalizeL(smallExternalizedPtr));
+	TEST(err==KErrOverflow);
+	
+	//	-- InternalizeL
+	//	-- Try internalize a 
+	TRAP(err,firstId.InternalizeL(smallExternalizedPtr));
+	TEST(err==KErrUnderflow);
+	
+	bigExternalizedBuff=KTwoByte;
+	firstId.InternalizeL(bigExternalizedPtr);
+	TEST(firstId.Id()== KTwoByteFlipped);
+	
+	//	-- SerializedLength
+	TUint16 size=firstId.SerializedLength();
+	TEST(size==KIDSize);
+	
+	//	-- SetId	
+	RPacketContext::TPcoId secondId(0);
+	secondId.SetId(KSecondPcoId);
+	TEST(secondId.Id()==KSecondPcoId);
+	
+	//	Check with Externalize
+	secondId.ExternalizeL(bigExternalizedPtr);
+	TEST(bigExternalizedBuff==KSecondPcoIdFlipped);
+	
+	//	-- IsEqual
+	firstId.SetId(KSecondPcoId);
+	secondId.SetId(KSecondPcoId);
+	TBool result=firstId.IsEqual(secondId);
+	TEST(result);
+	
+	secondId.SetId(KFirstPcoId);
+	result=firstId.IsEqual(secondId);
+	TEST(!result);
+	
+	//	---------------------------------------------------
+	//	Test CASE 7 - NextItemL and RemoveNextItemL using a 
+	//  0 length item
+	//	Buffer is empty
+	//	---------------------------------------------------
+	
+	// Create Buffer A with 0 length
+	const TUint16 AId=3;
+	RPacketContext::TPcoId pcoIdA(AId);
+	TBuf8<KMinimumBufferSize> appendableBufferA;
+	appendableBufferA.SetLength(KZero);
+	TPtr8 appendablePtrA(const_cast<TUint8*>(appendableBufferA.Ptr()),appendableBufferA.Length(),appendableBufferA.Length());	
+
+	// reset cursor
+	smallTLV.ResetCursorPos();
+
+	// Append 0 length item to TLV struct
+	ret=smallTLV.AppendItemL(pcoIdA, appendablePtrA);
+	TEST(ret==KErrNone);
+	
+	// Try to read back 0 length item
+	// Will fail with KErrNotFound if unsuccessful
+	ret=smallTLV.NextItemL(pcoIdA, bigEnoughPtr);
+	TEST(ret==KErrNone);
+	TEST(bigEnoughPtr==appendablePtrA);
+	
+	//	reset cursor
+	smallTLV.ResetCursorPos();
+	
+	// Finally remove item with 0 length
+	// Will fail with KErrNotFound if unsuccessful
+	ret=smallTLV.RemoveNextItemL(pcoIdA);
+	TEST(ret==KErrNone);
+
+	return TestStepResult();
+}
+
+