コード例 #1
0
TInt CFloggerTest028_Sync_Static_WriteUniBound::executeStepL()
	{
	TInt ret;
	
	
	// clear the old log messages
	RFileLogger flogger;
	ret = flogger.Connect();
	
	if ( ret == KErrNone )
		{
		flogger.SetLogTags(KStdSubsysTag8, KStdCompTag8);
		flogger.ClearLog();
		flogger.Close();
		
		RFileLogger::Write(KStdSubsysTag8, KStdCompTag8, KTestTooLongMessage16);
		
		TRAPD(r, ret = DoTestCheckWriteL());
		if (r != KErrNone)
			ret = r;
		}
	
	return ret;		
	

	}
コード例 #2
0
TInt CFloggerTest028_Sync_Static_Multiple2::executeStepL()
	{
	TInt ret;
	
	// clear the old log messages
	RFileLogger flogger;
	ret = flogger.Connect();
	
	if ( ret == KErrNone )
		{
		flogger.SetLogTags(KStdSubsysTag8, KStdCompTag8);
		flogger.ClearLog();
		flogger.Close();
		
		for (TInt loop = 1; loop <= KMultipleWriteStressTimes; loop++)
			{		
			RFileLogger::Write(KStdSubsysTag8, KStdCompTag8,KTestMessage);
			RFileLogger::Write(KStdSubsysTag8, KStdCompTag8,KTestTooLongMessage16);
			DoTestWriteFormat(KTestMessageOneParam16,KTestMessageOneParamValue);
			DoTestWriteFormat(KTestTooLongMessageOneParam16,KTestTooLongMessageOneParamValue);
			
			RFileLogger::HexDump(KStdSubsysTag8, KStdCompTag8,KTestMessage8);
			}
		RFileLogger::Write(KStdSubsysTag8, KStdCompTag8,KTestEndMessage8);
		
		TRAPD(r, ret = DoTestCheckWriteL());
		if (r != KErrNone)
			ret = r;
		}
		
	
	return ret;		

	}
コード例 #3
0
TInt CFloggerTest028_Sync_Static_WriteFormatVUni::executeStepL()
	{
	TInt ret;
	
	// clear the old log messages
	RFileLogger flogger;
	ret = flogger.Connect();
	
	if ( ret == KErrNone )
		{
		flogger.SetLogTags(KStdSubsysTag8, KStdCompTag8);
		flogger.ClearLog();
		flogger.Close();
		
		DoTestWriteFormat(KTestMessageOneParam16,KTestMessageOneParamValue);
		
		TRAPD(r, ret = DoTestCheckWriteL());
		if (r != KErrNone)
			ret = r;
		}
		
	
	return ret;		

	}
コード例 #4
0
TInt CFloggerTest016_02::DoTestWriteFormat(TRefByValue<const TDesC8> aFmt,...)
	{

	RFileLogger theFlogger;
	TInt ret = KErrGeneral;
	ret = theFlogger.Connect(); //Just to clear the old log message
	if ( ret == KErrNone)
		ret = theFlogger.SetLogTags(KStdSubsysTag8, KStdCompTag8);
		if ( ret == KErrNone)
			ret = theFlogger.ClearLog();
			if ( ret == KErrNone)
				theFlogger.Close();
	
	User::After(100000);
	
	if (ret == KErrNone)
		{
		VA_LIST list;
		VA_START(list,aFmt);
		
		RFileLogger::WriteFormat(KStdSubsysTag8, KStdCompTag8, aFmt, list);
		User::After(100000);
		return KErrNone;
		}

	return ret;
	}
コード例 #5
0
TInt CFloggerTest011_02::DoTestWrite()
	{
	
	TInt ret = KErrNone;

	
	_LIT(KTestLongMessage,"TC 11_02: This is the long message This is the long message This is the long message This is the long message This is the long message This is the long message This is the long message This is the long message This is the long message This is the long message"); //unicode test decriptor

	RFileLogger theFlogger;

	ret = theFlogger.Connect(); //Just to clear the old log message
	if ( ret == KErrNone)
		ret = theFlogger.SetLogTags(KStdSubsysTag8, KStdCompTag8);
		if ( ret == KErrNone)
			ret = theFlogger.ClearLog();
			if ( ret == KErrNone)
				theFlogger.Close();

	if (ret == KErrNone)
		RFileLogger ::Write(KStdSubsysTag8, KStdCompTag8, KTestLongMessage);
	User::After(100000);

	return KErrNone;

	}
コード例 #6
0
TInt CFloggerTest017_03::DoTestWrite()
	{
	
	RFileLogger theFlogger;
	TInt ret = KErrNone;
	
	ret = theFlogger.Connect(); //Just to clear the old log message
	if (ret == KErrNone)
		ret = theFlogger.SetLogTags(KStdSubsysTag8,KStdCompTag8);
		if (ret == KErrNone)
			ret = theFlogger.ClearLog();
			if (ret == KErrNone)
				theFlogger.Close();

	if (ret == KErrNone)
		{
		_LIT8(KDescText,"TC 17_3:Test Msg"); //8 bit test descriptor
		
		//Write the test datas in the hexa format
		RFileLogger::HexDump(KStdSubsysTag8,KStdCompTag8, KDescText);
		
		
		return KErrNone;
		}
	return ret;
	}
コード例 #7
0
EXPORT_C void CSenLogger::Write(TInt aChannel, TInt aLevel, const TDesC8& aText)
    {
    RFileLogger* pLogger = Logger(aChannel, aLevel);
    if (pLogger)
        {
        pLogger->Write(aText);
        }
    }
コード例 #8
0
EXPORT_C void CSenLogger::WriteFormat(TInt aChannel, TInt aLevel, TRefByValue<const TDesC8> aFmt, VA_LIST& aList)
    {
    RFileLogger* pLogger = Logger(aChannel, aLevel);
    if (pLogger)
        {
        pLogger->WriteFormat(aFmt, aList);
        }    
    }
コード例 #9
0
EXPORT_C void CSenLogger::WriteFormat(TInt aChannel, TInt aLevel, TRefByValue<const TDesC8> aFmt,...)
    {
    RFileLogger* pLogger = Logger(aChannel, aLevel);
    if (pLogger)
        {
        VA_LIST list;
        VA_START(list,aFmt);
        pLogger->WriteFormat(aFmt, list);
        }    
    }
コード例 #10
0
TInt CFloggerTest016_01::DoTestWrite()
	{
	_LIT8(KTestMessageOne,"TC 16_01: The value of test integer variable :%d");
	DoTestWriteFormat(KTestMessageOne, 100);  //Write 8 bit formatted test descriptor

	// connect so we can flush file buffer for heap check since timer is killed in heap checks
	RFileLogger theFlogger;
	theFlogger.Connect();
	theFlogger.SetLogTags(KStdSubsysTag8, KStdCompTag8);
	ForceLogFlush(theFlogger);
	theFlogger.Close();
	return KErrNone; 
	}
コード例 #11
0
void COptionNode::Dump(const TDesC& aTag, const TDesC& aFile)
	{
	RFileLogger f;
	if (f.Connect() == KErrNone)
		{
		f.CreateLog(aTag, aFile, EFileLoggingModeAppend);
		TInt i = 0;
		while (KOptions[i].iCode != OpCode() && ++i < KNumberOfSupportedOptions){/*do nothing*/}
		
		TInt n = iPtr8[1];
		if (i < KNumberOfSupportedOptions)
			{
			f.WriteFormat(_L8("Option Code: %s, length: %d"), KOptions[i].iName, n);
			}
		else
			{
			f.WriteFormat(_L( "Option Code: %d, length %d" ), OpCode(), n );
			}
		if (GetItemLength() > 2)
			{
			f.HexDump(NULL, NULL, GetBodyPtr(), GetLength());
			}
		f.CloseLog();
		f.Close();
		}
	}
コード例 #12
0
TInt CFloggerTest012_01::DoTestWrite()
	{
	_LIT16(KTestMessageOne,"TEST 12.01: The value of test integer variable :%d"); //unicode test decriptor
	RFileLogger::WriteFormat(KStdSubsysTag8, KStdCompTag8, KTestMessageOne, 100);

	// connect so we can flush file buffer for heap check
	RFileLogger theFlogger;
	theFlogger.Connect();
	theFlogger.SetLogTags(KStdSubsysTag8, KStdCompTag8);
	ForceLogFlush(theFlogger);
	theFlogger.Close();	
	
	return KErrNone; 
	}
コード例 #13
0
ファイル: logging.cpp プロジェクト: contextlogger/pyexpat
static void Log(const TDesC8& aText)
	{
	RFileLogger log;
	TInt error = log.Connect();
	if (error)
		{
		return;
		}
	_LIT(KLogFileDir, "pyexpat");
	_LIT(KLogFileName, "pyexpat.txt");
	log.CreateLog(KLogFileDir, KLogFileName, 
				  EFileLoggingModeOverwrite);
	log.Write(aText);
	log.Close();
	}
コード例 #14
0
TInt CFloggerTest017_01::DoTestWrite()
	{
	_LIT8(KDescText, "TC 17_1:Test Msg----"); //Test body descriptor
		
	//Write the test datas in the hexa format
	RFileLogger::HexDump(KStdSubsysTag8,KStdCompTag8, KDescText, KHexTestHeader);

	// connect so we can flush file buffer for heap check since timer is killed in heap checks
	RFileLogger theFlogger;
	theFlogger.Connect();
	theFlogger.SetLogTags(KStdSubsysTag8, KStdCompTag8);
	ForceLogFlush(theFlogger);
	theFlogger.Close();
	return KErrNone; 
	}
コード例 #15
0
TInt CFloggerTest002_01::executeStepL( )
{
    INFO_PRINTF1(_L("Step 002.01 called "));

    RFileLogger theFlogger;
    TPtrC8 ptrSubSystem;
    TPtrC8 ptrComponent;
    ptrSubSystem.Set(_L8("SubSystem"));
    ptrComponent.Set(_L8("Component"));

    TInt result = theFlogger.Connect();
    CleanupClosePushL(theFlogger);
    theFlogger.SetLogTags(ptrSubSystem, ptrComponent);
    CleanupStack::PopAndDestroy();	//logger
    return result;
}
コード例 #16
0
TInt CTestStepFlogger::DoTestConnect(RFileLogger& aLogger)
	{
	TInt ret = KErrNone;
	TPtrC8 ptrSubSystem;
	TPtrC8  ptrComponent;
	ptrSubSystem.Set(_L8("SubSystem"));
	ptrComponent.Set(_L8("Component"));

	ret = aLogger.Connect();
	if (ret == KErrNone)
		ret = aLogger.SetLogTags(ptrSubSystem, ptrComponent); //SetLogTags() of Flogger called

	if (ret == KErrNone)
		ret = aLogger.ClearLog(); //clear the contents from the log
	
	return ret;
	}
コード例 #17
0
EXPORT_C void CSenLogger::WriteAll(TInt aChannel, TInt aLevel, const TDesC8& aText)
    {
    RFileLogger* pLogger = Logger(aChannel, aLevel);
    if ( pLogger )
        {
        TInt i = 0;
        TInt lineAmount(KColumnWidth);
        TInt length = aText.Length();
        while(i<aText.Length())
            {
            if ( length - i < KColumnWidth )
                {
                lineAmount = length - i;    
                }
            pLogger->Write(aText.Mid(i, lineAmount));
            i += KColumnWidth;
            }
        }
    }
コード例 #18
0
TInt CFloggerTest025_BuildTestUrel4::executeStepL()
	{
	
	TInt ret;
	RFileLogger theFlogger;
	
	ret = theFlogger.Connect();
	
	if ( ret == KErrNone)
		{
		theFlogger.SetLogTags(KStdSubsysTag8, KStdCompTag8);
		theFlogger.ClearLog();
		theFlogger.Close();
	
		TestLog4::Test();
		ret = DoTestCheckWriteL();
		}

	return ret;		

	}
コード例 #19
0
TInt CFloggerTest017_05::DoTestWrite()
	{	
	RFileLogger theFlogger;
	TInt ret = KErrNone;
	
	ret = theFlogger.Connect(); //Just to clear the old log message
	if (ret == KErrNone)
		ret = theFlogger.SetLogTags(KStdSubsysTag8,KStdCompTag8);
		if (ret == KErrNone)
			ret = theFlogger.ClearLog();
			if (ret == KErrNone)
				theFlogger.Close();

	if (ret == KErrNone)
		{
		//Write the test datas in the hexa format
		RFileLogger::HexDump(KStdSubsysTag8,KStdCompTag8, KNullDesC8);
		return KErrNone;
		}
	return ret;
	}
コード例 #20
0
GLDEF_C void Debug( TRefByValue<const TDesC> aText, ... )
    {
    #ifdef WINS
    VA_LIST args;
    VA_START( args, aText );

    TBuf<KLogLineLength> buf;
    buf.FormatList( aText, args );

    RFileLogger logger;
    TInt ret=logger.Connect();
    if (ret==KErrNone)
        {
        logger.SetDateAndTime( EFalse,EFalse );
        logger.CreateLog( KLogFolder, KLogFileName, EFileLoggingModeAppend );       
        TBuf<KLogTimeFormatLength> timeStamp;
        TTime now;
        now.HomeTime();
        TDateTime dateTime;
        dateTime = now.DateTime();
        timeStamp.Format( KLogTimeFormat, 
            dateTime.Hour(), dateTime.Minute(),
            dateTime.Second(), dateTime.MicroSecond() );
        buf.Insert( 0, timeStamp );

        logger.Write(buf);
        }

    logger.Close();

    VA_END( args );
    #else
    RDebug::Print(aText);
    #endif
    }
コード例 #21
0
void CEventLogger::SLog(TPtrC aString)
{
	RFileLogger iLogger;
	iLogger.Connect();
	iLogger.CreateLog(KLogDir,KLogFile,EFileLoggingModeAppend);
	iLogger.Write(aString);
	iLogger.CloseLog();
	iLogger.Close();
}
コード例 #22
0
void CTestStepFlogger::ForceLogFlush(RFileLogger& aLogger)
	{
	const TInt KLineLen = KLogBufferSize - KMarginTemplateSize;
	TBuf8<KLineLen> buf;
	buf.SetLength(KLineLen);
	
	for(TUint8 i = 0; i < KLineLen; i++)
		{
		buf[i] = i;
		}
	for(TInt j = 0; j < KHeapBufFillIterations; j++)
		{
		aLogger.Write(buf);
		}
	}
コード例 #23
0
TInt CFloggerTest015_03::DoTestWrite()
	{
	
	TInt ret = KErrNone;
	
	//8 bit test decriptor which is very long
	_LIT8(KTestLongMessage,"TEST 15.03: This is the long message This is the long message This is the long message This is the long message This is the long message This is the long message This is the long message This is the long message This is the long message This is the long message This is the long message"); //8 bit test decriptor
	
	RFileLogger theFlogger;

	ret = theFlogger.Connect(); //Just to clear the old log message
	if ( ret == KErrNone)
		ret = theFlogger.SetLogTags(KStdSubsysTag8, KStdCompTag8);
		if ( ret == KErrNone)
			ret = theFlogger.ClearLog();
			if ( ret == KErrNone)
				theFlogger.Close();

	if (ret == KErrNone)
	
	RFileLogger ::WriteFormat(KStdSubsysTag8, KStdCompTag8, KTestLongMessage);
		
	return KErrNone;
	}
コード例 #24
0
TInt CFloggerTest028_Sync_Setup::executeStepL()
	{
	TInt ret;
	RFileLogger flogger;
	flogger.Connect();
	flogger.__DbgShutDownServer();
	flogger.Close();
	User::After(KWaitForFloggerShutdown);
	TRAP(ret,constructFloggerIniL(KSyncTestsIniFileSettings));
	flogger.Connect();
	flogger.SetLogTags(KStdSubsysTag8, KStdCompTag8);
	flogger.Close();
	return ret;
	}
コード例 #25
0
TInt CFloggerTest011_01::DoTestWrite()
	{
	TInt ret = KErrNone;
	_LIT(KTestMessage,"TC 11_01: This is test messsage"); //unicode test decriptor

	RFileLogger theFlogger;

	//Just to clear the old log message
	ret = theFlogger.Connect(); 
	if ( ret == KErrNone)
		{
		ret = theFlogger.SetLogTags(KStdSubsysTag8, KStdCompTag8);
		if ( ret == KErrNone)
			{
			ret = theFlogger.ClearLog();
			}
		if ( ret == KErrNone)
			{
			theFlogger.Close();
			}
		}

	
	if ( ret == KErrNone)
		{
		// Test case
		RFileLogger::Write(KStdSubsysTag8, KStdCompTag8,KTestMessage);

		// reconnect so we can flush file buffer for heap check
		ret = theFlogger.Connect();
		if (ret == KErrNone)
			{
			theFlogger.SetLogTags(KStdSubsysTag8, KStdCompTag8);
			ForceLogFlush(theFlogger);
			theFlogger.Close();
			}
		}
	return ret;
	
	}
コード例 #26
0
TInt CFloggerTest028_Sync_ConWriteUni::executeStepL()
	{
	TInt ret;
	
	RFileLogger flogger;
	ret = flogger.Connect();
	
	if ( ret == KErrNone )
		{
		flogger.SetLogTags(KStdSubsysTag8, KStdCompTag8);
		flogger.ClearLog();
		flogger.Write(KTestMessage);
		flogger.Close();
		TRAPD(r, ret = DoTestCheckWriteL());
		if (r != KErrNone)
			ret = r;
		}
	
	return ret;		

	}
コード例 #27
0
TInt CFloggerTest028_Sync_ConWriteFormatEUniBound::executeStepL()
	{
	TInt ret;
	
	RFileLogger flogger;
	ret = flogger.Connect();
	
	if ( ret == KErrNone )
		{
		flogger.SetLogTags(KStdSubsysTag8, KStdCompTag8);
		flogger.ClearLog();
		flogger.WriteFormat(KTestTooLongMessageOneParam16,KTestTooLongMessageOneParamValue);
		flogger.Close();
		TRAPD(r, ret = DoTestCheckWriteL());
		if (r != KErrNone)
			ret = r;
		}
	
	return ret;		

	}
コード例 #28
0
void CEventLogger :: SWrite(const TDesC& aModuleName, const TDesC& aMessage)
{
	RFileLogger iLogger;
	iLogger.Connect();
	iLogger.CreateLog(KLogDir,KLogFile,EFileLoggingModeAppend);

	_LIT(CrLfValue,"\r\n");
	TBuf<5> CrLf;
	CrLf.Format(_L("%S"),&CrLfValue);

	_LIT(hyp,"-");
	TBuf<2> Hyphen;
	Hyphen.Format(_L("%S"),&hyp);				

	TInt MessageLen,ModuleNameLen,MessageToLogLen;
	MessageLen = ModuleNameLen = MessageToLogLen = 0;

	MessageLen = aMessage.Length();
	ModuleNameLen = aModuleName.Length();

	MessageToLogLen = ModuleNameLen;
	MessageToLogLen += Hyphen.Length();
	MessageToLogLen += MessageLen;
	MessageToLogLen += CrLf.Length();

	HBufC* MessageToLog = HBufC :: NewLC(MessageToLogLen);

	MessageToLog->Des().Copy(aModuleName);
	MessageToLog->Des().Append(Hyphen);
	MessageToLog->Des().Append(aMessage);
	MessageToLog->Des().Append(CrLf);

	iLogger.Write(*MessageToLog);

	CleanupStack::PopAndDestroy(MessageToLog);

	iLogger.CloseLog();
	iLogger.Close();
}
コード例 #29
0
void CMsvPreferredDriveList::Print()
	{
	_LIT8(KLtBracket, "[");
	_LIT8(KRtBracket, "]: DRIVE-NUM: ");
	_LIT8(KDriveId, " DRIVE-ID: ");
	_LIT8(KStatus, " STATUS: ");
	_LIT8(KAvailable, "EMsvMessageStoreAvailableStatus");
	_LIT8(KUnavailable, "EMsvMessageStoreUnavailableStatus");
	_LIT8(KNotSupported, "EMsvMessageStoreNotSupportedStatus");
	_LIT8(KDiskNotAvailable, "EMsvDriveDiskNotAvailableStatus");
	_LIT8(KCorruptStore, "EMsvMessageStoreCorruptStatus");
	_LIT8(KInvalid, "EMsvInvalidDriveStatus");
		
	RFileLogger logger;
	if (logger.Connect() == KErrNone)
		{
		logger.CreateLog(_L("msgs"), _L("DriveList.txt"), EFileLoggingModeAppend);
		logger.SetDateAndTime(EFalse, EFalse);
		logger.Write(_L(" Preferred Drive List:"));
		logger.Write(_L("--------------------------------"));
		logger.Write(_L(""));
		}
	
	TInt count = Count();
	for(TInt index = 0; index < count; ++index)
		{		
		RBuf8 text;
		text.CreateL(100);
		text.Append(KLtBracket);
		text.AppendNum(index);
		text.Append(KRtBracket);
		text.AppendNum((*iDrives)[index].driveNum);
		text.Append(KDriveId);
		text.AppendNum((*iDrives)[index].driveId);
		text.Append(KStatus);
		switch((*iDrives)[index].status)
			{	
			case EMsvMessageStoreAvailableStatus:
				text.Append(KAvailable);
				break;
			case EMsvMessageStoreUnavailableStatus:
				text.Append(KUnavailable);
				break;
			case EMsvMessageStoreNotSupportedStatus:
				text.Append(KNotSupported);
				break;
			case EMsvDriveDiskNotAvailableStatus:
				text.Append(KDiskNotAvailable);
				break;
			case EMsvMessageStoreCorruptStatus:
				text.Append(KCorruptStore);
				break;
			case EMsvInvalidDriveStatus:
				text.Append(KInvalid);
				break;
			}
				
		logger.Write(text);
		text.Close();		
		logger.Write(_L(""));
		}
	logger.CloseLog();
	logger.Close();
	}
コード例 #30
0
//
//This heap failure member function is used to ensure correct operation in low-memory
// situations. It requires the flogger server to be started in order to inform the server
// on each loop iteration as to the new memory requirement. Thus, this harness is no
// good for cases where the flogger server must be shut down and restarted or
// when server is not meant to be running before the test case commences.
//
TInt CTestStepFlogger::doTestStepWithHeapFailureL( CTestStepFlogger& aTestStep, TInt lowMemory, TInt highMemory, TInt aReturnValue, TBool bypassChecks)
/**
 @param bypassChecks allows a parameter to be passed to the executeStep to let it know that the
 case is being used for heap checking. This is needed because most flogger methods do
 not return an error code when they fail to write due to no memory. Thus, when running
 the heap test the part of the test case which ensures the data was written to disk
 may fail to find the data, and thus we need to bypass these checks.
 @param aReturnValue - expected return value if everything works
 @param lowMemory - amount of memory to start testing at - must be at least 10 lower than highMemory and test must fail due to low memory at this level
 @param highMemory - amount of memory to stop testing at - if we reach this, test has failed.
 */
	{
	TInt ret=0;
	TInt loop;
	TPtrC8 ptrSubSystemTmp;
	TPtrC8 ptrComponentTmp;
	ptrSubSystemTmp.Set(_L8("SubSystem"));
	ptrComponentTmp.Set(_L8("Component"));

	RFileLogger logger;
	User::LeaveIfError(logger.Connect());
	CleanupClosePushL(logger);
	logger.SetLogTags(KStdSubsysTag8, KStdCompTag8);
	// clear the log so that any previous test data is gone and not detected
	logger.ClearLog();
	User::After(KTimeToLog);

	for (loop = lowMemory; loop < highMemory ; loop++)
		{
		INFO_PRINTF2(_L("%d"),loop);
		logger.__DbgSetHeapFailure(loop);

		ret = aTestStep.executeStep(bypassChecks);

		if ( ret == KErrNoMemory)
			{
			//The heap failure has been trapped correctly
			continue;
			}
		else if (( ret == aReturnValue ) && (loop != lowMemory))
			{
			//Test step normal behaviour
			INFO_PRINTF4(_L("%S PASSED heap failure test, loop = %d return code==%d"), 
			&aTestStep.TestStepName(), loop, ret );
			SetTestStepResult(EPass);			break;
			}
		else
			{
			// test step has not returned the exepected error value ( which was either KErrNoMemory or aReturnValue )
			INFO_PRINTF5(_L("%S *FAILED* heap failure test, loop=%d return code:%d expected:%d"), 
				&aTestStep.TestStepName(), loop, ret, aReturnValue );
			SetTestStepResult(EFail);			break;
			}

		}
	// shutdown flogger server so we can see if any memory leaks - flogger svr will panic if there are
	// This also means the next test does not get any residuals in the log buffers.
	logger.ClearLog();
	logger.__DbgShutDownServer();
	CleanupStack::PopAndDestroy();	//logger
	if (loop == highMemory)
		{
		// often the return code isn't checked, so make sure the test harness sees that it failed.
		SetTestStepResult(EFail);		return KErrGeneral;
		}
	if ( ret != aReturnValue )
		{
		// often the return code isn't checked, so make sure the test harness sees that it failed.
		SetTestStepResult(EFail);		return KErrGeneral;
		}
	return KErrNone;
	}