localisation/apparchitecture/tef/T_AppListFileUpdateStep.cpp
branchSymbian2
changeset 1 8758140453c0
child 6 c108117318cb
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/localisation/apparchitecture/tef/T_AppListFileUpdateStep.cpp	Thu Jan 21 12:53:44 2010 +0000
@@ -0,0 +1,300 @@
+// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Symbian Foundation License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Note: With PREQ1228, we introduced "REQ5896:Load application information from a single file".
+// This PREQ is tested with the following two test steps:
+// T_AppListBootStep (only run for emulator, as it requires epoc restart)
+// |___ (APPFWK-APPARC-0033) Tests that the application information file (AppsList.bin) is created 
+// |		if it does not exists, and we reboot the phone.
+// |___ (APPFWK-APPARC-0034) Tests that the Short Caption associated with an app
+// T_AppListUpdateStep
+// |___ (APPFWK-APPARC-0035) Tests that the application information file (AppsList.bin) is created 
+// |		if it does not exists, and we force a registration.
+// |___ (APPFWK-APPARC-0032) Tests that the application information file (AppsList.bin) is updated 
+// whenever a new application is installed.
+// 
+//
+
+
+
+/**
+ @file
+ @test
+ @internalComponent - Internal Symbian test code
+*/
+
+
+#include <apgcli.h>
+#include "T_AppListFileUpdateStep.h"
+
+_LIT(KTestAppZPath,"Z:\\ApparcTest\\TestAppInstall_reg.RSC");
+_LIT(KAppListFileName,"C:\\private\\10003a3f\\AppsListCache\\AppsList.bin");
+_LIT(KAppTimeFormat,"%:0%H%:1%T%:2%S%:3");
+_LIT(KAppDirectory,"C:\\Private\\10003a3f\\Import\\apps\\");
+_LIT(KTestAppObsolutePath1,"C:\\Private\\10003a3f\\Import\\apps\\TestAppInstall_reg.RSC");
+
+const TInt KMaxTimeCount = 18;			// 18 * 10 is 180 Seconds
+
+
+CT_AppListFileUpdateStep::CT_AppListFileUpdateStep()
+	{
+	// Call base class method to set up the human readable name for logging
+	SetTestStepName(KT_AppListFileUpdate);
+	}
+
+
+CT_AppListFileUpdateStep::~CT_AppListFileUpdateStep()
+	{
+	}
+
+TVerdict CT_AppListFileUpdateStep::doTestStepPreambleL()
+	{
+ 	User::LeaveIfError(iSession.Connect());
+ 	User::LeaveIfError(iUtils.Connect());
+ 	User::LeaveIfError(iFs.Connect());
+	
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CT_AppListFileUpdateStep::doTestStepPostambleL()
+	{
+	iFs.Close();
+	iUtils.Close();
+	iSession.Close();
+	return TestStepResult();
+	}
+
+
+TVerdict CT_AppListFileUpdateStep::doTestStepL()
+	{
+	INFO_PRINTF1(_L("AppListFileUpdateStep test step started..."));
+
+ 	__UHEAP_MARK;
+	INFO_PRINTF1(_L("APPFWK-APPARC-0035 Test Started"));
+	TRAPD(ret, TestDeleteAppListFileL());
+	TEST(ret == KErrNone);
+ 	INFO_PRINTF2(_L("TestDeleteAppListFileL() finished with return code '%d'\n"), ret);
+	INFO_PRINTF1(_L("APPFWK-APPARC-0035 Test Finished\n"));
+  	__UHEAP_MARKEND;
+
+ 	__UHEAP_MARK;
+	INFO_PRINTF1(_L("APPFWK-APPARC-0032 Test Started"));
+	TRAP(ret, TestTimeStampL());
+	TEST(ret == KErrNone);
+ 	INFO_PRINTF2(_L("TestTimeStampL() finished with return code '%d'"), ret);
+	INFO_PRINTF1(_L("APPFWK-APPARC-0032 Test Finished\n"));
+  	__UHEAP_MARKEND;
+
+	INFO_PRINTF1(_L("...AppListFileUpdateStep test step finished!"));
+	return TestStepResult();
+	}
+
+
+/**
+   @SYMTestCaseID 	APPFWK-APPARC-0032
+  
+   @SYMPREQ 		PREQ1228 (CR0831)
+   
+   @SYMREQ			REQ5896
+  
+   @SYMTestCaseDesc Tests that the application information file (AppsList.bin) is updated 
+					whenever a new application is installed.
+
+   @SYMTestType		CIT
+   
+   @SYMTestPriority High 
+  
+   @SYMTestStatus 	Implemented
+   
+   @SYMTestActions 	This tests the update of the applist file in \\private\\10003a3f\\import\\\apps\\.
+   			The sequence is as follows:
+   			1.- Check the file exists. It must exists.
+   			2.- Record timestamp for applist file.
+   			3.- Install a new test application.
+   			4.- Record timestamp for applist file, allowing some time for the file to be updated
+   			4.- Compare timestamps before and after test app installation.
+	   
+   @SYMTestExpectedResults	Modified time of AppsList.bin after installation must be greater than before installation. 
+ */
+ 
+ void CT_AppListFileUpdateStep::TestTimeStampL()
+ 	{
+	// Create KAppDirectory
+	TInt err = iUtils.CreateDirectoryL(KAppDirectory);
+	TEST(err == KErrNone || err == KErrAlreadyExists);
+	
+	// Wait until KAppListFileName is present and check that the file has been created indeed
+	TBool present = CheckForFilePresent();
+	TEST(present);
+
+	// Record time before app list was modified	
+	INFO_PRINTF1(_L("Record time before app list was modified..."));
+	TTime timeBeforeAppListModification;
+	AppsListModifiedTimeL(timeBeforeAppListModification);
+		
+	// Install an application
+	INFO_PRINTF1(_L("Install application..."));
+	InstallApplicationL(KTestAppObsolutePath1);
+
+	// wait 5 seconds for the app to be properly installed
+	User::After(5 * 1000000);
+	
+	// Wait until KAppListFileName is present and check that the file has been created indeed.
+	present = CheckForFilePresent();
+	TEST(present);
+
+	// Record time after app list was modified	
+	INFO_PRINTF1(_L("Record time after app list was modified..."));
+	TTime timeAfterAppListModification;
+	AppsListModifiedTimeL(timeAfterAppListModification);
+    
+    // Check that the modification time "after" is after the modification time "before"
+    TEST(timeAfterAppListModification > timeBeforeAppListModification);
+
+	// Uninstall & delete...
+	INFO_PRINTF1(_L("Uninstalling application..."));
+	DeleteApplicationL(KTestAppObsolutePath1);
+ 	}
+ 
+ 
+/*
+Delete a registration resource file (TestAppInstall.rsc) in the path  "C:\private\10003a3f\import\apps" .
+*/
+void CT_AppListFileUpdateStep::DeleteApplicationL(const TDesC& aAppName)
+	{
+	INFO_PRINTF2(_L("Deleting file '%S'"), &aAppName);
+
+	TInt ret = iUtils.SetReadOnly(aAppName, 0);
+	TEST(ret == KErrNone);
+	ret = iUtils.DeleteFileL(aAppName);
+	TEST(ret == KErrNone);
+	}
+
+
+/*
+Copy a registration resource file (TestAppInstall.rsc) in the path  "c:\private\10003a3f\import\apps" .
+*/
+void CT_AppListFileUpdateStep::InstallApplicationL(const TDesC& aAppName)
+	{
+	INFO_PRINTF3(_L("Copying file '%S' to folder '%S'"), &aAppName, &KTestAppZPath);
+
+	TInt ret = iUtils.CopyFileL(KTestAppZPath, aAppName);
+	TEST(ret == KErrNone);
+	}
+
+
+/*
+Gets the modified time for AppsList.bin
+*/
+void CT_AppListFileUpdateStep::AppsListModifiedTimeL(TTime& aTime)
+	{
+	INFO_PRINTF2(_L("Retrieving modification time of file '%S'"), &KAppListFileName);
+	TInt ret = iFs.Modified(KAppListFileName, aTime);
+	TEST(ret == KErrNone);
+	
+	TBuf<40> timeString; // Holds the formatted date and time
+    aTime.FormatL(timeString,KAppTimeFormat);
+	INFO_PRINTF2(_L("Recorded modified time is '%S'"), &timeString);
+	}
+
+
+/**
+   @SYMTestCaseID 	APPFWK-APPARC-0035
+  
+   @SYMPREQ 		PREQ1228 (CR0831)
+   
+   @SYMREQ			REQ5896
+  
+   @SYMTestCaseDesc Apparc component repopulates the file list if it has been deleted and a registration is forced.
+
+   @SYMTestType		CIT
+   
+   @SYMTestPriority High 
+  
+   @SYMTestStatus 	Implemented
+   
+   @SYMTestActions 	This tests the update of the applist file in \\private\\10003a3f\\import\\\apps\\.
+   			The sequence is as follows:
+   			1.- Check the file exists. It must exists.
+   			2.- Delete the file and check it does not exist, and that is not created either.
+   			3.- Force Registration, which means that the applist file needs to be created again.
+   			4.- Check that the above mentioned file exists again after waiting for a short period of time.
+	   
+   @SYMTestExpectedResults	AppsList.bin is deleted and created according to the test actions.
+ */
+ 
+ void CT_AppListFileUpdateStep::TestDeleteAppListFileL()
+ 	{
+	// Check the file IS present
+	TBool present = CheckForFilePresent();			
+	TEST(present);
+
+	// Delete applist file
+	DeleteAppListFileL(KAppListFileName);
+
+	// Check the file is NOT present
+	present = CheckForFilePresent();			
+	TEST(!present);
+	
+	// Do a rescan and check that the file exists again.
+	INFO_PRINTF1(_L("Do a rescan and check that the file exists again...."));
+	RPointerArray<TDesC> dummy;
+	TEST(iSession.ForceRegistration(dummy) == KErrNone);
+	present = CheckForFilePresent();			
+	TEST(present);
+ 	}
+
+
+/*
+Checks whether the "AppList.Bin" exists, if not waits for a maximum time of (KMaxTimeCount * 10) seconds for the file to create. 
+Else the test fails.
+*/
+TBool CT_AppListFileUpdateStep::CheckForFilePresent()
+	{
+	INFO_PRINTF2(_L("Wait for a maximum time of '%d' secs for the file to be created"), KMaxTimeCount * 10);
+
+	TBool present = EFalse;
+	for (TInt index = 0; present == EFalse && index < KMaxTimeCount; index++)
+		{
+		TEST(iUtils.IsFilePresent(KAppListFileName, present) == KErrNone);
+		if (present)
+			{
+			INFO_PRINTF2(_L("AppList file is successfully created after '%d' seconds!"), index * 10);
+			break;
+			}
+		// wait 10 secs before trying again in the next loop
+		User::After(10 * 1000000);	
+		}
+
+	if (!present)
+		{
+		INFO_PRINTF2(_L("AppList file was NOT created after '%d' seconds"), KMaxTimeCount * 10);
+		}
+
+	return present;
+	}
+
+
+/*
+It will delete the applistfile created by apparc component
+*/
+void CT_AppListFileUpdateStep::DeleteAppListFileL(const TDesC& aFileName)
+	{
+	INFO_PRINTF2(_L("Delete AppList file '%S'..."), &aFileName);
+
+	TInt ret = iUtils.SetReadOnly(aFileName, 0);
+	TEST(ret == KErrNone);
+	ret = iUtils.DeleteFileL(aFileName);
+	TEST(ret == KErrNone);
+	}