common/tools/ats/smoketest/localisation/apparchitecture/tef/T_RecUpgrade.cpp
changeset 793 0c32c669a39d
child 872 17498133d9ad
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/common/tools/ats/smoketest/localisation/apparchitecture/tef/T_RecUpgrade.cpp	Fri Nov 27 12:22:12 2009 +0000
@@ -0,0 +1,223 @@
+// Copyright (c) 2008-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:
+// This test case is used to verify that a recognizer plugin can be upgraded and  used 
+// without reboot.
+// 
+//
+
+
+
+/**
+ @file
+ @internalComponent - Internal Symbian test code
+*/
+
+#include "testableapalssession.h"
+#include "T_RecUpgrade.h"
+#include "appfwk_test_utils.h"
+#include "trecupgrade/upgconstants.h"
+
+/////////////////////////////////////////////////
+
+// Should be enough for CApaEComMonitor to detect new plugin
+const TInt KOneSecondDelay = 1000000;
+
+/////////////////////////////////////////////////
+
+CT_RecUpgradeStep::CT_RecUpgradeStep()
+	{
+	// Call base class method to set up the human readable name for logging
+	SetTestStepName(KT_RecUpgradeStep);
+	}
+
+CT_RecUpgradeStep::~CT_RecUpgradeStep()
+	{
+	}
+
+/**
+Check that the test plugin file has not been left in the filesystem from a previous run.
+*/
+TVerdict CT_RecUpgradeStep::doTestStepPreambleL()
+	{
+	RSmlTestUtils fs;
+	CleanupClosePushL(fs);
+	User::LeaveIfError(fs.Connect());
+	
+	INFO_PRINTF1(_L("Verifies that recupgrade.rsc was not present during boot."));
+	TBool fileExists = ETrue;
+	TInt err = fs.IsFilePresent(KUpgRscTargetPath, fileExists);
+	TESTE(fileExists==EFalse, err);
+	
+	CleanupStack::PopAndDestroy(&fs);
+	return TestStepResult();
+	}
+
+/*
+Delete the plugin file which was installed during the test from c:.
+*/
+TVerdict CT_RecUpgradeStep::doTestStepPostambleL()
+	{
+	RSmlTestUtils fs;
+	CleanupClosePushL(fs);
+	User::LeaveIfError(fs.Connect());
+
+	TBool fileExists = EFalse;
+	fs.IsFilePresent(KUpgRscTargetPath, fileExists);
+	if(fileExists)
+		{
+		fs.ChangeFilePermissionL(KUpgRscTargetPath); // clear readonly attribute inherited from z:
+		const TInt err = fs.DeleteFileL(KUpgRscTargetPath);
+		if(err == KErrNone) 
+			INFO_PRINTF1(_L("Removed temporary file recupgrade.rsc"));
+		else 
+			INFO_PRINTF1(_L("Failed to remove temporary file recupgrade.rsc"));	
+		}
+		
+	CleanupStack::PopAndDestroy(&fs);
+	return TestStepResult();
+	}
+	
+/*
+The test entry point
+*/			
+TVerdict CT_RecUpgradeStep::doTestStepL()
+	{
+	RTestableApaLsSession apparcServer;
+	CleanupClosePushL(apparcServer);
+	User::LeaveIfError(apparcServer.Connect());
+	//DONT_CHECK skips the heap check at server side. This heap imbalance happens due to copying recupgrade.dll to c:\sys\bin
+	//and failed to delete it in cleanup (Windows OS don’t allow to delete any file which are in use).
+ 	HEAP_TEST_LS_SESSION(apparcServer, 0, DONT_CHECK, TestUpgradeRecognizerL(apparcServer), NO_CLEANUP);
+
+	CleanupStack::PopAndDestroy(&apparcServer);
+	
+	return TestStepResult();
+	}
+
+/**
+@SYMTestCaseID APPFWK-APPARC-0100
+
+@SYMDEF INC127312
+
+@SYMTestCaseDesc This test verify that apparc can dynamically upgrade and use an Ecom recognizer plugin.
+
+@SYMTestPriority High
+
+@SYMTestStatus Implemented
+
+@SYMTestActions:
+	
+	1. Try to recognize .upg file with version 1 of recupgrade ECOM plugin but if shuld not be able to recognize as it is implemented like that
+	2. Install version 2 of recupgrade plugin (copy recupgrade_winscw/armv5_rec.dll and recupgrade_1.rsc from z:\system\data to c:\sys\bin and c:\resource\plugin respectively)
+
+	3. Because of installation Apparc will be notified and it will reload all recognizers plugin
+	4. Now try to recognize .upg file . it shuld be able to recognize as vertion 2 is implemented like that
+
+@SYMTestExpectedResults Test should complete without any leave, panic or error.
+ */
+void CT_RecUpgradeStep::TestUpgradeRecognizerL(RApaLsSession& aApparcServer)
+	{
+	
+	TDataRecognitionResult recogResult;
+	TBuf8<255> buffer;
+	buffer.FillZ(255);
+	recogResult.Reset();
+		
+	// Since recognizer for "mime\upg" mime type is installed but it will return CApaDataRecognizerType::ENotRecognized as implemented : call to RecognizeData()
+	// returns CApaDataRecognizerType::ENotRecognized.
+	INFO_PRINTF1(_L("MIME type recognition cache is not used..."));
+	TEST(aApparcServer.RecognizeData(KUpgDocPath, buffer, recogResult)==KErrNone);
+
+	TEST(recogResult.iConfidence == CApaDataRecognizerType::ENotRecognized);
+
+	INFO_PRINTF1(_L("Installs upgrade of  mime/upg recognizer plugin file "));
+	RSmlTestUtils fs;
+	CleanupClosePushL(fs);
+	User::LeaveIfError(fs.Connect());
+	
+	// Ensure c:\\resource\\plugins is created, otherwise leave from this teststep
+	
+	TInt err = fs.CreateDirectoryL(KUpgRscTargetDir);
+	TESTEL((err == KErrNone || err == KErrAlreadyExists), err);
+	INFO_PRINTF1(_L("c:\\resource\\plugins is created successfully or already exists"));
+	
+	// Ensure c:\\sys\\bin is created, otherwise leave from this teststep
+	
+	err = fs.CreateDirectoryL(KUpgDllTargetDir);
+	TESTEL((err == KErrNone || err == KErrAlreadyExists), err);
+	INFO_PRINTF1(_L("c:\\sys\\bin is created successfully or already exists"));
+
+	// Copy recupgrade.rsc from z:\\ to c:\\resource\\plugins, to trigger the rescan for plugins.
+	
+	err = fs.CopyFileL(KUpgRscSourcePath, KUpgRscTargetPath);
+	TEST(err == KErrNone);
+	INFO_PRINTF1(_L("Successfully copied recupgrade.rsc from Z:\\system\\data to c\\resource\\plugins"));
+	// Copy recupgrade_*.dll from z:\\ to c:\\sys\\bin.
+	#ifdef __WINS__ 
+		err = fs.CopyFileL(KUpgDllSourcePathWinscw, KUpgDllTargetPath);
+	#else
+		err = fs.CopyFileL(KUpgDllSourcePathArmv5, KUpgDllTargetPath);
+	#endif
+	TEST(err == KErrNone);
+	INFO_PRINTF1(_L("Successfully copied recupgrade_*.dll from Z:\\system\\data to c:\\sys\\bin"));
+
+	INFO_PRINTF2(_L("Waits %d seconds for new mime/upg recognizer with EPossible confidence to be installed."), (4 * KOneSecondDelay)/1000000);	
+	User::After(4 * KOneSecondDelay);
+	
+	// Without fix for INC127312: Apparc server will not reload all upgraded MIME type recognition hence new version of existing will not used for recognization 
+	INFO_PRINTF1(_L("MIME type recognition cache is flushed when a new recogizer is installed"));
+	recogResult.Reset();
+	TEST(aApparcServer.RecognizeData(KUpgDocPath, buffer, recogResult)==KErrNone);
+	TEST(recogResult.iDataType.Des8().CompareF(KMimeUpgType) == 0);
+	TEST(recogResult.iConfidence == CApaDataRecognizerType::EPossible);
+		
+	
+// Delete the plugin resource file of the recognizer with EPossible confidence which was installed during the test from z:.
+	
+	TInt fileExists = EFalse;
+	fs.IsFilePresent(KUpgRscTargetPath, fileExists);
+	if (fileExists)
+		{
+		fs.ChangeFilePermissionL(KUpgRscTargetPath); // clear readonly attribute inherited from z:
+		err = fs.DeleteFileL(KUpgRscTargetPath);
+		if(err == KErrNone) 
+			INFO_PRINTF1(_L("Removed file recupgrade.rsc"));
+		else 
+			INFO_PRINTF1(_L("Failed to remove recupgrade.rsc"));	
+		}
+
+	fileExists = EFalse;
+	fs.IsFilePresent(KUpgDllTargetPath, fileExists);
+	if (fileExists)
+		{
+		fs.ChangeFilePermissionL(KUpgDllTargetPath); // clear readonly attribute inherited from z:
+		err = fs.DeleteFileL(KUpgDllTargetPath);
+		if(err == KErrNone) 
+			INFO_PRINTF1(_L("Removed recupgrade.dll"));
+		else 
+			INFO_PRINTF1(_L("Failed to remove recupgrade.dll"));	
+		}
+
+	INFO_PRINTF2(_L("Waits %d seconds for the data recognizer list maintained by EMIME to be updated"), (10 * KOneSecondDelay)/1000000);	
+ 	User::After(10 * KOneSecondDelay);
+	
+	// Since "mime/upg" recognizer version 2 is uninstalled, mime/upg mime type is not recognized. 
+	INFO_PRINTF1(_L("MIME type recognition cache is flushed when a existing recogizer is uninstalled"));
+	recogResult.Reset();
+	TEST(aApparcServer.RecognizeData(KUpgDocPath, buffer, recogResult)==KErrNone);
+	TEST(recogResult.iConfidence == CApaDataRecognizerType::ENotRecognized);
+	
+	CleanupStack::PopAndDestroy(&fs);
+	
+	}