telephonyserverplugins/common_tsy/test/component/src/cctsyphonebookstorefu.cpp
branchRCL_3
changeset 8 3f227a47ad75
parent 5 7ef16719d8cb
child 9 2492a6e4aed7
--- a/telephonyserverplugins/common_tsy/test/component/src/cctsyphonebookstorefu.cpp	Wed Mar 31 23:24:02 2010 +0300
+++ b/telephonyserverplugins/common_tsy/test/component/src/cctsyphonebookstorefu.cpp	Wed Apr 14 17:11:46 2010 +0300
@@ -156,6 +156,7 @@
 	//ADD_TEST_STEP_ISO_CPP(CCTsyPhoneBookStoreFU, TestGetInfo00010L);
     ADD_TEST_STEP_ISO_CPP(CCTsyPhoneBookStoreFU, TestGetInfo00011L);   //sdn
     ADD_TEST_STEP_ISO_CPP(CCTsyPhoneBookStoreFU, TestGetInfo00011bL);
+    ADD_TEST_STEP_ISO_CPP(CCTsyPhoneBookStoreFU, TestGetInfo00011cL);
 	ADD_TEST_STEP_ISO_CPP(CCTsyPhoneBookStoreFU, TestGetInfo00012L);
 	ADD_TEST_STEP_ISO_CPP(CCTsyPhoneBookStoreFU, TestGetInfo00013L);
 	ADD_TEST_STEP_ISO_CPP(CCTsyPhoneBookStoreFU, TestGetInfo00014L);
@@ -2331,6 +2332,19 @@
     AuxGetInfo1bL(KETelIccSdnPhoneBook);     
     }
 
+/**
+@SYMTestCaseID BA-CTSY-PBSTR-PBSGI-00011c
+@SYMComponent  telephony_ctsy
+@SYMTestCaseDesc Test support in CTSY for RMobilePhoneBookStore::GetInfo for SDN phonebook when multiple phonebooks are opened simultaneously
+@SYMTestPriority High
+@SYMTestActions Invokes RMobilePhoneBookStore::GetInfo for SDN phonebook
+@SYMTestExpectedResults Pass
+@SYMTestType CT
+*/
+void CCTsyPhoneBookStoreFU::TestGetInfo00011cL()
+    {
+    AuxGetInfo1cL();
+    }
 
 /**
 @SYMTestCaseID BA-CTSY-PBSTR-PBSGI-00012
@@ -5842,6 +5856,154 @@
 	CleanupStack::PopAndDestroy(4, this); // data, data2, this...	
     }
 
+void CCTsyPhoneBookStoreFU::AuxGetInfo1cL()
+    {
+	//
+	// Open three phonebooks: ADN, FDN, SDN. Check that SDN phonebook is initialised correctly.
+	//
+	OpenEtelServerL(EUseExtendedError);
+	CleanupStack::PushL(TCleanupItem(Cleanup,this));
+	OpenPhone2L();
+
+	RBuf8 dataS7;
+	CleanupClosePushL(dataS7);
+	RBuf8 dataS8;
+	CleanupClosePushL(dataS8);
+	RBuf8 dataS9;
+	CleanupClosePushL(dataS9);	
+	
+	RBuf8 data2;
+	CleanupClosePushL(data2);
+
+	TName nameS7(KETelIccAdnPhoneBook);
+	RMobilePhoneBookStore bookStoreS7;
+	CleanupClosePushL(bookStoreS7);
+
+	TName nameS8(KETelIccFdnPhoneBook);
+	RMobilePhoneBookStore bookStoreS8;
+	CleanupClosePushL(bookStoreS8);
+
+	TName nameS9(KETelIccSdnPhoneBook);
+	RMobilePhoneBookStore bookStoreS9;
+	CleanupClosePushL(bookStoreS9);
+	
+	/*
+	Test scenario:
+		We open three bookstores: S7, S8, S9 (in that order).
+		We then call GetInfo on S9.
+	
+	LTSY must receive (>>) and complete (<<) the following requests in the following sequence:
+	>> EMmTsyPhoneBookStoreInitIPC (S7)
+	<< EMmTsyPhoneBookStoreInitIPC (S7)
+	>> EMmTsyPhoneBookStoreCacheIPC (S7)
+	>> EMmTsyPhoneBookStoreCacheIPC (S8)
+	>> EMmTsyPhoneBookStoreGetInfoIPC (S9)
+	<< EMmTsyPhoneBookStoreCacheIPC (S7)
+	<< EMmTsyPhoneBookStoreCacheIPC (S8)
+	<< EMmTsyPhoneBookStoreGetInfoIPC (S9) 	
+	*/
+	
+	TMockLtsyPhoneBookData0 storeInitData(nameS7);
+    storeInitData.SerialiseL(dataS7);
+    iMockLTSY.ExpectL(EMmTsyPhoneBookStoreInitIPC, dataS7);	
+
+    // Open all phonebook store sessions. This will cause an Init request being sent down to LTSY,
+    // followed by Cache requests for S7 and S8 when initialisation completes.
+  	TInt ret = bookStoreS7.Open(iPhone, nameS7);
+  	ret = bookStoreS8.Open(iPhone, nameS8);
+	ret = bookStoreS9.Open(iPhone, nameS9);	
+	 
+	ASSERT_EQUALS(KErrNone, ret);	
+	
+	TRequestStatus requestStatus;
+   	TRequestStatus mockLtsyStatus;
+	RMobilePhoneBookStore::TMobilePhoneBookInfoV1 bookInfo;
+	RMobilePhoneBookStore::TMobilePhoneBookInfoV1Pckg bookPckg(bookInfo);
+	bookStoreS9.GetInfo(requestStatus, bookPckg); 	
+	
+	ASSERT_EQUALS(KRequestPending, requestStatus.Int());
+	// check that CTSY waits for initialisation to complete 
+	// before completing the GetInfo client request
+	User::After(KOneSecond);
+	ASSERT_EQUALS(KRequestPending, requestStatus.Int());	
+	
+	// prepare initialisation completion data
+    CStorageInfoData storageData;
+	SetStorageInfoData(storageData);
+	TMockLtsyPhoneBookData1< CStorageInfoData > retStoreInitC(nameS7, storageData);
+    retStoreInitC.SerialiseL(data2);
+
+    // complete the Init request. This will trigger cache requests 
+    // for S7 and S8 from CTSY to LTSY.
+    iMockLTSY.CompleteL(EMmTsyPhoneBookStoreInitIPC, KErrNone, data2, 0);
+
+	dataS7.Close();
+	TMockLtsyPhoneBookData0 tsyDataS7(nameS7);           
+	tsyDataS7.SerialiseL(dataS7);        
+	iMockLTSY.ExpectL(EMmTsyPhoneBookStoreCacheIPC, dataS7);
+	
+	dataS8.Close();
+	TMockLtsyPhoneBookData0 tsyDataS8(nameS8);           
+	tsyDataS8.SerialiseL(dataS8);
+	iMockLTSY.ExpectL(EMmTsyPhoneBookStoreCacheIPC, dataS8);
+	
+    // GetInfo request should still be pending
+    ASSERT_EQUALS(KRequestPending, requestStatus.Int());
+
+    // Prepare the cache responses, and tell MockLTSY to complete them
+	CArrayPtrSeg<CPhoneBookStoreEntry>* cacheS7 = new(ELeave) CArrayPtrSeg<CPhoneBookStoreEntry>( 1 );
+	CleanupStack::PushL(cacheS7);
+
+	TMockLtsyPhoneBookData1<CArrayPtrSeg<CPhoneBookStoreEntry>*> storeCacheDataS7(nameS7, cacheS7);
+	data2.Close();
+	storeCacheDataS7.SerialiseL(data2);   
+
+	iMockLTSY.CompleteL(EMmTsyPhoneBookStoreCacheIPC, KErrNone, data2, 0);
+	CleanupStack::PopAndDestroy(cacheS7);
+	
+	CArrayPtrSeg<CPhoneBookStoreEntry>* cacheS8 = new(ELeave) CArrayPtrSeg<CPhoneBookStoreEntry>( 1 );
+	CleanupStack::PushL(cacheS8);
+
+	TMockLtsyPhoneBookData1<CArrayPtrSeg<CPhoneBookStoreEntry>*> storeCacheDataS8(nameS8, cacheS8);
+	data2.Close();
+	storeCacheDataS8.SerialiseL(data2);   
+			  
+	iMockLTSY.CompleteL(EMmTsyPhoneBookStoreCacheIPC, KErrNone, data2, 0);
+	CleanupStack::PopAndDestroy(cacheS8);
+	
+	dataS9.Close();
+	TMockLtsyPhoneBookData0 tsyDataS9(nameS9);           
+	tsyDataS9.SerialiseL(dataS9);
+	
+	// Next to come from CTSY to LTSY will be the GetInfo request for S9
+	iMockLTSY.ExpectL(EMmTsyPhoneBookStoreGetInfoIPC, dataS9);
+	ASSERT_EQUALS(KRequestPending, requestStatus.Int());    
+	
+	// prepare response and complete
+	TInt usedEntries(12);
+	TMockLtsyPhoneBookData1< TInt > styData2(nameS9, usedEntries);
+	data2.Close();    
+	styData2.SerialiseL(data2);
+	iMockLTSY.CompleteL(EMmTsyPhoneBookStoreGetInfoIPC, KErrNone, data2, 10);
+   
+	User::WaitForRequest(requestStatus); // GetInfo
+   	ASSERT_EQUALS(KErrNone, requestStatus.Int());
+ 
+ 	// check that returned values are correct
+    ASSERT_TRUE(0 == bookInfo.iName.Compare(nameS9));
+    ASSERT_EQUALS(usedEntries, bookInfo.iUsedEntries);	
+    ASSERT_EQUALS(-1, bookInfo.iTotalEntries);	
+    ASSERT_EQUALS(50, bookInfo.iMaxTextLength);	
+    ASSERT_EQUALS(50, bookInfo.iMaxNumLength);	
+    ASSERT_EQUALS(RMobilePhoneBookStore::ELocationIccMemory, bookInfo.iLocation);	
+    ASSERT_EQUALS((TUint16)0, bookInfo.iChangeCounter);	
+    ASSERT_EQUALS((TUint32)RMobilePhoneStore::KCapsReadAccess, bookInfo.iCaps);
+    
+   	
+   	// final check and cleanup
+   	AssertMockLtsyStatusL();
+	CleanupStack::PopAndDestroy(8, this); // data, data2, this...
+    }
 
 void CCTsyPhoneBookStoreFU::AuxGetInfo2L(const TDesC& aName)
     {