os/persistentdata/persistentstorage/centralrepository/pccenrep/test/common_neg.cpp
First public contribution.
1 // Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
2 // All rights reserved.
3 // This component and the accompanying materials are made available
4 // under the terms of "Eclipse Public License v1.0"
5 // which accompanies this distribution, and is available
6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
8 // Initial Contributors:
9 // Nokia Corporation - initial contribution.
17 #include <x86tool/centralrepository.h>
19 #include <centralrepository.h>
32 //DEFINED IN THE TEST MAIN CPP
33 extern void SetupEnv(const TDesC& aInFilePath,const TDesC& aOutFilePath,TUint aTestMode);
37 using namespace NCentralRepositoryConstants;
39 _LIT(KLongBuf16,"sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss\
40 ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss\
41 ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss\
42 ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss\
43 ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss\
44 ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss\
45 ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss\
46 ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss\
47 ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss\
48 ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss\
49 ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss\
50 ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss");
53 ////////////////////////////////////////////////////////////////////////////////
54 // Test macro and function.
56 LOCAL_C void Check(TInt aValue, TInt aLine)
60 TheTest(EFalse, aLine);
64 LOCAL_C void Check(TInt aValue, TInt aExpected, TInt aLine)
66 if(aValue != aExpected)
68 RDebug::Print(_L("*** Expected error: %d, got: %d\r\n"), aExpected, aValue);
69 TheTest(EFalse, aLine);
73 #define TEST(arg) ::Check((arg), __LINE__)
74 #define TEST2(aValue, aExpected) ::Check(aValue, aExpected, __LINE__)
76 ////////////////////////////////////////////////////////////////////////////////
81 void NewL(TUint aTestMode)
83 CRepository* repos=NULL;
84 //Negative testing to do with initialising the repository
86 //-repository file not found
87 TUid nonexistentRepository={0x88888888};
88 TRAPD(err,repos=CRepository::NewL(nonexistentRepository));
89 TEST2(err, KErrNotFound);
91 //-repository file corrupt
92 TUid corruptRepositoryUid;
93 if (aTestMode==EAutoCre)
94 corruptRepositoryUid=TUid::Uid(0x88888881);
96 corruptRepositoryUid=TUid::Uid(0x88888880);
97 TRAP(err,repos=CRepository::NewL(corruptRepositoryUid));
98 TEST2(err, KErrCorrupt);
104 void GetFunction(CRepository* aRepository)
112 //-Setting does not exist
113 error = aRepository->Get(100, intVal);
114 TEST2(error, KErrNotFound);
115 error = aRepository->Get(100, realVal);
116 TEST2(error, KErrNotFound);
117 error = aRepository->Get(100, longStr);
118 TEST2(error, KErrNotFound);
120 //-Setting exist but not requested type(mismatch)
122 error = aRepository->Get(1, realVal);
123 TEST2(error, KErrArgument);
124 error = aRepository->Get(1, longStr);
125 TEST2(error, KErrArgument);
128 error = aRepository->Get(2, intVal);
129 TEST2(error, KErrArgument);
130 error = aRepository->Get(2, longStr);
131 TEST2(error, KErrArgument);
134 error = aRepository->Get(0x300, intVal);
135 TEST2(error, KErrArgument);
136 error = aRepository->Get(0x300, realVal);
137 TEST2(error, KErrArgument);
139 //-The buffer allocated too small
140 TBuf8<4> short8BitStr;
141 error = aRepository->Get(11, short8BitStr);
142 TEST2(error, KErrOverflow);
143 //-The bufer allocated is ok
144 TBuf8<12> good8BitStr;
145 error = aRepository->Get(11, good8BitStr);
146 TEST2(error, KErrNone);
147 //-The buffer allocated is too big(not a problem)
148 TBuf8<50> long8BitStr;
149 error = aRepository->Get(11, long8BitStr);
150 TEST2(error, KErrNone);
151 //DESC8,DESC16(with actual length)
152 //-The buffer allocated too small
154 error = aRepository->Get(0x300, shortStr);
155 TEST2(error, KErrOverflow);
156 //-The bufer allocated is ok
158 error = aRepository->Get(0x300, goodStr);
159 TEST2(error, KErrNone);
160 //-The buffer allocated is too big(not a problem)
161 error = aRepository->Get(0x300, longStr);
162 TEST2(error, KErrNone);
165 void GetMeta(CRepository* aRepository)
167 //-Setting does not exist
170 error = aRepository->GetMeta(100, meta);
171 TEST2(error, KErrNotFound);
174 void FindFunctionL(CRepository* aRepository)
176 RArray<TUint32> keyList;
177 RArray<TUint32> shortKeyList(1);
178 CleanupClosePushL(keyList);
179 CleanupClosePushL(shortKeyList);
184 //-Partial setting list requested not found(based on partialid and mask)
185 error = aRepository->FindL(0x0000FFFF, 0x0000F000, keyList);
186 TEST2(error, KErrNotFound);
188 //-purposely initially allocated a array with small size(force it to grow)
189 error = aRepository->FindL(0xFFFFFFFF, 0x0, shortKeyList);
190 TEST2(error, KErrNone);
191 TEST2(shortKeyList.Count(), 33);
195 error = aRepository->FindEqL(0xFFFFFFFF, 0, 199, keyList);
196 TEST2(error, KErrNotFound);
199 //-Partial setting list requested not found(based on partialid and mask)
201 error = aRepository->FindEqL(0x0000FFFF, 0x0000F000, 100, keyList);
202 TEST2(error, KErrNotFound);
204 error = aRepository->FindNeqL(0x0000FFFF, 0x0000F000, 100, keyList);
205 TEST2(error, KErrNotFound);
207 //-Partial setting list found but some setting not the TYPE as requested(ensure not returned)
210 error = aRepository->FindEqL(0x00100000, 0xFFFFF0FF, 88, keyList);
211 TEST2(error, KErrNone);
212 TEST2(keyList.Count(), 2);
215 error = aRepository->FindNeqL(0x00100000, 0xFFFFF0FF, 88, keyList);
216 TEST2(error, KErrNone);
217 TEST2(keyList.Count(), 3);
221 error = aRepository->FindEqL(0x00100000, 0xFFFFF0FF, 88.0, keyList);
222 TEST2(error, KErrNone);
223 TEST2(keyList.Count(), 2);
226 error = aRepository->FindNeqL(0x00100000, 0xFFFFF0FF, 88.0, keyList);
227 TEST2(error, KErrNone);
228 TEST2(keyList.Count(), 3);
230 _LIT(KString16, "88");
233 error = aRepository->FindEqL(0x00100000, 0xFFFFF0FF, KString16, keyList);
234 TEST2(error, KErrNone);
235 TEST2(keyList.Count(), 1);
238 error = aRepository->FindNeqL(0x00100000, 0xFFFFF0FF, KString16, keyList);
239 TEST2(error, KErrNone);
240 TEST2(keyList.Count(), 4);
242 _LIT(KString8, "88");
245 error = aRepository->FindEqL(0x00100000, 0xFFFFF0FF, KString8, keyList);
246 TEST2(error, KErrNone);
247 TEST2(keyList.Count(), 1);
250 error = aRepository->FindNeqL(0x00100000, 0xFFFFF0FF, KString8, keyList);
251 TEST2(error, KErrNone);
252 TEST2(keyList.Count(), 4);
254 //-A value specified greater than the max limit allowed KMaxBinaryLength(8 bit) and KMaxUnicodeStringLength(16 bit)
255 TBuf8<KMaxUnicodeStringLength*3> KLongBuf8;
256 KLongBuf8.Copy(KLongBuf16);
257 KLongBuf8.Append(KLongBuf16);
260 error = aRepository->FindEqL(0xFFFFFFFF, 0, KLongBuf8, keyList);
261 TEST2(error, KErrNotFound);
263 error = aRepository->FindNeqL(0xFFFFFFFF, 0, KLongBuf8, keyList);
264 TEST2(error, KErrNone);
265 TEST2(shortKeyList.Count(), 33);
268 error = aRepository->FindEqL(0xFFFFFFFF, 0, KLongBuf16, keyList);
269 TEST2(error, KErrNotFound);
271 error = aRepository->FindNeqL(0xFFFFFFFF, 0, KLongBuf16, keyList);
272 TEST2(error, KErrNone);
273 TEST2(shortKeyList.Count(), 33);
275 //-A value specified empty
276 _LIT8(KEmptyStr8, "");
278 error = aRepository->FindEqL(0xFFFFFFFF, 0, KEmptyStr8, keyList);
279 TEST2(error, KErrNotFound);
281 error = aRepository->FindNeqL(0xFFFFFFFF, 0, KEmptyStr8, keyList);
282 TEST2(error, KErrNone);
283 TEST2(shortKeyList.Count(), 33);
285 _LIT16(KEmptyStr16, "");
287 error = aRepository->FindEqL(0xFFFFFFFF, 0, KEmptyStr16, keyList);
288 TEST2(error, KErrNotFound);
290 error = aRepository->FindNeqL(0xFFFFFFFF, 0, KEmptyStr16, keyList);
291 TEST2(error, KErrNone);
292 TEST2(shortKeyList.Count(), 33);
294 CleanupStack::PopAndDestroy(2);
297 void SetFunction(CRepository* aRepository)
301 //-Setting exist but not requested type(mismatch)
302 //-If setting does not exist, it creates one(also check the expected meta)
306 //-Try to set a setting that is greater than KMaxBinaryLength(8 bit) and KMaxUnicodeStringLength(16 bit)
307 //-Try to set a setting with empty string content(is this a problem)
314 TInt err=aRepository->Set(0x2,intVal);
315 TEST2(err, KErrArgument);
316 err=aRepository->Set(0x888,888);
317 TEST2(err, KErrNone);
318 err=aRepository->Get(0x888,intVal);
320 //will use default one
321 err=aRepository->GetMeta(0x888,metaVal);
322 TEST2(metaVal, 0x10);
325 err=aRepository->Set(0x1,realVal);
326 TEST2(err, KErrArgument);
327 err=aRepository->Set(0x333,333.33);
328 TEST2(err, KErrNone);
329 err=aRepository->Get(0x333,realVal);
330 TEST(realVal == 333.33);
332 err=aRepository->GetMeta(0x333,metaVal);
333 TEST2(metaVal, 0x20);
337 err=aRepository->Set(0x1,KBuf8());
338 TEST2(err, KErrArgument);
340 err=aRepository->Set(0x1,KBuf16());
341 TEST2(err, KErrArgument);
342 err=aRepository->Set(0x111,KBuf16());
343 TEST2(err, KErrNone);
344 TBuf16<255> buffer16;
345 err=aRepository->Get(0x111,buffer16);
346 TEST2(err, KErrNone);
347 TEST2(buffer16.Compare(KBuf16()), 0);
348 err=aRepository->GetMeta(0x111,metaVal);
350 err=aRepository->GetMeta(0x111,metaVal);
351 TEST2(metaVal, 0x20);
353 //Set an existing string setting with string longer than limit(KMaxUnicodeStringLength)
354 TBuf8<KMaxUnicodeStringLength*3> KLongBuf8;
355 KLongBuf8.Copy(KLongBuf16());
356 KLongBuf8.Append(KLongBuf16());
358 //try it on existing string setting
359 err=aRepository->Set(0x222,KLongBuf16());
360 TEST2(err, KErrArgument);
361 err=aRepository->Set(0x222,KLongBuf8);
362 TEST2(err, KErrArgument);
364 //set an empty string content
365 _LIT8(KEmptyString8,"");
366 err=aRepository->Set(0x444,KEmptyString8());
367 TEST2(err, KErrNone);
368 _LIT16(KEmptyString16,"");
369 err=aRepository->Set(0x555,KEmptyString16());
370 TEST2(err, KErrNone);
373 void CreateFunction(CRepository* aRepository)
377 //-Setting already exist
381 //-Try to create a setting that is greater than KMaxBinaryLength(8 bit) and KMaxUnicodeStringLength(16 bit)
382 //-Try to set a setting with empty string content(is this a problem)
387 TInt err=aRepository->Create(1,intVal);
388 TEST2(err, KErrAlreadyExists);
390 err=aRepository->Create(2,realVal);
391 TEST2(err, KErrAlreadyExists);
393 _LIT8(KString8,"string");
394 _LIT16(KString16,"string");
395 err=aRepository->Create(5,KString8);
396 TEST2(err, KErrAlreadyExists);
397 err=aRepository->Create(5,KString16);
398 TEST2(err, KErrAlreadyExists);
401 _LIT8(KEmptyString8,"");
402 _LIT8(KEmptyString16,"");
403 err=aRepository->Create(0x1111,KEmptyString8());
404 TEST2(err, KErrNone);
405 err=aRepository->Create(0x2222,KEmptyString16());
406 TEST2(err, KErrNone);
408 //Create an existing string setting with string longer than limit(KMaxUnicodeStringLength)
409 TBuf8<KMaxUnicodeStringLength*3> KLongBuf8;
410 KLongBuf8.Copy(KLongBuf16());
411 KLongBuf8.Append(KLongBuf16());
413 err=aRepository->Create(0x3333,KLongBuf16());
414 TEST2(err, KErrArgument);
415 err=aRepository->Create(0x4444,KLongBuf8);
416 TEST2(err, KErrArgument);
419 void DeleteFunction(CRepository* aRepository)
421 //----------DELETE SINGLE
422 //-Setting does not exist
423 //-Delete a setting and then recreate,see original meta data preserved(vary with default,range,single)
424 //-When deleted always verify setting does not exist
425 TInt err=aRepository->Delete(0x757);
426 TEST2(err, KErrNotFound);
428 //delete and existing setting with single meta, then recreate it, expect same meta before deletion
431 //this is the original setting meta
432 err=aRepository->GetMeta(2,metaVal);
434 err=aRepository->Delete(2);
435 TEST2(err, KErrNone);
436 err=aRepository->Get(2,realVal);
437 TEST2(err, KErrNotFound);
438 err=aRepository->Create(2,realVal);
439 TEST2(err, KErrNone);
441 err=aRepository->GetMeta(2,newMetaVal);
442 TEST2(err, KErrNone);
443 TEST2(newMetaVal, metaVal);
446 //----------DELETE RANGE
447 //-Partial setting list requested not found(based on partialid and mask)
448 //-Check the aErrorKey returned with each of the negative testing.
450 err=aRepository->Delete(0x0F010000,0xFFFFF0FF,error);
451 TEST2(err, KErrNotFound);
452 //if not found, the error key here will be set to the partial ID
453 TEST2(error, 0x0F010000);
457 void MoveFunction(CRepository* aRepository)
459 //-Partial setting list requested not found(based on partialid and mask)
460 //-Intended target setting already exist(say 1 out of X)
462 TInt err=aRepository->Move(0x0F010000,0x0E010000,0xFFFFF0FF,errorId);
463 TEST2(err, KErrNotFound);
464 TEST2(errorId, 0x0F010000);
467 err=aRepository->Move(0x03010000,0x02010000,0xFFFFF0FF,errorId);
468 TEST2(err, KErrAlreadyExists);
469 //errorId will be set to the first id of the target when error is encountered
470 TEST2(errorId, 0x02010100);
475 void NegativeTestingL(TUid aUid,const TDesC& aInFile,const TDesC& aOutFile,TUint aTestMode)
477 SetupEnv(aInFile,aOutFile,aTestMode);
481 //repository initialising negative testing
484 //ok repository but operation negative testing
485 CRepository* repository=CRepository::NewLC(aUid);
487 //these are all negative testing specifically each of the error code
488 GetFunction(repository);
490 FindFunctionL(repository);
491 SetFunction(repository);
492 CreateFunction(repository);
493 DeleteFunction(repository);
494 MoveFunction(repository);
496 CleanupStack::PopAndDestroy();
501 TInt CopyFile(const TDesC& aSource, const TDesC& aTarget)
504 TInt ret=file.Open(TheFs,aSource,EFileRead);
509 HBufC8* buf=HBufC8::New(fileSize);
515 TPtr8 mod(buf->Des());
518 ret=file.Replace(TheFs,aTarget,EFileWrite);