diff -r c084286672be -r 15018f1726c7 featuremgmt/featuremgr/test/rtest/src/t_fmgrswi.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/featuremgmt/featuremgr/test/rtest/src/t_fmgrswi.cpp Fri Mar 19 10:00:55 2010 +0200 @@ -0,0 +1,195 @@ +// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of "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: +// + +#include +#include +#include +#include +#include +#include +#include +#include +#include "..\src\inc\featmgrconfiguration.h" + +/////////////////////////////////////////////////////////////////////////////////////// + +static RTest TheTest(_L("t_fmgrswi")); + +const TUid KNewFeatureUid = {0x7888ABC2}; + +/////////////////////////////////////////////////////////////////////////////////////// + +//Deletes all created test files. +void DestroyTestEnv() + { + } + +/////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////////// +//Test macros and functions +void Check1(TInt aValue, TInt aLine) + { + if(!aValue) + { + DestroyTestEnv(); + RDebug::Print(_L("*** Expression evaluated to false. Line %d\r\n"), aLine); + TheTest(EFalse, aLine); + } + } +void Check2(TInt aValue, TInt aExpected, TInt aLine) + { + if(aValue != aExpected) + { + DestroyTestEnv(); + RDebug::Print(_L("*** Expected: %d, got: %d. Line %d\r\n"), aExpected, aValue, aLine); + TheTest(EFalse, aLine); + } + } +#define TEST(arg) ::Check1((arg), __LINE__) +#define TEST2(aValue, aExpected) ::Check2(aValue, aExpected, __LINE__) + +/////////////////////////////////////////////////////////////////////////////////////// + +TInt KillProcess(const TDesC& aProcessName) + { + TFullName name; + //RDebug::Print(_L("Find and kill \"%S\" process.\n"), &aProcessName); + TBuf<64> pattern(aProcessName); + TInt length = pattern.Length(); + pattern += _L("*"); + TFindProcess procFinder(pattern); + + while (procFinder.Next(name) == KErrNone) + { + if (name.Length() > length) + {//If found name is a string containing aProcessName string. + TChar c(name[length]); + if (c.IsAlphaDigit() || + c == TChar('_') || + c == TChar('-')) + { + // If the found name is other valid application name + // starting with aProcessName string. + //RDebug::Print(_L(":: Process name: \"%S\".\n"), &name); + continue; + } + } + RProcess proc; + if (proc.Open(name) == KErrNone) + { + proc.Kill(0); + //RDebug::Print(_L("\"%S\" process killed.\n"), &name); + } + proc.Close(); + } + return KErrNone; + } + +/** +@SYMTestCaseID PDS-EFM-CT-4111 +@SYMTestCaseDesc +@SYMTestPriority High +@SYMTestActions +@SYMTestExpectedResults Test must not fail +@SYMDEF DEF144262 +*/ +void SWItest() + { + RFs fs; + TInt err = fs.Connect(); + TEST2(err, KErrNone); + // + RFeatureControl ctrl; + err = ctrl.Open(); + TEST2(err, KErrNone); + //Simulate SWI start + err = RProperty::Set(KUidSystemCategory, KSAUidSoftwareInstallKeyValue, ESASwisInstall); + TEST2(err, KErrNone); + //Notify FeatMgr server that SWI started + err = ctrl.SWIStart(); + TEST2(err, KErrNone); + //Add a new persistent feature (using the same SWI connection) + TBitFlags32 flags; + flags.ClearAll(); + flags.Set(EFeatureSupported); + flags.Set(EFeatureModifiable); + flags.Set(EFeaturePersisted); + TFeatureEntry fentry(KNewFeatureUid, flags, 9876); + err = ctrl.AddFeature(fentry); + TEST2(err, KErrNone); + //Simulate file I/O error + (void)fs.SetErrorCondition(KErrGeneral, 4); + //Complete the SWI simulation + err = RProperty::Set(KUidSystemCategory, KSAUidSoftwareInstallKeyValue, ESASwisInstall | ESASwisStatusSuccess); + TEST2(err, KErrNone); + //Notify FeatMgr server that SWI completed + err = ctrl.SWIEnd(); + TEST2(err, KErrNone); + //Cleanup + ctrl.Close(); + (void)fs.SetErrorCondition(KErrNone); + fs.Close(); + //Kill FeatMgr server + err = KillProcess(KServerProcessName); + TEST2(err, KErrNone); + //Open new connection + err = ctrl.Open(); + TEST2(err, KErrNone); + //The feature should be there + TFeatureEntry fentry2(KNewFeatureUid); + err = ctrl.FeatureSupported(fentry2); + TEST2(err, KFeatureSupported); + TEST2(fentry2.FeatureData(), fentry.FeatureData()); + //Cleanup + err = ctrl.DeleteFeature(KNewFeatureUid); + TEST2(err, KErrNone); + ctrl.Close(); + } + +void DoTestsL() + { + CActiveScheduler* scheduler = new CActiveScheduler; + TEST(scheduler != NULL); + CActiveScheduler::Install(scheduler); + + TheTest.Start(_L("@SYMTestCaseID:PDS-EFM-CT-4111 SWI test")); + SWItest(); + + delete scheduler; + } + +TInt E32Main() + { + TheTest.Title(); + + CTrapCleanup* tc = CTrapCleanup::New(); + TheTest(tc != NULL); + + __UHEAP_MARK; + + TRAPD(err, DoTestsL()); + DestroyTestEnv(); + TEST2(err, KErrNone); + + __UHEAP_MARKEND; + + TheTest.End(); + TheTest.Close(); + + delete tc; + + User::Heap().Check(); + return KErrNone; + }