sysstatemgmt/systemstatereferenceplugins/test/tclayer/src/tclayer_step_ssmsimstatusobserver.cpp
changeset 0 4e1aa6a622a0
child 21 ccb4f6b3db21
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sysstatemgmt/systemstatereferenceplugins/test/tclayer/src/tclayer_step_ssmsimstatusobserver.cpp	Tue Feb 02 00:53:00 2010 +0200
@@ -0,0 +1,471 @@
+// Copyright (c) 2008-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
+ @test
+ @internalComponent - Internal Symbian test code  
+*/
+
+#include <etelmm.h>
+#include <centralrepository.h> 
+#include <ssm/ssmuiproviderdll.h>
+
+// Include the header file for the class under test
+#include "ssmsimstatusobserver.h"
+#include "cmdpublishsimownedandchanged.h"
+
+#include "ssmclayer.h"
+
+#include "ssmdebug.h"
+
+#include "tclayer_step_ssmsimstatusobserver.h"
+
+//Include the test wrappers/helpers
+#include "adaptationcliwrapper.h"
+#include "ssmcmnwrapper.h"
+#include "activestopper.h"
+
+/**
+ * Constructs a complete CCLayerTestSsmSimStatusObserver object
+ * @internalComponent
+ */
+CCLayerTestSsmSimStatusObserver::CCLayerTestSsmSimStatusObserver()
+    :iAsyncStopScheduler(NULL),
+    iActiveScheduler(NULL)  
+	{
+	
+	}
+
+/**
+ * Releases any resources associated with this test
+ * @internalComponent
+ */
+CCLayerTestSsmSimStatusObserver::~CCLayerTestSsmSimStatusObserver()
+	{
+	
+	}
+
+/**
+ * Test step preamble
+ * @internalComponent
+ */
+TVerdict CCLayerTestSsmSimStatusObserver::doTestStepPreambleL()
+	{
+    iActiveScheduler = new(ELeave) CActiveScheduler;
+    CActiveScheduler::Install (iActiveScheduler);
+
+    //Needed for calling callback for stopping active scheduler
+    iAsyncStopScheduler = new(ELeave) CAsyncCallBack(CActive::EPriorityIdle);
+	return CTestStep::doTestStepPreambleL();
+	}
+/**
+ * CallBackL
+ * @internalComponent
+ */
+static TInt CallBackL(TAny* aCCLayerTestSsmSimStatusObserver)
+    {
+    //Call back function to stop active scheduler
+    CCLayerTestSsmSimStatusObserver* test = reinterpret_cast<CCLayerTestSsmSimStatusObserver*>(aCCLayerTestSsmSimStatusObserver);
+    test->CallBackRunL();
+    return KErrNone;
+    }
+/**
+ * 
+ * CallBackRunL
+ * @internalComponent
+ */
+void CCLayerTestSsmSimStatusObserver::CallBackRunL()
+    {
+    //Stop the active scheduler if the request is completed else
+    //callback once again
+    if(iRequestStatus != KRequestPending)
+        {
+        CActiveScheduler::Stop();
+        }
+    else
+        {
+        iAsyncStopScheduler->CallBack();
+        }
+    }
+
+/**
+ * Test step - a single test step performs a series of tests.
+ * 
+ * See the individual doTest... methods on this class for details of the tests.
+ * 
+ * @internalComponent
+ */
+TVerdict CCLayerTestSsmSimStatusObserver::doTestStepL()
+	{
+	INFO_PRINTF1(_L("Entering test for compatibility layer SSM SIM status observer"));
+	
+	__UHEAP_MARK;
+	
+	TRAPD(err, doTestSimChangedAndOwnedL());
+	TEST(err == KErrNone);
+	
+	TRAP(err, doTestInitalizationAndDestructionL());
+	TEST(err == KErrNone);
+	
+	TRAP(err, doTestSimEventsL());
+	TEST(err == KErrNone);
+	
+	__UHEAP_MARKEND;
+	
+	INFO_PRINTF1(_L("Leaving test for compatibility layer SSM SIM status observer"));
+	return TestStepResult();
+	}
+
+/**
+ * Test step postamble
+ * @internalComponent
+ */
+TVerdict CCLayerTestSsmSimStatusObserver::doTestStepPostambleL()
+	{
+	delete iActiveScheduler;
+    delete iAsyncStopScheduler;
+   	return CTestStep::doTestStepPostambleL();
+	}
+	
+/**
+Old Test CaseID 		AFSS-CLAYER-0023
+New Test CaseID 		DEVSRVS-SSREFPLUGINS-CLAYER-0023
+ */	
+
+void CCLayerTestSsmSimStatusObserver::doTestInitalizationAndDestructionL()
+	{
+	INFO_PRINTF1(_L("Entering test for intialization and destruction of SSM SIM status observer"));
+	__UHEAP_MARK;
+
+	INFO_PRINTF1(_L("Testing constructor for SSM SIM status observer"));
+	
+	CSsmSimStatusObserver* simObserver = new (ELeave) CSsmSimStatusObserver();
+	CleanupStack::PushL(simObserver);
+	
+	// Now cleanup
+	simObserver->Release();
+	CleanupStack::Pop(simObserver);
+	simObserver = NULL;
+	
+	INFO_PRINTF1(_L("Testing exported NewL() for SSM SIM status observer"));
+	
+	MSsmUtility* ssmUtility = CSsmSimStatusObserver::NewL();
+	CleanupStack::PushL(ssmUtility);
+	
+	// Now cleanup
+	ssmUtility->Release();
+	CleanupStack::Pop(ssmUtility);
+	ssmUtility = NULL;
+	
+	__UHEAP_MARKEND;
+	INFO_PRINTF1(_L("Leaving test for intialization and destruction of SSM SIM status observer"));
+	}
+
+/**
+Old Test CaseID 		AFSS-CLAYER-0024
+New Test CaseID 		DEVSRVS-SSREFPLUGINS-CLAYER-0023
+ */	
+
+void CCLayerTestSsmSimStatusObserver::doTestSimChangedAndOwnedL()
+	{
+	INFO_PRINTF1(_L("Entering test for change and owned parts of SSM SIM status observer/cmd"));
+	__UHEAP_MARK;
+	
+	// Delete any existing defines, ignore return value
+	(void) RProperty::Delete(CSsmUiSpecific::StartupPSUid(), KPSSimChanged);
+	(void) RProperty::Delete(CSsmUiSpecific::StartupPSUid(), KPSSimOwned);
+	TInt err = KErrNone;
+	
+	INFO_PRINTF1(_L("Constructing SSM SIM publish cmd"));	
+	CCustomCmdPublishSimOwnedAndChanged* simCustomCmd = CCustomCmdPublishSimOwnedAndChanged::NewL();
+	CleanupReleasePushL(*simCustomCmd);	
+	simCustomCmd->Initialize(NULL);
+	CleanupClosePushL(*simCustomCmd);
+	
+	INFO_PRINTF1(_L("Executing SSM SIM publish cmd without defining SIM properties"));
+	TBuf8<1> emptyBuf;
+	simCustomCmd->Execute(emptyBuf, iRequestStatus);
+	TEST(iRequestStatus == KRequestPending);
+
+	INFO_PRINTF1(_L("Adding callBack"));
+	TCallBack stop(CallBackL, this);
+    iAsyncStopScheduler->Set(stop);
+    
+    iAsyncStopScheduler->CallBack();
+	INFO_PRINTF1(_L("Testing running active scheduler for publish startup mode without property defined"));
+	iActiveScheduler->Start();
+	User::WaitForRequest(iRequestStatus);
+	
+	TEST(iRequestStatus == KErrNotFound);
+	
+	INFO_PRINTF1(_L("Checking execute cancel does nothing"));
+	simCustomCmd->ExecuteCancel();
+	
+	INFO_PRINTF1(_L("Cleaning up SSM SIM publish cmd"));
+	
+	// Close simCustomCmd
+	CleanupStack::PopAndDestroy(simCustomCmd);
+	// Release simCustomCmd
+	CleanupStack::PopAndDestroy(simCustomCmd);
+	simCustomCmd = NULL;
+		
+	INFO_PRINTF1(_L("Constructing SSM SIM publish cmd"));	
+	simCustomCmd = CCustomCmdPublishSimOwnedAndChanged::NewL();
+	CleanupReleasePushL(*simCustomCmd);
+	simCustomCmd->Initialize(NULL);
+	CleanupClosePushL(*simCustomCmd);
+	
+	INFO_PRINTF1(_L("Initializing SSM SIM status observer without defining SIM changed property"));
+	err = RProperty::Define(CSsmUiSpecific::StartupPSUid(), KPSSimOwned, RProperty::EInt);
+	TEST(err == KErrNone);
+	simCustomCmd->Execute(emptyBuf, iRequestStatus);
+	
+	INFO_PRINTF1(_L("Adding callback"));
+	iAsyncStopScheduler->CallBack();
+	INFO_PRINTF1(_L("Testing running active scheduler for publish startup mode without defining SIM changed property"));
+	iActiveScheduler->Start();
+	User::WaitForRequest(iRequestStatus);
+	TEST(iRequestStatus == KErrNotFound);
+	
+	INFO_PRINTF1(_L("Cleaning up SSM SIM publish cmd"));
+	
+	// Close simCustomCmd
+	CleanupStack::PopAndDestroy(simCustomCmd);
+	// Release simCustomCmd
+	CleanupStack::PopAndDestroy(simCustomCmd);
+	simCustomCmd = NULL;
+
+	INFO_PRINTF1(_L("Constructing SSM SIM publish cmd"));	
+	simCustomCmd = CCustomCmdPublishSimOwnedAndChanged::NewL();
+	CleanupReleasePushL(*simCustomCmd);
+	simCustomCmd->Initialize(NULL);
+	CleanupClosePushL(*simCustomCmd);
+	
+	INFO_PRINTF1(_L("Initializing SSM SIM status observer with defined SIM properties, both false"));
+	AdaptationCliWrapper::SetSimOwned(EFalse);
+	AdaptationCliWrapper::SetSimChanged(EFalse);
+	err = RProperty::Define(CSsmUiSpecific::StartupPSUid(), KPSSimChanged, RProperty::EInt);
+	TEST(err == KErrNone);
+	simCustomCmd->Execute(emptyBuf, iRequestStatus);
+	
+	INFO_PRINTF1(_L("callback"));
+    iAsyncStopScheduler->CallBack();
+	INFO_PRINTF1(_L("Testing running active scheduler for publish startup mode with defined SIM properties, both false"));
+	iActiveScheduler->Start();	
+	User::WaitForRequest(iRequestStatus);
+	
+	
+	TEST(iRequestStatus == KErrPermissionDenied);
+	TInt simChangedValue = 0;
+	TInt simOwnedValue = 0;
+	err = RProperty::Get(CSsmUiSpecific::StartupPSUid(), KPSSimChanged, simChangedValue);
+	TEST(err == KErrNone);
+	TEST(simChangedValue == ESimChanged);
+	err = RProperty::Get(CSsmUiSpecific::StartupPSUid(), KPSSimOwned, simOwnedValue);
+	TEST(err == KErrNone);
+	TEST(simOwnedValue == ESimNotOwned);
+	
+	INFO_PRINTF1(_L("Cleaning up SSM SIM publish cmd"));
+	// Close simCustomCmd
+	CleanupStack::PopAndDestroy(simCustomCmd);
+	// Release simCustomCmd
+	CleanupStack::PopAndDestroy(simCustomCmd);
+	simCustomCmd = NULL;
+
+	INFO_PRINTF1(_L("Constructing SSM SIM publish cmd"));	
+	simCustomCmd = CCustomCmdPublishSimOwnedAndChanged::NewL();
+	CleanupReleasePushL(*simCustomCmd);
+	simCustomCmd->Initialize(NULL);
+	CleanupClosePushL(*simCustomCmd);
+	
+	INFO_PRINTF1(_L("Initializing SSM SIM status observer with get owned failure"));
+	AdaptationCliWrapper::SetSimOwned(ETrue);
+	AdaptationCliWrapper::SetSimOwnedReturnValue(KErrNotSupported);
+	simCustomCmd->Execute(emptyBuf, iRequestStatus);
+	
+	INFO_PRINTF1(_L("callback"));
+    iAsyncStopScheduler->CallBack();
+	INFO_PRINTF1(_L("Testing running active scheduler for publish startup mode with get owned failure"));
+	iActiveScheduler->Start();	
+	User::WaitForRequest(iRequestStatus);
+	
+	TEST(iRequestStatus == KErrPermissionDenied);
+	err = RProperty::Get(CSsmUiSpecific::StartupPSUid(), KPSSimChanged, simChangedValue);
+	TEST(err == KErrNone);
+	TEST(simChangedValue == ESimChanged);
+	err = RProperty::Get(CSsmUiSpecific::StartupPSUid(), KPSSimOwned, simOwnedValue);
+	TEST(err == KErrNone);
+	TEST(simOwnedValue == ESimNotOwned);
+	AdaptationCliWrapper::SetSimOwnedReturnValue(KErrNone);
+	AdaptationCliWrapper::SetSimOwned(EFalse);
+	
+	INFO_PRINTF1(_L("Cleaning up SSM SIM publish cmd"));
+	// Close simCustomCmd
+	CleanupStack::PopAndDestroy(simCustomCmd);
+	// Release simCustomCmd
+	CleanupStack::PopAndDestroy(simCustomCmd);
+	simCustomCmd = NULL;
+
+	INFO_PRINTF1(_L("Constructing SSM SIM publish cmd"));	
+	simCustomCmd = CCustomCmdPublishSimOwnedAndChanged::NewL();
+	CleanupReleasePushL(*simCustomCmd);
+	simCustomCmd->Initialize(NULL);
+	CleanupClosePushL(*simCustomCmd);
+	
+	INFO_PRINTF1(_L("Initializing SSM SIM status observer with get changed failure"));
+	AdaptationCliWrapper::SetSimChangedReturnValue(KErrNotSupported);
+	simCustomCmd->Execute(emptyBuf, iRequestStatus);
+	
+	INFO_PRINTF1(_L("callback"));
+    iAsyncStopScheduler->CallBack();
+	INFO_PRINTF1(_L("Testing running active scheduler for publish startup mode SIM status observer with get changed failure"));
+	iActiveScheduler->Start();	
+	User::WaitForRequest(iRequestStatus);
+	
+	TEST(iRequestStatus == KErrPermissionDenied);
+	err = RProperty::Get(CSsmUiSpecific::StartupPSUid(), KPSSimChanged, simChangedValue);
+	TEST(err == KErrNone);
+	TEST(simChangedValue == ESimChanged);
+	err = RProperty::Get(CSsmUiSpecific::StartupPSUid(), KPSSimOwned, simOwnedValue);
+	TEST(err == KErrNone);
+	TEST(simOwnedValue == ESimNotOwned);
+	AdaptationCliWrapper::SetSimChangedReturnValue(KErrNone);
+	
+	INFO_PRINTF1(_L("Cleaning up SSM SIM publish cmd"));
+	// Close simCustomCmd
+	CleanupStack::PopAndDestroy(simCustomCmd);
+	// Release simCustomCmd
+	CleanupStack::PopAndDestroy(simCustomCmd);
+	simCustomCmd = NULL;
+
+	INFO_PRINTF1(_L("Constructing SSM SIM publish cmd"));	
+	simCustomCmd = CCustomCmdPublishSimOwnedAndChanged::NewL();
+	CleanupReleasePushL(*simCustomCmd);
+	simCustomCmd->Initialize(NULL);
+	CleanupClosePushL(*simCustomCmd);
+	
+	INFO_PRINTF1(_L("Initializing SSM SIM status observer with defined SIM properties, both true"));
+	AdaptationCliWrapper::SetSimOwned(ETrue);
+	AdaptationCliWrapper::SetSimChanged(ETrue);
+	simCustomCmd->Execute(emptyBuf, iRequestStatus);
+	
+	INFO_PRINTF1(_L("callback"));
+	iAsyncStopScheduler->CallBack();
+	INFO_PRINTF1(_L("Testing running active scheduler for publish startup mode with defined SIM properties, both true"));
+	iActiveScheduler->Start();	
+	User::WaitForRequest(iRequestStatus);	
+		
+	TEST(iRequestStatus == KErrPermissionDenied);
+	err = RProperty::Get(CSsmUiSpecific::StartupPSUid(), KPSSimChanged, simChangedValue);
+	TEST(err == KErrNone);
+	TEST(simChangedValue == ESimChanged);
+	err = RProperty::Get(CSsmUiSpecific::StartupPSUid(), KPSSimOwned, simOwnedValue);
+	TEST(err == KErrNone);
+	TEST(simOwnedValue == ESimOwned);
+	
+	INFO_PRINTF1(_L("Cleaning up SSM SIM publish cmd"));
+	// Close simCustomCmd
+	CleanupStack::PopAndDestroy(simCustomCmd);
+	// Release simCustomCmd
+	CleanupStack::PopAndDestroy(simCustomCmd);
+	simCustomCmd = NULL;
+		
+	__UHEAP_MARKEND;
+	INFO_PRINTF1(_L("Leaving test for change and owned parts of SSM SIM status observer/cmd"));
+	}
+
+/**
+Old Test CaseID 		AFSS-CLAYER-0025
+New Test CaseID 		DEVSRVS-SSREFPLUGINS-CLAYER-0023
+ */	
+
+void CCLayerTestSsmSimStatusObserver::doTestSimEventsL()
+	{
+	INFO_PRINTF1(_L("Entering test for SIM events parts of SSM SIM status observer"));
+	__UHEAP_MARK;
+		
+	INFO_PRINTF1(_L("Constructing SSM SIM status observer"));	
+	CSsmSimStatusObserver* simObserver = new (ELeave) CSsmSimStatusObserver();
+	CleanupStack::PushL(simObserver);
+	
+	INFO_PRINTF1(_L("Initializing SSM SIM status observer with defined SIM properties, both true"));
+	TRAPD(err, simObserver->InitializeL());
+	TEST(err == KErrNone);
+	
+	INFO_PRINTF1(_L("Adding active stopper"));
+	CActiveStopper* stopper = new (ELeave) CActiveStopper();
+	CleanupStack::PushL(stopper);
+	    
+	INFO_PRINTF1(_L("Starting SSM SIM status observer"));
+	simObserver->StartL();
+	
+	TPckgBuf<TSsmSimEventType> simEventPckg;
+	INFO_PRINTF1(_L("Testing with event ESsmSimUsable"));
+	simEventPckg() = ESsmSimUsable;
+	AdaptationCliWrapper::GetSimEventPckg()->Copy(simEventPckg);
+	// Notify the waiting observer
+	TRequestStatus* statusPtr = AdaptationCliWrapper::GetSimNotifyStatus();
+	User::RequestComplete(statusPtr, KErrNone);
+	iActiveScheduler->Start();
+	TSsmSwp lastSwp(SsmCmnWrapper::GetLastSwpTransition());
+	TEST(lastSwp.Key() == CSsmUiSpecific::SimStatusPropertyKey());
+	TEST(lastSwp.Value() == ESimUsable);
+	
+	INFO_PRINTF1(_L("Testing with event ESsmSimReadable"));
+	simEventPckg() = ESsmSimReadable;
+	AdaptationCliWrapper::GetSimEventPckg()->Copy(simEventPckg);
+	// Notify the waiting observer
+	statusPtr = AdaptationCliWrapper::GetSimNotifyStatus();
+	User::RequestComplete(statusPtr, KErrNone);
+	iActiveScheduler->Start();
+	lastSwp = SsmCmnWrapper::GetLastSwpTransition();
+	TEST(lastSwp.Key() == CSsmUiSpecific::SimStatusPropertyKey());
+	TEST(lastSwp.Value() == ESimReadable);
+	
+	INFO_PRINTF1(_L("Testing with event ESsmSimNotReady"));
+	simEventPckg() = ESsmSimNotReady;
+	AdaptationCliWrapper::GetSimEventPckg()->Copy(simEventPckg);
+	// Notify the waiting observer
+	statusPtr = AdaptationCliWrapper::GetSimNotifyStatus();
+	User::RequestComplete(statusPtr, KErrNone);
+	iActiveScheduler->Start();
+	lastSwp = SsmCmnWrapper::GetLastSwpTransition();
+	TEST(lastSwp.Key() == CSsmUiSpecific::SimStatusPropertyKey());
+	TEST(lastSwp.Value() == ESimNotReady);
+		
+	INFO_PRINTF1(_L("Testing with event ESsmSimRemoved"));
+	simEventPckg() = ESsmSimRemoved;
+	AdaptationCliWrapper::GetSimEventPckg()->Copy(simEventPckg);
+	// Notify the waiting observer
+	statusPtr = AdaptationCliWrapper::GetSimNotifyStatus();
+	User::RequestComplete(statusPtr, KErrNone);
+	iActiveScheduler->Start();
+	lastSwp = SsmCmnWrapper::GetLastSwpTransition();
+	TEST(lastSwp.Key() == CSsmUiSpecific::SimStatusPropertyKey());
+	TEST(lastSwp.Value() == ESimNotPresent);
+	
+	INFO_PRINTF1(_L("Cleaning up active stopper"));
+	CleanupStack::PopAndDestroy(stopper);
+	
+	INFO_PRINTF1(_L("Cleaning up SSM SIM status observer"));
+	simObserver->Release();
+	CleanupStack::Pop(simObserver);
+	simObserver = NULL;
+
+			
+	__UHEAP_MARKEND;	
+	INFO_PRINTF1(_L("Leaving test for SIM events parts of SSM SIM status observer"));	
+	}