diff -r 000000000000 -r af10295192d8 networksecurity/tls/ts_tls/TlsTestStep1.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/networksecurity/tls/ts_tls/TlsTestStep1.cpp Tue Jan 26 15:23:49 2010 +0200 @@ -0,0 +1,467 @@ +// Copyright (c) 2003-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: +// + +// EPOC includes +#include + +#include +#include +#include +#include +#include +#include + +#include "T_TLS_test.h" + +#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS +#include +#endif + + +// Test system includes +#include +#include + +#include "TestSuiteTls.h" +#include "TlsTestStep1.h" + +#include "T_TLS_cntrl.h" + + +#include "tlsconnection.h" + +GLREF_C void CommInitL(); + +_LIT( KTxtTLS, "T_TLS" ); + +CTestStepT_Tls::CTestStepT_Tls() +/** + * Constructor. + * Store the name of this test case + */ +{ + iTestStepName = _L("t_tls"); +} + +// destructor +CTestStepT_Tls::~CTestStepT_Tls() +{ +} + + +TVerdict CTestStepT_Tls::doTestStepL( ) +/** + * This is the test code for t_tls. + */ +{ + // if the test has not left yet it must be a Pass + iTestStepResult = EPass; + + TRAPD(error,CommInitL()); // init needed comms libs + __ASSERT_ALWAYS(!error,User::Panic(KTxtTLS,error)); + + TRAP(error,TLSTestL()); // more initialization, then do example + __ASSERT_ALWAYS(!error,User::Panic(KTxtTLS,error)); + + return iTestStepResult; +} + + +// constructor +CTlsRenegotiateTest::CTlsRenegotiateTest() +{ + // store the name of this test case + iTestStepName = _L("renegotiate"); + + iTestType = TLS_TEST_RENEGOTIATE; +} + +TVerdict CTlsRenegotiateTest::doTestStepL( ) +{ + return CTestStepT_Tls::doTestStepL( ); +} + +// constructor +CTlsCancelRecvTest::CTlsCancelRecvTest() +/** + * Store the name of this test case. + */ +{ + iTestStepName = _L("CancelRecv"); + + iTestType = TLS_TEST_CANCEL_RECV; +} + +TVerdict CTlsCancelRecvTest::doTestStepL( ) +{ + return CTestStepT_Tls::doTestStepL( ); +} + + +CTlsOldGetOptsTest::CTlsOldGetOptsTest() +/** + * Constructor. + * Store the name of this test case. + */ +{ + iTestStepName = _L("oldgetOpts"); + + iTestType = TLS_TEST_OLD_GETOPTS; +} + +TVerdict CTlsOldGetOptsTest::doTestStepL( ) +{ + return CTestStepT_Tls::doTestStepL( ); +} + +CTlsOpenConnection::CTlsOpenConnection() +/** + * Constructor. + * Store the name of this test case. + */ +{ + iTestStepName = _L("OpenConnection"); +} + +TVerdict CTlsOpenConnection::doTestStepL( ) +{ + _LIT(KSSLProtocol,"tls1.0"); + TRequestStatus Status; + + TRAPD(error,CommInitL()); // init needed comms libs + __ASSERT_ALWAYS(!error,User::Panic(KTxtTLS,error)); + + // Create an active scheduler + CActiveScheduler* myActiveScheduler; + myActiveScheduler = new(ELeave) CActiveScheduler(); + CleanupStack::PushL( myActiveScheduler ); + CActiveScheduler::Install( myActiveScheduler ); + + // get address and port number + TPtrC addr = iAddress; + TESTL(GetStringFromConfig(KSectionName, KCfgIPAddress, addr)); + iAddress.Copy( addr ); + + TESTL(GetIntFromConfig(KSectionName, KCfgIPPort, iPortNum)); + + // Connect the socket server + User::LeaveIfError( iTlsSuite->iSocketServer.Connect() ); + + // Open the socket + User::LeaveIfError( iInetAddr.Input( iAddress )); + iInetAddr.SetPort( iPortNum ); + + Log(_L("Connecting to %s:%d"), iAddress.PtrZ(), iPortNum ); + User::LeaveIfError( iTlsSuite->iSocket.Open( iTlsSuite->iSocketServer, KAfInet, KSockStream, KProtocolInetTcp ) ); + + // connect the socket + iTlsSuite->iSocket.Connect( iInetAddr, Status ); + User::WaitForRequest(Status); + + Log(_L("Connect result is %d"), Status.Int() ); + TESTEL(Status==KErrNone, Status.Int()); + + User::LeaveIfNull(iTlsSuite->iSecureSocket = CSecureSocket::NewL( iTlsSuite->iSocket,KSSLProtocol())); + + // Remove objects from the cleanup stack + CleanupStack::PopAndDestroy( 1 ); // myActiveScheduler, + + return EPass; +} + +CTlsCloseConnection::CTlsCloseConnection() +/** + * Constructor. + * Store the name of this test case. + */ +{ + iTestStepName = _L("CloseConnection"); +} + +TVerdict CTlsCloseConnection::doTestStepL( ) +{ + Log(_L("Disconnecting")); + iTlsSuite->iSocket.Close() ; + iTlsSuite->iSocketServer.Close(); + + delete iTlsSuite->iSecureSocket; + + return EPass; +} + + + +void CTestStepT_Tls::TLSTestL() + { + __UHEAP_MARK; + + CActiveScheduler* myActiveScheduler; + CController* myController; + + // Create an active scheduler + myActiveScheduler = new(ELeave) CActiveScheduler(); + CleanupStack::PushL( myActiveScheduler ); + CActiveScheduler::Install( myActiveScheduler ); + + // Create the controller active object + myController = CController::NewL(); + + // Initiate the controllers timer request + myController->Start( this ); + + // Start the scheduler + myActiveScheduler->Start(); + + delete myController; + + // Remove objects from the cleanup stack + CleanupStack::PopAndDestroy( 1 ); // myActiveScheduler, + __UHEAP_MARKEND; + + } + + +CTlsFailSuiteSelection::CTlsFailSuiteSelection() +/** + * Constructor. + * Store the name of this test case. + */ +{ + iTestStepName = _L("FailSuiteSelection"); +} + +TVerdict CTlsFailSuiteSelection::doTestStepL( ) +{ + _LIT(KSSLProtocol,"tls1.0"); + _LIT(KFSSectionName,"FailSuiteSelection"); + TRequestStatus Status; + TVerdict result = EFail; + + TRAPD(error,CommInitL()); // init needed comms libs + __ASSERT_ALWAYS(!error,User::Panic(KTxtTLS,error)); + + // Create an active scheduler + CActiveScheduler* myActiveScheduler; + myActiveScheduler = new(ELeave) CActiveScheduler(); + CleanupStack::PushL( myActiveScheduler ); + CActiveScheduler::Install( myActiveScheduler ); + + // get address, port number & cipher suite + TPtrC addr = iAddress; + TESTL(GetStringFromConfig(KSectionName, KCfgIPAddress, addr)); + iAddress.Copy( addr ); + TESTL(GetIntFromConfig(KSectionName, KCfgIPPort, iPortNum)); + TPtrC PtrResult; + TPtrC* res=&PtrResult; + TESTL(GetStringFromConfig(KFSSectionName, KCfgCipherSuites, PtrResult)); + iCipherSuites.Copy( PtrResult ); + Log( _L("CipherSuites: %S"), res); + + // Connect the socket server + User::LeaveIfError( iTlsSuite->iSocketServer.Connect() ); + + // configure address and port + User::LeaveIfError( iInetAddr.Input( iAddress )); + iInetAddr.SetPort( iPortNum ); + + // Open the socket + Log(_L("Connecting to %s:%d"), iAddress.PtrZ(), iPortNum ); + User::LeaveIfError( iTlsSuite->iSocket.Open( iTlsSuite->iSocketServer, KAfInet, KSockStream, KProtocolInetTcp ) ); + + // connect the socket + iTlsSuite->iSocket.Connect( iInetAddr, Status ); + User::WaitForRequest(Status); + Log(_L("Connect result is %d"), Status.Int() ); + TESTEL(Status==KErrNone, Status.Int()); + + // create a secureSocket + User::LeaveIfNull(iSecureSocket = CSecureSocket::NewL( iTlsSuite->iSocket,KSSLProtocol())); + + // configure invalid cipher suite + TBuf8 cipherBuf; + TBuf8<3> tempBuf; + TInt i; + TLex8 myLex; + TInt cCount = 0; // used as an array index into the cipherBuf descriptor + TInt ret; + TInt value; + + cipherBuf.SetLength( iCipherSuites.Length() ); + + for ( i=0; iSetAvailableCipherSuites( cipherBuf ); + + // this should fail with KErrNotSupported + if ( ret == KErrNotSupported ) + { + result = EPass; + Log( _L("Test passes as because SetAvailableCipherSuites() returned KErrNotSupported") ); + Log( _L("when setting cipher suites=%S"), res); + } + else + { + Log( _L("Test failed because SetAvailableCipherSuites() returned %d"),ret ); + Log( _L("with invalid suite %S"), res); + result = EFail; + } + + iTlsSuite->iSocket.Close() ; + iTlsSuite->iSocketServer.Close(); + + // Remove objects from the cleanup stack + CleanupStack::PopAndDestroy( 1 ); // myActiveScheduler, + + delete iSecureSocket; + + return result; +} + + +/** +Constructor. +Store the name of this test case +*/ +CTestStepDialogMode_Tls::CTestStepDialogMode_Tls() +{ + iTestStepName = _L("t_tls_DialogMode"); +} + +/** + This is the test code for CTestStepDialogMode_Tls +*/ +TVerdict CTestStepDialogMode_Tls::doTestStepL( ) +{ + __UHEAP_MARK; + + iTestStepResult = EPass; + + Log(_L("Testing dialog mode change")); + + // Create and install active scheduler + CActiveScheduler* myActiveScheduler; + myActiveScheduler = new(ELeave) CActiveScheduler(); + CleanupStack::PushL( myActiveScheduler ); + CActiveScheduler::Install( myActiveScheduler ); + + RSocket sock; + + MSecureSocket* pSecSock = CTlsConnection::NewL(sock, KProtocolVerSSL30); + + TDialogMode dlgMode; + TInt nErr; + + //======================================================================================== + //== Test setting dialog mode via MSecureSocket::SetDialogMode() + //== In this case we will use EDialogModeUnattended, EDialogModeAttended enum + //======================================================================================== + + //-- 1. test default dialog mode, it shall be EDialogModeAttended + dlgMode = pSecSock->DialogMode(); + TESTL(dlgMode == EDialogModeAttended); + + //-- 2. change dialog mode, check if has been changed correctly + nErr = pSecSock->SetDialogMode(EDialogModeUnattended); + TESTL(nErr == KErrNone); + + dlgMode = pSecSock->DialogMode(); + TESTL(dlgMode == EDialogModeUnattended); + + //-- 3. change dialog mode to a different value, check if has been changed correctly + nErr = pSecSock->SetDialogMode(EDialogModeAttended); + TESTL(nErr == KErrNone); + + dlgMode = pSecSock->DialogMode(); + TESTL(dlgMode == EDialogModeAttended); + + //-- 4. try to pass invalid value as a dialog mode + const TUint KInvalidModeValue = 0xdead; + nErr = pSecSock->SetDialogMode(static_cast(KInvalidModeValue)); + TESTL(nErr == KErrArgument); + + + //======================================================================================== + //== Test setting dialog mode via MSecureSocket::SetOpt() + //== In this case KSSLDialogUnattendedMode, KSSLDialogAttendedMode constants will be used + //== Check also their consistency with TDialogMode enum values + //======================================================================================== + + TInt nOption=-1; + + //-- Set dialog mode to EDialogModeUnattended via MSecureSocket::SetOpt() + + nErr = pSecSock->SetOpt(KSoDialogMode,KSolInetSSL,KSSLDialogUnattendedMode); + TESTL(nErr == KErrNone); + + nErr = pSecSock->GetOpt(KSoDialogMode,KSolInetSSL,nOption); + TESTL(nErr == KErrNone); + TESTL((TUint)nOption == KSSLDialogUnattendedMode); + + dlgMode = pSecSock->DialogMode(); + TESTL(dlgMode == EDialogModeUnattended); //-- consistency check + + + //-- Set dialog mode to EDialogModeAttended via MSecureSocket::SetOpt() + + nErr = pSecSock->SetOpt(KSoDialogMode,KSolInetSSL,KSSLDialogAttendedMode); + TESTL(nErr == KErrNone); + + nErr = pSecSock->GetOpt(KSoDialogMode,KSolInetSSL,nOption); + TESTL(nErr == KErrNone); + TESTL((TUint)nOption == KSSLDialogAttendedMode); + + dlgMode = pSecSock->DialogMode(); + TESTL(dlgMode == EDialogModeAttended); //-- consistency check + + delete pSecSock; + + + // Remove objects from the cleanup stack + CleanupStack::PopAndDestroy( 1 ); // myActiveScheduler, + __UHEAP_MARKEND; + + return iTestStepResult; +} + + + + +