networksecurity/tlsprovider/Test/tlstest2/entrystatusstep.cpp
changeset 0 af10295192d8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/networksecurity/tlsprovider/Test/tlstest2/entrystatusstep.cpp	Tue Jan 26 15:23:49 2010 +0200
@@ -0,0 +1,237 @@
+// 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 entrystatusstep.cpp
+ @internalTechnology	
+*/
+
+#include "entrystatusstep.h"
+#include <x509cert.h>
+
+// Default delay before checking state
+const TInt KStateCheckDelay = 1000000;
+
+CEntryStatusStep::CEntryStatusStep()
+	{
+	SetTestStepName(KEntryStatus);
+	}
+	
+TVerdict CEntryStatusStep::doTestStepPreambleL()
+	{
+	InitializeL();
+	SetTestStepResult(EPass);
+
+	_LIT(KRequestChangeNotify, "requestchangenotify");
+	_LIT(KCertEntryState, "state");
+	_LIT(KNewEntryString, "ENewEntry");
+	_LIT(KEntryAwaitingApprovalString, "EEntryAwaitingApproval");
+	_LIT(KEntryDeniedString, "EEntryDenied");
+	_LIT(KEntryApprovedString, "EEntryApproved");
+	_LIT(KCancelPoint, "cancelpoint");
+	_LIT(KOpen, "Open");	
+	_LIT(KGetState, "GetStateL");
+	_LIT(KChangeNotify, "ChangeNotify");
+
+	TPtrC cancelPoint;
+	if (!GetStringFromConfig(ConfigSection(), KCancelPoint, cancelPoint))
+		{
+		iCancelPoint = ENoCancel;
+		}
+	else if (cancelPoint.CompareF(KOpen) == 0)
+		{
+		iCancelPoint = EAfterOpen;
+		INFO_PRINTF2(_L("This test step will call Cancel() on the cert cache session after %S()"),&KOpen);
+		}
+	else if (cancelPoint.CompareF(KGetState) == 0)
+		{
+		iCancelPoint = EAfterGetState;
+		INFO_PRINTF2(_L("This test step will call Cancel() on the cert cache session after %S()"),&KGetState);
+		}
+	else if (cancelPoint.CompareF(KChangeNotify) == 0)
+		{
+		iCancelPoint = EAfterChangeNotify;
+		INFO_PRINTF2(_L("This test step will call Cancel() on the cert cache session after %S()"),&KChangeNotify);
+		}
+	
+	// Check if this step should wait for change notification.
+	if (!GetBoolFromConfig(ConfigSection(), KRequestChangeNotify, iRequestChangeNotify))
+		{
+		iRequestChangeNotify = EFalse;
+		}
+	else if (iRequestChangeNotify)
+		{
+		if (iCancelPoint == ENoCancel)
+			{
+			INFO_PRINTF1(_L("This test step will wait for change notification."));
+			}
+		else if (iCancelPoint != EAfterChangeNotify)
+			{
+			INFO_PRINTF1(_L("Invalid test config, requesting notification but cancelling earlier."));
+			SetTestStepResult(EAbort);
+			return EAbort;
+			}
+
+		_LIT(KRequirePendingApproval, "requirependingapproval");
+		if (!GetBoolFromConfig(ConfigSection(), KRequirePendingApproval, iRequirePendingApproval))
+			{
+			iRequirePendingApproval = ETrue;
+			}
+		if (iRequirePendingApproval)
+			{
+			INFO_PRINTF1(_L("This step will fail if the state is not initially EEntryAwaitingApproval."));
+			}
+		else
+			{
+			INFO_PRINTF1(_L("Notification will be requested even if the state is not initially EEntryAwaitingApproval."));
+			}
+		}
+
+	TPtrC expectedState;
+
+	if (!GetStringFromConfig(ConfigSection(), KCertEntryState, expectedState))
+		{
+		INFO_PRINTF1(_L("Could not read expected certificate approval state from INI, abort."));
+		SetTestStepResult(EAbort);
+		}
+	else
+		{
+		if (expectedState.CompareF(KNewEntryString) == 0)
+			{
+			iExpectedState = ENewEntry;
+			INFO_PRINTF2(_L("Certificate state is expected to be %S."),&KNewEntryString);
+		 	}
+		else if (expectedState.CompareF(KEntryAwaitingApprovalString) == 0)
+			{
+			iExpectedState = EEntryAwaitingApproval;
+			INFO_PRINTF2(_L("Certificate state is expected to be %S."),&KEntryAwaitingApprovalString);
+			}
+		else if (expectedState.CompareF(KEntryApprovedString) == 0)
+			{
+			iExpectedState = EEntryApproved;
+			INFO_PRINTF2(_L("Certificate state is expected to be %S."),&KEntryApprovedString);
+			}
+		else if (expectedState.CompareF(KEntryDeniedString) == 0)
+			{
+			iExpectedState = EEntryDenied;
+			INFO_PRINTF2(_L("Certificate state is expected to be %S."),&KEntryDeniedString);
+			}
+		else
+			{
+			INFO_PRINTF1(_L("Invalid expected certificate state, abort."));
+			SetTestStepResult(EAbort);
+			}
+		}
+	return TestStepResult();
+	}
+	
+TVerdict CEntryStatusStep::doTestStepL()
+	{
+	// don't continue if previous phases have aborted
+	if (TestStepResult() != EPass)
+		{
+		return TestStepResult();
+		}
+
+	// Delay briefly to ensure that any update entry steps in concurrent tests can
+	// check first (which sets the state to EAwaitingApproval.)
+	User::After(KStateCheckDelay);
+
+	// Cancel if set to do so before checking state.
+	if (iCancelPoint == EAfterOpen)
+		{
+		INFO_PRINTF1(_L("Cancelling..."));
+		Session().Cancel();
+		}
+
+	iState = Session().GetStateL();
+	
+	// log the action
+	INFO_PRINTF3(_L("State of cache entry for certificate '%S' is %d."), SubjectLC(), iState);
+	CleanupStack::PopAndDestroy(1); // subject
+
+	if (iCancelPoint == EAfterGetState)
+		{
+		INFO_PRINTF1(_L("Cancelling..."));
+		Session().Cancel();
+		iState = Session().GetStateL();
+		INFO_PRINTF3(_L("State of cache entry for certificate '%S' is %d."), SubjectLC(), iState);
+		CleanupStack::PopAndDestroy(1); // subject
+		}
+	else if (iRequestChangeNotify)
+		{
+		if (iState == EEntryAwaitingApproval || !iRequirePendingApproval)
+			{
+			TRequestStatus status;
+			Session().RequestNotify(status);
+			if (iCancelPoint == EAfterChangeNotify)
+				{
+				INFO_PRINTF1(_L("Cancelling..."));
+				Session().Cancel();
+				}
+
+			User::WaitForRequest(status);
+
+			User::LeaveIfError(status.Int());
+			iState = Session().GetStateL();
+
+			// log the action
+			INFO_PRINTF3(_L("Got cache change notify for certificate '%S', state = %d."), SubjectLC(), iState);
+			CleanupStack::PopAndDestroy(1); // certificate status
+			}
+		else
+			{
+			// log the action
+			INFO_PRINTF2(_L("Cannot wait for change notify, entry state is not %d (EEntryAwaitingApproval.)"), EEntryAwaitingApproval);
+			SetTestStepResult(EFail)		;
+			}
+		}
+	
+	return TestStepResult();
+	
+	}
+	
+TVerdict CEntryStatusStep::doTestStepPostambleL()
+	{
+	
+	if (TestStepResult() == EPass)
+		{
+		INFO_PRINTF1(_L("Step suceeded. Checking result..."));
+		}
+	else
+		{
+		INFO_PRINTF1(_L("Step failed."));
+		return TestStepResult();
+		}
+		
+	if (iExpectedState == iState)
+		{
+		INFO_PRINTF1(_L("Expected state %d matches actual state."));
+		SetTestStepResult(EPass);
+		return EPass;
+		}
+	else
+		{
+		INFO_PRINTF3(_L("Expected state %d does not match actual state %d!"), iExpectedState, iState);
+		SetTestStepResult(EFail);
+		return EFail;
+		}
+	
+	}
+	
+
+	
+
+