LOCAL_C void CreateSetDesTransactionL()
	{
	TUint32 errorId;
	CRepository* repository;
	User::LeaveIfNull(repository = CRepository::NewLC(KUidTransactionTestRepository));

	// Remember that this repository need to be reset
	::AddRepositoryToReset(KUidTransactionTestRepository);


	_LIT(KString1_TestValue, "test string 1");
	_LIT(KString2_TestValue, "test string 2");
	_LIT(KString3_TestValue, "test string 3");
	_LIT(KString4_TestValue, "test string 4");
	_LIT(KString5_TestValue, "test string 5");
	_LIT(KString1_UpdatedTestValue, "updated test string 1");
	_LIT(KString2_UpdatedTestValue, "updated test string 2");
	//
	// Descriptor get/set
	//
	TInt r;


	r = repository->StartTransaction(CRepository::EReadWriteTransaction);
	repository->CleanupRollbackTransactionPushL();
	TEST2(r, KErrNone);

	// create
	r = repository->Create(1, KString1_TestValue);
	if(OomTesting && (r==KErrNoMemory))
		User::Leave(KErrNoMemory);
	else
		TEST2(r, KErrNone);
	r = repository->Create(2, KString2_TestValue);
	if(OomTesting && (r==KErrNoMemory))
		User::Leave(KErrNoMemory);
	else
		TEST2(r, KErrNone);
	r = repository->Create(3, KString3_TestValue);
	if(OomTesting && (r==KErrNoMemory))
		User::Leave(KErrNoMemory);
	else
		TEST2(r, KErrNone);
	r = repository->Create(4, KString4_TestValue);
	if(OomTesting && (r==KErrNoMemory))
		User::Leave(KErrNoMemory);
	else
		TEST2(r, KErrNone);
	r = repository->Create(5, KString5_TestValue);
	if(OomTesting && (r==KErrNoMemory))
		User::Leave(KErrNoMemory);
	else
		TEST2(r, KErrNone);

	r = repository->CommitTransaction(errorId);
	CleanupStack::Pop();
	if(OomTesting && r!=KErrNone)
		{
		// in OOM test we may have alredy created settings
		TEST2(r, KErrAlreadyExists);
		}
	else
		TEST2(r, KErrNone);

	TBuf<50> buf;
	if(!OomTesting)
		{
		r = repository->Get(1,buf);
		TEST2(r, KErrNone);
		TEST(buf==KString1_TestValue);
		r = repository->Get(2,buf);
		TEST2(r, KErrNone);
		TEST(buf==KString2_TestValue);
		r = repository->Get(3,buf);
		TEST2(r, KErrNone);
		TEST(buf==KString3_TestValue);
		r = repository->Get(4,buf);
		TEST2(r, KErrNone);
		TEST(buf==KString4_TestValue);
		r = repository->Get(5,buf);
		TEST2(r, KErrNone);
		TEST(buf==KString5_TestValue);
		}

	r = repository->StartTransaction(CRepository::EReadWriteTransaction);
	repository->CleanupRollbackTransactionPushL();
	TEST2(r, KErrNone);

	// set
	r = repository->Set(1, KString1_UpdatedTestValue);
	if(OomTesting && (r==KErrNoMemory))
		User::Leave(KErrNoMemory);
	else
		TEST2(r, KErrNone);
	r = repository->Set(2, KString2_UpdatedTestValue);
	if(OomTesting && (r==KErrNoMemory))
		User::Leave(KErrNoMemory);
	else
		TEST2(r, KErrNone);

	r = repository->CommitTransaction(errorId);
	CleanupStack::Pop();
	TEST2(r, KErrNone);

	TBuf<50> buf1,buf2;
	r = repository->Get(1,buf1);
	TEST2(r, KErrNone);
	r = repository->Get(2,buf2);
	TEST2(r, KErrNone);

	TEST(buf1==KString1_UpdatedTestValue);
	TEST(buf2==KString2_UpdatedTestValue);

	CleanupStack::PopAndDestroy(repository);
	}
LOCAL_C void CreateSetIntTransactionL()
	{
	CRepository* repository;
	User::LeaveIfNull(repository = CRepository::NewLC(KUidTransactionTestRepository));

	// Remember that this repository need to be reset
	::AddRepositoryToReset(KUidTransactionTestRepository);

	//
	// Integer get/set
	//
	TInt r;
	TInt i = 0;
	const TInt imax = 0x0ff;
	TUint32 errorId;

	r = repository->StartTransaction(CRepository::EReadWriteTransaction);
	repository->CleanupRollbackTransactionPushL();
	TEST2(r, KErrNone);

	// create
	TInt KIntStartValue = 100;
	const TUint32 KNewIntBase = 1;
	for(i=0;i<imax;i++)
		{
		r = repository->Create(KNewIntBase+i, KIntStartValue+i);
		if(OomTesting && (r==KErrNoMemory))
			User::Leave(KErrNoMemory);
		else
			TEST2(r, KErrNone);
		}

	r = repository->CommitTransaction(errorId);
	CleanupStack::Pop();
	if(OomTesting && r!=KErrNone)
		{
		// in OOM test we may have alredy created settings
		TEST2(r, KErrAlreadyExists);
		}
	else
		TEST2(r, KErrNone);

	TInt integer;
	if(!(OomTesting && r==KErrAlreadyExists))
	{
		// during OOM tests we have values from Sets rather then Create...
		for(i=0;i<imax;i++)
			{
			r = repository->Get(KNewIntBase+i,integer );
			TEST2(r, KErrNone);
			TEST(KIntStartValue+i==integer);
			}
	}
	r = repository->StartTransaction(CRepository::EReadWriteTransaction);
	TEST2(r, KErrNone);

    repository->CleanupRollbackTransactionPushL();

	// set
	KIntStartValue = 200;
	for(i=0;i<imax;i++)
		{
		r = repository->Set(KNewIntBase+i, KIntStartValue+i);
		if(OomTesting && (r==KErrNoMemory))
			User::Leave(KErrNoMemory);
		else
			TEST2(r, KErrNone);
		}

	r = repository->CommitTransaction(errorId);
	CleanupStack::Pop();
	TEST2(r, KErrNone);
	for(i=0;i<imax;i++)
		{
		r = repository->Get(KNewIntBase+i,integer );
		TEST2(r, KErrNone);
		TEST(KIntStartValue+i==integer);
		}

	// lets check set where some are going to fail
	// set
	r = repository->StartTransaction(CRepository::EReadWriteTransaction);
	repository->CleanupRollbackTransactionPushL();
	TEST2(r, KErrNone);
	KIntStartValue = 400;
	TInt base = KNewIntBase + 0x7f; // half the range ok other half should fail
	for(i=0;i<imax;i++)
		{
		r = repository->Set(base+i, KIntStartValue+i);
		if(OomTesting && (r==KErrNoMemory))
			User::Leave(KErrNoMemory);
		else
		    {
		    if (base + i < 0x100)
		        {
			    TEST2(r, KErrNone);
		        }
		    else if (base + i == 0x100)
		        {
			    TEST2(r, KErrNone);
		        // this causes transaction to fail
                const TReal KRealValue = 1.234;
		        r = repository->Set(base+i, KRealValue);
			    TEST2(r, KErrArgument);
		        }
		    else
		        {
		        // after transaction has failed, repository returns KErrAbort for every request
			    TEST2(r, KErrAbort);
		        }
		    }
		}

	r = repository->CommitTransaction(errorId);
	TEST2(r, KErrArgument);
	TEST2(errorId, 0x100);
	CleanupStack::Pop();
	// should be able to open again
	r = repository->StartTransaction(CRepository::EReadWriteTransaction);
	TEST2(r, KErrNone);
	repository->RollbackTransaction();

	// and after the failed transaction it should be in previous state!!
	KIntStartValue = 200;
	for(i=0;i<imax;i++)
		{
		r = repository->Get(KNewIntBase+i,integer );
		TEST2(r, KErrNone);
		TEST(KIntStartValue+i==integer);
		}

	// lets clear after ourselves
	for(i=0;i<imax;i++)
		{
		r = repository->Delete(KNewIntBase+i);
		TEST2(r, KErrNone);
		}

	CleanupStack::PopAndDestroy(repository);
	}