testexecfw/stf/stffw/testengine/src/TestEngineServer.cpp
changeset 2 8bb370ba6d1d
equal deleted inserted replaced
1:bbd31066657e 2:8bb370ba6d1d
       
     1 /*
       
     2 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 * 
       
    14 * Description: This module contains implementation of 
       
    15 * CTestEngineServer class member functions.
       
    16 *
       
    17 */
       
    18 
       
    19 // INCLUDE FILES
       
    20 #include "TestEngineServer.h"
       
    21 #include "TestEngineClientServer.h"
       
    22 #include "Logging.h"
       
    23 #include "TestEngine.h"
       
    24 #include "TestReport.h"
       
    25 
       
    26 #define LOGGER iLogger
       
    27 
       
    28 const TInt KTestEngineServerShutdownDelay = 5000000; // 10s
       
    29 
       
    30 /*
       
    31 -------------------------------------------------------------------------------
       
    32 
       
    33     Class: CTestEngineServer
       
    34 
       
    35     Method: CTestEngineServer
       
    36 
       
    37     Description: Default constructor
       
    38 
       
    39     C++ default constructor can NOT contain any code, that
       
    40     might leave.
       
    41 
       
    42     Parameters: None
       
    43 
       
    44     Return Values: None
       
    45 
       
    46     Errors/Exceptions: None
       
    47 
       
    48     Status: Approved
       
    49 
       
    50 -------------------------------------------------------------------------------
       
    51 */
       
    52 CTestEngineServer::CTestEngineServer() :
       
    53     CServer2( CTestEngineServer::ETestEngineServerPriority ),
       
    54     iSessionCount( 0 )
       
    55     {
       
    56 
       
    57     }
       
    58 
       
    59 /*
       
    60 -------------------------------------------------------------------------------
       
    61 
       
    62     Class: CTestEngineServer
       
    63 
       
    64     Method: ConstructL
       
    65 
       
    66     Description: Symbian OS second phase constructor
       
    67 
       
    68     Symbian OS default constructor can leave.
       
    69 
       
    70     Parameters: None
       
    71 
       
    72     Return Values: None
       
    73 
       
    74     Errors/Exceptions: Leaves if CObjectConIx::NewL leaves
       
    75                        Leaves if CStifLogger::NewL leaves
       
    76                        Leaves if StartL leaves
       
    77 
       
    78     Status: Approved
       
    79 
       
    80 -------------------------------------------------------------------------------
       
    81 */
       
    82 void CTestEngineServer::ConstructL()
       
    83     {
       
    84     // Create container
       
    85     iContainerIndex = CObjectConIx::NewL();
       
    86 
       
    87     InitLoggerSettings();
       
    88     InitLoggerL();
       
    89 
       
    90     iAutoShutdownTimer = CTestEngineServerAutoShutdown::NewL();
       
    91     iAutoShutdownTimer->Start();
       
    92     
       
    93     __TRACE(KVerbose, (_L( "CTestEngineServer::ConstructL: Server Created" ) ) );
       
    94     }
       
    95 
       
    96 void CTestEngineServer::InitLoggerSettings()
       
    97     {
       
    98     // Initializations to indicator is setting in use
       
    99     iLoggerSettings.iIsDefined.iCreateLogDir = EFalse;
       
   100     iLoggerSettings.iIsDefined.iPath = EFalse;
       
   101     iLoggerSettings.iIsDefined.iHwPath = EFalse;
       
   102     iLoggerSettings.iIsDefined.iFormat = EFalse;
       
   103     iLoggerSettings.iIsDefined.iHwFormat = EFalse;
       
   104     iLoggerSettings.iIsDefined.iOutput = EFalse;
       
   105     iLoggerSettings.iIsDefined.iHwOutput = EFalse;
       
   106     iLoggerSettings.iIsDefined.iOverwrite = EFalse;
       
   107     iLoggerSettings.iIsDefined.iLineBreak = EFalse;
       
   108     iLoggerSettings.iIsDefined.iTimeStamp = EFalse;
       
   109     iLoggerSettings.iIsDefined.iEventRanking = EFalse;
       
   110     iLoggerSettings.iIsDefined.iThreadId = EFalse;    
       
   111     }
       
   112 
       
   113 void CTestEngineServer::InitLoggerL()
       
   114     {
       
   115     // Create logger, in Wins use HTML in HW default logger
       
   116     TLoggerSettings loggerSettings;
       
   117 
       
   118     // Directory must create by hand if test engine log wanted
       
   119     loggerSettings.iCreateLogDirectories = EFalse;
       
   120 
       
   121     loggerSettings.iOverwrite = ETrue;
       
   122     loggerSettings.iTimeStamp = ETrue;
       
   123     loggerSettings.iLineBreak = ETrue;
       
   124     loggerSettings.iEventRanking = EFalse;
       
   125     loggerSettings.iThreadId = EFalse;
       
   126     loggerSettings.iHardwareFormat = CStifLogger::ETxt;
       
   127 #ifndef FORCE_STIF_INTERNAL_LOGGING_TO_RDEBUG
       
   128     loggerSettings.iEmulatorFormat = CStifLogger::EHtml;
       
   129     loggerSettings.iEmulatorOutput = CStifLogger::EFile;
       
   130     loggerSettings.iHardwareOutput = CStifLogger::EFile;
       
   131 #else
       
   132     RDebug::Print( _L( "STIF Test Engine logging forced to RDebug" ) );
       
   133     loggerSettings.iEmulatorFormat = CStifLogger::ETxt;
       
   134     loggerSettings.iEmulatorOutput = CStifLogger::ERDebug;
       
   135     loggerSettings.iHardwareOutput = CStifLogger::ERDebug;
       
   136 #endif
       
   137     loggerSettings.iUnicode = EFalse;
       
   138     loggerSettings.iAddTestCaseTitle = EFalse;
       
   139 
       
   140     iLogger = CStifLogger::NewL( _L( "C:\\logs\\testframework\\testengine\\"),
       
   141                                     _L( "testengine" ),
       
   142                                     loggerSettings );    
       
   143     }
       
   144 
       
   145 /*
       
   146 -------------------------------------------------------------------------------
       
   147 
       
   148     Class: CTestEngineServer
       
   149 
       
   150     Method: NewL
       
   151 
       
   152     Description: Two-phased constructor.
       
   153 
       
   154     Parameters: None
       
   155 
       
   156     Return Values: CTestEngineServer* : pointer to CTestEngineServer object
       
   157 
       
   158     Errors/Exceptions: Leaves if construction of CBufferArray fails
       
   159 
       
   160     Status: Approved
       
   161 
       
   162 -------------------------------------------------------------------------------
       
   163 */
       
   164 CTestEngineServer* CTestEngineServer::NewL()
       
   165     {
       
   166     CTestEngineServer* self = new ( ELeave ) CTestEngineServer();
       
   167     CleanupStack::PushL( self );      
       
   168     self->ConstructL();
       
   169     CleanupStack::Pop();
       
   170 
       
   171     return self;
       
   172 
       
   173     }
       
   174 
       
   175 /*
       
   176 -------------------------------------------------------------------------------
       
   177 
       
   178     Class: CTestEngineServer
       
   179 
       
   180     Method: ~CTestEngineServer
       
   181 
       
   182     Description: Destructor
       
   183 
       
   184     Parameters: None
       
   185 
       
   186     Return Values: None
       
   187 
       
   188     Errors/Exceptions: None
       
   189 
       
   190     Status: Approved
       
   191 
       
   192 -------------------------------------------------------------------------------
       
   193 */
       
   194 CTestEngineServer::~CTestEngineServer()
       
   195     {
       
   196     delete iAutoShutdownTimer;
       
   197     
       
   198     delete iContainerIndex; 
       
   199 
       
   200     __TRACE(KAlways, ( _L( "---------------- Log Ended ----------------" ) ) );
       
   201     delete iLogger;
       
   202     }
       
   203 
       
   204 /*
       
   205 -------------------------------------------------------------------------------
       
   206 
       
   207     Class: CTestEngineServer
       
   208 
       
   209     Method: NewContainerL
       
   210 
       
   211     Description: Create new container
       
   212 
       
   213     Parameters: None
       
   214 
       
   215     Return Values: None
       
   216 
       
   217     Errors/Exceptions: Leaves if called CreateL method leaves
       
   218 
       
   219     Status: Approved
       
   220 
       
   221 -------------------------------------------------------------------------------
       
   222 */
       
   223 CObjectCon* CTestEngineServer::NewContainerL()
       
   224     {
       
   225     CObjectCon* container = iContainerIndex->CreateL();
       
   226     
       
   227     if ( iSessionCount == 0 )
       
   228         {
       
   229         iAutoShutdownTimer->Cancel();
       
   230         }
       
   231     iSessionCount++;
       
   232 
       
   233     return container;
       
   234     }
       
   235 
       
   236 /*
       
   237 -------------------------------------------------------------------------------
       
   238 
       
   239     Class: CTestEngineServer
       
   240 
       
   241     Method: DeleteContainer
       
   242 
       
   243     Description: Deletes a container
       
   244 
       
   245     Parameters: CObjectCon* 
       
   246 
       
   247     Return Values: None
       
   248 
       
   249     Errors/Exceptions: None
       
   250 
       
   251     Status: Approved
       
   252 
       
   253 -------------------------------------------------------------------------------
       
   254 */
       
   255 void CTestEngineServer::DeleteContainer( CObjectCon* aContainer )
       
   256     {
       
   257     iContainerIndex->Remove( aContainer );
       
   258 
       
   259     }
       
   260 
       
   261 /*
       
   262 -------------------------------------------------------------------------------
       
   263 
       
   264     Class: CTestEngineServer
       
   265 
       
   266     Method: SessionClosed
       
   267 
       
   268     Description: Inform Server that session is closed.
       
   269 
       
   270     Parameters: None
       
   271 
       
   272     Return Values: None
       
   273 
       
   274     Errors/Exceptions: None
       
   275 
       
   276     Status: Approved
       
   277 
       
   278 -------------------------------------------------------------------------------
       
   279 */
       
   280 void CTestEngineServer::SessionClosed()
       
   281     {
       
   282     // Decrease session count
       
   283     iSessionCount--;
       
   284 
       
   285     // Check if last session is closed
       
   286     if ( iSessionCount <= 0 )
       
   287         {
       
   288         // Stop the active scheduler
       
   289         // Execution will continue in ThreadFunction()
       
   290         iAutoShutdownTimer->Start();
       
   291         
       
   292         RSettingServer settingServer;
       
   293         TRAPD( ret, settingServer.Connect() );
       
   294         if ( ret == KErrNone )
       
   295             {
       
   296             settingServer.ResetLoggerSettings();
       
   297             settingServer.Close();
       
   298             }
       
   299         }
       
   300 
       
   301     }
       
   302 
       
   303 /*
       
   304 -------------------------------------------------------------------------------
       
   305 
       
   306     Class: CTestEngineServer
       
   307 
       
   308     Method: NewSessionL
       
   309 
       
   310     Description: Create a new client session for this server.
       
   311 
       
   312     Parameters: const TVersion& aVersion: in: Client side version number
       
   313 
       
   314     Return Values: CSharableSession* : pointer to CSharableSession object
       
   315 
       
   316     Errors/Exceptions: Leaves if given version is incorrect
       
   317                        Leaves if CTestEngine::NewL leaves
       
   318 
       
   319     Status: Approved
       
   320 
       
   321 -------------------------------------------------------------------------------
       
   322 */
       
   323 CSession2* CTestEngineServer::NewSessionL( const TVersion &aVersion,
       
   324                                          const RMessage2& /*aMessage*/ ) const
       
   325     {
       
   326     // Check that version is ok
       
   327     TVersion v( KTestEngineMajorVersionNumber,
       
   328                 KTestEngineMinorVersionNumber,
       
   329                 KTestEngineBuildVersionNumber );
       
   330     if ( !User::QueryVersionSupported( v, aVersion ) )
       
   331         {
       
   332         User::Leave( KErrNotSupported );
       
   333         }
       
   334 
       
   335     return CTestEngine::NewL( ( CTestEngineServer* ) this );
       
   336     }
       
   337 
       
   338 /*
       
   339 -------------------------------------------------------------------------------
       
   340 
       
   341     Class: CTestEngineServer
       
   342 
       
   343     Method: PanicServer
       
   344 
       
   345     Description: Panic the server
       
   346 
       
   347     Parameters: TTestEnginePanic aPanic: in: Panic number
       
   348 
       
   349     Return Values: None
       
   350 
       
   351     Errors/Exceptions: None
       
   352 
       
   353     Status: Approved
       
   354 
       
   355 -------------------------------------------------------------------------------
       
   356 */
       
   357 void CTestEngineServer::PanicServer( TTestEnginePanic aPanic )
       
   358     {
       
   359     _LIT( KTestServer, "CTestEngineServer" );
       
   360     User::Panic( KTestServer, aPanic );
       
   361 
       
   362     }
       
   363 
       
   364 void CTestEngineServer::SetLoggerSettings( const TLoggerSettings& aLoggerSettings )
       
   365     {
       
   366     iLoggerSettings = aLoggerSettings;
       
   367     }
       
   368 
       
   369 const TLoggerSettings& CTestEngineServer::GetLoggerSettings() const
       
   370     {
       
   371     return iLoggerSettings;
       
   372     }
       
   373 
       
   374 /*
       
   375 -------------------------------------------------------------------------------
       
   376 
       
   377     Class: CTestEngineServer
       
   378 
       
   379     Method: Logger
       
   380 
       
   381     Description: Return the pointer to iLogger.
       
   382 
       
   383     Parameters: None
       
   384 
       
   385     Return Values: CStifLogger*: Pointer to StifLogger
       
   386 
       
   387     Errors/Exceptions: None
       
   388 
       
   389     Status: Approved
       
   390 
       
   391 -------------------------------------------------------------------------------
       
   392 */
       
   393 CStifLogger* CTestEngineServer::Logger()
       
   394     {
       
   395     return iLogger;
       
   396 
       
   397     }
       
   398 
       
   399 /*
       
   400 -------------------------------------------------------------------------------
       
   401 
       
   402     Class: CTestEngineServerAutoShutdown
       
   403 
       
   404     Method: NewL
       
   405 
       
   406     Description: NewL is two-phased constructor.
       
   407 
       
   408     Parameters: None
       
   409 
       
   410     Return Values: CTestEngineServerAutoShutdown*: Pointer to new CTestEngineServerAutoShutdown object
       
   411 
       
   412     Errors/Exceptions: None
       
   413 -------------------------------------------------------------------------------
       
   414 */
       
   415 CTestEngineServerAutoShutdown* CTestEngineServerAutoShutdown::NewL()
       
   416     {
       
   417     CTestEngineServerAutoShutdown* self = new(ELeave)CTestEngineServerAutoShutdown;
       
   418     CleanupStack::PushL( self );
       
   419     self->ConstructL();
       
   420     CleanupStack::Pop( self );
       
   421     return self;
       
   422     }
       
   423 
       
   424 /*
       
   425 -------------------------------------------------------------------------------
       
   426 
       
   427     Class: CTestEngineServerAutoShutdown
       
   428 
       
   429     Method: CTestEngineServerAutoShutdown
       
   430 
       
   431     Description: Default constructor.
       
   432 
       
   433     Parameters: None
       
   434 
       
   435     Return Values: None
       
   436 
       
   437     Errors/Exceptions: None
       
   438 -------------------------------------------------------------------------------
       
   439 */
       
   440 CTestEngineServerAutoShutdown::CTestEngineServerAutoShutdown()
       
   441 :CTimer(-1)
       
   442     {
       
   443     CActiveScheduler::Add( this );
       
   444     }
       
   445 
       
   446 /*
       
   447 -------------------------------------------------------------------------------
       
   448 
       
   449     Class: CTestEngineServerAutoShutdown
       
   450 
       
   451     Method: ConstructL
       
   452 
       
   453     Description: Second phase of two-pahes constructor.
       
   454 
       
   455     Parameters: None
       
   456 
       
   457     Return Values: None
       
   458 
       
   459     Errors/Exceptions: None
       
   460 -------------------------------------------------------------------------------
       
   461 */
       
   462 void CTestEngineServerAutoShutdown::ConstructL()
       
   463     {
       
   464     CTimer::ConstructL();
       
   465     }
       
   466 
       
   467 /*
       
   468 -------------------------------------------------------------------------------
       
   469 
       
   470     Class: CTestEngineServerAutoShutdown
       
   471 
       
   472     Method: Start
       
   473 
       
   474     Description: Starts timer countdown.
       
   475 
       
   476     Parameters: None
       
   477 
       
   478     Return Values: None
       
   479 
       
   480     Errors/Exceptions: None
       
   481 -------------------------------------------------------------------------------
       
   482 */
       
   483 void CTestEngineServerAutoShutdown::Start()
       
   484     {
       
   485     After( KTestEngineServerShutdownDelay );
       
   486     }
       
   487 
       
   488 /*
       
   489 -------------------------------------------------------------------------------
       
   490 
       
   491     Class: CTestEngineServerAutoShutdown
       
   492 
       
   493     Method: RunL
       
   494 
       
   495     Description: Stops active scheduler.
       
   496 
       
   497     Parameters: None
       
   498 
       
   499     Return Values: None
       
   500 
       
   501     Errors/Exceptions: None
       
   502 -------------------------------------------------------------------------------
       
   503 */
       
   504 void CTestEngineServerAutoShutdown::RunL()
       
   505     {
       
   506     RDebug::Print( _L("TestEngine server shutdown") );
       
   507     CActiveScheduler::Stop();
       
   508     }
       
   509 
       
   510 /*
       
   511 -------------------------------------------------------------------------------
       
   512 
       
   513     Function: RunTestEngineServerL
       
   514 
       
   515     Description: Creates and starts TestEngine server
       
   516 
       
   517     Parameters: None
       
   518 
       
   519     Return Values: None
       
   520 
       
   521     Errors/Exceptions: None
       
   522 -------------------------------------------------------------------------------
       
   523 */
       
   524 static void RunTestEngineServerL()
       
   525     {
       
   526     User::LeaveIfError( RThread::RenameMe( KTestEngineServerName ) );
       
   527 
       
   528     CActiveScheduler* activeScheduler = new(ELeave) CActiveScheduler;
       
   529     CleanupStack::PushL( activeScheduler );
       
   530     CActiveScheduler::Install( activeScheduler );
       
   531 
       
   532     // create the server (leave it on the cleanup stack)
       
   533     CTestEngineServer* testEngineServer = CTestEngineServer::NewL();
       
   534     CleanupStack::PushL( testEngineServer );
       
   535 
       
   536     testEngineServer->StartL( KTestEngineServerName );
       
   537     
       
   538     // Initialisation complete, now signal the client
       
   539     RProcess::Rendezvous( KErrNone );
       
   540 
       
   541     // Ready to run
       
   542     CActiveScheduler::Start();
       
   543 
       
   544     // Cleanup the server and scheduler
       
   545     CleanupStack::PopAndDestroy( testEngineServer );    
       
   546     CleanupStack::PopAndDestroy( activeScheduler );
       
   547     }
       
   548 
       
   549 /*
       
   550 -------------------------------------------------------------------------------
       
   551 
       
   552     Function: E32Main
       
   553 
       
   554     Description: TestEngine process main function
       
   555 
       
   556     Parameters: None
       
   557 
       
   558     Return Values: TInt: Process exit code.
       
   559 
       
   560     Errors/Exceptions: None
       
   561 -------------------------------------------------------------------------------
       
   562 */
       
   563 TInt E32Main()
       
   564     {
       
   565     __UHEAP_MARK;
       
   566     RDebug::Print( _L("TestEngine server start") );
       
   567     CTrapCleanup* cleanup = CTrapCleanup::New();
       
   568     TInt ret = KErrNoMemory;
       
   569     if ( cleanup )
       
   570         {
       
   571         TRAP( ret, RunTestEngineServerL() );
       
   572         delete cleanup;
       
   573         }
       
   574     RDebug::Print( _L("TestEngine server closed") );
       
   575     __UHEAP_MARKEND;
       
   576     return ret;
       
   577     }
       
   578 
       
   579 // End of file