diff -r 000000000000 -r c9bc50fca66e usbmgmt/usbmgrtest/t_usbmanager_suite/T_UsbManager/src/CStartStopPersonality.cpp --- /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 +#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; + } +