multimediacommscontroller/tsrc/componenttests/src/testconsole.cpp
changeset 0 1bce908db942
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/multimediacommscontroller/tsrc/componenttests/src/testconsole.cpp	Tue Feb 02 01:04:58 2010 +0200
@@ -0,0 +1,598 @@
+/*
+* Copyright (c) 2004 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:    Part of TestConsole application.
+**              Methods for the class CTestAppConsole
+**
+*/
+
+
+
+#include <e32std.h>
+#include <e32base.h>
+#include "testconsole.h"
+#include "testdefinitions.hrh"
+#include "mccteststubs.h"
+#include "test_interface.h"
+#include "test_audiocontrol.h"
+#include "test_dtmf.h"
+#include "test_rtcp.h"
+#include "test_async_features.h"
+#include "test_secure.h"
+
+
+#ifndef __WINSCW__
+const TInt KTestIapId = 1;
+#else
+const TInt KTestIapId = 6;
+#endif
+
+//*******************************************************************************
+// Method      : CTestAppConsole::NewL()
+// Purpose     : 
+// Parameters  : 
+// Return Value: 
+//*******************************************************************************
+CTestAppConsole* CTestAppConsole::NewLC()
+    {
+    CTestAppConsole* self = new ( ELeave ) CTestAppConsole();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+
+//*******************************************************************************
+// Method      : CTestAppConsole::CTestAppConsole()
+// Purpose     : Constructor
+// Parameters  : 
+// Return Value: 
+//*******************************************************************************
+CTestAppConsole::CTestAppConsole()
+    : CActive( EPriorityStandard )
+    {
+    CActiveScheduler::Add( this );
+    }
+
+//*******************************************************************************
+// Method      : CTestAppConsole::ConstructL()
+// Purpose     : 
+// Parameters  : 
+// Return Value: 
+//*******************************************************************************
+void CTestAppConsole::ConstructL()
+
+    {
+    ResetNetworkSettings();
+    
+	iConsole = Console::NewL( KMainTitle, TSize(KConsFullScreen, KConsFullScreen) );
+	this->DisplayConsoleMenuL( KTxtMainInstructions );
+    }
+
+//*******************************************************************************
+// Method      : CTestAppConsole::~CTestAppConsole()
+// Purpose     : Destructor
+// Parameters  : 
+// Return Value: 
+//*******************************************************************************
+CTestAppConsole::~CTestAppConsole()
+    {	
+    Cancel();
+    delete iConsole;
+	delete iInstruct;
+    delete iMccInterface;
+    delete iMccInterfaceStub;
+    if ( iFeatTest )
+        {
+        delete iFeatTest;
+        }
+    }
+
+//*******************************************************************************
+// Method      : CTestAppConsole::ResetNetworkSettings()
+// Purpose     : 
+// Parameters  : 
+// Return Value: 
+//*******************************************************************************
+void CTestAppConsole::ResetNetworkSettings()
+    {
+    iNetsettings.iRemoteAddress.SetAddress( KInetAddrLoop );
+    iNetsettings.iRemoteAddress.SetPort( KDefaultRtpPort );
+    iNetsettings.iRemoteRtcpPort = KDefaultRtcpPort;
+    iNetsettings.iLocalAddress.SetAddress( KInetAddrAny );
+    iNetsettings.iLocalAddress.SetPort( KDefaultRtpPort );
+    iNetsettings.iLocalPublicAddress.SetAddress( KInetAddrAny );
+    iNetsettings.iLocalRtcpPort = KDefaultRtcpPort;
+    iNetsettings.iLocalPublicRtcpPort = KDefaultRtcpPort;
+    iNetsettings.iMediaQosValue = KDefaultMediaQos;
+    iNetsettings.iIapId = KTestIapId;
+    };
+
+//*******************************************************************************
+// Method      : CTestAppConsole::QueryNetworkSettings()
+// Purpose     : 
+// Parameters  : 
+// Return Value: 
+//*******************************************************************************
+void CTestAppConsole::QueryNetworkSettings()
+    {
+    TBuf16<80> line;
+    
+    iConsole->Printf( _L("\nQUERYING NETWORK SETTINGS") );
+    iConsole->Printf( _L("\nPress enter to use existing value") );
+    
+    TUint iap( KTestIapId );
+    TInt inputErr( 0 );
+    do 
+        {
+        iConsole->Printf( _L("\nINPUT IAPID: ") );
+    	GetStringFromConsole( line );
+    	if ( line.Length() != 0 )
+    	    {
+        	TLex lex( line );
+        	inputErr = lex.Val( iap );    	    
+    	    }
+        } while ( inputErr );
+    
+    iNetsettings.iIapId = iap;
+    }
+    
+//*******************************************************************************
+// Method      : CTestAppConsole::QueryIPAddress()
+// Purpose     : 
+// Parameters  : 
+// Return Value: 
+//*******************************************************************************
+void CTestAppConsole::QueryIPAddress()
+    {    
+    TBuf16<80> line;
+    
+    // Query IP address and parse it
+    TUint32 address;
+    RArray<TUint32> values;
+    TInt inputErr( 0 );
+    
+    iConsole->Printf( _L("\nINPUT IP (use dot as a separator): ") );
+    iConsole->Printf( _L("\nPress enter if IP not needed in tests\n\n") );
+    GetStringFromConsole( line );
+    	
+    if ( line.Length() != 0 )
+        {
+        TInt dotIndex( 0 );
+        TBool dotExist = ETrue;
+
+        while ( dotExist )
+            {
+            dotIndex = line.Locate( '.' );
+
+            // True if last attribute value
+            if( KErrNotFound == dotIndex  )
+                {
+                dotExist = EFalse;
+                dotIndex = line.Length();
+                }
+
+            TUint8 number;
+            TLex16 lex = line.Mid( 0, dotIndex );
+
+            inputErr = lex.Val( number, EDecimal );
+                
+            if ( !inputErr )
+                {
+                values.AppendL( number );
+                }
+                
+            if( dotExist )
+                {
+                line.Delete( 0, dotIndex + 1 );
+                }
+            }
+            
+        if ( !inputErr && values.Count() == 4 )
+            {
+            address = INET_ADDR( values[0], values[1], values[2], values[3] );
+            iNetsettings.iRemoteAddress.SetAddress( address );    
+            }
+	    }
+    }
+    
+//*******************************************************************************
+// Method      : CTestAppConsole::StartTesting()
+// Purpose     : start this AO 
+// Parameters  : 
+// Return Value: 
+//*******************************************************************************
+void CTestAppConsole::StartTesting()
+    {
+    DoRead();
+    }
+
+//*******************************************************************************
+// Method      : CTestAppConsole::DoRead()
+// Purpose     : get the user's option and send request to scheduler
+// Parameters  : 
+// Return Value: 
+//*******************************************************************************
+void CTestAppConsole::DoRead()
+    {
+	iConsole->Read( iStatus );
+	SetActive();
+    }
+
+//*******************************************************************************
+// Method      : CTestAppConsole::RunL()
+// Purpose     : 
+// Parameters  : 
+// Return Value: 
+//*******************************************************************************
+void CTestAppConsole::RunL()
+    {	
+	// According to current test case and direct the user's command
+	// to proper command handler.
+    ProcessMainInput();
+    }
+
+//*******************************************************************************
+// Method      : CTestAppConsole::DoCancel()
+// Purpose     : 
+// Parameters  : 
+// Return Value: 
+//*******************************************************************************
+void CTestAppConsole::DoCancel()
+    {
+	iConsole->ReadCancel();
+    }
+
+
+//*******************************************************************************
+// Method      : CTestAppConsole::DisplayConsoleMenu()
+// Purpose     : Display main or sub console menus for different test cases
+// Parameters  : TDesc &aInstructions
+// Return Value: void
+//*******************************************************************************
+
+void CTestAppConsole::DisplayConsoleMenuL( const TDesC &aInstructions )
+	{
+	if ( iInstruct )
+	    {
+	    delete iInstruct;
+	    iInstruct = NULL;
+	    }
+	
+	iInstruct = aInstructions.AllocL();
+	iConsole->ClearScreen();
+	iConsole->Write( *iInstruct );
+	}
+
+
+//*******************************************************************************
+// Method      : CTestAppConsole::ProcessMainInput()
+// Purpose     : Obtain user's option and decide which test case to run next.
+// Parameters  : 
+// Return Value: 
+//*******************************************************************************
+void CTestAppConsole::ProcessMainInput()
+	{
+    TBuf<80> line;
+	GetStringFromConsole(line);
+	
+	if ( line.Length() > 0 )
+	    {
+		TChar inputChar = line[0];
+		
+		TInt err( KErrNone );
+		TBool testsRun( ETrue );
+		switch( inputChar )
+			{
+			case '1':
+                err = RunInterfaceTests();
+			    break;
+			case '2':
+			    err = RunAudioControlTests();
+			    break;
+			case '3':
+			    err = RunRtcpTests();
+				break;
+			case '4':
+			    err = RunDtmfTests();
+				break;
+			case '5':
+			    err = RunAsyncFeatureTests();
+			    break;
+		    case 's':
+			    err = RunSecureTests();
+			    break;
+			case '0':
+				testsRun = EFalse;
+				CActiveScheduler::Stop();
+				break;
+			default:
+			    testsRun = EFalse;
+				DisplayMsg( KTxtWrongOption );
+				break;		
+			}
+	    
+        if ( err )
+            {
+            iConsole->Printf( _L("Some tests failed: %d, check logs\n"), err );
+            RDebug::Print( _L("\nSome tests failed: %d, check logs\n"), err );
+            }
+        else if ( testsRun )
+            {
+            iConsole->Printf( _L( "ALL TESTS OK\n" ) );
+            RDebug::Print( _L( "\nAll tests OK\n" ) );
+            }
+        else
+            {
+            
+            }
+	    }
+	
+	// Ready to get next input option.
+   	DoRead();
+	}
+
+
+//*******************************************************************************
+// Method      : CTestAppConsole::DisplayMsg()
+// Purpose     : Display testing message on screen
+// Parameters  : TDesC &
+// Return Value: 
+//*******************************************************************************
+void CTestAppConsole::DisplayMsg(const TDesC &aMsg)
+	{
+	iConsole->ClearScreen();
+	iConsole->Write( *iInstruct );
+	iConsole->Printf( KTxtLineBreak );
+	iConsole->Printf( aMsg );
+	iConsole->Printf( KTxtLineBreak );
+	}
+
+//*******************************************************************************
+// Method      : CTestAppConsole::GetAddrFromConsole()
+// Purpose     : 
+// Parameters  : 
+// Return Value: 
+//*******************************************************************************
+TKeyCode CTestAppConsole::GetStringFromConsole( TDes &aAddr )
+    {
+	// Get a line from console
+    TKeyCode input = EKeyNull;
+    const TInt start_pos = iConsole->WhereX();
+    aAddr.Zero();
+
+    // loop until descriptor full or EKeyEnter or EKeyEscape entered
+    do {
+        // get one character
+        input = iConsole->Getch();
+        // process it
+        if(input == EKeyBackspace  ||  input == EKeyDelete)
+            {
+            // backspace or delete
+            if(iConsole->WhereX() > start_pos)
+                {
+				iConsole->SetPos(iConsole->WhereX() - 1);
+				iConsole->ClearToEndOfLine();
+				if(aAddr.Length() > 0) 
+                    {
+					aAddr.SetLength(aAddr.Length() - 1);
+                    }
+                }
+            }
+        else
+            {
+            // other than backspace or delete
+            TChar ch(input);
+            if(ch.IsPrint())
+                {
+                aAddr.Append(ch);
+                iConsole->Printf(_L("%c"), input);
+                }
+            }   
+        } 
+    while(aAddr.Length() < aAddr.MaxLength()  &&  input != EKeyEnter  &&  input != EKeyEscape);
+
+    DisplayMsg( KTxtLineBreak );
+    return input;
+    }
+
+//*******************************************************************************
+// Method      : CTestAppConsole::RunAsyncFeatureTests()
+// Purpose     : Test the async Mcc Interface functions
+// Parameters  : 
+// Return Value: System wide error code
+//*******************************************************************************
+//
+TInt CTestAppConsole::RunAsyncFeatureTests()
+    {
+    QueryNetworkSettings();
+    TRAPD( err, MccInterfacePreambleL() );
+    
+    if ( err )
+        {
+        iConsole->Printf( _L("TESTSETUP FAILED: %d\n"), err );
+        RDebug::Print( _L("TESTSETUP FAILED: %d\n"), err );
+        return err;
+        }
+    
+    iFeatTest = CTestAsyncFeat::NewL( *iConsole, iNetsettings,
+        *iMccInterface, *iMccInterfaceStub );
+    TRAP( err, iFeatTest->DoRunAsyncFeatureTestsL() );
+    
+    //MccInterfacePostamble();
+    return err;
+    }
+
+//*******************************************************************************
+// Method      : CTestAppConsole::RunInterfaceTests()
+// Purpose     : Test the Mcc Interface functions
+// Parameters  : 
+// Return Value: System wide error code
+//*******************************************************************************
+//
+TInt CTestAppConsole::RunInterfaceTests()
+    {
+    TInt err( KErrNone );
+    
+    QueryNetworkSettings();
+    QueryIPAddress();
+    
+    TRAP( err, MccInterfacePreambleL() );
+    if ( KErrNone != err )
+        {
+        iConsole->Printf( _L("TESTSETUP FAILED: %d\n"), err );
+        RDebug::Print( _L("TESTSETUP FAILED: %d\n"), err );
+        return err;
+        }
+    
+    CTestInterface* intTest = CTestInterface::NewL( *iConsole, iNetsettings,
+        *iMccInterface, *iMccInterfaceStub );
+    CleanupStack::PushL( intTest );
+    
+    TRAP( err, intTest->DoRunInterfaceTestsL() );
+
+    CleanupStack::PopAndDestroy( intTest );
+    MccInterfacePostamble();
+    return err;
+    }
+
+//*******************************************************************************
+// Method      : CTestAppConsole::RunAudioControlTests()
+// Purpose     : Test the Mcc audio control functions
+// Parameters  : 
+// Return Value: System wide error code
+//*******************************************************************************
+//
+TInt CTestAppConsole::RunAudioControlTests()
+    {
+    QueryNetworkSettings();
+    TInt err( KErrNone );
+    TRAP( err, MccInterfacePreambleL() );
+    if ( KErrNone != err )
+        {
+        iConsole->Printf( _L("TESTSETUP FAILED: %d\n"), err );
+        RDebug::Print( _L("TESTSETUP FAILED: %d\n"), err );
+        return err;
+        }
+    
+    CTestAudioControl* audio = CTestAudioControl::NewL( *iConsole, iNetsettings,
+        *iMccInterface, *iMccInterfaceStub );
+    CleanupStack::PushL( audio );
+    
+    TRAP( err, audio->DoRunAudioControlTestsL() );
+    
+    CleanupStack::PopAndDestroy( audio );
+    MccInterfacePostamble();
+    return err;
+    }
+
+
+//*******************************************************************************
+// Method      : CTestAppConsole::RunDtmfTests()
+// Purpose     : Test the Mcc RTCP sending
+// Parameters  : 
+// Return Value: System wide error code
+//*******************************************************************************
+//
+TInt CTestAppConsole::RunDtmfTests()
+    {
+    TInt err( KErrNone );
+    
+    QueryNetworkSettings();
+    
+    CTestDtmf* dtmf = CTestDtmf::NewL( *iConsole, iNetsettings );
+    CleanupStack::PushL( dtmf );
+    
+    TRAP( err, dtmf->DoRunDtmfTestsL() );
+
+    CleanupStack::PopAndDestroy( dtmf );
+    return err;
+    }
+
+
+//*******************************************************************************
+// Method      : CTestAppConsole::RunRtcpTests()
+// Purpose     : Test the Mcc DTMF features
+// Parameters  : 
+// Return Value: System wide error code
+//*******************************************************************************
+//
+TInt CTestAppConsole::RunRtcpTests()
+    {
+    TInt err( KErrNone );
+    
+    QueryNetworkSettings();
+    
+    CTestRtcp* rtcp = CTestRtcp::NewL( *iConsole, iNetsettings );
+    CleanupStack::PushL( rtcp );
+    
+    TRAP( err, rtcp->DoRunRtcpTestsL() );
+
+    CleanupStack::PopAndDestroy( rtcp );
+    return err;
+    }
+
+// ---------------------------------------------------------------------------
+// CTestAppConsole::MccInterfacePreambleL
+// 
+// ---------------------------------------------------------------------------
+//
+void CTestAppConsole::MccInterfacePreambleL()
+    {
+    iMccInterfaceStub = CMccInterfaceStub::NewL();
+    iMccInterface = CMccInterface::NewL( *iMccInterfaceStub );
+    };
+
+// ---------------------------------------------------------------------------
+// CTestAppConsole::MccInterfacePostamble
+// 
+// ---------------------------------------------------------------------------
+//
+void CTestAppConsole::MccInterfacePostamble()
+    {
+    delete iMccInterface;
+    iMccInterface = NULL;
+    delete iMccInterfaceStub;
+    iMccInterfaceStub = NULL;
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// 
+// ---------------------------------------------------------------------------
+//
+TInt CTestAppConsole::RunSecureTests()
+    {
+    TInt err( KErrNone );
+    
+    QueryNetworkSettings();
+    
+    TRAP( err, MccInterfacePreambleL() );
+    if ( KErrNone != err )
+        {
+        iConsole->Printf( _L("TESTSETUP FAILED: %d\n"), err );
+        RDebug::Print( _L("TESTSETUP FAILED: %d\n"), err );
+        return err;
+        }
+    
+    CTestSecure* secTest = CTestSecure::NewL( *iConsole, iNetsettings,
+        *iMccInterface, *iMccInterfaceStub );
+    CleanupStack::PushL( secTest );
+    
+    TRAP( err, secTest->DoRunSecureTestsL() );
+
+    CleanupStack::Pop( secTest );
+    MccInterfacePostamble();
+
+    return err;
+    }
+