authenticationservices/authenticationserver/test/tauthdb/tauthdbstep.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 07 Jan 2010 13:42:40 +0200
changeset 31 5b5ca9f4f7b4
parent 19 ece3df019add
permissions -rw-r--r--
Revision: 201001 Kit: 201001

/*
* 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 the License "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: 
*
*/


#ifndef TAUTHDBSTEP_H
#define TAUTHDBSTEP_H

#include <test/testexecutestepbase.h>
#include <test/testexecutelog.h>
#include "tauthdbserver.h"
#include <f32file.h>

#include "authdb.h"
#include "encryptedprotectionkey.h"
#include "transientkey.h"  
#include "transientkey.h"  
#include "transientkeyinfo.h"

_LIT(KTStepCreateTestDb, "CreateTestDb");
_LIT(KTStepPersist2, "PERSIST2");

#define KNumPlugins 10


class CTAuthDbStepBase : public CTestStep
	{
protected:
	CTAuthDbStepBase() {}
	virtual ~CTAuthDbStepBase();
	
	void CreatePlugins();
	void CreateKeyInfo();
		
	virtual TVerdict doTestStepPreambleL()
	   {
	   iFs.Connect();
	
	   CreatePlugins();
	   CreateKeyInfo();
	   
	   return TestStepResult();
	   }
	virtual TVerdict doTestStepPostambleL()
    	{
		iFs.Close();
		return TestStepResult();
		}
	
	void RemoveExistingDbL()
	/**
		Remove any existing database file.
	 */
		{
		CFileMan* fm = CFileMan::NewL(iFs);
		CleanupStack::PushL(fm);

		TFileName dbName(AuthServer::KDbName);
		dbName[0] = RFs::GetSystemDriveChar();

		TInt r = fm->Delete(dbName);
		if (r != KErrNotFound)
			User::LeaveIfError(r);

		CleanupStack::PopAndDestroy(fm);	
		}

	HBufC* GetNameLC(TInt i);

	void PluginData(AuthServer::TIdentityId aId,
					AuthServer::TPluginId aPlugin,
					TPtr8 aDes) 
	{
	aDes.Fill(aId*aPlugin);
	}
protected:
	RFs		iFs;


	AuthServer::CPluginDesc*       iPlugins[KNumPlugins];
	AuthServer::CTransientKeyInfo* iId1Keys[KNumPlugins];
	AuthServer::CTransientKeyInfo* iId2Keys[KNumPlugins];
	AuthServer::CTransientKeyInfo* iId3Keys[KNumPlugins];
  };

inline CTAuthDbStepBase::~CTAuthDbStepBase() 
    {
    for (TInt i = 0 ; i < KNumPlugins ; ++i)
        {
        delete iPlugins[i];
        delete iId1Keys[i];
        delete iId2Keys[i];
        delete iId3Keys[i];
        }
    }


class CTStepCreateTestDb : public CTAuthDbStepBase
/**
	Creates a test database which tauthcliserv can
	use to test the manager later.
 */
	{
public:
	CTStepCreateTestDb();
	
	// implement CTestStep
	virtual TVerdict doTestStepL();
	};


class CTStepPersist2 : public CTAuthDbStepBase
	{
public:
	CTStepPersist2();
	
private:
	virtual TVerdict doTestStepL();
	
	void TestOpenCloseL();
	
	void TestIdentitiesL();
	void TestDescriptionL(AuthServer::CAuthDb2* aDb, AuthServer::TIdentityId aIdentityId, const TDesC& aExpDesc);
	
	void TestPrefsL();
	
	void TestTrainedPluginsL();
	void TestKeyPresentL(
		AuthServer::CAuthDb2* aAuthDb, AuthServer::TIdentityId aIdentityId, AuthServer::TPluginId aPluginId,
		const AuthServer::CTransientKeyInfo& aTarget);
	
	void TestTrainingStatusL();
	
	void TestRepairL();

	void TestCompressL();
	TInt DbFileSizeL();
	};


inline HBufC* CTAuthDbStepBase::GetNameLC(TInt id)
    {
    _LIT(nameTmpl, "Plugin_%d");
	HBufC* name = HBufC::NewLC(15);
	name->Des().Format(nameTmpl, id);
	return name;
    }
    
inline void CTAuthDbStepBase::CreatePlugins()
	{
	using namespace AuthServer;
	
	const TAuthPluginType   types[KNumPlugins]
		= { EAuthBiometric, EAuthToken, EAuthKnowledge,
			EAuthBiometric, EAuthToken, EAuthKnowledge,
			EAuthToken, EAuthKnowledge
		};
	const TAuthTrainingStatus   training[KNumPlugins]
		= { EAuthUntrained, EAuthTrained, EAuthFullyTrained,
			EAuthUntrained, EAuthTrained, EAuthFullyTrained,
			EAuthTrained, EAuthFullyTrained
		  };


	for (TInt i = 0 ; i < KNumPlugins ; ++i)
		{
			HBufC* name = GetNameLC(i);
			
			iPlugins[i] = CPluginDesc::NewL(i,
											*name,
											types[i],
											training[i],
											i*10000,
											i,
											i*4);
		    CleanupStack::PopAndDestroy(name);									
		}
	}
inline void CTAuthDbStepBase::CreateKeyInfo()
	{
	using namespace AuthServer;

	CProtectionKey* protKey1 = CProtectionKey::NewLC(8);
	CProtectionKey* protKey2 = CProtectionKey::NewLC(8);
	CProtectionKey* protKey3 = CProtectionKey::NewLC(8);

	HBufC8* data = HBufC8::NewLC(4);
	
	for (TInt plugin = 0 ; plugin < KNumPlugins ; ++plugin)
		{
			CTransientKey* transient = 0;
			// id 1
			iId1Keys[plugin] = CTransientKeyInfo::NewL(plugin);
			PluginData(1, plugin, data->Des());
			transient = iId1Keys[plugin]->CreateTransientKeyL(data->Des());
			CEncryptedProtectionKey* epKey1 =
				transient->EncryptL(*protKey1);
			delete transient;
			iId1Keys[plugin]->SetEncryptedProtectionKeyL(epKey1);
			// id 2
			PluginData(2, plugin, data->Des());
			iId2Keys[plugin] = CTransientKeyInfo::NewL(plugin);
			transient = iId2Keys[plugin]->CreateTransientKeyL(data->Des());
			CEncryptedProtectionKey* epKey2 =
				transient->EncryptL(*protKey2);
			delete transient;
			iId2Keys[plugin]->SetEncryptedProtectionKeyL(epKey2);
			// id 3
			PluginData(3, plugin, data->Des());
			iId3Keys[plugin] = CTransientKeyInfo::NewL(plugin);
			transient = iId3Keys[plugin]->CreateTransientKeyL(data->Des());
			CEncryptedProtectionKey* epKey3 =
				transient->EncryptL(*protKey3);
			delete transient;
			iId3Keys[plugin]->SetEncryptedProtectionKeyL(epKey3);
		}
	CleanupStack::Pop(4, protKey1);
	}

#endif	/* TAUTHDBSTEP_H */