--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyutils/telephonywatchers/Test/TE_TelWatchers/TE_TelWatchersUnitTest.cpp Tue Feb 02 01:41:59 2010 +0200
@@ -0,0 +1,605 @@
+// Copyright (c) 2001-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:
+// Telephony Watchers Unit Test main test code.
+//
+//
+
+/**
+ @file
+*/
+
+#include <e32uid.h>
+#include <f32file.h>
+#include <bafindf.h>
+#include <cdbcols.h>
+
+#include "indicatorwatcher.h"
+#include "signalstrengthwatcher.h"
+
+#include "TE_TelWatchersUnitBase.h"
+#include "TE_TelWatchersUnitTest.h"
+
+//
+// Constants...
+//
+const TInt KExpectedCallStateChanges(4);
+const TInt KExpectedBatteryChargerStateChanges(4);
+const TInt KExpectedNetworkAvailabilityStateChanges(4);
+const TInt KSimulatedCommDBChanges(10);
+
+/**
+ * Each test step initialises it's own name
+ */
+CTelWatchersUnitTestCallStateChangesWithPublishSubscribe::CTelWatchersUnitTestCallStateChangesWithPublishSubscribe()
+ {
+ //
+ // Store the name of this test case. This is the name that is used by
+ // the script file.
+ //
+ SetTestStepName(_L("TestCallStateChangesWithPublishSubscribe"));
+ } // CTelWatchersUnitTestCallStateChangesWithPublishSubscribe::CTelWatchersUnitTestCallStateChangesWithPublishSubscribe
+
+
+/**
+ * Simple destructor.
+ */
+CTelWatchersUnitTestCallStateChangesWithPublishSubscribe::~CTelWatchersUnitTestCallStateChangesWithPublishSubscribe()
+ {
+ // NOP
+ } // CTelWatchersUnitTestCallStateChangesWithPublishSubscribe::~CTelWatchersUnitTestCallStateChangesWithPublishSubscribe
+
+
+/**
+ * This test monitors the call state notifications and checks they
+ * are as expected and valid.
+ */
+enum TVerdict CTelWatchersUnitTestCallStateChangesWithPublishSubscribe::doTestStepL()
+ {
+ SetSimTsyTestNumberL(0);
+
+ RProperty propCurrCallState; //- property that reflects current call state
+ TInt propVal = KErrUnknown; //- value of the property
+
+ INFO_PRINTF2(_L("Wait for %d call state changes with publish and subscribe"),
+ KExpectedCallStateChanges);
+
+ //-- attach to KUidCurrentCall property
+ TESTL(propCurrCallState.Attach(KUidSystemCategory,KUidCurrentCall.iUid) == KErrNone);
+
+ //
+ // Install the Indicator and Signal Strength watcher...
+ //
+ TInt dummyWatcherParams;
+ CIndicatorWatcher* indicatorWatcher = CIndicatorWatcher::NewL((TAny*)&dummyWatcherParams);
+
+ CleanupStack::PushL(indicatorWatcher);
+
+ CSignalStrengthWatcher* signalStrengthWatcher = CSignalStrengthWatcher::NewL((TAny*)&dummyWatcherParams);
+ CleanupStack::PushL(signalStrengthWatcher);
+
+ //
+ // Prepare indicator watcher to return random call state
+ // values...
+ //
+ TESTL(RProperty::Set(KUidSystemCategory, KUidTestProp_CallStateChange.iUid, 0) == KErrNone);
+
+ //
+ // Wait for the change events...
+ //
+ CWatcherObserverPS* watcher = new(ELeave) CWatcherObserverPS;
+ CleanupStack::PushL(watcher);
+
+ watcher->BindProperty(&propCurrCallState);
+
+ TInt counter;
+
+ for (counter = 0; counter < KExpectedCallStateChanges; counter++)
+ {
+ //
+ // Prepares a notify request and starts the scheduler. Stops the
+ // scheduler when notify is detected.
+ //
+ watcher->WaitForPropertyChangeL();
+
+ //-- get property value after it has been updated
+ TESTL(watcher->GetPropertyValue(propVal) == KErrNone);
+
+ //
+ // Print the state...
+ //
+ switch (propVal)
+ {
+ case ESACallNone:
+ {
+ INFO_PRINTF1(_L(" Call None."));
+ }
+ break;
+
+ case ESACallVoice:
+ {
+ INFO_PRINTF1(_L(" Call Voice."));
+ }
+ break;
+
+ case ESACallFax:
+ {
+ INFO_PRINTF1(_L(" Call Fax."));
+ }
+ break;
+
+ case ESACallData:
+ {
+ INFO_PRINTF1(_L(" Call Data."));
+ }
+ break;
+
+ case ESACallAlerting:
+ {
+ INFO_PRINTF1(_L(" Call Alerting."));
+ }
+ break;
+
+ case ESACallRinging:
+ {
+ INFO_PRINTF1(_L(" Call Ringing."));
+ }
+ break;
+
+ case ESACallAlternating:
+ {
+ INFO_PRINTF1(_L(" Call Alternating."));
+ }
+ break;
+
+ default:
+ {
+ INFO_PRINTF2(_L("Failed: Unknown state returned (%d)!"), propVal);
+ SetTestStepResult(EFail);
+ }
+ break;
+ }
+ }
+
+ CleanupStack::PopAndDestroy(watcher);
+ CleanupStack::PopAndDestroy(signalStrengthWatcher);
+ CleanupStack::PopAndDestroy(indicatorWatcher);
+
+ return TestStepResult();
+ } // CTelWatchersUnitTestCallStateChangesWithPublishSubscribe::doTestStepL
+
+/**
+ * Each test step initialises it's own name
+ */
+CTelWatchersUnitTestBatteryChargerChangesWithPublishSubscribe::CTelWatchersUnitTestBatteryChargerChangesWithPublishSubscribe()
+ {
+ //
+ // Store the name of this test case. This is the name that is used by
+ // the script file.
+ //
+ SetTestStepName(_L("TestBatteryChargerChangesWithPublishSubscribe"));
+ } // CTelWatchersUnitTestBatteryChargerChangesWithPublishSubscribe::CTelWatchersUnitTestBatteryChargerChangesWithPublishSubscribe
+
+
+/**
+ * Simple destructor.
+ */
+CTelWatchersUnitTestBatteryChargerChangesWithPublishSubscribe::~CTelWatchersUnitTestBatteryChargerChangesWithPublishSubscribe()
+ {
+ // NOP
+ } // CTelWatchersUnitTestBatteryChargerChangesWithPublishSubscribe::~CTelWatchersUnitTestBatteryChargerChangesWithPublishSubscribe
+
+
+/**
+ * This test monitors the battery charger notifications and checks they
+ * are as expected and valid.
+ */
+enum TVerdict CTelWatchersUnitTestBatteryChargerChangesWithPublishSubscribe::doTestStepL()
+ {
+ SetSimTsyTestNumberL(0);
+
+ RProperty propChargerState; //- property that reflects phone charger state
+ TInt propVal = KErrUnknown; //- value of the property
+
+ INFO_PRINTF2(_L("Wait for %d battery charger changes with publish and subscribe"),
+ KExpectedBatteryChargerStateChanges);
+
+ //-- attach to KUidChargerStatus property
+ TESTL(propChargerState.Attach(KUidSystemCategory,KUidChargerStatus.iUid) == KErrNone);
+
+ //
+ // Install the Indicator and Signal Strength watcher...
+ //
+ TInt dummyWatcherParams;
+ CIndicatorWatcher* indicatorWatcher = CIndicatorWatcher::NewL((TAny*)&dummyWatcherParams);
+
+ CleanupStack::PushL(indicatorWatcher);
+
+ CSignalStrengthWatcher* signalStrengthWatcher = CSignalStrengthWatcher::NewL((TAny*)&dummyWatcherParams);
+ CleanupStack::PushL(signalStrengthWatcher);
+
+ //
+ // Prepare indicator watcher to return random battery values...
+ //
+ //
+ TESTL(RProperty::Set(KUidSystemCategory, KUidTestProp_CallStateChange.iUid, 1) == KErrNone);
+
+ //
+ // Wait for the change events...
+ //
+ CWatcherObserverPS* watcher = new(ELeave) CWatcherObserverPS;
+ CleanupStack::PushL(watcher);
+ watcher->BindProperty( &propChargerState );
+ TInt counter;
+
+ for (counter = 0; counter < KExpectedBatteryChargerStateChanges; counter++)
+ {
+ //
+ // Prepares a notify request and starts the scheduler. Stops the scheduler
+ // when notify is detected.
+ //
+ watcher->WaitForPropertyChangeL();
+
+ //-- get property value after it has been updated
+ TESTL(watcher->GetPropertyValue(propVal) == KErrNone);
+
+ //
+ // Print state...
+ //
+ switch (propVal)
+ {
+ case ESAChargerConnected:
+ {
+ INFO_PRINTF1(_L(" Charger connected."));
+ }
+ break;
+
+ case ESAChargerDisconnected:
+ {
+ INFO_PRINTF1(_L(" Charger disconnected."));
+ }
+ break;
+
+ case ESAChargerNotCharging:
+ {
+ INFO_PRINTF1(_L(" Not charging."));
+ }
+ break;
+
+ default:
+ {
+ INFO_PRINTF2(_L("Failed: Unknown state returned (%d)!"), propVal);
+ SetTestStepResult(EFail);
+ }
+ break;
+ }
+ }
+
+ CleanupStack::PopAndDestroy(watcher);
+ CleanupStack::PopAndDestroy(signalStrengthWatcher);
+ CleanupStack::PopAndDestroy(indicatorWatcher);
+
+ return TestStepResult();
+ } // CTelWatchersUnitTestBatteryChargerChangesWithPublishSubscribe::doTestStepL
+
+/**
+ * Each test step initialises it's own name
+ */
+CTelWatchersUnitTestNetworkAvailabilityChangesWithPublishSubscribe::CTelWatchersUnitTestNetworkAvailabilityChangesWithPublishSubscribe()
+ {
+ //
+ // Store the name of this test case. This is the name that is used by
+ // the script file.
+ //
+ SetTestStepName(_L("TestNetworkAvailabilityChangesWithPublishSubscribe"));
+ } // CTelWatchersUnitTestNetworkAvailabilityChangesWithPublishSubscribe::CTelWatchersUnitTestNetworkAvailabilityChangesWithPublishSubscribe
+
+
+/**
+ * Simple destructor.
+ */
+CTelWatchersUnitTestNetworkAvailabilityChangesWithPublishSubscribe::~CTelWatchersUnitTestNetworkAvailabilityChangesWithPublishSubscribe()
+ {
+ // NOP
+ } // CTelWatchersUnitTestNetworkAvailabilityChangesWithPublishSubscribe::~CTelWatchersUnitTestNetworkAvailabilityChangesWithPublishSubscribe
+
+
+/**
+ * This test monitors the network availablity notifications and checks they
+ * are as expected and valid.
+ */
+enum TVerdict CTelWatchersUnitTestNetworkAvailabilityChangesWithPublishSubscribe::doTestStepL()
+ {
+ SetSimTsyTestNumberL(0);
+
+ RProperty propNetworkState; //- property that reflects phone charger state
+ TInt propVal = KErrUnknown; //- value of the property
+
+ INFO_PRINTF2(_L("Wait for %d network availability changes with publish and subscribe"),
+ KExpectedNetworkAvailabilityStateChanges);
+
+ //-- attach to KUidCurrentCall property
+ TESTL(propNetworkState.Attach(KUidSystemCategory,KUidNetworkStatus.iUid) == KErrNone);
+
+ //
+ // Install the Indicator and Signal Strength watcher...
+ //
+ TInt dummyWatcherParams;
+ CIndicatorWatcher* indicatorWatcher = CIndicatorWatcher::NewL((TAny*)&dummyWatcherParams);
+
+ CleanupStack::PushL(indicatorWatcher);
+
+ CSignalStrengthWatcher* signalStrengthWatcher = CSignalStrengthWatcher::NewL((TAny*)&dummyWatcherParams);
+ CleanupStack::PushL(signalStrengthWatcher);
+
+ //
+ // Prepare indicator watcher to return random network state
+ // values...
+ //
+ TESTL(RProperty::Set(KUidSystemCategory, KUidTestProp_CallStateChange.iUid, 2) == KErrNone);
+
+ //
+ // Wait for the change events...
+ //
+ CWatcherObserverPS* watcher = new(ELeave) CWatcherObserverPS;
+ CleanupStack::PushL(watcher);
+ watcher->BindProperty( &propNetworkState );
+ TInt counter;
+
+ for (counter = 0; counter < KExpectedNetworkAvailabilityStateChanges; counter++)
+ {
+ //
+ // Prepares a notify request and starts the scheduler. Stops the
+ // scheduler when notify is detected.
+ //
+ watcher->WaitForPropertyChangeL();
+
+ //-- get property value after it has been updated
+ TESTL(watcher->GetPropertyValue(propVal) == KErrNone);
+
+ //
+ // Print state...
+ //
+ switch(propVal)
+ {
+ case ESANetworkAvailable:
+ {
+ INFO_PRINTF1(_L(" Network available."));
+ }
+ break;
+
+ case ESANetworkUnAvailable:
+ {
+ INFO_PRINTF1(_L(" Network unavailable."));
+ }
+ break;
+
+ default:
+ {
+ INFO_PRINTF2(_L("Failed: Unknown state returned (%d)!"), propVal);
+ SetTestStepResult(EFail);
+ }
+ break;
+ }
+ }
+
+ CleanupStack::PopAndDestroy(watcher);
+ CleanupStack::PopAndDestroy(signalStrengthWatcher);
+ CleanupStack::PopAndDestroy(indicatorWatcher);
+
+ return TestStepResult();
+ } // CTelWatchersUnitTestNetworkAvailabilityChangesWithPublishSubscribe::doTestStepL
+
+/**
+ * Each test step initialises it's own name
+ */
+CTelWatchersUnitTestSimulteCommDBModemChangeWithPublishSubscribe::CTelWatchersUnitTestSimulteCommDBModemChangeWithPublishSubscribe()
+ {
+ //
+ // Store the name of this test case. This is the name that is used by
+ // the script file.
+ //
+ SetTestStepName(_L("TestSimulteCommDBModemChangeWithPublishSubscribe"));
+ } //CTelWatchersUnitTestSimulteCommDBModemChangeWithPublishSubscribe::CTelWatchersUnitTestSimulteCommDBModemChangeWithPublishSubscribe
+
+
+/**
+ * Simple destructor.
+ */
+CTelWatchersUnitTestSimulteCommDBModemChangeWithPublishSubscribe::~CTelWatchersUnitTestSimulteCommDBModemChangeWithPublishSubscribe()
+ {
+ // NOP
+ } // CTelWatchersUnitTestSimulteCommDBModemChangeWithPublishSubscribe::~CTelWatchersUnitTestSimulteCommDBModemChangeWithPublishSubscribe
+
+
+/**
+ * This test issues a number of CommDB table update requests to the Watcher and
+ * checks that the CommDB table is re-read.
+ */
+enum TVerdict CTelWatchersUnitTestSimulteCommDBModemChangeWithPublishSubscribe::doTestStepL()
+ {
+ SetSimTsyTestNumberL(0);
+
+ INFO_PRINTF2(_L("Simulate %d CommDB default modem changes with publish and subscribe"),
+ KSimulatedCommDBChanges);
+
+ RProperty propMdmRecordChanged; //-- modem record change property (debug only)
+ RProperty propMdmTableRefreshed; //-- modem table re-read property (debug only)
+
+ TESTL(propMdmRecordChanged.Attach(KUidSystemCategory, KUidTestProp_ModemRecordChanged.iUid) == KErrNone);
+ TESTL(propMdmTableRefreshed.Attach(KUidSystemCategory, KUidTestProp_ModemTableRefreshed.iUid) == KErrNone);
+
+ //
+ // Install the Indicator and Signal Strength watcher...
+ //
+ TInt dummyWatcherParams;
+ CIndicatorWatcher* indicatorWatcher = CIndicatorWatcher::NewL((TAny*)&dummyWatcherParams);
+ CleanupStack::PushL(indicatorWatcher);
+
+ CSignalStrengthWatcher* signalStrengthWatcher = CSignalStrengthWatcher::NewL((TAny*)&dummyWatcherParams);
+ CleanupStack::PushL(signalStrengthWatcher);
+
+ //
+ // Allow a few seconds for the Active Objects to start...
+ //
+ PauseToRunActiveSchedulerL(10);
+
+ //
+ // Wait for the change events...
+ //
+ CWatcherObserverPS* watcher = new(ELeave) CWatcherObserverPS;
+ CleanupStack::PushL(watcher);
+ TInt counter;
+
+ for (counter = 0; counter < KSimulatedCommDBChanges; counter++)
+ {
+ //
+ // Send some comm db modem record change events
+ //
+ TTime time;
+ time.UniversalTime();
+
+ TESTL(RProperty::Set(KUidSystemCategory, KUidCommDbModemPhoneServicesAndSMSChange.iUid, I64LOW(time.Int64())) == KErrNone );
+
+ //
+ // Now wait for an ack that the change was spotted...
+ //
+ watcher->BindProperty(&propMdmRecordChanged);
+ watcher->WaitForPropertyChangeL();
+
+ INFO_PRINTF1(_L(" CommDB change has been spotted."));
+
+ //
+ // Now wait for an ack that the modem table has been re-read ok
+ //
+ watcher->BindProperty(&propMdmTableRefreshed);
+ watcher->WaitForPropertyChangeL();
+
+ INFO_PRINTF1(_L(" Modem table has been re-read."));
+
+ //
+ // Now wait a few seconds before trying again
+ //
+ PauseToRunActiveSchedulerL(10);
+ }
+
+ CleanupStack::PopAndDestroy(watcher);
+ CleanupStack::PopAndDestroy(signalStrengthWatcher);
+ CleanupStack::PopAndDestroy(indicatorWatcher);
+
+ return TestStepResult();
+ } // CTelWatchersUnitTestSimulteCommDBModemChangeWithPublishSubscribe::doTestStepL
+
+
+/**
+ * Each test step initialises it's own name
+ */
+CTelWatchersUnitTestCommDBChangeWhenWatcherDisabledWithPublishSubscribe::CTelWatchersUnitTestCommDBChangeWhenWatcherDisabledWithPublishSubscribe()
+ {
+ //
+ // Store the name of this test case. This is the name that is used by
+ // the script file.
+ //
+ SetTestStepName(_L("TestCommDBChangeWhenWatcherDisabledWithPublishSubscribe"));
+ } // CTelWatchersUnitTestCommDBChangeWhenWatcherDisabledWithPublishSubscribe::CTelWatchersUnitTestCommDBChangeWhenWatcherDisabledWithPublishSubscribe
+
+
+/**
+ * Simple destructor.
+ */
+CTelWatchersUnitTestCommDBChangeWhenWatcherDisabledWithPublishSubscribe::~CTelWatchersUnitTestCommDBChangeWhenWatcherDisabledWithPublishSubscribe()
+ {
+ // NOP
+ } // CTelWatchersUnitTestCommDBChangeWhenWatcherDisabledWithPublishSubscribe::~CTelWatchersUnitTestCommDBChangeWhenWatcherDisabledWithPublishSubscribe
+
+
+/**
+ * This test checks that the Watcher notices a CommDB change whilst the Watcher
+ * are disabled.
+ */
+enum TVerdict CTelWatchersUnitTestCommDBChangeWhenWatcherDisabledWithPublishSubscribe::doTestStepL()
+ {
+ SetSimTsyTestNumberL(0);
+
+ INFO_PRINTF1(_L("Test sending a CommDB change when the watcher is disabled with publish and subscribe"));
+
+ RProperty propPhoneWatcherDisable;//-- Phone watchers disabling/reset (debug only)
+ RProperty propMdmRecordChanged; //-- modem record change property (debug only)
+ RProperty propMdmTableRefreshed; //-- modem table re-read property (debug only)
+
+ TESTL(propPhoneWatcherDisable.Attach(KUidSystemCategory, KUidTestProp_WatchersDisable.iUid) == KErrNone);
+ TESTL(propMdmRecordChanged.Attach(KUidSystemCategory, KUidTestProp_ModemRecordChanged.iUid) == KErrNone);
+ TESTL(propMdmTableRefreshed.Attach(KUidSystemCategory, KUidTestProp_ModemTableRefreshed.iUid) == KErrNone);
+
+ //
+ // Install the Indicator and Signal Strength watcher...
+ //
+ TInt dummyWatcherParams;
+ CIndicatorWatcher* indicatorWatcher = CIndicatorWatcher::NewL((TAny*)&dummyWatcherParams);
+ CleanupStack::PushL(indicatorWatcher);
+
+ CSignalStrengthWatcher* signalStrengthWatcher = CSignalStrengthWatcher::NewL((TAny*)&dummyWatcherParams);
+ CleanupStack::PushL(signalStrengthWatcher);
+
+ //
+ // Allow a few seconds for the Active Objects to start...
+ //
+ PauseToRunActiveSchedulerL(10);
+
+
+ //
+ // To wait for the change events...
+ //
+ CWatcherObserverPS* watcher = new(ELeave) CWatcherObserverPS();
+ CleanupStack::PushL(watcher);
+
+ //
+ // Disable the watcher by setting the property...
+ //
+ TESTL(propPhoneWatcherDisable.Set(ETrue) == KErrNone );
+
+ INFO_PRINTF1(_L(" Watcher has been disabled."));
+
+ //
+ // Send some Comm DB modem record change events...
+ //
+ TTime time;
+ time.UniversalTime();
+
+ TESTL(RProperty::Set(KUidSystemCategory, KUidCommDbModemPhoneServicesAndSMSChange.iUid, I64LOW(time.Int64())) == KErrNone );
+
+ //
+ // Now wait for an ack that the change was spotted...
+ //
+ watcher->BindProperty(&propMdmRecordChanged);
+ watcher->WaitForPropertyChangeL();
+ INFO_PRINTF1(_L(" CommDB change has been spotted."));
+
+ //
+ // Now wait for an ack that the modem table has been re-read ok
+ //
+ watcher->BindProperty(&propMdmTableRefreshed);
+ watcher->WaitForPropertyChangeL();
+ INFO_PRINTF1(_L(" Modem table has been re-read."));
+
+ //
+ // Now wait a few seconds before trying again...
+ //
+ PauseToRunActiveSchedulerL(10);
+
+ CleanupStack::PopAndDestroy(watcher);
+ CleanupStack::PopAndDestroy(signalStrengthWatcher);
+ CleanupStack::PopAndDestroy(indicatorWatcher);
+
+ return TestStepResult();
+ } // CTelWatchersUnitTestCommDBChangeWhenWatcherDisabledWithPublishSubscribe::doTestStepL