mmlibs/mmfw/tsrc/mmfintegrationtest/ACLNT/TestAudioPlayerDRM.cpp
changeset 0 40261b775718
equal deleted inserted replaced
-1:000000000000 0:40261b775718
       
     1 // Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
       
     2 // All rights reserved.
       
     3 // This component and the accompanying materials are made available
       
     4 // under the terms of "Eclipse Public License v1.0"
       
     5 // which accompanies this distribution, and is available
       
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     7 //
       
     8 // Initial Contributors:
       
     9 // Nokia Corporation - initial contribution.
       
    10 //
       
    11 // Contributors:
       
    12 //
       
    13 // Description:
       
    14 // Integration tests.
       
    15 // 
       
    16 //
       
    17 
       
    18 #include "TestAudioPlayerDRM.h"
       
    19 
       
    20 // CTestMmfDRMAudioPlayerBase implementation
       
    21 
       
    22 /**
       
    23 *
       
    24 * CTestMmfDRMAudioPlayerBase()
       
    25 *
       
    26 * Constructor to set the Test step name, section name and key names.
       
    27 *
       
    28 */
       
    29 CTestMmfDRMAudioPlayerBase::CTestMmfDRMAudioPlayerBase(const TDesC& aTestName, const TDesC& aSectName, const TDesC& aKeyName, const TDesC& aUniqueId)
       
    30 	{
       
    31 	iTestStepName = aTestName;
       
    32 	iSectName = aSectName;
       
    33 	iKeyName = aKeyName;
       
    34 	iUniqueId = aUniqueId;
       
    35 	}
       
    36 
       
    37 /**
       
    38 *
       
    39 * FsmL()
       
    40 *
       
    41 * @param TMmfAudioEvents aEvent
       
    42 *
       
    43 */
       
    44 void CTestMmfDRMAudioPlayerBase::FsmL(TMmfAudioEvents aEvent, TInt aError)
       
    45     {
       
    46     switch (aEvent)
       
    47         {
       
    48         case EAudioOpen:
       
    49             INFO_PRINTF3(_L("Opening the file for PLAY intent : %S, UniqueID : %S"), &iFileName, &iUniqueId);
       
    50             iAudioPlayer->OpenFileL(TMMFileSource(iFileName, iUniqueId, ContentAccess::EPlay));
       
    51             break;
       
    52 
       
    53         case EAudioPlay:
       
    54             if (aError != KErrNone) // Check if there's error while opening the file
       
    55                 {
       
    56                 ERR_PRINTF2(_L("Opening the audio file failed, unexpected error %d."), aError);
       
    57                 CActiveScheduler::Stop();
       
    58                 }
       
    59             else
       
    60                 {
       
    61                 INFO_PRINTF1(_L("Playing the audio file..."));
       
    62                 AfterOpenL();
       
    63                 iAudioPlayer->Play();
       
    64                 }
       
    65             break;
       
    66 
       
    67         case EAudioPlayEnd:
       
    68             if (aError != KErrNone) // Check if there's error while playing the file
       
    69                 {
       
    70                 ERR_PRINTF2(_L("Playing the audio file failed, unexpected error %d."), aError);
       
    71                 }
       
    72             else
       
    73                 {
       
    74                 INFO_PRINTF1(_L("Audio file opened and played."));
       
    75                 iTestStepResult = EPass;
       
    76                 }
       
    77 			CActiveScheduler::Stop();
       
    78             break;
       
    79 
       
    80         default:
       
    81             INFO_PRINTF1(_L("Invalid Audio event!"));
       
    82         }
       
    83     };
       
    84     
       
    85 void CTestMmfDRMAudioPlayerBase::AfterOpenL()
       
    86 	{
       
    87 	}
       
    88 	
       
    89 /**
       
    90 *
       
    91 * Test step Preamble.
       
    92 *
       
    93 * @return TVerdict: The result of the test step.
       
    94 * 
       
    95 */
       
    96 TVerdict CTestMmfDRMAudioPlayerBase::DoTestStepPreambleL()
       
    97     {
       
    98     // Install the scheduler
       
    99     TVerdict verdict = CTestMmfAclntStep::DoTestStepPreambleL();
       
   100 
       
   101     iError = KErrNone;
       
   102 
       
   103     // Get the filename
       
   104     TPtrC filename1;
       
   105     if (!GetStringFromConfig(iSectName, iKeyName, filename1))
       
   106         {
       
   107         return EInconclusive;
       
   108         }
       
   109     GetDriveName(iFileName);
       
   110     iFileName.Append(filename1);
       
   111 
       
   112     // Create an audio player
       
   113     iAudioPlayer = CMdaAudioPlayerUtility::NewL(*this);
       
   114     if (iAudioPlayer == NULL)
       
   115         {
       
   116         return EInconclusive;
       
   117         }
       
   118 
       
   119     return verdict;
       
   120     }
       
   121 
       
   122 /**
       
   123 *
       
   124 * Test step Postamble.
       
   125 *
       
   126 * @return TVerdict: The result of the test step.
       
   127 * 
       
   128 */
       
   129 TVerdict CTestMmfDRMAudioPlayerBase::DoTestStepPostambleL()
       
   130     {
       
   131     delete iAudioPlayer;
       
   132     iAudioPlayer = NULL;
       
   133     User::After(KOneSecond); // wait for deletion to shut down devsound
       
   134     return CTestMmfAclntStep::DoTestStepPostambleL(); // Destroy the scheduler
       
   135     }
       
   136 
       
   137 /**
       
   138 *
       
   139 * Implementation of the MMdaAudioPlayerCallback interface function.
       
   140 *
       
   141 * @param TInt aError
       
   142 *
       
   143 */
       
   144 void CTestMmfDRMAudioPlayerBase::MapcInitComplete(TInt aError, 
       
   145     const TTimeIntervalMicroSeconds& /*aDuration*/)
       
   146     {
       
   147     INFO_PRINTF2(_L("MMdaAudioPlayerCallback Init Complete. Error = %d"), aError);
       
   148     iError = aError;
       
   149 	if (iError != KErrNone)
       
   150     	{
       
   151     	ERR_PRINTF2(_L("Opening the audio file failed, unexpected error %d."), aError);
       
   152     	iAudioPlayer->Close();
       
   153     	CActiveScheduler::Stop();
       
   154     	}
       
   155 	else
       
   156 		{
       
   157 		TRAP(iError, FsmL(EAudioPlay, aError)); // Call to play audio
       
   158 		if (iError != KErrNone)
       
   159     		{
       
   160     		ERR_PRINTF2(_L("Got an error from the FsmL(EAudioPlay) %d."), iError);
       
   161     		iAudioPlayer->Close();
       
   162     		CActiveScheduler::Stop();    		
       
   163     		}
       
   164 		}
       
   165 	}
       
   166 
       
   167 /**
       
   168 *
       
   169 * Implementation of the MMdaAudioPlayerCallback interface function.
       
   170 *
       
   171 * @param TInt aError
       
   172 *
       
   173 */
       
   174 void CTestMmfDRMAudioPlayerBase::MapcPlayComplete(TInt aError)
       
   175     {
       
   176     INFO_PRINTF2(_L("MMdaAudioPlayerCallback Play Complete. Error = %d"), aError);
       
   177     iError = aError;
       
   178 	if (iError != KErrNone)
       
   179     	{
       
   180     	ERR_PRINTF2(_L("Opening the audio file failed, unexpected error %d."), aError);
       
   181     	iAudioPlayer->Close();
       
   182     	CActiveScheduler::Stop();
       
   183     	}
       
   184 	else
       
   185 		{
       
   186 		TRAP(iError, FsmL(EAudioPlayEnd, aError));
       
   187 		if (iError != KErrNone)
       
   188     		{
       
   189     		ERR_PRINTF2(_L("Got an error from the FsmL(EAudioPlayEnd) %d."), iError);
       
   190     		iAudioPlayer->Close();
       
   191     		CActiveScheduler::Stop();    		
       
   192     		}
       
   193 		}
       
   194     }
       
   195 
       
   196 
       
   197 // Positive Tests
       
   198 
       
   199 /**
       
   200 *
       
   201 * NewL()
       
   202 *
       
   203 * @param const TDesC& aTestName
       
   204 *
       
   205 * @return CTestMmfAudioPlayDRMEnableAgentUI*
       
   206 *                       Constructed CTestMmfAudioPlayDRMEnableAgentUI object
       
   207 *
       
   208 */
       
   209 CTestMmfAudioPlayDRMEnableAgentUI* CTestMmfAudioPlayDRMEnableAgentUI::NewL(const TDesC& aTestName, const TDesC& aSectName, const TDesC& aKeyName, const TDesC& aUniqueId)
       
   210     {
       
   211     return new (ELeave) CTestMmfAudioPlayDRMEnableAgentUI(aTestName, aSectName, aKeyName, aUniqueId);
       
   212     }
       
   213 
       
   214 /**
       
   215 *
       
   216 * Test step constructor.
       
   217 * Ctor for CTestMmfAudioPlayDRMEnableAgentUI.
       
   218 *
       
   219 * @param const TDesC& aTestName
       
   220 *
       
   221 */
       
   222 CTestMmfAudioPlayDRMEnableAgentUI::CTestMmfAudioPlayDRMEnableAgentUI(const TDesC& aTestName, const TDesC& aSectName, const TDesC& aKeyName, const TDesC& aUniqueId)
       
   223 	:CTestMmfDRMAudioPlayerBase(aTestName, aSectName, aKeyName, aUniqueId)
       
   224     {
       
   225     }
       
   226 
       
   227 void CTestMmfAudioPlayDRMEnableAgentUI::AfterOpenL()
       
   228 	{
       
   229     // Create DRM custom command
       
   230     MMMFDRMCustomCommand* drmCustomCommand;
       
   231     drmCustomCommand = iAudioPlayer->GetDRMCustomCommand();
       
   232     if (drmCustomCommand == NULL)
       
   233         {
       
   234         ERR_PRINTF1(_L("MMMFDRMCustomCommand is NULL."));
       
   235         iError = KErrUnknown;
       
   236         User::Leave(KErrUnknown);
       
   237         }
       
   238 
       
   239     INFO_PRINTF1(_L("Enabling Agent's user interface for errors and confirmation requests..."));
       
   240     iError = drmCustomCommand->SetAgentProperty(ContentAccess::EAgentPropertyAgentUI, 3);
       
   241     // After DevCR JFOT-6EMFVL (which changes the CContentFile::SetAgentProperty to call 
       
   242     // SetProperty on a member of CData instead of CContent), the underlying reference test
       
   243     // agent returns a different error value (KErrCANotSupported instead of KErrNone).
       
   244     if (iError == KErrCANotSupported)
       
   245         {
       
   246         // Reset the error code as it's not really an error :)
       
   247 		iError = KErrNone;
       
   248         }
       
   249     else
       
   250     	{
       
   251         ERR_PRINTF2(_L("Enabling Agent's user interface failed, unexpected error %d."), iError);
       
   252         User::Leave(iError);
       
   253     	}
       
   254 	}
       
   255 
       
   256 /**
       
   257 *
       
   258 * Do the test step.
       
   259 * Each test step must supply an implementation for DoTestStepL.
       
   260 *
       
   261 * @return TVerdict: The result of the test step.
       
   262 *
       
   263 */
       
   264 TVerdict CTestMmfAudioPlayDRMEnableAgentUI::DoTestStepL()
       
   265     {
       
   266     INFO_PRINTF1(_L("Enable agent's user interface for errors and confirmation requests property. Open and play a protected audio clip from a file for PLAY intent."));
       
   267 
       
   268     iTestStepResult = EFail;
       
   269 
       
   270     TRAPD(err,FsmL(EAudioOpen)); // Call to open the audio file
       
   271     if (err == KErrNone)
       
   272     	{
       
   273     	CActiveScheduler::Start(); // ActiveScheduler started ONLY once
       
   274     	if (iError == KErrNone)
       
   275 			{
       
   276 			iTestStepResult=EPass;
       
   277 			}
       
   278 	   	}
       
   279     return iTestStepResult;
       
   280     }
       
   281 
       
   282 
       
   283 /**
       
   284 *
       
   285 * NewL()
       
   286 *
       
   287 * @param const TDesC& aTestName
       
   288 *
       
   289 * @return CTestMmfAudioPlayDRMDisableAutoIntent*
       
   290 *                       Constructed CTestMmfAudioPlayDRMDisableAutoIntent object
       
   291 *
       
   292 */
       
   293 CTestMmfAudioPlayDRMDisableAutoIntent* CTestMmfAudioPlayDRMDisableAutoIntent::NewL(const TDesC& aTestName, const TDesC& aSectName, const TDesC& aKeyName, const TDesC& aUniqueId)
       
   294     {
       
   295     return new (ELeave) CTestMmfAudioPlayDRMDisableAutoIntent(aTestName, aSectName, aKeyName, aUniqueId);
       
   296     }
       
   297 
       
   298 /**
       
   299 *
       
   300 * Test step constructor.
       
   301 * Ctor for CTestMmfAudioPlayDRMDisableAutoIntent.
       
   302 *
       
   303 * @param const TDesC& aTestName
       
   304 *
       
   305 */
       
   306 CTestMmfAudioPlayDRMDisableAutoIntent::CTestMmfAudioPlayDRMDisableAutoIntent(const TDesC& aTestName, const TDesC& aSectName, const TDesC& aKeyName, const TDesC& aUniqueId)
       
   307 	:CTestMmfDRMAudioPlayerBase(aTestName, aSectName, aKeyName, aUniqueId)
       
   308     {
       
   309     }
       
   310     
       
   311 void CTestMmfAudioPlayDRMDisableAutoIntent::AfterOpenL()
       
   312 	{
       
   313     // Create DRM custom command
       
   314     MMMFDRMCustomCommand* drmCustomCommand;
       
   315     drmCustomCommand = iAudioPlayer->GetDRMCustomCommand();
       
   316 
       
   317     if (drmCustomCommand == NULL)
       
   318         {
       
   319         ERR_PRINTF1(_L("MMMFDRMCustomCommand is NULL."));
       
   320         iError = KErrUnknown;
       
   321         User::Leave(KErrUnknown);
       
   322         }
       
   323 
       
   324     INFO_PRINTF1(_L("Disabling automatic intent..."));
       
   325     iError = drmCustomCommand->DisableAutomaticIntent(EFalse);
       
   326     if (iError != KErrNone)
       
   327         {
       
   328         ERR_PRINTF2(_L("Disabling the automatic intent failed, unexpected error %d."), iError);
       
   329         User::Leave(iError);
       
   330         }	
       
   331 	}
       
   332 	
       
   333 /**
       
   334 *
       
   335 * Do the test step.
       
   336 * Each test step must supply an implementation for DoTestStepL.
       
   337 *
       
   338 * @return TVerdict: The result of the test step.
       
   339 *
       
   340 */
       
   341 TVerdict CTestMmfAudioPlayDRMDisableAutoIntent::DoTestStepL()
       
   342 	{
       
   343 
       
   344     INFO_PRINTF1(_L("Open a protected audio file and disable automatic intent. Play."));
       
   345 
       
   346     iTestStepResult = EFail;
       
   347 
       
   348     TRAPD(err,FsmL(EAudioOpen)); // Call to open the audio file
       
   349       
       
   350     if(err == KErrNone)  	
       
   351     	{
       
   352     	
       
   353    		CActiveScheduler::Start(); // ActiveScheduler started ONLY once
       
   354        
       
   355     	if (iError == KErrNone)
       
   356        		{
       
   357         		INFO_PRINTF1(_L("Executing intent..."));
       
   358 	    		MMMFDRMCustomCommand* drmCustomCommand;
       
   359 	    		drmCustomCommand = iAudioPlayer->GetDRMCustomCommand();
       
   360 
       
   361 	    	if (drmCustomCommand == NULL)
       
   362 	        	{
       
   363 	        	ERR_PRINTF1(_L("MMMFDRMCustomCommand is NULL."));
       
   364 	        	User::Leave(KErrUnknown);
       
   365 	        	}
       
   366         
       
   367         	iError = drmCustomCommand->ExecuteIntent(ContentAccess::EPlay);
       
   368         	if (iError != KErrNone)
       
   369             	{
       
   370             	ERR_PRINTF2(_L("Executing the intent failed, unexpected error %d."), iError);
       
   371             	}
       
   372         	}
       
   373         
       
   374 	   	if (iError == KErrNone)
       
   375 	   		{
       
   376 			iTestStepResult = EPass;
       
   377 			}
       
   378 
       
   379     	}
       
   380     return iTestStepResult;
       
   381     }