diff -r 000000000000 -r af10295192d8 networksecurity/tlsprovider/Test/tlstest2/multicancelstep.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/networksecurity/tlsprovider/Test/tlstest2/multicancelstep.cpp Tue Jan 26 15:23:49 2010 +0200 @@ -0,0 +1,160 @@ +// Copyright (c) 2008-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: +// + +/** + @file multicancelstep.cpp + @internalTechnology +*/ +#include "multicancelstep.h" +#include + + +CMultiCancelStep::CMultiCancelStep() + { + SetTestStepName(KMultiCancelStep); + } + +TVerdict CMultiCancelStep::doTestStepL() + { + INFO_PRINTF1(_L("Calling TLS Provider to fetch cipher suites.")); + + // Gets cipher suite with cancellation to increase test code coverage. + TInt err = GetCipherSuitesWithCancelL(); + if (err != KErrNone && err != KErrCancel) + { + INFO_PRINTF2(_L("Unnexpected error when retrieving supported cipher suites! (with cancellation) (Error %d)"), err); + SetTestStepResult(EFail); + return TestStepResult(); + } + + // first we have to retrieve the available cipher suites + err = 0; + err = GetCipherSuitesL(); + + if (err != KErrNone) + { + INFO_PRINTF2(_L("Failed! Cannot retrieve supported cipher suites! (Error %d)"), + err); + SetTestStepResult(EFail); + return TestStepResult(); + } + + // verifies certificate if is not a PSK cipher suite + if( !UsePsk() ) + { + // we have to verify the server certificate, to supply the certificate + // and its parameters to the TLS provider. + + INFO_PRINTF1(_L("Calling TLS Provider to verify server certificate, followed of cancellation of request.")); + + CX509Certificate* cert = NULL; + + // Important part of the test: cancellation + err = VerifyServerCertificateWithCancelL(cert); + delete cert; + + // make sure it returned was cancelled. + if (err != KErrCancel) + { + INFO_PRINTF2(_L("Failed! Server Certificate cancelled returned incorrect Error: %d"), + err); + SetTestStepResult(EFail); + return TestStepResult(); + } + + // Reissue same request but this time it does not cancel request. + err = VerifyServerCertificateL(cert); + delete cert; + + // make sure it completed sucessfully. + if (err != KErrNone) + { + INFO_PRINTF2(_L("Failed! Server Certificate did not verify correctly! (Error %d)"), + err); + SetTestStepResult(EFail); + return TestStepResult(); + } + } + + INFO_PRINTF1(_L("Creating TLS Session.")); + // now, create a session with followed of a cancel of request + err = CreateSessionWithCancelL(); + if (err != KErrCancel) + { + INFO_PRINTF2(_L("Failed! CreateSession cancelled returned incorrect Error: %d"), + err); + SetTestStepResult(EFail); + return TestStepResult(); + } + + // now, create a session with the parameters set in the preamble + err = CreateSessionL(); + + // Ensure we succeeded + if (err != KErrNone) + { + INFO_PRINTF2(_L("Failed! Create Session failed! (Error %d)"), err); + SetTestStepResult(EFail); + return TestStepResult(); + } + + INFO_PRINTF1(_L("Calling TLS session key exchange with cancellation.")); + HBufC8* keyExMessage = NULL; + + // Important part of the test: cancellation + err = ClientKeyExchangeWithCancel(keyExMessage); + + if (err != KErrCancel) + { + INFO_PRINTF2(_L("Client Key Exchange cancellation returned incorrect Error %d)"), err); + delete keyExMessage; + SetTestStepResult(EFail); + return TestStepResult(); + } + + // Makes same request but this time does not cancel it + err = ClientKeyExchange(keyExMessage); + + if (err != KErrNone) + { + INFO_PRINTF2(_L("Failed! Key exchange failed! (Error %d)"), err); + delete keyExMessage; + SetTestStepResult(EFail); + return TestStepResult(); + } + + INFO_PRINTF1(_L("Deriving premaster secret.")); + + // derive the premaster secret from the key exchange method + CleanupStack::PushL(keyExMessage); + HBufC8* premaster = DerivePreMasterSecretL(*keyExMessage); + CleanupStack::PopAndDestroy(keyExMessage); + + INFO_PRINTF1(_L("Deriving master secret.")); + + // compute the master secret from the premaster. + CleanupStack::PushL(premaster); + HBufC8* master = ComputeMasterSecretL(*premaster); + CleanupStack::PopAndDestroy(premaster); + CleanupStack::PushL(master); + + ValidateServerFinishedL(*master); + + CleanupStack::PopAndDestroy(master); + + return TestStepResult(); + + } +