diff -r e8c1ea2c6496 -r 8758140453c0 IM/src/TestRunner.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/IM/src/TestRunner.cpp Thu Jan 21 12:53:44 2010 +0000 @@ -0,0 +1,701 @@ +/* +* Copyright (c) 2002-2005 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Symbian Foundation License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: The class handles the test case running. +* +* +*/ + + + +// INCLUDE FILES +#include +#include +#include "imerrors.h" +#include +#include "IMApiMTHandlers.h" +#include "TestRunner.h" +#include "IMApiTest.h" +#include "ParserUtils.h" + +_LIT( KImpsIMApiMTIniFile, "c:\\smoketest\\imapitest.ini" ); +_LIT8( KImpsSAP, "SAP" ); +_LIT8( KImpsUserID, "Userid" ); +_LIT8( KImpsPassword, "password" ); +_LIT8( KImpsClientid, "clientid" ); +_LIT8( KImpsIAP, "IAP" ); +_LIT8( KImpsUserid1, "userid1" ); +_LIT8( KImpsUserid2, "userid2" ); + +void SetupSchedulerL() + { + // Create a scheduler + CTestScheduler* scheduler = new( ELeave )CTestScheduler; + CleanupStack::PushL( scheduler ); + CActiveScheduler::Install( scheduler ); + CleanupStack::Pop(); // scheduler + } + +void CTestRunner::ReadIniFileL() + { + RFs myFs; + TInt err = 0; + TUint32 myTime = 0; + TLex lex; + err = myFs.Connect(); + //CleanupClosePushL( myFs ); + CImpsSettingFile* configFile = CImpsSettingFile::NewL( myFs ); + CleanupStack::PushL( configFile ); + TFileName fileN( KImpsIMApiMTIniFile ); + // Open config file + TRAP( err, configFile->OpenL( fileN ) ); + User::LeaveIfError( err ); + + TBuf myPtr; + TRAP( err, myPtr.Copy( configFile->KeyValueL( KImpsSAP ) ) ); + if ( !err ) + { + iSapValue.Copy( myPtr ); + } + TRAP( err, myPtr.Copy( configFile->KeyValueL( KImpsUserID ) ) ); + if ( !err ) + { + iUserIdValue.Copy( myPtr ); + } + TRAP( err, myPtr.Copy( configFile->KeyValueL( KImpsPassword ) ) ); + if ( !err ) + { + iPassword.Copy( myPtr ); + } + TRAP( err, myPtr.Copy( configFile->KeyValueL( KImpsClientid ) ) ); + if ( !err ) + { + iClientId.Copy( myPtr ); + } + TRAP( err, myPtr.Copy( configFile->KeyValueL( KImpsIAP ) ) ); + if ( !err ) + { + lex.Assign( myPtr ); + lex.Val( myTime, EDecimal ); + iIAP = ( TInt ) myTime; + } + TRAP( err, myPtr.Copy( configFile->KeyValueL( KImpsUserid1 ) ) ); + if ( !err ) + { + iUserId1.Copy( myPtr ); + } + TRAP( err, myPtr.Copy( configFile->KeyValueL( KImpsUserid2 ) ) ); + if ( !err ) + { + iUserId2.Copy( myPtr ); + } + CleanupStack::PopAndDestroy( 1 ); // configFile + } + + + +CTestRunner* CTestRunner::NewL() + { + CTestRunner* self = new ( ELeave ) CTestRunner(); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); //self + return self; + } + +void CTestRunner::ConstructL() + { + SetupSchedulerL(); + iCase = Login; + iDatabase = CContactDatabase::OpenL(); + iImObserver = CIMApiClientHandler::NewL( iStatus ); + iConnObserver = CConnectionObserver::NewL( iStatus ); + ReadIniFileL(); + + CActiveScheduler::Add( this ); + } + +CTestRunner::~CTestRunner() + { + + if ( iOpenApi != NULL ) + { + iOpenApi->UnregisterObserver(); + } + CTestLogger1::Log( _L( "Test Case Number #16" ) ); + CTestLogger1::Log( _L( "CImConnection::UnregisterObserver" ) ); + if ( iOpenApi != NULL ) + { + delete iOpenApi; + iOpenApi = NULL; + } + if ( iImClient != NULL ) + { + delete iImClient; + iImClient = NULL; + } + if ( iConnObserver != NULL ) + { + delete iConnObserver; + iConnObserver = NULL; + } + if ( iImObserver != NULL ) + { + delete iImObserver; + iImObserver = NULL; + } + if ( iDatabase != NULL ) + { + delete iDatabase; + iDatabase = NULL; + } + + } + + + +void CTestRunner::DoCancel() + { + // Complete the request with error + TRequestStatus* s = &iStatus; + User::RequestComplete( s, KErrCancel ); + } + + +CTestRunner::CTestRunner() + : CActive( 0 ) + { + } + + +void CTestRunner::StartRunL( TWhichCase aCase ) + { + iCase = aCase; + SetActive(); + TRequestStatus *s = &iStatus; + User::RequestComplete( s, KErrNone ); + CActiveScheduler::Start(); + } + +void CTestRunner::RunL() + { + TInt errxx = 0; + TRAP( errxx, DoRunL() ); + if ( errxx < 0 ) + { + CActiveScheduler::Stop(); + } + } + + +void CTestRunner::DoRunL() + { + if ( iCase >= Finish ) + { + Cancel(); + CActiveScheduler::Stop(); + return; + } + + if ( iStatus != KErrNone ) + { + Cancel(); + CActiveScheduler::Stop(); + return; + } + switch ( iCase ) + { + case CreateImClient: + { + CreateInstanceL(); //NewL - instantiate the object + RegisterConnObserverL(); //RegisterObserverL - register the observer methods + LoadIMInterfaceL(); //CreateImClientL - get the IM interface + } + break; + case InvalidLogin: + { + CreateInstanceL(); + RegisterConnObserverL(); + LoadIMInterfaceL(); + IMRegisterL(); + LoginL( _L( "InvalidUser" ) ); + } + break; + case Login: + { + CreateInstanceL(); + RegisterConnObserverL(); + LoadIMInterfaceL(); + IMRegisterL(); + LoginL( iUserIdValue ); + } + break; + case SendMessageValidUserId: + { + SendPToPValidUserIDL(); + } + break; + case SendMessageValidTwoUserId: + { + SendPToPValidTwoUserIDL(); + } + break; + case SendMessageValidContact: + { + SendPToPValidContactL(); + } + break; + case SendMessageValidTwoContact: + { + SendPToPValidTwoContactL(); + } + break; + case SendPToPContactContentType: + { + SendPToPContactContentTypeL(); + } + break; + case SendPToPUserIDContentType: + { + SendPToPUserIDContentTypeL(); + } + break; + + case Logout: + { + QueryIMConnectionStatusL(); + } + break; + case CancelLogin: + { + CancelLoginL(); + } + break; + } + + iCase = Finish; + + return; + } + + +CContactIdArray* CTestRunner::GetWVContactIdsLC( ) + { + _LIT( KWVStart, "" ); + // Specify in which fields search should be performed + CContactItemFieldDef* fieldToSearchIn = new ( ELeave ) CContactItemFieldDef(); + CleanupStack::PushL( fieldToSearchIn ); + fieldToSearchIn->AppendL( KUidContactFieldVCardMapWV ); + + // search in contact database + CContactIdArray *array = iDatabase->FindLC( KWVStart, fieldToSearchIn ); + CleanupStack::Pop(); //>> array + CleanupStack::PopAndDestroy(); //>> fieldToSearchIn + CleanupStack::PushL( array ); + + return array; + } + + + +TInt CTestRunner::RegisterConnObserverL() + { + CTestLogger1::Log( _L( "Test Case Number #2" ) ); + TRAPD( err, iOpenApi->RegisterObserverL( iConnObserver ) ); + // Catch errors + if ( err == KImApiGeneralError ) // -30133 + { + iStatus = err; // Failed + CTestLogger1::Log( _L( "CImConnection::RegisterObserverL - err=%d" ), err ); + } + else + { + iStatus = KErrNone; //OK + CTestLogger1::Log( _L( "CImConnection::RegisterObserverL - err=%d" ), err ); + } + } + + +TInt CTestRunner::CreateInstanceL() + { + CTestLogger1::Log( _L( "Test Case Number #1" ) ); + iOpenApi = CImConnection::NewL( iClientId ); + CTestLogger1::Log( _L( "CImConnection::NewL" ) ); + return KErrNone; //OK + } + + +TInt CTestRunner::LoadIMInterfaceL() + { + CTestLogger1::Log( _L( "Test Case Number #3" ) ); + TRAPD( err, iImClient = iOpenApi->CreateImClientL() ); + // Catch errrors + if ( err == 0 ) + { + iStatus = KErrNone; // OK + CTestLogger1::Log( _L( "CreateImClientL - err=%d" ), err ); + } + else + { + iStatus = err; // Failed + CTestLogger1::Log( _L( "CreateImClientL - err=%d" ), err ); + } + } + + +TInt CTestRunner::IMRegisterL() + { + CTestLogger1::Log( _L( "Test Case Number #4" ) ); + TRAPD( err, iImClient -> RegisterObserverL( iImObserver ) ); + // Catch errors + if ( err == KImApiGeneralError ) //- 30133 + { + iStatus = err; // Failes + CTestLogger1::Log( _L( "MImClient::RegisterObserverL - err=%d" ), err ); + } + else + { + iStatus = KErrNone; //OK + CTestLogger1::Log( _L( "MImClient::RegisterObserverL - err=%d" ), err ); + } + } + +TInt CTestRunner::LoginL( const TDesC& aUserID ) + { + if ( aUserID.Compare( _L( "InvalidUser" ) ) ) + CTestLogger1::Log( _L( "Test Case Number #6" ) ); + else + { + CTestLogger1::Log( _L( "Invalid Login" ) ); + CTestLogger1::Log( _L( "Test Case Number #5" ) ); + } + + if ( iSapValue.Size() == 0 || iPassword.Size() == 0 || aUserID.Size() == 0 ) + { + iStatus = KErrNone; + CTestLogger1::Log( _L( "Invalid login parametres" ) ); + Cancel(); + CActiveScheduler::Stop(); + return KErrNone; + } + + TRAPD( err, iOpenApi->LoginL( iSapValue, aUserID, iPassword, iIAP ) ); + // Catch errors + if ( err ) + { + iStatus = err; // Failes + CTestLogger1::Log( _L( "LoginL - err=%d" ), err ); + return err; + } + else + { + iStatus = KRequestPending; + CTestLogger1::Log( _L( "LoginL - err=%d" ), err ); + SetActive(); + return KErrNone; + } + } + +TInt CTestRunner::SendPToPValidUserIDL() + { + CTestLogger1::Log( _L( "Test Case Number #7" ) ); + if ( iUserId1.Length() == 0 ) + { + CTestLogger1::Log( _L( "SendPToPMessageL(ValidUserId) UserID1 is NULL " ) ); + iStatus = KErrNone; + Cancel(); + CActiveScheduler::Stop(); + return KErrNone; + } + CDesCArray* userIds = new( ELeave ) CDesCArrayFlat( 1 ); // Create user list + CleanupStack::PushL( userIds ); + userIds->AppendL( iUserId1 ); // Add one user + + _LIT( KContentType, "text/plain" ); // Message type + _LIT( KMessage, "5. Hello In One Time Valid UserId" ); // Message + TInt OpId = 0; + // Send message + TRAPD ( err, OpId = iImClient->SendPToPMessageL( iUserId1, KMessage ) ); + // Catch errors + if ( err == KImApiErrInvalidUserId && OpId == 0 ) // KImApiErrInvalidUserId + { + CTestLogger1::Log( _L( "SendPToPMessageL(ValidUserId) - err=%d" ), err ); + CleanupStack::PopAndDestroy(); // userIds + iStatus = err; + return err; + } + else if ( err == KImApiGeneralError && OpId == 0 ) // General ImApi errror + { + CTestLogger1::Log( _L( "SendPToPMessageL(ValidUserId) - err=%d" ), err ); + CleanupStack::PopAndDestroy(); // userIds + iStatus = err; + return err; + } + else + { + CTestLogger1::Log( _L( "SendPToPMessageL(ValidUserId) - err=%d" ), err ); + CleanupStack::PopAndDestroy(); // userIds + iStatus = KRequestPending; + SetActive(); + return KErrNone; + } + } + + +TInt CTestRunner::SendPToPValidTwoUserIDL() + { + CTestLogger1::Log( _L( "Test Case Number #8" ) ); + CDesCArray* userIds = new( ELeave ) CDesCArrayFlat( 2 ); // Create new user list + CleanupStack::PushL( userIds ); + userIds->AppendL( iUserId1 ); // Add user 0 nok3 + userIds->AppendL( iUserId2 ); // Add user 1 nok5 + + _LIT( KContentType, "text/plain" ); + _LIT( KMessage, "6. Hello In Two Times Valid UserId" ); + TInt OpId = 0; + // Send Message + TRAPD ( err, OpId = iImClient->SendPToPMessageL( *userIds, KMessage ) ); + // Catch errors + if ( err == KImApiErrInvalidUserId && OpId == 0 ) // KImApiErrInvalidUserId + { + CTestLogger1::Log( _L( "SendPToPMessageL(ValidTwoUserIds) - err=%d" ), err ); + CleanupStack::PopAndDestroy(); // userIds + iStatus = err; + return err; + } + else if ( err == KImApiGeneralError && OpId == 0 ) // General ImApi errror + { + CTestLogger1::Log( _L( "SendPToPMessageL(ValidTwoUserIds) - err=%d" ), err ); + CleanupStack::PopAndDestroy(); // userIds + iStatus = err; + return err; + } + else + { + CTestLogger1::Log( _L( "SendPToPMessageL(ValidTwoUserIds) - err=%d" ), err ); + CleanupStack::PopAndDestroy(); // userIds + iStatus = KRequestPending; + SetActive(); + return KErrNone; + } + } + + +TInt CTestRunner::SendPToPValidContactL() + { + CTestLogger1::Log( _L( "Test Case Number #9" ) ); + CContactIdArray* contactIDArray = GetWVContactIdsLC(); + if ( contactIDArray->Count() == 0 ) + { + CTestLogger1::Log( _L( "Can not find WvContact ID" ) ); + CleanupStack::PopAndDestroy(); + iStatus = KErrNone; + Cancel(); + CActiveScheduler::Stop(); + return KErrNone; + } + TInt OpId = 0; + // Be sure that two contact is real WV contact + // Select first contact + TContactItemId& OmaContact = ( *contactIDArray )[0]; + + //Add first contact + CContactIdArray* myContactIds = CContactIdArray::NewL(); + myContactIds->AddL( OmaContact ); + + // Check that we have only one contact + TInt nuberofcontacts = myContactIds->Count(); + //CTestLogger1::Log( _L("nuberofcontacts =%d"), nuberofcontacts ); + //Send message to myContacts + TRAPD( err, OpId = iImClient->SendPToPMessageL( OmaContact/*myContactIds*/, _L( "12. Hello One Valid Contact" ) ) ); + // Just checking return value + if ( err == KImApiErrInvalidContactId && OpId == 0 ) // KImApiErrInvalidContactId and OperationId is 0 + { + CTestLogger1::Log( _L( "SendPToPMessageL(ValidContact) - err=%d" ), err ); + CleanupStack::PopAndDestroy(); + iStatus = KErrNone; + Cancel(); + CActiveScheduler::Stop(); + return err; + } + else if ( err == KImApiGeneralError && OpId == 0 ) // General ImApi error + { + CTestLogger1::Log( _L( "SendPToPMessageL(ValidContact) - err=%d" ), err ); + CleanupStack::PopAndDestroy(); // userIds + iStatus = err; + return err; + } + else + { + CTestLogger1::Log( _L( "SendPToPMessageL(ValidContact) - err=%d" ), err ); + CleanupStack::PopAndDestroy(); + iStatus = KRequestPending; + SetActive(); + return KErrNone; //OpId; + } + } + + +TInt CTestRunner::SendPToPValidTwoContactL() + { + CTestLogger1::Log( _L( "Test Case Number #10" ) ); + CContactIdArray* contactIDArray = GetWVContactIdsLC(); + TInt OpId = 0; + // Be sure that two contact is real WV contact + //Is there three contacts + TInt nuberofcontacts = contactIDArray->Count(); + if ( contactIDArray->Count() == 0 ) + { + CTestLogger1::Log( _L( "Can not find WvContact ID" ) ); + CleanupStack::PopAndDestroy(); + iStatus = KErrNone; + Cancel(); + CActiveScheduler::Stop(); + return KErrNone; + } + // Remove third contact + // Never commit the reset + if ( contactIDArray->Count() >= 3 ) + { + contactIDArray->Remove( 2 ); + } + + + // Check if Remove is OK + TRAPD( err1, OpId = iImClient->SendPToPMessageL( *contactIDArray, _L( "text/plain" ), _L8( "Hello All" ) ) ); + + //Send message + TRAPD( err, OpId = iImClient->SendPToPMessageL( *contactIDArray, _L( "13. Hello In Two Times Valid Contact" ) ) ); + + // Just checking return value + if ( err == KImApiErrInvalidContactId && OpId == 0 ) // KImApiErrInvalidContactId and OperationId is 0 + { + CTestLogger1::Log( _L( "SendPToPMessageL(ValidTwoContact) - err=%d" ), err ); + CleanupStack::PopAndDestroy(); + iStatus = KErrNone; + Cancel(); + CActiveScheduler::Stop(); + return err; + } + else if ( err == KImApiGeneralError && OpId == 0 ) // General ImApi error + { + CTestLogger1::Log( _L( "SendPToPMessageL(ValidTwoContact) - err=%d" ), err ); + CleanupStack::PopAndDestroy(); // userIds + iStatus = err; + return err; + } + else + { + CTestLogger1::Log( _L( "SendPToPMessageL(ValidTwoContact) - err=%d" ), err ); + CleanupStack::PopAndDestroy(); + iStatus = KRequestPending; + SetActive(); + return KErrNone; // OpId; + } + } + +TInt CTestRunner::SendPToPContactContentTypeL() + { + //This SDK API is not supported. Test case is added to increase the code coverage + CTestLogger1::Log( _L( "Test Case Number #11" ) ); + CTestLogger1::Log( _L( "SendPToPContactContentTypeL" ) ); + TInt OpId = 0; + CContactIdArray* contactIDArray = GetWVContactIdsLC(); + if ( contactIDArray->Count() == 0 ) + { + CTestLogger1::Log( _L( "Can not find WvContact ID" ) ); + CleanupStack::PopAndDestroy(); + iStatus = KErrNone; + Cancel(); + CActiveScheduler::Stop(); + return KErrNone; + } + TRAPD( err, OpId = iImClient->SendPToPMessageL( *contactIDArray, _L( "text/plain" ), _L8( "Hello All" ) ) ); + CleanupStack::PopAndDestroy(); // userIds + iStatus = err; + Cancel(); + CActiveScheduler::Stop(); + return err; + } + +TInt CTestRunner::SendPToPUserIDContentTypeL() + { + //This SDK API is not supported. Test case is added to increase the code coverage + CTestLogger1::Log( _L( "Test Case Number #12" ) ); + CTestLogger1::Log( _L( "SendPToPUserIDContentTypeL" ) ); + TInt OpId = 0; + CDesCArray* userIds = new( ELeave ) CDesCArrayFlat( 2 ); + CleanupStack::PushL( userIds ); + + TRAPD( err, OpId = iImClient->SendPToPMessageL( *userIds, _L( "text/plain" ), _L8( "Hello All" ) ) ); + CleanupStack::PopAndDestroy(); // userIds + iStatus = err; + Cancel(); + CActiveScheduler::Stop(); + return err; + } + + +TInt CTestRunner::QueryIMConnectionStatusL() + { + CTestLogger1::Log( _L( "Test Case Number #13" ) ); + TInt ret = iOpenApi->ImConnectionStatus(); + // Check returnvalue + if ( ret == 0 ) // iLoggedIn + { + CTestLogger1::Log( _L( "LogoutL" ) ); + iOpenApi->LogoutL(); + iStatus = KErrNone; + return 0; + } + else // 1 + { + iStatus = KErrNone; + Cancel(); + CActiveScheduler::Stop(); + return ret; + } + } + + +TInt CTestRunner::CancelLoginL() + { + CTestLogger1::Log( _L( "Test Case Number #14" ) ); + LoginL( iUserIdValue ); + TRAPD ( err, iOpenApi->CancelLoginL() ); + CTestLogger1::Log( _L( "CancelLoginL - err=%d" ), err ); + iImClient->UnregisterObserver(); + CTestLogger1::Log( _L( "Test Case Number #15" ) ); + CTestLogger1::Log( _L( "CImClient::UnregisterObserver" ) ); + } + +//********************************** +// Logger +//********************************** +const TInt KLogBufferLength = 256; +_LIT( KLogDir, "impsc" ); +_LIT( KLogFile, "IMAPITestCaseLog.txt" ); + +EXPORT_C void CTestLogger1::Log( TRefByValue aFmt, ... ) + { + VA_LIST list; + VA_START( list, aFmt ); + + // Print to log file + TBuf buf; + buf.FormatList( aFmt, list ); + + // Write to log file + RFileLogger::Write( KLogDir, KLogFile, EFileLoggingModeAppend, buf ); + } +