videofeeds/server/tsrc/VCXVodContentApiTest/src/VCXVodContentApiTestBlocks.cpp
changeset 0 96612d01cf9f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videofeeds/server/tsrc/VCXVodContentApiTest/src/VCXVodContentApiTestBlocks.cpp	Mon Jan 18 20:21:12 2010 +0200
@@ -0,0 +1,1749 @@
+/*
+* Copyright (c) 2002 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:   Test module for IptvVodContentClient*
+*/
+
+
+
+// INCLUDE FILES
+#include <e32svr.h>
+#include <StifParser.h>
+#include <Stiftestinterface.h>
+#include "VCXVodContentApiTest.h"
+#include "VCXTestLog.h"
+
+#include "CIptvVodContentClient.h"
+
+#include "CIptvVodContentCategoryBriefDetails.h"
+#include "CIptvVodContentContentBriefDetails.h"
+#include "CIptvVodContentContentFullDetails.h"
+
+#include "CIptvUtil.h"
+#include "CIptvTestTimer.h"
+#include "CIptvTestUtilities.h"
+#include "CIptvTestEcgUpdateInfo.h"
+#include "TIptvRssSearchQuery.h"
+#include <CentralRepository.h>
+
+#include <f32file.h>
+
+// EXTERNAL DATA STRUCTURES
+
+// EXTERNAL FUNCTION PROTOTYPES
+
+// CONSTANTS
+
+// MACROS
+
+// LOCAL CONSTANTS AND MACROS
+
+// MODULE DATA STRUCTURES
+
+// LOCAL FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+
+// ============================= LOCAL FUNCTIONS ===============================
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentApiTest::Delete
+// Delete here all resources allocated and opened from test methods.
+// Called from destructor.
+// -----------------------------------------------------------------------------
+//
+void CIptvVodContentApiTest::Delete()
+    {
+    VCXLOGLO1(">>>CIptvVodContentApiTest::Delete");
+    DeAllocateResources();
+    VCXLOGLO1("<<<CIptvVodContentApiTest::Delete");
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentApiTest::RunMethodL
+// Run specified method. Contains also table of test mothods and their names.
+// -----------------------------------------------------------------------------
+//
+TInt CIptvVodContentApiTest::RunMethodL(
+    CStifItemParser& aItem )
+    {
+
+    static TStifFunctionInfo const KFunctions[] =
+        {
+        // Copy this line for every implemented function.
+        // First string is the function name used in TestScripter script file.
+        // Second is the actual implementation member function.
+        ENTRY( "EnableVerifying", CIptvVodContentApiTest::EnableVerifying ),
+        ENTRY( "Verify", CIptvVodContentApiTest::Verify ),
+        ENTRY( "DeleteEpgDb", CIptvVodContentApiTest::DeleteEpgDb ),
+        ENTRY( "Create", CIptvVodContentApiTest::CreateL ),
+        ENTRY( "GetEcgList", CIptvVodContentApiTest::GetEcgList ),
+        ENTRY( "EcgCategoryList", CIptvVodContentApiTest::EcgCategoryList ),
+        ENTRY( "EcgEcgAllList", CIptvVodContentApiTest::EcgEcgAllList ),
+        ENTRY( "CategoryDetails", CIptvVodContentApiTest::CategoryDetails ),
+        ENTRY( "ParentCategory", CIptvVodContentApiTest::ParentCategory ),
+        ENTRY( "ContentDetailsList", CIptvVodContentApiTest::ContentDetailsList ),
+        ENTRY( "VerifyAllCategoryContent", CIptvVodContentApiTest::VerifyAllCategoryContentL ),
+        ENTRY( "UpdateEcg", CIptvVodContentApiTest::UpdateEcg ),
+        ENTRY( "SetTestCaseTimeOut", CIptvVodContentApiTest::SetTestCaseTimeOut ),
+        ENTRY( "SelectIap", CIptvVodContentApiTest::SelectIapL ),
+        ENTRY( "GetUpdateTime", CIptvVodContentApiTest::GetUpdateTimeL ),
+        ENTRY( "SetSpecialAction", CIptvVodContentApiTest::SetSpecialAction ),
+        ENTRY( "DisableThumbnails", CIptvVodContentApiTest::DisableThumbnails ),
+        ENTRY( "EnableThumbnails", CIptvVodContentApiTest::EnableThumbnails ),
+        ENTRY( "SetParentalControlAge", CIptvVodContentApiTest::SetParentalControlAge ),
+        ENTRY( "Search", CIptvVodContentApiTest::Search ),
+        ENTRY( "CancelSearch", CIptvVodContentApiTest::CancelSearch ),
+        ENTRY( "CancelUpdate", CIptvVodContentApiTest::CancelUpdate ),
+        ENTRY( "SetLastPosition", CIptvVodContentApiTest::SetLastPosition ),
+        ENTRY( "UpdateAvailable", CIptvVodContentApiTest::UpdateAvailableL ),
+        ENTRY( "CategoryCount", CIptvVodContentApiTest::CategoryCountL ),
+        ENTRY( "ContentCount", CIptvVodContentApiTest::ContentCountL ),
+        ENTRY( "SetMsgWhichToSignal", CIptvVodContentApiTest::SetMsgWhichToSignal ),
+        ENTRY( "IgnoreMsg", CIptvVodContentApiTest::IgnoreMsg ),
+        ENTRY( "Destroy", CIptvVodContentApiTest::Destroy ),
+        };
+
+
+    const TInt count = sizeof( KFunctions ) /
+                        sizeof( TStifFunctionInfo );
+
+    return RunInternalL( KFunctions, count, aItem );
+
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentApiTest::CreateL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CIptvVodContentApiTest::CreateL( CStifItemParser& aItem )
+    {
+    VCXLOGLO1(">>>CIptvVodContentApiTest::CreateL");
+    // Print to UI
+    _LIT( KIptvVodContentApiTest, "IptvVodContentApiTest" );
+    _LIT( KCreateL, "In CreateL" );
+    TestModuleIf().Printf( 0, KIptvVodContentApiTest, KCreateL );
+    // Print to log file
+    iLog->Log( KCreateL );
+
+    //Script parameters:
+    // service id, must be >0
+    TPtrC serviceName;
+
+    iMsgWhichToSignal = -1;
+    iIgnoreMsg = KIptvTestNoSignal;
+
+    TInt testCaseStatus = KErrNone;
+
+    aItem.SetParsingType(CStifItemParser::EQuoteStyleParsing);
+
+    if(aItem.GetNextString(serviceName) != KErrNone)
+        {
+        VCXLOGLO1("Can't read testcase parameter, serviceName/number !!!");
+        VCXLOGLO1("<<<CIptvVodContentApiTest::CreateL");
+        iLog->Log( _L("**** FAIL ***** Can't read testcase parameter!!!") );
+        return KErrGeneral;
+        }
+
+    VCXLOGLO2("serviceName/orderNumber: %S", &serviceName);
+
+    TInt timeoutValue;
+    if(aItem.GetNextInt(timeoutValue) == KErrNone)
+        {
+        iTimeoutMinutes = timeoutValue;
+        }
+    else
+        {
+        iTimeoutMinutes = 4;
+        }
+
+    testCaseStatus = CreateInstance(serviceName);
+
+    iRetryCount = 0;
+
+    VCXLOGLO1("<<<CIptvVodContentApiTest::CreateL");
+    return testCaseStatus;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentApiTest::DeleteEpgDb();
+// -----------------------------------------------------------------------------
+//
+TInt CIptvVodContentApiTest::DeleteEpgDb( CStifItemParser& /* aItem */ )
+    {
+    VCXLOGLO1(">>>CIptvVodContentApiTest::DeleteEpgDb");
+
+    RFs fs;
+    fs.Connect();
+
+    CFileMan* fileMan = CFileMan::NewL(fs);
+
+    TBuf<512> path;
+
+//  CIptvUtil::GetPathL(fs, EIptvPathMyVideos, path, EDriveC);
+//  fileMan->RmDir(path);
+
+    CIptvUtil::GetPathL(fs, EIptvPathEcg, path, EDriveC);
+    fileMan->RmDir(path);
+
+//  CIptvUtil::GetPathL(fs, EIptvPathMyVideos, path, EDriveE);
+//  fileMan->RmDir(path);
+
+    CIptvUtil::GetPathL(fs, EIptvPathEcg, path, EDriveE);
+    fileMan->RmDir(path);
+
+    delete fileMan;
+
+    fs.Close();
+
+    VCXLOGLO1("<<<CIptvVodContentApiTest::DeleteEpgDb");
+
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentApiTest::GetEcgList();
+// -----------------------------------------------------------------------------
+//
+TInt CIptvVodContentApiTest::GetEcgList( CStifItemParser& aItem )
+    {
+    VCXLOGLO1(">>>CIptvVodContentApiTest::GetEcgList");
+    // Print to UI
+    _LIT( KIptvVodContentApiTest, "IptvVodContentApiTest" );
+    _LIT( KGetEcgList, "In GetEcgList" );
+    TestModuleIf().Printf( 0, KIptvVodContentApiTest, KGetEcgList );
+    // Print to log file
+    iLog->Log( KGetEcgList );
+
+    //Script parameters
+
+    TPtrC  searchStringPtr;
+
+    TInt categoryId = 0;
+    TInt from =0;
+    TInt amount = 0;
+    TInt testCaseStatus = KErrNone;
+    TBool isParametersValid = TRUE;
+
+    aItem.SetParsingType(CStifItemParser::EQuoteStyleParsing);
+
+   //Script parameters
+    if(aItem.GetNextInt(categoryId) != KErrNone)
+        {
+        isParametersValid = FALSE;
+        }
+
+    if(aItem.GetNextString(searchStringPtr) != KErrNone)
+        {
+        isParametersValid = FALSE;
+        }
+
+    if(aItem.GetNextInt(from) == KErrNone)
+        {
+        //check validity
+        if(from<0)
+            {
+            isParametersValid = FALSE;
+            }
+        }
+    else
+        {
+        isParametersValid = FALSE;
+        }
+
+    if(aItem.GetNextInt(amount) == KErrNone)
+        {
+        //check validity
+        if(amount<0)
+            {
+            isParametersValid = FALSE;
+            }
+        }
+    else
+        {
+        isParametersValid = FALSE;
+        }
+
+    TBuf<256> searchString(searchStringPtr);
+    if(!searchString.Compare(_L("\"\"")) )
+        {
+        searchString = _L("");
+        }
+
+    TUint32 categoryId32 = categoryId;
+    if(categoryId == KIptvTestSearchCategoryId)
+        {
+        categoryId32 = KIptvRssSearchCategoryId;
+        }
+
+    VCXLOGLO2("categoryId: %d", categoryId32);
+    VCXLOGLO2("searchString: %S", &searchString);
+    VCXLOGLO2("from: %d", from);
+    VCXLOGLO2("amount: %d", amount);
+
+    if(!isParametersValid)
+        {
+        VCXLOGLO1("Error in testparameters");
+        iLog->Log(_L("Error in testparameters"));
+        VCXLOGLO1("<<<CIptvVodContentApiTest::GetEcgList");
+        return KErrGeneral;
+        }
+
+    //TestGetEcgList(TIptvCategoryId aCategoryId, TDesC& aSearchString, TUint32 aFrom, TUint32 aAmount)
+    //testCaseStatus = TestGetEcgList(categoryId, searchString, from,amount);
+    testCaseStatus = TestGetEcgList(categoryId32, searchString, from,amount);
+
+    VCXLOGLO1("<<<CIptvVodContentApiTest::GetEcgList");
+    return testCaseStatus;
+    }
+
+
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentApiTest::EnableVerifying();
+// -----------------------------------------------------------------------------
+//
+TInt CIptvVodContentApiTest::EnableVerifying( CStifItemParser& aItem )
+    {
+    VCXLOGLO1(">>>CIptvVodContentApiTest::EnableVerifying");
+    // Print to UI
+    _LIT( KIptvVodContentApiTest, "IptvVodContentApiTest" );
+    _LIT( KEnableVerifying , "In EnableVerifying" );
+    TestModuleIf().Printf( 0, KIptvVodContentApiTest, KEnableVerifying );
+    // Print to log file
+    iLog->Log( KEnableVerifying );
+
+    //Script parameters
+
+    TInt result = KErrNone;
+
+    TPtrC caseId;
+    TInt countNumber = -1;
+
+    TBool isParametersValid = ETrue;
+
+   //Script parameters
+    if(aItem.GetNextString(caseId) != KErrNone)
+        {
+        isParametersValid = EFalse;
+        }
+
+    TInt appendInt = 0;
+    TBool append = EFalse;
+    if(aItem.GetNextInt(appendInt) == KErrNone)
+        {
+        append = static_cast<TBool>(appendInt);
+        }
+   aItem.GetNextInt(countNumber);
+
+   if(!isParametersValid)
+        {
+        VCXLOGLO1("Error in testparameters");
+        iLog->Log(_L("Error in testparameters"));
+        result = KErrGeneral;
+        }
+    else
+        {
+        iCaseId = caseId;
+        if(countNumber >= 0)
+            {
+            iCaseId.AppendNum(countNumber);
+            }
+        iIptvTestUtilities->CreateVerifyData(iCaseId, append);
+        }
+
+    VCXLOGLO1("<<<CIptvVodContentApiTest::EnableVerifying");
+    return result;
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentApiTest::Verify();
+// -----------------------------------------------------------------------------
+//
+TInt CIptvVodContentApiTest::Verify( CStifItemParser& aItem )
+    {
+    VCXLOGLO1(">>>CIptvVodContentApiTest::Verify");
+    // Print to UI
+    _LIT( KIptvVodContentApiTest, "IptvVodContentApiTest" );
+    _LIT( KVerify , "In Verify" );
+    TestModuleIf().Printf( 0, KIptvVodContentApiTest, KVerify  );
+    // Print to log file
+    iLog->Log( KVerify  );
+
+    TInt paramCount = 0;
+    TPtrC caseId;
+    TInt error = KErrNone;
+    while(aItem.GetNextString(caseId) == KErrNone)
+        {
+        paramCount++;
+        VCXLOGLO2("Verifying: %S.", &caseId);
+        CIptvTestVerifyData::TVerifyResult verifyResult;
+        error = iIptvTestUtilities->VerifyData(caseId, verifyResult);
+        if(verifyResult != CIptvTestVerifyData::EVerifyOk)
+	    	{
+	    	VCXLOGLO3("Verify failed, VerifyResult: %d, err: %d", verifyResult, error);
+	    	TestModuleIf().Printf( 0, _L("Verify failed"), _L("") );
+	    	error = verifyResult;
+	    	}
+	    else
+	    	{
+			VCXLOGLO1("Data verified succesfully.");
+	    	}
+        }
+
+    if(paramCount == 0)
+        {
+        error = KErrGeneral;
+        VCXLOGLO1("Test case logic error, no CaseId(s) defined for verification..");
+        }
+
+
+    VCXLOGLO1("<<<CIptvVodContentApiTest::Verify");
+    return error;
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentApiTest::EcgCategoryList
+// -----------------------------------------------------------------------------
+//
+TInt CIptvVodContentApiTest::EcgCategoryList( CStifItemParser& aItem )
+    {
+    VCXLOGLO1(">>>CIptvVodContentApiTest::EcgCategoryList");
+    // Print to UI
+    _LIT( KIptvVodContentApiTest, "IptvVodContentApiTest" );
+    _LIT( KEcgCategoryList, "In EcgCategoryList" );
+    TestModuleIf().Printf( 0, KIptvVodContentApiTest, KEcgCategoryList );
+    // Print to log file
+    iLog->Log( KEcgCategoryList );
+
+    //Script parameters
+    //use KIptvVodContentCategoryRootId
+
+    TInt parentCategoryId = 0;
+    TInt testCaseStatus = KErrNone;
+
+    TBool isParametersValid = TRUE;
+
+    if(aItem.GetNextInt(parentCategoryId) != KErrNone)
+        {
+        isParametersValid = FALSE;
+        }
+
+    VCXLOGLO2("parentCategoryId: %d", parentCategoryId);
+
+    if(!isParametersValid)
+        {
+        VCXLOGLO1("Error in testparameters");
+        iLog->Log(_L("Error in testparameters"));
+        VCXLOGLO1("<<<CIptvVodContentApiTest::EcgCategoryList");
+        return KErrGeneral;
+        }
+
+    TUint32 parentCategoryId32 = parentCategoryId;
+    if(parentCategoryId == KIptvTestSearchCategoryId)
+        {
+        parentCategoryId32 = KIptvRssSearchCategoryId;
+        }
+
+    //rv = TestGetEcgCategoryList(TIptvCategoryId aParentCategoryId);
+    testCaseStatus = TestGetEcgCategoryList( parentCategoryId32 );
+
+    VCXLOGLO1("<<<CIptvVodContentApiTest::EcgCategoryList");
+    return testCaseStatus;
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentApiTest::EcgEcgAllList
+// -----------------------------------------------------------------------------
+//
+TInt CIptvVodContentApiTest::EcgEcgAllList( CStifItemParser& aItem )
+    {
+    VCXLOGLO1(">>>CIptvVodContentApiTest::EcgEcgAllList");
+    // Print to UI
+    _LIT( KIptvVodContentApiTest, "IptvVodContentApiTest" );
+    _LIT( KEcgEcgAllList, "In EcgEcgAllList" );
+    TestModuleIf().Printf( 0, KIptvVodContentApiTest, KEcgEcgAllList );
+    // Print to log file
+    iLog->Log( KEcgEcgAllList );
+
+    TInt testCaseStatus = KErrNone;
+    TPtrC searchStringPtr;
+    TInt from = 0;
+    TInt amount = 0;
+
+    TBool isParametersValid = TRUE;
+
+    aItem.SetParsingType(CStifItemParser::EQuoteStyleParsing);
+
+    //Script parameters
+    if(aItem.GetNextString(searchStringPtr)==KErrNone)
+        {
+        //check string content
+        }
+    else
+        {
+        //isParametersValid = FALSE;
+        }
+
+    if(aItem.GetNextInt(from) == KErrNone)
+        {
+        //check validity
+        if(from<0)
+            {
+            isParametersValid = FALSE;
+            }
+        }
+    else
+        {
+        isParametersValid = FALSE;
+        }
+
+    if(aItem.GetNextInt(amount) == KErrNone)
+        {
+        //check validity
+        if(amount<0)
+            {
+            isParametersValid = FALSE;
+            }
+        }
+    else
+        {
+        isParametersValid = FALSE;
+        }
+
+    TBuf<2560> searchString(searchStringPtr);
+    if(!searchString.Compare(_L("\"\"")) )
+        {
+        searchString = _L("");
+        }
+
+    VCXLOGLO2("searchString: %S", &searchString);
+    VCXLOGLO2("from: %d", from);
+    VCXLOGLO2("amount: %d", amount);
+
+    if(!isParametersValid)
+        {
+        VCXLOGLO1("Error in testparameters");
+        iLog->Log(_L("Error in testparameters"));
+        VCXLOGLO1("<<<CIptvVodContentApiTest::EcgCategoryList");
+        return KErrGeneral;
+        }
+
+    //rv = TestGetEcgAllList(TDesC& aSearchString, TUint32 aFrom, TUint32 aAmount);
+    testCaseStatus = TestGetEcgAllList( searchString, from, amount);
+
+    VCXLOGLO1("<<<CIptvVodContentApiTest::EcgEcgAllList");
+    return testCaseStatus;
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentApiTest::CategoryDetails
+// -----------------------------------------------------------------------------
+//
+TInt CIptvVodContentApiTest::CategoryDetails( CStifItemParser& aItem )
+    {
+    VCXLOGLO1(">>>CIptvVodContentApiTest::CategoryDetails");
+    // Print to UI
+    _LIT( KIptvVodContentApiTest, "IptvVodContentApiTest" );
+    _LIT( KCategoryDetails, "In CategoryDetails" );
+    TestModuleIf().Printf( 0, KIptvVodContentApiTest, KCategoryDetails );
+    // Print to log file
+    iLog->Log( KCategoryDetails );
+    TInt testCaseStatus = KErrNone;
+    TBool isParametersValid = TRUE;
+
+    //Script parameters
+    TInt categoryId = 0;
+
+    if(aItem.GetNextInt(categoryId) != KErrNone)
+        {
+        isParametersValid = FALSE;
+        }
+
+    VCXLOGLO2("categoryId: %d", categoryId);
+
+    if(!isParametersValid)
+        {
+        VCXLOGLO1("Error in testparameters");
+        iLog->Log(_L("Error in testparameters"));
+        VCXLOGLO1("<<<CIptvVodContentApiTest::CategoryDetails");
+        return KErrGeneral;
+        }
+
+    TUint32 categoryId32 = categoryId;
+    if(categoryId == KIptvTestSearchCategoryId)
+        {
+        categoryId32 = KIptvRssSearchCategoryId;
+        }
+
+    //testCaseStatus = TestGetEcgCategoryDetails(TIptvCategoryId aCategoryId);
+    testCaseStatus = TestGetEcgCategoryDetails(categoryId32);
+
+    VCXLOGLO1("<<<CIptvVodContentApiTest::CategoryDetails");
+    return testCaseStatus;
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentApiTest::ParentCategory
+// -----------------------------------------------------------------------------
+//
+TInt CIptvVodContentApiTest::ParentCategory( CStifItemParser& aItem )
+    {
+    VCXLOGLO1(">>>CIptvVodContentApiTest::ParentCategory");
+    // Print to UI
+    _LIT( KIptvVodContentApiTest, "IptvVodContentApiTest" );
+    _LIT( KParentCategory, "In ParentCategory" );
+    TestModuleIf().Printf( 0, KIptvVodContentApiTest, KParentCategory );
+    // Print to log file
+    iLog->Log( KParentCategory );
+
+    TInt testCaseStatus = KErrNone;
+    TBool isParametersValid = TRUE;
+
+    //Script parameters
+    TInt categoryId = 0;
+
+    if(aItem.GetNextInt(categoryId) != KErrNone)
+        {
+        isParametersValid = FALSE;
+        }
+
+    if(!isParametersValid)
+        {
+        VCXLOGLO1("Error in testparameters");
+        iLog->Log(_L("Error in testparameters"));
+        VCXLOGLO1("<<<CIptvVodContentApiTest::ParentCategory");
+        return KErrGeneral;
+        }
+
+    TUint32 categoryId32 = categoryId;
+    if(categoryId == KIptvTestSearchCategoryId)
+        {
+        categoryId32 = KIptvRssSearchCategoryId;
+        }
+
+    //rv = TestGetParentCategory(TIptvCategoryId aCategoryId);
+    testCaseStatus = TestGetParentCategory(categoryId32);
+
+    VCXLOGLO1("<<<CIptvVodContentApiTest::ParentCategory");
+    return testCaseStatus;
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentApiTest::ContentDetailsList
+// -----------------------------------------------------------------------------
+//
+TInt CIptvVodContentApiTest::ContentDetailsList( CStifItemParser& aItem )
+    {
+    VCXLOGLO1(">>>CIptvVodContentApiTest::ContentDetailsList");
+    // Print to UI
+    _LIT( KIptvVodContentApiTest, "IptvVodContentApiTest" );
+    _LIT( KContentDetailsList, "In ContentDetailsList" );
+    TestModuleIf().Printf( 0, KIptvVodContentApiTest, KContentDetailsList );
+    // Print to log file
+    iLog->Log( KContentDetailsList );
+
+    TInt testCaseStatus = KErrNone;
+    TBool isParametersValid = TRUE;
+
+    //Script parameters
+    TInt contentId = 0;
+
+    if(aItem.GetNextInt(contentId) == KErrNone)
+        {
+        if(contentId < 0)
+            {
+            isParametersValid = FALSE;
+            }
+        }
+    else
+        {
+        isParametersValid = FALSE;
+        }
+
+    VCXLOGLO2("contentId: %d", contentId);
+
+    if(!isParametersValid)
+        {
+        VCXLOGLO1("Error in testparameters");
+        iLog->Log(_L("Error in testparameters"));
+        VCXLOGLO1("<<<CIptvVodContentApiTest::ContentDetailsList");
+        return KErrGeneral;
+        }
+
+
+    testCaseStatus = TestGetContentDetailsList( contentId );
+
+    VCXLOGLO1("<<<CIptvVodContentApiTest::ContentDetailsList");
+    return testCaseStatus;
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentApiTest::VerifyAllCategoryContentL
+// -----------------------------------------------------------------------------
+//
+TInt CIptvVodContentApiTest::VerifyAllCategoryContentL( CStifItemParser& aItem )
+    {
+    VCXLOGLO1(">>>CIptvVodContentApiTest::VerifyAllCategoryContentL");
+    // Print to UI
+    _LIT( KIptvVodContentApiTest, "IptvVodContentApiTest" );
+    _LIT( KAllCategoryContentL, "In VerifyAllCategoryContentL" );
+    TestModuleIf().Printf( 0, KIptvVodContentApiTest, KAllCategoryContentL );
+    // Print to log file
+    iLog->Log( KAllCategoryContentL );
+
+    TInt testCaseStatus = KErrNone;
+    TBool isParametersValid = ETrue;
+
+    //Script parameters
+    TInt parentCategoryId = 0;
+
+    if(aItem.GetNextInt(parentCategoryId) != KErrNone)
+        {
+        isParametersValid = EFalse;
+        }
+
+    if(!isParametersValid)
+        {
+        VCXLOGLO1("Error in testparameters");
+        iLog->Log(_L("Error in testparameters"));
+        VCXLOGLO1("<<<CIptvVodContentApiTest::VerifyAllCategoryContentL");
+        return KErrGeneral;
+        }
+
+    TUint32 parentCategoryId32 = parentCategoryId;
+    if(parentCategoryId == KIptvTestSearchCategoryId)
+        {
+        parentCategoryId32 = KIptvRssSearchCategoryId;
+        }
+
+    testCaseStatus = TestVerifyAllCategoryContentL( parentCategoryId32 );
+
+    VCXLOGLO1("<<<CIptvVodContentApiTest::VerifyAllCategoryContentL");
+    return testCaseStatus;
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentApiTest::UpdateEcg
+// -----------------------------------------------------------------------------
+//
+TInt CIptvVodContentApiTest::UpdateEcg( CStifItemParser& aItem )
+    {
+    VCXLOGLO1(">>>CIptvVodContentApiTest::UpdateEcg");
+
+    // Print to UI
+    _LIT( KIptvVodContentApiTest, "IptvVodContentApiTest" );
+    _LIT( KUpdateEcg, "In UpdateEcg" );
+    TestModuleIf().Printf( 0, KIptvVodContentApiTest, KUpdateEcg );
+    // Print to log file
+    iLog->Log( KUpdateEcg );
+
+    aItem.SetParsingType(CStifItemParser::EQuoteStyleParsing);
+
+    TInt testCaseStatus = KErrNone;
+    if( aItem.GetNextInt( iRetryCount ) != KErrNone)
+        {
+        iRetryCount = 0;
+        }
+
+    iExpectedThumbnailCount = -1;
+    iThumbnailCount = -1;
+
+    VCXLOGLO1("CIptvVodContentApiTest::UpdateEcg -- starting update");
+    testCaseStatus = TestUpdateEcg();
+
+    VCXLOGLO1("<<<CIptvVodContentApiTest::UpdateEcg");
+    return testCaseStatus;
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentApiTest::SetTestCaseTimeOut
+// -----------------------------------------------------------------------------
+//
+TInt CIptvVodContentApiTest::SetTestCaseTimeOut( CStifItemParser& aItem )
+    {
+    VCXLOGLO1(">>>CIptvVodContentApiTest::SetTestCaseTimeOut");
+
+    // Print to UI
+    _LIT( KIptvVodContentApiTest, "IptvVodContentApiTest" );
+    _LIT( KSetTestCaseTimeOut, "In SetTestCaseTimeOut" );
+    TestModuleIf().Printf( 0, KIptvVodContentApiTest, KSetTestCaseTimeOut );
+    // Print to log file
+    iLog->Log( KSetTestCaseTimeOut );
+
+    TBool isParametersValid = TRUE;
+
+    //Script parameters:
+     TInt timeOutSeconds = 0;
+
+    if(aItem.GetNextInt(timeOutSeconds) == KErrNone)
+        {
+        if(timeOutSeconds < 0)
+            {
+            isParametersValid = FALSE;
+            }
+        }
+    else
+        {
+        isParametersValid = FALSE;
+        }
+
+    if(!isParametersValid)
+        {
+        VCXLOGLO1("Error in testparameters");
+        iLog->Log(_L("Error in testparameters"));
+        VCXLOGLO1("<<<CIptvVodContentApiTest::SetTestCaseTimeOut");
+        return KErrGeneral;
+        }
+    VCXLOGLO2("Timer %d seconds", timeOutSeconds);
+
+    TTimeIntervalMicroSeconds32 interval(timeOutSeconds * 1000 * 1000);
+
+    iIptvTestTimer->After( interval );
+
+    VCXLOGLO1("<<<CIptvVodContentApiTest::SetTestCaseTimeOut");
+    return KErrNone;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentApiTest::DisableThumbnails
+// -----------------------------------------------------------------------------
+//
+TInt CIptvVodContentApiTest::DisableThumbnails( CStifItemParser& /* aItem */ )
+    {
+
+    VCXLOGLO1(">>>CIptvVodContentApiTest::DisableThumbnails");
+    CRepository* cenRep = CRepository::NewL(KIptvCenRepUid);
+    if (cenRep)
+        {
+        CleanupStack::PushL(cenRep);
+        TInt error = cenRep->Set(KIptvCenRepVoDThumbnailsKey, EFalse);
+        if (error != KErrNone)
+            {
+            VCXLOGLO2("Setting cenrep value returned error: %d", error);
+            }
+        CleanupStack::PopAndDestroy(cenRep);
+        }
+    VCXLOGLO1("<<<CIptvVodContentApiTest::DisableThumbnails");
+    return KErrNone;
+}
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentApiTest::EnableThumbnails
+// -----------------------------------------------------------------------------
+//
+TInt CIptvVodContentApiTest::EnableThumbnails( CStifItemParser& /* aItem */ )
+    {
+    VCXLOGLO1(">>>CIptvVodContentApiTest::EnableThumbnails");
+    CRepository* cenRep = CRepository::NewL(KIptvCenRepUid);
+    if (cenRep)
+        {
+        CleanupStack::PushL(cenRep);
+        TInt error = cenRep->Set(KIptvCenRepVoDThumbnailsKey, ETrue);
+        if (error != KErrNone)
+            {
+            VCXLOGLO2("Setting cenrep value returned error: %d", error);
+            }
+        CleanupStack::PopAndDestroy(cenRep);
+        }
+    VCXLOGLO1("<<<CIptvVodContentApiTest::EnableThumbnails");
+    return KErrNone;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentApiTest::Search
+// -----------------------------------------------------------------------------
+//
+TInt CIptvVodContentApiTest::Search( CStifItemParser& aItem )
+    {
+    VCXLOGLO1(">>>CIptvVodContentApiTest::Search");
+
+    // Print to UI
+    _LIT( KIptvVodContentApiTest, "IptvVodContentApiTest" );
+    _LIT( KWhere, "In Search" );
+    TestModuleIf().Printf( 0, KIptvVodContentApiTest, KWhere );
+    // Print to log file
+    iLog->Log( KWhere );
+
+    aItem.SetParsingType(CStifItemParser::EQuoteStyleParsing);
+
+    TPtrC searchStr;
+    TInt opt;
+
+    // Get the first string. This can be search string or an option
+    if(KErrNone != aItem.GetNextString(searchStr))
+        {
+        VCXLOGLO1("Parameter search string/option missing!");
+        VCXLOGLO1("<<<CIptvVodContentApiTest::Search");
+        return KErrArgument;
+        }
+
+    //
+    // It's an option if it's a number
+    //
+    TLex lex(searchStr);
+    if(lex.Val(opt) == KErrNone)
+        {
+        VCXLOGLO2("Checking if %d is a search test option.", opt);
+
+        if(opt == KBadCharacters)
+            {
+            VCXLOGLO1("YES. Searching with bad characters");
+            TBuf<50> tempStr;
+            tempStr.Append(KBadCharacters);
+            iSearchQuery.SetSearchString(tempStr);
+            }
+
+        VCXLOGLO1("NO, continuing with normal search.");
+        }
+    //
+    // It's a search string
+    //
+    VCXLOGLO2("Search: %S", &searchStr);
+    iSearchQuery.SetSearchString(searchStr);
+
+    TInt err = iIptvVodContenClient->Search( iSearchQuery );
+    if(err != KErrNone)
+        {
+        VCXLOGLO2("* FAIL * Search returned an error: %d.", err);
+        }
+
+    VCXLOGLO1("<<<CIptvVodContentApiTest::Search");
+    return err;
+}
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentApiTest::CancelSearch
+// -----------------------------------------------------------------------------
+//
+TInt CIptvVodContentApiTest::CancelSearch( CStifItemParser& /* aItem */ )
+    {
+    VCXLOGLO1(">>>CIptvVodContentApiTest::CancelSearch");
+
+    // Print to UI
+    _LIT( KIptvVodContentApiTest, "IptvVodContentApiTest" );
+    _LIT( KWhere, "In CancelSearch" );
+    TestModuleIf().Printf( 0, KIptvVodContentApiTest, KWhere );
+    // Print to log file
+    iLog->Log( KWhere );
+
+    TInt err = KErrNone;
+    err = iIptvVodContenClient->CancelSearch();
+    if(err != KErrNone)
+        {
+        VCXLOGLO2("* FAIL * CancelSearch returned an error: %d.", err);
+        }
+
+    VCXLOGLO1("<<<CIptvVodContentApiTest::CancelSearch");
+    return err;
+}
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentApiTest::CancelUpdate
+// -----------------------------------------------------------------------------
+//
+TInt CIptvVodContentApiTest::CancelUpdate( CStifItemParser& /* aItem */ )
+    {
+    VCXLOGLO1(">>>CIptvVodContentApiTest::CancelUpdate");
+
+    // Print to UI
+    _LIT( KIptvVodContentApiTest, "IptvVodContentApiTest" );
+    _LIT( KWhere, "In CancelUpdate" );
+    TestModuleIf().Printf( 0, KIptvVodContentApiTest, KWhere );
+    // Print to log file
+    iLog->Log( KWhere );
+
+    iIptvVodContenClient->CancelUpdate();
+
+    VCXLOGLO1("<<<CIptvVodContentApiTest::CancelUpdate");
+    return KErrNone;
+}
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentApiTest::SetLastPosition
+// -----------------------------------------------------------------------------
+//
+TInt CIptvVodContentApiTest::SetLastPosition( CStifItemParser& aItem )
+    {
+    VCXLOGLO1(">>>CIptvVodContentApiTest::SetLastPosition");
+
+    // Print to UI
+    _LIT( KIptvVodContentApiTest, "IptvVodContentApiTest" );
+    _LIT( KWhere, "In SetLastPosition" );
+    TestModuleIf().Printf( 0, KIptvVodContentApiTest, KWhere );
+    // Print to log file
+    iLog->Log( KWhere );
+
+    aItem.SetParsingType(CStifItemParser::EQuoteStyleParsing);
+
+    TInt contentId;
+    TUint32 index;
+    TUint32 position;
+
+    TInt temp;
+
+    if(KErrNone != aItem.GetNextInt(contentId))
+        {
+        VCXLOGLO1("Parameter contentId missing!");
+        VCXLOGLO1("<<<CIptvVodContentApiTest::SetLastPosition");
+        return KErrArgument;
+        }
+
+    if(KErrNone != aItem.GetNextInt(temp))
+        {
+        VCXLOGLO1("Parameter index missing!");
+        VCXLOGLO1("<<<CIptvVodContentApiTest::SetLastPosition");
+        return KErrArgument;
+        }
+    index = temp;
+
+    if(KErrNone != aItem.GetNextInt(temp))
+        {
+        VCXLOGLO1("Parameter position missing!");
+        VCXLOGLO1("<<<CIptvVodContentApiTest::SetLastPosition");
+        return KErrArgument;
+        }
+    position = temp;
+
+    TInt err = KErrNone;
+    TRAPD( err2, err = iIptvVodContenClient->SetLastPositionL( contentId, index, position ) );
+    if(err2 != KErrNone)
+        {
+        VCXLOGLO2("* FAIL * SetLastPosition left with %d.", err);
+        err = err2;
+        }
+    else
+    if(err != KErrNone)
+        {
+        VCXLOGLO2("* FAIL * SetLastPosition returned an error: %d.", err);
+        }
+
+    VCXLOGLO1("<<<CIptvVodContentApiTest::SetLastPosition");
+    return err;
+}
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentApiTest::SetParentalControlAge
+// -----------------------------------------------------------------------------
+//
+TInt CIptvVodContentApiTest::SetParentalControlAge( CStifItemParser& aItem )
+    {
+    VCXLOGLO1(">>>CIptvVodContentApiTest::SetParentalControlAge");
+
+    TInt age;
+    if(KErrNone != aItem.GetNextInt(age))
+    {
+        VCXLOGLO1("Parameter age missing!");
+        VCXLOGLO1("<<<CIptvVodContentApiTest::SetParentalControlAge");
+        return KErrArgument;
+    }
+
+    VCXLOGLO2("Set parental control age to: %d", age);
+    CRepository* cenRep = CRepository::NewL(KIptvCenRepUid);
+
+    if (cenRep)
+        {
+        CleanupStack::PushL(cenRep);
+        TInt error = cenRep->Set(KIptvCenRepParentControlKey, age);
+        if (error != KErrNone)
+            {
+            VCXLOGLO2("Setting cenrep value returned error: %d", error);
+            }
+        CleanupStack::PopAndDestroy(cenRep);
+        }
+    VCXLOGLO1("<<<CIptvVodContentApiTest::SetParentalControlAge");
+    return KErrNone;
+}
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentApiTest::SelectIapL
+// -----------------------------------------------------------------------------
+//
+TInt CIptvVodContentApiTest::SelectIapL( CStifItemParser& aItem )
+    {
+    VCXLOGLO1(">>>CIptvVodContentApiTest::SelectIapL");
+
+    // Print to UI
+    _LIT( KIptvVodContentApiTest, "IptvVodContentApiTest" );
+    _LIT( KSetIap, "In SelectIapL" );
+    TestModuleIf().Printf( 0, KIptvVodContentApiTest, KSetIap );
+    // Print to log file
+    iLog->Log( KSetIap );
+
+    TPtrC iAPName;
+    TUint32 iapId = 0;
+    TInt rv = KErrNone;
+
+    aItem.SetParsingType(CStifItemParser::EQuoteStyleParsing);
+
+    if(aItem.GetNextString(iAPName) != KErrNone)
+        {
+        VCXLOGLO1("Can't read iap name from cfg file");
+        VCXLOGLO1("<<<CIptvVodContentApiTest::SelectIapL");
+        return KErrArgument;
+        }
+
+    if(iIptvTestUtilities->GetIapIdL(iAPName, iapId) == FALSE)
+        {
+        VCXLOGLO2("Can't find iap, name: %S. Using invalid IAP id: 1000", &iAPName);
+        iapId = 1000;
+        }
+    else
+        {
+        VCXLOGLO3("Found iap, name: %S, id = %d", &iAPName,iapId);
+        }
+
+    rv = SetIap(iapId);
+
+    VCXLOGLO1("<<<CIptvVodContentApiTest::SelectIapL");
+    return rv;
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentApiTest::GetUpdateTimeL
+// -----------------------------------------------------------------------------
+//
+TInt CIptvVodContentApiTest::GetUpdateTimeL( CStifItemParser& aItem )
+    {
+    VCXLOGLO1(">>>CIptvVodContentApiTest::GetUpdateTimeL");
+
+    // Print to UI
+    _LIT( KIptvVodContentApiTest, "IptvVodContentApiTest" );
+    _LIT( KGetUpdateTime, "In GetUpdateTimeL" );
+    TestModuleIf().Printf( 0, KIptvVodContentApiTest, KGetUpdateTime );
+    // Print to log file
+    iLog->Log( KGetUpdateTime );
+
+    TInt rv = KErrNone;
+
+    TInt maxMinutes = -1;
+    aItem.GetNextInt(maxMinutes);
+
+    TTime updateTime;
+
+    rv = TestGetUpdateTimeL(updateTime);
+
+    _LIT(KDateString,"%D%M%Y%/0%1%/1%2%/2%3%/3");
+    _LIT(KTimeString,"%-B%:0%H%:1%T%:2%S%.%*C2%:3%-B");
+    TBuf<30> dateString;
+    TBuf<30> timeString;
+
+    updateTime.FormatL(dateString, KDateString);
+    updateTime.FormatL(timeString, KTimeString);    ;
+
+    if(rv == KErrNone)
+        {
+        VCXLOGLO2("UpdateTime from server - date: %S", &dateString);
+        VCXLOGLO2("UpdateTime from server - time: %S", &timeString);
+
+       if(maxMinutes >= 0)
+            {
+            TTime currentTime;
+            TTimeIntervalMinutes minutes;
+
+            currentTime.UniversalTime();
+            currentTime.MinutesFrom(updateTime, minutes);
+
+            if(minutes.Int() > maxMinutes)
+                {
+                VCXLOGLO3("Time to last ECG update is more than specified maximum: %d. Minutes to last update: %d", maxMinutes, minutes.Int() );
+                currentTime.FormatL(dateString, KDateString);
+                currentTime.FormatL(timeString, KTimeString);
+                VCXLOGLO2("Current time - date: %S", &dateString);
+                VCXLOGLO2("Current time - time: %S", &timeString);
+                rv = KErrGeneral;
+                }
+            }
+        }
+    else
+        {
+        VCXLOGLO2("GetUpdateTimeL returned an error: %d", rv);
+        }
+
+    VCXLOGLO1("<<<CIptvVodContentApiTest::SelectIapL");
+    return rv;
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentApiTest::UpdateAvailableL
+// -----------------------------------------------------------------------------
+//
+TInt CIptvVodContentApiTest::UpdateAvailableL( CStifItemParser& aItem )
+    {
+    VCXLOGLO1(">>>CIptvVodContentApiTest::UpdateAvailableL");
+
+    // Print to UI
+    _LIT( KIptvVodContentApiTest, "IptvVodContentApiTest" );
+    _LIT( KWhere, "In UpdateAvailableL" );
+    TestModuleIf().Printf( 0, KIptvVodContentApiTest, KWhere );
+    // Print to log file
+    iLog->Log( KWhere );
+
+    TInt intArg;
+    User::LeaveIfError( aItem.GetNextInt( intArg ) );
+
+    TBool expectedAvailability = static_cast<TBool>( intArg );
+
+    TBool availability( EFalse );
+
+    TInt ret( KErrNone );
+    TRAPD(error, ret = iIptvVodContenClient->UpdateAvailableL( availability ));
+
+    if( ret != KErrNone || error != KErrNone )
+        {
+        VCXLOGLO3("CIptvVodContentApiTest:: UpdateAvailableL left or returned error: returned: %d, leave: %d", ret, error);
+        if( error == KErrNone )
+            {
+            error = ret;
+            }
+        }
+    else if( expectedAvailability != availability )
+        {
+        VCXLOGLO2("CIptvVodContentApiTest:: UpdateAvailableL availability: %d, it's not what was expected!", availability);
+        error = KErrCorrupt;
+        }
+
+    VCXLOGLO1("<<<CIptvVodContentApiTest::UpdateAvailableL");
+    return error;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentApiTest::CategoryCountL
+// -----------------------------------------------------------------------------
+//
+TInt CIptvVodContentApiTest::CategoryCountL( CStifItemParser& aItem )
+    {
+    VCXLOGLO1(">>>CIptvVodContentApiTest::CategoryCountL");
+
+    // Print to UI
+    _LIT( KIptvVodContentApiTest, "IptvVodContentApiTest" );
+    _LIT( KWhere, "In CategoryCountL" );
+    TestModuleIf().Printf( 0, KIptvVodContentApiTest, KWhere );
+    // Print to log file
+    iLog->Log( KWhere );
+
+    TInt expectedCount;
+    User::LeaveIfError( aItem.GetNextInt( expectedCount ) );
+
+    TInt error = TestCategoryCountL( expectedCount );
+    
+    VCXLOGLO1("<<<CIptvVodContentApiTest::CategoryCountL");
+    return error;
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentApiTest::ContentCountL
+// -----------------------------------------------------------------------------
+//
+TInt CIptvVodContentApiTest::ContentCountL( CStifItemParser& aItem )
+    {
+    VCXLOGLO1(">>>CIptvVodContentApiTest::ContentCountL");
+
+    // Print to UI
+    _LIT( KIptvVodContentApiTest, "IptvVodContentApiTest" );
+    _LIT( KWhere, "In CategoryCountL" );
+    TestModuleIf().Printf( 0, KIptvVodContentApiTest, KWhere );
+    // Print to log file
+    iLog->Log( KWhere );
+
+    TInt expectedCount;
+    User::LeaveIfError( aItem.GetNextInt( expectedCount ) );
+
+    TInt error = TestContentCountL( expectedCount );
+    
+    VCXLOGLO1("<<<CIptvVodContentApiTest::ContentCountL");
+    return error;
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentApiTest::SetSpecialAction
+// -----------------------------------------------------------------------------
+//
+TInt CIptvVodContentApiTest::SetSpecialAction( CStifItemParser& aItem )
+    {
+    VCXLOGLO1(">>>CIptvVodContentApiTest::SetSpecialAction");
+
+    // Print to UI
+    _LIT( KIptvVodContentApiTest, "IptvVodContentApiTest" );
+    _LIT( KSetSpecialAction, "In SetSpecialAction" );
+    TestModuleIf().Printf( 0, KIptvVodContentApiTest, KSetSpecialAction );
+    // Print to log file
+    iLog->Log( KSetSpecialAction );
+
+    TInt action(-1);
+
+    aItem.GetNextInt(action);
+
+    if(action < 0)
+        {
+        VCXLOGLO1("Incorrect parameter.");
+        VCXLOGLO1("<<<CIptvVodContentApiTest::SetSpecialAction");
+        return KErrNone;
+        }
+
+    iSpecialAction = static_cast<TIptvVodContentApiTestSpecialAction>(action);
+
+    VCXLOGLO2("Action: %d", action);
+
+    VCXLOGLO1("<<<CIptvVodContentApiTest::SetSpecialAction");
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentApiTest::SetMsgWhichToSignal
+// -----------------------------------------------------------------------------
+//
+TInt CIptvVodContentApiTest::SetMsgWhichToSignal( CStifItemParser& aItem )
+    {
+    VCXLOGLO1(">>>CIptvVodContentApiTest::SetMsgWhichToSignal");
+
+    if(aItem.GetNextInt(iMsgWhichToSignal) != KErrNone)
+        {
+        VCXLOGLO1("* ERROR * Argument is wrong.");
+        VCXLOGLO1("<<<CIptvVodContentApiTest::SetMsgWhichToSignal");
+        return KErrArgument;
+        }
+
+    VCXLOGLO2("Will signal for %d msg from VOD.", iMsgWhichToSignal);
+
+    VCXLOGLO1("<<<CIptvVodContentApiTest::SetMsgWhichToSignal");
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentApiTest::IgnoreMsg
+// -----------------------------------------------------------------------------
+//
+TInt CIptvVodContentApiTest::IgnoreMsg( CStifItemParser& aItem )
+    {
+    VCXLOGLO1(">>>CIptvVodContentApiTest::IgnoreMsg");
+
+    if(aItem.GetNextInt(iIgnoreMsg) != KErrNone)
+        {
+        VCXLOGLO1("* ERROR * Argument is wrong.");
+        VCXLOGLO1("<<<CIptvVodContentApiTest::IgnoreMsg");
+        return KErrArgument;
+        }
+
+    VCXLOGLO2("Will ignore next %d msg from VOD.", iIgnoreMsg);
+
+    VCXLOGLO1("<<<CIptvVodContentApiTest::IgnoreMsg");
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentApiTest::Destroy
+// -----------------------------------------------------------------------------
+//
+TInt CIptvVodContentApiTest::Destroy( CStifItemParser& /* aItem */ )
+    {
+    VCXLOGLO1(">>>CIptvVodContentApiTest::Destroy");
+    // Print to UI
+    _LIT( KIptvVodContentApiTest, "IptvVodContentApiTest" );
+    _LIT( KDestroy, "In Destroy" );
+    TestModuleIf().Printf( 0, KIptvVodContentApiTest, KDestroy );
+    // Print to log file
+    iLog->Log( KDestroy );
+
+    //Script parameters:
+    //None
+
+    TInt testCaseStatus = KErrNone;
+
+    DeAllocateResources();
+
+    VCXLOGLO1("<<<CIptvVodContentApiTest::Destroy");
+    return testCaseStatus;
+    }
+
+// ============================= CALLBACK FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentApiTest::EcgCategoryListUpdated
+// -----------------------------------------------------------------------------
+//
+void CIptvVodContentApiTest::HandleEpgManagerMsgL(TInt aMsg, TInt aInfo, TIptvServiceId aServiceId)
+{
+    VCXLOGLO1(">>>CIptvVodContentApiTest::HandleEpgManagerMsgL");
+
+    VCXLOGLO2("aMsg = %d", aMsg);
+    VCXLOGLO2("aInfo = %d", aInfo);
+    VCXLOGLO2("aServiceId = %d", aServiceId);
+
+    TInt signalValue = KIptvTestNoSignal;
+
+    switch(aMsg)
+        {
+
+        // 137, aInfo is 0
+        case KIptvVodUpdateNotStarted:
+            {
+            VCXLOGLO1("Message: KIptvVodUpdateNotStarted");
+            iIptvTestEcgUpdateInfo->WriteLogL(_L("Message: KIptvVodUpdateNotStarted"));
+
+            if(iSpecialAction == EIgnoreUpdateNotStarted)
+                {
+                VCXLOGLO1("Ignoring, special action set.");
+                iSpecialAction = ENone;
+                break;
+                }
+
+            iIptvTestEcgUpdateInfo->EcgUpdateStop(aServiceId, aMsg, aInfo);
+
+            signalValue = KIptvVodUpdateNotStarted;
+            }
+            break;
+
+        // 139, aInfo is 0
+        case KIptvErrorVodNoIap:
+            {
+            VCXLOGLO1("Message: KIptvErrorVodNoIap");
+            iIptvTestEcgUpdateInfo->WriteLogL(_L("Message: KIptvErrorVodNoIap"));
+            signalValue = aMsg;
+            }
+            break;
+
+        //// 136,  aInfo is 0
+        case KIptvVodUpdateStarted:
+            {
+            VCXLOGLO1("Message: KIptvVodUpdateStarted");
+            iIptvTestEcgUpdateInfo->WriteLogL(_L("Message: KIptvVodUpdateStarted"));
+            //start 10 min timer to wait download
+            iIptvTestTimer->After(iTimeoutMinutes*60*1000000);
+
+            iExpectedThumbnailCount = -1;
+            iThumbnailCount = -1;
+
+            CIptvService* service = iIptvTestUtilities->GetServiceFromDb(aServiceId);
+            if(service)
+                {
+                CleanupStack::PushL(service);
+                iLastUpdateTimeFromService = service->GetEpgUpdateTimeL();
+                CleanupStack::PopAndDestroy(service);
+                service = NULL;
+                }
+            else
+                {
+                iIptvTestEcgUpdateInfo->WriteLogL(_L("Error, could not get service."));
+                }
+            }
+
+            break;
+
+        // 146, aInfo is 0
+        case KIptvContentUpdateCompleted:
+            {
+            VCXLOGLO1("Message: KIptvContentUpdateCompleted");
+            iIptvTestEcgUpdateInfo->WriteLogL(_L("Message: KIptvContentUpdateCompleted"));
+            }
+            break;
+
+        // 143, parameter is service id
+        case KIptvServiceThumbnailDownloaded:
+            {
+            VCXLOGLO1("Message: KIptvServiceThumbnailDownloaded");
+            iIptvTestEcgUpdateInfo->WriteLogL(_L("Message: KIptvServiceThumbnailDownloaded"));
+            iThumbnailCount++;
+            }
+            break;
+
+        // 144, aInfo parameter is content id
+        case KIptvContentThumbnailDownloaded:
+            {
+            VCXLOGLO1("Message: KIptvContentThumbnailDownloaded");
+            iIptvTestEcgUpdateInfo->WriteLogL(_L("Message: KIptvContentThumbnailDownloaded"));
+            iThumbnailCount++;
+            }
+            break;
+
+        // 133, aInfo: KIptvRssParserError (145) or TIptvDlError (defined in this file)
+        case KIptvErrorEpgUpdateFailed:
+            {
+            VCXLOGLO1("Message: KIptvErrorEpgUpdateFailed");
+            iIptvTestEcgUpdateInfo->WriteLogL(_L("Message: KIptvErrorEpgUpdateFailed"));
+            iIptvTestEcgUpdateInfo->EcgUpdateStop(aServiceId, aMsg, aInfo);
+
+            if(iRetryCount > 0)
+                {
+                iRetryCount--;
+                VCXLOGLO2("CIptvVodContentApiTest: Retrying update! Retries left: %d", iRetryCount );
+                iIptvTestEcgUpdateInfo->WriteLogL(_L("Retrying update!"));
+                User::LeaveIfError( TestUpdateEcg() );
+                break;
+                }
+
+            iEcgUpdateSuccesfull = EFalse;
+
+            if(EIptvDlNoError != aInfo)
+                {
+                signalValue = aInfo;
+                }
+            else
+                {
+                // Be sure that error is handled if aInfo == 0
+                signalValue = aMsg;
+                }
+            }
+            break;
+
+        // 134, aInfo is 0
+        case KIptvErrorEpgUpdateSuccessed:
+            {
+            VCXLOGLO1("Message: KIptvErrorEpgUpdateSuccessed");
+            iIptvTestEcgUpdateInfo->WriteLogL(_L("Thubmnails downloaded: %d"), iThumbnailCount);
+            iIptvTestEcgUpdateInfo->WriteLogL(_L("Message: KIptvErrorEpgUpdateSuccessed"));
+
+            CIptvService* service = iIptvTestUtilities->GetServiceFromDb(aServiceId);
+            if(service)
+                {
+                CleanupStack::PushL(service);
+
+                TTime time = service->GetEpgUpdateTimeL();
+
+                _LIT(KDateString,"%D%M%Y%/0%1%/1%2%/2%3%/3");
+                _LIT(KTimeString,"%-B%:0%H%:1%T%:2%S%.%*C2%:3%-B");
+                TBuf<30> timeString;
+
+                time.FormatL(timeString, KDateString);
+                time.FormatL(timeString, KTimeString);
+                VCXLOGLO2("Update time: %S", &timeString);
+
+                time.UniversalTime();
+                time.FormatL(timeString, KDateString);
+                time.FormatL(timeString, KTimeString);
+                VCXLOGLO2("Time now: %S", &timeString);
+
+                if(iLastUpdateTimeFromService == time)
+                    {
+                    // last update time was not updated, return error
+                    signalValue = KErrGeneral;
+                    }
+                else
+                    {
+                    signalValue = KErrNone;
+                    }
+                CleanupStack::PopAndDestroy(service);
+                service = NULL;
+                }
+            else
+                {
+                iIptvTestEcgUpdateInfo->WriteLogL(_L("Error, could not get service."));
+                }
+
+            iEcgUpdateSuccesfull = ETrue;
+            iIptvTestEcgUpdateInfo->EcgUpdateStop(aServiceId, aMsg, aInfo);
+            }
+            break;
+
+        // 135, EPG manager messages sent to client (LIVE TV ONLY)
+        case KIptvErrorFailedToLoadPlugin:
+            {
+            VCXLOGLO1("Message: KIptvErrorFailedToLoadPlugin");
+            iIptvTestEcgUpdateInfo->WriteLogL(_L("Message: KIptvErrorFailedToLoadPlugin"));
+            }
+            break;
+
+        // 141, // aInfo is thumbnail count
+        case KIptvThumbnailCount:
+            {
+            VCXLOGLO2("Message: KIptvThumbnailCount: %d", aInfo);
+            iIptvTestEcgUpdateInfo->WriteLogL(_L("Message: KIptvThumbnailCount: %d"), aInfo);
+
+            iExpectedThumbnailCount = aInfo;
+            iThumbnailCount = 0;
+            }
+            break;
+
+        case KIptvErrorRssSearchStarted: // 170
+            {
+            VCXLOGLO1("Message: KIptvErrorRssSearchStarted");
+            iIptvTestEcgUpdateInfo->WriteLogL(_L("Message: KIptvErrorRssSearchStarted"));
+            //start 10 min timer to wait download
+            iIptvTestTimer->After(iTimeoutMinutes*60*1000000);
+            }
+            break;
+
+        case KIptvErrorRssSearchFailed: // 171
+            {
+            VCXLOGLO1("Message: KIptvErrorRssSearchFailed");
+            iIptvTestEcgUpdateInfo->WriteLogL(_L("Message: KIptvErrorRssSearchFailed"));
+
+            if(iRetryCount > 0)
+                {
+                iRetryCount--;
+                VCXLOGLO2("CIptvVodContentApiTest: Retrying search! Retries left: %d", iRetryCount );
+                iIptvTestEcgUpdateInfo->WriteLogL(_L("Retrying search!"));
+
+                TInt err = iIptvVodContenClient->Search( iSearchQuery );
+                if(err != KErrNone)
+                    {
+                    VCXLOGLO2("* FAIL * Search returned an error: %d.", err);
+                    User::Leave(err);
+                    }
+
+                break;
+                }
+
+            iIptvTestEcgUpdateInfo->EcgUpdateStop(aServiceId, aMsg, aInfo);
+
+            iEcgUpdateSuccesfull = EFalse;
+
+            if(EIptvDlNoError != aInfo)
+                {
+                signalValue = aInfo;
+                }
+            else
+                {
+                //be sure that error is handled if aInfo == 0
+                signalValue = aMsg;
+                }
+            }
+            break;
+
+        case KIptvErrorRssSearchSucceed: // 172
+            {
+            VCXLOGLO1("Message: KIptvErrorRssSearchSucceed");
+            iIptvTestEcgUpdateInfo->WriteLogL(_L("Message: KIptvErrorRssSearchSucceed"));
+
+            iEcgUpdateSuccesfull = ETrue;
+            iIptvTestEcgUpdateInfo->EcgUpdateStop(aServiceId, aMsg, aInfo);
+            signalValue = KErrNone;
+            }
+            break;
+
+        case KIptvErrorRssSearchNoIap: // 173
+            {
+            VCXLOGLO1("Message: KIptvErrorRssSearchNoIap");
+            iIptvTestEcgUpdateInfo->WriteLogL(_L("KIptvErrorRssSearchNoIap"));
+            signalValue = aMsg;
+            }
+            break;
+
+        case KIptvRssSearchContentUpdateCompleted:
+            {
+            VCXLOGLO1("Message: KIptvRssSearchContentUpdateCompleted");
+            iIptvTestEcgUpdateInfo->WriteLogL(_L("Message: KIptvRssSearchContentUpdateCompleted"));
+            }
+            break;
+            
+        case KIptvRssSearchThumbnailCount:
+            {
+            VCXLOGLO2("Message: KIptvThumbnailCount: %d", aInfo);
+            iIptvTestEcgUpdateInfo->WriteLogL(_L("Message: KIptvThumbnailCount: %d"), aInfo);
+
+            iExpectedThumbnailCount = aInfo;
+            iThumbnailCount = 0;
+            }
+            break;
+
+        case KIptvRssSearchContentThumbnailDownloaded:
+            {
+            VCXLOGLO2("Message: KIptvRssSearchContentThumbnailDownloaded, id %d", aInfo);
+            iIptvTestEcgUpdateInfo->WriteLogL(_L("Message: KIptvRssSearchContentThumbnailDownloaded, id %d"), aInfo);
+
+            ++iThumbnailCount;
+            }
+            break;
+            
+#ifdef __S60_50__
+        case KIptvErrorEpgUpdateStopped:
+            {
+            // Do nothing right now, test script is signaled in other cases.
+            VCXLOGLO1("Message: KIptvErrorEpgUpdateStopped");
+            iIptvTestEcgUpdateInfo->WriteLogL(_L("KIptvErrorEpgUpdateStopped"));
+            }
+            break;
+#endif
+
+        default:
+            {
+            VCXLOGLO1("Unknown message, panicing");
+            iIptvTestEcgUpdateInfo->WriteLogL(_L("Message: UNKNOWN: aMsg: %d, aInfo: %d, aServiceId: %d"), aMsg, aInfo, aServiceId);
+            User::Panic(_L("CIptvVodContentApiTest: Unknown msg"), KErrGeneral);
+            }
+            break;
+
+        } // Switch
+
+    // Is there message which will be signaled to the script?
+    if(signalValue != KIptvTestNoSignal)
+        {
+        // Is the message to be ignored
+        if(aMsg != iIgnoreMsg)
+            {
+            AsyncCompleted(signalValue);
+            }
+        iIgnoreMsg = KIptvTestNoSignal;
+        }
+    // Has script set msg which must be signaled?
+    else if(iMsgWhichToSignal != -1 && iMsgWhichToSignal == aMsg)
+        {
+        AsyncCompleted(aMsg);
+        iMsgWhichToSignal = -1;
+        }
+
+    VCXLOGLO1("<<<CIptvVodContentApiTest::HandleEpgManagerMsgL");
+}
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentApiTest::TimerComplete
+// -----------------------------------------------------------------------------
+//
+void CIptvVodContentApiTest::TimerComplete(TInt aTimerId, TInt aError)
+    {
+    VCXLOGLO1(">>>CIptvVodContentApiTest::TimerComplete");
+    VCXLOGLO2("aTimerId = %d",aTimerId);
+    VCXLOGLO2("aError = %d",aError);
+
+    if(aError == KErrNone)
+        {
+        iLog->Log(_L("*** Fail *** TimeOut!!!"));
+        aError = KErrTimedOut;
+        iIptvTestEcgUpdateInfo->EcgUpdateStop(iServiceId, aError, 0);
+        }
+    VCXLOGLO2("aError = %d",aError);
+    AsyncCompleted(aError);
+    VCXLOGLO1("<<<CIptvVodContentApiTest::TimerComplete");
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentApiTest::AsyncCompleted
+// -----------------------------------------------------------------------------
+//
+void CIptvVodContentApiTest::AsyncCompleted(TInt aError)
+    {
+    VCXLOGLO1(">>>CIptvVodContentApiTest::AsyncCompleted");
+    VCXLOGLO2("aError = %d", aError);
+
+    iIptvTestTimer->Cancel();
+
+    if(iSpecialAction == EUpdateSucceedsAlways)
+        {
+        VCXLOGLO1("Signaling KErrNone, special action EUpdateSucceedsAlways set.");
+        aError = KErrNone;
+        }
+
+    Signal(aError);
+    VCXLOGLO1("<<<CIptvVodContentApiTest::AsyncCompleted");
+    }
+
+// ========================== OTHER EXPORTED FUNCTIONS =========================
+
+//  End of File