--- /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 <tlsprovinterface.h>
+
+
+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();
+
+ }
+