// Copyright (c) 2001-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:
// This contains CommDb Unit Test Cases 020.XX
// 
//

// EPOC includes
#include <e32base.h>
#include <commdb.h>
#include <d32comm.h>

// Test system includes
#include <networking/log.h>
#include <networking/teststep.h>
#include "Teststepcommdb.h"
#include "TestSuiteCommdb.h"
#include "Step_020_xx.h"

//
//	Test step 020.01
//

// constructor
CCommDbTest020_01::CCommDbTest020_01()
	{
	// store the name of this test case
	iTestStepName = _L("step_020_01");
	}

// destructor
CCommDbTest020_01::~CCommDbTest020_01()
	{
	}


TVerdict CCommDbTest020_01::doTestStepPreambleL()
	{
	openDbL();
	return EPass;
	}

TInt CCommDbTest020_01::executeStepL()
	{
	TInt ret=KErrGeneral;
	TBuf<64> buffer;

	_LIT(KAgent,"Agent");

	TRAPD(r1,iTheDb->SetAgentL(TPtrC(DIAL_OUT_ISP),KAgent));
	TRAPD(r2,iTheDb->GetAgentL(TPtrC(DIAL_OUT_ISP),buffer));

	if(r1==KErrNotSupported && r2==KErrNotSupported)
		{
		return KErrNotSupported;
		}
	
	return ret;
	}



TVerdict CCommDbTest020_01::doTestStepL( )
	{
	Log(_L("Step 020.01 called "));


	if ( executeStepL() == KErrNotSupported )
		iTestStepResult = EPass;
	else
		iTestStepResult = EFail;

	return iTestStepResult;
	}

//
//	Test step 020.02
//

// constructor
CCommDbTest020_02::CCommDbTest020_02()
	{
	// store the name of this test case
	iTestStepName = _L("step_020_02");
	}

// destructor
CCommDbTest020_02::~CCommDbTest020_02()
	{
	}


TVerdict CCommDbTest020_02::doTestStepPreambleL()
	{	
	openDbL();
	return EPass;
	}


TInt CCommDbTest020_02::executeStepL()
	{
	TInt ret=KErrGeneral;
	TBuf<64> buffer;

	_LIT(KAgent1,"Agent1");
	_LIT(KAgentExt,"Csd");

	TRAPD(r1,iTheDb->SetAgentL(TPtrC(DIAL_OUT_ISP),KAgent1));

	TRAPD(r2,iTheDb->SetAgentExtL(TPtrC(DIAL_OUT_ISP),KAgentExt));
	TRAPD(r3,iTheDb->GetAgentExtL(TPtrC(DIAL_OUT_ISP),buffer));
	if(r3 != KErrNone)
		{
		return r3;
		}

	if(r1==KErrNotSupported && r2==KErrNotSupported)
		{
		return KErrNotSupported;
		}
	
	return ret;
	}



TVerdict CCommDbTest020_02::doTestStepL( )
	{
	Log(_L("Step 020.02 called "));


	if ( executeStepL() == KErrNotSupported )
		iTestStepResult = EPass;
	else
		iTestStepResult = EFail;

	return iTestStepResult;
	}


//
//	Test step 020.03
//

// constructor
CCommDbTest020_03::CCommDbTest020_03()
	{
	// store the name of this test case
	iTestStepName = _L("step_020_03");
	}

// destructor
CCommDbTest020_03::~CCommDbTest020_03()
	{
	}


TVerdict CCommDbTest020_03::doTestStepPreambleL()
	{	
	openDbL();
	return EPass;
	}


TInt CCommDbTest020_03::executeStepL()
	{
	TInt ret=KErrGeneral;

	//Try to set the agent for a non-service table
	_LIT(KAgent1,"Agent1");

	TRAPD( r, iTheDb->SetAgentL(TPtrC(LOCATION),KAgent1) );
	if (r==KErrNotSupported )
		ret = r;
	
	return ret;
	}



TVerdict CCommDbTest020_03::doTestStepL( )
	{
	Log(_L("Step 020.03 called "));


	if ( executeStepL() == KErrNotSupported )
		iTestStepResult = EPass;
	else
		iTestStepResult = EFail;

	return iTestStepResult;
	}



//
//	Test step 020.04
//

// constructor
CCommDbTest020_04::CCommDbTest020_04()
	{
	// store the name of this test case
	iTestStepName = _L("step_020_04");
	}

// destructor
CCommDbTest020_04::~CCommDbTest020_04()
	{
	}


TVerdict CCommDbTest020_04::doTestStepPreambleL()
	{	
	openDbL();
	return EPass;
	}


TInt CCommDbTest020_04::executeStepL()
	{
	TInt ret=KErrGeneral;


	//Try to set the agent extension for a non-service table

	_LIT(KAgentExt,"Csd");

	TRAPD(r, iTheDb->SetAgentExtL(TPtrC(LOCATION), KAgentExt) );
	if ( r==KErrNotSupported )
		ret = r;
	
	return ret;
	}



TVerdict CCommDbTest020_04::doTestStepL( )
	{
	Log(_L("Step 020.04 called "));


	if ( executeStepL() == KErrNotSupported )
		iTestStepResult = EPass;
	else
		iTestStepResult = EFail;

	return iTestStepResult;
	}






//
//	Test step 020.05
//

// constructor
CCommDbTest020_05::CCommDbTest020_05()
	{
	// store the name of this test case
	iTestStepName = _L("step_020_05");
	}

// destructor
CCommDbTest020_05::~CCommDbTest020_05()
	{
	}


TVerdict CCommDbTest020_05::doTestStepPreambleL()
	{	
	openDbL();
	return EPass;
	}


TInt CCommDbTest020_05::executeStepL()
	{
	TInt ret=KErrGeneral;

	//Try to open a view on the agent table
	
	TRAPD(r, iTheView = iTheDb->OpenTableLC(_L("NonExisting")); CleanupStack::Pop(); );

	if ( r==KErrNotFound )
		ret = r;

	return ret;
	}



TVerdict CCommDbTest020_05::doTestStepL( )
	{

	if ( executeStepL() == KErrNotFound )
		iTestStepResult = EPass;
	else
		iTestStepResult = EFail;

	return iTestStepResult;
	}



//
//	Test step 020.06
//

// constructor
CCommDbTest020_06::CCommDbTest020_06()
	{
	// store the name of this test case
	iTestStepName = _L("step_020_06");
	}

// destructor
CCommDbTest020_06::~CCommDbTest020_06()
	{
	}


TVerdict CCommDbTest020_06::doTestStepPreambleL()
	{	
	openDbL();
	return EPass;
	}

TInt CCommDbTest020_06::executeStepL()
	{
	TInt ret=KErrGeneral;
	TBuf<64> buffer;

	//Check that the agent setting can be overridden

	_LIT(KAgent1,"Agent1");
	_LIT(KAgent2,"Agent2");

	//Set the agent 
	TRAPD(r1,iTheDb->SetAgentL(TPtrC(DIAL_OUT_ISP),KAgent1));
	//Add a new agent and verify
	TRAPD(r2,iTheDb->SetAgentL(TPtrC(DIAL_OUT_ISP),KAgent2));
	TRAPD(r3,iTheDb->GetAgentL(TPtrC(DIAL_OUT_ISP),buffer));
	if (r1==KErrNotSupported && r2==KErrNotSupported && r3==KErrNotSupported)
		ret = KErrNotSupported;

	return ret;
	}



TVerdict CCommDbTest020_06::doTestStepL( )
	{
	Log(_L("Step 020.06 called "));


	if ( executeStepL() == KErrNotSupported )
		iTestStepResult = EPass;
	else
		iTestStepResult = EFail;

	return iTestStepResult;
	}


//
//	Test step 020.07
//

// constructor
CCommDbTest020_07::CCommDbTest020_07()
	{
	// store the name of this test case
	iTestStepName = _L("step_020_07");
	}

// destructor
CCommDbTest020_07::~CCommDbTest020_07()
	{
	}


TVerdict CCommDbTest020_07::doTestStepPreambleL()
	{	
	openDbL();
	return EPass;
	}

TInt CCommDbTest020_07::executeStepL()
	{
	TInt ret=KErrGeneral;
	TBuf<64> buffer;

	//Check that the agent settings can be deleted

	_LIT(KAgent,"Agent");
	_LIT(KExtension,"psd");

	//Set the agent 
	TRAPD(r1,iTheDb->SetAgentL(TPtrC(DIAL_OUT_ISP),KAgent));
	TRAPD(r2,iTheDb->SetAgentExtL(TPtrC(DIAL_OUT_ISP),KExtension));

	//Clear the settings
	TRAPD(r3,iTheDb->ClearAgentAndExtL( TPtrC(DIAL_OUT_ISP)));

	//Now try to read the settings
	TRAPD( r4, iTheDb->GetAgentL(TPtrC(DIAL_OUT_ISP),buffer) );
	TRAPD( r5, iTheDb->GetAgentExtL(TPtrC(DIAL_OUT_ISP),buffer) );

	if(r1==KErrNotSupported && r2==KErrNotSupported && r3==KErrNotSupported
		&& r4==KErrNotSupported && r5==KErrNotSupported)
		{
		ret = KErrNotSupported;
		}

	return ret;
	}



TVerdict CCommDbTest020_07::doTestStepL( )
	{
	Log(_L("Step 020.07 called "));


	if ( executeStepL() == KErrNotSupported )
		iTestStepResult = EPass;
	else
		iTestStepResult = EFail;

	return iTestStepResult;
	}



//
//	Test step 020.08
//

// constructor
CCommDbTest020_08::CCommDbTest020_08()
	{
	// store the name of this test case
	iTestStepName = _L("step_020_08");
	}

// destructor
CCommDbTest020_08::~CCommDbTest020_08()
	{
	}

TVerdict CCommDbTest020_08::doTestStepL( )
	{
	Log(_L("Step 020.08 called "));

	iTestStepResult = EPass;

		// Heap test for 020.01

	CCommDbTest020_01* step020_01 = new(ELeave) CCommDbTest020_01;
	CleanupStack::PushL(step020_01);
	step020_01->iSuite = iSuite;
	if ( doTestStepWithHeapFailureL( *step020_01, KErrNotSupported) == EFail )
		iTestStepResult = EFail;
	CleanupStack::PopAndDestroy(step020_01);


		// Heap test for 020.02

	CCommDbTest020_02* step020_02 = new CCommDbTest020_02;
	CleanupStack::PushL(step020_02);
	step020_02->iSuite = iSuite;
	if ( doTestStepWithHeapFailureL( *step020_02, KErrNotSupported) == EFail )
		iTestStepResult = EFail;
	CleanupStack::PopAndDestroy(step020_02);

		// Heap test for 020.03

	CCommDbTest020_03* step020_03 = new CCommDbTest020_03;
	CleanupStack::PushL(step020_03);
	step020_03->iSuite = iSuite;
	if ( doTestStepWithHeapFailureL( *step020_03, KErrNotSupported) == EFail )
		iTestStepResult = EFail;
	CleanupStack::PopAndDestroy(step020_03);


		// Heap test for 020.04

	CCommDbTest020_04* step020_04 = new CCommDbTest020_04;
	CleanupStack::PushL(step020_04);
	step020_04->iSuite = iSuite;
	if ( doTestStepWithHeapFailureL( *step020_04, KErrNotSupported) == EFail )
		iTestStepResult = EFail;
	CleanupStack::PopAndDestroy(step020_04);


		// Heap test for 020.06

	CCommDbTest020_06* step020_06 = new CCommDbTest020_06;
	CleanupStack::PushL(step020_06);
	step020_06->iSuite = iSuite;
	if ( doTestStepWithHeapFailureL( *step020_06, KErrNotSupported) == EFail )
		iTestStepResult = EFail;
	CleanupStack::PopAndDestroy(step020_06);



		// Heap test for 020.07

	CCommDbTest020_07* step020_07 = new CCommDbTest020_07;
	CleanupStack::PushL(step020_07);
	step020_07->iSuite = iSuite;
	if ( doTestStepWithHeapFailureL( *step020_07, KErrNotSupported) == EFail )
		iTestStepResult = EFail;
	CleanupStack::PopAndDestroy(step020_07);




	return iTestStepResult;	

}
