--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/simatktsy/tests/src/ccsatlanguagenotificationfu.cpp Tue Feb 02 01:41:59 2010 +0200
@@ -0,0 +1,366 @@
+// 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 The TEFUnit test suite for LanguageNotification in the SAT.
+*/
+
+#include "ccsatlanguagenotificationfu.h"
+#include <cstktsy/bertlv_defs.h>
+#include <etel.h>
+#include <etelmm.h>
+#include <etelsat.h>
+#include <ctsy/serviceapi/gsmerror.h>
+#include <ctsy/mmtsy_names.h>
+#include <satcs.h>
+#include <ctsy/ltsy/sat_defs.h>
+#include <cstktsy/ttlv.h>
+
+#include <ctsy/ltsy/mltsydispatchsatinterface.h>
+#include <ctsy/ltsy/mltsydispatchphoneinterface.h>
+#include <test/mockltsyindicatorids.h>
+#include <test/tmockltsydata.h>
+
+
+const TUint8 KCmdId = 1;
+
+// command specifier for language notification
+const TUint8 KSpecific = 0x01;
+const TUint8 KNonSpecific = 0x00;
+
+_LIT8(KSpanishLang, "se");
+
+
+CTestSuite* CCSatLanguageNotificationFU::CreateSuiteL(const TDesC& aName)
+ {
+ SUB_SUITE;
+
+ ADD_TEST_STEP_ISO_CPP(CCSatLanguageNotificationFU, TestNotifyLanguageNotificationPCmd0001L);
+ ADD_TEST_STEP_ISO_CPP(CCSatLanguageNotificationFU, TestNotifyLanguageNotificationPCmd0002L);
+ ADD_TEST_STEP_ISO_CPP(CCSatLanguageNotificationFU, TestNotifyLanguageNotificationPCmd0004L);
+
+ END_SUITE;
+ }
+
+
+//
+// Actual test cases
+//
+
+
+/**
+@SYMTestCaseID BA-CSAT-LN-SNLNPC-0001
+@SYMPREQ 1780
+@SYMComponent telephony_csat
+@SYMTestCaseDesc Test support in CSAT for RSat::NotifyLanguageNotificationPCmd
+@SYMTestPriority High
+@SYMTestActions Invokes RSat::NotifyLanguageNotificationPCmd
+@SYMTestExpectedResults Pass
+@SYMTestType CT
+*/
+void CCSatLanguageNotificationFU::TestNotifyLanguageNotificationPCmd0001L()
+ {
+ OpenEtelServerL(EUseExtendedError);
+ CleanupStack::PushL(TCleanupItem(Cleanup,this));
+ OpenPhoneL();
+ OpenSatL();
+
+ TTlv tlv;
+
+ TRequestStatus notifyStatus;
+ RSat::TLanguageNotificationV2 lang;
+ RSat::TLanguageNotificationV2Pckg langPck(lang);
+
+ RBuf8 data;
+ CleanupClosePushL(data);
+
+ //-------------------------------------------------------------------------
+ // TEST C: Successful completion request of
+ // RSat::NotifyLanguageNotificationPCmd in case of NonSpecific notification
+ //-------------------------------------------------------------------------
+
+ PrepareTlv( tlv, KNonSpecific);
+ TDesC8* tlvDscPtr = &const_cast<TDesC8&>(tlv.End());
+ TMockLtsyData1<TDesC8*> tlvDscPack(tlvDscPtr);
+
+ PrepareDispatchL();
+
+ iSat.NotifyLanguageNotificationPCmd(notifyStatus, langPck);
+
+ CompleteDispatchL( *tlvDscPtr);
+
+ User::WaitForRequest(notifyStatus);
+ ASSERT_EQUALS(KErrNone, notifyStatus.Int());
+ ASSERT_EQUALS(RSat::ENonSpecificLangNotification, lang.iNotificationType);
+ ASSERT_EQUALS(KCmdId, lang.PCmdNumber());
+
+ //terminal response
+ RSat::TLanguageNotificationRspV2 langRsp;
+ RSat::TLanguageNotificationRspV2Pckg langRspPckg(langRsp);
+ langRsp.SetPCmdNumber(KCmdId);
+ langRsp.iGeneralResult = RSat::KSuccess;
+ langRsp.iInfoType = RSat::KNoAdditionalInfo;
+ langRsp.iAdditionalInfo = KNullDesC;
+
+ GenerateTerminalResponseL(KCmdId, KLanguageNotification, KNonSpecific,
+ RSat::ELanguageNotification, langRspPckg, langRsp.iAdditionalInfo,
+ langRsp.iGeneralResult);
+
+ AssertMockLtsyStatusL();
+
+ //-------------------------------------------------------------------------
+ // TEST E: Unsolicited completion of RSat::NotifyLanguageNotificationPCmd
+ // from LTSY.
+ //-------------------------------------------------------------------------
+
+ PrepareTlv( tlv, KSpecific, KSpanishLang);
+ tlv.End();
+
+ TRequestStatus mocklStatus;
+ iMockLTSY.NotifyTerminated(mocklStatus);
+ tlvDscPack.SerialiseL(data);
+ iMockLTSY.CompleteL(KMockLtsyDispatchSatPcmdIndId, KErrNone, data);
+
+ langRsp.iAdditionalInfo.Zero();
+ langRsp.iAdditionalInfo.Append(RSat::KNoSpecificMeProblem);;
+
+ PrepareTerminalResponseMockDataL( KCmdId, KLanguageNotification, KSpecific,
+ langRsp.iAdditionalInfo, RSat::KMeUnableToProcessCmd, KNullDesC8);
+
+ User::WaitForRequest(mocklStatus);
+ AssertMockLtsyStatusL();
+ ASSERT_EQUALS(KErrNone, mocklStatus.Int());
+
+ //-------------------------------------------------------------------------
+ // TEST C2: Successful completion request of
+ // RSat::NotifyLanguageNotificationPCmd in case of Specific notification
+ //-------------------------------------------------------------------------
+
+ PrepareDispatchL();
+
+ iSat.NotifyLanguageNotificationPCmd(notifyStatus, langPck);
+
+ CompleteDispatchL( *tlvDscPtr);
+
+ User::WaitForRequest(notifyStatus);
+ ASSERT_EQUALS(KErrNone, notifyStatus.Int());
+ ASSERT_EQUALS(RSat::ESpecificLangNotification, lang.iNotificationType);
+ ASSERT_EQUALS(KCmdId, lang.PCmdNumber());
+ TUint16 tmpLang;
+ TSatUtility::CopyTwo8toOne16LE( KSpanishLang, tmpLang, 0 );
+ ASSERT_EQUALS(tmpLang, lang.iLanguage);
+
+ //terminal response
+ langRsp.iGeneralResult = RSat::KSuccess;
+ langRsp.iInfoType = RSat::KNoAdditionalInfo;
+ langRsp.iAdditionalInfo = KNullDesC;
+
+ GenerateTerminalResponseL(KCmdId, KLanguageNotification, KSpecific,
+ RSat::ELanguageNotification, langRspPckg, langRsp.iAdditionalInfo,
+ langRsp.iGeneralResult);
+
+ AssertMockLtsyStatusL();
+
+ //-------------------------------------------------------------------------
+ // TEST B: failure on completion of pending request from LTSY->CTSY
+ //-------------------------------------------------------------------------
+
+ PrepareDispatchL();
+
+ iSat.NotifyLanguageNotificationPCmd(notifyStatus, langPck);
+
+ CompleteDispatchL( *tlvDscPtr, KErrUnknown );
+
+ User::WaitForRequest(notifyStatus);
+ ASSERT_EQUALS(KErrUnknown, notifyStatus.Int());
+
+ AssertMockLtsyStatusL();
+ CleanupStack::PopAndDestroy(2, this); // data, this
+
+ }
+
+
+/**
+@SYMTestCaseID BA-CSAT-LN-SNLNPC-0002
+@SYMPREQ 1780
+@SYMComponent telephony_csat
+@SYMTestCaseDesc Test support in CSAT for cancelling of RSat::NotifyLanguageNotificationPCmd
+@SYMTestPriority High
+@SYMTestActions Invokes cancelling of RSat::NotifyLanguageNotificationPCmd
+@SYMTestExpectedResults Pass
+@SYMTestType CT
+*/
+void CCSatLanguageNotificationFU::TestNotifyLanguageNotificationPCmd0002L()
+ {
+ OpenEtelServerL(EUseExtendedError);
+ CleanupStack::PushL(TCleanupItem(Cleanup,this));
+ OpenPhoneL();
+ OpenSatL();
+
+ //-------------------------------------------------------------------------
+ // Test cancelling of RSat::NotifyLanguageNotificationPCmd
+ //-------------------------------------------------------------------------
+ TRequestStatus notifyStatus;
+ RSat::TLanguageNotificationV2 lang;
+ RSat::TLanguageNotificationV2Pckg langPck(lang);
+
+ PrepareDispatchL();
+
+ iSat.NotifyLanguageNotificationPCmd(notifyStatus, langPck);
+
+ iSat.CancelAsyncRequest(ESatNotifyLanguageNotificationPCmd);
+
+ User::WaitForRequest(notifyStatus);
+ ASSERT_EQUALS( KErrCancel, notifyStatus.Int());
+
+ CleanupStack::PopAndDestroy(1, this);
+ }
+
+
+/**
+@SYMTestCaseID BA-CSAT-LN-SNLNPC-0004
+@SYMComponent telephony_csat
+@SYMPREQ 1780
+@SYMTestCaseDesc Test support in CSAT for multiple client requests to RSat::NotifyLanguageNotificationPCmd
+@SYMTestPriority High
+@SYMTestActions Invokes multiple client requests to RSat::NotifyLanguageNotificationPCmd
+@SYMTestExpectedResults Pass
+@SYMTestType CT
+*/
+void CCSatLanguageNotificationFU::TestNotifyLanguageNotificationPCmd0004L()
+ {
+ OpenEtelServerL(EUseExtendedError);
+ CleanupStack::PushL(TCleanupItem(Cleanup,this));
+ OpenPhoneL();
+ OpenSatL();
+
+ // Open second client
+ RTelServer telServer2;
+ TInt ret = telServer2.Connect();
+ ASSERT_EQUALS(KErrNone, ret);
+ CleanupClosePushL(telServer2);
+
+ RMobilePhone phone2;
+ ret = phone2.Open(telServer2,KMmTsyPhoneName);
+ ASSERT_EQUALS(KErrNone, ret);
+ CleanupClosePushL(phone2);
+
+ RSat sat2;
+ ret = sat2.Open(phone2);
+ ASSERT_EQUALS(KErrNone, ret);
+ CleanupClosePushL(sat2);
+
+ //-------------------------------------------------------------------------
+ // Test A: Test multiple clients requesting RSat::NotifyLanguageNotificationPCmd
+ // when they both pass the same T-class version
+ //-------------------------------------------------------------------------
+
+ TTlv tlv;
+
+ PrepareTlv( tlv, KNonSpecific);
+ TDesC8* tlvDscPtr = &const_cast<TDesC8&>(tlv.End());
+ TMockLtsyData1<TDesC8*> tlvDscPack(tlvDscPtr);
+
+ PrepareDispatchL();
+
+ TRequestStatus notifyStatus;
+ TRequestStatus notifyStatus2;
+ RSat::TLanguageNotificationV2 lang;
+ RSat::TLanguageNotificationV2 lang2;
+ RSat::TLanguageNotificationV2Pckg langPck(lang);
+ RSat::TLanguageNotificationV2Pckg langPck2(lang2);
+
+ iSat.NotifyLanguageNotificationPCmd(notifyStatus, langPck);
+ sat2.NotifyLanguageNotificationPCmd(notifyStatus2, langPck2);
+
+ CompleteDispatchL( *tlvDscPtr);
+
+ User::WaitForRequest(notifyStatus);
+ ASSERT_EQUALS(KErrNone, notifyStatus.Int());
+ ASSERT_EQUALS(RSat::ENonSpecificLangNotification, lang.iNotificationType);
+ ASSERT_EQUALS(KCmdId, lang.PCmdNumber());
+
+ User::WaitForRequest(notifyStatus2);
+ ASSERT_EQUALS(KErrNone, notifyStatus2.Int());
+ ASSERT_EQUALS(RSat::ENonSpecificLangNotification, lang2.iNotificationType);
+ ASSERT_EQUALS(KCmdId, lang2.PCmdNumber());
+
+ CleanupStack::PopAndDestroy(4, this); //sat2 phone2 telServer2 this
+ }
+
+
+/**
+* prepare tlv buffer for refresh proactive command
+* @param aTlv - tlv buffer to prepare
+* @param aCmdQualifier - type of refresh command
+* @param aLang - two-byte language code
+*/
+void CCSatLanguageNotificationFU::PrepareTlv(TTlv& aTlv, TUint8 aCmdQualifier, const TDesC8& aLang)
+ {
+ aTlv.Begin(KBerTlvProactiveSimCommandTag);
+ aTlv.AddTag(KTlvCommandDetailsTag);
+ aTlv.AddByte(KCmdId);//ETLV_CommandNumber
+ aTlv.AddByte(KLanguageNotification); //ETLV_TypeOfCommand
+ aTlv.AddByte(aCmdQualifier); //ETLV_CommandQualifier
+
+ aTlv.AddTag(KTlvDeviceIdentityTag);
+ aTlv.AddByte(KSim); //ETLV_SourceDeviceIdentity
+ aTlv.AddByte(KMe); //ETLV_DestinationDeviceIdentity
+
+ if(0 < aLang.Length())
+ {
+ aTlv.AddTag(KTlvLanguageTag);
+ aTlv.AddData(aLang);
+ }
+ }
+
+/**
+* prepare mock complete for processing of proactive command
+* @param aTlvDsc - tlv buffer to send
+* @param aRes - result for request completion
+*/
+void CCSatLanguageNotificationFU::CompleteDispatchL(const TDesC8& aTlvDsc, TInt aRes)
+ {
+ RBuf8 data;
+ CleanupClosePushL(data);
+
+ TDesC8* tlvDscPtr = const_cast<TDesC8*>(&aTlvDsc);
+ TMockLtsyData1<TDesC8*> tlvDscPack(tlvDscPtr);
+
+ tlvDscPack.SerialiseL(data);
+ iMockLTSY.CompleteL(KMockLtsyDispatchSatPcmdIndId, aRes, data);
+
+ CleanupStack::PopAndDestroy(1);
+ }
+
+/**
+* prepare mock for dispatch of sat notification
+*/
+void CCSatLanguageNotificationFU::PrepareDispatchL()
+ {
+ RBuf8 data;
+ CleanupClosePushL(data);
+
+ TUint8 pcmdCode = KLanguageNotification;
+ TMockLtsyData1<TUint8> expLtsyData(pcmdCode);
+ expLtsyData.SerialiseL(data);
+
+ iMockLTSY.ExpectL(MLtsyDispatchSatPCmdNotification::KLtsyDispatchSatPCmdNotificationApiId,data);
+
+ CleanupStack::PopAndDestroy(1);
+ }
+