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 |
|