diff -r 000000000000 -r af10295192d8 networksecurity/tlsprovider/Test/ttlscertcache/entrystatusstep.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/networksecurity/tlsprovider/Test/ttlscertcache/entrystatusstep.cpp Tue Jan 26 15:23:49 2010 +0200 @@ -0,0 +1,252 @@ +// Copyright (c) 2005-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: +// + +#include "entrystatusstep.h" + +#include + +// 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; + _LIT(KCancelMessageFmt, "This test step will call Cancel() on the cert cache session after %S()"); + if (!GetStringFromConfig(ConfigSection(), KCancelPoint, cancelPoint)) + { + iCancelPoint = ENoCancel; + } + else if (cancelPoint.CompareF(KOpen) == 0) + { + iCancelPoint = EAfterOpen; + Logger().WriteFormat(KCancelMessageFmt, &KOpen); + } + else if (cancelPoint.CompareF(KGetState) == 0) + { + iCancelPoint = EAfterGetState; + Logger().WriteFormat(KCancelMessageFmt, &KGetState); + } + else if (cancelPoint.CompareF(KChangeNotify) == 0) + { + iCancelPoint = EAfterChangeNotify; + Logger().WriteFormat(KCancelMessageFmt, &KChangeNotify); + } + + // Check if this step should wait for change notification. + if (!GetBoolFromConfig(ConfigSection(), KRequestChangeNotify, iRequestChangeNotify)) + { + iRequestChangeNotify = EFalse; + } + else if (iRequestChangeNotify) + { + if (iCancelPoint == ENoCancel) + { + _LIT(KMessage, "This test step will wait for change notification."); + Logger().Write(KMessage); + } + else if (iCancelPoint != EAfterChangeNotify) + { + _LIT(KErrorMessage, "Invalid test config, requesting notification but cancelling earlier."); + Logger().Write(KErrorMessage); + SetTestStepResult(EAbort); + return EAbort; + } + + _LIT(KRequirePendingApproval, "requirependingapproval"); + if (!GetBoolFromConfig(ConfigSection(), KRequirePendingApproval, iRequirePendingApproval)) + { + iRequirePendingApproval = ETrue; + } + if (iRequirePendingApproval) + { + _LIT(KMessage2, "This step will fail if the state is not initially EEntryAwaitingApproval."); + Logger().Write(KMessage2); + } + else + { + _LIT(KMessage2, "Notification will be requested even if the state is not initially EEntryAwaitingApproval."); + Logger().Write(KMessage2); + } + } + + TPtrC expectedState; + + if (!GetStringFromConfig(ConfigSection(), KCertEntryState, expectedState)) + { + _LIT(KMessage, "Could not read expected certificate approval state from INI, abort."); + Logger().Write(KMessage); + + SetTestStepResult(EAbort); + } + else + { + _LIT(KMessageFmt, "Certificate state is expected to be %S."); + if (expectedState.CompareF(KNewEntryString) == 0) + { + iExpectedState = ENewEntry; + Logger().WriteFormat(KMessageFmt, &KNewEntryString); + } + else if (expectedState.CompareF(KEntryAwaitingApprovalString) == 0) + { + iExpectedState = EEntryAwaitingApproval; + Logger().WriteFormat(KMessageFmt, &KEntryAwaitingApprovalString); + } + else if (expectedState.CompareF(KEntryApprovedString) == 0) + { + iExpectedState = EEntryApproved; + Logger().WriteFormat(KMessageFmt, &KEntryApprovedString); + } + else if (expectedState.CompareF(KEntryDeniedString) == 0) + { + iExpectedState = EEntryDenied; + Logger().WriteFormat(KMessageFmt, &KEntryDeniedString); + } + else + { + _LIT(KMessage, "Invalid expected certificate state, abort."); + Logger().Write(KMessage); + 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); + + _LIT(KCancelMessage, "Cancelling..."); + + // Cancel if set to do so before checking state. + if (iCancelPoint == EAfterOpen) + { + Logger().Write(KCancelMessage); + Session().Cancel(); + } + + iState = Session().GetStateL(); + + // log the action + _LIT(KMessageFmt, "State of cache entry for certificate '%S' is %d."); + Logger().WriteFormat(KMessageFmt, SubjectLC(), iState); + CleanupStack::PopAndDestroy(1); // subject + + if (iCancelPoint == EAfterGetState) + { + Logger().Write(KCancelMessage); + Session().Cancel(); + iState = Session().GetStateL(); + Logger().WriteFormat(KMessageFmt, SubjectLC(), iState); + CleanupStack::PopAndDestroy(1); // subject + } + else if (iRequestChangeNotify) + { + if (iState == EEntryAwaitingApproval || !iRequirePendingApproval) + { + TRequestStatus status; + Session().RequestNotify(status); + if (iCancelPoint == EAfterChangeNotify) + { + Logger().Write(KCancelMessage); + Session().Cancel(); + } + + User::WaitForRequest(status); + + User::LeaveIfError(status.Int()); + + iState = Session().GetStateL(); + + // log the action + _LIT(KMessageFormat, "Got cache change notify for certificate '%S', state = %d."); + Logger().WriteFormat(KMessageFormat, SubjectLC(), iState); + CleanupStack::PopAndDestroy(1); // certificate status + } + else + { + // log the action + _LIT(KMessageFormat, "Cannot wait for change notify, entry state is not %d (EEntryAwaitingApproval.)"); + Logger().WriteFormat(KMessageFormat, EEntryAwaitingApproval); + SetTestStepResult(EFail) ; + } + } + + return TestStepResult(); + + } + +TVerdict CEntryStatusStep::doTestStepPostambleL() + { + + if (TestStepResult() == EPass) + { + _LIT(KMessage, "Step suceeded. Checking result..."); + Logger().Write(KMessage); + } + else + { + _LIT(KMessage, "Step failed."); + Logger().Write(KMessage); + return TestStepResult(); + } + + if (iExpectedState == iState) + { + _LIT(KMessageFmt, "Expected state %d matches actual state."); + Logger().WriteFormat(KMessageFmt, iState); + SetTestStepResult(EPass); + return EPass; + } + else + { + _LIT(KMessageFmt, "Expected state %d does not match actual state %d!"); + Logger().WriteFormat(KMessageFmt, iExpectedState, iState); + SetTestStepResult(EFail); + return EFail; + } + + } + + + + +