contentmgmt/referencedrmagent/tcaf/source/Contentstep.cpp
changeset 15 da2ae96f639b
child 53 030c4fbc13d7
child 102 deec7e509f66
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentmgmt/referencedrmagent/tcaf/source/Contentstep.cpp	Mon Oct 12 10:17:04 2009 +0300
@@ -0,0 +1,1271 @@
+/*
+* Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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: 
+*
+*/
+
+
+#include <test/testexecutelog.h>
+#include <caf/content.h>
+#include <caf/data.h>
+#include <caf/attribute.h>
+#include "cafserver.h"
+#include "bitset.h"
+#include "contentstep.h"
+#include "embeddedobject.h"
+#include "streamableptrarray.h"
+#include "attributeset.h"
+#include "stringattributeset.h"
+#include <caf/agentfactory.h>
+
+using namespace ContentAccess;
+
+/* 
+ * Content attribute step
+ *
+ */
+
+CCAFContentAttributeStep::~CCAFContentAttributeStep()
+	{
+	}
+
+CCAFContentAttributeStep::CCAFContentAttributeStep(CCAFServer& aParent) : iParent(aParent)
+	{
+	SetTestStepName(KCAFContentAttributeStep);
+	}
+
+TVerdict CCAFContentAttributeStep::doTestStepL()
+	{
+#ifdef SYMBIAN_ENABLE_SDP_WMDRM_SUPPORT     
+    TBool wmdrmFlag = EFalse;     
+    GetBoolFromConfig(ConfigSection(),_L("wmdrmEnabled"), wmdrmFlag);     
+         
+    if(wmdrmFlag)     
+        {     
+        TVerdict verdict = doWmdrmTestStepL();     
+        return verdict;     
+        }     
+#endif //SYMBIAN_ENABLE_SDP_WMDRM_SUPPORT 
+
+	TInt attribute;
+	TInt value = KErrNone;
+	TInt expectedValue;
+	TInt unresolvedUri = EFalse;
+	TPtrC uri;
+	TPtrC uniqueId;
+
+	SetTestStepResult(EPass);
+
+	GetIntFromConfig(ConfigSection(),_L("attribute"),attribute);
+	GetStringFromConfig(ConfigSection(),_L("uri"),uri);
+	GetStringFromConfig(ConfigSection(),_L("uniqueid"),uniqueId);
+	GetIntFromConfig(ConfigSection(),_L("value"),expectedValue);
+	GetIntFromConfig(ConfigSection(),_L("unresolveduri"),unresolvedUri);
+	
+
+	__UHEAP_MARK;
+	
+	// Open using file name
+	CContent *content = CContent::NewLC(uri);
+	value = expectedValue+1;
+	User::LeaveIfError(content->GetAttribute(attribute, value, uniqueId));
+	if(expectedValue != value )
+		{
+		SetTestStepResult(EFail);
+		INFO_PRINTF3(_L("CContent::GetAttribute() Expected value: %d, actual value: %d"), expectedValue, value);
+		}
+	CleanupStack::PopAndDestroy(content);		    		
+	
+	// Open using file handle
+   	// cannot do if URI is unresolved - i.e. if it contains "Reference Test Agent" instead of actual private directory name
+   	if (!unresolvedUri) 
+		{
+		RFile file;
+		file.Open(iParent.Fs(), uri, EFileShareReadersOnly);		
+		content = CContent::NewLC(file);
+		file.Close();
+		value = expectedValue+1;
+		User::LeaveIfError(content->GetAttribute(attribute, value, uniqueId));
+		if(expectedValue != value)
+			{
+			SetTestStepResult(EFail);
+			INFO_PRINTF3(_L("CContent::GetAttribute() Expected value: %d, actual value: %d"), expectedValue, value);
+			}
+		CleanupStack::PopAndDestroy(content);		    		
+		}
+		
+	__UHEAP_MARKEND;
+	return TestStepResult();
+	}
+
+/* 
+ * Content attributeset step
+ *
+ */
+
+CCAFContentAttributeSetStep::~CCAFContentAttributeSetStep()
+	{
+	}
+
+CCAFContentAttributeSetStep::CCAFContentAttributeSetStep(CCAFServer& aParent) : iParent(aParent)
+	{
+	SetTestStepName(KCAFContentAttributeSetStep);
+	}
+
+TVerdict CCAFContentAttributeSetStep::doTestStepL()
+	{
+#ifdef SYMBIAN_ENABLE_SDP_WMDRM_SUPPORT     
+    TBool wmdrmFlag = EFalse;     
+    GetBoolFromConfig(ConfigSection(),_L("wmdrmEnabled"), wmdrmFlag);     
+         
+    if(wmdrmFlag)     
+        {     
+        TVerdict verdict = doWmdrmTestStepL();     
+        return verdict;     
+        }     
+#endif //SYMBIAN_ENABLE_SDP_WMDRM_SUPPORT     
+  
+	TInt value1;
+	TInt value2;
+	TInt expectedValue1;
+	TInt expectedValue2;
+	TInt attribute1;
+	TInt attribute2;
+	TInt result = KErrNone;
+	TInt unresolvedUri = EFalse;
+	TPtrC uri;
+	TPtrC uniqueId;
+
+	SetTestStepResult(EPass);
+
+	GetStringFromConfig(ConfigSection(),_L("uri"),uri);
+	GetStringFromConfig(ConfigSection(),_L("uniqueid"),uniqueId);
+	GetIntFromConfig(ConfigSection(),_L("attribute1"),attribute1);
+	GetIntFromConfig(ConfigSection(),_L("attribute2"),attribute2);
+	GetIntFromConfig(ConfigSection(),_L("value1"),expectedValue1);
+	GetIntFromConfig(ConfigSection(),_L("value2"),expectedValue2);
+	GetIntFromConfig(ConfigSection(),_L("unresolveduri"),unresolvedUri);
+
+	__UHEAP_MARK;
+	// open using filename
+	CContent *content = CContent::NewLC(uri);
+	RAttributeSet attributeSet;
+	CleanupClosePushL(attributeSet);
+	attributeSet.AddL(attribute1);
+	attributeSet.AddL(attribute2);
+
+	if(uniqueId == KDefaultContentObject())
+		{
+		result = content->GetAttributeSet(attributeSet);
+		}
+	else
+		{
+		result = content->GetAttributeSet(attributeSet, uniqueId);
+		}
+	if(result != KErrNone)
+		{
+		SetTestStepResult(EFail);
+		INFO_PRINTF1(_L("CContent::GetAttribute() failed"));
+		}
+	
+	User::LeaveIfError(attributeSet.GetValue(attribute1, value1));
+	User::LeaveIfError(attributeSet.GetValue(attribute2, value2));
+	if(expectedValue1 != value1 || expectedValue2 != value2 || attributeSet.Count() != 2)
+		{
+		SetTestStepResult(EFail);
+		INFO_PRINTF1(_L("CContent::GetAttributeSet() values don't match expected values"));
+		}
+	CleanupStack::PopAndDestroy(&attributeSet);		
+	CleanupStack::PopAndDestroy(content);		
+    		
+   	// Open using file handle
+   	// cannot do if URI is unresolved - i.e. if it contains "Reference Test Agent" instead of actual private directory name
+   	if (!unresolvedUri) 
+		{
+		RFile file;
+		file.Open(iParent.Fs(), uri, EFileShareReadersOnly);		
+		content = CContent::NewLC(file);
+		file.Close(); 		
+	    		
+		CleanupClosePushL(attributeSet);
+		attributeSet.AddL(attribute1);
+		attributeSet.AddL(attribute2);
+
+		result = content->GetAttributeSet(attributeSet, uniqueId);
+		if(result != KErrNone)
+			{
+			SetTestStepResult(EFail);
+			INFO_PRINTF1(_L("CContent::GetAttribute() failed"));
+			}
+			
+		User::LeaveIfError(attributeSet.GetValue(attribute1, value1));
+		User::LeaveIfError(attributeSet.GetValue(attribute2, value2));
+		if(expectedValue1 != value1 || expectedValue2 != value2 || attributeSet.Count() != 2)
+			{
+			SetTestStepResult(EFail);
+			INFO_PRINTF1(_L("CContent::GetAttributeSet() values don't match expected values"));
+			}
+		CleanupStack::PopAndDestroy(&attributeSet);		
+		CleanupStack::PopAndDestroy(content);		
+	   	}
+	__UHEAP_MARKEND;
+	return TestStepResult();
+	}
+
+
+/* 
+ * Content string attribute step
+ *
+ */
+
+CCAFContentStringAttributeStep::~CCAFContentStringAttributeStep()
+	{
+	}
+
+CCAFContentStringAttributeStep::CCAFContentStringAttributeStep(CCAFServer& aParent) : iParent(aParent)
+	{
+	SetTestStepName(KCAFContentStringAttributeStep);
+	}
+
+TVerdict CCAFContentStringAttributeStep::doTestStepL()
+	{
+#ifdef SYMBIAN_ENABLE_SDP_WMDRM_SUPPORT     
+    TBool wmdrmFlag = EFalse;     
+    GetBoolFromConfig(ConfigSection(),_L("wmdrmEnabled"), wmdrmFlag);     
+         
+    if(wmdrmFlag)     
+        {     
+        TVerdict verdict = doWmdrmTestStepL();     
+        return verdict;     
+        }     
+#endif //SYMBIAN_ENABLE_SDP_WMDRM_SUPPORT 
+
+	TInt expectedResult;
+	TInt attribute;
+	TInt unresolvedUri = EFalse;
+	TPtrC expectedValue;
+	TBuf <200> value;
+	TInt result = KErrNone;
+	TPtrC uri;
+	TPtrC uniqueId;
+
+	SetTestStepResult(EPass);
+
+	GetIntFromConfig(ConfigSection(),_L("attribute"),attribute);
+	GetStringFromConfig(ConfigSection(),_L("uri"),uri);
+	GetStringFromConfig(ConfigSection(),_L("uniqueid"),uniqueId);
+	GetStringFromConfig(ConfigSection(),_L("value"),expectedValue);
+	GetIntFromConfig(ConfigSection(),_L("result"),expectedResult);
+	GetIntFromConfig(ConfigSection(),_L("unresolveduri"),unresolvedUri);
+
+	__UHEAP_MARK;
+	
+	// Open using file name
+	CContent *content = CContent::NewLC(uri);
+	
+	if(uniqueId == KDefaultContentObject())
+		{
+		result = content->GetStringAttribute(attribute, value);
+		}
+	else
+		{
+		result = content->GetStringAttribute(attribute, value, uniqueId);
+		}
+	if(result != expectedResult)
+		{
+		SetTestStepResult(EFail);
+		INFO_PRINTF3(_L("CContent::GetStringAttribute() Expected result: %d, actual result: %d"), expectedResult, result);
+		}
+	if(value != expectedValue)
+		{
+		SetTestStepResult(EFail);
+		INFO_PRINTF3(_L("CContent::GetStringAttribute() Expected value: %S, actual result: %S"), &expectedValue, &value);
+		}
+
+	CleanupStack::PopAndDestroy(content);		
+
+   	// Open using file handle
+   	// cannot do if URI is unresolved - i.e. if it contains "Reference Test Agent" instead of actual private directory name
+   	if (!unresolvedUri) 
+	   	{
+		RFile file;
+		file.Open(iParent.Fs(), uri, EFileShareReadersOnly);		
+		content = CContent::NewLC(file);
+		file.Close(); 		
+
+		result = content->GetStringAttribute(attribute, value, uniqueId);
+		if(result != expectedResult)
+			{
+			SetTestStepResult(EFail);
+			INFO_PRINTF3(_L("CContent::GetStringAttribute() Expected result: %d, actual result: %d"), expectedResult, result);
+			}
+		else if(value != expectedValue)
+			{
+			SetTestStepResult(EFail);
+			INFO_PRINTF3(_L("CContent::GetStringAttribute() Expected value: %S, actual result: %S"), &expectedValue, &value);
+			}
+		CleanupStack::PopAndDestroy(content);		
+		}		
+
+    		
+	__UHEAP_MARKEND;
+	return TestStepResult();
+	}
+
+/* 
+ * Content StringAttributeSet step
+ *
+ */
+
+CCAFContentStringAttributeSetStep::~CCAFContentStringAttributeSetStep()
+	{
+	}
+
+CCAFContentStringAttributeSetStep::CCAFContentStringAttributeSetStep(CCAFServer& aParent) : iParent(aParent)
+	{
+	SetTestStepName(KCAFContentStringAttributeSetStep);
+	}
+
+TVerdict CCAFContentStringAttributeSetStep::doTestStepL()
+	{
+#ifdef SYMBIAN_ENABLE_SDP_WMDRM_SUPPORT     
+    TBool wmdrmFlag = EFalse;     
+    GetBoolFromConfig(ConfigSection(),_L("wmdrmEnabled"), wmdrmFlag);     
+         
+    if(wmdrmFlag)     
+        {     
+        TVerdict verdict = doWmdrmTestStepL();     
+        return verdict;     
+        }     
+#endif //SYMBIAN_ENABLE_SDP_WMDRM_SUPPORT 
+
+	TPtrC expectedValue1;
+	TPtrC expectedValue2;
+	TBuf <200> value1;
+	TBuf <200> value2;
+	TInt result1;
+	TInt result2;
+	TInt attribute1;
+	TInt attribute2;
+	TInt result = KErrNone;
+	TInt unresolvedUri = EFalse;
+	TPtrC uri;
+	TPtrC uniqueId;
+
+	SetTestStepResult(EPass);
+
+	GetStringFromConfig(ConfigSection(),_L("uri"),uri);
+	GetStringFromConfig(ConfigSection(),_L("uniqueid"),uniqueId);
+	GetIntFromConfig(ConfigSection(),_L("attribute1"),attribute1);
+	GetIntFromConfig(ConfigSection(),_L("attribute2"),attribute2);
+	GetStringFromConfig(ConfigSection(),_L("value1"),expectedValue1);
+	GetStringFromConfig(ConfigSection(),_L("value2"),expectedValue2);
+	GetIntFromConfig(ConfigSection(),_L("result1"),result1);
+	GetIntFromConfig(ConfigSection(),_L("result2"),result2);
+	GetIntFromConfig(ConfigSection(),_L("unresolveduri"),unresolvedUri);
+
+	__UHEAP_MARK;
+	
+	// Open using file name
+	CContent *content = CContent::NewLC(uri);
+	RStringAttributeSet attributeSet;
+	CleanupClosePushL(attributeSet);
+	attributeSet.AddL(attribute1);
+	attributeSet.AddL(attribute2);
+	
+	if(uniqueId == KDefaultContentObject())
+		{
+		result = content->GetStringAttributeSet(attributeSet);	
+		}
+	else
+		{
+		result = content->GetStringAttributeSet(attributeSet, uniqueId);
+		}
+	if(result != KErrNone)
+		{
+		SetTestStepResult(EFail);
+		INFO_PRINTF1(_L("CContent::GetAttribute() failed"));
+		}
+	if(result1 != attributeSet.GetValue(attribute1, value1))
+		{
+		INFO_PRINTF1(_L("RStringAttributeSet::GetValue failed"));
+		}
+	if(result2 != attributeSet.GetValue(attribute2, value2))
+		{
+		INFO_PRINTF1(_L("RStringAttributeSet::GetValue failed"));
+		}
+	if(value1 != expectedValue1 || value2 != expectedValue2 || attributeSet.Count() != 2)
+		{
+		SetTestStepResult(EFail);
+		INFO_PRINTF1(_L("CContent::GetAttributeSet() values don't match expected values"));
+		}
+	CleanupStack::PopAndDestroy(&attributeSet);		
+	CleanupStack::PopAndDestroy(content);		
+	
+    		
+   	// Open using file handle
+   	// cannot do if URI is unresolved - i.e. if it contains "Reference Test Agent" instead of actual private directory name
+   	if (!unresolvedUri) 
+		{	
+		RFile file;
+		file.Open(iParent.Fs(), uri, EFileShareReadersOnly);		
+		content = CContent::NewLC(file);
+		file.Close(); 		
+
+		CleanupClosePushL(attributeSet);
+		attributeSet.AddL(attribute1);
+		attributeSet.AddL(attribute2);
+
+		result = content->GetStringAttributeSet(attributeSet, uniqueId);	
+			
+		if(result != KErrNone)
+			{
+			SetTestStepResult(EFail);
+			INFO_PRINTF1(_L("CContent::GetAttribute() failed"));
+			}
+
+		if(result1 != attributeSet.GetValue(attribute1, value1))
+			{
+			INFO_PRINTF1(_L("RStringAttributeSet::GetValue failed"));
+			}
+		if(result2 != attributeSet.GetValue(attribute2, value2))
+			{
+			INFO_PRINTF1(_L("RStringAttributeSet::GetValue failed"));
+			}
+		
+		if(value1 != expectedValue1 || value2 != expectedValue2 || attributeSet.Count() != 2)
+			{
+			SetTestStepResult(EFail);
+			INFO_PRINTF1(_L("CContent::GetAttributeSet() values don't match expected values"));
+			}
+		CleanupStack::PopAndDestroy(&attributeSet);		
+		CleanupStack::PopAndDestroy(content);		
+		}
+	__UHEAP_MARKEND;
+	return TestStepResult();
+	}
+
+
+
+/* 
+ * This step tests the notification functions
+ *
+ */
+
+CCAFContentNotifyStep::~CCAFContentNotifyStep()
+	{
+	}
+
+CCAFContentNotifyStep::CCAFContentNotifyStep(CCAFServer& aParent) : iParent(aParent)
+	{
+	SetTestStepName(KCAFContentNotifyStep);
+	}
+
+
+TVerdict CCAFContentNotifyStep::doTestStepL()
+	{
+	TPtrC uri;
+	TInt result;
+	TRequestStatus status = KRequestPending;
+	
+	TInt Status1;
+	TInt Cancel1;
+	TInt Cancel2;
+	
+	
+	SetTestStepResult(EPass);
+
+	// Find the file to copy and the expected return code from the INI file
+	GetStringFromConfig(ConfigSection(),_L("uri"),uri);
+	GetIntFromConfig(ConfigSection(),_L("Status1"),Status1);
+	GetIntFromConfig(ConfigSection(),_L("Cancel1"),Cancel1);
+	GetIntFromConfig(ConfigSection(),_L("Cancel2"),Cancel2);
+
+	INFO_PRINTF2(_L("Performing notification tests on %S"), &uri);
+
+	__UHEAP_MARK;
+	CContent *content = CContent::NewLC(uri);
+	// Wait for rights 
+	content->NotifyStatusChange(ERightsAvailable, status);
+	User::WaitForRequest(status);
+	if(status.Int() != Status1)
+		{
+		INFO_PRINTF3(_L("Status expected: %d returned unexpected status %d"), Status1, status.Int());
+		SetTestStepResult(EFail);
+		}
+	result = content->CancelNotifyStatusChange(status);
+	if(result != Cancel1)
+		{
+		INFO_PRINTF3(_L("Cancel request expected return value: %d returned unexpected value %d"), Cancel1, result);
+		SetTestStepResult(EFail);
+		}
+	
+	// Wait for rights expired but cancel before they arrive
+	content->NotifyStatusChange(ERightsExpired, status);
+	result = content->CancelNotifyStatusChange(status);
+	if(result != Cancel2)
+		{
+		INFO_PRINTF3(_L("Cancel2 request expected return value: %d returned unexpected value %d"), Cancel2, result);
+		SetTestStepResult(EFail);
+		}
+	
+	CleanupStack::PopAndDestroy(content);
+	
+   		
+	__UHEAP_MARKEND;
+	return TestStepResult();
+	}
+
+/* 
+ * This step sets a property in the agents
+ *
+ */
+
+CCAFContentSetPropertyStep::~CCAFContentSetPropertyStep()
+	{
+	}
+
+CCAFContentSetPropertyStep::CCAFContentSetPropertyStep(CCAFServer& aParent) : iParent(aParent)
+	{
+	SetTestStepName(KCAFContentSetPropertyStep);
+	}
+
+
+TVerdict CCAFContentSetPropertyStep::doTestStepL()
+	{
+	TInt expectedResult;
+	TInt result;
+	TPtrC uri;
+
+	SetTestStepResult(EFail);
+
+	// Find the file to copy and the expected return code from the INI file
+	GetStringFromConfig(ConfigSection(),_L("uri"),uri);
+	GetIntFromConfig(ConfigSection(),_L("result"),expectedResult);
+
+	INFO_PRINTF2(_L("Set Property expected result: %d"), expectedResult);
+
+	__UHEAP_MARK;
+
+	CContent *content = CContent::NewLC(uri);
+	result = content->SetProperty(EAgentPropertyBufferSize, 100);
+	CleanupStack::PopAndDestroy(content);
+	
+	if(result == expectedResult)
+		{	
+		SetTestStepResult(EPass);
+		}
+	else 
+		{
+		INFO_PRINTF2(_L("SetProperty() returned with unexpected error: %d"), result);
+		}
+    		
+	__UHEAP_MARKEND;
+	return TestStepResult();
+	}
+
+
+/* 
+ * This step asks the agent to display information about a file
+ *
+ */
+
+CCAFContentDisplayInfoStep::~CCAFContentDisplayInfoStep()
+	{
+	}
+
+CCAFContentDisplayInfoStep::CCAFContentDisplayInfoStep(CCAFServer& aParent) : iParent(aParent)
+	{
+	SetTestStepName(KCAFContentDisplayInfoStep);
+	}
+
+
+TVerdict CCAFContentDisplayInfoStep::doTestStepL()
+	{
+	TPtrC uri;
+	TInt expectedResult;
+	TInt result;
+
+	SetTestStepResult(EFail);
+
+	// Find the file to copy and the expected return code from the INI file
+	GetStringFromConfig(ConfigSection(),_L("uri"),uri);
+	GetIntFromConfig(ConfigSection(),_L("result"),expectedResult);
+
+	INFO_PRINTF3(_L("DisplayInfo for %S expected result: %d"), &uri, expectedResult);
+
+	__UHEAP_MARK;
+
+	CContent *content = CContent::NewLC(uri);
+	TRAP(result, content->DisplayInfoL(EFileProperties));
+	CleanupStack::PopAndDestroy(content);
+	
+	if(result == expectedResult)
+		{	
+		SetTestStepResult(EPass);
+		}
+	else 
+		{
+		INFO_PRINTF2(_L("DisplayInfoL() left with unexpected error: %d"), result);
+		}
+    		
+	__UHEAP_MARKEND;
+	return TestStepResult();
+	}
+
+/* 
+ * This step attempts to perform an agent specific command
+ *
+ */
+
+CCAFContentAgentSpecificStep::~CCAFContentAgentSpecificStep()
+	{
+	}
+
+CCAFContentAgentSpecificStep::CCAFContentAgentSpecificStep(CCAFServer& aParent) : iParent(aParent)
+	{
+	SetTestStepName(KCAFContentAgentSpecificStep);
+	}
+
+
+TVerdict CCAFContentAgentSpecificStep::doTestStepL()
+	{
+	TPtrC input16;
+	TPtrC output16;
+	TPtrC uri;
+	TInt expectedResult;
+	TInt command;
+	TInt result;
+	TBuf8 <100> actualOutput;
+	TBuf8 <100> output;
+	TBuf8 <100> input;
+
+
+	SetTestStepResult(EPass);
+
+	GetStringFromConfig(ConfigSection(),_L("uri"),uri);
+	GetIntFromConfig(ConfigSection(),_L("command"),command);
+	GetStringFromConfig(ConfigSection(),_L("input"),input16);
+	GetStringFromConfig(ConfigSection(),_L("output"),output16);
+	GetIntFromConfig(ConfigSection(),_L("result"),expectedResult);
+
+	input.Copy(input16);
+	output.Copy(output16);
+
+	__UHEAP_MARK;
+	CContent *content = CContent::NewLC(uri);
+
+	INFO_PRINTF1(_L("Running synchronous Agent specific command"));
+	actualOutput.SetLength(0);
+	result = content->AgentSpecificCommand(command, input, actualOutput);
+	if(result != expectedResult)
+		{	
+		SetTestStepResult(EFail);
+		INFO_PRINTF3(_L("Async Expected result: %d, actual result: %d"), expectedResult, result);
+		}
+	else if(actualOutput != output)
+		{
+		SetTestStepResult(EFail);
+		INFO_PRINTF3(_L("Async Expected output: %S, actual output: %S"), &output, &actualOutput);
+		}
+
+	INFO_PRINTF1(_L("Running asynchronous Agent specific command"));
+	TRequestStatus status;
+	actualOutput.SetLength(0);
+	content->AgentSpecificCommand(command, input, actualOutput, status);
+	User::WaitForRequest(status);
+	if(status.Int() != expectedResult)
+		{	
+		SetTestStepResult(EFail);
+		INFO_PRINTF3(_L("Async Expected result: %d, actual result: %d"), expectedResult, status.Int());
+		}
+	else if(actualOutput != output)
+		{
+		SetTestStepResult(EFail);
+		INFO_PRINTF3(_L("Async Expected output: %S, actual output: %S"), &output, &actualOutput);
+		}
+	
+	CleanupStack::PopAndDestroy(content);		
+    		
+	__UHEAP_MARKEND;
+	return TestStepResult();
+	}
+
+
+/* 
+ * This step tests the rights request functions
+ *
+ */
+
+CCAFContentRequestRightsStep::~CCAFContentRequestRightsStep()
+	{
+	}
+
+CCAFContentRequestRightsStep::CCAFContentRequestRightsStep(CCAFServer& aParent) : iParent(aParent)
+	{
+	SetTestStepName(KCAFContentRequestRightsStep);
+	}
+
+
+TVerdict CCAFContentRequestRightsStep::doTestStepL()
+	{
+	TPtrC uri;
+	TInt result;
+	TRequestStatus status = KRequestPending;
+	
+	TInt Status1;
+	TInt Cancel1;
+	TInt Cancel2;
+	
+	
+	SetTestStepResult(EPass);
+
+	// Find the file to copy and the expected return code from the INI file
+	GetStringFromConfig(ConfigSection(),_L("uri"),uri);
+	GetIntFromConfig(ConfigSection(),_L("Status1"),Status1);
+	GetIntFromConfig(ConfigSection(),_L("Cancel1"),Cancel1);
+	GetIntFromConfig(ConfigSection(),_L("Cancel2"),Cancel2);
+
+	INFO_PRINTF2(_L("Performing Request Rights tests on %S"), &uri);
+
+	__UHEAP_MARK;
+	CContent *content = CContent::NewLC(uri);
+	// Wait for rights 
+	content->RequestRights(status);
+	User::WaitForRequest(status);
+	if(status.Int() != Status1)
+		{
+		INFO_PRINTF3(_L("Status expected: %d returned unexpected status %d"), Status1, status.Int());
+		SetTestStepResult(EFail);
+		}
+	result = content->CancelRequestRights(status);
+	if(result != Cancel1)
+		{
+		INFO_PRINTF3(_L("Cancel request expected return value: %d returned unexpected value %d"), Cancel1, result);
+		SetTestStepResult(EFail);
+		}
+	
+	// Wait for rights expired but cancel before they arrive
+	content->RequestRights(status);
+	result = content->CancelRequestRights(status);
+	if(result != Cancel2)
+		{
+		INFO_PRINTF3(_L("Cancel2 request expected return value: %d returned unexpected value %d"), Cancel2, result);
+		SetTestStepResult(EFail);
+		}
+	
+	CleanupStack::PopAndDestroy(content);
+	
+   		
+	__UHEAP_MARKEND;
+	return TestStepResult();
+	}
+
+
+
+/* 
+ * This step tests the rights request functions
+ *
+ */
+
+CCAFContentEmbeddedObjectsStep::~CCAFContentEmbeddedObjectsStep()
+	{
+	}
+
+CCAFContentEmbeddedObjectsStep::CCAFContentEmbeddedObjectsStep(CCAFServer& aParent) : iParent(aParent)
+	{
+	SetTestStepName(KCAFContentEmbeddedObjectsStep);
+	}
+
+
+TVerdict CCAFContentEmbeddedObjectsStep::doTestStepL()
+	{
+	TPtrC uri;
+	TInt expectedCount;
+	TInt expectedResult;
+	
+	SetTestStepResult(EPass);
+
+	// Find the file to copy and the expected return code from the INI file
+	GetStringFromConfig(ConfigSection(),_L("uri"),uri);
+	GetIntFromConfig(ConfigSection(),_L("count"),expectedCount);
+	GetIntFromConfig(ConfigSection(),_L("result"),expectedResult);
+
+	INFO_PRINTF2(_L("Finding embedded objects within %S"), &uri);
+
+	__UHEAP_MARK;
+	CContent *content = CContent::NewLC(uri);
+
+	RStreamablePtrArray <CEmbeddedObject> array;
+	CleanupClosePushL(array);
+
+	// Wait for rights
+	TRAPD(result, content->GetEmbeddedObjectsL(array));
+	if(result != expectedResult)
+		{
+		INFO_PRINTF3(_L("GetEmbeddedObjectsL() returned result of %d, expected %d"), result, expectedResult);
+		SetTestStepResult(EFail);
+		}
+	
+	if((result == KErrNone) && (array.Count() != expectedCount))
+			{
+			INFO_PRINTF3(_L("GetEmbeddedObjectsL() found %d objects, expected %d"), array.Count(), expectedCount);
+			SetTestStepResult(EFail);
+			}
+
+	CleanupStack::PopAndDestroy(&array);	
+	CleanupStack::PopAndDestroy(content);
+	
+   		
+	__UHEAP_MARKEND;
+	return TestStepResult();
+	}
+
+/* 
+ * This step tests the rights request functions
+ *
+ */
+
+CCAFContentEmbeddedObjectTypeStep::~CCAFContentEmbeddedObjectTypeStep()
+	{
+	}
+
+CCAFContentEmbeddedObjectTypeStep::CCAFContentEmbeddedObjectTypeStep(CCAFServer& aParent) : iParent(aParent)
+	{
+	SetTestStepName(KCAFContentEmbeddedObjectTypeStep);
+	}
+
+
+TVerdict CCAFContentEmbeddedObjectTypeStep::doTestStepL()
+	{
+	TPtrC uri;
+	TInt expectedContent;
+	TInt expectedContainers;
+	TInt expectedContainerResult;
+	TInt expectedContentResult;
+
+	SetTestStepResult(EPass);
+
+	// Find the file to copy and the expected return code from the INI file
+	GetStringFromConfig(ConfigSection(),_L("uri"),uri);
+	GetIntFromConfig(ConfigSection(),_L("contentcount"),expectedContent);
+	GetIntFromConfig(ConfigSection(),_L("containercount"),expectedContainers);
+	GetIntFromConfig(ConfigSection(),_L("containerresult"),expectedContainerResult);
+	GetIntFromConfig(ConfigSection(),_L("contentresult"),expectedContentResult);
+
+	INFO_PRINTF2(_L("Finding embedded objects within %S"), &uri);
+
+	__UHEAP_MARK;
+	CContent *content = CContent::NewLC(uri);
+
+	RStreamablePtrArray <CEmbeddedObject> array;
+	CleanupClosePushL(array);
+
+	// get embedded objects
+	TRAPD(result, content->GetEmbeddedObjectsL(array, EContainerObject));
+
+	if(result != expectedContainerResult)
+		{
+		INFO_PRINTF3(_L("GetEmbeddedObjectsL() returned result of %d, expected %d"), result, expectedContainerResult);
+		SetTestStepResult(EFail);
+		}
+
+	if((result == KErrNone) && (array.Count() != expectedContainers))
+		{
+		INFO_PRINTF3(_L("GetEmbeddedObjectsL() found %d container objects, expected %d"), array.Count(), expectedContainers);
+		SetTestStepResult(EFail);
+		}
+
+	// clear array
+	array.ResetAndDestroy();
+	
+	// get embedded objects
+	TRAP(result, content->GetEmbeddedObjectsL(array, EContentObject));
+
+	if(result != expectedContentResult)
+		{
+		INFO_PRINTF3(_L("GetEmbeddedObjectsL() returned result of %d, expected %d"), result, expectedContentResult);
+		SetTestStepResult(EFail);
+		}
+
+	if((result == KErrNone) && (array.Count() != expectedContent))
+		{
+		INFO_PRINTF3(_L("GetEmbeddedObjectsL() found %d content objects, expected %d"), array.Count(), expectedContent);
+		SetTestStepResult(EFail);
+		}
+
+
+	CleanupStack::PopAndDestroy(&array);	
+	CleanupStack::PopAndDestroy(content);
+	
+   		
+	__UHEAP_MARKEND;
+	return TestStepResult();
+	}
+
+/* 
+ * This step tests the rights request functions
+ *
+ */
+
+CCAFContentSearchStep::~CCAFContentSearchStep()
+	{
+	}
+
+CCAFContentSearchStep::CCAFContentSearchStep(CCAFServer& aParent) : iParent(aParent)
+	{
+	SetTestStepName(KCAFContentSearchStep);
+	}
+
+
+TVerdict CCAFContentSearchStep::doTestStepL()
+	{
+	TPtrC uri;
+	TPtrC mimeType16;
+	TInt result;
+	TInt expectedCount;
+	TInt expectedResult;
+	TBuf8 <255> mimeType8;
+	
+	SetTestStepResult(EPass);
+
+	// Find the file, mimetype, expected return code and expected count from the INI file
+	GetStringFromConfig(ConfigSection(),_L("uri"),uri);
+	GetIntFromConfig(ConfigSection(),_L("count"),expectedCount);
+	GetIntFromConfig(ConfigSection(),_L("result"),expectedResult);
+	GetStringFromConfig(ConfigSection(),_L("mimetype"),mimeType16);
+
+	mimeType8.Copy(mimeType16);
+
+	INFO_PRINTF3(_L("Search for embedded %S objects within %S"), &mimeType16, &uri);
+
+	__UHEAP_MARK;
+	CContent *content = CContent::NewLC(uri);
+
+	RStreamablePtrArray <CEmbeddedObject> array;
+	CleanupClosePushL(array);
+
+	// get embedded objects
+	result = content->Search(array, mimeType8, ETrue);
+	
+	if(result != expectedResult)
+		{
+		INFO_PRINTF3(_L("Search() return value %d, expected %d"), result, expectedResult);
+		SetTestStepResult(EFail);
+		}
+	
+	if(array.Count() != expectedCount)
+		{
+		INFO_PRINTF3(_L("Search() found %d objects, expected %d"), array.Count(), expectedCount);
+		SetTestStepResult(EFail);
+		}
+
+	CleanupStack::PopAndDestroy(&array);	
+	CleanupStack::PopAndDestroy(content);
+	
+   		
+	__UHEAP_MARKEND;
+	return TestStepResult();
+	}
+
+/* 
+ * This step tests the container open/close functions
+ *
+ */
+
+CCAFContentContainerStep::~CCAFContentContainerStep()
+	{
+	}
+
+CCAFContentContainerStep::CCAFContentContainerStep(CCAFServer& aParent) : iParent(aParent)
+	{
+	SetTestStepName(KCAFContentContainerStep);
+	}
+
+
+TVerdict CCAFContentContainerStep::doTestStepL()
+	{
+	TPtrC uri;
+	TPtrC uniqueId;
+	TInt result;
+	TInt openResult;
+	TInt closeResult;
+	
+	
+	SetTestStepResult(EPass);
+
+	// Find the file to copy and the expected return code from the INI file
+	GetStringFromConfig(ConfigSection(),_L("uri"),uri);
+	GetStringFromConfig(ConfigSection(),_L("uniqueId"),uniqueId);
+	GetIntFromConfig(ConfigSection(),_L("openResult"),openResult);
+	GetIntFromConfig(ConfigSection(),_L("closeResult"),closeResult);
+
+	INFO_PRINTF2(_L("Opening embedded container within %S"), &uri);
+
+	__UHEAP_MARK;
+	CContent *content = CContent::NewLC(uri);
+
+	result = content->OpenContainer(uniqueId);
+	if(result != openResult)
+		{
+		SetTestStepResult(EFail);	
+		INFO_PRINTF3(_L("OpenContainer() returned %d, expected %d"), result, openResult);
+		}
+	result = content->CloseContainer();
+	if(result != closeResult)
+		{
+		SetTestStepResult(EFail);	
+		INFO_PRINTF3(_L("CloseContainer() returned %d, expected %d"), result, closeResult);
+		}
+	CleanupStack::PopAndDestroy(content);
+   		
+	__UHEAP_MARKEND;
+	return TestStepResult();
+	}
+
+#ifdef SYMBIAN_ENABLE_SDP_WMDRM_SUPPORT
+      
+// The following methods test the various content attribute APIs for WMDRM content.     
+      
+TVerdict CCAFContentAttributeStep::doWmdrmTestStepL()     
+    {     
+    SetTestStepResult(EFail);     
+         
+    TInt attribVal;     
+    GetIntFromConfig(ConfigSection(),_L("attribute"), attribVal);     
+         
+    TInt expectedValue;     
+    GetIntFromConfig(ConfigSection(),_L("value"), expectedValue);     
+      
+__UHEAP_MARK;     
+    TPtrC header;     
+    HBufC8* headerData = NULL;     
+         
+    if(GetStringFromConfig(ConfigSection(),_L("header"), header))     
+        {     
+        headerData = ConvertDes16toHBufC8LC(header);     
+        }     
+    else     
+        {     
+        headerData = CreateWmdrmHeaderLC();      
+        }     
+             
+    CContent *content = CContent::NewLC(*headerData);     
+    TInt value;     
+    User::LeaveIfError(content->GetAttribute(attribVal, value));     
+         
+    if(expectedValue == value)     
+        {     
+        SetTestStepResult(EPass);     
+        }     
+    else     
+        {     
+        INFO_PRINTF3(_L("CContent::GetAttribute() Expected value: %d, actual value: %d"), expectedValue, value);     
+        }     
+         
+    CleanupStack::PopAndDestroy(2, headerData);                      
+__UHEAP_MARKEND;     
+      
+    return TestStepResult();     
+    }     
+         
+      
+TVerdict CCAFContentAttributeSetStep::doWmdrmTestStepL()     
+    {     
+    SetTestStepResult(EFail);     
+         
+    TInt attribute1;     
+    GetIntFromConfig(ConfigSection(),_L("attribute1"),attribute1);     
+         
+    TInt attribute2;     
+    GetIntFromConfig(ConfigSection(),_L("attribute2"),attribute2);     
+         
+    TInt expectedValue1;     
+    GetIntFromConfig(ConfigSection(),_L("value1"),expectedValue1);     
+         
+    TInt expectedValue2;     
+    GetIntFromConfig(ConfigSection(),_L("value2"),expectedValue2);     
+      
+__UHEAP_MARK;     
+      
+    TPtrC header;     
+    HBufC8* headerData = NULL;     
+         
+    if(GetStringFromConfig(ConfigSection(),_L("header"), header))     
+        {     
+        headerData = ConvertDes16toHBufC8LC(header);     
+        }     
+    else     
+        {     
+        headerData = CreateWmdrmHeaderLC();      
+        }     
+         
+    CContent *content = CContent::NewLC(*headerData);     
+                     
+    RAttributeSet attributeSet;     
+    CleanupClosePushL(attributeSet);     
+    attributeSet.AddL(attribute1);     
+    attributeSet.AddL(attribute2);     
+             
+    TInt result = content->GetAttributeSet(attributeSet);     
+    if(result == KErrNone)     
+        {     
+        TInt value1;         
+        User::LeaveIfError(attributeSet.GetValue(attribute1, value1));     
+             
+        TInt value2;     
+        User::LeaveIfError(attributeSet.GetValue(attribute2, value2));     
+             
+        if(expectedValue1 == value1 && expectedValue2 == value2 && attributeSet.Count() == 2)     
+            {     
+            SetTestStepResult(EPass);     
+            }     
+        else     
+            {     
+            INFO_PRINTF1(_L("CContent::GetAttributeSet() values don't match expected values"));     
+            }     
+        }     
+         
+    else     
+        {     
+        INFO_PRINTF1(_L("CContent::GetAttributeSet() failed"));     
+        }     
+             
+    CleanupStack::PopAndDestroy(3, headerData);          
+         
+__UHEAP_MARKEND;     
+      
+    return TestStepResult();     
+    }     
+      
+      
+TVerdict CCAFContentStringAttributeStep::doWmdrmTestStepL()     
+    {     
+    SetTestStepResult(EFail);     
+         
+    TInt attribVal;     
+    GetIntFromConfig(ConfigSection(),_L("attribute"),attribVal);     
+         
+    TPtrC expectedValue;     
+    GetStringFromConfig(ConfigSection(),_L("value"),expectedValue);     
+         
+    TInt expectedResult;     
+    GetIntFromConfig(ConfigSection(),_L("result"),expectedResult);     
+         
+__UHEAP_MARK;     
+    TPtrC header;     
+    HBufC8* headerData = NULL;     
+         
+    if(GetStringFromConfig(ConfigSection(),_L("header"), header))     
+        {     
+        headerData = ConvertDes16toHBufC8LC(header);     
+        }     
+    else     
+        {     
+        headerData = CreateWmdrmHeaderLC();      
+        }     
+         
+    CContent *content = CContent::NewLC(*headerData);     
+                 
+    TBuf <200> value;     
+    TInt result = content->GetStringAttribute(attribVal, value);     
+    if(result == expectedResult && value == expectedValue)     
+        {     
+        SetTestStepResult(EPass);     
+        }     
+    else     
+        {     
+        INFO_PRINTF3(_L("CContent::GetStringAttribute() Expected result: %d, actual result: %d"), expectedResult, result);     
+        INFO_PRINTF3(_L("CContent::GetStringAttribute() Expected value: %S, actual value: %S"), &expectedValue, &value);     
+        }     
+             
+    CleanupStack::PopAndDestroy(2, headerData);          
+             
+__UHEAP_MARKEND;     
+      
+    return TestStepResult();     
+    }     
+      
+      
+TVerdict CCAFContentStringAttributeSetStep::doWmdrmTestStepL()     
+    {     
+    SetTestStepResult(EFail);     
+      
+    TInt attribute1;         
+    GetIntFromConfig(ConfigSection(),_L("attribute1"),attribute1);     
+         
+    TInt attribute2;     
+    GetIntFromConfig(ConfigSection(),_L("attribute2"),attribute2);     
+         
+    TPtrC expectedValue1;     
+    GetStringFromConfig(ConfigSection(),_L("value1"),expectedValue1);     
+         
+    TPtrC expectedValue2;     
+    GetStringFromConfig(ConfigSection(),_L("value2"),expectedValue2);     
+         
+__UHEAP_MARK;     
+    TPtrC header;     
+    HBufC8* headerData = NULL;     
+         
+    if(GetStringFromConfig(ConfigSection(),_L("header"), header))     
+        {     
+        headerData = ConvertDes16toHBufC8LC(header);     
+        }     
+    else     
+        {     
+        headerData = CreateWmdrmHeaderLC();      
+        }     
+         
+    CContent *content = CContent::NewLC(*headerData);     
+         
+    RStringAttributeSet attributeSet;     
+    CleanupClosePushL(attributeSet);     
+    attributeSet.AddL(attribute1);     
+    attributeSet.AddL(attribute2);     
+             
+    TInt result = content->GetStringAttributeSet(attributeSet);     
+    TBuf <200> value1;     
+    TBuf <200> value2;     
+    if(result == KErrNone)     
+        {     
+        TInt result3 = attributeSet.GetValue(attribute1, value1);     
+        TInt result4 = attributeSet.GetValue(attribute2, value2);     
+                 
+        if(value1 == expectedValue1 && value2 == expectedValue2 && attributeSet.Count() == 2     
+         && result3 == KErrNone && result4 == KErrNone)     
+            {     
+            SetTestStepResult(EPass);     
+            }     
+        else     
+            {     
+            INFO_PRINTF3(_L("RStringAttributeSet::GetValue() for attribute1.Expected value: %S, actual value: %S"), &expectedValue1, &value1);     
+            INFO_PRINTF3(_L("RStringAttributeSet::GetValue() for attribute2.Expected value: %S, actual value: %S"), &expectedValue2, &value2);     
+            INFO_PRINTF3(_L("RStringAttributeSet::GetValue() for attribute1. Expected result: %d, actual result: %d"), 0, result3);     
+            INFO_PRINTF3(_L("RStringAttributeSet::GetValue() for attribute2. Expected result: %d, actual result: %d"), 0, result4);      
+            }     
+        }     
+    else     
+        {     
+        INFO_PRINTF1(_L("CContent::GetStringAttributeSet() failed"));     
+        }        
+         
+    CleanupStack::PopAndDestroy(3, headerData);          
+      
+__UHEAP_MARKEND;     
+      
+    return TestStepResult();     
+    }     
+      
+#endif //SYMBIAN_ENABLE_SDP_WMDRM_SUPPORT 
+