--- /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();
+}
+
+