lbs/lbsclient/src/ctlbsclientpostp254.cpp
branchSymbian2
changeset 1 8758140453c0
child 6 c108117318cb
equal deleted inserted replaced
0:e8c1ea2c6496 1:8758140453c0
       
     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 FILES
       
    19 #include "ctlbsclientpostp254.h"
       
    20 #include <f32file.h>
       
    21 #include <bautils.h>
       
    22 #include <LbsSatellite.h>
       
    23 
       
    24 // CONSTANTS
       
    25 _LIT(KLastPosition, "c:\\private\\101f97b2\\LastKnownPos.dat");
       
    26 
       
    27 
       
    28 // ================= MEMBER FUNCTIONS =======================
       
    29 
       
    30 // ---------------------------------------------------------
       
    31 // Constructor.
       
    32 // ---------------------------------------------------------
       
    33 CT_LbsClientPosTp254::CT_LbsClientPosTp254(CT_LbsServer& aParent): CT_LbsPortedStepBase(aParent)
       
    34 	{  
       
    35 	_LIT(KTestName, "TP254 - Get last known position");
       
    36 	SetTestStepName(KTestName); 
       
    37 	}
       
    38 
       
    39 // ---------------------------------------------------------
       
    40 // Destructor.
       
    41 // ---------------------------------------------------------
       
    42 CT_LbsClientPosTp254::~CT_LbsClientPosTp254()
       
    43 	{
       
    44 	}
       
    45 
       
    46 // ---------------------------------------------------------
       
    47 // CT_LbsClientPosTp254::CloseTest
       
    48 //
       
    49 // (other items were commented in a header).
       
    50 // ---------------------------------------------------------
       
    51 //
       
    52 void CT_LbsClientPosTp254::CloseTest()
       
    53     {
       
    54     }
       
    55 
       
    56 // ---------------------------------------------------------
       
    57 // CT_LbsClientPosTp254::StartL
       
    58 //
       
    59 // (other items were commented in a header).
       
    60 // ---------------------------------------------------------
       
    61 //
       
    62 void CT_LbsClientPosTp254::StartL()
       
    63     {
       
    64     User::After(2000000);
       
    65     DeleteFileL(KLastPosition);
       
    66 	SetupPsyL(iUidTestPsy11);
       
    67 
       
    68     RPositionServer	posServer;
       
    69     CleanupClosePushL(posServer);
       
    70     RPositioner positioner;
       
    71     CleanupClosePushL(positioner);
       
    72     TPositionInfo positionInfo = TPositionInfo();
       
    73     TPositionInfo positionInfoLast = TPositionInfo();
       
    74 
       
    75 	_LIT(KConnectErr, "Error when connecing to EPos server,  %d");
       
    76 	TInt err = posServer.Connect();
       
    77 	AssertTrueL(err == KErrNone, KConnectErr, err);
       
    78 
       
    79 	_LIT(KOpenErr, "Error when opening positioner,  %d");
       
    80     err = positioner.Open(posServer,iUidTestPsy11 ); //use defalut psy
       
    81 	AssertTrueL(err == KErrNone, KOpenErr, err);
       
    82 
       
    83 
       
    84     _LIT(KService ,"Service");
       
    85 	positioner.SetRequestor(CRequestor::ERequestorService,
       
    86 							 CRequestor::EFormatApplication, KService);
       
    87 
       
    88     TRequestStatus status;
       
    89     status = KRequestPending;
       
    90 
       
    91     positionInfoLast.SetUpdateType(EPositionUpdateUnknown); // just to make a difference
       
    92     
       
    93     positioner.GetLastKnownPosition(positionInfoLast, status);
       
    94     User::WaitForRequest(status);
       
    95     err = status.Int();
       
    96     _LIT(KErrorRequest, "Get last known position did not return with KErrUnKnown %d");
       
    97     AssertTrueL(err == KErrUnknown, KErrorRequest, err);
       
    98 
       
    99     //Verification of TR SBUY-5WHGS3 i.e even if the psy has a really fast
       
   100     //responce time a last known position should be saved.
       
   101     status = KRequestPending;
       
   102 
       
   103     positioner.NotifyPositionUpdate(positionInfo, status);
       
   104     User::WaitForRequest(status);
       
   105     err = status.Int();
       
   106     _LIT(KErrPosition, "Not possible to make a request");
       
   107     AssertTrueL(err == KErrNone, KErrPosition, err);
       
   108 
       
   109     positioner.GetLastKnownPosition(positionInfoLast, status);
       
   110     User::WaitForRequest(status);
       
   111     err = status.Int();
       
   112     _LIT(KErrorFast, "Get last known position after fast psy did not work %d");
       
   113     AssertTrueL(err == KErrNone, KErrorFast, err);
       
   114 
       
   115     positioner.Close();
       
   116     posServer.Close();
       
   117 
       
   118     const TTimeIntervalMicroSeconds32 KPosWaitServerShutDown( 6000000 );
       
   119     User::After(KPosWaitServerShutDown);
       
   120     DeleteFileL(KLastPosition);
       
   121     SetupPsyL(iUidTestPsyMaxAge);
       
   122 	err = posServer.Connect();
       
   123 	AssertTrueL(err == KErrNone, KConnectErr, err);
       
   124     err = positioner.Open(posServer); //use defalut psy
       
   125 	AssertTrueL(err == KErrNone, KOpenErr, err);
       
   126 	positioner.SetRequestor(CRequestor::ERequestorService,
       
   127 							 CRequestor::EFormatApplication, KService);
       
   128 
       
   129     
       
   130     status = KRequestPending;
       
   131 
       
   132     positioner.NotifyPositionUpdate(positionInfo, status);
       
   133     User::WaitForRequest(status);
       
   134     err = status.Int();
       
   135     AssertTrueL(err == KErrNone, KErrPosition, err);
       
   136 
       
   137     //Now there should exist a last known position
       
   138     positioner.GetLastKnownPosition(positionInfoLast, status);
       
   139     User::WaitForRequest(status);
       
   140     err = status.Int();
       
   141     _LIT(KErrorRequestLast, "Get last known position did not return with KErrNone %d");
       
   142     AssertTrueL(err == KErrNone, KErrorRequestLast, err);
       
   143 
       
   144     CheckPositionInfoL(positionInfo, positionInfoLast);
       
   145 
       
   146 	TPositionSatelliteInfo satelliteInfoLast = TPositionSatelliteInfo();
       
   147     positioner.GetLastKnownPosition(satelliteInfoLast, status);
       
   148     User::WaitForRequest(status);
       
   149     err = status.Int();
       
   150     
       
   151     AssertTrueL(err == KErrArgument, KErrorRequest, err);
       
   152 
       
   153     positioner.NotifyPositionUpdate(positionInfo, status);
       
   154     User::WaitForRequest(status);
       
   155     err = status.Int();
       
   156     AssertTrueL(err == KErrNone, KErrPosition, err);
       
   157 
       
   158     positioner.GetLastKnownPosition(positionInfoLast, status);
       
   159     User::WaitForRequest(status);
       
   160     err = status.Int();
       
   161     AssertTrueL(err == KErrNone, KErrorRequest, err);
       
   162 
       
   163     CheckPositionInfoL(positionInfo, positionInfoLast);
       
   164 
       
   165     positioner.Close();
       
   166     posServer.Close();
       
   167 
       
   168     //connect again
       
   169 	err = posServer.Connect();
       
   170 	AssertTrueL(err == KErrNone, KConnectErr, err);
       
   171     err = positioner.Open(posServer); //use defalut psy
       
   172 	AssertTrueL(err == KErrNone, KOpenErr, err);
       
   173 	positioner.SetRequestor(CRequestor::ERequestorService,
       
   174 							 CRequestor::EFormatApplication, KService);
       
   175 
       
   176 
       
   177     TPositionInfo positionInfoLast1 = TPositionInfo();
       
   178     positioner.GetLastKnownPosition(positionInfoLast1, status);
       
   179     User::WaitForRequest(status);
       
   180     err = status.Int();
       
   181     AssertTrueL(err == KErrNone, KErrorRequest, err);    
       
   182     CheckPositionInfoL(positionInfoLast, positionInfoLast1);
       
   183 
       
   184     positioner.Close();
       
   185     posServer.Close();
       
   186 	User::After(6000000);
       
   187 
       
   188     //The position is written to persistant storeage since TEF is shutdown.
       
   189     if (!FileExistsL(KLastPosition))
       
   190         {
       
   191         _LIT(KErrStore, "The dat file not created");
       
   192         LogErrorAndLeaveL(KErrStore);
       
   193         }
       
   194 
       
   195     //Connect again
       
   196 	err = posServer.Connect();
       
   197 	AssertTrueL(err == KErrNone, KConnectErr, err);
       
   198     err = positioner.Open(posServer); //use defalut psy
       
   199 	AssertTrueL(err == KErrNone, KOpenErr, err);
       
   200 	positioner.SetRequestor(CRequestor::ERequestorService,
       
   201 							 CRequestor::EFormatApplication, KService);
       
   202 
       
   203 
       
   204     TPositionInfo positionInfoLast2 = TPositionInfo();
       
   205     positioner.GetLastKnownPosition(positionInfoLast2, status);
       
   206     User::WaitForRequest(status);
       
   207     err = status.Int();
       
   208     AssertTrueL(err == KErrNone, KErrorRequest, err);    
       
   209     CheckPositionInfoL(positionInfoLast, positionInfoLast2);
       
   210 
       
   211     RPositionServer	posServer1;
       
   212     CleanupClosePushL(posServer1);
       
   213     RPositioner positioner1;
       
   214     CleanupClosePushL(positioner1);
       
   215     SetupPsyL(iUidMultiPsy);
       
   216 	_LIT(KConnect1Err, "Error when connecing to EPos server,  %d");
       
   217 	err = posServer1.Connect();
       
   218 	AssertTrueL(err == KErrNone, KConnect1Err, err);
       
   219 
       
   220 	_LIT(KOpen1Err, "Error when opening positioner,  %d");
       
   221     err = positioner1.Open(posServer); //use defalut psy
       
   222 	AssertTrueL(err == KErrNone, KOpen1Err, err);
       
   223 	positioner1.SetRequestor(CRequestor::ERequestorService,
       
   224 							 CRequestor::EFormatApplication, KService);
       
   225 
       
   226     positioner1.NotifyPositionUpdate(positionInfo, status);
       
   227     User::WaitForRequest(status);
       
   228     err = status.Int();
       
   229     AssertTrueL(err == KErrNone, KErrPosition, err);
       
   230 
       
   231     positioner.GetLastKnownPosition(positionInfoLast, status);
       
   232     User::WaitForRequest(status);
       
   233     err = status.Int();
       
   234     AssertTrueL(err == KErrNone, KErrorRequest, err);
       
   235     CheckPositionInfoL(positionInfo, positionInfoLast);
       
   236 
       
   237     //just to make sure that positioner1 also gets the correct position
       
   238     positioner1.GetLastKnownPosition(positionInfoLast, status);
       
   239     User::WaitForRequest(status);
       
   240     err = status.Int();
       
   241     AssertTrueL(err == KErrNone, KErrorRequest, err);
       
   242     CheckPositionInfoL(positionInfo, positionInfoLast);
       
   243 
       
   244     SetupPsyL(iUidTestPsyPartialUpdate);
       
   245     User::After(1000000);
       
   246     TPositionInfo positionInfoPartial = TPositionInfo();
       
   247     TPositionUpdateOptions updateOption = TPositionUpdateOptions();
       
   248     updateOption.SetAcceptPartialUpdates(ETrue);
       
   249     positioner1.SetUpdateOptions(updateOption);
       
   250 
       
   251     positioner1.NotifyPositionUpdate(positionInfoPartial, status);
       
   252     User::WaitForRequest(status);
       
   253     err = status.Int();
       
   254     _LIT(KErrPositionPartial, "no partial position returned %d");
       
   255     AssertTrueL(err == KPositionPartialUpdate, KErrPositionPartial, err);
       
   256 
       
   257     positioner.GetLastKnownPosition(positionInfoLast, status);
       
   258     User::WaitForRequest(status);
       
   259     err = status.Int();
       
   260     AssertTrueL(err == KErrNone, KErrorRequest, err);
       
   261     
       
   262     TPosition pos;
       
   263     TPosition lastPos;
       
   264 	positionInfoPartial.GetPosition(pos);
       
   265     positionInfoLast.GetPosition(lastPos);
       
   266     
       
   267     if (pos.Time() == lastPos.Time())
       
   268 		{
       
   269 		_LIT(KErrPosition, "Partial position was cached");
       
   270 		LogErrorAndLeaveL(KErrPosition);
       
   271 		}
       
   272 
       
   273     CleanupStack::PopAndDestroy(&positioner1);
       
   274     CleanupStack::PopAndDestroy(&posServer1);
       
   275     CleanupStack::PopAndDestroy(&positioner);
       
   276     CleanupStack::PopAndDestroy(&posServer);
       
   277 
       
   278     }
       
   279 
       
   280 // ---------------------------------------------------------
       
   281 // CT_LbsClientPosTp254::DeleteFileL
       
   282 //
       
   283 // (other items were commented in a header).
       
   284 // ---------------------------------------------------------
       
   285 //
       
   286 void CT_LbsClientPosTp254::DeleteFileL(const TDesC& aFile)
       
   287     {
       
   288     RFs fs;
       
   289     TInt err = fs.Connect();
       
   290 
       
   291     err = fs.Delete(aFile);
       
   292     fs.Close();
       
   293     if (err == KErrNone)
       
   294         {
       
   295         _LIT(KDebugText, "TP254: The specified file deleted");
       
   296         INFO_PRINTF1(KDebugText);
       
   297         }
       
   298     else
       
   299         {
       
   300         if (err == KErrInUse)
       
   301             {
       
   302             _LIT(KErrText, "TP254: The specified file could not be deleted it is already in use, errorcode %d");
       
   303             INFO_PRINTF1(aFile);
       
   304             TBuf<100> buf;
       
   305             buf.Format(KErrText, err);
       
   306             AssertTrueL(err==0, KErrText, err);
       
   307             }
       
   308         else if (err == KErrNotFound)
       
   309             {
       
   310             _LIT(KDebugText, "TP254: The specified file could not be found ,errorcode %d");
       
   311             TBuf<100> buf;
       
   312             buf.Format(KDebugText, err);
       
   313             INFO_PRINTF1(buf);
       
   314             }
       
   315         else
       
   316             {
       
   317             _LIT(KErrText, "TP254: The specified file could not be deleted, errorcode %d");
       
   318             TBuf<100> buf;
       
   319             buf.Format(KErrText, err);
       
   320             AssertTrueL(err==0, KErrText, err);
       
   321             }
       
   322         }
       
   323     }
       
   324 
       
   325 // ---------------------------------------------------------
       
   326 // CT_LbsClientPosTp254::FileExistsL
       
   327 //
       
   328 // (other items were commented in a header).
       
   329 // ---------------------------------------------------------
       
   330 //
       
   331 TBool CT_LbsClientPosTp254::FileExistsL(const TDesC& aFile)
       
   332     {
       
   333     RFs fs;
       
   334     TInt err = fs.Connect();
       
   335     TBool exists = EFalse;
       
   336     
       
   337     if(KErrNone==err)
       
   338     	{
       
   339     	exists = BaflUtils::FileExists(fs, aFile);
       
   340     	if (exists)
       
   341     		{
       
   342     		_LIT(KErrText, "TP254: The specified file does not exist");
       
   343     		INFO_PRINTF1(KErrText);
       
   344     		}
       
   345     	else
       
   346     		{
       
   347     		_LIT(KErrText, "TP254: The specified file exists");
       
   348     		INFO_PRINTF1(KErrText);
       
   349     		}
       
   350     	}
       
   351     
       
   352     fs.Close();
       
   353     return exists;
       
   354     }
       
   355 
       
   356 void CT_LbsClientPosTp254::CheckPositionInfoL(TPositionInfo& aInfo, TPositionInfo& aLastInfo)
       
   357 	{
       
   358     if (aInfo.UpdateType() != aLastInfo.UpdateType())
       
   359         {
       
   360         _LIT(KErrUpdateType, "Update type not stored correctly");
       
   361         LogErrorAndLeaveL(KErrUpdateType);
       
   362         }
       
   363     if (aLastInfo.ModuleId().iUid != 0)
       
   364 		{
       
   365 		_LIT(KIncorrectPsyError,
       
   366            "Uid not reseted");
       
   367 		LogErrorAndLeaveL(KIncorrectPsyError);
       
   368 		}
       
   369 	TPosition pos;
       
   370     TPosition lastPos;
       
   371 	aInfo.GetPosition(pos);
       
   372     aLastInfo.GetPosition(lastPos);
       
   373 	CheckPositionL(pos, lastPos);
       
   374 	}
       
   375 
       
   376 void CT_LbsClientPosTp254::CheckPositionL(TPosition& aPos, TPosition& aLastPos)
       
   377 	{
       
   378 	if (aPos.Time() != aLastPos.Time() ||
       
   379 		aPos.HorizontalAccuracy() != aLastPos.HorizontalAccuracy() ||
       
   380 		aPos.VerticalAccuracy() != aLastPos.VerticalAccuracy() ||
       
   381 		aPos.Latitude() != aLastPos.Latitude() ||
       
   382 		aPos.Longitude() != aLastPos.Longitude() ||
       
   383 		aPos.Altitude() != aLastPos.Altitude())
       
   384 		{
       
   385 		_LIT(KErrPosition, "Wrong position returned");
       
   386 		LogErrorAndLeaveL(KErrPosition);
       
   387 		}
       
   388 	}
       
   389 
       
   390 // End of File