dbgsrv/coredumpserver/test/automatictests/tcds_kernel/src/cds/t_scm_config.cpp
changeset 0 c6b0df440bee
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dbgsrv/coredumpserver/test/automatictests/tcds_kernel/src/cds/t_scm_config.cpp	Tue Mar 02 10:33:16 2010 +0530
@@ -0,0 +1,150 @@
+// Copyright (c) 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
+ @internalTechnology
+*/
+
+#include "t_scm_config.h"
+
+_LIT(KConfigureOn, "ConfigureOn");
+_LIT(KConfigureOff, "ConfigureOff");
+_LIT(KKeyValue, "value");
+
+CSCMConfigurationWrapper::CSCMConfigurationWrapper()
+	{}
+
+CSCMConfigurationWrapper::~CSCMConfigurationWrapper()
+	{
+	iCoreDumpSession.Close();
+	}
+
+/**
+ * Two phase constructor for CSCMConfigurationWrapper
+ * @return CSCMConfigurationWrapper object
+ * @leave
+ */
+CSCMConfigurationWrapper* CSCMConfigurationWrapper::NewL()
+	{
+	CSCMConfigurationWrapper* ret = new (ELeave) CSCMConfigurationWrapper();
+	CleanupStack::PushL(ret);
+	ret->ConstructL();
+	CleanupStack::Pop(ret);
+	return ret;
+	}
+
+/**
+ * Safe construction
+ * @leave
+ */
+void CSCMConfigurationWrapper::ConstructL()
+	{
+	User::LeaveIfError(iCoreDumpSession.Connect());
+	}
+
+/**
+ * Handle a command invoked from the script
+ * @param aCommand Is the name of the command for a TBuf
+ * @param aSection Is the .ini file section where parameters to the command are located
+ * @param aAsyncErrorIndex Is used by the TEF Block framework to handle asynchronous commands.
+ * @leaves One of the system wide error codes
+ */
+TBool CSCMConfigurationWrapper::DoCommandL(const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt aAsyncErrorIndex)
+	{
+	//Get the enum value from the ini file
+	TConfigItem::TSCMDataType type;
+	TInt enumValue;
+
+	if(GetIntFromConfig(aSection,KKeyValue, enumValue))
+		{
+		type = (TConfigItem::TSCMDataType)enumValue;
+		}
+	else
+		{
+		ERR_PRINTF1(_L("Unable to get the proper config option from ini file. Are you sure its valid?"));
+		return EFalse;
+		}
+
+	//Look at the command to see what we need to do
+	if(KConfigureOn() == aCommand)
+		{
+		TurnOnConfigOptionL(type);
+		}
+	else if(KConfigureOff() == aCommand)
+		{
+		TurnOffConfigOptionL(type);
+		}
+	else
+		{
+		ERR_PRINTF1(_L("Unable to get the proper command from script file. Are you sure its valid?"));
+		return EFalse;
+		}
+
+	return ETrue;
+	}
+
+/**
+ * This method allows the test wrapper to configure the SCM to not dump one of the
+ * possible options
+ * @param aParameter The param we wish to set
+ * @leaves One of the system wide error codes
+ */
+void CSCMConfigurationWrapper::TurnOffConfigOptionL(TConfigItem::TSCMDataType& aParameter)
+	{
+	TInt zeroPriority = 0;
+	SetSCMParameterL(aParameter, zeroPriority);
+	}
+
+/**
+ * This method allows the test wrapper to configure the SCM to dump one of the
+ * possible options
+ * @param aParameter The param we wish to set
+ * @leaves One of the system wide error codes
+ */
+void CSCMConfigurationWrapper::TurnOnConfigOptionL(TConfigItem::TSCMDataType& aParameter)
+	{
+	TInt highestPriority = 255;
+	SetSCMParameterL(aParameter, highestPriority);
+	}
+
+/**
+ * Sets an SCM parameter to a given priority
+ * @param aParameter The SCM parameter we wish to change
+ * @param aPriority The new priority
+ * @leaves One of the System wide codes
+ */
+void CSCMConfigurationWrapper::SetSCMParameterL(TConfigItem::TSCMDataType& aParameter, const TInt aPriority)
+	{
+	//Unfortunately, there is no "get by instance" method (just a get by index - which we dont know
+	TInt numConfigParams = iCoreDumpSession.GetNumberConfigParametersL();
+	for(TUint cnt = 0; cnt < numConfigParams; cnt++)
+		{
+		COptionConfig* conf = iCoreDumpSession.GetConfigParameterL(cnt);
+		CleanupStack::PushL(conf);
+
+		if (conf->Source()== COptionConfig::ESCMConfig && conf->Instance() == aParameter)
+			{
+			//Found the one of interest. Set config to desired value
+			INFO_PRINTF3(_L("Setting config value %d to be %d"), aParameter, aPriority);
+
+			conf->Value(aPriority);
+			iCoreDumpSession.SetConfigParameterL(*conf);
+			}
+		CleanupStack::PopAndDestroy(conf);
+		}
+	}
+
+//eof