diff -r 000000000000 -r 9cfd9a3ee49c lbstest/lbstestproduct/lbsclient/src/ctlbsclientstepfallbackuninstall.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lbstest/lbstestproduct/lbsclient/src/ctlbsclientstepfallbackuninstall.cpp Tue Feb 02 01:50:39 2010 +0200 @@ -0,0 +1,262 @@ +/* +* Copyright (c) 2008 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: +* +*/ + + + +// INCLUDES +#include "ctlbsclientstepfallbackuninstall.h" +#include "ctlbsclientdefs.h" +#include +#include +#include +#include +#include +#include +#include +#include "tctlbsclientmodulesobserver.h" +#include "ctlbsinstallui.h" + +// ================= MEMBER FUNCTIONS ======================= + +// --------------------------------------------------------- +// Constructor. +// --------------------------------------------------------- +CT_LbsClientStepFallbackUninstall::CT_LbsClientStepFallbackUninstall(CT_LbsServer& aParent): CT_LbsPortedStepBase(aParent) + { + _LIT(KTestName, "TP301 - Error on Uninstall"); + SetTestStepName(KTestName); + } + + +// --------------------------------------------------------- +// Destructor. +// --------------------------------------------------------- +CT_LbsClientStepFallbackUninstall::~CT_LbsClientStepFallbackUninstall() + { + } + +// --------------------------------------------------------- +// CT_LbsClientStepFallbackUninstall::StartL +// +// --------------------------------------------------------- +// +void CT_LbsClientStepFallbackUninstall::StartL() + { + iError = EFalse; + + // Make sure the psy is uninstalled to begin with + TInt appId; + GetIntFromConfig(ConfigSection(),KLbsSisInstallAppId,appId); + SISUninstallPsyL(TUid::Uid(appId)); // may return an error, but that's ok + User::After(2000000); + + // Register as an observer to listen for events + CPosModules* db = CPosModules::OpenL(); + CleanupStack::PushL(db); + + db->SetObserverL(*this); + + // Make sure that only the delayed response (integrated, non-gps) test psy is enabled: + SetupPsyL(iUidDelayedResponsePsy); + + //////////////////////////////////// + // Install test psy: + TPtrC sispath; + GetStringFromConfig(ConfigSection(),KLbsSisInstallSisLocation,sispath); + TInt err = SISInstallPsyL(sispath); + if(err != KErrNone) + { + INFO_PRINTF2(_L("Failing: SISInstallPsyL returned %d\n"), err); + SetTestStepResult(EFail); + } + iExpectedEvent = EPosModulesEventModuleInstalled; + INFO_PRINTF1(_L("Wait for EPosModulesEventModuleInstalled event\n")); + // Wait for event + DoEventHandlingL(); + //////////////////////////////////// + + //////////////////////////////////// + // Set priorities with installed psy at top (so psy is in use when uninstalled): + db->SetModulePriorityL(iUidInstallableTrackingPsy, 0); + db->SetModulePriorityL(iUidDelayedResponsePsy, 1); + //////////////////////////////////// + + //////////////////////////////////// + // Make a periodic request to default proxy and verify it comes from the installed psy: + RPositionServer posServer; + CleanupClosePushL(posServer); + err = posServer.Connect(); + _LIT(KConnectErr, "Error when connecing to EPos server, %d"); + AssertTrueL(err == KErrNone, KConnectErr, err); + + RPositioner positioner; + CleanupClosePushL(positioner); + err = positioner.Open(posServer); + _LIT(KOpenErr, "Error when opening positioner, %d"); + AssertTrueL(err == KErrNone, KOpenErr, err); + + TInt normalInterval = 5000000; // 5 seconds + TTimeIntervalMicroSeconds interval = TTimeIntervalMicroSeconds(normalInterval); + TPositionUpdateOptions posOption; + posOption.SetUpdateInterval(interval); + + err = positioner.SetUpdateOptions(posOption); + _LIT(KUpdateErr, "Error when setting update interval, %d"); + AssertTrueL(err == KErrNone, KUpdateErr, err); + INFO_PRINTF2(_L("Update Interval set to %d\n"), interval); + + TPositionInfo positionInfo; + TRequestStatus status; + positioner.NotifyPositionUpdate(positionInfo, status); + INFO_PRINTF1(_L("Wait for NotifyPositionUpdate request to complete\n")); + User::WaitForRequest(status); + + VerifyPositionFromL(positionInfo, iUidInstallableTrackingPsy); + + if(status != KErrNone) + { + INFO_PRINTF2(_L("Failing: NotifyPositionUpdate returned %d\n"), status); + } + //////////////////////////////////// + + INFO_PRINTF1(_L("Issue another NotifyPositionUpdate() request (target time will be in the future)\n")); + positioner.NotifyPositionUpdate(positionInfo, status); + +#ifndef __WINSCW__ // doesn't work on the emulator (where cannot uninstall an in-use dll) + //////////////////////////////////// + // UnInstall test psy while last request is outstanding: + INFO_PRINTF1(_L("Uninstall the PSY\n")); + err = SISUninstallPsyL(TUid::Uid(appId)); + if(err != KErrNone) + { + INFO_PRINTF2(_L("Failing: SISUninstallPsyL returned %d\n"), err); + SetTestStepResult(EFail); + } + iExpectedEvent = EPosModulesEventModuleRemoved; + INFO_PRINTF1(_L("Wait for EPosModulesEventModuleRemoved event\n")); + // Wait for event + DoEventHandlingL(); + //////////////////////////////////// +#endif // not winscw + + INFO_PRINTF1(_L("Wait for second NotifyPositionUpdate() request to complete\n")); + User::WaitForRequest(status); + + INFO_PRINTF2(_L("NotifyPositionUpdate() request completed with %d\n"), status); + + if(status != KErrNone) + { + INFO_PRINTF1(_L("Failing: On emulator NotifyPositionUpdate expected to completed with KErrNone\n")); + SetTestStepResult(EFail); + } +#ifdef __WINSCW__ + VerifyPositionFromL(positionInfo, iUidInstallableTrackingPsy); + // make sure the psy is unloaded before trying to uninstall it on the emulator + CleanupStack::PopAndDestroy(&positioner); + CleanupStack::PopAndDestroy(&posServer); + // Emulator will lock the psy plugin dll for a period of time when we can't uninstall it: + User::After(30000000); + // cleanup - uninstall the psy: + err = SISUninstallPsyL(TUid::Uid(appId)); + if(err != KErrNone) + { + INFO_PRINTF2(_L("Failing: SISUninstallPsyL returned %d\n"), err); + SetTestStepResult(EFail); + } +#else // on arm the request should come from the ROM-based psy + INFO_PRINTF1(_L("Verify the update came from the ROM-based PSY\n")); + VerifyPositionFromL(positionInfo, iUidDelayedResponsePsy); + INFO_PRINTF1(_L("Verify the uninstalled PSY is unloaded\n")); + VerifyPsyUnloadedL(iUidInstallableTrackingPsy); + CleanupStack::PopAndDestroy(&positioner); + CleanupStack::PopAndDestroy(&posServer); +#endif + + + + db->RemoveObserver(); + CleanupStack::PopAndDestroy(db); + + } + +TInt CT_LbsClientStepFallbackUninstall::SISUninstallPsyL(const TUid& appId) + { + CUISisAdaptor* ui = CUISisAdaptor::NewLC(Logger()); + + TInt err = Swi::Launcher::Uninstall(*ui, appId); + + CleanupStack::PopAndDestroy(ui); + + INFO_PRINTF2(_L("Launcher::UnInstall returned %d\n"), err); + + return err; + } + +TInt CT_LbsClientStepFallbackUninstall::SISInstallPsyL(const TDesC& aSisPath) + { + CUISisAdaptor *ui = CUISisAdaptor::NewLC(Logger()); + CInstallPrefs* prefs = CInstallPrefs::NewLC(); + + TInt err = Swi::Launcher::Install(*ui, aSisPath, *prefs); + + CleanupStack::PopAndDestroy(prefs); + CleanupStack::PopAndDestroy(ui); + + INFO_PRINTF2(_L("Launcher::Install returned %d\n"), err); + + return err; + } + +// --------------------------------------------------------- +// CT_LbsClientStepFallbackUninstall::DoEventHandlingL +// +// --------------------------------------------------------- +// +void CT_LbsClientStepFallbackUninstall::DoEventHandlingL() + { + CActiveScheduler::Start(); + CheckErrorL(); + } + +// --------------------------------------------------------- +// CT_LbsClientStepFallbackUninstall::CheckErrorL +// +// --------------------------------------------------------- +// +void CT_LbsClientStepFallbackUninstall::CheckErrorL() + { + if (iError) + { + LogErrorAndLeaveL(iErrorText); + } + } + +// --------------------------------------------------------- +// CT_LbsClientStepFallbackUninstall::HandleDatabaseChangeL +// +// --------------------------------------------------------- +void CT_LbsClientStepFallbackUninstall::HandleSettingsChangeL(TPosModulesEvent aModuleEvent) + { + INFO_PRINTF2(_L("Event received %d\n"), aModuleEvent); + CActiveScheduler::Stop(); + if (aModuleEvent.iType != iExpectedEvent) + { + INFO_PRINTF2(_L("Unexpected Event received %d\n"), aModuleEvent); + SetTestStepResult(EFail); + } + } +