networksecurity/tls/ts_tls/TlsTestSection2.cpp
changeset 0 af10295192d8
child 71 a800ea6cb454
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/networksecurity/tls/ts_tls/TlsTestSection2.cpp	Tue Jan 26 15:23:49 2010 +0200
@@ -0,0 +1,186 @@
+// 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:
+// This contains TLS test section 2
+// 
+//
+
+// EPOC includes
+#include <e32base.h>
+
+// from t_tls.cpp
+#include <e32cons.h>
+#include <c32comm.h>
+#include <f32file.h>
+#include <es_sock.h>
+
+#include <metadatabase.h>
+#include <commsdattypesv1_1.h>
+using namespace CommsDat;
+#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include <commsdattypesv1_1_partner.h>
+#endif
+#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include <commsdattypeinfov1_1_internal.h>
+#endif
+
+#include <securesocketinterface.h>
+#include <securesocket.h>
+
+// Test system includes
+#include <networking/log.h>
+#include <networking/teststep.h>
+
+#include "T_TLS_test.h"
+#include "TestSuiteTls.h"
+#include "TlsTestSection2.h"
+#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include <securesocket_internal.h>
+#endif
+
+GLREF_C void CommInitL();
+
+
+CTlsTestSection2_1::CTlsTestSection2_1() :
+	iCommDbModified(EFalse)
+/** 
+ * Constructor.
+ * Store the name of this test case.
+ */
+
+{
+	iTestStepName = _L("tls_TestSection2_1");
+}
+
+
+CTlsTestSection2_1::~CTlsTestSection2_1()
+/**
+ * Destructor
+ */
+{
+}
+
+void CTlsTestSection2_1::ModifyCommDbL(const TDesC& aProtocolName, TBool aBreak)
+/**
+ * @test Create a special CommDb Database for this test 
+ */
+    {
+	if (aBreak)
+		{
+		Log(_L("Changing CommDb ssladaptor to non-existent one"));
+		}
+	else if (!iCommDbModified)
+		{
+		Log(_L("Attempt to Changing CommDb ssladaptor back to original when not changed"));
+		User::Leave(KErrGeneral);
+		}
+	else
+		{
+		Log(_L("Changing CommDb ssladaptor back to original"));
+		}
+
+	// Create new session to CommsDat
+#ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+	CMDBSession* session = CMDBSession::NewL(KCDVersion1_2);
+#else
+	CMDBSession* session = CMDBSession::NewL(KCDVersion1_2);
+#endif
+	CleanupStack::PushL(session);
+	CCDSecureSocketRecord* ptrRecord = static_cast<CCDSecureSocketRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdSSProtoRecord));
+	CleanupStack::PushL(ptrRecord);
+	ptrRecord->iSSProtoName = aProtocolName;
+	User::LeaveIfError(ptrRecord->FindL(*session));
+
+	if (aBreak)
+		{
+		// need to read existing value before updating value
+		iOldSslAdaptor = ptrRecord->iSSProtoLibrary;
+
+		ptrRecord->iSSProtoLibrary = KBadSslLibrary;	
+		}
+	else
+		{
+		ptrRecord->iSSProtoLibrary = iOldSslAdaptor;
+		}
+
+	ptrRecord->ModifyL(*session);
+	iCommDbModified = aBreak;
+
+	CleanupStack::PopAndDestroy(ptrRecord);	
+	CleanupStack::PopAndDestroy(session);
+	}
+
+// This is the test code for testing use of commdb-specified adaptor
+// The script has loaded a commdb with an invalid ProtoLibrary in the 
+// SecureSocketTable. So when we attempt to open a secure socket we 
+// should get KErrNotFound
+TVerdict CTlsTestSection2_1::doTestStepL( )
+{
+	Log(_L("Starting Bad SSL Adaptor test"));
+
+	// if the test has not left yet it must be a Pass 
+	iTestStepResult = EPass;
+
+	__UHEAP_MARK;
+
+	// Create an active scheduler
+	CActiveScheduler* myActiveScheduler = new(ELeave) CActiveScheduler();
+	CleanupStack::PushL( myActiveScheduler );
+	CActiveScheduler::Install( myActiveScheduler );
+
+	TRAPD(error, CommInitL()); // init needed comms libs
+	TESTEL(error == KErrNone, error);
+
+	// Connect the socket server
+	RSocketServ socketServ;
+	error = socketServ.Connect();
+	TESTEL(error == KErrNone, error);
+	CleanupClosePushL(socketServ);
+
+	// Open a socket
+	RSocket socket;
+	error = socket.Open( socketServ, KAfInet, KSockStream, KProtocolInetTcp );
+	TESTEL(error == KErrNone, error);
+	CleanupClosePushL(socket);
+
+	// now currupt the ssladaptor to force failure
+	ModifyCommDbL(KDefCfgProtocol, ETrue);
+
+	Log(_L("Creating a secure socket"));
+	CSecureSocket* secureSocket = NULL;
+	TRAP(error, secureSocket = CSecureSocket::NewL( socket, KDefCfgProtocol ) );
+	TPtrC errorText = EpocErrorToText(error);
+	Log(_L("CSecureSocket::NewL returned %S"), &errorText);
+	TESTE(KErrNotFound == error, error);
+	if (KErrNone == error)
+		{
+		secureSocket->Close();
+		delete secureSocket;
+		}
+
+	// reset the ssladaptor
+	ModifyCommDbL(KDefCfgProtocol, EFalse);
+
+	CleanupStack::PopAndDestroy(); // socket
+	CleanupStack::PopAndDestroy(); // socketServ
+
+	CActiveScheduler::Install( NULL );
+	CleanupStack::PopAndDestroy( myActiveScheduler );
+
+	// unload the securesocket library
+	CSecureSocketLibraryLoader::Unload();
+	
+	__UHEAP_MARKEND;
+
+	return iTestStepResult;
+}