smsprotocols/smsstack/smsprot/Test/TE_SMSPRTSTRESS/TE_smsprtstressbase.cpp
changeset 20 244d7c5f118e
parent 0 3553901f7fa8
child 24 6638e7f4bd8f
equal deleted inserted replaced
19:1f776524b15c 20:244d7c5f118e
    16 /**
    16 /**
    17  @file
    17  @file
    18 */
    18 */
    19 
    19 
    20 #include "TE_smsprtstressbase.h"
    20 #include "TE_smsprtstressbase.h"
       
    21 
    21 #include <sacls.h>
    22 #include <sacls.h>
    22 #include <cfshared.h>
    23 #include <cfshared.h>
    23 #include <c32root.h>
    24 #include <c32root.h>
       
    25 #include <connect/sbdefs.h>
    24 
    26 
    25 #include <connect/sbdefs.h>
    27 //using namespace conn;
    26 using namespace conn;
       
    27 
    28 
    28 TVerdict CSmsPrtStressTestStep::doTestStepPreambleL( void )
    29 TVerdict CSmsPrtStressTestStep::doTestStepPreambleL()
    29 	{
    30 	{
    30 	__UHEAP_MARK;
    31     //base class preamble - marks the heap
       
    32 //    CSmsBaseTestStep::doTestStepPreambleL();
    31 
    33 
    32 	iScheduler = new(ELeave) CActiveScheduler;
    34 //	iSecureBackupEngine = CSBEClient::NewL();
    33 	CActiveScheduler::Install(iScheduler);
    35 //	iSecureBackupEngine->SetBURModeL(TDriveList(_L8("C")),
    34 
    36 //									 EBURNormal, ENoBackup);
    35 	iSecureBackupEngine = CSBEClient::NewL();
       
    36 	iSecureBackupEngine->SetBURModeL(TDriveList(_L8("C")),
       
    37 									 EBURNormal, ENoBackup);
       
    38 
       
    39 	User::LeaveIfError(iFs.Connect());
       
    40 
       
    41 	iSmsStackTestUtils = CSmsStackTestUtils::NewL(this, iFs);
       
    42 
    37 
    43     return TestStepResult() ;
    38     return TestStepResult() ;
    44 	}
    39 	}
    45 
    40 
    46 TVerdict CSmsPrtStressTestStep::doTestStepPostambleL( void )
    41 TVerdict CSmsPrtStressTestStep::doTestStepPostambleL()
    47 	{
    42 	{
    48 	delete iSmsStackTestUtils;
    43 //	delete iSecureBackupEngine;
    49 	iSmsStackTestUtils = NULL;
    44 //	iSecureBackupEngine = NULL;
    50 
    45 
    51 	iFs.Close();
    46 	//base class postamble - unmarks the heap
    52 
    47 //	CSmsBaseTestStep::doTestStepPostambleL();
    53 	delete iSecureBackupEngine;
       
    54 	iSecureBackupEngine = NULL;
       
    55 
       
    56 	delete iScheduler;
       
    57 	iScheduler = NULL;
       
    58 
       
    59 	__UHEAP_MARKEND;
       
    60 	
       
    61 	DoESockMemoryLeakTestL();
       
    62 
    48 
    63 	return TestStepResult() ;
    49 	return TestStepResult() ;
    64 	}
    50 	}
    65 
       
    66 
       
    67 void CSmsPrtStressTestStep::InitGlobalsL()
       
    68 /**
       
    69  *  Initialise global variables.
       
    70  */
       
    71     {
       
    72     TRAPD( ret, ParseSettingsFromFileL());
       
    73 
       
    74 	if (ret != KErrNone)
       
    75 		INFO_PRINTF2(_L("ParseSettingsFromFileL [err=%d]"), ret);
       
    76 
       
    77     GetCmdLineArguments();
       
    78 
       
    79     INFO_PRINTF2(_L("TelNo: [%S]"), &iTelephoneNumber);
       
    80 	INFO_PRINTF2(_L("ScNo:  [%S]"), &iServiceCenterNumber);
       
    81 
       
    82 	CommInit();
       
    83 
       
    84 	iSmsStackTestUtils->CopyConfigFileL(KTSmsPrtStressConfigFileName);
       
    85 	}
       
    86 
       
    87 
       
    88 void CSmsPrtStressTestStep::PrepareRegTestLC(RSocketServ& aSocketServer, TInt aTestNumber)
       
    89 /**
       
    90  *  Run a specified test.
       
    91  *  The test number is passed via property KUidPSSimTsyCategory. This will notify the SIM tsy
       
    92  *  SIM tsy uses test number to parse correct script from config.txt
       
    93  *  @param aTestNumber The test number corresponding the test case
       
    94  */
       
    95 	{
       
    96 	RProperty testNumberProperty;
       
    97 	User::LeaveIfError(testNumberProperty.Attach(KUidPSSimTsyCategory, KPSSimTsyTestNumber));
       
    98 	CleanupClosePushL(testNumberProperty);
       
    99 
       
   100 	TRequestStatus status;
       
   101 	testNumberProperty.Subscribe(status);
       
   102 	User::LeaveIfError(testNumberProperty.Set(KUidPSSimTsyCategory,KPSSimTsyTestNumber,aTestNumber));
       
   103 	User::WaitForRequest(status);
       
   104 	TEST(status.Int() == KErrNone);
       
   105 	TInt testNumberCheck;
       
   106 	User::LeaveIfError(testNumberProperty.Get(testNumberCheck));
       
   107 	if (aTestNumber != testNumberCheck)
       
   108 		User::Leave(KErrNotFound);
       
   109 
       
   110 	CleanupStack::PopAndDestroy(&testNumberProperty);
       
   111 
       
   112     INFO_PRINTF1(_L("Connecting to SocketServer ..."));
       
   113 	TInt ret=aSocketServer.Connect(KSocketMessageSlots);
       
   114     TEST(ret == KErrNone);
       
   115 	CleanupClosePushL(aSocketServer);
       
   116 
       
   117 	INFO_PRINTF1(_L("Deleting segmentation and reassembly stores..."));
       
   118 
       
   119 	// delete segmentation and reassembly store files before the test
       
   120 	_LIT(KReassemblyStoreName,"C:\\Private\\101F7989\\sms\\smsreast.dat");
       
   121 	_LIT(KSegmentationStoreName,"C:\\Private\\101F7989\\sms\\smssegst.dat");
       
   122 
       
   123 	iFs.Delete(KReassemblyStoreName);
       
   124 	iFs.Delete(KSegmentationStoreName);
       
   125 	}
       
   126 
       
   127 
       
   128 TBool CSmsPrtStressTestStep::DoGetCmdLineArguments(TDes& aCmdarg, const TDesC& aToFind, TDes& aCmd)
       
   129     {
       
   130     if(( aCmdarg.FindF(aToFind)) != KErrNotFound )
       
   131         {
       
   132         TLex myLex( aCmdarg );
       
   133         myLex.Inc(aCmdarg.FindF(_L("="))+1);
       
   134         myLex.SkipSpace();
       
   135         myLex.Mark();                         // remember where we are
       
   136         myLex.SkipCharacters();               // move to end of character token
       
   137         if (myLex.TokenLength() != 0)         // if valid potential token
       
   138             {
       
   139             aCmd.Copy(myLex.MarkedToken());    // extract token
       
   140             return ETrue;
       
   141             }
       
   142         }
       
   143     return EFalse;
       
   144     }
       
   145 
       
   146 void CSmsPrtStressTestStep::GetCmdLineArguments()
       
   147     {
       
   148     CCommandLineArguments *cmdLine = NULL;
       
   149     TRAPD(err, cmdLine = CCommandLineArguments::NewL());
       
   150     if (err==KErrNone)
       
   151         {
       
   152         TInt numCmds = cmdLine->Count();
       
   153         TInt i=0;
       
   154         while (++i < numCmds)
       
   155             {
       
   156             TBuf<256> arg = cmdLine->Arg(i);
       
   157 
       
   158             // Reading the Service Centre Number
       
   159             _LIT( KSCno, "sc=");
       
   160             _LIT( KSCNO, "SC=");
       
   161             if(    DoGetCmdLineArguments( arg, KSCno, iServiceCenterNumber )
       
   162                 || DoGetCmdLineArguments( arg, KSCNO, iServiceCenterNumber ))
       
   163                 continue;
       
   164 
       
   165             // Reading the Recipient Telephone Number
       
   166             _LIT( KTELno, "tel=");
       
   167             _LIT( KTELNO, "TEL=");
       
   168             if(    DoGetCmdLineArguments( arg, KTELno, iTelephoneNumber )
       
   169                 || DoGetCmdLineArguments( arg, KTELNO, iTelephoneNumber ))
       
   170                 continue;
       
   171             }
       
   172         }
       
   173     delete cmdLine;
       
   174     cmdLine = NULL;
       
   175     }
       
   176 
       
   177 void CSmsPrtStressTestStep::ParseSettingsFromFileL()
       
   178 	{
       
   179 	CTestConfig* configFile = CTestConfig::NewLC(iFs,KGmsSmsConfigFileDir,KGmsSmsConfigFileName);
       
   180 	const CTestConfigSection* cfgFile = configFile->Section(KSetupTelNumbers);
       
   181 	if (cfgFile == NULL)
       
   182 		User::Leave(KErrNotFound);
       
   183 
       
   184 	const CTestConfigItem* item = cfgFile->Item(KServiceCenter,0);
       
   185 	if (item == NULL)
       
   186 		User::Leave(KErrNotFound);
       
   187 
       
   188 	iServiceCenterNumber.Copy(item->Value());
       
   189 
       
   190 	item = cfgFile->Item(KTelefoneNumber,0);
       
   191 	if (item == NULL)
       
   192 		User::Leave(KErrNotFound);
       
   193 
       
   194 	iTelephoneNumber.Copy(item->Value());
       
   195 
       
   196 	// beginning of the destruction
       
   197 	CleanupStack::PopAndDestroy(configFile);//configFile
       
   198 	}
       
   199 
       
   200 void CSmsPrtStressTestStep::EndRegTest()
       
   201 /**
       
   202  *  Closes objects used at test harness
       
   203  */
       
   204  	{
       
   205 	INFO_PRINTF1(_L("Closing Reg Test"));
       
   206 	User::After(2000000); //Wait a couple of seconds to avoid closing the SMS stack too early
       
   207 	CleanupStack::PopAndDestroy(); //socketServer
       
   208 	User::After(2000000); //Wait a couple of seconds to avoid closing the SMS stack too early
       
   209 	}
       
   210 
       
   211 
       
   212 #if defined (__WINS__)
       
   213 #define PDD_NAME _L("ECDRV")
       
   214 #define PDD_NAME2 _L("ECDRV")
       
   215 #define LDD_NAME _L("ECOMM")
       
   216 #else
       
   217 #define PDD_NAME _L("EUART1")
       
   218 #define LDD_NAME _L("ECOMM")
       
   219 #endif
       
   220 
       
   221 
       
   222 TInt CSmsPrtStressTestStep::CommInit()
       
   223     {
       
   224     RFs fs;
       
   225     TInt err=fs.Connect();  // make sure the FileServer is alive (only needed for WINS test code)
       
   226     fs.Close();
       
   227 
       
   228     INFO_PRINTF1(_L("CommInit: Loading PDD ") );
       
   229     INFO_PRINTF1(PDD_NAME);
       
   230     INFO_PRINTF1(_L(""));
       
   231     err=User::LoadPhysicalDevice(PDD_NAME);
       
   232     if (err!=KErrNone && err!=KErrAlreadyExists)
       
   233         return(err);
       
   234 
       
   235     INFO_PRINTF1(_L("CommInit: Loading LDD ") );
       
   236     INFO_PRINTF1(LDD_NAME);
       
   237     INFO_PRINTF1(_L(""));
       
   238     err=User::LoadLogicalDevice(LDD_NAME );
       
   239     if (err!=KErrNone && err!=KErrAlreadyExists)
       
   240         return(err);
       
   241 
       
   242     INFO_PRINTF1(_L("CommInit: Starting C32 ") );
       
   243 
       
   244     err = StartC32();
       
   245     return (err == KErrNone || err == KErrAlreadyExists) ? KErrNone : err;
       
   246     }
       
   247 
       
   248 
       
   249 void CSmsPrtStressTestStep::DoESockMemoryLeakTestL()
       
   250 	{
       
   251 	//
       
   252 	// Find the current number of leaked cells in ESock...
       
   253 	//
       
   254 	TInt  ret, startLeakCounter;
       
   255 	
       
   256 	ret = RProperty::Get(KUidCommsProcess, KUidCommsModuleLeakCounter, startLeakCounter);
       
   257 	if (ret == KErrNotFound)
       
   258 		{
       
   259 		// No variable to monitor, ESock is probably not in debug mode.
       
   260 		return;
       
   261 		}
       
   262 	else
       
   263 		{
       
   264 		TESTL(ret == KErrNone);
       
   265 		}
       
   266 
       
   267 	//
       
   268 	// Connect to Rootserver...
       
   269 	//
       
   270 	RRootServ  rootserver;
       
   271 
       
   272 	User::LeaveIfError(rootserver.Connect());
       
   273 	CleanupClosePushL(rootserver);
       
   274 
       
   275 	//
       
   276 	// Shutdown all the ESock CPMs gracefully...
       
   277 	//
       
   278 	TRSIter  iter;
       
   279 	TCFModuleName  modName;
       
   280 	TRSModuleInfo  modInfo;
       
   281 	TRequestStatus  statusArray[16];
       
   282 	TInt  statusCount = 0;
       
   283 
       
   284 	while (rootserver.EnumerateModules(iter, modName) == KErrNone)
       
   285 		{
       
   286 		if (rootserver.GetModuleInfo(modName, modInfo) == KErrNone  &&
       
   287 		    modInfo.iParams.iDll.MatchF(_L("*ESOCKSVR.DLL")) >= 0)
       
   288 			{
       
   289 			rootserver.UnloadCpm(statusArray[statusCount++], modInfo.iParams.iName,
       
   290 			                     EGraceful);
       
   291 			}
       
   292 		}
       
   293 
       
   294 	while (statusCount > 0)
       
   295 		{
       
   296 		statusCount--;
       
   297 		User::WaitForRequest(statusArray[statusCount]);
       
   298 		TEST(statusArray[statusCount] == KErrNone);
       
   299 		}
       
   300 
       
   301 	//
       
   302 	// Close Rootserver session...
       
   303 	//
       
   304 	CleanupStack::PopAndDestroy(1, &rootserver);
       
   305 	
       
   306 	//
       
   307 	// Get the latest number of leaked cells in ESock...
       
   308 	//
       
   309 	TInt  finalLeakCounter;
       
   310 
       
   311 	ret = RProperty::Get(KUidCommsProcess, KUidCommsModuleLeakCounter, finalLeakCounter);
       
   312 	TESTL(ret == KErrNone);
       
   313 
       
   314 	if (finalLeakCounter > startLeakCounter)
       
   315 		{
       
   316 		INFO_PRINTF1(_L("<font size=2 color=FF0000><B>A memory leak has been detected inside ESock - Check SMS Stack!</B></font>"));
       
   317 		TEST(finalLeakCounter == startLeakCounter);
       
   318 		}
       
   319 
       
   320 	//
       
   321 	// Restart C32...
       
   322 	//
       
   323 	_LIT(KDummyCMI, "");
       
   324 	WarmBootC32(KDummyCMI);
       
   325 	} // CSmsPrtStressTestStep::DoESockMemoryLeakTestL
       
   326 
       
   327