testexecmgmt/ucc/Source/TestExecuteUCCPlugin/CUCCTest.cpp
changeset 0 3da2a79470a7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/testexecmgmt/ucc/Source/TestExecuteUCCPlugin/CUCCTest.cpp	Mon Mar 08 15:04:18 2010 +0800
@@ -0,0 +1,537 @@
+/*
+* 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 "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 CUCCTest.cpp
+*/
+
+#include <stdlib.h>
+#include <string.h>
+#include <testexecutelog.h>
+#include "CUCCTest.h"
+#include "CNetworkEmulatorSetupCommdb.h"
+#include "uccs_errorcodes.h"
+
+#define RECORD_ID			"RECORD_ID"
+#define COMMDB_VALUE		"VALUETOSET"
+#define BUFFERSIZE			256	
+#define MAXLOGINSCRIPT		512
+#define MAXVARLEN			64
+
+const TInt KMaxCommandLineLength	= 4096;
+const TInt KMaxParamNameLength		= 128;
+const TInt KMaxParamValueLength		= 1024;
+
+
+CUCCTestStartUseCase::CUCCTestStartUseCase()
+	{
+	SetTestStepName(KTestStartUseCase);
+	}
+
+CUCCTestStartUseCase::~CUCCTestStartUseCase()
+	{
+	}
+
+TVerdict CUCCTestStartUseCase::doTestStepL()
+	{	
+	int ret, uid;
+	int err = 0;
+	CUCCSDeviceControl *app;
+
+	// get the application control instance and use-case id
+	app = CreateApplicationControlInstance( &uid );
+	if( app == NULL )
+		{
+		SetTestStepResult(EFail);
+		return TestStepResult();
+		}
+
+	// start the usecase
+	ret = app->startUseCase(uid, &err);
+
+	// cleanup the app control instance
+	delete app;
+
+	// return success / failure
+	SetTestStepResult( (ret == UCCS_OK) ? EPass : EFail );
+	return TestStepResult();
+	}
+
+CUCCTestSignal::CUCCTestSignal()
+	{
+	SetTestStepName(KTestSignal);
+	}
+
+CUCCTestSignal::~CUCCTestSignal()
+	{
+	}
+
+TVerdict CUCCTestSignal::doTestStepL()
+	{
+	int ret, uid;
+	int err = 0;
+	CUCCSDeviceControl *app;
+
+	// get the application control instance and use-case id
+	app = CreateApplicationControlInstance( &uid );
+	if( app == NULL )
+		{
+		SetTestStepResult(EFail);
+		return TestStepResult();	
+		}
+
+	// call signal
+	ret = app->signal(uid, &err);
+
+	// cleanup the app control instance
+	delete app;
+
+	// return success / failure
+	SetTestStepResult( (ret == UCCS_OK) ? EPass : EFail );
+	return TestStepResult();
+	}
+
+CUCCTestRendezvous::CUCCTestRendezvous()
+	{
+	SetTestStepName(KTestRendezvous);
+	}
+
+CUCCTestRendezvous::~CUCCTestRendezvous()
+	{
+	}
+
+TVerdict CUCCTestRendezvous::doTestStepL()
+	{
+	int ret, uid;
+	int err = 0;
+	CUCCSDeviceControl *app;
+
+	// get the application control instance and use-case id
+	app = CreateApplicationControlInstance( &uid );
+	if( app == NULL )
+		{
+		SetTestStepResult(EFail);
+		return TestStepResult();
+		}
+
+	// call rendezvous
+	ret = app->rendezvous(uid, &err);
+
+	// cleanup the app control instance
+	delete app;
+
+	// return success / failure
+	SetTestStepResult( (ret == UCCS_OK) ? EPass : EFail );
+	return TestStepResult();
+	}
+
+CUCCTestEndUseCase::CUCCTestEndUseCase()
+	{
+	SetTestStepName(KTestEndUseCase);
+	}
+
+CUCCTestEndUseCase::~CUCCTestEndUseCase()
+	{
+	}
+
+TVerdict CUCCTestEndUseCase::doTestStepL()
+	{
+	int ret, uid;
+	int err = 0;
+	CUCCSDeviceControl *app;
+
+	// get the application control instance and use-case id
+	app = CreateApplicationControlInstance( &uid );
+	if( app == NULL )
+		{
+		SetTestStepResult(EFail);
+		return TestStepResult();
+		}
+	
+	// call endusecase
+	TVerdict tmpVerdict = EFail;
+	ret = app->endUseCase(uid, tmpVerdict, &err);
+	SetTestStepResult( tmpVerdict );
+
+	// cleanup the app control instance
+	delete app;
+
+	// return success / failure
+	SetTestStepResult( (ret == UCCS_OK) ? EPass : EFail );
+	return TestStepResult();
+	}
+
+CUCCTestWaitfor::CUCCTestWaitfor()
+	{
+	SetTestStepName(KTestWaitfor);
+	}
+
+CUCCTestWaitfor::~CUCCTestWaitfor()
+	{
+	}
+
+TVerdict CUCCTestWaitfor::doTestStepL()
+	{
+	int ret, uid;
+	int err = 0;
+	CUCCSDeviceControl *app;
+
+	// get the application control instance and use-case id
+	app = CreateApplicationControlInstance( &uid );
+	if( app == NULL )
+		{
+		SetTestStepResult(EFail);
+		return TestStepResult();
+		}
+
+	// call waitfor
+	ret = app->waitfor(uid, &err);
+
+	// cleanup the app control instance
+	delete app;
+
+	// return success / failure
+	SetTestStepResult( (ret == UCCS_OK) ? EPass : EFail );
+	return TestStepResult();
+	}
+
+CUCCTestGetVariableName::CUCCTestGetVariableName()
+	{
+	SetTestStepName(KTestGetVariableName);
+	}
+
+CUCCTestGetVariableName::~CUCCTestGetVariableName()
+	{
+	}
+
+TVerdict CUCCTestGetVariableName::doTestStepL()
+	{
+	int ret, uid;
+	int err = 0;
+	CUCCSDeviceControl *app;
+	char variableValue[64];
+	char* variableName = "ENV";
+
+	// get the application control instance and use-case id
+	app = CreateApplicationControlInstance( &uid );
+	if( app == NULL )
+		{
+		SetTestStepResult(EFail);
+		return TestStepResult();
+		}
+
+	// call getVariableName
+	ret = app->getVariableName( variableName, variableValue, 64, &err );
+
+	// cleanup the app control instance
+	delete app;
+
+	// return success / failure
+	SetTestStepResult( (ret == UCCS_OK) ? EPass : EFail );
+	return TestStepResult();
+	}
+
+CUCCTestRunCommand::CUCCTestRunCommand()
+	{
+	SetTestStepName(KTestRunCommand);
+	}
+
+CUCCTestRunCommand::~CUCCTestRunCommand()
+	{
+	}
+
+// Ini file parameter names and standard values
+_LIT(KEquals, "=");
+_LIT(KSpace, " ");
+_LIT(KQuote, "\"");
+_LIT(KRunCmd, "runcmd");
+_LIT(KServiceName, "svcname");
+_LIT(KCall, "call");
+_LIT(KMethodID, "methodid");
+_LIT(KDefaultMethodID, "10");
+
+TVerdict CUCCTestRunCommand::doTestStepL()
+	{
+	TInt ret, uid;
+	TInt err = 0;
+	CUCCSDeviceControl *app;
+	HBufC* commandLine = HBufC::NewLC(KMaxCommandLineLength);
+	TPtr commandLinePtr(commandLine->Des());
+	
+	// Specific ini file parameter names and standard values
+	_LIT(KServiceID, "svcid");
+	_LIT(KServiceHost, "svchost");
+	_LIT(KNumParams, "num_params" );
+	_LIT(KParamNameStr,"param_name_");
+	_LIT(KParamValueStr,"param_value_");
+	_LIT(KExpectPositiveReturnCodeStr,"expect_positive_return_code");
+
+	commandLinePtr.Append( KRunCmd );
+
+	// Retrieve the service name
+	TPtrC svcname;
+	TInt rv = GetStringFromConfig( ConfigSection(), KServiceName, svcname );
+	if( rv )
+		{
+		// Append the service_name to the command line
+		commandLinePtr.Append( KSpace );
+		commandLinePtr.Append( KServiceName );
+		commandLinePtr.Append( KEquals );
+		commandLinePtr.Append( KQuote );
+		commandLinePtr.Append( svcname );
+		commandLinePtr.Append( KQuote );
+		}
+	else
+		{
+		// Otherwise revert to the legacy svcid and svchost
+		TPtrC svcid;
+		TPtrC svchost;
+		rv = GetStringFromConfig( ConfigSection(), KServiceID, svcid );
+		if( rv )
+			{
+			rv = GetStringFromConfig( ConfigSection(), KServiceHost, svchost );
+			}
+		if( rv )
+			{
+			// Append the svcid command line
+			commandLinePtr.Append( KSpace );
+			commandLinePtr.Append( KServiceID );
+			commandLinePtr.Append( KEquals );
+			commandLinePtr.Append( svcid );
+			// Append the svchost command line
+			commandLinePtr.Append( KSpace );
+			commandLinePtr.Append( KServiceHost );
+			commandLinePtr.Append( KEquals );
+			commandLinePtr.Append( KQuote );
+			commandLinePtr.Append( svchost );
+			commandLinePtr.Append( KQuote );
+			}
+		}
+
+	if( rv )
+		{
+		// Look up the call name
+		TPtrC call;
+		rv = GetStringFromConfig( ConfigSection(), KCall, call );
+		if( rv )
+			{
+			// Append the default methodid (10) to the command line
+			commandLinePtr.Append( KSpace );
+			commandLinePtr.Append( KMethodID );
+			commandLinePtr.Append( KEquals );
+			commandLinePtr.Append( KDefaultMethodID );
+			// Append the call name to the command line
+			commandLinePtr.Append( KSpace );
+			commandLinePtr.Append( KCall );
+			commandLinePtr.Append( KEquals );
+			commandLinePtr.Append( KQuote );
+			commandLinePtr.Append( call );
+			commandLinePtr.Append( KQuote );
+			}
+		else
+			{
+			// If it is not there look up the method id
+			TPtrC methodid;
+			rv = GetStringFromConfig( ConfigSection(), KMethodID, methodid );
+			if( rv )
+				{
+				// Append the methodid command line
+				commandLinePtr.Append( KSpace );
+				commandLinePtr.Append( KMethodID );
+				commandLinePtr.Append( KEquals );
+				commandLinePtr.Append( methodid );
+				}
+			}
+		}
+
+	// Iterate through the parameters adding them to the command line as we go
+	TInt num_params = 0;
+	rv = GetIntFromConfig( ConfigSection(), KNumParams, num_params );
+	if( num_params > 0 )
+		{
+		HBufC* param_name_str = HBufC::NewLC(KMaxParamNameLength);
+		HBufC* param_value_str = HBufC::NewLC(KMaxParamValueLength);
+		TPtr param_name_str_ptr(param_name_str->Des());
+		TPtr param_value_str_ptr(param_value_str->Des());
+
+		for( int i=1 ; i<=num_params && rv ; i++ )
+			{
+			TPtrC param_name;
+			TPtrC param_value;
+
+			param_name_str_ptr.Copy( KParamNameStr );
+			// Append the parameter number to the end of the ini string
+			param_name_str_ptr.AppendNum( i );
+			rv = GetStringFromConfig( ConfigSection(), param_name_str_ptr, param_name );
+			if( rv )
+				{
+				param_value_str_ptr.Copy( KParamValueStr );
+				// Append the parameter number to the end of the ini string
+				param_value_str_ptr.AppendNum( i );
+				rv = GetStringFromConfig( ConfigSection(), param_value_str_ptr, param_value );
+				}
+			if( rv )
+				{
+				// Append the parameter name/value to the command line
+				commandLinePtr.Append( KSpace );
+				commandLinePtr.Append( param_name );
+				commandLinePtr.Append( KEquals );
+				commandLinePtr.Append( KQuote );
+				commandLinePtr.Append( param_value );
+				commandLinePtr.Append( KQuote );
+				}
+			}
+
+		// Cleanup
+		CleanupStack::PopAndDestroy(param_value_str);
+		CleanupStack::PopAndDestroy(param_name_str);
+		}
+
+	// get the application control instance
+	app = CreateApplicationControlInstance( &uid, EFalse );
+	if( app == NULL )
+		{
+		SetTestStepResult(EFail);
+		CleanupStack::PopAndDestroy(commandLine);
+		return TestStepResult();
+		}
+
+	// Call runCommand
+	HBufC8* commandLine8 = HBufC8::NewLC(commandLinePtr.Length()+1);
+	TPtr8 ptr8(commandLine8->Des());
+	ptr8.Copy(commandLinePtr);
+	ret = app->runCommandL( (char*)ptr8.PtrZ(), &err );
+
+	// Log the UCC/Service call result
+	_LIT( KUCCCallResult, "UCC Call Result = %d" );
+	INFO_PRINTF2( KUCCCallResult, ret );
+
+	// Cleanup
+	delete app;
+	CleanupStack::PopAndDestroy(commandLine8);
+	CleanupStack::PopAndDestroy(commandLine);
+
+	// the following section represents an ultra lightweight way of tolerating handles returned by services, without assuming
+	//  that any nonzero return code is a problem.
+	//  in future this could be extended to store the specific handle values in a map to refer back to them in later test steps..
+	//  something like "store_result_as_handle_called=Test1"
+	TBool expectPositiveReturnCode(EFalse);
+	rv = GetBoolFromConfig( ConfigSection(), KExpectPositiveReturnCodeStr, expectPositiveReturnCode );
+	if(expectPositiveReturnCode && ret > 0)
+		{
+		if(ret>0) // a handle value was returned = success
+			{
+			ret=KErrNone;
+			}
+		else if(ret==0) // null handle means there was a problem
+			{
+			ret=KErrUnknown;
+			}
+		}
+
+	// Return success / failure
+	SetTestStepResult( (ret == KErrNone) ? EPass : EFail );
+	return TestStepResult();
+	}
+
+CUCCTestSetDeviceID::CUCCTestSetDeviceID()
+	{
+	SetTestStepName(KTestSetDeviceID);
+	}
+
+CUCCTestSetDeviceID::~CUCCTestSetDeviceID()
+	{
+	}
+
+TVerdict CUCCTestSetDeviceID::doTestStepL()
+	{
+	int uid;
+	CUCCSDeviceControl *app;
+
+	// get the application control instance and use-case id
+	app = CreateApplicationControlInstance( &uid );
+	if( app == NULL )
+		{
+		SetTestStepResult(EFail);
+		return TestStepResult();
+		}
+	
+	// do the set
+	SetTestStepResult( UpdateCommdbEntry( app ) );
+
+	// cleanup and exit
+	delete app;
+	app = NULL;
+	return TestStepResult();
+	}
+
+TVerdict CUCCTestSetDeviceID::UpdateCommdbEntry( CUCCSDeviceControl *aApp )
+	{
+	int ret, err = 0, isp_index, device_id;
+	TCommDBError cdberr;
+	CSetUpCommDb commdb_handle;
+	TBuf<MAXLOGINSCRIPT> login_script_string;
+	char device_id_string[MAXVARLEN];
+	char isp_index_string[MAXVARLEN];
+
+	// get the device id from the use-case script
+	ret = aApp->getVariableName( "DEVICEID", device_id_string, MAXVARLEN, &err );
+	if( ret != UCCS_OK )
+		{
+		SetTestStepResult(EFail);
+		return TestStepResult();
+		}
+	device_id = atoi(device_id_string);
+
+	// get the ISP index from the use-case script
+	ret = aApp->getVariableName( "COMMDB_ISP_INDEX", isp_index_string, MAXVARLEN, &err );
+	if( ret != UCCS_OK )
+		{
+		SetTestStepResult(EFail);
+		return TestStepResult();
+		}
+	isp_index = atoi( isp_index_string );
+
+	// create the entry string
+	login_script_string.FillZ();
+	login_script_string.Append( _L("CHARMAP [windows-1252]\n") );
+	login_script_string.Append( _L("LOOP 10\n{\nSEND \"ID=") );
+	login_script_string.AppendNum( device_id );
+	login_script_string.Append( _L("\"+<0x0d>\nWAIT 3\n{\n\"SERVER(") );
+	login_script_string.AppendNum( device_id );
+	login_script_string.Append( _L(")\" OK\n}\n}\nEXIT KErrNoAnswer$\n\nOK:\nEXIT\n") );
+
+	// set the value in COMMDB
+	cdberr = commdb_handle.initialise();
+	if( cdberr != TCommDB_Success )
+		{
+		SetTestStepResult(EFail);
+		return TestStepResult();
+		}
+	cdberr = commdb_handle.updateEntry( DIAL_OUT_ISP, isp_index, ISP_LOGIN_SCRIPT, (char*)login_script_string.PtrZ(), &err ); 
+	if( cdberr != TCommDB_Success )
+		{
+		SetTestStepResult(EFail);
+		return TestStepResult();
+		}
+
+	// done ik
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}