videofeeds/server/tsrc/VCXVodContentApiTest/src/VCXVodContentApiTestLogic.cpp
changeset 0 96612d01cf9f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videofeeds/server/tsrc/VCXVodContentApiTest/src/VCXVodContentApiTestLogic.cpp	Mon Jan 18 20:21:12 2010 +0200
@@ -0,0 +1,1245 @@
+/*
+* 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 "VCXVodContentApiTest.h"
+#include "VCXTestLog.h"
+#include "CIptvTestTimer.h"
+#include "CIptvMyVideosGlobalFileId.h"
+#include "CIptvTestUtilities.h"
+#include "CIptvTestEcgUpdateInfo.h"
+#include "CIptvMediaContent.h"
+
+#include <mmf/common/mmfcontrollerpluginresolver.h>
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentApiTest::TestGetEcgList
+// -----------------------------------------------------------------------------
+//
+TInt CIptvVodContentApiTest::TestGetEcgList(TIptvCategoryId aCategoryId, TDesC& aSearchString, TUint32 aFrom, TUint32 aAmount)
+    {
+    VCXLOGLO1(">>>CIptvVodContentApiTest::TestGetEcgList");
+    TInt testCaseStatus(KErrNone);
+
+    if(!iIptvVodContenClient)
+        {
+        VCXLOGLO1("No iIptvVodContenClient instance, error in testlogic");
+        iLog->Log(_L("*** FAIL *** No iIptvVodContenClient instance, error in testlogic"));
+        VCXLOGLO1("<<<CIptvVodContentApiTest::TestGetEcgList");
+        return KErrGeneral;
+        }
+
+    RPointerArray<CIptvVodContentContentBriefDetails> data;
+    CleanupResetAndDestroyPushL(data);
+    TUint32 totalAmount = 0;
+
+    TRAPD(err, testCaseStatus = iIptvVodContenClient->GetEcgListL(aCategoryId, aSearchString, aFrom, aAmount, totalAmount, data));
+    if(err != KErrNone)
+        {
+        VCXLOGLO2("* FAIL * GetEcgListL caused a leave: %d.", err);
+        testCaseStatus = err;
+        }
+    else
+    if(testCaseStatus != KErrNone)
+        {
+        VCXLOGLO2("* FAIL * GetEcgListL returned an error: %d.", testCaseStatus);
+        }
+    else
+        {
+        VCXLOGLO2("totalAmount = %d", totalAmount);
+
+        for (TInt i = 0; i < data.Count(); i++)
+            {
+             PrintVodContentBriefDetails(*(data[i]));
+            }
+        }
+
+    CleanupStack::PopAndDestroy(&data);
+
+    VCXLOGLO1("<<<CIptvVodContentApiTest::TestGetEcgList");
+    return testCaseStatus;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentApiTest::TestGetEcgCategoryList
+// -----------------------------------------------------------------------------
+//
+TInt CIptvVodContentApiTest::TestGetEcgCategoryList(TIptvCategoryId aParentCategoryId)
+    {
+    VCXLOGLO1(">>>CIptvVodContentApiTest::TestGetEcgCategoryList");
+    TInt testCaseStatus(KErrNone);
+
+    if(!iIptvVodContenClient)
+        {
+        VCXLOGLO1("No iIptvVodContenClient instance, error in testlogic");
+        iLog->Log(_L("*** FAIL *** No iIptvVodContenClient instance, error in testlogic"));
+        VCXLOGLO1("<<<CIptvVodContentApiTest::TestGetEcgList");
+        return KErrGeneral;
+        }
+
+    RPointerArray<CIptvVodContentCategoryBriefDetails> data;
+    CleanupResetAndDestroyPushL(data);
+
+    TRAPD(err, testCaseStatus = iIptvVodContenClient->GetEcgCategoryListL(aParentCategoryId, data));
+    if(err != KErrNone)
+        {
+        VCXLOGLO2("* FAIL * GetEcgCategoryListL caused a leave: %d.", err);
+        testCaseStatus = err;
+        }
+    else
+    if(testCaseStatus != KErrNone)
+        {
+        VCXLOGLO2("* FAIL * GetEcgCategoryListL returned an error: %d.", testCaseStatus);
+        }
+    else
+        {
+        TInt count = data.Count();
+
+        for (TInt i = 0; i < count; i++)
+            {
+            PrintVodContentCategoryBriefDetails(*(data[i]));
+            }
+        }
+
+    CleanupStack::PopAndDestroy(&data);
+
+    VCXLOGLO1("<<<CIptvVodContentApiTest::TestGetEcgCategoryList");
+    return testCaseStatus;
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentApiTest::TestGetEcgCategoryDetails
+// -----------------------------------------------------------------------------
+//
+TInt CIptvVodContentApiTest::TestGetEcgCategoryDetails(TIptvCategoryId aCategoryId)
+    {
+    VCXLOGLO1(">>>CIptvVodContentApiTest::TestGetCategoryDetails");
+    TInt testCaseStatus(KErrNone);
+
+    if(!iIptvVodContenClient)
+        {
+        VCXLOGLO1("No iIptvVodContenClient instance, error in testlogic");
+        iLog->Log(_L("*** FAIL *** No iIptvVodContenClient instance, error in testlogic"));
+        VCXLOGLO1("<<<CIptvVodContentApiTest::TestGetEcgList");
+        return KErrGeneral;
+        }
+
+    CIptvVodContentCategoryBriefDetails* data = CIptvVodContentCategoryBriefDetails::NewL();
+    CleanupStack::PushL(data);
+
+    // GetCategoryDetailsL is not supported for search category
+    if( aCategoryId != KIptvRssSearchCategoryId )
+        {
+        TRAPD(err, testCaseStatus = iIptvVodContenClient->GetCategoryDetailsL(aCategoryId, *data));
+        if(err != KErrNone)
+            {
+            VCXLOGLO2("* FAIL * GetCategoryDetailsL caused a leave: %d.", err);
+            testCaseStatus = err;
+            }
+        else
+        if(testCaseStatus != KErrNone)
+            {
+            VCXLOGLO2("* FAIL * GetCategoryDetailsL returned an error: %d.", testCaseStatus);
+            }
+        else
+            {
+            PrintVodContentCategoryBriefDetails(*data);
+            }
+        }
+    CleanupStack::PopAndDestroy(data);
+
+    VCXLOGLO1("<<<CIptvVodContentApiTest::TestGetCategoryDetails");
+    return testCaseStatus;
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentApiTest::TestGetEcgAllList
+// -----------------------------------------------------------------------------
+//
+TInt CIptvVodContentApiTest::TestGetEcgAllList(TDesC& aSearchString, TUint32 aFrom, TUint32 aAmount)
+    {
+    VCXLOGLO1(">>>CIptvVodContentApiTest::TestGetEcgAllList");
+    TInt testCaseStatus(KErrNone);
+
+    if(!iIptvVodContenClient)
+        {
+        VCXLOGLO1("No iIptvVodContenClient instance, error in testlogic");
+        iLog->Log(_L("*** FAIL *** No iIptvVodContenClient instance, error in testlogic"));
+        VCXLOGLO1("<<<CIptvVodContentApiTest::TestGetEcgList");
+        return KErrGeneral;
+        }
+
+    RPointerArray<CIptvVodContentContentBriefDetails> data;
+    CleanupResetAndDestroyPushL(data);
+
+    TUint32 total=0;
+
+    TRAPD(err, testCaseStatus = iIptvVodContenClient->GetEcgAllListL(aSearchString, aFrom, aAmount, total, data));
+    if(err != KErrNone)
+        {
+        VCXLOGLO2("* FAIL * GetEcgAllListL caused a leave: %d.", err);
+        testCaseStatus = err;
+        }
+    else
+    if(testCaseStatus != KErrNone)
+        {
+        VCXLOGLO2("* FAIL * GetEcgAllListL returned an error: %d.", testCaseStatus);
+        }
+    else
+        {
+        VCXLOGLO2("totalAmount = %d", total);
+
+        for (TInt i = 0; i < data.Count(); i++)
+            {
+            if(!(data[i]))
+                {
+                VCXLOGLO2("data at %d is NULL!", i);
+                testCaseStatus = KErrCorrupt;
+                }
+            else
+                {
+                PrintVodContentBriefDetails(*(data[i]));
+                }
+            }
+        }
+
+    CleanupStack::PopAndDestroy(&data);
+
+    VCXLOGLO1("<<<CIptvVodContentApiTest::TestGetEcgAllList");
+    return testCaseStatus;
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentApiTest::TestGetParentCategory
+// -----------------------------------------------------------------------------
+//
+TInt CIptvVodContentApiTest::TestGetParentCategory(TIptvCategoryId aParentCategoryId)
+    {
+    VCXLOGLO2(">>>CIptvVodContentApiTest::TestGetParentCategory: aParentCategoryId = %d",aParentCategoryId );
+    TInt testCaseStatus(KErrNone);
+    TInt rv = KErrNone;
+    TIptvCategoryId parent = 0;
+
+    if(!iIptvVodContenClient)
+        {
+        VCXLOGLO1("No iIptvVodContenClient instance, error in testlogic");
+        iLog->Log(_L("*** FAIL *** No iIptvVodContenClient instance, error in testlogic"));
+        VCXLOGLO1("<<<CIptvVodContentApiTest::TestGetEcgList");
+        return KErrGeneral;
+        }
+
+    RPointerArray<CIptvVodContentCategoryBriefDetails> data;
+    CleanupResetAndDestroyPushL(data);
+
+    VCXLOGLO2("Getting category list for: %d.", aParentCategoryId);
+    TRAPD(err, testCaseStatus = iIptvVodContenClient->GetEcgCategoryListL(aParentCategoryId, data));
+    if(err != KErrNone)
+        {
+        VCXLOGLO2("* FAIL * GetEcgCategoryListL caused a leave: %d.", err);
+        testCaseStatus = err;
+        CleanupStack::PopAndDestroy(&data);
+        VCXLOGLO1("<<<CIptvVodContentApiTest::TestGetParentCategory");
+        return err;
+        }
+
+    if(testCaseStatus != KErrNone)
+        {
+        VCXLOGLO2("* FAIL * GetEcgCategoryListL returned an error: %d.", testCaseStatus);
+        CleanupStack::PopAndDestroy(&data);
+        VCXLOGLO1("<<<CIptvVodContentApiTest::TestGetParentCategory");
+        return err;
+        }
+
+    TInt count = data.Count();
+
+    for (TInt i = 0; i < count; i++)
+        {
+        VCXLOGLO2("categoryid = %d", data[i]->iCategoryId);
+        TRAP(err, rv = iIptvVodContenClient->GetParentCategoryL(data[i]->iCategoryId, parent));
+        VCXLOGLO2("Parent = %d", parent);
+
+        if(err != KErrNone)
+            {
+            VCXLOGLO2("* FAIL * GetParentCategoryL caused a leave: %d.", err);
+            testCaseStatus = err;
+            break;
+            }
+        if(rv != KErrNone)
+            {
+            VCXLOGLO2("CIptvVodContentApiTest::TestGetParentCategory: GetParentCategoryL returned an error: %d", rv);
+            testCaseStatus = rv;
+            break;
+            }
+        if(parent != aParentCategoryId)
+            {
+            VCXLOGLO1("CIptvVodContentApiTest::TestGetParentCategory: ParentCategory id doesn't match");
+            testCaseStatus = KErrGeneral;
+            break;
+            }
+
+        }
+
+
+    CleanupStack::PopAndDestroy(&data);
+
+    if(count == 0)
+        {
+        VCXLOGLO1("No Categories found!!!");
+        }
+
+    VCXLOGLO1("<<<CIptvVodContentApiTest::TestGetParentCategory");
+    return testCaseStatus;
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentApiTest::TestVerifyAllCategoryContentL
+// -----------------------------------------------------------------------------
+//
+TInt CIptvVodContentApiTest::TestVerifyAllCategoryContentL(TIptvCategoryId aParentCategoryId)
+    {
+    // KIptvVodContentCategoryRootId
+    VCXLOGLO2(">>>CIptvVodContentApiTest::TestVerifyAllCategoryContentL: aParentCategoryId = %d",aParentCategoryId );
+
+    TInt testCaseStatus(KErrNone);
+
+    if(!iIptvVodContenClient)
+        {
+        VCXLOGLO1("No iIptvVodContenClient instance, error in testlogic");
+        iLog->Log(_L("*** FAIL *** No iIptvVodContenClient instance, error in testlogic"));
+        VCXLOGLO1("<<<CIptvVodContentApiTest::TestVerifyAllCategoryContentL");
+        return KErrGeneral;
+        }
+
+    RPointerArray<CIptvVodContentCategoryBriefDetails> categoryList;
+    CleanupResetAndDestroyPushL(categoryList);
+
+    testCaseStatus = iIptvVodContenClient->GetEcgCategoryListL(aParentCategoryId, categoryList);
+    if(testCaseStatus != KErrNone)
+        {
+        VCXLOGLO2("* FAIL * GetEcgCategoryListL returned an error: %d.", testCaseStatus);
+        CleanupStack::PopAndDestroy(&categoryList);
+        VCXLOGLO1("<<<CIptvVodContentApiTest::TestVerifyAllCategoryContentL");
+        return testCaseStatus;
+        }
+
+    TInt count = categoryList.Count();
+
+    for (TInt i = 0; i < count; i++)
+        {
+        VCXLOGLO2("categoryid = %d", categoryList[i]->iCategoryId);
+
+        PrintVodContentCategoryBriefDetails( *categoryList[i] );
+
+        testCaseStatus = TestGetEcgCategoryDetails(categoryList[i]->iCategoryId);
+        if(testCaseStatus != KErrNone) break;
+
+        RPointerArray<CIptvVodContentContentBriefDetails> ecgList;
+        CleanupResetAndDestroyPushL(ecgList);
+        TUint32 totalAmount = 0;
+
+        TBuf<10> searchString(_L("") );
+        testCaseStatus = iIptvVodContenClient->GetEcgListL(categoryList[i]->iCategoryId, searchString, 0, 0, totalAmount, ecgList);
+        if(testCaseStatus != KErrNone)
+            {
+            VCXLOGLO2("* FAIL * GetEcgListL returned an error: %d.", testCaseStatus);
+            CleanupStack::PopAndDestroy(&ecgList);
+            break;
+            }
+
+        VCXLOGLO2("totalAmount = %d", totalAmount);
+
+        for (TInt e = 0; e < ecgList.Count(); e++)
+            {
+            PrintVodContentBriefDetails(*(ecgList[e]));
+
+            CIptvVodContentContentFullDetails* contentDetails = CIptvVodContentContentFullDetails::NewL();
+
+            CleanupStack::PushL(contentDetails);
+
+            testCaseStatus = iIptvVodContenClient->GetContentDetailsL(ecgList[e]->iContentId, *contentDetails);
+            if(testCaseStatus != KErrNone)
+                {
+                VCXLOGLO2("* FAIL * GetContentDetailsL returned an error: %d.", testCaseStatus);
+                CleanupStack::PopAndDestroy(contentDetails);
+                CleanupStack::PopAndDestroy(&ecgList);
+                i = 100000;
+                break;
+                }
+
+            PrintVodContentFullDetails(ecgList[e]->iContentId, *contentDetails);
+
+            CleanupStack::PopAndDestroy(contentDetails);
+
+            }
+
+        CleanupStack::PopAndDestroy(&ecgList);
+        }
+
+    CleanupStack::PopAndDestroy(&categoryList);
+
+    if(count == 0)
+        {
+        VCXLOGLO1("No Categories found!!!");
+        }
+
+    VCXLOGLO1("<<<CIptvVodContentApiTest::TestVerifyAllCategoryContentL");
+    return testCaseStatus;
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentApiTest::TestGetContentDetailsList
+// -----------------------------------------------------------------------------
+//
+TInt CIptvVodContentApiTest::TestGetContentDetailsList(TIptvContentId aContentId)
+    {
+    VCXLOGLO1(">>>CIptvVodContentApiTest::TestGetContentDetailsList");
+    TInt testCaseStatus(KErrNone);
+
+    if(!iIptvVodContenClient)
+        {
+        VCXLOGLO1("No iIptvVodContenClient instance, error in testlogic");
+        iLog->Log(_L("*** FAIL *** No iIptvVodContenClient instance, error in testlogic"));
+        VCXLOGLO1("<<<CIptvVodContentApiTest::TestGetEcgList");
+        return KErrGeneral;
+        }
+
+    CIptvVodContentContentFullDetails* contentDetails = CIptvVodContentContentFullDetails::NewL();
+
+    CleanupStack::PushL(contentDetails);
+
+    TRAPD(err, testCaseStatus = iIptvVodContenClient->GetContentDetailsL(aContentId, *contentDetails));
+    if(err != KErrNone)
+        {
+        VCXLOGLO2("* FAIL * GetContentDetailsL caused a leave: %d.", err);
+        testCaseStatus = err;
+        }
+    else
+    if(testCaseStatus != KErrNone)
+        {
+        VCXLOGLO2("* FAIL * GetContentDetailsL returned an error: %d.", testCaseStatus);
+        }
+    else
+        {
+        PrintVodContentFullDetails(aContentId, *contentDetails);
+        }
+
+    CleanupStack::PopAndDestroy(contentDetails);
+
+    VCXLOGLO1("<<<CIptvVodContentApiTest::TestGetContentDetailsList");
+    return testCaseStatus;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentApiTest::TestUpdateEcg
+// -----------------------------------------------------------------------------
+//
+TInt CIptvVodContentApiTest::TestUpdateEcg( )
+    {
+    VCXLOGLO1(">>>CIptvVodContentApiTest::TestUpdateEcg");
+     TInt testCaseStatus(KErrNone);
+
+    if(!iIptvVodContenClient)
+        {
+        VCXLOGLO1("No iIptvVodContenClient instance, error in testlogic");
+        iLog->Log(_L("*** FAIL *** No iIptvVodContenClient instance, error in testlogic"));
+        VCXLOGLO1("<<<CIptvVodContentApiTest::TestGetEcgList");
+        return KErrGeneral;
+        }
+     TRAPD(err, testCaseStatus = iIptvVodContenClient->UpdateEcgL( ));
+
+    if(err != KErrNone)
+        {
+        VCXLOGLO2("* FAIL * UpdateEcgL caused a leave: %d.", err);
+        testCaseStatus = err;
+        }
+    else
+    if(testCaseStatus != KErrNone)
+        {
+        VCXLOGLO2("* FAIL * UpdateEcgL returned an error: %d.", testCaseStatus);
+        }
+    else
+        {
+        iIptvTestEcgUpdateInfo->EcgUpdateStart(iServiceId, iIapId);
+        }
+
+     VCXLOGLO1("<<<CIptvVodContentApiTest::TestUpdateEcg");
+     return testCaseStatus;
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentApiTest::TestCategoryCount
+// -----------------------------------------------------------------------------
+//
+TInt CIptvVodContentApiTest::TestCategoryCountL( TInt aExpectedCount )
+    {
+    // KIptvVodContentCategoryRootId
+    VCXLOGLO1(">>>CIptvVodContentApiTest::TestCategoryCountL");
+
+    TInt err( KErrNone );
+
+    if( !iIptvVodContenClient )
+        {
+        err = KErrNotReady;
+        VCXLOGLO1("No iIptvVodContenClient instance, error in testlogic");
+        iLog->Log(_L("*** FAIL *** No iIptvVodContenClient instance, error in testlogic"));
+        }
+
+    RPointerArray<CIptvVodContentCategoryBriefDetails> categoryList;
+    CleanupResetAndDestroyPushL( categoryList );
+
+    err = iIptvVodContenClient->GetEcgCategoryListL( 0 /* all categories */, categoryList );
+    if( err!= KErrNone )
+        {
+        VCXLOGLO2("* FAIL * GetEcgCategoryListL returned an error: %d.", err);
+        }
+    else
+        {
+        if( categoryList.Count() != aExpectedCount )
+            {
+            VCXLOGLO3("* FAIL * Count of categories (%d) is not expected (%d).", categoryList.Count(), aExpectedCount );
+            }
+        }
+    CleanupStack::PopAndDestroy( &categoryList );
+
+    VCXLOGLO1("<<<CIptvVodContentApiTest::TestCategoryCountL");
+    return err;
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentApiTest::TestContentCount
+// -----------------------------------------------------------------------------
+//
+TInt CIptvVodContentApiTest::TestContentCountL( TInt aExpectedCount )
+    {
+    // KIptvVodContentCategoryRootId
+    VCXLOGLO1(">>>CIptvVodContentApiTest::TestContentCountL");
+
+    TInt err( KErrNone );
+
+    if( !iIptvVodContenClient )
+        {
+        VCXLOGLO1("No iIptvVodContenClient instance, error in testlogic");
+        iLog->Log(_L("*** FAIL *** No iIptvVodContenClient instance, error in testlogic"));
+        User::Leave( KErrNotReady );
+        }
+
+    RPointerArray<CIptvVodContentCategoryBriefDetails> categoryList;
+    CleanupResetAndDestroyPushL( categoryList );
+
+    err = iIptvVodContenClient->GetEcgCategoryListL( 0 /* all categories */, categoryList );    
+    
+    TInt contentCount( 0 );
+    
+    TInt categoryCount = categoryList.Count();
+    
+    if( err!= KErrNone )
+        {
+        VCXLOGLO2("* FAIL * GetEcgCategoryListL returned an error: %d.", err);
+        }
+    else
+    for (TInt i = 0; i < categoryCount; i++)
+        {
+        RPointerArray<CIptvVodContentContentBriefDetails> ecgList;
+        CleanupResetAndDestroyPushL(ecgList);
+
+        TBuf<10> searchString(_L("") );
+        TUint32 totalAmount;
+        err = iIptvVodContenClient->GetEcgListL( categoryList[i]->iCategoryId, searchString, 0, 0, totalAmount, ecgList );
+        if(err != KErrNone)
+            {
+            VCXLOGLO2("* FAIL * GetEcgListL returned an error: %d.", err);
+            CleanupStack::PopAndDestroy( &ecgList );
+            break;
+            }
+
+        VCXLOGLO4("Category: %d content count: %d (ta: %d).", i, ecgList.Count(), totalAmount);
+        
+        contentCount += totalAmount;
+        CleanupStack::PopAndDestroy( &ecgList );
+        }
+    
+    if( err == KErrNone )
+        {
+        if( contentCount != aExpectedCount )
+            {
+            VCXLOGLO3("* FAIL * Count of content (%d) is not expected (%d).", contentCount, aExpectedCount );
+            err = KErrCorrupt;
+            }
+        }
+    CleanupStack::PopAndDestroy( &categoryList );
+
+    VCXLOGLO1("<<<CIptvVodContentApiTest::TestContentCountL");
+    return err;
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentApiTest::CreateInstanceL
+// -----------------------------------------------------------------------------
+//
+TInt CIptvVodContentApiTest::CreateInstance(TDesC& serviceName)
+    {
+    VCXLOGLO1(">>>CIptvVodContentApiTest::CreateInstanceL");
+    TInt rv(KErrNone);
+    TInt error(KErrNone);
+
+    TRAP(error, iIptvTestUtilities = CIptvTestUtilities::NewL( ));
+    if(KErrNone != error)//Leave
+        {
+        if(iIptvTestUtilities)
+            {
+            delete iIptvTestUtilities;
+            iIptvTestUtilities = NULL;
+            }
+        VCXLOGLO1("Leave in creating CIptvTestUtilities instance");
+        iLog->Log(_L("*** Fail *** Leave in creating CIptvTestUtilities instance"));
+        return error;
+        }
+
+    TUint32 serviceId = 0;
+    TInt err = KErrNone;
+
+    TBuf<256> sname(serviceName);
+    TInt sid;
+    TRAP(err, rv = iIptvTestUtilities->GetServiceIdByNameL(sname, sid));
+    serviceId = sid;
+    if(KErrNone != err)
+        {
+        VCXLOGLO2("GetServiceIdByNameL caused a leave: %d.", err);
+        VCXLOGLO1("<<<CIptvVodContentApiTest::CreateL");
+        return err;
+        }
+    if(KErrNone != rv)
+        {
+        VCXLOGLO2("GetServiceIdByNameL returned error: %d.", rv);
+        VCXLOGLO1("<<<CIptvVodContentApiTest::CreateL");
+        return rv;
+        }
+
+    TRAP(error, iIptvVodContenClient = CIptvVodContentClient::NewL(serviceId, *this));
+
+    if(KErrNone != error)//Leave
+        {
+        if(iIptvVodContenClient)
+            {
+            delete iIptvVodContenClient;
+            iIptvVodContenClient = NULL;
+            }
+        VCXLOGLO2("Leave in creating CIptvVodContentClient instance: %d", error);
+        iLog->Log(_L("*** Fail *** Leave in creating CIptvVodContentClient instance"));
+        return error;
+        }
+
+    iServiceId = serviceId;
+    TRAP(error, iIptvTestTimer = CIptvTestTimer::NewL( *this, 0 ));
+
+    if(KErrNone != error)//Leave
+        {
+        if(iIptvTestTimer)
+            {
+            delete iIptvTestTimer;
+            iIptvTestTimer = NULL;
+            }
+        VCXLOGLO1("Leave in creating CIptvTestTimer instance");
+        iLog->Log(_L("*** Fail *** Leave in creating CIptvTestTimer instance"));
+        return error;
+        }
+
+    iIptvTestEcgUpdateInfo = CIptvTestEcgUpdateInfo::NewL();
+
+    VCXLOGLO1("<<<CIptvVodContentApiTest::CreateInstanceL");
+    return rv;
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentApiTest::DeAllocateResources
+// -----------------------------------------------------------------------------
+//
+void CIptvVodContentApiTest::DeAllocateResources()
+    {
+    VCXLOGLO1(">>>CIptvVodContentApiTest::DeAllocateResources");
+    if(iIptvVodContenClient)
+        {
+        delete iIptvVodContenClient;
+        iIptvVodContenClient = NULL;
+        }
+
+    if(iIptvTestTimer)
+        {
+        delete iIptvTestTimer;
+        iIptvTestTimer = NULL;
+        }
+
+    if(iIptvTestUtilities)
+        {
+        delete iIptvTestUtilities;
+        iIptvTestUtilities = NULL;
+        }
+
+    if(iIptvTestEcgUpdateInfo)
+        {
+        delete iIptvTestEcgUpdateInfo;
+        iIptvTestEcgUpdateInfo = NULL;
+        }
+
+    VCXLOGLO1("<<<CIptvVodContentApiTest::DeAllocateResources");
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentApiTest::PrintVodContentBriefDetails
+// -----------------------------------------------------------------------------
+//
+void CIptvVodContentApiTest::PrintVodContentBriefDetails(CIptvVodContentContentBriefDetails& aDetails)
+    {
+    VCXLOGLO1(">>>CIptvVodContentApiTest::PrintVodContentBriefDetails");
+
+    TInt year, month, day, hour, minute, seconds;
+    GetDateInts(aDetails.iPubDate.DateTime(), year, month, day, hour, minute, seconds);
+
+    VCXLOGLO3("Id: %d Name = %S", aDetails.iContentId, &aDetails.iName);
+    VCXLOGLO2("iThumbnailPath: %S", &aDetails.iThumbnailPath);
+
+    VCXLOGLO2("iPlaytime: %d", aDetails.iPlaytime);
+    VCXLOGLO2("iSize: %d", aDetails.iSize);
+
+    if(aDetails.iFileId)
+        {
+        VCXLOGLO3("iFileId.iDrive = %d, iFileId: %d", aDetails.iFileId->iDrive, aDetails.iFileId->iFileId);
+        }
+
+    VCXLOGLO4("Pub date = %d.%d.%d", year, month, day);
+
+
+    TPtrC browserUrl = aDetails.GetBrowserUrlL();
+
+    VCXLOGLO2("iBrowserUrl: %S",&browserUrl);
+
+
+    WriteVerifyVodContentBriefDetails(aDetails);
+
+    VCXLOGLO1("<<<CIptvVodContentApiTest::PrintVodContentBriefDetails");
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentApiTest::PrintVodContentFullDetails
+// -----------------------------------------------------------------------------
+//
+void CIptvVodContentApiTest::PrintVodContentFullDetails(TUint32  aContentId, CIptvVodContentContentFullDetails& aDetails)
+    {
+    VCXLOGLO1(">>>CIptvVodContentApiTest::PrintVodContentFullDetails");
+
+    //
+    // REL 1.1 MEDIACONTENT
+    //
+
+    VCXLOGLO2("Description = %S", &aDetails.iDescription);
+    VCXLOGLO2("iContentProtection = %d", aDetails.iContentProtection);
+    VCXLOGLO2("iLangugage = %S", &aDetails.iLanguage);
+    VCXLOGLO2("iAuthor = %S", &aDetails.iAuthor);
+    VCXLOGLO2("iCopyright = %S", &aDetails.iCopyright);
+
+    //
+    // copied from PrintVodContentBriefDetails
+    //
+
+    TInt year, month, day, hour, minute, seconds;
+    GetDateInts(aDetails.iPubDate.DateTime(), year, month, day, hour, minute, seconds);
+
+    VCXLOGLO3("Id: %d Name = %S", aDetails.iContentId, &aDetails.iName);
+    VCXLOGLO2("iThumbnailPath: %S", &aDetails.iThumbnailPath);
+    VCXLOGLO2("iPlaytime: %d", aDetails.iPlaytime);
+    VCXLOGLO2("iSize: %d", aDetails.iSize);
+
+    if(aDetails.iFileId)
+        {
+        VCXLOGLO3("iFileId.iDrive = %d, iFileId: %d", aDetails.iFileId->iDrive, aDetails.iFileId->iFileId);
+        }
+
+    VCXLOGLO4("Pub date = %d.%d.%d", year, month, day);
+
+    TPtrC browserUrl = aDetails.GetBrowserUrlL();
+    VCXLOGLO2("iBrowserUrl: %S",&browserUrl);
+
+    //
+    // Write to the verify file
+    //
+    WriteVerifyVodContentFullDetails(aContentId, aDetails);
+
+    VCXLOGLO1("<<<CIptvVodContentApiTest::PrintVodContentFullDetails");
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentApiTest::PrintVodContentCategoryBriefDetails
+// -----------------------------------------------------------------------------
+//
+void CIptvVodContentApiTest::PrintVodContentCategoryBriefDetails(CIptvVodContentCategoryBriefDetails& aDetails)
+    {
+    VCXLOGLO1(">>>CIptvVodContentApiTest::PrintVodContentCategoryBriefDetails");
+
+    TInt year, month, day, hour, minute, seconds;
+    GetDateInts(aDetails.iPubDate.DateTime(), year, month, day, hour, minute, seconds);
+
+    VCXLOGLO3("Id: %d Name = %S",aDetails.iCategoryId, &aDetails.iName);
+    VCXLOGLO4("Pub date = %d.%d.%d", year, month, day);
+    VCXLOGLO2("iThumbnailPath: %S", &aDetails.iThumbnailPath);
+    VCXLOGLO2("iContentCount: %d", aDetails.iContentCount);
+    VCXLOGLO2("iIsSearchCategory: %d", aDetails.iIsSearchCategory);
+
+    WriteVerifyVodContentCategoryBriefDetails(aDetails);
+
+    VCXLOGLO1("<<<CIptvVodContentApiTest::PrintVodContentCategoryBriefDetails");
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentApiTest::WriteVerifyVodContentBriefDetails
+// -----------------------------------------------------------------------------
+//
+void CIptvVodContentApiTest::WriteVerifyVodContentBriefDetails(CIptvVodContentContentBriefDetails& aDetails)
+    {
+    VCXLOGLO1(">>>CIptvVodContentApiTest::WriteVerifyVodContentBriefDetails");
+
+    TInt year, month, day, hour, minute, seconds;
+    GetDateInts(aDetails.iPubDate.DateTime(), year, month, day, hour, minute, seconds);
+
+    if(iSpecialAction == EBriefContentDetails)
+        {
+        iIptvTestUtilities->WriteVerifyData(iCaseId, _L("VodContentBriefDetails: Id: %d Name = %S"), aDetails.iContentId, &aDetails.iName);
+        return;
+        }
+
+    iIptvTestUtilities->WriteVerifyData(iCaseId, _L("-----------------------------------------------------------"));
+    iIptvTestUtilities->WriteVerifyData(iCaseId, _L("VodContentBriefDetails"));
+    iIptvTestUtilities->WriteVerifyData(iCaseId, _L("-----------------------------------------------------------"));
+
+    iIptvTestUtilities->WriteVerifyData(iCaseId, _L("Id: %d Name = %S"), aDetails.iContentId, &aDetails.iName);
+
+    iIptvTestUtilities->WriteVerifyData(iCaseId, _L("iRatingAge: %d"), aDetails.iRatingAge);
+    iIptvTestUtilities->WriteVerifyData(iCaseId, _L("iLanguage: %S"), &aDetails.iLanguage);
+
+    iIptvTestUtilities->WriteVerifyData(iCaseId, _L("iThumbnailPath: %S"), &aDetails.iThumbnailPath);
+    iIptvTestUtilities->WriteVerifyData(iCaseId, _L("iPlaytime: %d"), aDetails.iPlaytime);
+    iIptvTestUtilities->WriteVerifyData(iCaseId, _L("iSize: %d"), aDetails.iSize);
+
+    if(aDetails.iFileId)
+        {
+        iIptvTestUtilities->WriteVerifyData(iCaseId, _L("iFileId.iDrive: %d, iFileId.iFileId: %d"), aDetails.iFileId->iDrive, aDetails.iFileId->iFileId);
+        }
+    else
+        {
+        iIptvTestUtilities->WriteVerifyData(iCaseId, _L("No iFileId ID!") );
+        }
+
+    if(aDetails.iPreviewGlobalFileId)
+        {
+        iIptvTestUtilities->WriteVerifyData(iCaseId, _L("iPreviewGlobalFileId.iDrive: %d, iPreviewGlobalFileId.iFileId: %d"), aDetails.iPreviewGlobalFileId->iDrive, aDetails.iPreviewGlobalFileId->iFileId);
+        }
+    else
+        {
+        iIptvTestUtilities->WriteVerifyData(iCaseId, _L("No iPreviewGlobalFileId ID!") );
+        }
+
+    iIptvTestUtilities->WriteVerifyData(iCaseId, _L("Pub date = %d.%d.%d"), year, month, day);
+    TPtrC browserUrl = aDetails.GetBrowserUrlL();
+    iIptvTestUtilities->WriteVerifyData(iCaseId, _L("iBrowserUrl: %S"), &browserUrl);
+
+    VCXLOGLO1("<<<CIptvVodContentApiTest::WriteVerifyVodContentBriefDetails");
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentApiTest::WriteVerifyVodContentFullDetails
+// -----------------------------------------------------------------------------
+//
+void CIptvVodContentApiTest::WriteVerifyVodContentFullDetails(TUint32 aContentId, CIptvVodContentContentFullDetails& aDetails)
+    {
+    VCXLOGLO1(">>>CIptvVodContentApiTest::WriteVerifyVodContentFullDetails");
+
+    iIptvTestUtilities->WriteVerifyData(iCaseId, _L("-----------------------------------------------------------"));
+    iIptvTestUtilities->WriteVerifyData(iCaseId, _L("VodContentFullDetails"));
+    iIptvTestUtilities->WriteVerifyData(iCaseId, _L("-----------------------------------------------------------"));
+
+    iIptvTestUtilities->WriteVerifyData(iCaseId, _L("aContentId = %d"), aContentId);
+    iIptvTestUtilities->WriteVerifyData(iCaseId, _L("Description = %S"),&aDetails.iDescription);
+    iIptvTestUtilities->WriteVerifyData(iCaseId, _L("iContentProtection = %d"),aDetails.iContentProtection);
+    iIptvTestUtilities->WriteVerifyData(iCaseId, _L("iLanguage = %S"),&aDetails.iLanguage);
+    iIptvTestUtilities->WriteVerifyData(iCaseId, _L("iAuthor = %S"),&aDetails.iAuthor);
+    iIptvTestUtilities->WriteVerifyData(iCaseId, _L("iCopyright = %S"),&aDetails.iCopyright);
+
+    //
+    // Print content access list
+    //
+    //IMPORT_C TInt GetContentAccessListL(TUint32 aContentId, RPointerArray<CIptvMediaContent>& aCAList);
+
+    RPointerArray<CIptvMediaContent> CAList;
+
+    TInt err = KErrNone, ret = KErrNone;
+    TRAP(err, ret = iIptvVodContenClient->GetContentAccessListL(aContentId, CAList));
+
+    CleanupResetAndDestroyPushL(CAList);
+
+    if(err != KErrNone)
+        {
+        VCXLOGLO2("* ERROR * GetContentAccessListLApiTest caused a leave!: %d", err);
+        iIptvTestUtilities->WriteVerifyData(iCaseId, _L("GetContentAccessListLApiTest caused a leave."));
+        }
+    else if(ret != KErrNone)
+        {
+        iIptvTestUtilities->WriteVerifyData(iCaseId, _L("GetContentAccessListLApiTest returned error"));
+        VCXLOGLO2("* ERROR * GetContentAccessListLApiTest returned error: %d", ret);
+        }
+    else
+        {
+        iIptvTestUtilities->WriteVerifyData(iCaseId, _L(" "));
+        iIptvTestUtilities->WriteVerifyData(iCaseId, _L("Content access list:"));
+        WriteVerifyCAList(CAList);
+        iIptvTestUtilities->WriteVerifyData(iCaseId, _L(" "));
+        }
+
+    CleanupStack::PopAndDestroy(&CAList);
+
+    // copied from WriteVerifyVodContentBriefDetails
+
+    TInt year, month, day, hour, minute, seconds;
+    GetDateInts(aDetails.iPubDate.DateTime(), year, month, day, hour, minute, seconds);
+
+    iIptvTestUtilities->WriteVerifyData(iCaseId, _L("Id: %d Name = %S"), aDetails.iContentId, &aDetails.iName);
+    iIptvTestUtilities->WriteVerifyData(iCaseId, _L("iThumbnailPath: %S"), &aDetails.iThumbnailPath);
+    iIptvTestUtilities->WriteVerifyData(iCaseId, _L("iPlaytime: %d"), aDetails.iPlaytime);
+    iIptvTestUtilities->WriteVerifyData(iCaseId, _L("iSize: %d"), aDetails.iSize);
+
+    if(aDetails.iFileId)
+        {
+        iIptvTestUtilities->WriteVerifyData(iCaseId, _L("iFileId.iDrive: %d, iFileId.iFileId: %d"), aDetails.iFileId->iDrive, aDetails.iFileId->iFileId);
+        }
+
+    iIptvTestUtilities->WriteVerifyData(iCaseId, _L("Pub date = %d.%d.%d"), year, month, day);
+    TPtrC browserUrl = aDetails.GetBrowserUrlL();
+    iIptvTestUtilities->WriteVerifyData(iCaseId, _L("iBrowserUrl: %S"),&browserUrl);
+
+
+    VCXLOGLO1("<<<CIptvVodContentApiTest::WriteVerifyVodContentFullDetails");
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentApiTest::WriteVerifyVodContentCategoryBriefDetails
+// -----------------------------------------------------------------------------
+//
+void CIptvVodContentApiTest::WriteVerifyVodContentCategoryBriefDetails(CIptvVodContentCategoryBriefDetails& aDetails)
+    {
+    VCXLOGLO1(">>>CIptvVodContentApiTest::WriteVerifyVodContentCategoryBriefDetails");
+
+    TInt year, month, day, hour, minute, seconds;
+    GetDateInts(aDetails.iPubDate.DateTime(), year, month, day, hour, minute, seconds);
+
+    if(iSpecialAction == EBriefContentDetails)
+        {
+        iIptvTestUtilities->WriteVerifyData(iCaseId, _L("VodContentCategoryBriefDetails: Id: %d Name = %S"),aDetails.iCategoryId, &aDetails.iName);
+        return;
+        }
+
+    iIptvTestUtilities->WriteVerifyData(iCaseId, _L("-----------------------------------------------------------"));
+    iIptvTestUtilities->WriteVerifyData(iCaseId, _L("VodContentCategoryBriefDetails"));
+    iIptvTestUtilities->WriteVerifyData(iCaseId, _L("-----------------------------------------------------------"));
+
+    iIptvTestUtilities->WriteVerifyData(iCaseId, _L("Id: %d Name = %S"),aDetails.iCategoryId, &aDetails.iName);
+    iIptvTestUtilities->WriteVerifyData(iCaseId, _L("Pub date = %d.%d.%d (OBSOLOTE)"), year, month, day);
+    iIptvTestUtilities->WriteVerifyData(iCaseId, _L("iThumbnailPath: %S (OBSOLOTE)"), &aDetails.iThumbnailPath);
+    iIptvTestUtilities->WriteVerifyData(iCaseId, _L("iContentCount: %d"), aDetails.iContentCount);
+    iIptvTestUtilities->WriteVerifyData(iCaseId, _L("iIsSearchCategory: %d"), aDetails.iIsSearchCategory);
+
+    VCXLOGLO1("<<<CIptvVodContentApiTest::WriteVerifyVodContentCategoryBriefDetails");
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentApiTest::WriteVerifyCAList
+// -----------------------------------------------------------------------------
+//
+void CIptvVodContentApiTest::WriteVerifyCAList(RPointerArray<CIptvMediaContent>& aCAList)
+    {
+
+    for(TInt i = 0; i < aCAList.Count(); i++)
+        {
+
+        iIptvTestUtilities->WriteVerifyData(iCaseId, _L("%d."), i);
+
+        CIptvMediaContent *mediaContent = aCAList[i];
+
+        TBuf<256> str;
+
+    /**
+        * Content key
+        */
+        //TUint32 iContentKey;
+
+        /**
+        * Index (This index identifies content access objects which belong to some content defined by iContentKey)
+        */
+        //TUint32 iIndex;
+
+        /**
+        * Download type.
+        */
+        //TUint32 iDownloadType
+
+        switch(mediaContent->iDownloadType)
+            {
+
+            case EIptvDownloadTypeStream:
+                str = _L("Stream");
+                break;
+
+            case EIptvDownloadTypeImmediate:
+                str = _L("Immediate");
+                break;
+
+            case EIptvDownloadTypePostponed:
+                str = _L("Postponed");
+                break;
+
+            case EIptvDownloadTypeScheduled:
+                str = _L("Scheduled");
+                break;
+
+            default:
+                str = _L("Unknown");
+                break;
+        }
+
+        iIptvTestUtilities->WriteVerifyData(iCaseId, _L(" iDownloadType: %S (%d)"), &str, mediaContent->iDownloadType);
+
+        /**
+        * File id (Part of global file id (1/2)
+        */
+        //TUint32 iFileId;
+
+        /**
+        * Drive id (Part of global file id (2/2)
+        */
+        //TUint32 iDriveId;
+
+        /**
+        * Content URL (MRSS)
+        */
+        //TBuf<KIptvCAContentUrlLength> iUrl;
+
+        const TPtrC url = mediaContent->GetMediaContentUrl();
+
+        iIptvTestUtilities->WriteVerifyData(iCaseId, _L(" iUrl: %S"), &url);
+
+        /**
+        * File size (MRSS)
+        */
+        //TUint32 iFileSize;
+        iIptvTestUtilities->WriteVerifyData(iCaseId, _L(" iFileSize: %d"), mediaContent->iFileSize);
+
+        /**
+        * Mime-type (MRSS)
+        */
+        //TBuf<KIptvCAMimeTypeLength> iMimeType;
+        iIptvTestUtilities->WriteVerifyData(iCaseId, _L(" iMimeType: %S"), &mediaContent->iMimeType);
+
+        /**
+        * Medium (MRSS) (Not used in client side)
+        * Medium is the type of object (image | audio | video | document | executable). While this
+        * attribute can at times seem redundant if type is supplied, it is included because it simplifies
+        * decision making on the reader side, as well as flushes out any ambiguities between MIME type and
+        * object type. It is an optional attribute.
+        */
+        //TBuf<KIptvMediumMaxLength> iMedium;
+        iIptvTestUtilities->WriteVerifyData(iCaseId, _L(" iMedium: %S"), &mediaContent->iMedium);
+
+        /**
+        * Is default. (MRSS) (Not used in client side)
+        * isDefault determines if this is the default object that should be used for the <media:group>.
+        * There should only be one default object per <media:group>. It is an optional attribute.
+        */
+        //TBool iIsDefault;
+        iIptvTestUtilities->WriteVerifyData(iCaseId, _L(" iIsDefault: %d"), mediaContent->iIsDefault);
+
+        /**
+        * Expression. (MRSS)
+        * Expression determines if the object is a sample or the full version of the object, or even if it is a
+        * continuous stream (sample | full | nonstop). Default value is 'full'. It is an optional attribute
+        */
+        //TUint32 iExpression;
+        if(mediaContent->iExpression == CIptvMediaContent::EFull) str = _L("FULL");
+        if(mediaContent->iExpression == CIptvMediaContent::ESample) str = _L("Sample");
+        if(mediaContent->iExpression == CIptvMediaContent::ENonStop) str = _L("NonStop");
+
+        iIptvTestUtilities->WriteVerifyData(iCaseId, _L(" iExpression: %S (%d)"), &str, mediaContent->iExpression);
+
+        /**
+        * Bitrate. (MRSS) (Not used in client side)
+        * Bitrate is the kilobits per second rate of media. It is an optional attribute
+        */
+        //TUint32 iBitrate;
+        iIptvTestUtilities->WriteVerifyData(iCaseId, _L(" iBitrate: %d"), mediaContent->iBitrate);
+
+        /**
+        * Framerate. (MRSS) (Not used in client side)
+        * Framerate is the number of frames per second for the media object. It is an optional attribute
+        */
+        //TUint32 iFramerate;
+        iIptvTestUtilities->WriteVerifyData(iCaseId, _L(" iFramerate: %d"), mediaContent->iFramerate);
+
+        /**
+        * Samplingrate (MRSS) (Not used in client side)
+        * Samplingrate is the number of samples per second taken to create the media object. It is expressed in
+        * thousands of samples per second (kHz). It is an optional attribute.
+        */
+        //TUint32 iSamplingrate;
+        iIptvTestUtilities->WriteVerifyData(iCaseId, _L(" iSamplingrate: %d"), mediaContent->iSamplingrate);
+
+        /**
+        * Channels. (MRSS) (Not used in client side)
+        * Not supported.
+        */
+
+        /**
+        * Duration. (MRSS)
+        * Duration is the number of seconds the media object plays. It is an optional attribute.
+        */
+        //TUint32 iDuration;
+        iIptvTestUtilities->WriteVerifyData(iCaseId, _L(" iDuration: %d"), mediaContent->iDuration);
+
+        /**
+        * Height. (MRSS) (Not used in client side)
+        * Height is the height of the media object. It is an optional attribute.
+        */
+        //TUint32 iHeight;
+        iIptvTestUtilities->WriteVerifyData(iCaseId, _L(" iHeight: %d"), mediaContent->iHeight);
+
+        /**
+        * Width. (MRSS) (Not used in client side)
+        * Width is the width of the media object. It is an optional attribute.
+        */
+        //TUint32 iWidth;
+        iIptvTestUtilities->WriteVerifyData(iCaseId, _L(" iWidth: %d"), mediaContent->iWidth);
+
+        /**
+        * Language. (MRSS)
+        * Lang is the primary language encapsulated in the media object. Language codes possible are detailed in
+        * RFC 3066. This attribute is used similar to the xml:lang attribute detailed in the XML 1.0 Specification
+        * (Third Edition). It is an optional attribute.
+        */
+        //TBuf<KIptvCALanguageLength> iLanguage;
+        iIptvTestUtilities->WriteVerifyData(iCaseId, _L(" iLanguage: %S"), &mediaContent->iLanguage);
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentApiTest::SetIap
+// -----------------------------------------------------------------------------
+//
+TInt CIptvVodContentApiTest::SetIap(const TUint32 aIap)
+    {
+    VCXLOGLO1(">>>CIptvVodContentApiTest::SetIap");
+    TInt rv = KErrNone;
+    VCXLOGLO2("Selected Iap = %d",aIap);
+
+    TRAPD(error,rv = iIptvVodContenClient->SetIapL(aIap));
+    if(KErrNone != error)
+        {
+        rv =error;
+        }
+    else
+        {
+        iIapId = aIap;
+        }
+
+    VCXLOGLO1("<<<CIptvVodContentApiTest::SetIap");
+    return rv;
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentApiTest::TestGetUpdateTimeL
+// -----------------------------------------------------------------------------
+//
+TInt CIptvVodContentApiTest::TestGetUpdateTimeL(TTime& aTime)
+    {
+    VCXLOGLO1(">>>CIptvVodContentApiTest::TestGetUpdateTimeL");
+    TInt rv = KErrNone;
+
+    TRAPD(error, rv = iIptvVodContenClient->GetUpdateTimeL(aTime));
+
+    if(KErrNone != error)
+        {
+        rv = error;
+        }
+
+    VCXLOGLO1("<<<CIptvVodContentApiTest::TestGetUpdateTimeL");
+    return rv;
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentApiTest::GetDateInts
+// -----------------------------------------------------------------------------
+//
+void CIptvVodContentApiTest::GetDateInts(TDateTime aDateTime, TInt& year, TInt& month, TInt& day, TInt& hour, TInt& minute, TInt& second )
+    {
+    year = aDateTime.Year();
+    month = aDateTime.Month() + 1;
+    day = aDateTime.Day() + 1;
+    hour = aDateTime.Hour();
+    minute = aDateTime.Minute();
+    second = aDateTime.Second();
+    }
+
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentApiTest::RemoveServiceNumberFromThumbnailPathL
+// -----------------------------------------------------------------------------
+//
+void CIptvVodContentApiTest::RemoveServiceNumberFromThumbnailPathL(TDes& aThumbnailPath)
+    {
+    VCXLOGLO1(">>>CIptvVodContentApiTest::RemoveServiceNumberFromThumbnailPath");
+
+    HBufC* thumbPath;
+    thumbPath = HBufC::NewL(2048);
+
+    CleanupStack::PushL(thumbPath);
+
+    TInt pos;
+
+    TBool success = EFalse;
+
+    pos = aThumbnailPath.Find( _L("ecg\\") );
+    if( pos != KErrNotFound )
+        {
+        thumbPath->Des().Append( aThumbnailPath.Left(pos+4) );
+
+        pos = aThumbnailPath.Find( _L("tbn\\") );
+        if( pos != KErrNotFound )
+            {
+            thumbPath->Des().Append( _L("X") );
+            thumbPath->Des().Append( aThumbnailPath.Right( aThumbnailPath.Length() - (pos-1) ) );
+
+            success = ETrue;
+            }
+        }
+
+    if(success)
+        {
+        aThumbnailPath = thumbPath->Des();
+        }
+
+    CleanupStack::PopAndDestroy(thumbPath);
+
+    VCXLOGLO1("<<<CIptvVodContentApiTest::RemoveServiceNumberFromThumbnailPath");
+    }
+
+//  End of File