--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/usbmgmt/usbmgrtest/t_usbmanager_suite/T_UsbManager/src/CStartStopPersonality.cpp Tue Feb 02 02:02:59 2010 +0200
@@ -0,0 +1,738 @@
+/*
+* 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;
+ }
+