usbmgmt/usbmgrtest/t_usbmanager_suite/T_UsbManager/src/CStartStopPersonality.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 02 Feb 2010 02:02:59 +0200
changeset 0 c9bc50fca66e
permissions -rw-r--r--
Revision: 201001 Kit: 201005

/*
* 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:
*
*/

/**
 @file
*/
#include <test/testexecutelog.h>
#include "CUsbTestStepBase.h"
#include "CStartStopPersonality.h"
	
//////////////////////////////////
//    CStartStopPersonality1    //
//////////////////////////////////

CStartStopPersonality1::CStartStopPersonality1()

	{
	// Call base class method to set up the human readable name for logging
	SetTestStepName(KStartStopPersonality1);
	iDoNotConnect = ETrue;
	}

/*
 This test case uses 3 sessions to the USB manager to call TryStart and TryStop in
 different states of the server.
 For TryStart the first 2 sessions use the same personality id and the third one uses
 a different personality id.
*/
TVerdict CStartStopPersonality1::doTestStepL()
	{
	SetTestStepResult(EFail);
	
	//Read personality from ini file
	TInt personality1 = 0;
	TInt personality2 = 0;
	_LIT(KPersonality1, "personality1"); 
	if (!GetIntFromConfig(ConfigSection(), KPersonality1, personality1))
		{
		INFO_PRINTF1(_L("Can't get personality1 id from config file"));
		return TestStepResult();
		}
	_LIT(KPersonality2, "personality2"); 
	if (!GetIntFromConfig(ConfigSection(), KPersonality2, personality1))
		{
		INFO_PRINTF1(_L("Can't get personality2 id from config file"));
		return TestStepResult();
		}
	
	//Open sessions;
	RUsb sess1, sess2, sess3;

	TInt res;
	res = sess1.Connect();
	if (res != KErrNone)
		{
		INFO_PRINTF2(_L("Error connecting session 1 to USB service: %d"), res);
		return TestStepResult();
		}
	res = sess2.Connect();
	if (res != KErrNone)
		{
		INFO_PRINTF2(_L("Error connecting session 2 to USB service: %d"), res);
		return TestStepResult();
		}
	res = sess3.Connect();
	if (res != KErrNone)
		{
		INFO_PRINTF2(_L("Error connecting session 3 to USB service: %d"), res);
		return TestStepResult();
		}

	//Initial State: Idle
	//Function: TryStart
	INFO_PRINTF1(_L("Initial State: Idle, Function: TryStart"));
	SetIdle(sess1);
	if (CheckState(sess1, EUsbServiceIdle) != KErrNone)
		{
		INFO_PRINTF1(_L("Trying again"));
		SetIdle(sess1);
		if (CheckState(sess1, EUsbServiceIdle) != KErrNone)
			{
			return TestStepResult();
			}
		}
	if (TryStart(sess1, sess2, sess3, KErrNone, KErrNone, KErrAbort, personality1, personality2, EUsbServiceStarted) != KErrNone)
		{
		return TestStepResult();
		}
	
	//Initial State: Idle
	//Function: TryStop
	INFO_PRINTF1(_L("Initial State: Idle, Function: TryStop"));
	SetIdle(sess1);
	if (CheckState(sess1, EUsbServiceIdle) != KErrNone)
		{
		INFO_PRINTF1(_L("Trying again"));
		SetIdle(sess1);
		if (CheckState(sess1, EUsbServiceIdle) != KErrNone)
			{
			return TestStepResult();
			}
		}
	if (TryStop(sess1, sess2, sess3, KErrNone, KErrNone, KErrNone) != KErrNone)
		{
		return TestStepResult();
		}
	
	//Initial State: Starting
	//Function: TryStart
	INFO_PRINTF1(_L("Initial State: Starting, Function: TryStart"));
	SetStarting(sess1);
	if (CheckState(sess1, EUsbServiceStarting) != KErrNone)
		{
		INFO_PRINTF1(_L("Trying again"));
		SetStarting(sess1);
		if (CheckState(sess1, EUsbServiceStarting) != KErrNone)
			{
			return TestStepResult();
			}
		}
	if (TryStart(sess1, sess2, sess3, KErrNone, KErrNone, KErrAbort, personality1, personality2, EUsbServiceStarted) != KErrNone)
		{
		return TestStepResult();
		}
	
	//Initial State: Starting
	//Function: TryStop
	INFO_PRINTF1(_L("Initial State: Starting, Function: TryStop"));
	SetStarting(sess1);
	if (CheckState(sess1, EUsbServiceStarting) != KErrNone)
		{
		INFO_PRINTF1(_L("Trying again"));
		SetStarting(sess1);
		if (CheckState(sess1, EUsbServiceStarting) != KErrNone)
			{
			return TestStepResult();
			}
		}
	if (TryStop(sess1, sess2, sess3, KErrServerBusy, KErrServerBusy, KErrServerBusy) != KErrNone)
		{
		return TestStepResult();
		}

	//Initial State: Stopping
	//Function: TryStart
	INFO_PRINTF1(_L("Initial State: Stopping, Function: TryStart"));
	SetStopping(sess1);
	if (CheckState(sess1, EUsbServiceStopping) != KErrNone)
		{
		INFO_PRINTF1(_L("Trying again"));
		SetStopping(sess1);
		if (CheckState(sess1, EUsbServiceStopping) != KErrNone)
			{
			return TestStepResult();
			}
		}
	if (TryStart(sess1, sess2, sess3, KErrServerBusy, KErrServerBusy, KErrServerBusy, personality1, personality2, EUsbServiceStopping) != KErrNone)
		{
		return TestStepResult();
		}
	
	//Initial State: Stopping
	//Function: TryStop
	INFO_PRINTF1(_L("Initial State: Stopping, Function: TryStop"));
	SetStopping(sess1);
	if (CheckState(sess1, EUsbServiceStopping) != KErrNone)
		{
		INFO_PRINTF1(_L("Trying again"));
		SetStopping(sess1);
		if (CheckState(sess1, EUsbServiceStopping) != KErrNone)
			{
			return TestStepResult();
			}
		}
	if (TryStop(sess1, sess2, sess3, KErrNone, KErrNone, KErrNone) != KErrNone)
		{
		return TestStepResult();
		}
	
	//Initial State: Started
	//Function: TryStart
	//Assumes that the personality we are trying to start in sessions 1 and 2
	//is the same as the current personality.
	INFO_PRINTF1(_L("Initial State: Started, Function: TryStart"));
	SetStarted(sess1);
	if (CheckState(sess1, EUsbServiceStarted) != KErrNone)
		{
		INFO_PRINTF1(_L("Trying again"));
		SetStarted(sess1);
		if (CheckState(sess1, EUsbServiceStarted) != KErrNone)
			{
			return TestStepResult();
			}
		}
	if (TryStart(sess1, sess2, sess3, KErrNone, KErrNone, KErrAbort, personality1, personality2, EUsbServiceStarted) != KErrNone)
		{
		return TestStepResult();
		}
	
	//Initial State: Started
	//Function: TryStop
	INFO_PRINTF1(_L("Initial State: Started, Function: TryStop"));
	SetStarted(sess1);
	if (CheckState(sess1, EUsbServiceStarted) != KErrNone)
		{
		INFO_PRINTF1(_L("Trying again"));
		SetStarted(sess1);
		if (CheckState(sess1, EUsbServiceStarted) != KErrNone)
			{
			return TestStepResult();
			}
		}
	if (TryStop(sess1, sess2, sess3, KErrNone, KErrNone, KErrNone) != KErrNone)
		{
		return TestStepResult();
		}
	
	
	sess1.Close();
	sess2.Close();
	sess3.Close();
	
	SetTestStepResult(EPass);
	return TestStepResult();
	}

TInt CStartStopPersonality1::TryStart(RUsb aSess1, RUsb aSess2, RUsb aSess3, TInt aRet1, TInt aRet2, TInt aRet3, TInt aPersonality1, TInt aPersonality2, TUsbServiceState aState)
	{
	TRequestStatus stat1, stat2, stat3;
	aSess1.TryStart(aPersonality1, stat1);
	aSess2.TryStart(aPersonality1, stat2);
	aSess3.TryStart(aPersonality2, stat3);
	User::WaitForRequest(stat1);
	User::WaitForRequest(stat2);
	User::WaitForRequest(stat3);
	if (stat1 != aRet1)
		{
		INFO_PRINTF2(_L("Session 1 TryStart returned unexpected error code: %d"), stat1.Int());
		return KErrGeneral;
		}
	if (stat2 != aRet2)
		{
		INFO_PRINTF2(_L("Session 2 TryStart returned unexpected error code: %d"), stat2.Int());
		return KErrGeneral;
		}
	if (stat3 != aRet3)
		{
		INFO_PRINTF2(_L("Session 3 TryStart returned unexpected error code: %d"), stat3.Int());
		return KErrGeneral;
		}
	
	//Make sure the correct personality is loaded and the server is in the expected state
	TInt err;
	TInt currPersonality;
	err = aSess1.GetCurrentPersonalityId(currPersonality);
	if (err != KErrNone)
		{
		INFO_PRINTF2(_L("Unable to get current personality id: %d"), err);
		return KErrGeneral;
		}
	else if (currPersonality != aPersonality1)
		{
		INFO_PRINTF3(_L("Current personality id does not match expected value: %d != %d"), currPersonality, aPersonality1);
		return KErrGeneral;
		}
	
	return CheckState(aSess1, aState);
	}

TInt CStartStopPersonality1::TryStop(RUsb aSess1, RUsb aSess2, RUsb aSess3, TInt aRet1, TInt aRet2, TInt aRet3)
	{
	TRequestStatus stat1, stat2, stat3;
	aSess1.TryStop(stat1);
	aSess2.TryStop(stat2);
	aSess3.TryStop(stat3);
	User::WaitForRequest(stat1);
	User::WaitForRequest(stat2);
	User::WaitForRequest(stat3);
	if (stat1 != aRet1)
		{
		INFO_PRINTF2(_L("Session 1 TryStop returned unexpected error code: %d"), stat1.Int());
		return KErrGeneral;
		}
	if (stat2 != aRet2)
		{
		INFO_PRINTF2(_L("Session 2 TryStop returned unexpected error code: %d"), stat2.Int());
		return KErrGeneral;
		}
	if (stat3 != aRet3)
		{
		INFO_PRINTF2(_L("Session 3 TryStop returned unexpected error code: %d"), stat3.Int());
		return KErrGeneral;
		}
	return KErrNone;
	}

//////////////////////////////////
//    CStartStopPersonality2    //
//////////////////////////////////

CStartStopPersonality2::CStartStopPersonality2()

	{
	// Call base class method to set up the human readable name for logging
	SetTestStepName(KStartStopPersonality2);
	iDoNotConnect = ETrue;
	}

TVerdict CStartStopPersonality2::doTestStepL()
	{
	SetTestStepResult(EFail);
	
	//Read personality from ini file
	TInt personality;
	_LIT(KPersonality, "personality1"); 
	if (!GetIntFromConfig(ConfigSection(), KPersonality, personality))
		{
		INFO_PRINTF1(_L("Can't get personality id from config file"));
		return TestStepResult();
		}
	
	//Open sessions;
	RUsb sess1, sess2;

	TInt res;
	res = sess1.Connect();
	if (res != KErrNone)
		{
		INFO_PRINTF2(_L("Error connecting session 1 to USB service: %d"), res);
		return TestStepResult();
		}
	res = sess2.Connect();
	if (res != KErrNone)
		{
		INFO_PRINTF2(_L("Error connecting session 2 to USB service: %d"), res);
		return TestStepResult();
		}
	
	TRequestStatus stat1, stat2;
	
	//Initial State: Idle
	//Functions: TryStart/Start
	INFO_PRINTF1(_L("Initial State: Idle, Functions: TryStart/Start"));
	SetIdle(sess1);
	if (CheckState(sess1, EUsbServiceIdle) != KErrNone)
		{
		return TestStepResult();
		}
	sess1.TryStart(personality, stat1);
	sess2.Start(stat2);
	if (CheckReturnCodes(stat1, stat2, KErrNone, KErrNone) != KErrNone)
		{
		return TestStepResult();
		}
	
	//Initial State: Idle
	//Functions: Start/TryStart
	INFO_PRINTF1(_L("Initial State: Idle, Functions: Start/TryStart"));
	SetIdle(sess1);
	sess1.Start(stat1);
	sess2.TryStart(personality, stat2);
	if (CheckReturnCodes(stat1, stat2, KErrNone, KErrNone) != KErrNone)
		{
		return TestStepResult();
		}
	
	//Initial State: Idle
	//Functions: TryStart/Stop
	INFO_PRINTF1(_L("Initial State: Idle, Functions: TryStart/Stop"));
	SetIdle(sess1);
	sess1.TryStart(personality, stat1);
	sess2.Stop(stat2);
	if (CheckReturnCodes(stat1, stat2, KErrUsbServiceStopped, KErrNone) != KErrNone)
		{
		return TestStepResult();
		}
	
	//Initial State: Idle
	//Functions: Stop/TryStart
	INFO_PRINTF1(_L("Initial State: Idle, Functions: Stop/TryStart"));
	SetIdle(sess1);
	sess1.Stop(stat1);
	sess2.TryStart(personality, stat2);
	if (CheckReturnCodes(stat1, stat2, KErrNone, KErrNone) != KErrNone)
		{
		return TestStepResult();
		}
	
	//Initial State: Idle
	//Functions: TryStop/Start
	INFO_PRINTF1(_L("Initial State: Idle, Functions: TryStop/Start"));
	SetIdle(sess1);
	sess1.TryStop(stat1);
	sess2.Start(stat2);
	if (CheckReturnCodes(stat1, stat2, KErrNone, KErrNone) != KErrNone)
		{
		return TestStepResult();
		}
	
	//Initial State: Idle
	//Functions: Start/TryStop
	INFO_PRINTF1(_L("Initial State: Idle, Functions: Start/Stop"));
	SetIdle(sess1);
	sess1.Start(stat1);
	sess2.TryStop(stat2);
	if (CheckReturnCodes(stat1, stat2, KErrNone, KErrServerBusy) != KErrNone)
		{
		return TestStepResult();
		}
	
	//Initial State: Idle
	//Functions: TryStop/Stop
	INFO_PRINTF1(_L("Initial State: Idle, Functions: TryStop/Stop"));
	SetIdle(sess1);
	sess1.TryStop(stat1);
	sess2.Stop(stat2);
	if (CheckReturnCodes(stat1, stat2, KErrNone, KErrNone) != KErrNone)
		{
		return TestStepResult();
		}
	
	//Initial State: Idle
	//Functions: Stop/TryStop
	INFO_PRINTF1(_L("Initial State: Idle, Functions: Stop/TryStop"));
	SetIdle(sess1);
	sess1.Stop(stat1);
	sess2.TryStop(stat2);
	if (CheckReturnCodes(stat1, stat2, KErrNone, KErrNone) != KErrNone)
		{
		return TestStepResult();
		}
	
	//Initial State: Starting
	//Functions: TryStart/Start
	INFO_PRINTF1(_L("Initial State: Starting, Functions: TryStart/Start"));
	SetIdle(sess1);
	sess1.TryStart(personality, stat1);
	sess2.Start(stat2);
	if (CheckReturnCodes(stat1, stat2, KErrNone, KErrNone) != KErrNone)
		{
		return TestStepResult();
		}
	
	//Initial State: Starting
	//Functions: Start/TryStart
	INFO_PRINTF1(_L("Initial State: Starting, Functions: Start/TryStart"));
	SetStarting(sess1);
	sess1.Start(stat1);
	sess2.TryStart(personality, stat2);
	if (CheckReturnCodes(stat1, stat2, KErrNone, KErrNone) != KErrNone)
		{
		return TestStepResult();
		}
	
	//Initial State: Starting
	//Functions: TryStart/Stop
	INFO_PRINTF1(_L("Initial State: Starting, Functions: TryStart/Stop"));
	SetStarting(sess1);
	sess1.TryStart(personality, stat1);
	sess2.Stop(stat2);
	if (CheckReturnCodes(stat1, stat2, KErrUsbServiceStopped, KErrNone) != KErrNone)
		{
		return TestStepResult();
		}
	
	//Initial State: Starting
	//Functions: Stop/TryStart
	INFO_PRINTF1(_L("Initial State: Starting, Functions: Stop/TryStart"));
	SetStarting(sess1);
	sess1.Stop(stat1);
	sess2.TryStart(personality, stat2);
	if (CheckReturnCodes(stat1, stat2, KErrNone, KErrServerBusy) != KErrNone)
		{
		return TestStepResult();
		}
	
	//Initial State: Starting
	//Functions: TryStop/Start
	INFO_PRINTF1(_L("Initial State: Starting, Functions: TryStop/Start"));
	SetStarting(sess1);
	sess1.TryStop(stat1);
	sess2.Start(stat2);
	if (CheckReturnCodes(stat1, stat2, KErrServerBusy, KErrNone) != KErrNone)
		{
		return TestStepResult();
		}
	
	//Initial State: Starting
	//Functions: Start/TryStop
	INFO_PRINTF1(_L("Initial State: Starting, Functions: Start/TryStop"));
	SetStarting(sess1);
	sess1.Start(stat1);
	sess2.TryStop(stat2);
	if (CheckReturnCodes(stat1, stat2, KErrNone, KErrServerBusy) != KErrNone)
		{
		return TestStepResult();
		}
	
	//Initial State: Starting
	//Functions: TryStop/Stop
	INFO_PRINTF1(_L("Initial State: Starting, Functions: TryStop/Stop"));
	SetStarting(sess1);
	sess1.TryStop(stat1);
	sess2.Stop(stat2);
	if (CheckReturnCodes(stat1, stat2, KErrServerBusy, KErrNone) != KErrNone)
		{
		return TestStepResult();
		}
	
	//Initial State: Starting
	//Functions: Stop/TryStop
	INFO_PRINTF1(_L("Initial State: Starting, Functions: Stop/TryStop"));
	SetStarting(sess1);
	sess1.Stop(stat1);
	sess2.TryStop(stat2);
	if (CheckReturnCodes(stat1, stat2, KErrNone, KErrNone) != KErrNone)
		{
		return TestStepResult();
		}
	
	//Initial State: Stopping
	//Functions: TryStart/Start
	INFO_PRINTF1(_L("Initial State: Stopping, Functions: TryStart/Start"));
	SetStopping(sess1);
	sess1.TryStart(personality, stat1);
	sess2.Start(stat2);
	if (CheckReturnCodes(stat1, stat2, KErrServerBusy, KErrNone) != KErrNone)
		{
		return TestStepResult();
		}
	
	//Initial State: Stopping
	//Functions: Start/TryStart
	INFO_PRINTF1(_L("Initial State: Stopping, Functions: Start/TryStart"));
	SetStopping(sess1);
	sess1.Start(stat1);
	sess2.TryStart(personality, stat2);
	if (CheckReturnCodes(stat1, stat2, KErrNone, KErrNone) != KErrNone)
		{
		return TestStepResult();
		}
	
	//Initial State: Stopping
	//Functions: TryStart/Stop
	INFO_PRINTF1(_L("Initial State: Stopping, Functions: TryStart/Stop"));
	SetStopping(sess1);
	sess1.TryStart(personality, stat1);
	sess2.Stop(stat2);
	if (CheckReturnCodes(stat1, stat2, KErrServerBusy, KErrNone) != KErrNone)
		{
		return TestStepResult();
		}
	
	//Initial State: Stopping
	//Functions: Stop/TryStart
	INFO_PRINTF1(_L("Initial State: Stopping, Functions: Stop/TryStart"));
	SetStopping(sess1);
	sess1.Stop(stat1);
	sess2.TryStart(personality, stat2);
	if (CheckReturnCodes(stat1, stat2, KErrNone, KErrServerBusy) != KErrNone)
		{
		return TestStepResult();
		}
	
	//Initial State: Stopping
	//Functions: TryStop/Start
	INFO_PRINTF1(_L("Initial State: Stopping, Functions: TryStop/Start"));
	SetStopping(sess1);
	sess1.TryStop(stat1);
	sess2.Start(stat2);
	if (CheckReturnCodes(stat1, stat2, KErrUsbServiceStarted, KErrNone) != KErrNone)
		{
		return TestStepResult();
		}
	
	//Initial State: Stopping
	//Functions: Start/TryStop
	INFO_PRINTF1(_L("Initial State: Stopping, Functions: Start/TryStop"));
	SetStopping(sess1);
	sess1.Start(stat1);
	sess2.TryStop(stat2);
	if (CheckReturnCodes(stat1, stat2, KErrNone, KErrServerBusy) != KErrNone)
		{
		return TestStepResult();
		}
	
	//Initial State: Stopping
	//Functions: TryStop/Stop
	INFO_PRINTF1(_L("Initial State: Stopping, Functions: TryStop/Stop"));
	SetStopping(sess1);
	sess1.TryStop(stat1);
	sess2.Stop(stat2);
	if (CheckReturnCodes(stat1, stat2, KErrNone, KErrNone) != KErrNone)
		{
		return TestStepResult();
		}
	
	//Initial State: Stopping
	//Functions: Stop/TryStop
	INFO_PRINTF1(_L("Initial State: Stopping, Functions: Stop/TryStop"));
	SetStopping(sess1);
	sess1.Stop(stat1);
	sess2.TryStop(stat2);
	if (CheckReturnCodes(stat1, stat2, KErrNone, KErrNone) != KErrNone)
		{
		return TestStepResult();
		}
	
	//Initial State: Started
	//Functions: TryStart/Start
	INFO_PRINTF1(_L("Initial State: Started, Functions: TryStart/Start"));
	SetIdle(sess1);
	sess1.TryStart(personality, stat1);
	sess2.Start(stat2);
	if (CheckReturnCodes(stat1, stat2, KErrNone, KErrNone) != KErrNone)
		{
		return TestStepResult();
		}
	
	//Initial State: Started
	//Functions: Start/TryStart
	//Assumes that the personality we are trying to start in sessions 1 and 2
	//is the same as the current personality.
	INFO_PRINTF1(_L("Initial State: Started, Functions: Start/TryStart"));
	SetStarted(sess1);
	sess1.Start(stat1);
	sess2.TryStart(personality, stat2);
	if (CheckReturnCodes(stat1, stat2, KErrNone, KErrNone) != KErrNone)
		{
		return TestStepResult();
		}
	
	//Initial State: Started
	//Functions: TryStart/Stop
	//Assumes that the personality we are trying to start in session 1
	//is the same as the current personality.
	INFO_PRINTF1(_L("Initial State: Started, Functions: TryStart/Stop"));
	SetStarted(sess1);
	sess1.TryStart(personality, stat1);
	sess2.Stop(stat2);
	if (CheckReturnCodes(stat1, stat2, KErrNone, KErrNone) != KErrNone)
		{
		return TestStepResult();
		}
	
	//Initial State: Started
	//Functions: Stop/TryStart
	INFO_PRINTF1(_L("Initial State: Started, Functions: Stop/TryStart"));
	SetStarted(sess1);
	sess1.Stop(stat1);
	sess2.TryStart(personality, stat2);
	if (CheckReturnCodes(stat1, stat2, KErrNone, KErrServerBusy) != KErrNone)
		{
		return TestStepResult();
		}
	
	//Initial State: Started
	//Functions: TryStop/Start
	INFO_PRINTF1(_L("Initial State: Started, Functions: TryStop/Start"));
	SetStarted(sess1);
	sess1.TryStop(stat1);
	sess2.Start(stat2);
	if (CheckReturnCodes(stat1, stat2, KErrUsbServiceStarted, KErrNone) != KErrNone)
		{
		return TestStepResult();
		}
	
	//Initial State: Started
	//Functions: Start/TryStop
	INFO_PRINTF1(_L("Initial State: Started, Functions: Start/TryStop"));
	SetStarted(sess1);
	sess1.Start(stat1);
	sess2.TryStop(stat2);
	if (CheckReturnCodes(stat1, stat2, KErrNone, KErrNone) != KErrNone)
		{
		return TestStepResult();
		}
	
	//Initial State: Started
	//Functions: TryStop/Stop
	INFO_PRINTF1(_L("Initial State: Started, Functions: TryStop/Stop"));
	SetStarted(sess1);
	sess1.TryStop(stat1);
	sess2.Stop(stat2);
	if (CheckReturnCodes(stat1, stat2, KErrNone, KErrNone) != KErrNone)
		{
		return TestStepResult();
		}
	
	//Initial State: Started
	//Functions: Stop/TryStop
	INFO_PRINTF1(_L("Initial State: Started, Functions: Stop/TryStop"));
	SetStarted(sess1);
	sess1.Stop(stat1);
	sess2.TryStop(stat2);
	if (CheckReturnCodes(stat1, stat2, KErrNone, KErrNone) != KErrNone)
		{
		return TestStepResult();
		}
	
	sess1.Close();
	sess2.Close();
	
	SetTestStepResult(EPass);
	return TestStepResult();
	}

TInt CStartStopPersonality2::CheckReturnCodes(TRequestStatus& aStat1, TRequestStatus& aStat2, TInt aRet1, TInt aRet2)
	{
	User::WaitForRequest(aStat1);
	User::WaitForRequest(aStat2);
	if (aStat1 != aRet1)
		{
		INFO_PRINTF2(_L("Session 1 returned unexpected error code: %d"), aStat1.Int());
		return KErrGeneral;
		}
	if (aStat2 != aRet2)
		{
		INFO_PRINTF2(_L("Session 2 returned unexpected error code: %d"), aStat2.Int());
		return KErrGeneral;
		}
	return KErrNone;
	}