--- /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 <e32std.h>
+#include <flogger.h>
+#include "imerrors.h"
+#include <CNTDEF.H>
+#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<KImpsMaxSapLen> 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<const TDesC> aFmt, ... )
+ {
+ VA_LIST list;
+ VA_START( list, aFmt );
+
+ // Print to log file
+ TBuf<KLogBufferLength> buf;
+ buf.FormatList( aFmt, list );
+
+ // Write to log file
+ RFileLogger::Write( KLogDir, KLogFile, EFileLoggingModeAppend, buf );
+ }
+