common/tools/ats/smoketest/lbs/lbsclient/lbsexeclient/src/ctlbsexeclient.cpp
changeset 748 e13acd883fbe
child 872 17498133d9ad
equal deleted inserted replaced
747:76f9aaeefbab 748:e13acd883fbe
       
     1 // Copyright (c) 2001-2009 Nokia Corporation and/or its subsidiary(-ies).
       
     2 // All rights reserved.
       
     3 // This component and the accompanying materials are made available
       
     4 // under the terms of the License "Symbian Foundation License v1.0"
       
     5 // which accompanies this distribution, and is available
       
     6 // at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
       
     7 //
       
     8 // Initial Contributors:
       
     9 // Nokia Corporation - initial contribution.
       
    10 //
       
    11 // Contributors:
       
    12 //
       
    13 // Description:
       
    14 //
       
    15 
       
    16 
       
    17 
       
    18 #include <e32base.h>
       
    19 #include <f32file.h>
       
    20 #include <LbsPositionInfo.h>
       
    21 #include <Lbs.h>
       
    22 #include <LbsCommon.h>
       
    23 #include <LbsRequestor.h>
       
    24 #include <EPos_CPosModules.h>
       
    25 #include <EPos_CPosModuleUpdate.h>
       
    26 #include <EPos_CPosModuleIdList.h>
       
    27 
       
    28 TInt DoTestL();
       
    29 
       
    30 TInt TestMainL()
       
    31     {
       
    32      // Create and install the active scheduler 
       
    33     CActiveScheduler* exampleScheduler=new (ELeave) CActiveScheduler; 
       
    34     CleanupStack::PushL(exampleScheduler); 
       
    35     CActiveScheduler::Install(exampleScheduler); 
       
    36     // Call function
       
    37     TInt result = DoTestL();  
       
    38     CleanupStack::PopAndDestroy(exampleScheduler);
       
    39     return result;
       
    40     }
       
    41 
       
    42 void TraceL(const TDesC& aMsg, RFile& aFile) 
       
    43     {
       
    44     const TInt KBufSize = 200;
       
    45     TBuf8<KBufSize> tmp;
       
    46     tmp.Copy(aMsg);
       
    47     _LIT(KEnd,";\r\n");
       
    48     tmp.Append(KEnd);
       
    49     aFile.Write(tmp);
       
    50     }
       
    51 
       
    52 /**
       
    53 * Setup PSY
       
    54 */
       
    55 void SetupPsyL(const TUid aPsyUid)
       
    56     {
       
    57     CPosModules* db = CPosModules::OpenL();
       
    58     CleanupStack::PushL(db);
       
    59 
       
    60     CPosModuleUpdate* enable = CPosModuleUpdate::NewLC();
       
    61     CPosModuleUpdate* disable = CPosModuleUpdate::NewLC();
       
    62 
       
    63     disable->SetUpdateAvailability(EFalse);
       
    64     enable->SetUpdateAvailability(ETrue);
       
    65 
       
    66     CPosModuleIdList* prioList = db->ModuleIdListLC();
       
    67 
       
    68     for (TInt i = 0 ; i < prioList->Count(); i++)
       
    69         {
       
    70         if ((*prioList)[i] != aPsyUid)
       
    71             {
       
    72             // Disable all PSYs except one given as parameter
       
    73             db->UpdateModuleL((*prioList)[i], *disable);
       
    74             }
       
    75         else
       
    76             {
       
    77             // Enable the PSY that came as an in parameter
       
    78             db->UpdateModuleL((*prioList)[i], *enable);
       
    79             }
       
    80         }
       
    81 
       
    82     CleanupStack::PopAndDestroy(prioList);
       
    83     CleanupStack::PopAndDestroy(disable);
       
    84     CleanupStack::PopAndDestroy(enable);
       
    85     CleanupStack::PopAndDestroy(db);
       
    86     }
       
    87 
       
    88 /**
       
    89 * Method used to generate a file name for trace.
       
    90 * If a trace file exist an index number i counted
       
    91 * one step until a trace file can be created.
       
    92 * Maximun number of exe client are currently hard
       
    93 * coded to 10;
       
    94 */
       
    95 TBuf<40> GenerateFileNameForTraceL()
       
    96     {
       
    97     _LIT(KFileTrace, "c:\\logs\\execlientresult%d.txt");
       
    98     RFs fileserver;
       
    99     RFile file;
       
   100     User::LeaveIfError(fileserver.Connect());
       
   101     TBuf<40> ff;
       
   102     ff.Append(KFileTrace);
       
   103  
       
   104     for (TInt i = 1; i<10;i++) 
       
   105         {
       
   106         ff.Format(KFileTrace,i);
       
   107         TInt err = file.Open(fileserver,ff, EFileWrite);
       
   108         if (err == KErrNotFound) 
       
   109             {
       
   110             User::LeaveIfError(file.Create(fileserver,ff, EFileWrite));
       
   111             break;
       
   112             }
       
   113         }
       
   114     file.Close();
       
   115     fileserver.Close();
       
   116     return ff;
       
   117 }
       
   118 
       
   119 /**
       
   120 * Error checking and output error to Trace File.
       
   121 */
       
   122 void AssertTrueL(TBool aCondition, const TDesC& aErrorMsg, TInt aErrorCode, RFile& aFile)
       
   123   {
       
   124   if (!aCondition)
       
   125 		{
       
   126 		TBuf<100> buf;
       
   127 		buf.Format(aErrorMsg, aErrorCode);
       
   128 		TraceL(buf, aFile);
       
   129         //User::Leave(aErrorCode);
       
   130 		}
       
   131   }
       
   132 
       
   133 /**
       
   134 * Performes the test by connecting to MLFW and makes 50 Location request
       
   135 */
       
   136 TInt DoTestL()
       
   137     {
       
   138     TBuf<40> traceFile = GenerateFileNameForTraceL();
       
   139 
       
   140     RFs fileserver;
       
   141     RFile file;
       
   142     User::LeaveIfError(fileserver.Connect());
       
   143     CleanupClosePushL(fileserver);
       
   144     User::LeaveIfError(file.Open(fileserver, traceFile, EFileWrite));
       
   145     CleanupClosePushL(file);
       
   146     _LIT(KClientStarted, "Client Started");
       
   147     TraceL(KClientStarted, file);
       
   148 
       
   149     const TInt32 KUidMultiPsy = 0x01010176;
       
   150     TUid uidMultiPsy;
       
   151     uidMultiPsy.iUid = KUidMultiPsy;      
       
   152 	SetupPsyL(uidMultiPsy);
       
   153 
       
   154     _LIT(KMultiPsySetup, "MultiPsy set up");
       
   155     TraceL(KMultiPsySetup, file);
       
   156 
       
   157 	TInt numberOfRuns = 50;
       
   158     
       
   159     RPositionServer	posServer;
       
   160     CleanupClosePushL(posServer);
       
   161     RPositioner positioner;
       
   162     CleanupClosePushL(positioner);
       
   163     TPositionInfo positionInfo = TPositionInfo();
       
   164 
       
   165 	_LIT(KConnectErr, "ERROR: Error when connecing to EPos server,  %d");
       
   166 	TInt err = posServer.Connect();
       
   167 	AssertTrueL(err == KErrNone, KConnectErr, err, file);
       
   168 
       
   169 	_LIT(KOpenErr, "ERROR: Error when opening positioner,  %d");
       
   170 	err = positioner.Open(posServer, uidMultiPsy);
       
   171 	AssertTrueL(err == KErrNone, KOpenErr, err, file);
       
   172 
       
   173     _LIT(KService ,"Service");
       
   174 	err = positioner.SetRequestor(CRequestor::ERequestorService,
       
   175 							 CRequestor::EFormatApplication, KService);
       
   176     _LIT(KRequestor, "ERROR: Not possible to set requestor");
       
   177     AssertTrueL(err == KErrNone, KRequestor, err, file);
       
   178     
       
   179     TTime now, startTime;
       
   180     TTimeIntervalMicroSeconds requestTime;
       
   181     TRequestStatus status;
       
   182     TInt64 reqTime;
       
   183     TCoordinate corr(0,0,0);
       
   184     TLocality loca(corr,0);
       
   185     TPosition pos(loca, TTime(0));
       
   186     TBool success = ETrue;
       
   187     _LIT(KStartingRequests, "Starting requests");
       
   188     TraceL(KStartingRequests, file);
       
   189 
       
   190     for (TInt i = 0; i < numberOfRuns; i++)
       
   191         {
       
   192         startTime.UniversalTime();
       
   193         positionInfo.SetPosition(pos);
       
   194         positioner.NotifyPositionUpdate(positionInfo, status);
       
   195         User::WaitForRequest(status);
       
   196         err = status.Int();
       
   197         if (err != KErrNone)
       
   198             {
       
   199             success=EFalse;
       
   200             }
       
   201         now.UniversalTime();
       
   202         requestTime = now.MicroSecondsFrom(startTime);
       
   203         _LIT(KError, "Request time, %d µs. Error code from Notify = %d");
       
   204         TBuf<100> buf;
       
   205         reqTime = requestTime.Int64();
       
   206         buf.Format(KError, reqTime, err);
       
   207         TraceL(buf, file);
       
   208         TPosition result;
       
   209         positionInfo.GetPosition(result);
       
   210         // Sanity check
       
   211         if (result.Latitude() == pos.Latitude() ||
       
   212 		    result.Longitude() == pos.Longitude() ||
       
   213 		    result.Altitude() == pos.Altitude())
       
   214             {
       
   215              success = EFalse;
       
   216              _LIT(KErrorPositon, "ERROR:: The postion was not updated");
       
   217              TraceL(KErrorPositon, file);
       
   218             }
       
   219         }
       
   220     
       
   221     CleanupStack::PopAndDestroy(&positioner);
       
   222     CleanupStack::PopAndDestroy(&posServer);
       
   223 
       
   224     if (success)
       
   225         {
       
   226         _LIT(KOk, "SUCCESS");
       
   227         TraceL(KOk, file);
       
   228         }
       
   229     else
       
   230         {
       
   231         _LIT(KErr, "FAILED");
       
   232         TraceL(KErr, file);
       
   233         }
       
   234 
       
   235     CleanupStack::PopAndDestroy(&file);
       
   236     CleanupStack::PopAndDestroy(&fileserver);
       
   237     
       
   238     return (success) ? 0 : 1;
       
   239     }
       
   240 
       
   241 // Cleanup stack harness
       
   242 GLDEF_C TInt E32Main()
       
   243     {
       
   244     __UHEAP_MARK;
       
   245     CTrapCleanup* cleanupStack = CTrapCleanup::New();
       
   246     TInt result = 1;
       
   247     TRAPD(error, result = TestMainL());
       
   248     _LIT(KLbsExeClient, "CT Lbs Exe Client");
       
   249     __ASSERT_ALWAYS(!error, User::Panic(KLbsExeClient, error));
       
   250     delete cleanupStack;
       
   251     __UHEAP_MARKEND;
       
   252     return result;
       
   253     }
       
   254