installationservices/swi/test/tuiscriptadaptors/tswisstep.h
changeset 0 ba25891c3a9e
child 12 7ca52d38f8c3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/tuiscriptadaptors/tswisstep.h	Thu Dec 17 08:51:10 2009 +0200
@@ -0,0 +1,493 @@
+/*
+* Copyright (c) 2004-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 "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* SWIS test step declaration
+*
+*/
+
+
+/**
+ @file
+*/
+
+#ifndef __TSWISSTEP_H__
+#define __TSWISSTEP_H__
+
+#include <test/testexecutestepbase.h>
+#include <swi/asynclauncher.h>
+#include "testutilclientswi.h"
+#include "tswisserver.h"
+#include "tuiscriptadaptors.h"
+#include <swi/sistruststatus.h>
+
+#include <e32base.h>
+#ifndef SWI_TEXTSHELL_ROM		
+#include <apsidchecker.h>
+#else
+class CAppSidChecker;
+#endif
+
+namespace Swi
+	{
+	class CInstallPrefs;
+	}
+
+/**
+ * Base test step class containing handy functions
+ * @test
+ * @internalComponent
+ */
+class CSwisTestStep : public CTestStep
+	{
+protected:
+
+	enum TReadType
+		{
+		ESimpleType,		//to read "numexist" and "numnonexist" value from INI.
+		ECancelType,		//to read "numexistcancel" and "numnonexistcancel" value from INI.
+		ERegisteredType		//to read "numregistered" value from INI.
+		};
+		
+	/**
+	 * Get the file names for checking if present or missing.
+	 * The test step's INI file must contain entry "numexistcancel=<n>" and one or more entries
+	 * "existcancel<i>=<fname>". 
+	 * The test step's INI file must contain entry "numnonexistcancel=<n>" and one or more entries 
+	 * "nonexistcancel<i>=<fname>".
+	 * The test step's INI file must contain entry "numexist=<n>" and one or more entries 
+	 * "exist<i>=<fname>".
+	 * The test step's INI file must contain entry "numnonexist=<n>" and one or more entries 
+	 * "nonexist<i>=<fname>".
+	 * 
+	 * @param aFileNumExist     this array contains the name of the files which must exist after
+	 *						    installation/un-installation/cancellation.
+	 * @param aFileNumNonExist	this array contains the name of the files which must not exist after
+	 * 							installation/un-installation/cancellation.
+	 * @param aDoCancelTest     Used to make decision for reading from the INI file.
+	 *                          ETrue  Cancel Testing is enabled, so read entries "numexistcancel" and "numnonexistcancel".
+	 *                          EFalse Read entries "numexist" and "numnonexist".
+	 */
+	void GetFileNamesForCheck(RArray<TPtrC>& aFileNumExist,RArray<TPtrC>& aFileNumNonExist, TReadType aReadType);
+	 
+	/**
+	 * Extract the file names from the INI file. 
+	 * @param aEntries     Number of file name entries. 
+	 * @param aEntryBase   Base name of the keys specifying names of files to 
+	 *                     check; an index (0..n-1) is appended to the base 
+	 *                     name to get the actual key name.
+	 * @param aFileArray   Contains all the file names to check for missing or present. 
+	 */ 
+	void ExtractFileName(TInt aEntries, const TDesC& aEntryBase, RArray<TPtrC>& aFileArray);
+	 
+	/** 
+	 * Checks for files that should exist if the installation was successful,
+	 * and which shouldn't exist if the installation was cancelled. 
+	 * @param aCheckExist  Controls the kind of testing done
+	 *                     ETrue  Files must exist
+	 *                     EFalse Files must not exist
+	 * @param aFileArray   Contains all the file names to check for missing or present depending
+	 *					   on the aCheckExist. If ETrue, this contains the names of files that must exist
+	 *					   else if EFalse contains the names of files that must not be present.
+	 * @param aTestUtil    Contains reference to the testutilserver session.
+	 * @param aMsecTimeout Timeout to wait for file to be created, if not already existing
+     */
+	void CheckIfFilesExist(TBool aCheckExist, const RArray<TPtrC>& aFileArray, RTestUtilSessionSwi& aTestUtil, TInt aMsecTimeout=0);
+	 
+	/**
+	 * Checks whether certain files do or do not exist by checking the registry entry and
+	 * sets test step result accordingly.
+	 * @param aFileArray   Contains all the file names to check for missing/present.
+	 */ 
+	void CheckRegistryEntry(RArray<TPtrC>& aFileArray);
+
+	/**
+	 * Checks that the correct dialogs have been called during the installation.
+	 */
+	void CheckDialogsCalled(const Swi::Test::CUIScriptAdaptor& ui);
+	
+	/**
+	 * Checks whether a fatal OCSP response was encountered during the installation.
+	 */
+	void CheckFatalOcspResponse(const Swi::Test::CUIScriptAdaptor& ui);
+	
+	/**
+	 * Checks whether the values of ocsp outcomes in the ini file matches with that of 
+	 * the DisplayOcspResultL function.
+	 */
+    void  CheckExpectedOcspOutcomes(const Swi::Test::CUIScriptAdaptor& ui);	
+
+   /**
+	 * Copy files from one place to another.
+	 *
+	 * @param aNumEntries Name of the key that specifies number of file name 
+	 *                    entries
+	 * @param aFrom  Base name of the keys specifying names of files to 
+	 *                    copy from; an index (0..n-1) is appended to the base 
+	 *                    name to get the actual key name
+	 * @param aTo    Base name of the keys specifying names of files to 
+	 *                    copy to; an index (0..n-1) is appended to the base 
+	 *                    name to get the actual key name
+	 */
+	void CopyFilesL(const TDesC& aNumEntries, const TDesC& aFrom, const TDesC& aTo);
+	
+	/**
+ 	 * Delete files.
+ 	 *
+ 	 * @param aNumEntries     Name of the key that specifies number of file name 
+ 	 *                        entries
+ 	 * @param aDeleteKeyBase  Base name of the keys specifying names of files
+ 	 *                        to delete; an index (0..n-1) is appended to the
+ 	 *                        base name to get the actual key name
+ 	 */
+ 	void DeleteFilesL(const TDesC& aNumEntries, const TDesC& aDeleteKeyBase);
+	
+	/**
+	 * Stores all the values of expected install sizes as indicated in the test
+	 * step's INI file.
+	 * @param aNumExpectedSizeEntries Name of key that specifies the number of
+	 *                                expected install sizes.
+	 * @param aExpectedInstallSize    A reference to the array of install sizes.
+	 */
+	void StoreExpectedInstallSizesL(TInt aNumExpectedSizeEntries, RArray<TTableOfInstallSizes>& aExpectedValue);
+	
+	/** Verify the Pub and Sub value of the current installation/uninstallation */
+	void CheckPubSubStatus(TDesC& aPubSubStatus);
+
+	/**
+	 * Check that the pub and sub status returns to KErrNone after a test.
+	 * This check should typically be last, whereas the previous method should
+	 * be done ASAP after an install/uninstall since there's a race condition.
+	 */
+	void CheckPubSubStatusIdle();
+	
+   /**
+	 * Set or clear read only bit on files.
+	 *
+	 * @param aNumEntries     Name of the key that specifies number of file name 
+	 *                        entries
+	 * @param aFileKeyBase    Base name of the keys specifying names of files
+	 *                        to set; an index (0..n-1) is appended to the
+	 *                        base name to get the actual key name
+	 * @param aFileKeyBase    Base name of the keys specifying operation on files
+	 *                        ; an index (0..n-1) is appended to the
+	 *                        base name to get the actual key name.
+	 */
+	void SetClearReadOnlyFilesL(const TDesC& aNumEntries,
+								const TDesC& aFileKeyBase,
+								const TDesC& aSetClearOpBase);
+	
+   /**
+	 * Check current step result against list of expected result codes.
+	 */
+	void CheckExpectedResultCodesL();
+
+	/**
+	 * Compares hashes for pairs of files read from config section, sets the
+	 * test step result to fail if any pair does not match or if there is an
+	 * error attempting to get a hash.
+	 */
+	void CompareFilesL();
+
+	/**
+	 * Compares file contents with buffer. Sets test step result to fail if
+	 * the contents do not match or there is an error in performing the
+	 * operation.
+	 */
+	void CompareFileWithBufferL(const Swi::Test::CUIScriptAdaptor& ui);
+
+	/**
+	 * Get the device supported languages from the config section.
+	 */
+	void GetDevSupportedLanguagesL(RArray<TInt>& aDeviceLanguages);
+
+	};
+
+/**
+ * Installation test step class
+ * @test
+ * @internalComponent
+ */
+class CSwisInstallStep : public CSwisTestStep
+	{
+public:
+	enum TInstallType { EUseFileHandle, EUseMemory, EUseFileName, EUseCAF, EUseOpenFileName, ECheckExitValue};
+
+	CSwisInstallStep(TInstallType aInstallType, TBool aDoCancelTest = EFalse);
+	~CSwisInstallStep();
+	virtual TVerdict doTestStepPreambleL();
+	virtual TVerdict doTestStepPostambleL();
+	virtual TVerdict doTestStepL();
+private:
+	TInt DoInstallL(Swi::CInstallPrefs& aInstallPrefs);
+	void GetFilesToHoldOpenL();
+
+private:
+	TFileName iSisFileName; // name of the file to install
+	TFileName iXmlFileName; // name of the file containing dialog data
+	Swi::Test::CUIScriptAdaptor* iUi; // XML script-based UI implementation
+	TInstallType iInstallType; // use file handle to install
+	RArray<TTableOfInstallSizes> iExpectedValue; // array of expected install sizes
+	TBool iDoCancelTest;
+	TPtrC iExpectedHash;
+	TInt iExpectedDialog;
+	TInt  iKErrCode;
+	TPtrC Outcomes;// outcomes as received from ini file
+	TUid iUid;
+	TInt iExpectedUserDrive; // -1 if not checked
+	TPtrC iPubSubStatus;
+	HBufC* iFileToWatch;
+	TBool iExpectFileChange;
+	RPointerArray<RFile> iFilesHeldOpen;
+	TBool iUseDeviceLanguages;
+	RArray<TInt> iDeviceLanguages;
+	};
+
+/**
+ * Uninstallation test step class
+ * @test
+ * @internalComponent
+ */
+class CSwisUninstallStep : public CSwisTestStep
+	{
+public:
+	enum TUninstallType { EByUid, EByPackage };
+	
+	CSwisUninstallStep(TUninstallType aType, TBool aDoCancelTest = EFalse);
+	~CSwisUninstallStep();
+	virtual TVerdict doTestStepPreambleL();
+	virtual TVerdict doTestStepPostambleL();
+	virtual TVerdict doTestStepL();
+private:
+	TInt DoUninstallL();
+
+private:
+	TUid iUid;
+	TFileName iXmlFileName; // name of the file containing dialog data
+	TPtrC iVendorName;
+	TInt iExpectedDialog;
+	TInt iKErrCode;
+	Swi::Test::CUIScriptAdaptor* iUi; // XML script-based UI implementation
+	TPtrC iPackageName;
+	TUninstallType iType;
+	TBool iDoCancelTest;
+	TPtrC iPubSubStatus;
+	TBool iIsSafeMode;
+	};
+
+
+/**
+ * CTrustStatusStep 
+ * @test
+ * @internalComponent
+ */
+class CTrustStatusStep : public CSwisTestStep
+	{
+public:
+	CTrustStatusStep();
+	virtual TVerdict doTestStepL();
+	TPtrC* GetRevocationName(Swi::TRevocationStatus t);
+	TPtrC* GetValidationName(Swi::TValidationStatus t);
+	};
+
+/**
+ * CPostInstallRevocationCheckStep 
+ * @test
+ * @internalComponent
+ */
+class CPostInstallRevocationCheckStep : public CSwisTestStep
+	{
+public:
+	CPostInstallRevocationCheckStep();
+	virtual TVerdict doTestStepL();
+	};
+	
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+/**
+ * CheckSCRField test step class
+ * @test
+ * @internalComponent
+ */
+class CCheckScrFieldStep : public CSwisTestStep
+	{
+public:	
+	virtual TVerdict doTestStepL();
+	};
+	
+class CCheckScrCompPropertyStep : public CSwisTestStep
+	{
+public:	
+	virtual TVerdict doTestStepL();
+	};
+#endif
+
+_LIT(KSwisInstallStep, "InstallStep");
+_LIT(KSwisInstallFHStep, "InstallFHStep"); // install using file handles
+_LIT(KSwisInstallMemStep, "InstallMemStep"); // install from memory
+_LIT(KSwisInstallCAFStep, "InstallCAFStep"); // install from CAF
+_LIT(KSwisInstallOpenFileStep, "InstallOpenFileStep"); // install with already opened file
+_LIT(KSwisCheckedInstallStep, "CheckedInstallStep");
+
+// Cancel testing 
+_LIT(KSwisInstallCancelStep, "InstallStepCancel");
+_LIT(KSwisInstallFHCancelStep, "InstallFHStepCancel"); // install using file handles
+_LIT(KSwisInstallMemCancelStep, "InstallMemStepCancel"); // install from memory
+_LIT(KSwisInstallCAFCancelStep, "InstallCAFStepCancel"); // install from CAF
+
+_LIT(KSwisUninstallStep, "UninstallStep");
+_LIT(KSwisUninstallAugStep, "UninstallAugStep"); // uninstall of augmentation
+_LIT(KTrustStatus, "TrustStatus");
+_LIT(KPirCheck, "PostInstallRevocationCheck");
+
+_LIT(KSwisUninstallCancelStep, "UninstallStepCancel");
+_LIT(KSwisUninstallAugCancelStep, "UninstallAugStepCancel"); // uninstall of augmentation
+_LIT(KNumExpectedSizes, "numExpectedSizes"); // This specifies that the test section
+											 // has values for installation size(s).
+
+_LIT(KSwisMmcFormatStep, "MmcFormatStep");
+_LIT(KSwisMmcMountStep, "MmcMountStep");
+_LIT(KSwisMmcUnMountStep, "MmcUnMountStep");
+_LIT(KSwisMmcCopyFiles, "MmcCopyFilesStep");
+_LIT(KSwisMmcCheckFiles, "MmcCheckFilesStep");
+_LIT(KSwisMmcResetTags, "MmcResetTagsStep");
+_LIT(KSwisMmcDeleteFiles, "MmcDeleteFilesStep");
+_LIT(KSwisMmcGetNumFilesFiles, "MmcGetNumFilesStep");
+_LIT(KAskRegistry, "MmcAskRegistry");
+_LIT(KSetClearReadOnly, "SetClearReadOnlyStep");
+_LIT(KQuerySidViaApparcPlugin, "QuerySidViaApparcPlugin");
+
+_LIT(KSwisListUninstallPkgsStep, "ListUninstallPkgsStep");
+_LIT(KSwisRemoveUninstallPkgsStep, "RemoveUninstallPkgsStep");
+_LIT(KSwisGetPackageDetails, "GetPackageDetails");
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+_LIT(KCheckSCRFieldStep, "CheckSCRFieldStep");
+_LIT(KCheckSCRCompPropertyStep, "CheckSCRCompPropertyStep");
+#endif
+
+/**
+ * Listing and Removing Uninslled Pkgs test step class
+ * @test
+ * @internalComponent
+ */
+class CSwisUninstallPkgsStep : public CSwisTestStep
+	{
+public:
+	enum TUnInstallAppType { EListPkgs, ERemovePkgs, EPkgDetails};
+
+	CSwisUninstallPkgsStep(TUnInstallAppType aInstallType);
+	~CSwisUninstallPkgsStep();
+	virtual TVerdict doTestStepPreambleL();
+	virtual TVerdict doTestStepPostambleL();
+	virtual TVerdict doTestStepL();
+
+private:
+	TUnInstallAppType iUnInstallAppType; // use file handle to install
+	TUid iUid;
+	TInt iDrive;
+	TChar iDriveChar;
+	};
+
+/**
+ * MMC emulation test step class
+ * @test
+ * @internalComponent
+ */
+class CSwisMmcStep : public CSwisTestStep
+	{
+public:
+	enum TMmcOperation { 
+		/**
+		 * EFormat - Format the specified drive
+		 *
+		 * If the drive is NOT mounted the format will fail with error -18 KErrNotReady
+		 *
+		 * nb. Formating a drive looks like an MMC insertion to the SWI
+		 * daemon (it does NOT look like a remove followed by an insert).
+		 */
+		EFormat,
+		/**
+		 * EMount - Mount the specified drive
+		 *
+		 * Mounting an already mounted drive fails with error -21 KErrAccessDenied
+		 * 
+		 * Mounting an unmounted drive looks exactly like a MMC card
+		 * insertion to the SWI daemon.
+		 *
+		 * [The SWI daemon detects MMC insertion by registering with the
+		 * FS server using NotifyChange(ENotifyEntry,,) for a non-existent
+		 * file on the drive being watched. It then checks if it can read
+		 * the Volume info to decide if media has been inserted or
+		 * removed.]
+		 */
+		EMount,
+		/**
+		 * EUnMount - UnMount the specified drive
+		 *
+		 * Un-mounting an already un-mounted drive fails with error -18 KErrNotReady
+		 *
+		 * Unmounting an mounted drive looks exactly like a MMC card
+		 * removal to the SWI daemon.
+		 *
+		 * Will fail if there are any open file descriptors on the drive.
+		 */
+		EUnMount,
+		
+		/**
+		 * ECopyFiles - Copy some files to the MMC
+		 */
+		ECopyFiles,
+		/**
+		 * ECheckFiles - Check set of files specified by
+		 * numexist/existX and numnonexist/nonexistX are present/absent as specified.
+		 */
+		ECheckFiles,
+		/**
+		 * EResetTags - Delete the tags directory for a new test
+		 */
+		EResetTags,
+		/**
+ 		 * EDeleteFiles - Delete some files which may be in private directories
+ 		 */
+		EDeleteFiles,
+		/**
+ 		 * EGetNumFiles - Get the number of files in a given directory
+ 		 */
+		EGetNumFiles,
+		EAskReg,
+		ESetClearReadOnly,
+		/**
+		 * Query if the specified SID is installed
+		 */
+		EQuerySidViaApparcPlugin
+	};
+	CSwisMmcStep(TMmcOperation aOperation);
+	~CSwisMmcStep();
+
+
+
+
+	virtual TVerdict doTestStepPreambleL();
+	virtual TVerdict doTestStepPostambleL();
+	virtual TVerdict doTestStepL();
+
+private:
+	TMmcOperation iOperation;
+	TInt iDrive;
+	TInt iBootMode;
+	TChar iDriveChar;
+#ifndef SWI_TEXTSHELL_ROM
+	CAppSidChecker *iSwiSidChecker;
+#endif
+	};
+	
+#endif // __TSWISSTEP_H__