sl@0: // Copyright (c) 2002-2010 Nokia Corporation and/or its subsidiary(-ies). sl@0: // All rights reserved. sl@0: // This component and the accompanying materials are made available sl@0: // under the terms of "Eclipse Public License v1.0" sl@0: // which accompanies this distribution, and is available sl@0: // at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: // sl@0: // Initial Contributors: sl@0: // Nokia Corporation - initial contribution. sl@0: // sl@0: // Contributors: sl@0: // sl@0: // Description: sl@0: // sl@0: sl@0: #include sl@0: #include "t_logutil2.h" sl@0: #include sl@0: sl@0: RTest TheTest(_L("t_logevent")); sl@0: sl@0: TBool CompareEvents(const CLogEvent& aLeft, const CLogEvent& aRight) sl@0: { sl@0: TBool ret = aLeft.Data() == aRight.Data(); sl@0: ret = ret && aLeft.Description() == aRight.Description(); sl@0: ret = ret && aLeft.Direction() == aRight.Direction(); sl@0: ret = ret && aLeft.Duration() == aRight.Duration(); sl@0: ret = ret && aLeft.DurationType() == aRight.DurationType(); sl@0: ret = ret && aLeft.EventType() == aRight.EventType(); sl@0: ret = ret && aLeft.Flags() == aRight.Flags(); sl@0: ret = ret && aLeft.Id() == aRight.Id(); sl@0: ret = ret && aLeft.Link() == aRight.Link(); sl@0: ret = ret && aLeft.Number() == aRight.Number(); sl@0: ret = ret && aLeft.RemoteParty() == aRight.RemoteParty(); sl@0: ret = ret && aLeft.Status() == aRight.Status(); sl@0: ret = ret && aLeft.Subject() == aRight.Subject(); sl@0: ret = ret && aLeft.Time() == aRight.Time(); sl@0: return ret; sl@0: } sl@0: sl@0: void TestStoreL(const CLogEvent& aEvent) sl@0: { sl@0: // const TInt size = aEvent.Size(); sl@0: sl@0: //Store sl@0: CBufFlat* buf = CBufFlat::NewL(0x100); sl@0: CleanupStack::PushL(buf); sl@0: RBufWriteStream write(*buf); sl@0: write << aEvent; sl@0: write.CommitL(); sl@0: sl@0: //Restore sl@0: CLogEvent* event = CLogEvent::NewL(); sl@0: CleanupStack::PushL(event); sl@0: RBufReadStream read(*buf); sl@0: read >> *event; sl@0: sl@0: TBool ret = CompareEvents(aEvent, *event); sl@0: TEST(ret); sl@0: sl@0: CleanupStack::PopAndDestroy(2); sl@0: } sl@0: sl@0: /** sl@0: @SYMTestCaseID SYSLIB-LOGENG-CT-1008 sl@0: @SYMTestCaseDesc Tests for writing different events to a store sl@0: @SYMTestPriority High sl@0: @SYMTestActions Calls up TestStoreL() function sl@0: @SYMTestExpectedResults Test must not fail sl@0: @SYMREQ REQ0000 sl@0: */ sl@0: LOCAL_C void TestEventL() sl@0: { sl@0: TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-1008 ")); sl@0: CLogEvent* event1 = CLogEvent::NewL(); sl@0: CleanupStack::PushL(event1); sl@0: sl@0: // Event Id sl@0: TEST(event1->Id() == KLogNullId); sl@0: TestStoreL(*event1); sl@0: sl@0: event1->SetId(0x12345678); sl@0: TEST(event1->Id() == 0x12345678); sl@0: TestStoreL(*event1); sl@0: sl@0: event1->SetId(KMaxTInt32); sl@0: TEST(event1->Id() == KMaxTInt32); sl@0: TestStoreL(*event1); sl@0: sl@0: event1->SetId(0); sl@0: TEST(event1->Id() == 0); sl@0: TestStoreL(*event1); sl@0: sl@0: // Event type sl@0: event1->SetEventType(TUid::Null()); sl@0: TestStoreL(*event1); sl@0: sl@0: event1->SetEventType(TUid::Uid(0x12345678)); sl@0: TEST(event1->EventType() == TUid::Uid(0x12345678)); sl@0: TestStoreL(*event1); sl@0: sl@0: event1->SetEventType(TUid::Uid(KMaxTInt32)); sl@0: TEST(event1->EventType() == TUid::Uid(KMaxTInt32)); sl@0: TestStoreL(*event1); sl@0: sl@0: event1->SetEventType(TUid::Null()); sl@0: TEST(event1->EventType() == TUid::Null()); sl@0: TestStoreL(*event1); sl@0: sl@0: // Remote Party sl@0: TEST(event1->RemoteParty() == KNullDesC); sl@0: TestStoreL(*event1); sl@0: sl@0: HBufC* buf = TestUtils::CreateBufLC(KLogMaxRemotePartyLength / 2); sl@0: event1->SetRemoteParty(buf->Des()); sl@0: TEST(event1->RemoteParty() == buf->Des()); sl@0: CleanupStack::PopAndDestroy(); // buf sl@0: TestStoreL(*event1); sl@0: sl@0: buf = TestUtils::CreateBufLC(KLogMaxRemotePartyLength); sl@0: event1->SetRemoteParty(buf->Des()); sl@0: TEST(event1->RemoteParty() == buf->Des()); sl@0: CleanupStack::PopAndDestroy(); // buf sl@0: TestStoreL(*event1); sl@0: sl@0: buf = TestUtils::CreateBufLC(KLogMaxRemotePartyLength * 2); sl@0: event1->SetRemoteParty(buf->Des()); sl@0: TEST(event1->RemoteParty() == buf->Des().Left(KLogMaxRemotePartyLength)); sl@0: CleanupStack::PopAndDestroy(); // buf sl@0: TestStoreL(*event1); sl@0: sl@0: event1->SetRemoteParty(KNullDesC); sl@0: TEST(event1->RemoteParty() == KNullDesC); sl@0: TestStoreL(*event1); sl@0: sl@0: // Direction sl@0: TEST(event1->Direction() == KNullDesC); sl@0: TestStoreL(*event1); sl@0: sl@0: buf = TestUtils::CreateBufLC(KLogMaxDirectionLength / 2); sl@0: event1->SetDirection(buf->Des()); sl@0: TEST(event1->Direction() == buf->Des()); sl@0: CleanupStack::PopAndDestroy(); // buf sl@0: TestStoreL(*event1); sl@0: sl@0: buf = TestUtils::CreateBufLC(KLogMaxDirectionLength); sl@0: event1->SetDirection(buf->Des()); sl@0: TEST(event1->Direction() == buf->Des()); sl@0: CleanupStack::PopAndDestroy(); // buf sl@0: TestStoreL(*event1); sl@0: sl@0: buf = TestUtils::CreateBufLC(KLogMaxDirectionLength * 2); sl@0: event1->SetDirection(buf->Des()); sl@0: TEST(event1->Direction() == buf->Des().Left(KLogMaxDirectionLength)); sl@0: CleanupStack::PopAndDestroy(); // buf sl@0: TestStoreL(*event1); sl@0: sl@0: event1->SetDirection(KNullDesC); sl@0: TEST(event1->Direction() == KNullDesC); sl@0: TestStoreL(*event1); sl@0: sl@0: // Time sl@0: TTime time; sl@0: sl@0: time.UniversalTime(); sl@0: event1->SetTime(time); sl@0: TEST(event1->Time() == time); sl@0: TestStoreL(*event1); sl@0: sl@0: time.HomeTime(); sl@0: event1->SetTime(time); sl@0: TEST(event1->Time() == time); sl@0: TestStoreL(*event1); sl@0: sl@0: // Duration Type sl@0: TEST(event1->DurationType() == KLogNullDurationType); sl@0: sl@0: event1->SetDurationType(0xf); sl@0: TEST(event1->DurationType() == 0xf); sl@0: TestStoreL(*event1); sl@0: sl@0: event1->SetDurationType(KMaxTInt8); sl@0: TEST(event1->DurationType() == KMaxTInt8); sl@0: TestStoreL(*event1); sl@0: sl@0: event1->SetDurationType(KLogNullDurationType); sl@0: TEST(event1->DurationType() == KLogNullDurationType); sl@0: TestStoreL(*event1); sl@0: sl@0: // Duration sl@0: TEST(event1->Duration() == KLogNullDuration); sl@0: sl@0: event1->SetDuration(0x12345678); sl@0: TEST(event1->Duration() == 0x12345678); sl@0: TestStoreL(*event1); sl@0: sl@0: event1->SetDuration(KMaxTUint32); sl@0: TEST(event1->Duration() == KMaxTUint32); sl@0: TestStoreL(*event1); sl@0: sl@0: event1->SetDuration(KLogNullDuration); sl@0: TEST(event1->Duration() == KLogNullDuration); sl@0: TestStoreL(*event1); sl@0: sl@0: // Status sl@0: TEST(event1->Status() == KNullDesC); sl@0: sl@0: buf = TestUtils::CreateBufLC(KLogMaxStatusLength / 2); sl@0: event1->SetStatus(buf->Des()); sl@0: TEST(event1->Status() == buf->Des()); sl@0: CleanupStack::PopAndDestroy(); // buf sl@0: TestStoreL(*event1); sl@0: sl@0: buf = TestUtils::CreateBufLC(KLogMaxStatusLength); sl@0: event1->SetStatus(buf->Des()); sl@0: TEST(event1->Status() == buf->Des()); sl@0: CleanupStack::PopAndDestroy(); // buf sl@0: TestStoreL(*event1); sl@0: sl@0: buf = TestUtils::CreateBufLC(KLogMaxStatusLength * 2); sl@0: event1->SetStatus(buf->Des()); sl@0: TEST(event1->Status() == buf->Des().Left(KLogMaxStatusLength)); sl@0: CleanupStack::PopAndDestroy(); // buf sl@0: TestStoreL(*event1); sl@0: sl@0: event1->SetStatus(KNullDesC); sl@0: TEST(event1->Status() == KNullDesC); sl@0: TestStoreL(*event1); sl@0: sl@0: // Subject sl@0: TEST(event1->Subject() == KNullDesC); sl@0: sl@0: buf = TestUtils::CreateBufLC(KLogMaxSubjectLength / 2); sl@0: event1->SetSubject(buf->Des()); sl@0: TEST(event1->Subject() == buf->Des()); sl@0: CleanupStack::PopAndDestroy(); // buf sl@0: TestStoreL(*event1); sl@0: sl@0: buf = TestUtils::CreateBufLC(KLogMaxSubjectLength); sl@0: event1->SetSubject(buf->Des()); sl@0: TEST(event1->Subject() == buf->Des()); sl@0: CleanupStack::PopAndDestroy(); // buf sl@0: TestStoreL(*event1); sl@0: sl@0: buf = TestUtils::CreateBufLC(KLogMaxSubjectLength * 2); sl@0: event1->SetSubject(buf->Des()); sl@0: TEST(event1->Subject() == buf->Des().Left(KLogMaxSubjectLength)); sl@0: CleanupStack::PopAndDestroy(); // buf sl@0: TestStoreL(*event1); sl@0: sl@0: event1->SetSubject(KNullDesC); sl@0: TEST(event1->Subject() == KNullDesC); sl@0: TestStoreL(*event1); sl@0: sl@0: // Number sl@0: TEST(event1->Number() == KNullDesC); sl@0: sl@0: buf = TestUtils::CreateBufLC(KLogMaxNumberLength / 2); sl@0: event1->SetNumber(buf->Des()); sl@0: TEST(event1->Number() == buf->Des()); sl@0: CleanupStack::PopAndDestroy(); // buf sl@0: TestStoreL(*event1); sl@0: sl@0: buf = TestUtils::CreateBufLC(KLogMaxNumberLength); sl@0: event1->SetNumber(buf->Des()); sl@0: TEST(event1->Number() == buf->Des()); sl@0: CleanupStack::PopAndDestroy(); // buf sl@0: TestStoreL(*event1); sl@0: sl@0: buf = TestUtils::CreateBufLC(KLogMaxNumberLength * 2); sl@0: event1->SetNumber(buf->Des()); sl@0: TEST(event1->Number() == buf->Des().Left(KLogMaxNumberLength)); sl@0: CleanupStack::PopAndDestroy(); // buf sl@0: TestStoreL(*event1); sl@0: sl@0: event1->SetNumber(KNullDesC); sl@0: TEST(event1->Number() == KNullDesC); sl@0: TestStoreL(*event1); sl@0: sl@0: // Contact sl@0: TEST(event1->Contact() == KLogNullContactId); sl@0: sl@0: event1->SetContact(0x12345678); sl@0: TEST(event1->Contact() == 0x12345678); sl@0: TestStoreL(*event1); sl@0: sl@0: event1->SetContact(KMaxTInt32); sl@0: TEST(event1->Contact() == KMaxTInt32); sl@0: TestStoreL(*event1); sl@0: sl@0: event1->SetContact(KLogNullContactId); sl@0: TEST(event1->Contact() == KLogNullContactId); sl@0: TestStoreL(*event1); sl@0: sl@0: event1->SetContact(KMinTInt32); sl@0: TEST(event1->Contact() == KMinTInt32); sl@0: TestStoreL(*event1); sl@0: sl@0: // Link sl@0: TEST(event1->Link() == KLogNullLink); sl@0: sl@0: event1->SetLink(0x12345678); sl@0: TEST(event1->Link() == 0x12345678); sl@0: TestStoreL(*event1); sl@0: sl@0: event1->SetLink(KMaxTUint32); sl@0: TEST(event1->Link() == KMaxTUint32); sl@0: TestStoreL(*event1); sl@0: sl@0: event1->SetLink(KLogNullLink); sl@0: TEST(event1->Link() == KLogNullLink); sl@0: sl@0: // Description sl@0: TEST(event1->Description() == KNullDesC); sl@0: sl@0: buf = TestUtils::CreateBufLC(KLogMaxDescriptionLength / 2); sl@0: event1->SetDescription(buf->Des()); sl@0: TEST(event1->Description() == buf->Des()); sl@0: CleanupStack::PopAndDestroy(); // buf sl@0: TestStoreL(*event1); sl@0: sl@0: buf = TestUtils::CreateBufLC(KLogMaxDescriptionLength); sl@0: event1->SetDescription(buf->Des()); sl@0: TEST(event1->Description() == buf->Des()); sl@0: CleanupStack::PopAndDestroy(); // buf sl@0: TestStoreL(*event1); sl@0: sl@0: buf = TestUtils::CreateBufLC(KLogMaxDescriptionLength * 2); sl@0: event1->SetDescription(buf->Des()); sl@0: TEST(event1->Description() == buf->Des().Left(KLogMaxDescriptionLength)); sl@0: CleanupStack::PopAndDestroy(); // buf sl@0: TestStoreL(*event1); sl@0: sl@0: event1->SetDescription(KNullDesC); sl@0: TEST(event1->Description() == KNullDesC); sl@0: sl@0: // Flags sl@0: TEST(event1->Flags() == KLogNullFlags); sl@0: event1->SetFlags(1); sl@0: TEST(event1->Flags() == 1); sl@0: TestStoreL(*event1); sl@0: event1->SetFlags(2); sl@0: TEST(event1->Flags() == 3); sl@0: event1->SetFlags(4); sl@0: TEST(event1->Flags() == 7); sl@0: event1->SetFlags(8); sl@0: TEST(event1->Flags() == KLogFlagsMask); sl@0: event1->ClearFlags(8); sl@0: TEST(event1->Flags() == 7); sl@0: event1->ClearFlags(4); sl@0: TEST(event1->Flags() == 3); sl@0: event1->ClearFlags(2); sl@0: TEST(event1->Flags() == 1); sl@0: event1->ClearFlags(1); sl@0: TEST(event1->Flags() == KLogNullFlags); sl@0: sl@0: event1->SetFlags(1); sl@0: TEST(event1->Flags() == 1); sl@0: event1->SetFlags(3); sl@0: TEST(event1->Flags() == 3); sl@0: event1->SetFlags(7); sl@0: TEST(event1->Flags() == 7); sl@0: event1->SetFlags(15); sl@0: event1->SetFlags(KLogFlagsMask); sl@0: TEST(event1->Flags() == KLogFlagsMask); sl@0: event1->ClearFlags(KLogFlagsMask); sl@0: TEST(event1->Flags() == KLogNullFlags); sl@0: sl@0: event1->SetFlags(0x5); sl@0: TEST(event1->Flags() == 0x5); sl@0: event1->SetFlags(0xA); sl@0: TEST(event1->Flags() == KLogFlagsMask); sl@0: event1->ClearFlags(0x5); sl@0: TEST(event1->Flags() == 0xA); sl@0: event1->ClearFlags(0xA); sl@0: TEST(event1->Flags() == KLogNullFlags); sl@0: sl@0: // Data sl@0: TEST(event1->Data() == KNullDesC8); sl@0: sl@0: HBufC8* buf8; sl@0: sl@0: buf8 = TestUtils::CreateBuf8LC(100); sl@0: event1->SetDataL(buf8->Des()); sl@0: TEST(event1->Data() == buf8->Des()); sl@0: CleanupStack::PopAndDestroy(); sl@0: TestStoreL(*event1); sl@0: sl@0: buf8 = TestUtils::CreateBuf8LC(200); sl@0: event1->SetDataL(buf8->Des()); sl@0: TEST(event1->Data() == buf8->Des()); sl@0: CleanupStack::PopAndDestroy(); sl@0: TestStoreL(*event1); sl@0: sl@0: buf8 = TestUtils::CreateBuf8LC(400); sl@0: event1->SetDataL(buf8->Des()); sl@0: TEST(event1->Data() == buf8->Des()); sl@0: CleanupStack::PopAndDestroy(); sl@0: TestStoreL(*event1); sl@0: sl@0: event1->SetDataL(KNullDesC8); sl@0: TEST(event1->Data() == KNullDesC8); sl@0: sl@0: // streaming sl@0: TFileName storename = _L("c:\\T_LOGEVENT_DATA"); sl@0: TUid uid={0x12345678}; sl@0: sl@0: // create a store sl@0: theFs.Delete(storename); sl@0: CDictionaryFileStore* store = CDictionaryFileStore::OpenLC(theFs, storename, uid); sl@0: sl@0: RDictionaryWriteStream write; sl@0: RDictionaryReadStream read; sl@0: sl@0: event1->SetDataL(KNullDesC8); sl@0: sl@0: uid.iUid++; sl@0: write.AssignL(*store, uid); sl@0: write << event1->Data(); sl@0: write.CommitL(); sl@0: write.Close(); sl@0: sl@0: read.OpenL(*store, uid); sl@0: event1->SetDataL(read, 0); sl@0: read.Close(); sl@0: sl@0: TEST(event1->Data() == KNullDesC8); sl@0: sl@0: buf8 = TestUtils::CreateBuf8LC(100); sl@0: event1->SetDataL(buf8->Des()); sl@0: sl@0: uid.iUid++; sl@0: write.AssignL(*store, uid); sl@0: write.WriteL(event1->Data()); sl@0: write.CommitL(); sl@0: write.Close(); sl@0: sl@0: read.OpenL(*store, uid); sl@0: event1->SetDataL(read, 100); sl@0: read.Close(); sl@0: sl@0: TEST(event1->Data() == buf8->Des()); sl@0: CleanupStack::PopAndDestroy(); // buf8 sl@0: sl@0: buf8 = TestUtils::CreateBuf8LC(200); sl@0: event1->SetDataL(buf8->Des()); sl@0: sl@0: uid.iUid++; sl@0: write.AssignL(*store, uid); sl@0: write.WriteL(event1->Data()); sl@0: write.CommitL(); sl@0: write.Close(); sl@0: sl@0: read.OpenL(*store, uid); sl@0: event1->SetDataL(read, 200); sl@0: read.Close(); sl@0: sl@0: TEST(event1->Data() == buf8->Des()); sl@0: CleanupStack::PopAndDestroy(); // buf8 sl@0: sl@0: buf8 = TestUtils::CreateBuf8LC(400); sl@0: event1->SetDataL(buf8->Des()); sl@0: sl@0: uid.iUid++; sl@0: write.AssignL(*store, uid); sl@0: write.WriteL(event1->Data()); sl@0: write.CommitL(); sl@0: write.Close(); sl@0: sl@0: read.OpenL(*store, uid); sl@0: event1->SetDataL(read, 400); sl@0: read.Close(); sl@0: sl@0: TEST(event1->Data() == buf8->Des()); sl@0: CleanupStack::PopAndDestroy(2); // buf8, store sl@0: sl@0: // Copying sl@0: event1->SetId(0x12345678); sl@0: event1->SetEventType(TUid::Uid(0x12345678)); sl@0: sl@0: buf = TestUtils::CreateBufLC(KLogMaxRemotePartyLength / 2); sl@0: event1->SetRemoteParty(buf->Des()); sl@0: TEST(event1->RemoteParty() == buf->Des()); sl@0: CleanupStack::PopAndDestroy(); // buf sl@0: sl@0: buf = TestUtils::CreateBufLC(KLogMaxDirectionLength / 2); sl@0: event1->SetDirection(buf->Des()); sl@0: TEST(event1->Direction() == buf->Des()); sl@0: CleanupStack::PopAndDestroy(); // buf sl@0: sl@0: event1->SetDurationType(0xf); sl@0: TEST(event1->DurationType() == 0xf); sl@0: sl@0: event1->SetDuration(0x12345678); sl@0: TEST(event1->Duration() == 0x12345678); sl@0: sl@0: buf = TestUtils::CreateBufLC(KLogMaxStatusLength / 2); sl@0: event1->SetStatus(buf->Des()); sl@0: TEST(event1->Status() == buf->Des()); sl@0: CleanupStack::PopAndDestroy(); // buf sl@0: sl@0: buf = TestUtils::CreateBufLC(KLogMaxSubjectLength / 2); sl@0: event1->SetSubject(buf->Des()); sl@0: TEST(event1->Subject() == buf->Des()); sl@0: CleanupStack::PopAndDestroy(); // buf sl@0: sl@0: buf = TestUtils::CreateBufLC(KLogMaxNumberLength / 2); sl@0: event1->SetNumber(buf->Des()); sl@0: TEST(event1->Number() == buf->Des()); sl@0: CleanupStack::PopAndDestroy(); // buf sl@0: sl@0: event1->SetContact(0x12345678); sl@0: TEST(event1->Contact() == 0x12345678); sl@0: sl@0: event1->SetLink(0x12345678); sl@0: TEST(event1->Link() == 0x12345678); sl@0: sl@0: buf = TestUtils::CreateBufLC(KLogMaxDescriptionLength / 2); sl@0: event1->SetDescription(buf->Des()); sl@0: TEST(event1->Description() == buf->Des()); sl@0: CleanupStack::PopAndDestroy(); // buf sl@0: sl@0: buf8 = TestUtils::CreateBuf8LC(200); sl@0: event1->SetDataL(buf8->Des()); sl@0: TEST(event1->Data() == buf8->Des()); sl@0: CleanupStack::PopAndDestroy(); sl@0: sl@0: CLogEvent* event2 = CLogEvent::NewL(); sl@0: CleanupStack::PushL(event2); sl@0: TEST(!TestUtils::EventsEqual(*event1, *event2)); sl@0: sl@0: event2->CopyL(*event1); sl@0: TEST(TestUtils::EventsEqual(*event1, *event2)); sl@0: sl@0: CleanupStack::PopAndDestroy(); // event2; sl@0: sl@0: event2 = CLogEvent::NewL(); sl@0: CleanupStack::PushL(event2); sl@0: TEST(!TestUtils::EventsEqual(*event1, *event2)); sl@0: sl@0: event1->CopyL(*event2); sl@0: TEST(TestUtils::EventsEqual(*event1, *event2)); sl@0: sl@0: CleanupStack::PopAndDestroy(2); // event1, event2; sl@0: sl@0: ::DeleteDataFile(storename); sl@0: } sl@0: sl@0: /** sl@0: @SYMTestCaseID SYSLIB-LOGENG-CT-1009 sl@0: @SYMTestCaseDesc Tests for CLogEvent::NewL(),SetDataL() functions sl@0: @SYMTestPriority High sl@0: @SYMTestActions Tests for creation of log event on heap and sl@0: test for setting event specific data from the specified stream and try to read the data back. sl@0: Check for memory errors sl@0: @SYMTestExpectedResults Test must not fail sl@0: @SYMREQ REQ0000 sl@0: */ sl@0: LOCAL_C void TestEventWithHeapFailL() sl@0: { sl@0: TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-1009 ")); sl@0: #ifdef _DEBUG sl@0: TInt failCount = 0; sl@0: #endif sl@0: TInt error; sl@0: TBool finished = EFalse; sl@0: sl@0: CLogEvent* event = NULL; sl@0: sl@0: while(!finished) sl@0: { sl@0: __UHEAP_FAILNEXT(failCount++); sl@0: sl@0: TRAP(error, event = CLogEvent::NewL()); sl@0: sl@0: __UHEAP_RESET; sl@0: sl@0: if (error == KErrNone) sl@0: { sl@0: finished = ETrue; sl@0: CleanupStack::PushL(event); sl@0: } sl@0: else sl@0: TEST2(error, KErrNoMemory); sl@0: } sl@0: sl@0: _LIT8(KDataTest1, "01234567890123456789"); sl@0: _LIT8(KDataTest2, "012345678901234567890123456789"); sl@0: sl@0: finished = EFalse; sl@0: #ifdef _DEBUG sl@0: failCount = 0; sl@0: #endif sl@0: event->SetDataL(KNullDesC8); sl@0: sl@0: while(!finished) sl@0: { sl@0: __UHEAP_FAILNEXT(failCount++); sl@0: sl@0: TRAP(error, event->SetDataL(KDataTest1)); sl@0: sl@0: __UHEAP_RESET; sl@0: sl@0: if (error == KErrNone) sl@0: { sl@0: finished = ETrue; sl@0: TEST(event->Data() == KDataTest1); sl@0: } sl@0: else sl@0: { sl@0: TEST2(error, KErrNoMemory); sl@0: TEST(event->Data() == KNullDesC8); sl@0: } sl@0: } sl@0: sl@0: finished = EFalse; sl@0: #ifdef _DEBUG sl@0: failCount = 0; sl@0: #endif sl@0: event->SetDataL(KNullDesC8); sl@0: sl@0: while(!finished) sl@0: { sl@0: __UHEAP_FAILNEXT(failCount++); sl@0: sl@0: TRAP(error, event->SetDataL(KDataTest2)); sl@0: sl@0: __UHEAP_RESET; sl@0: sl@0: if (error == KErrNone) sl@0: { sl@0: finished = ETrue; sl@0: TEST(event->Data() == KDataTest2); sl@0: } sl@0: else sl@0: { sl@0: TEST2(error, KErrNoMemory); sl@0: TEST(event->Data() == KNullDesC8); sl@0: } sl@0: } sl@0: sl@0: finished = EFalse; sl@0: #ifdef _DEBUG sl@0: failCount = 0; sl@0: #endif sl@0: event->SetDataL(KNullDesC8); sl@0: sl@0: // Check we don't get any more failures sl@0: __UHEAP_FAILNEXT(0); sl@0: event->SetDataL(KDataTest2); sl@0: TEST(event->Data() == KDataTest2); sl@0: event->SetDataL(KDataTest1); sl@0: TEST(event->Data() == KDataTest1); sl@0: event->SetDataL(KNullDesC8); sl@0: TEST(event->Data() == KNullDesC8); sl@0: __UHEAP_RESET; sl@0: sl@0: // streaming sl@0: TFileName storename = _L("c:\\T_BASIC_DATA"); sl@0: TUid uid={0x12345678}; sl@0: sl@0: // create a store sl@0: theFs.Delete(storename); sl@0: CDictionaryFileStore* store = CDictionaryFileStore::OpenLC(theFs, storename, uid); sl@0: sl@0: RDictionaryWriteStream write; sl@0: RDictionaryReadStream read; sl@0: sl@0: uid.iUid++; sl@0: write.AssignL(*store, uid); sl@0: write << KNullDesC8; sl@0: write.CommitL(); sl@0: write.Close(); sl@0: sl@0: read.OpenL(*store, uid); sl@0: sl@0: #ifdef _DEBUG sl@0: failCount = 0; sl@0: #endif sl@0: finished = EFalse; sl@0: sl@0: __UHEAP_FAILNEXT(0); sl@0: event->SetDataL(read, 0); sl@0: __UHEAP_RESET; sl@0: sl@0: read.Close(); sl@0: TEST(event->Data() == KNullDesC8); sl@0: sl@0: HBufC8* buf8 = TestUtils::CreateBuf8LC(100); sl@0: sl@0: uid.iUid++; sl@0: write.AssignL(*store, uid); sl@0: write.WriteL(buf8->Des()); sl@0: write.CommitL(); sl@0: write.Close(); sl@0: sl@0: read.OpenL(*store, uid); sl@0: sl@0: while(!finished) sl@0: { sl@0: __UHEAP_FAILNEXT(failCount++); sl@0: sl@0: TRAP(error, event->SetDataL(read, 100)); sl@0: sl@0: __UHEAP_RESET; sl@0: sl@0: if (error == KErrNone) sl@0: { sl@0: TEST(event->Data() == buf8->Des()); sl@0: read.Close(); sl@0: finished = ETrue; sl@0: } sl@0: else sl@0: { sl@0: TEST2(error, KErrNoMemory); sl@0: TEST(event->Data() == KNullDesC8); sl@0: } sl@0: } sl@0: sl@0: event->SetId(0x12345678); sl@0: event->SetEventType(TUid::Uid(0x12345678)); sl@0: sl@0: HBufC* buf = TestUtils::CreateBufLC(KLogMaxRemotePartyLength / 2); sl@0: event->SetRemoteParty(buf->Des()); sl@0: CleanupStack::PopAndDestroy(); // buf sl@0: sl@0: buf = TestUtils::CreateBufLC(KLogMaxDirectionLength / 2); sl@0: event->SetDirection(buf->Des()); sl@0: CleanupStack::PopAndDestroy(); // buf sl@0: sl@0: TTime time; sl@0: sl@0: time.UniversalTime(); sl@0: event->SetTime(time); sl@0: TEST(event->Time() == time); sl@0: sl@0: event->SetDurationType(0xf); sl@0: event->SetDuration(0x12345678); sl@0: sl@0: buf = TestUtils::CreateBufLC(KLogMaxStatusLength / 2); sl@0: event->SetStatus(buf->Des()); sl@0: CleanupStack::PopAndDestroy(); // buf sl@0: sl@0: buf = TestUtils::CreateBufLC(KLogMaxSubjectLength / 2); sl@0: event->SetSubject(buf->Des()); sl@0: CleanupStack::PopAndDestroy(); // buf sl@0: sl@0: buf = TestUtils::CreateBufLC(KLogMaxNumberLength / 2); sl@0: event->SetNumber(buf->Des()); sl@0: CleanupStack::PopAndDestroy(); // buf sl@0: sl@0: event->SetContact(0x12345678); sl@0: event->SetLink(0x12345678); sl@0: sl@0: buf = TestUtils::CreateBufLC(KLogMaxDescriptionLength / 2); sl@0: event->SetDescription(buf->Des()); sl@0: CleanupStack::PopAndDestroy(); // buf sl@0: sl@0: event->SetFlags(0xA); sl@0: sl@0: buf8 = TestUtils::CreateBuf8LC(100); sl@0: event->SetDataL(buf8->Des()); sl@0: TEST(event->Data() == buf8->Des()); sl@0: CleanupStack::PopAndDestroy(); // buf8 sl@0: sl@0: CLogEvent* event1 = CLogEvent::NewL(); sl@0: CleanupStack::PushL(event1); sl@0: sl@0: CLogEvent* event2 = CLogEvent::NewL(); sl@0: CleanupStack::PushL(event2); sl@0: sl@0: TEST(TestUtils::EventsEqual(*event1, *event2)); sl@0: sl@0: finished = EFalse; sl@0: #ifdef _DEBUG sl@0: failCount = 0; sl@0: #endif sl@0: sl@0: while(!finished) sl@0: { sl@0: __UHEAP_FAILNEXT(failCount++); sl@0: sl@0: TRAP(error, event1->CopyL(*event)); sl@0: sl@0: __UHEAP_RESET; sl@0: sl@0: if (error == KErrNone) sl@0: { sl@0: TEST(!TestUtils::EventsEqual(*event1, *event2)); sl@0: TEST(TestUtils::EventsEqual(*event1, *event)); sl@0: finished = ETrue; sl@0: } sl@0: else sl@0: { sl@0: TEST2(error, KErrNoMemory); sl@0: TEST(TestUtils::EventsEqual(*event1, *event2)); sl@0: TEST(!TestUtils::EventsEqual(*event1, *event)); sl@0: } sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(5); // buf8, store, event, event1, event2 sl@0: ::DeleteDataFile(storename); sl@0: } sl@0: sl@0: /** sl@0: @SYMTestCaseID SYSLIB-LOGENG-CT-1010 sl@0: @SYMTestCaseDesc Tests for CLogEvent::NewL(),CLogEvent::SetDataL() functions sl@0: @SYMTestPriority High sl@0: @SYMTestActions Tests for setting event specific data read from the file and try to read the data back from the event. sl@0: Check for memory errors sl@0: @SYMTestExpectedResults Test must not fail sl@0: @SYMREQ REQ0000 sl@0: */ sl@0: LOCAL_C void TestEventWithFileFailL() sl@0: { sl@0: TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-1010 ")); sl@0: CLogEvent* event = CLogEvent::NewL(); sl@0: CleanupStack::PushL(event); sl@0: sl@0: // streaming sl@0: TFileName storename = _L("c:\\T_BASIC_DATA"); sl@0: TUid uid={0x12345678}; sl@0: sl@0: // create a store sl@0: theFs.Delete(storename); sl@0: CDictionaryFileStore* store = CDictionaryFileStore::OpenLC(theFs, storename, uid); sl@0: sl@0: RDictionaryWriteStream write; sl@0: RDictionaryReadStream read; sl@0: sl@0: uid.iUid++; sl@0: write.AssignL(*store, uid); sl@0: write << KNullDesC8; sl@0: write.CommitL(); sl@0: write.Close(); sl@0: sl@0: read.OpenL(*store, uid); sl@0: sl@0: TInt failCount = 0; sl@0: TBool finished = EFalse; sl@0: TInt error; sl@0: sl@0: theFs.SetErrorCondition(KErrGeneral, 0); sl@0: event->SetDataL(read, 0); sl@0: theFs.SetErrorCondition(KErrNone, 10000); sl@0: sl@0: read.Close(); sl@0: TEST(event->Data() == KNullDesC8); sl@0: sl@0: HBufC8* buf8 = TestUtils::CreateBuf8LC(100); sl@0: sl@0: uid.iUid++; sl@0: write.AssignL(*store, uid); sl@0: write.WriteL(buf8->Des()); sl@0: write.CommitL(); sl@0: write.Close(); sl@0: sl@0: while(!finished) sl@0: { sl@0: read.OpenL(*store, uid); sl@0: theFs.SetErrorCondition(KErrGeneral, failCount++); sl@0: sl@0: TRAP(error, event->SetDataL(read, 100)); sl@0: sl@0: theFs.SetErrorCondition(KErrGeneral, 10000); sl@0: sl@0: read.Close(); sl@0: sl@0: if (error == KErrNone) sl@0: { sl@0: TEST(event->Data() == buf8->Des()); sl@0: finished = ETrue; sl@0: } sl@0: else sl@0: { sl@0: TEST2(error, KErrGeneral); sl@0: TEST(event->Data() == KNullDesC8); sl@0: } sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(3); // buf8, store, event sl@0: ::DeleteDataFile(storename); sl@0: } sl@0: sl@0: void doTestsL() sl@0: { sl@0: TestUtils::Initialize(_L("t_logevent")); sl@0: sl@0: TheTest.Start(_L("Event")); sl@0: // TestServerL(); sl@0: sl@0: sl@0: TestEventL(); sl@0: theLog.Write(_L8("Test 1 OK\n")); sl@0: sl@0: TheTest.Next(_L("Event with heap failure")); sl@0: TestEventWithHeapFailL(); sl@0: theLog.Write(_L8("Test 2 OK\n")); sl@0: sl@0: TheTest.Next(_L("Event with file failure")); sl@0: TestEventWithFileFailL(); sl@0: theLog.Write(_L8("Test 3 OK\n")); sl@0: } sl@0: