--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/common/tools/ats/smoketest/lbs/lbsclient/src/ctlbsclientpostp213.cpp Tue Nov 10 13:50:58 2009 +0000
@@ -0,0 +1,384 @@
+// Copyright (c) 2001-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:
+//
+
+
+
+// INCLUDE FILES
+#include "ctlbsclientpostp213.h"
+#include "ctlbsclientrequestor.h"
+#include "ctlbsclienteventtimer.h"
+#include <LbsPositionInfo.h>
+#include <Lbs.h>
+#include <LbsCommon.h>
+#include <LbsRequestor.h>
+#include <s32file.h>
+
+// CONSTANTS
+_LIT(KClient1, "RunL client1");
+_LIT(KClient2, "RunL client2");
+_LIT(KClient3, "RunL client3");
+
+_LIT(KClient1Default, "RunL client1, default psy");
+_LIT(KClient2Default, "RunL client2, default psy");
+_LIT(KClient3Default, "RunL client3, default psy");
+
+//Error logs
+_LIT( KErrStatusMismatch, "Statuses does not conform to each other!" );
+_LIT( KEventReceived, "Client 3 received an event that shouldn't be received!" );
+_LIT( KCanceledRequest, "Client 2 didn't receive KErrCancel, but %d!" );
+_LIT( KFileNotDeleted, "File created by PSY NOT deleted! PSY really unloaded from memory?" );
+
+//File name. Beware, also declared in EPos_CTestStatusPsy.h!!!!
+_LIT(KDummyFileName, "c:\\TestStatusPsyIsNotUnloaded.txt");
+
+// ================= MEMBER FUNCTIONS =======================
+
+// Constructor.
+CT_LbsClientPosTp213::CT_LbsClientPosTp213(CT_LbsServer& aParent): CT_LbsPortedStepBase(aParent)
+ {
+ _LIT(KTestName, "TP213 - Disabling psy during request");
+ SetTestStepName(KTestName);
+ }
+
+// Destructor
+CT_LbsClientPosTp213::~CT_LbsClientPosTp213()
+ {
+ }
+
+// ---------------------------------------------------------
+// CT_LbsClientPosTp213::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CT_LbsClientPosTp213::CloseTest()
+ {
+ delete ieventtimer;
+ ieventtimer = NULL;
+
+ delete iclient1;
+ delete iclient2;
+ delete iclient3;
+ }
+
+// ---------------------------------------------------------
+// CT_LbsClientPosTp213::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CT_LbsClientPosTp213::StartL()
+ {
+ TBool usedefaultpsy = FALSE; // Indicating if the default psy should be used
+ iNoFurtherEvents = FALSE; // Client should receive events!
+ iErrorDuringExecution = FALSE; // True if an error occurs
+
+ //Enable PSY
+ CPosModules* idb = CPosModules::OpenL();
+ CleanupStack::PushL(idb);
+ _LIT(KEnablePSY, "Enabling Test Status PSY");
+ INFO_PRINTF1(KEnablePSY);
+ EnablePsyL(*idb, iUidTestStatusPsy);
+
+ // Event timer
+ ieventtimer = CT_LbsClientEventTimer::NewL(Logger());
+ ieventtimer->SetObserver(this);
+
+ // 3 clients
+ iclient1 = CT_LbsClientRequestor::NewL(iUidTestStatusPsy, this, KClient1, Logger());
+ iclient2 = CT_LbsClientRequestor::NewL(iUidTestStatusPsy, this, KClient2, Logger());
+ iclient3 = CT_LbsClientRequestor::NewL(iUidTestStatusPsy, this, KClient3, Logger());
+
+ // Make a request with client 2
+ _LIT(KRequestClient2, "Calling StartRequestL for client2");
+ INFO_PRINTF1(KRequestClient2);
+ iclient2->StartRequestL(usedefaultpsy);
+
+ // Make client3 listen for status events
+ iclient3->RequestModuleStatusEvent();
+
+ // Disable Psy 3
+ User::After(100000); //a small delay
+ _LIT(KDisablePSY, "Disabling Test Status PSY");
+ INFO_PRINTF1(KDisablePSY);
+ DisablePsyL(*idb, iUidTestStatusPsy);
+
+ // Client1 reads Module Status
+ // Client API
+ TInt clientapistatus = iclient1->ReadModuleStatusClientApi(iUidTestStatusPsy);
+ _LIT(KClientApi, "Module Status from Client API: %d.");
+ TBuf<100> bufclientapi;
+ bufclientapi.Format(KClientApi, clientapistatus);
+ INFO_PRINTF1(bufclientapi);
+
+ // Modules API
+ TInt modulesapistatus = iclient1->ReadModuleStatusModulesApi(idb, iUidTestStatusPsy);
+ _LIT(KModulesApi, "Module Status from Module API: (IsAvailable=) %d.");
+ TBuf<100> bufmodulesapi;
+ bufmodulesapi.Format(KModulesApi, modulesapistatus);
+ INFO_PRINTF1(bufmodulesapi);
+ // Compare received statuses
+ if ( !((modulesapistatus == 0) && (clientapistatus == TPositionModuleStatus::EDeviceDisabled)) )
+ {
+ iErrorDuringExecution = TRUE;
+ ERR_PRINTF1(KErrStatusMismatch);
+ }
+
+ iclient2->ClosePositioner();
+
+ delete iclient1;
+ delete iclient2;
+ delete iclient3;
+
+ ///////////////////// Default PSY /////////////////////////////////////
+
+ // Do the same as before but now use the default PSY
+ iNoFurtherEvents = FALSE; // Client should receive events!
+ _LIT(KDefaultPsyStart, "****** Testing Default PSY ******");
+ INFO_PRINTF1(KDefaultPsyStart);
+
+ // Enable Psy
+ INFO_PRINTF1(KEnablePSY);
+ EnablePsyL(*idb, iUidTestStatusPsy);
+
+ // 3 clients
+ iclient1 = CT_LbsClientRequestor::NewL(iUidTestStatusPsy, this, KClient1Default, Logger());
+ iclient2 = CT_LbsClientRequestor::NewL(iUidTestStatusPsy, this, KClient2Default, Logger());
+ iclient3 = CT_LbsClientRequestor::NewL(iUidTestStatusPsy, this, KClient3Default, Logger());
+
+ // Make a request with client 2
+ INFO_PRINTF1(KRequestClient2);
+ iclient2->StartRequestL(usedefaultpsy);
+
+ // Make client3 listen for status events
+ iclient3->RequestModuleStatusEvent();
+
+ // Disable Psy 3
+ User::After(1000000); //A small delay
+ usedefaultpsy = TRUE; //Use default PSY
+ INFO_PRINTF1(KDisablePSY);
+ DisablePsyL(*idb, iUidTestStatusPsy);
+
+ // Client1 reads Module Status
+ // Client API
+ clientapistatus = iclient1->ReadModuleStatusClientApi(iUidTestStatusPsy);
+ bufclientapi.Format(KClientApi, clientapistatus);
+ INFO_PRINTF1(bufclientapi);
+
+ // Modules API
+ modulesapistatus = iclient1->ReadModuleStatusModulesApi(idb, iUidTestStatusPsy);
+ bufmodulesapi.Format(KModulesApi, modulesapistatus);
+ INFO_PRINTF1(bufmodulesapi);
+ // Compare received statuses
+ if ( !((modulesapistatus == 0) && (clientapistatus == TPositionModuleStatus::EDeviceDisabled)) )
+ {
+ iErrorDuringExecution = TRUE;
+ ERR_PRINTF1(KErrStatusMismatch);
+ }
+
+ iclient2->ClosePositioner();
+
+ delete iclient1;
+ iclient1 = NULL;
+ delete iclient2;
+ iclient2 = NULL;
+ delete iclient3;
+ iclient3 = NULL;
+
+ // Connect to EPos
+ User::LeaveIfError(iPosServer.Connect());
+
+ // Enable Psy
+ INFO_PRINTF1(KEnablePSY);
+ EnablePsyL(*idb, iUidTestStatusPsy);
+
+ // Open subsession to Status Psy that still is disabled!!!
+ _LIT(KInfoStatusPSY, "Calling OpenPositionerByName for Test Status PSY");
+ INFO_PRINTF1(KInfoStatusPSY);
+ TInt err = OpenPositionerByName(iUidTestStatusPsy);
+ User::After(100000); //A small delay
+
+ if (err != KErrNone)
+ {
+ _LIT(KErrorRequest, "OpenPositionerByName failed, errCode = %d");
+ TBuf<100> buf;
+ buf.Format(KErrorRequest, err);
+ LogErrorAndLeaveL(buf);
+ }
+
+ // Make a position request
+ _LIT(KService, "service");
+ TPositionInfo positionInfo = TPositionInfo();
+ _LIT(KPerformSyncRequest, "Calling PerformSyncRequest");
+ INFO_PRINTF1(KPerformSyncRequest);
+ err = PerformSyncRequest(KService, &positionInfo);
+
+ if (err != KErrNone)
+ {
+ _LIT(KErrorRequest, "The last request was not completed with KErrorNone, errCode = %d");
+ TBuf<100> buf;
+ buf.Format(KErrorRequest, err);
+ LogErrorAndLeaveL(buf);
+ }
+
+ //Close Positioner
+ ClosePositioner();
+
+ //Disconnect from Epos
+ Disconnect();
+
+ CleanupStack::PopAndDestroy(idb);
+
+ //Checking if any errors occured during execution
+ if (iErrorDuringExecution)
+ {
+ _LIT(KErrorAndLeave, "Error(s) occured during execution, closing test!");
+ LogErrorAndLeaveL(KErrorAndLeave);
+ }
+ }
+
+// ---------------------------------------------------------
+// CT_LbsClientPosTp213::EnablePsyL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CT_LbsClientPosTp213::EnablePsyL(
+ CPosModules& aDb,
+ TUid aPsy)
+ {
+ CPosModuleUpdate* moduleUpdate = CPosModuleUpdate::NewLC();
+ // Enable Psy
+ moduleUpdate->SetUpdateAvailability(ETrue);
+ aDb.UpdateModuleL(aPsy, *moduleUpdate);
+ CleanupStack::PopAndDestroy(moduleUpdate);
+ }
+
+// ---------------------------------------------------------
+// CT_LbsClientPosTp213::DisablePsyL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CT_LbsClientPosTp213::DisablePsyL(
+ CPosModules& aDb,
+ TUid aPsy)
+ {
+ CPosModuleUpdate* moduleUpdate = CPosModuleUpdate::NewLC();
+ // Disable Psy
+ moduleUpdate->SetUpdateAvailability(EFalse);
+ aDb.UpdateModuleL(aPsy, *moduleUpdate);
+ CleanupStack::PopAndDestroy(moduleUpdate);
+ }
+
+// ---------------------------------------------------------
+// CT_LbsClientPosTp213::RequestCompleteL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CT_LbsClientPosTp213::RequestCompleteL()
+ {
+ if (iclient2->CompletionCode() != KNoEvent)
+ {
+ _LIT(KClient2Compl, "Client 2 request completed with %d.");
+ TBuf<100> bufclient2comp;
+ bufclient2comp.Format(KClient2Compl, iclient2->CompletionCode());
+ INFO_PRINTF1(bufclient2comp);
+
+ if (iclient2->CompletionCode() != KErrCancel)
+ {
+ TBuf<80> errorMessage;
+ errorMessage.Format( KCanceledRequest, iclient2->CompletionCode() );
+ ERR_PRINTF1( errorMessage );
+ }
+
+ /*Testing if PSY is unloaded from memory. PSY created a temp-file that only should
+ exist during its lifespan. */
+ User::After(5000000);
+ RFs fileserver;
+ RFile file;
+ User::LeaveIfError(fileserver.Connect());
+ TInt err = file.Open(fileserver, KDummyFileName, EFileWrite);
+ if (err == KErrNone || err == KErrInUse)
+ {
+ ERR_PRINTF1(KFileNotDeleted);
+ }
+ file.Close();
+ fileserver.Close();
+
+ iclient2->ClosePositioner();
+ iclient2->ResetCompletionCode();
+ }
+
+ else if (iclient3->CompletionCode() != KNoEvent)
+ {
+ iclient3->ResetCompletionCode();
+ _LIT(KClient3Compl, "Client 3 request completed, ");
+ INFO_PRINTF1(KClient3Compl);
+
+ if (iNoFurtherEvents) //Client 3 received event but should NOT have!
+ {
+ iErrorDuringExecution = TRUE;
+ ERR_PRINTF1(KEventReceived);
+ }
+
+ //Read what event was received!
+ TInt eventReading = iclient3->ReadModuleStatusEvent();
+
+ if (eventReading != TPositionModuleStatus::EDeviceDisabled) //NO Disable Event!
+ {
+ _LIT(KClientStatusRead, "Event received by client not EDeviceDisabled, but %d.");
+ TBuf<100> bufstatusread;
+ bufstatusread.Format(KClientStatusRead, eventReading);
+ INFO_PRINTF1(bufstatusread);
+
+ //Make client3 listen for status events again!!
+ iclient3->ContinueRequesting();
+ }
+ else //A Disable Event!
+ {
+ _LIT(KClient3ComplDisabled, "Client 3 received EDeviceDisabled event!");
+ INFO_PRINTF1(KClient3ComplDisabled);
+
+ //Make client3 listen for status events again!!
+ iclient3->ContinueRequesting();
+
+ /*Wait 5 s for events before halting the scheduler.
+ No further events for client 3 should be received! */
+ ieventtimer->Start(5000000);
+ iNoFurtherEvents = TRUE;
+ //Start Timer
+ _LIT(KStartTiming, "Start Timer, 5 s.");
+ INFO_PRINTF1(KStartTiming);
+ }
+ }
+ else if (ieventtimer->CompletionCode() != KNoEvent) //Time-out
+ {
+ ieventtimer->ResetCompletionCode() ;
+
+ //Stop Scheduler
+ _LIT(KTimeOut, "Timer Stopped.");
+ INFO_PRINTF1(KTimeOut);
+ CActiveScheduler::Stop();
+ }
+ else
+ {
+ _LIT(KUnknownEvent, "Unknown request was completed!");
+ LogErrorAndLeaveL(KUnknownEvent);
+ }
+ }
+
+// End of File