diff -r 000000000000 -r af10295192d8 networksecurity/tlsprovider/Test/tlstest2/entrystatusstep.cpp --- /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 + +// 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; + } + + } + + + + +