sl@0: /* sl@0: * Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: * All rights reserved. sl@0: * This component and the accompanying materials are made available sl@0: * under the terms of the License "Eclipse Public License v1.0" sl@0: * which accompanies this distribution, and is available sl@0: * at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: * sl@0: * Initial Contributors: sl@0: * Nokia Corporation - initial contribution. sl@0: * sl@0: * Contributors: sl@0: * sl@0: * Description: sl@0: * sl@0: */ sl@0: sl@0: sl@0: /** sl@0: @file sl@0: */ sl@0: sl@0: #include sl@0: #include sl@0: #include "t_keystore_actions.h" sl@0: #include "t_keystore_defs.h" sl@0: #include "t_input.h" sl@0: sl@0: ///////////////////////////////////////////////////////////////////////////////// sl@0: // CAuthObjectTest sl@0: ///////////////////////////////////////////////////////////////////////////////// sl@0: sl@0: template sl@0: CTestAction* CAuthObjectTest::NewL(RFs& aFs, sl@0: CConsoleBase& aConsole, sl@0: Output& aOut, sl@0: const TTestActionSpec& aTestActionSpec) sl@0: { sl@0: CTestAction* self = CAuthObjectTest::NewLC(aFs, aConsole, aOut, aTestActionSpec); sl@0: CleanupStack::Pop(self); sl@0: return self; sl@0: } sl@0: sl@0: template sl@0: CTestAction* CAuthObjectTest::NewLC(RFs& aFs, sl@0: CConsoleBase& aConsole, sl@0: Output& aOut, sl@0: const TTestActionSpec& aTestActionSpec) sl@0: { sl@0: CAuthObjectTest* self = new(ELeave) CAuthObjectTest(aFs, aConsole, aOut); sl@0: CleanupStack::PushL(self); sl@0: self->ConstructL(aTestActionSpec); sl@0: return self; sl@0: } sl@0: sl@0: template sl@0: CAuthObjectTest::CAuthObjectTest(RFs& aFs, CConsoleBase& aConsole, Output& aOut) sl@0: : CKeyStoreTestAction(aFs, aConsole, aOut), iState(EListKeys) sl@0: { sl@0: } sl@0: sl@0: template sl@0: void CAuthObjectTest::ConstructL(const TTestActionSpec& aTestActionSpec) sl@0: { sl@0: CKeyStoreTestAction::ConstructL(aTestActionSpec); sl@0: sl@0: iImpl.ConstructL(aTestActionSpec); sl@0: } sl@0: sl@0: template sl@0: CAuthObjectTest::~CAuthObjectTest() sl@0: { sl@0: iKeys.Close(); sl@0: } sl@0: sl@0: template sl@0: void CAuthObjectTest::PerformAction(TRequestStatus& aStatus) sl@0: { sl@0: if (aStatus != KErrNone) sl@0: { sl@0: iState = EFinished; sl@0: } sl@0: sl@0: switch (iState) sl@0: { sl@0: case EListKeys: sl@0: { sl@0: CUnifiedKeyStore& keystore = *CSharedKeyStores::TheUnifiedKeyStores().operator[](iKeystore); sl@0: sl@0: TCTKeyAttributeFilter filter; sl@0: keystore.List(iKeys, filter, aStatus); sl@0: iState = EMain; sl@0: break; sl@0: } sl@0: sl@0: case EMain: sl@0: { sl@0: iState = EFinished; sl@0: TRequestStatus* status = &aStatus; sl@0: sl@0: if (iKeys.Count() == 0) sl@0: { sl@0: User::RequestComplete(status, KErrNotFound); sl@0: return; sl@0: } sl@0: sl@0: const CCTKeyInfo* key = NULL; sl@0: for (TInt index = 0 ; index < iKeys.Count() ; ++index) sl@0: { sl@0: const CCTKeyInfo* k = iKeys[index]; sl@0: if (k->Label() == *iLabel) sl@0: { sl@0: key = k; sl@0: break; sl@0: } sl@0: } sl@0: sl@0: if (!key) sl@0: { sl@0: iOut.writeString(_L("Key not found: ")); sl@0: iOut.writeString(*iLabel); sl@0: iOut.writeNewLine(); sl@0: User::RequestComplete(status, KErrNotFound); sl@0: return; sl@0: } sl@0: sl@0: iAuth = key->Protector(); sl@0: if (!iAuth) sl@0: { sl@0: User::RequestComplete(status, KErrNotFound); sl@0: return; sl@0: } sl@0: sl@0: iImpl.DoTest(*iAuth, aStatus); sl@0: break; sl@0: } sl@0: sl@0: case EFinished: sl@0: { sl@0: if (aStatus == KErrNone && !iImpl.CheckResult(iOut)) sl@0: { sl@0: iOut.writeString(_L("CheckReult() returned EFalse")); sl@0: iOut.writeNewLine(); sl@0: aStatus = KErrGeneral; sl@0: } sl@0: sl@0: if (aStatus == iExpectedResult) sl@0: { sl@0: iOut.writeString(_L("Status: ")); sl@0: iOut.writeNum(aStatus.Int()); sl@0: iOut.writeString(_L(", expected")); sl@0: iOut.writeNewLine(); sl@0: iResult = ETrue; sl@0: } sl@0: else sl@0: { sl@0: iOut.writeString(_L("Status: ")); sl@0: iOut.writeNum(aStatus.Int()); sl@0: iOut.writeString(_L(", failure")); sl@0: iOut.writeNewLine(); sl@0: iResult = EFalse; sl@0: } sl@0: sl@0: iActionState = EPostrequisite; sl@0: sl@0: TRequestStatus* status = &aStatus; sl@0: User::RequestComplete(status, aStatus.Int()); sl@0: break; sl@0: } sl@0: } sl@0: } sl@0: sl@0: template sl@0: void CAuthObjectTest::PerformCancel() sl@0: { sl@0: switch (iState) sl@0: { sl@0: case EMain: sl@0: { sl@0: CUnifiedKeyStore& keystore = *CSharedKeyStores::TheUnifiedKeyStores().operator[](iKeystore); sl@0: keystore.CancelList(); sl@0: } sl@0: break; sl@0: sl@0: case EFinished: sl@0: if (iAuth) sl@0: { sl@0: iImpl.DoCancel(*iAuth); sl@0: } sl@0: break; sl@0: sl@0: default: sl@0: break; sl@0: } sl@0: } sl@0: sl@0: template sl@0: void CAuthObjectTest::Reset() sl@0: { sl@0: iState = EListKeys; sl@0: iKeys.Close(); sl@0: iImpl.Reset(); sl@0: iAuth = NULL; sl@0: } sl@0: sl@0: template sl@0: void CAuthObjectTest::DoReportAction() sl@0: { sl@0: iOut.writeString(_L("Running auth object test: ")); sl@0: iOut.writeString(iImpl.Name()); sl@0: iOut.writeNewLine(); sl@0: } sl@0: sl@0: template sl@0: void CAuthObjectTest::DoCheckResult(TInt /*aError*/) sl@0: { sl@0: } sl@0: sl@0: //////////////////////////////////////////////////////////////////////////////// sl@0: // TAuthObjectTest sl@0: //////////////////////////////////////////////////////////////////////////////// sl@0: sl@0: void TAuthObjectTest::ConstructL(const TTestActionSpec& /*aTestActionSpec*/) sl@0: { sl@0: } sl@0: sl@0: void TAuthObjectTest::Reset() sl@0: { sl@0: } sl@0: sl@0: TBool TAuthObjectTest::CheckResult(Output& /*aOut*/) sl@0: { sl@0: return ETrue; sl@0: } sl@0: sl@0: /** sl@0: * Test changing the passphrase. sl@0: */ sl@0: const TDesC& TChangePassphrase::Name() sl@0: { sl@0: _LIT(KName, "Change passphrase"); sl@0: return KName; sl@0: } sl@0: sl@0: void TChangePassphrase::DoTest(MCTAuthenticationObject& aAuth, TRequestStatus& aStatus) sl@0: { sl@0: aAuth.ChangeReferenceData(aStatus); sl@0: } sl@0: sl@0: void TChangePassphrase::DoCancel(MCTAuthenticationObject& aAuth) sl@0: { sl@0: aAuth.CancelChangeReferenceData(); sl@0: } sl@0: sl@0: template class CAuthObjectTest; sl@0: sl@0: /** sl@0: * Test listing protected objects. sl@0: */ sl@0: sl@0: TListProtectedObjects::~TListProtectedObjects() sl@0: { sl@0: iExpectedKeys.ResetAndDestroy(); sl@0: iObjects.Close(); sl@0: } sl@0: sl@0: const TDesC& TListProtectedObjects::Name() sl@0: { sl@0: _LIT(KName, "List protected objects"); sl@0: return KName; sl@0: } sl@0: sl@0: void TListProtectedObjects::ConstructL(const TTestActionSpec& aTestActionSpec) sl@0: { sl@0: TInt pos = 0; sl@0: while (AddExpectedKeyL(Input::ParseElement(aTestActionSpec.iActionBody, KFoundKeyStart, KFoundKeyEnd, pos))) sl@0: /* do nothing */; sl@0: } sl@0: sl@0: void TListProtectedObjects::Reset() sl@0: { sl@0: iObjects.Close(); sl@0: } sl@0: sl@0: TBool TListProtectedObjects::AddExpectedKeyL(const TDesC8& aKeyLabel) sl@0: { sl@0: if (aKeyLabel.Length() == 0) sl@0: return EFalse; sl@0: sl@0: HBufC* label = HBufC::NewMaxLC(aKeyLabel.Length()); sl@0: TPtr ptr = label->Des(); sl@0: ptr.Copy(aKeyLabel); sl@0: User::LeaveIfError(iExpectedKeys.Append(label)); sl@0: CleanupStack::Pop(label); sl@0: return ETrue; sl@0: } sl@0: sl@0: void TListProtectedObjects::DoTest(MCTAuthenticationObject& aAuth, TRequestStatus& aStatus) sl@0: { sl@0: aAuth.ListProtectedObjects(iObjects, aStatus); sl@0: } sl@0: sl@0: TBool TListProtectedObjects::CheckResult(Output& aOut) sl@0: { sl@0: aOut.writeString(_L("Expected ")); sl@0: aOut.writeNum(iExpectedKeys.Count()); sl@0: aOut.writeString(_L(" keys, found ")); sl@0: aOut.writeNum(iObjects.Count()); sl@0: aOut.writeNewLine(); sl@0: sl@0: if (iObjects.Count() != iExpectedKeys.Count()) sl@0: { sl@0: return EFalse; sl@0: } sl@0: sl@0: for (TInt index = 0 ; index < iObjects.Count() ; ++index) sl@0: { sl@0: MCTTokenObject* key = iObjects[index]; sl@0: const TDesC& keyLabel = key->Label(); sl@0: HBufC* expectedLabel = iExpectedKeys[index]; sl@0: sl@0: if (keyLabel != *expectedLabel) sl@0: { sl@0: aOut.writeString(_L("Expected ")); sl@0: aOut.writeString(*expectedLabel); sl@0: aOut.writeString(_L(" but found ")); sl@0: aOut.writeString(keyLabel); sl@0: aOut.writeNewLine(); sl@0: return EFalse; sl@0: } sl@0: } sl@0: sl@0: return ETrue; sl@0: } sl@0: sl@0: void TListProtectedObjects::DoCancel(MCTAuthenticationObject& aAuth) sl@0: { sl@0: aAuth.CancelListProtectedObjects(); sl@0: } sl@0: sl@0: template class CAuthObjectTest; sl@0: sl@0: /** sl@0: * Test unblocking the passphrase. sl@0: */ sl@0: const TDesC& TUnblockPassphrase::Name() sl@0: { sl@0: _LIT(KName, "Unblock passphrase"); sl@0: return KName; sl@0: } sl@0: sl@0: void TUnblockPassphrase::DoTest(MCTAuthenticationObject& aAuth, TRequestStatus& aStatus) sl@0: { sl@0: aAuth.Unblock(aStatus); sl@0: } sl@0: sl@0: void TUnblockPassphrase::DoCancel(MCTAuthenticationObject& aAuth) sl@0: { sl@0: aAuth.CancelUnblock(); sl@0: } sl@0: sl@0: template class CAuthObjectTest; sl@0: sl@0: /** sl@0: * Test auth object open method. sl@0: */ sl@0: const TDesC& TAuthOpen::Name() sl@0: { sl@0: _LIT(KName, "Auth object open"); sl@0: return KName; sl@0: } sl@0: sl@0: void TAuthOpen::DoTest(MCTAuthenticationObject& aAuth, TRequestStatus& aStatus) sl@0: { sl@0: aAuth.Open(aStatus); sl@0: } sl@0: sl@0: void TAuthOpen::DoCancel(MCTAuthenticationObject& aAuth) sl@0: { sl@0: aAuth.CancelOpen(); sl@0: } sl@0: sl@0: template class CAuthObjectTest; sl@0: sl@0: /** sl@0: * Test auth object close method. sl@0: */ sl@0: const TDesC& TAuthClose::Name() sl@0: { sl@0: _LIT(KName, "Auth object close"); sl@0: return KName; sl@0: } sl@0: sl@0: void TAuthClose::DoTest(MCTAuthenticationObject& aAuth, TRequestStatus& aStatus) sl@0: { sl@0: aAuth.Close(aStatus); sl@0: } sl@0: sl@0: void TAuthClose::DoCancel(MCTAuthenticationObject& aAuth) sl@0: { sl@0: aAuth.CancelClose(); sl@0: } sl@0: sl@0: template class CAuthObjectTest; sl@0: sl@0: /** sl@0: * Test get time remaining. sl@0: */ sl@0: const TDesC& TGetTimeRemaining::Name() sl@0: { sl@0: _LIT(KName, "Get time remaining"); sl@0: return KName; sl@0: } sl@0: sl@0: void TGetTimeRemaining::ConstructL(const TTestActionSpec& aTestActionSpec) sl@0: { sl@0: TPtrC8 ptr = Input::ParseElement(aTestActionSpec.iActionBody, KTimeoutStart); sl@0: if (ptr.Length() == 0) sl@0: User::Leave(KErrNotFound); sl@0: TLex8 lex(ptr); sl@0: lex.Val(iExpectedTime); sl@0: } sl@0: sl@0: void TGetTimeRemaining::DoTest(MCTAuthenticationObject& aAuth, TRequestStatus& aStatus) sl@0: { sl@0: aAuth.TimeRemaining(iTimeRemaining, aStatus); sl@0: } sl@0: sl@0: TBool TGetTimeRemaining::CheckResult(Output& aOut) sl@0: { sl@0: aOut.writeString(_L("Expected ")); sl@0: aOut.writeNum(iExpectedTime); sl@0: aOut.writeString(_L(", got ")); sl@0: aOut.writeNum(iTimeRemaining); sl@0: aOut.writeNewLine(); sl@0: sl@0: // Check time remaining is within 5 seconds of expected sl@0: TInt difference = iTimeRemaining - iExpectedTime; sl@0: if (difference < 0) sl@0: difference = -difference; sl@0: return difference < 6; sl@0: } sl@0: sl@0: void TGetTimeRemaining::DoCancel(MCTAuthenticationObject& aAuth) sl@0: { sl@0: aAuth.CancelTimeRemaining(); sl@0: } sl@0: sl@0: template class CAuthObjectTest; sl@0: sl@0: /** sl@0: * Test get timeout. sl@0: */ sl@0: const TDesC& TAuthSetTimeout::Name() sl@0: { sl@0: _LIT(KName, "Set timeout"); sl@0: return KName; sl@0: } sl@0: sl@0: void TAuthSetTimeout::ConstructL(const TTestActionSpec& aTestActionSpec) sl@0: { sl@0: TPtrC8 ptr = Input::ParseElement(aTestActionSpec.iActionBody, KTimeoutStart); sl@0: if (ptr.Length() == 0) sl@0: User::Leave(KErrNotFound); sl@0: TLex8 lex(ptr); sl@0: lex.Val(iNewTimeout); sl@0: } sl@0: sl@0: void TAuthSetTimeout::DoTest(MCTAuthenticationObject& aAuth, TRequestStatus& aStatus) sl@0: { sl@0: aAuth.SetTimeout(iNewTimeout, aStatus); sl@0: } sl@0: sl@0: void TAuthSetTimeout::DoCancel(MCTAuthenticationObject& aAuth) sl@0: { sl@0: aAuth.CancelSetTimeout(); sl@0: } sl@0: sl@0: template class CAuthObjectTest; sl@0: sl@0: /** sl@0: * Test set timeout. sl@0: */ sl@0: const TDesC& TGetTimeout::Name() sl@0: { sl@0: _LIT(KName, "Get timeout"); sl@0: return KName; sl@0: } sl@0: sl@0: void TGetTimeout::ConstructL(const TTestActionSpec& aTestActionSpec) sl@0: { sl@0: TPtrC8 ptr = Input::ParseElement(aTestActionSpec.iActionBody, KTimeoutStart); sl@0: if (ptr.Length() == 0) sl@0: User::Leave(KErrNotFound); sl@0: TLex8 lex(ptr); sl@0: lex.Val(iExpectedTimeout); sl@0: } sl@0: sl@0: void TGetTimeout::DoTest(MCTAuthenticationObject& aAuth, TRequestStatus& aStatus) sl@0: { sl@0: aAuth.Timeout(iTimeout, aStatus); sl@0: } sl@0: sl@0: TBool TGetTimeout::CheckResult(Output& aOut) sl@0: { sl@0: aOut.writeString(_L("Expected ")); sl@0: aOut.writeNum(iExpectedTimeout); sl@0: aOut.writeString(_L(", got ")); sl@0: aOut.writeNum(iTimeout); sl@0: aOut.writeNewLine(); sl@0: sl@0: return iExpectedTimeout == iTimeout; sl@0: } sl@0: sl@0: void TGetTimeout::DoCancel(MCTAuthenticationObject& aAuth) sl@0: { sl@0: aAuth.CancelTimeout(); sl@0: } sl@0: sl@0: template class CAuthObjectTest;