--- /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 <badesca.h>
+#include <epos_cposmodules.h>
+#include <epos_cposmoduleupdate.h>
+#include <epos_cposmoduleidlist.h>
+#include <lbscommon.h>
+#include <lbspositioninfo.h>
+#include <swi/launcher.h>
+#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);
+ }
+ }
+