testexecfw/stf/stffw/testengine/src/TestEngineServer.cpp
changeset 2 8bb370ba6d1d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/testexecfw/stf/stffw/testengine/src/TestEngineServer.cpp	Fri Apr 09 10:46:28 2010 +0800
@@ -0,0 +1,579 @@
+/*
+* Copyright (c) 2009 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: This module contains implementation of 
+* CTestEngineServer class member functions.
+*
+*/
+
+// INCLUDE FILES
+#include "TestEngineServer.h"
+#include "TestEngineClientServer.h"
+#include "Logging.h"
+#include "TestEngine.h"
+#include "TestReport.h"
+
+#define LOGGER iLogger
+
+const TInt KTestEngineServerShutdownDelay = 5000000; // 10s
+
+/*
+-------------------------------------------------------------------------------
+
+    Class: CTestEngineServer
+
+    Method: CTestEngineServer
+
+    Description: Default constructor
+
+    C++ default constructor can NOT contain any code, that
+    might leave.
+
+    Parameters: None
+
+    Return Values: None
+
+    Errors/Exceptions: None
+
+    Status: Approved
+
+-------------------------------------------------------------------------------
+*/
+CTestEngineServer::CTestEngineServer() :
+    CServer2( CTestEngineServer::ETestEngineServerPriority ),
+    iSessionCount( 0 )
+    {
+
+    }
+
+/*
+-------------------------------------------------------------------------------
+
+    Class: CTestEngineServer
+
+    Method: ConstructL
+
+    Description: Symbian OS second phase constructor
+
+    Symbian OS default constructor can leave.
+
+    Parameters: None
+
+    Return Values: None
+
+    Errors/Exceptions: Leaves if CObjectConIx::NewL leaves
+                       Leaves if CStifLogger::NewL leaves
+                       Leaves if StartL leaves
+
+    Status: Approved
+
+-------------------------------------------------------------------------------
+*/
+void CTestEngineServer::ConstructL()
+    {
+    // Create container
+    iContainerIndex = CObjectConIx::NewL();
+
+    InitLoggerSettings();
+    InitLoggerL();
+
+    iAutoShutdownTimer = CTestEngineServerAutoShutdown::NewL();
+    iAutoShutdownTimer->Start();
+    
+    __TRACE(KVerbose, (_L( "CTestEngineServer::ConstructL: Server Created" ) ) );
+    }
+
+void CTestEngineServer::InitLoggerSettings()
+    {
+    // Initializations to indicator is setting in use
+    iLoggerSettings.iIsDefined.iCreateLogDir = EFalse;
+    iLoggerSettings.iIsDefined.iPath = EFalse;
+    iLoggerSettings.iIsDefined.iHwPath = EFalse;
+    iLoggerSettings.iIsDefined.iFormat = EFalse;
+    iLoggerSettings.iIsDefined.iHwFormat = EFalse;
+    iLoggerSettings.iIsDefined.iOutput = EFalse;
+    iLoggerSettings.iIsDefined.iHwOutput = EFalse;
+    iLoggerSettings.iIsDefined.iOverwrite = EFalse;
+    iLoggerSettings.iIsDefined.iLineBreak = EFalse;
+    iLoggerSettings.iIsDefined.iTimeStamp = EFalse;
+    iLoggerSettings.iIsDefined.iEventRanking = EFalse;
+    iLoggerSettings.iIsDefined.iThreadId = EFalse;    
+    }
+
+void CTestEngineServer::InitLoggerL()
+    {
+    // Create logger, in Wins use HTML in HW default logger
+    TLoggerSettings loggerSettings;
+
+    // Directory must create by hand if test engine log wanted
+    loggerSettings.iCreateLogDirectories = EFalse;
+
+    loggerSettings.iOverwrite = ETrue;
+    loggerSettings.iTimeStamp = ETrue;
+    loggerSettings.iLineBreak = ETrue;
+    loggerSettings.iEventRanking = EFalse;
+    loggerSettings.iThreadId = EFalse;
+    loggerSettings.iHardwareFormat = CStifLogger::ETxt;
+#ifndef FORCE_STIF_INTERNAL_LOGGING_TO_RDEBUG
+    loggerSettings.iEmulatorFormat = CStifLogger::EHtml;
+    loggerSettings.iEmulatorOutput = CStifLogger::EFile;
+    loggerSettings.iHardwareOutput = CStifLogger::EFile;
+#else
+    RDebug::Print( _L( "STIF Test Engine logging forced to RDebug" ) );
+    loggerSettings.iEmulatorFormat = CStifLogger::ETxt;
+    loggerSettings.iEmulatorOutput = CStifLogger::ERDebug;
+    loggerSettings.iHardwareOutput = CStifLogger::ERDebug;
+#endif
+    loggerSettings.iUnicode = EFalse;
+    loggerSettings.iAddTestCaseTitle = EFalse;
+
+    iLogger = CStifLogger::NewL( _L( "C:\\logs\\testframework\\testengine\\"),
+                                    _L( "testengine" ),
+                                    loggerSettings );    
+    }
+
+/*
+-------------------------------------------------------------------------------
+
+    Class: CTestEngineServer
+
+    Method: NewL
+
+    Description: Two-phased constructor.
+
+    Parameters: None
+
+    Return Values: CTestEngineServer* : pointer to CTestEngineServer object
+
+    Errors/Exceptions: Leaves if construction of CBufferArray fails
+
+    Status: Approved
+
+-------------------------------------------------------------------------------
+*/
+CTestEngineServer* CTestEngineServer::NewL()
+    {
+    CTestEngineServer* self = new ( ELeave ) CTestEngineServer();
+    CleanupStack::PushL( self );      
+    self->ConstructL();
+    CleanupStack::Pop();
+
+    return self;
+
+    }
+
+/*
+-------------------------------------------------------------------------------
+
+    Class: CTestEngineServer
+
+    Method: ~CTestEngineServer
+
+    Description: Destructor
+
+    Parameters: None
+
+    Return Values: None
+
+    Errors/Exceptions: None
+
+    Status: Approved
+
+-------------------------------------------------------------------------------
+*/
+CTestEngineServer::~CTestEngineServer()
+    {
+    delete iAutoShutdownTimer;
+    
+    delete iContainerIndex; 
+
+    __TRACE(KAlways, ( _L( "---------------- Log Ended ----------------" ) ) );
+    delete iLogger;
+    }
+
+/*
+-------------------------------------------------------------------------------
+
+    Class: CTestEngineServer
+
+    Method: NewContainerL
+
+    Description: Create new container
+
+    Parameters: None
+
+    Return Values: None
+
+    Errors/Exceptions: Leaves if called CreateL method leaves
+
+    Status: Approved
+
+-------------------------------------------------------------------------------
+*/
+CObjectCon* CTestEngineServer::NewContainerL()
+    {
+    CObjectCon* container = iContainerIndex->CreateL();
+    
+    if ( iSessionCount == 0 )
+        {
+        iAutoShutdownTimer->Cancel();
+        }
+    iSessionCount++;
+
+    return container;
+    }
+
+/*
+-------------------------------------------------------------------------------
+
+    Class: CTestEngineServer
+
+    Method: DeleteContainer
+
+    Description: Deletes a container
+
+    Parameters: CObjectCon* 
+
+    Return Values: None
+
+    Errors/Exceptions: None
+
+    Status: Approved
+
+-------------------------------------------------------------------------------
+*/
+void CTestEngineServer::DeleteContainer( CObjectCon* aContainer )
+    {
+    iContainerIndex->Remove( aContainer );
+
+    }
+
+/*
+-------------------------------------------------------------------------------
+
+    Class: CTestEngineServer
+
+    Method: SessionClosed
+
+    Description: Inform Server that session is closed.
+
+    Parameters: None
+
+    Return Values: None
+
+    Errors/Exceptions: None
+
+    Status: Approved
+
+-------------------------------------------------------------------------------
+*/
+void CTestEngineServer::SessionClosed()
+    {
+    // Decrease session count
+    iSessionCount--;
+
+    // Check if last session is closed
+    if ( iSessionCount <= 0 )
+        {
+        // Stop the active scheduler
+        // Execution will continue in ThreadFunction()
+        iAutoShutdownTimer->Start();
+        
+        RSettingServer settingServer;
+        TRAPD( ret, settingServer.Connect() );
+        if ( ret == KErrNone )
+            {
+            settingServer.ResetLoggerSettings();
+            settingServer.Close();
+            }
+        }
+
+    }
+
+/*
+-------------------------------------------------------------------------------
+
+    Class: CTestEngineServer
+
+    Method: NewSessionL
+
+    Description: Create a new client session for this server.
+
+    Parameters: const TVersion& aVersion: in: Client side version number
+
+    Return Values: CSharableSession* : pointer to CSharableSession object
+
+    Errors/Exceptions: Leaves if given version is incorrect
+                       Leaves if CTestEngine::NewL leaves
+
+    Status: Approved
+
+-------------------------------------------------------------------------------
+*/
+CSession2* CTestEngineServer::NewSessionL( const TVersion &aVersion,
+                                         const RMessage2& /*aMessage*/ ) const
+    {
+    // Check that version is ok
+    TVersion v( KTestEngineMajorVersionNumber,
+                KTestEngineMinorVersionNumber,
+                KTestEngineBuildVersionNumber );
+    if ( !User::QueryVersionSupported( v, aVersion ) )
+        {
+        User::Leave( KErrNotSupported );
+        }
+
+    return CTestEngine::NewL( ( CTestEngineServer* ) this );
+    }
+
+/*
+-------------------------------------------------------------------------------
+
+    Class: CTestEngineServer
+
+    Method: PanicServer
+
+    Description: Panic the server
+
+    Parameters: TTestEnginePanic aPanic: in: Panic number
+
+    Return Values: None
+
+    Errors/Exceptions: None
+
+    Status: Approved
+
+-------------------------------------------------------------------------------
+*/
+void CTestEngineServer::PanicServer( TTestEnginePanic aPanic )
+    {
+    _LIT( KTestServer, "CTestEngineServer" );
+    User::Panic( KTestServer, aPanic );
+
+    }
+
+void CTestEngineServer::SetLoggerSettings( const TLoggerSettings& aLoggerSettings )
+    {
+    iLoggerSettings = aLoggerSettings;
+    }
+
+const TLoggerSettings& CTestEngineServer::GetLoggerSettings() const
+    {
+    return iLoggerSettings;
+    }
+
+/*
+-------------------------------------------------------------------------------
+
+    Class: CTestEngineServer
+
+    Method: Logger
+
+    Description: Return the pointer to iLogger.
+
+    Parameters: None
+
+    Return Values: CStifLogger*: Pointer to StifLogger
+
+    Errors/Exceptions: None
+
+    Status: Approved
+
+-------------------------------------------------------------------------------
+*/
+CStifLogger* CTestEngineServer::Logger()
+    {
+    return iLogger;
+
+    }
+
+/*
+-------------------------------------------------------------------------------
+
+    Class: CTestEngineServerAutoShutdown
+
+    Method: NewL
+
+    Description: NewL is two-phased constructor.
+
+    Parameters: None
+
+    Return Values: CTestEngineServerAutoShutdown*: Pointer to new CTestEngineServerAutoShutdown object
+
+    Errors/Exceptions: None
+-------------------------------------------------------------------------------
+*/
+CTestEngineServerAutoShutdown* CTestEngineServerAutoShutdown::NewL()
+    {
+    CTestEngineServerAutoShutdown* self = new(ELeave)CTestEngineServerAutoShutdown;
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+/*
+-------------------------------------------------------------------------------
+
+    Class: CTestEngineServerAutoShutdown
+
+    Method: CTestEngineServerAutoShutdown
+
+    Description: Default constructor.
+
+    Parameters: None
+
+    Return Values: None
+
+    Errors/Exceptions: None
+-------------------------------------------------------------------------------
+*/
+CTestEngineServerAutoShutdown::CTestEngineServerAutoShutdown()
+:CTimer(-1)
+    {
+    CActiveScheduler::Add( this );
+    }
+
+/*
+-------------------------------------------------------------------------------
+
+    Class: CTestEngineServerAutoShutdown
+
+    Method: ConstructL
+
+    Description: Second phase of two-pahes constructor.
+
+    Parameters: None
+
+    Return Values: None
+
+    Errors/Exceptions: None
+-------------------------------------------------------------------------------
+*/
+void CTestEngineServerAutoShutdown::ConstructL()
+    {
+    CTimer::ConstructL();
+    }
+
+/*
+-------------------------------------------------------------------------------
+
+    Class: CTestEngineServerAutoShutdown
+
+    Method: Start
+
+    Description: Starts timer countdown.
+
+    Parameters: None
+
+    Return Values: None
+
+    Errors/Exceptions: None
+-------------------------------------------------------------------------------
+*/
+void CTestEngineServerAutoShutdown::Start()
+    {
+    After( KTestEngineServerShutdownDelay );
+    }
+
+/*
+-------------------------------------------------------------------------------
+
+    Class: CTestEngineServerAutoShutdown
+
+    Method: RunL
+
+    Description: Stops active scheduler.
+
+    Parameters: None
+
+    Return Values: None
+
+    Errors/Exceptions: None
+-------------------------------------------------------------------------------
+*/
+void CTestEngineServerAutoShutdown::RunL()
+    {
+    RDebug::Print( _L("TestEngine server shutdown") );
+    CActiveScheduler::Stop();
+    }
+
+/*
+-------------------------------------------------------------------------------
+
+    Function: RunTestEngineServerL
+
+    Description: Creates and starts TestEngine server
+
+    Parameters: None
+
+    Return Values: None
+
+    Errors/Exceptions: None
+-------------------------------------------------------------------------------
+*/
+static void RunTestEngineServerL()
+    {
+    User::LeaveIfError( RThread::RenameMe( KTestEngineServerName ) );
+
+    CActiveScheduler* activeScheduler = new(ELeave) CActiveScheduler;
+    CleanupStack::PushL( activeScheduler );
+    CActiveScheduler::Install( activeScheduler );
+
+    // create the server (leave it on the cleanup stack)
+    CTestEngineServer* testEngineServer = CTestEngineServer::NewL();
+    CleanupStack::PushL( testEngineServer );
+
+    testEngineServer->StartL( KTestEngineServerName );
+    
+    // Initialisation complete, now signal the client
+    RProcess::Rendezvous( KErrNone );
+
+    // Ready to run
+    CActiveScheduler::Start();
+
+    // Cleanup the server and scheduler
+    CleanupStack::PopAndDestroy( testEngineServer );    
+    CleanupStack::PopAndDestroy( activeScheduler );
+    }
+
+/*
+-------------------------------------------------------------------------------
+
+    Function: E32Main
+
+    Description: TestEngine process main function
+
+    Parameters: None
+
+    Return Values: TInt: Process exit code.
+
+    Errors/Exceptions: None
+-------------------------------------------------------------------------------
+*/
+TInt E32Main()
+    {
+    __UHEAP_MARK;
+    RDebug::Print( _L("TestEngine server start") );
+    CTrapCleanup* cleanup = CTrapCleanup::New();
+    TInt ret = KErrNoMemory;
+    if ( cleanup )
+        {
+        TRAP( ret, RunTestEngineServerL() );
+        delete cleanup;
+        }
+    RDebug::Print( _L("TestEngine server closed") );
+    __UHEAP_MARKEND;
+    return ret;
+    }
+
+// End of file