--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/Utils/Src/TestStepSmokeTest.cpp Tue Jan 26 15:16:33 2010 +0200
@@ -0,0 +1,345 @@
+// Copyright (c) 2004-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 CTestStepSmokeTest
+//
+//
+
+//user include
+#include "TestStepSmokeTest.h"
+
+//Epoc include
+#include <testconfigfileparser.h>
+#include <f32file.h>
+#include <e32std.h>
+
+/*@{*/
+_LIT(KExpectedCapCheckResult, "ExpectedCapCheckResult");
+_LIT(KConfigFile, "C:\\plattest\\platsec\\plattest_capabilities.config");
+_LIT(KDefault, "default");
+_LIT(KCapTest, "CapabilityTest");
+_LIT(KNo, "No");
+
+_LIT(KLogging, "logging");
+_LIT(KLoggingMin, "min");
+_LIT(KLoggingNormal, "normal");
+_LIT(KLoggingMax, "max");
+
+_LIT(KRepetition, "repetition");
+/*@}*/
+
+//
+// Construction/Destruction
+//
+
+/**
+ Constructor
+*/
+EXPORT_C CTestStepSmokeTest::CTestStepSmokeTest()
+: CTestStep()
+, iLoggingDetail(ETestLoggingDetail_Normal)
+, iRepetition(1)
+ {
+ }
+
+/**
+ Destructor
+*/
+EXPORT_C CTestStepSmokeTest::~CTestStepSmokeTest()
+ {
+ }
+
+
+/**
+ The overriden implementation of CTestStep::doTestStepPreambleL()
+ @return TVerdict- result of the test step
+ @leave - system wide error codes
+*/
+EXPORT_C TVerdict CTestStepSmokeTest::doTestStepPreambleL()
+ {
+ TVerdict ret = CTestStep::doTestStepPreambleL();
+
+ // Get logging
+ TPtrC logging;
+ if ( GetStringFromConfig(ConfigSection(), KLogging, logging) )
+ {
+ INFO_PRINTF2(_L("Logging value %S"), &logging);
+ if ( logging.Compare(KLoggingMin) == 0 )
+ {
+ iLoggingDetail=ETestLoggingDetail_Min;
+ }
+ else if ( logging.Compare(KLoggingNormal) == 0 )
+ {
+ iLoggingDetail=ETestLoggingDetail_Normal;
+ }
+ else if ( logging.Compare(KLoggingMax) == 0 )
+ {
+ iLoggingDetail=ETestLoggingDetail_Max;
+ }
+ else
+ {
+ ERR_PRINTF1(_L("Illegal logging value, use min, normal or max."));
+ ret=EFail;
+ }
+ }
+
+ // Get repetition count of test
+ GetIntFromConfig(ConfigSection(), KRepetition, iRepetition);
+ INFO_PRINTF2(_L("Repetition %d"), iRepetition);
+
+ return ret;
+ }
+
+/**
+ The overriden implementation of CTestStep::doTestStepPostambleL()
+ It implements the functionality of capability checking if
+ _PLATTEST_CAPTEST_ is ON.
+ @return TVerdict- result of the test step
+ @leave - system wide error codes
+*/
+
+EXPORT_C TVerdict CTestStepSmokeTest::doTestStepPostambleL()
+ {
+
+ //Read whether to do capability testing..
+ TPtrC captest(KNo);
+ GetStringFromConfig(KDefault, KCapTest, captest);
+ if( captest.Compare(_L("YES")) == 0)
+ {
+ INFO_PRINTF1(_L("---Capability Testing---"));
+ //Gets the capabilities config file
+ TBuf<KMaxTestExecuteCommandLength> scriptFile;
+ scriptFile.Copy(KConfigFile);
+ INFO_PRINTF2(_L("The config file %S"), &scriptFile);
+
+ TBuf8<KMaxTestExecuteCommandLength> scriptSection;
+ scriptSection.Copy(_L("Capabilities"));
+
+ TPtrC serverName = GetServerName();
+ INFO_PRINTF2(_L("The server name is %S"), &serverName);
+ HBufC8 *scriptItem = HBufC8::NewLC(serverName.Length());
+ scriptItem->Des().Copy(serverName);
+
+ //Get the file server session object
+ RFs rFs;
+ TInt err=rFs.Connect();
+ if(err != KErrNone)
+ {
+ ERR_PRINTF1(_L("Failed to connect with File server"));
+ SetTestStepResult(EFail);
+ }
+ else
+ {
+ CleanupClosePushL(rFs);
+ //Get the config file
+ CTestConfig* configFile = CTestConfig::NewLC(rFs, KNullDesC, scriptFile);
+ if( configFile == NULL)
+ {
+ WARN_PRINTF1(_L("NO Config file found -- Plattest_capabilites.config"));
+ }
+ else
+ {
+ //Get the item value from config file
+ TBuf8<KMaxTestExecuteCommandLength> itemValue;
+ itemValue = configFile->Section(scriptSection)->Item(scriptItem->Des())->Value();
+ TLex8 capabilityParser(itemValue);
+ TBool capCheckResult= ETrue;
+
+ while(!capabilityParser.Eos())
+ {
+ //Parse the capabilities
+ TPtrC8 capability(capabilityParser.NextToken());
+
+ HBufC* capabilityRead = HBufC::NewLC(capability.Length());
+ capabilityRead->Des().Copy(capability);
+ INFO_PRINTF2(_L("Capability Read is %S"), capabilityRead);
+
+ //Get the capability value
+ TCapability capabilityValue;
+ TPtrC ptrCapabilty(capabilityRead->Des());
+ TInt err = GetCapability(ptrCapabilty, capabilityValue);
+ if( err != KErrNone)
+ {
+ WARN_PRINTF1(_L("The capability is not found"));
+ }
+ else
+ {
+ //Check if the current process posses the required capability
+ if( !RProcess().HasCapability(capabilityValue) )
+ {
+ INFO_PRINTF2(_L("The capability %S is not possesed."), capabilityRead);
+ capCheckResult=EFalse;
+ }
+ else
+ {
+ INFO_PRINTF2(_L("The capability %S is possesed."), capabilityRead);
+ }
+ }
+ CleanupStack::PopAndDestroy(capabilityRead);
+ }
+
+ //read the expected capability check result
+ TBool expectedCapCheckResult = ETrue;
+ GetBoolFromConfig(ConfigSection(), KExpectedCapCheckResult, expectedCapCheckResult);
+ INFO_PRINTF2(_L("The expected cap check result is %D"), expectedCapCheckResult);
+ INFO_PRINTF2(_L("The cap check result is %D"), capCheckResult);
+
+ if(expectedCapCheckResult == capCheckResult)
+ {
+ SetTestStepResult(EPass);
+ }
+ else
+ {
+ SetTestStepResult(EFail);
+ }
+ }
+ CleanupStack::PopAndDestroy(2, &rFs);
+ }
+ CleanupStack::PopAndDestroy(scriptItem);
+ if(TestStepError() == KErrPermissionDenied)
+ {
+ INFO_PRINTF1(_L(" The failure is due to Platform Security"));
+ }
+ }
+
+ TVerdict ret = CTestStep::doTestStepPostambleL();
+ return ret;
+ }
+
+/**
+ Get the capability id (enum value) for the capability name
+ given as string.
+ @param aCapability - Capability name
+ @param aCapabilityValue - value for the capability name
+ @return TInt - error codes
+ @leave - None
+*/
+EXPORT_C TInt CTestStepSmokeTest::GetCapability(TPtrC aCapability, TCapability& aCapabilityValue)
+ {
+ INFO_PRINTF2(_L("The capability get is %S"), &aCapability);
+ TInt ret=KErrNone;
+
+ TBuf<KMaxTestExecuteCommandLength> capCaseValue(aCapability);
+ capCaseValue.LowerCase();
+
+ if(!capCaseValue.Compare(_L("tcb" )))
+ {
+ aCapabilityValue=ECapabilityTCB;
+ }
+ else if(!capCaseValue.Compare(_L("commdd" )))
+ {
+ aCapabilityValue=ECapabilityCommDD;
+ }
+ else if(!capCaseValue.Compare(_L("powermgmt" )))
+ {
+ aCapabilityValue=ECapabilityPowerMgmt;
+ }
+ else if(!capCaseValue.Compare(_L("multimediadd" )))
+ {
+ aCapabilityValue=ECapabilityMultimediaDD;
+ }
+ else if(!capCaseValue.Compare(_L("readdevicedata" )))
+ {
+ aCapabilityValue=ECapabilityReadDeviceData;
+ }
+ else if(!capCaseValue.Compare(_L("writedevicedata" )))
+ {
+ aCapabilityValue=ECapabilityWriteDeviceData;
+ }
+ else if(!capCaseValue.Compare(_L("drm" )))
+ {
+ aCapabilityValue=ECapabilityDRM;
+ }
+ else if(!capCaseValue.Compare(_L("trustedui" )))
+ {
+ aCapabilityValue=ECapabilityTrustedUI;
+ }
+ else if(!capCaseValue.Compare(_L("protserv" )))
+ {
+ aCapabilityValue=ECapabilityProtServ;
+ }
+ else if(!capCaseValue.Compare(_L("diskadmin" )))
+ {
+ aCapabilityValue=ECapabilityDiskAdmin;
+ }
+ else if(!capCaseValue.Compare(_L("networkcontrol" )))
+ {
+ aCapabilityValue=ECapabilityNetworkControl;
+ }
+ else if(!capCaseValue.Compare(_L("allfiles" )))
+ {
+ aCapabilityValue=ECapabilityAllFiles;
+ }
+ else if(!capCaseValue.Compare(_L("swevent" )))
+ {
+ aCapabilityValue=ECapabilitySwEvent;
+ }
+ else if(!capCaseValue.Compare(_L("networkservices" )))
+ {
+ aCapabilityValue=ECapabilityNetworkServices;
+ }
+ else if(!capCaseValue.Compare(_L("localservices" )))
+ {
+ aCapabilityValue=ECapabilityLocalServices;
+ }
+ else if(!capCaseValue.Compare(_L("readuserdata" )))
+ {
+ aCapabilityValue=ECapabilityReadUserData;
+ }
+ else if(!capCaseValue.Compare(_L("writeuserdata")))
+ {
+ aCapabilityValue=ECapabilityWriteUserData;
+ }
+ else if(!capCaseValue.Compare(_L("location")))
+ {
+ aCapabilityValue=ECapabilityLocation;
+ }
+ else if(!capCaseValue.Compare(_L("none")))
+ {
+ aCapabilityValue=ECapability_None;
+ }
+ else
+ {
+ INFO_PRINTF2(_L("Unrecognised capability %S, will be rejected"), &capCaseValue);
+ ret=KErrNotFound;
+ }
+
+ return ret;
+ }
+
+
+/**
+ Verifies the given time is nearly equal to current UTC time.
+ @param aTime - Time needs to be verified
+ @return TBool - Returns ETrue if aTime is nearly equal to current UTC
+ time, otherwise EFalse
+ @leave - None
+*/
+EXPORT_C TBool CTestStepSmokeTest::VerifyUTCTime(TTime aTime)
+ {
+ TTime homeTime;
+ TTimeIntervalSeconds utcOffset;
+
+ homeTime.HomeTime();
+ homeTime.SecondsFrom(aTime, utcOffset);
+ INFO_PRINTF2(_L("Calculated utcOffset: %D"), utcOffset.Int());
+ if(Abs<TInt>(utcOffset.Int()) <= (User::UTCOffset().Int()+120)
+ && Abs<TInt>(utcOffset.Int()) >= (User::UTCOffset().Int()-120))
+ {
+ return ETrue;
+ }
+ else
+ {
+ return EFalse;
+ }
+ }