--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/stif/TestInterface/src/TestInterface.cpp Wed Oct 13 16:17:58 2010 +0300
@@ -0,0 +1,620 @@
+/*
+* 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 file contains TestInterface implementation.
+*
+*/
+
+// INCLUDE FILES
+#include <e32base.h>
+#include <e32std.h>
+#include "StifTestInterface.h"
+#include "TestServerModuleIf.h"
+#include "StifTestModule.h"
+#include <stifinternal/TestServerClient.h>
+//#include <bautils.h>
+#include "version.h"
+
+// EXTERNAL DATA STRUCTURES
+// None
+
+// EXTERNAL FUNCTION PROTOTYPES
+// None
+
+// CONSTANTS
+// None
+
+// MACROS
+// None
+
+// LOCAL CONSTANTS AND MACROS
+// None
+
+// MODULE DATA STRUCTURES
+// None
+
+// LOCAL FUNCTION PROTOTYPES
+// None
+/*
+-------------------------------------------------------------------------------
+
+ Class: -
+
+ Method: StifDriveLetters
+
+ Description: This defines drive letters that is available in STIF TF.
+
+ Parameters: TInt aDriveNumber: in: Number to indicate drive letter
+ TInt& aCount: inout: Counts of drives that is available
+
+ Return Values: const TChar: Returns a drive letter that is select by
+ aDriveNumber
+
+ Errors/Exceptions: None
+
+ Status: Proposal
+
+-------------------------------------------------------------------------------
+*/
+//@spe
+/*
+EXPORT_C const TChar StifDriveLetters( TInt aDriveNumber, TInt& aCount )
+ {
+ static TChar* const EStifDriveLetters[] =
+ {
+ ( TChar* )L"a",
+ ( TChar* )L"b",
+ ( TChar* )L"c",
+ ( TChar* )L"d",
+ ( TChar* )L"e",
+ ( TChar* )L"f",
+ ( TChar* )L"g",
+ ( TChar* )L"h",
+ ( TChar* )L"i",
+ ( TChar* )L"j",
+ ( TChar* )L"k",
+ ( TChar* )L"l",
+ ( TChar* )L"m",
+ ( TChar* )L"n",
+ ( TChar* )L"o",
+ ( TChar* )L"p",
+ ( TChar* )L"q",
+ ( TChar* )L"r",
+ ( TChar* )L"s",
+ ( TChar* )L"t",
+ ( TChar* )L"u",
+ ( TChar* )L"v",
+ ( TChar* )L"w",
+ ( TChar* )L"x",
+ ( TChar* )L"y",
+ ( TChar* )L"z",
+ };
+ aCount = (sizeof( EStifDriveLetters )/sizeof(TChar*));
+ return TChar( *EStifDriveLetters[aDriveNumber] );
+
+ }
+*/
+
+// FORWARD DECLARATIONS
+// None
+
+// ==================== LOCAL FUNCTIONS =======================================
+// None
+
+/*
+-------------------------------------------------------------------------------
+
+ DESCRIPTION
+
+ This module contains the implementation of TTestCaseInfo class
+ member function.
+
+-------------------------------------------------------------------------------
+*/
+
+// ================= MEMBER FUNCTIONS =========================================
+
+/*
+-------------------------------------------------------------------------------
+
+ Class: TTestCaseInfo
+
+ Method: TTestCaseInfo
+
+ Description: This method is the constructor of class TTestCaseInfo.
+
+ Parameters: None
+
+ Return Values: None
+
+ Errors/Exceptions: None
+
+ Status: Approved
+
+-------------------------------------------------------------------------------
+*/
+EXPORT_C TTestCaseInfo::TTestCaseInfo()
+ {
+ iCaseNumber = -1;
+ iTitle.Zero();
+ iTimeout = 0;
+ iPriority = EPriorityNormal;
+
+ }
+
+/*
+-------------------------------------------------------------------------------
+
+ DESCRIPTION
+
+ This module contains the implementation of TTestInfo class
+ member function.
+
+-------------------------------------------------------------------------------
+*/
+
+// ================= MEMBER FUNCTIONS =========================================
+
+/*
+-------------------------------------------------------------------------------
+
+ Class: TTestInfo
+
+ Method: TTestInfo
+
+ Description: This method is the constructor of class TTestInfo.
+
+ Parameters: None
+
+ Return Values: None
+
+ Errors/Exceptions: None
+
+ Status: Approved
+
+-------------------------------------------------------------------------------
+*/
+EXPORT_C TTestInfo::TTestInfo()
+ {
+
+ iModuleName.Zero();
+ iConfig.Zero();
+
+ }
+
+/*
+-------------------------------------------------------------------------------
+
+ DESCRIPTION
+
+ This module contains the implementation of TTestResult class
+ member function.
+
+-------------------------------------------------------------------------------
+*/
+
+// ================= MEMBER FUNCTIONS =========================================
+
+/*
+-------------------------------------------------------------------------------
+
+ Class: TTestResult
+
+ Method: TTestResult
+
+ Description: This method is the constructor of class TTestResult.
+
+ Parameters: None
+
+ Return Values: None
+
+ Errors/Exceptions: None
+
+ Status: Approved
+
+-------------------------------------------------------------------------------
+*/
+EXPORT_C TTestResult::TTestResult()
+ {
+ iResult = 0;
+ iResultDes.Zero();
+
+ }
+
+/*
+-------------------------------------------------------------------------------
+
+ Class: TTestResult
+
+ Method: TTestResult
+
+ Description: Sets result and result description of the test case.
+
+ Parameters: TInt aResultCode: in: Symbian error code
+ const TResultDes& aResultDes: in: Result description of the
+ test case
+
+ Return Values: None
+
+ Errors/Exceptions: None
+
+ Status: Proposal
+
+-------------------------------------------------------------------------------
+*/
+EXPORT_C void TTestResult::SetResult( TInt aResultCode,
+ const TDesC& aResultDes )
+ {
+ iResult = aResultCode;
+ // If description is too length then cut.
+ if( aResultDes.Length() > KStifMaxResultDes )
+ {
+ iResultDes = aResultDes.Left( KStifMaxResultDes );
+ }
+ else
+ {
+ iResultDes = aResultDes;
+ }
+
+ }
+
+/*
+-------------------------------------------------------------------------------
+
+ DESCRIPTION
+
+ This module contains the implementation of TFullTestResult class
+ member function.
+
+-------------------------------------------------------------------------------
+*/
+
+// ================= MEMBER FUNCTIONS =========================================
+
+/*
+-------------------------------------------------------------------------------
+
+ Class: TFullTestResult
+
+ Method: TFullTestResult
+
+ Description: This method is the constructor of class TFullTestResult.
+
+ Parameters: None
+
+ Return Values: None
+
+ Errors/Exceptions: None
+
+ Status: Approved
+
+-------------------------------------------------------------------------------
+*/
+EXPORT_C TFullTestResult::TFullTestResult():
+ iStartTime( 0 ),
+ iEndTime( 0 )
+ {
+ }
+
+/*
+-------------------------------------------------------------------------------
+
+ DESCRIPTION
+
+ This module contains the implementation of TTestProgress class
+ member function.
+
+-------------------------------------------------------------------------------
+*/
+
+// ================= MEMBER FUNCTIONS =========================================
+
+/*
+-------------------------------------------------------------------------------
+
+ Class: TTestProgress
+
+ Method: TTestProgress
+
+ Description: This method is the constructor of class TTestProgress.
+
+ Parameters: None
+
+ Return Values: None
+
+ Errors/Exceptions: None
+
+ Status: Approved
+
+-------------------------------------------------------------------------------
+*/
+EXPORT_C TTestProgress::TTestProgress()
+ {
+ iPosition = 0;
+ iDescription.Zero();
+ iText.Zero();
+
+ }
+
+/*
+-------------------------------------------------------------------------------
+
+ DESCRIPTION
+
+ This module contains the implementation of TErrorNotification class
+ member function.
+
+-------------------------------------------------------------------------------
+*/
+
+// ================= MEMBER FUNCTIONS =========================================
+
+/*
+-------------------------------------------------------------------------------
+
+ Class: TErrorNotification
+
+ Method: TErrorNotification
+
+ Description: This method is the constructor of class TTestProgress.
+
+ Parameters: None
+
+ Return Values: None
+
+ Errors/Exceptions: None
+
+ Status: Approved
+
+-------------------------------------------------------------------------------
+*/
+EXPORT_C TErrorNotification::TErrorNotification()
+ {
+ iPriority = 0;
+ iModule.Zero();
+ iText.Zero();
+
+ }
+
+/*
+-------------------------------------------------------------------------------
+
+ Class: -
+
+ Method: StartSession
+
+ Description: This works and used only in EKA2 environment and used from
+ STIF TestFramework internally.
+ Executable module uses defined capabilities(PlatSec's
+ Capability model) to start session. Function for starting
+ the TestServer and Testmodule/TestClass.
+
+ Starts a new server. Server will be running its own
+ thread and this functions returns when server is up and
+ running or server start-up fails.
+
+ Parameters: None
+
+ Return Values: TInt Error code / KErrNone
+
+ Errors/Exceptions: None
+
+ Status: Proposal
+
+-------------------------------------------------------------------------------
+*/
+EXPORT_C TInt StartSession()
+ {
+ //__UHEAP_MARK;
+
+ // Get module name from command line
+ const TInt length = User::CommandLineLength();
+ HBufC* cmdLine = HBufC::New( length );
+
+ if ( cmdLine == NULL )
+ {
+ //__UHEAP_MARKEND;
+ return KErrNoMemory;
+ }
+
+ TPtr moduleName = cmdLine->Des();
+ User::CommandLine( moduleName );
+
+ RDebug::Print(_L("StartSession() Received data [%S]"), &moduleName);
+
+ // Extract semaphore name passed in data
+ TInt index = moduleName.Find(_L(" "));
+ RDebug::Print(_L("StartSession() Space separator found at position [%d]"), index);
+ TPtrC semaphoreName = moduleName.Mid(index + 1);
+ moduleName = moduleName.Left(index);
+
+ RDebug::Print(_L("StartSession() Extracted module name [%S] and sempahore name [%S]"), &moduleName, &semaphoreName);
+
+ // Open start-up synchronization semaphore
+ RSemaphore startup;
+ RDebug::Print(_L(" Opening start-up semaphore"));
+// TName semaphoreName = _L("startupSemaphore");
+// semaphoreName.Append( moduleName );
+
+ TInt res = startup.OpenGlobal(semaphoreName);
+ RDebug::Print(_L("Opening result %d"), res);
+
+
+ TFileName serverName;
+ TInt r = StartNewServer ( moduleName, serverName, EFalse, startup);
+
+ if ( r == KErrAlreadyExists )
+ {
+ // Ok, server was already started
+ RDebug::Print(_L("Server already started, signaling semaphore and exiting"));
+ startup.Signal();
+ //__UHEAP_MARKEND;
+
+ delete cmdLine;
+
+ return KErrNone;
+ }
+ else
+ {
+ RDebug::Print(_L("Server is finished, code %d"), r);
+ }
+
+ //__UHEAP_MARKEND;
+
+ // Program execution never comes here, because StartNewServer doesn't return
+ // unless server is already started.
+
+ delete cmdLine;
+
+ // Return start-up result.
+ return r;
+
+ }
+
+/*
+-------------------------------------------------------------------------------
+
+ Class: TStifUtil
+
+ Method: CorrectFilePath
+
+ Description: Checks if file path contains drive letter. If not file is serched
+ on all drives and first hit is added to file name.
+
+ Parameters: TDes& aFilePath: in/out: file path to correct
+
+ Return Values: None
+
+ Errors/Exceptions: Leaves if some of called leaving methods leaves
+
+-------------------------------------------------------------------------------
+*/
+EXPORT_C void TStifUtil::CorrectFilePathL( TDes& aFilePath )
+ {
+ _LIT( KDriveSelector, ":\\" );
+ _LIT( KDriveSelectorFormat_1, "%c:" );
+ _LIT( KDriveSelectorFormat_2, "%c:\\" );
+ TChar KDriveZ = EDriveZ;//'Z';
+
+ _LIT( KBackslash, "\\" );
+
+ TInt length = aFilePath.Length();
+
+ if (length == 0 )
+ {
+ return;
+ }
+ if (length > 2 )
+ {
+ // Check if file path contains drive selector
+ if ( aFilePath.Mid( 1, 2 ) == KDriveSelector )
+ {
+ // File path contains selector letter so we have nothing to do here
+ return;
+ }
+ }
+
+ // Check if file path contains backslash at the begining and
+ // select proper drive selector format according to this information
+ TInt driveSelectorFormat = 2;
+ if ( aFilePath.Mid( 0, 1 ) == KBackslash )
+ {
+ driveSelectorFormat = 1;
+ }
+
+ RFs rfs;
+ if ( rfs.Connect() != KErrNone )
+ {
+ return;
+ }
+
+ // Get available drives list, revers it order and move z drive at
+ // the end of the list.
+ TDriveList drivesList;
+ rfs.DriveList(drivesList);
+
+ // Set drive variable to last drive (except for Z, which will be checked at the end)
+ char drive = 'Y' ;
+
+ // Loop through all the drives in following order: YX..CBAZ
+ while(drive >= 'A' && drive <= 'Z')
+ {
+ // Do further action only if drive exists
+ TInt driveint;
+ rfs.CharToDrive(drive, driveint);
+ if(drivesList[driveint])
+ {
+ //further checking (drive selector and file existence)
+
+ // Prepare drive selector
+ TBuf<3> driveSelector;
+ if ( driveSelectorFormat == 1 )
+ {
+ driveSelector.Format( KDriveSelectorFormat_1, drive );
+ }
+ else if ( driveSelectorFormat == 2 )
+ {
+ driveSelector.Format( KDriveSelectorFormat_2, drive );
+ }
+
+ aFilePath.Insert( 0, driveSelector );
+
+ TEntry entry;
+ if ( rfs.Entry(aFilePath, entry) == KErrNone )
+ {
+ rfs.Close();
+ return;
+ }
+
+ // File does not exists on selected drive. Restoring orginal file path
+ aFilePath.Delete( 0, driveSelector.Length() );
+ }//if(drivesList[driveint])
+
+ // Select next drive
+ if(drive == 'Z')
+ break; // the last driver
+ else if(drive == 'A' )
+ drive = 'Z'; //after checking A check Z
+ else
+ drive = (TChar)(TInt(drive)-1) ; //after checking Y check X and so on in reverse alphabetical order
+ } //while
+ rfs.Close();
+ }
+
+/*
+-------------------------------------------------------------------------------
+
+ Class: TStifUtil
+
+ Method: STIFVersion
+
+ Description: Method used to retrieve version of STIF by both STIF and STIF UI
+
+ Parameters: TInt& aMajorV - parameter used to pass major STIF version
+ TInt& aMinorV - parameter used to pass minor STIF version
+ TInt& aBuildV - parameter used to pass build version of STIF
+ TDes& aRelDate - parameter used to pass information about release date
+
+ Return Values: None
+
+-------------------------------------------------------------------------------
+*/
+EXPORT_C void TStifUtil::STIFVersion(TInt& aMajorV, TInt& aMinorV, TInt& aBuildV, TDes& aRelDate)
+ {
+ aMajorV = STIF_MAJOR_VERSION;
+ aMinorV = STIF_MINOR_VERSION;
+ aBuildV = STIF_BUILD_VERSION;
+ aRelDate = TO_UNICODE(STIF_REL_DATE);
+ }
+
+// End of File