diff -r 000000000000 -r af10295192d8 networksecurity/tlsprovider/Test/tlstest2/delayedgetsessionstep.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/networksecurity/tlsprovider/Test/tlstest2/delayedgetsessionstep.cpp Tue Jan 26 15:23:49 2010 +0200 @@ -0,0 +1,113 @@ +// 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 delayedgetsessionstep.cpp + @internalTechnology +*/ +#include "delayedgetsessionstep.h" +#include + +#define KServer2 _L8("192.168.10.11") +#define KSessionId4 _L8("444444444455555555556666666666") +#define KSessionId2 _L8("222222222233333333334444444444") + +CDelayedGetSessionStep::CDelayedGetSessionStep() + { + SetTestStepName(KDelayedGetSessionStep); + } + +TVerdict CDelayedGetSessionStep::doTestStepL() + { + TInt sessionDelay; + sessionDelay = ReadGetSessionDelayL(); + + // first we have to retrieve the available cipher suites + TInt err = GetCipherSuitesL(); + TInt sessionIdLength(0) ; + + CTlsCryptoAttributes* tlsCryptoAttributes = Provider()->Attributes(); + + CX509Certificate* cert = NULL; + err = VerifyServerCertificateL(cert); + delete cert; // don't really need the cert + + err = CreateSessionL(); + + // ensure we succeeded + if (err != KErrNone) + { + INFO_PRINTF2(_L("Failed! Create Session failed! (Error %d)"), err); + SetTestStepResult(EFail); + } + + HBufC8* keyExMessage = NULL; + err = ClientKeyExchange(keyExMessage); + + if (err != KErrNone) + { + INFO_PRINTF2(_L("Failed! Key exchange failed! (Error %d)"), err); + SetTestStepResult(EFail); + } + CleanupStack::PushL(keyExMessage); + + // Call ServerFinished to do the chache + // derive the premaster secret from the key exchange method + INFO_PRINTF1(_L("Deriving master secret.")); + HBufC8* premaster = DerivePreMasterSecretL(*keyExMessage); + CleanupStack::PopAndDestroy(keyExMessage); + + // compute the master secret from the premaster. + CleanupStack::PushL(premaster); + HBufC8* master = ComputeMasterSecretL(*premaster); + CleanupStack::PopAndDestroy(premaster); + CleanupStack::PushL(master); + + // do the caching + ValidateServerFinishL(*master); + + CleanupStack::PopAndDestroy(master); + + err = VerifyGetSessionL(tlsCryptoAttributes->iSessionNameAndID.iServerName, sessionIdLength); + // case A + if (err != KErrNone || sessionIdLength == 0) + { + INFO_PRINTF1(_L("Case A Failed! GetSession failed!")); + SetTestStepResult(EFail); + return TestStepResult(); + } + + RTimer timer; + TRequestStatus timerStatus; + timer.CreateLocal(); + TTimeIntervalMicroSeconds32 waitTime( 1000000*(sessionDelay)); + timer.After( timerStatus, waitTime); + User::WaitForRequest(timerStatus); + timer.Close(); + + err = 0; + sessionIdLength = 0; + + err = VerifyGetSessionL(tlsCryptoAttributes->iSessionNameAndID.iServerName, sessionIdLength); + // case B, delay should have caused session to be cleared. + if ( sessionIdLength != 0) + { + INFO_PRINTF1(_L("Case B Failed! GetSession failed!")); + SetTestStepResult(EFail); + } + + return TestStepResult(); + } +