javacommons/security/javaunicertstoreplugin/tsrc/src/readcerts.cpp
branchRCL_3
changeset 14 04becd199f91
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javacommons/security/javaunicertstoreplugin/tsrc/src/readcerts.cpp	Tue Apr 27 16:30:29 2010 +0300
@@ -0,0 +1,1558 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#include <stdio.h>
+#include <string>
+#include <memory>
+#include <unistd.h>
+#include <e32cmn.h>
+#include <e32des8.h>
+
+#include "TestHarness.h"
+#include "testexecutor.h"
+#include "securitycommsmessagedefs.h"
+#include "testdata.h"
+#include "testutils.h"
+#include "javacertstoretokentype.h"
+#include "javacertstoretoken.h"
+#include "javacertstoreimpl.h"
+#include "testfailedexception.h"
+#include "commsmsgsender.h"
+
+#ifndef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include <securitydefs.h>
+#else
+#include <securitydefs.h>
+#include <securitydefsconst.h>
+#endif
+
+using namespace std;
+using namespace java::security;
+
+_LIT(KMIDP2TrustRoot, "Java Trust Root");
+
+TEST_GROUP(ReadCerts)
+{
+    TEST_SETUP()
+    {
+    }
+
+    TEST_TEARDOWN()
+    {
+    }
+};
+
+//
+// TEST CASE 1
+//
+TEST(ReadCerts,readingCerts)
+{
+    printf("+readingCerts\n");
+
+    try
+    {
+        //Starting java captain.
+        TestUtils::StartJavaCaptain();
+
+        //Stopping javacertstore extension plugin of the java captain.
+        CommsMsgSender commsMsgSender;
+        commsMsgSender.SendStopJavaCertStorePlugin();
+
+        //Deleting all existing
+        auto_ptr<CTestData> testData(CTestData::NewL());
+        testData->DeleteTestDataL();
+
+        //# 1
+        //Create certificates + metadata.
+        list<CertMetaData> listOfCerts;
+        {
+            CertMetaData tmpObj(STATE_ENABLED,"enabledcert1",false,true,"1","content1");
+            listOfCerts.push_back(tmpObj);
+        }
+        {
+            CertMetaData tmpObj(STATE_ENABLED,"enabledcert2",true,true,"2","content12");
+            listOfCerts.push_back(tmpObj);
+        }
+        {
+            CertMetaData tmpObj(STATE_DISABLED,"disabledcert1",true,true,"3","content123");
+            listOfCerts.push_back(tmpObj);
+        }
+        {
+            CertMetaData tmpObj(STATE_DELETED,"deletedcert1",true,true,"4","content1234");
+            listOfCerts.push_back(tmpObj);
+        }
+        testData->StoreTestData(listOfCerts);
+
+        auto_ptr<CTestExecutor> testExecutor(new CTestExecutor());
+        auto_ptr<CJavaCertStoreTokenType> certStoreTokenType
+        (static_cast<CJavaCertStoreTokenType*>(CJavaCertStoreTokenType::New2L()));
+        auto_ptr<CJavaCertStoreToken> certStoreToken
+        (CJavaCertStoreToken::New(0x1234,*certStoreTokenType.get()));
+        auto_ptr<CJavaCertStoreImpl> certStoreObj(CJavaCertStoreImpl::NewL(*certStoreToken.get()));
+
+        //# 2
+        //Reading certificates.
+        {
+            RMPointerArray<CCTCertInfo> certInfoArray;
+            auto_ptr<CCertAttributeFilter> attrFilter(TestUtils::GetFilterObj());
+            certStoreObj->List(certInfoArray,*attrFilter.get(),testExecutor->GetRequestStatus());
+            CActiveScheduler::Start();
+            CHECK(KErrNone == testExecutor->GetErrorCode());
+
+            CHECK(3 == certInfoArray.Count());
+            TestUtils::CheckResultOfList(listOfCerts,certInfoArray);
+
+            for (TInt i = 0; i < certInfoArray.Count(); i++)
+            {
+                auto_ptr<HBufC8> certContentBuf(HBufC8::NewL(certInfoArray[i]->Size()));
+                TPtr8 certContentPtr(certContentBuf->Des());
+                certStoreObj->Retrieve(*certInfoArray[i],certContentPtr,testExecutor->GetRequestStatus());
+                testExecutor->Activate();
+                CActiveScheduler::Start();
+                CHECK(KErrNone == testExecutor->GetErrorCode());
+                TestUtils::CheckContentOfCert(listOfCerts,certContentBuf.get());
+            }
+            certInfoArray.Close();
+        }
+
+        //# 3
+        //Recall list() operation to check that objects are returned correctly from
+        //cache memory.
+        {
+            RMPointerArray<CCTCertInfo> certInfoArray;
+            auto_ptr<CCertAttributeFilter> attrFilter(TestUtils::GetFilterObj());
+            certStoreObj->List(certInfoArray,*attrFilter.get(),testExecutor->GetRequestStatus());
+            testExecutor->Activate();
+            CActiveScheduler::Start();
+            CHECK(KErrNone == testExecutor->GetErrorCode());
+
+            CHECK(3 == certInfoArray.Count());
+            TestUtils::CheckResultOfList(listOfCerts,certInfoArray);
+
+            for (TInt i = 0; i < certInfoArray.Count(); i++)
+            {
+                auto_ptr<HBufC8> certContentBuf(HBufC8::NewL(certInfoArray[i]->Size()));
+                TPtr8 certContentPtr(certContentBuf->Des());
+                certStoreObj->Retrieve(*certInfoArray[i],certContentPtr,testExecutor->GetRequestStatus());
+                testExecutor->Activate();
+                CActiveScheduler::Start();
+                CHECK(KErrNone == testExecutor->GetErrorCode());
+                TestUtils::CheckContentOfCert(listOfCerts,certContentBuf.get());
+            }
+            certInfoArray.Close();
+        }
+
+        //# 4
+        //Reading certificates in the situation when certificate folder is empty.
+        {
+            CommsMsgSender commsMsgSender;
+            commsMsgSender.SendStopJavaCertStorePlugin();
+            sleep(2);
+            testData->DeleteTestDataL();
+            RMPointerArray<CCTCertInfo> certInfoArray;
+            auto_ptr<CCertAttributeFilter> attrFilter(TestUtils::GetFilterObj());
+            auto_ptr<CJavaCertStoreImpl> certStoreObj2(CJavaCertStoreImpl::NewL(*certStoreToken.get()));
+            certStoreObj2->List(certInfoArray,*attrFilter.get(),testExecutor->GetRequestStatus());
+            testExecutor->Activate();
+            CActiveScheduler::Start();
+            CHECK(KErrNone == testExecutor->GetErrorCode());
+            int count = certInfoArray.Count();
+            CHECK(0 == count);
+            certInfoArray.Close();
+        }
+
+        printf("-readingCerts\n");
+    }
+    catch (TestFailedException& ex)
+    {
+        printf("readingCerts() ERROR: %s",ex.toString().c_str());
+        CHECK(false);
+    }
+    catch (...)
+    {
+        printf("readingCerts() Unexpected exception caught");
+        CHECK(false);
+    }
+}
+
+//
+// TEST CASE 2
+//
+TEST(ReadCerts,testDisablingCert)
+{
+    printf("+testDisablingCert\n");
+    try
+    {
+        //Starting java captain.
+        TestUtils::StartJavaCaptain();
+
+        //Stopping javacertstore extension plugin of the java captain.
+        CommsMsgSender commsMsgSender;
+        commsMsgSender.SendStopJavaCertStorePlugin();
+        sleep(2);
+
+        //Deleting all existing
+        auto_ptr<CTestData> testData(CTestData::NewL());
+        testData->DeleteTestDataL();
+
+        //# 1
+        //Create certificates + metadata.
+        list<CertMetaData> listOfCerts;
+        {
+            CertMetaData tmpObj(STATE_ENABLED,"enabledcert2",true,true,"2","content12");
+            listOfCerts.push_back(tmpObj);
+        }
+        testData->StoreTestData(listOfCerts);
+
+        auto_ptr<CTestExecutor> testExecutor(new CTestExecutor());
+        auto_ptr<CJavaCertStoreTokenType> certStoreTokenType
+        (static_cast<CJavaCertStoreTokenType*>(CJavaCertStoreTokenType::New2L()));
+        auto_ptr<CJavaCertStoreToken> certStoreToken
+        (CJavaCertStoreToken::New(0x1234,*certStoreTokenType.get()));
+
+        {
+            //# 2
+            //List certificates.
+            auto_ptr<CJavaCertStoreImpl> certStoreObj(CJavaCertStoreImpl::NewL(*certStoreToken.get()));
+            RMPointerArray<CCTCertInfo> certInfoArray;
+            auto_ptr<CCertAttributeFilter> attrFilter(TestUtils::GetFilterObj());
+            certStoreObj->List(certInfoArray,*attrFilter.get(),testExecutor->GetRequestStatus());
+            CActiveScheduler::Start();
+            CHECK(KErrNone == testExecutor->GetErrorCode());
+            CHECK(1 == certInfoArray.Count());
+
+            //# 3
+            //Getting apps associated to certificate.
+            RArray<TUid> uidList;
+            certStoreObj->Applications(*certInfoArray[0],uidList,testExecutor->GetRequestStatus());
+            testExecutor->Activate();
+            CActiveScheduler::Start();
+            CHECK(KErrNone == testExecutor->GetErrorCode());
+            CHECK(1 == uidList.Count());
+            CHECK(KMidletInstallApplicabilityUid == uidList[0]);
+            uidList.Close();
+
+            //# 4
+            //Providing list of active apps to plugin by SetApplicability() operation.
+            //List is empty in the disabling case.
+            RArray<TUid> uidList2;
+            certStoreObj->SetApplicability(*certInfoArray[0],uidList2,testExecutor->GetRequestStatus());
+            testExecutor->Activate();
+            CActiveScheduler::Start();
+            CHECK(KErrNone == testExecutor->GetErrorCode());
+            uidList2.Close();
+
+            //# 5
+            //Disabling certificate in the cert store by SetTrust() operation.
+            certStoreObj->SetTrust(*certInfoArray[0],ETrue,testExecutor->GetRequestStatus());
+            testExecutor->Activate();
+            CActiveScheduler::Start();
+            CHECK(KErrNone == testExecutor->GetErrorCode());
+
+            //# 6
+            //Verfying that Applications() operation returns empty list after disabling.
+            RArray<TUid> uidList3;
+            certStoreObj->Applications(*certInfoArray[0],uidList3,testExecutor->GetRequestStatus());
+            testExecutor->Activate();
+            CActiveScheduler::Start();
+            CHECK(KErrNone == testExecutor->GetErrorCode());
+            CHECK(0 == uidList3.Count());
+            certInfoArray.Close();
+            uidList3.Close();
+        }
+
+        {
+            //# 7
+            //Retrieve certificates through a new CJavaCertStoreImpl object.
+            auto_ptr<CJavaCertStoreImpl> certStoreObj(CJavaCertStoreImpl::NewL(*certStoreToken.get()));
+            RMPointerArray<CCTCertInfo> certInfoArray;
+            auto_ptr<CCertAttributeFilter> attrFilter(TestUtils::GetFilterObj());
+            certStoreObj->List(certInfoArray,*attrFilter.get(),testExecutor->GetRequestStatus());
+            testExecutor->Activate();
+            CActiveScheduler::Start();
+            CHECK(KErrNone == testExecutor->GetErrorCode());
+            CHECK(1 == certInfoArray.Count());
+
+            //# 8
+            //Check that Applications() operation returns empty list.
+            RArray<TUid> uidList;
+            certStoreObj->Applications(*certInfoArray[0],uidList,testExecutor->GetRequestStatus());
+            testExecutor->Activate();
+            CActiveScheduler::Start();
+            CHECK(KErrNone == testExecutor->GetErrorCode());
+            CHECK(0 == uidList.Count());
+            certInfoArray.Close();
+            uidList.Close();
+        }
+
+        printf("-testDisablingCert\n");
+    }
+    catch (TestFailedException& ex)
+    {
+        printf("testDisablingCert() ERROR: %s",ex.toString().c_str());
+        CHECK(false);
+    }
+    catch (...)
+    {
+        printf("testDisablingCert() Unexpected exception caught");
+        CHECK(false);
+    }
+}
+
+//
+// TEST CASE 3
+//
+TEST(ReadCerts,testEnablingCert)
+{
+    printf("+testEnablingCert\n");
+    try
+    {
+        //Starting java captain.
+        TestUtils::StartJavaCaptain();
+
+        //Stopping javacertstore extension plugin of the java captain.
+        CommsMsgSender commsMsgSender;
+        commsMsgSender.SendStopJavaCertStorePlugin();
+        sleep(2);
+
+        //Deleting all existing
+        auto_ptr<CTestData> testData(CTestData::NewL());
+        testData->DeleteTestDataL();
+
+        //# 1
+        //Create certificates + metadata.
+        list<CertMetaData> listOfCerts;
+        {
+            CertMetaData tmpObj(STATE_DISABLED,"enabledcert2",true,true,"2","content12");
+            listOfCerts.push_back(tmpObj);
+        }
+        testData->StoreTestData(listOfCerts);
+
+        auto_ptr<CTestExecutor> testExecutor(new CTestExecutor());
+        auto_ptr<CJavaCertStoreTokenType> certStoreTokenType
+        (static_cast<CJavaCertStoreTokenType*>(CJavaCertStoreTokenType::New2L()));
+        auto_ptr<CJavaCertStoreToken> certStoreToken
+        (CJavaCertStoreToken::New(0x1234,*certStoreTokenType.get()));
+
+        {
+            //# 2
+            //List certificates.
+            auto_ptr<CJavaCertStoreImpl> certStoreObj(CJavaCertStoreImpl::NewL(*certStoreToken.get()));
+            RMPointerArray<CCTCertInfo> certInfoArray;
+            auto_ptr<CCertAttributeFilter> attrFilter(TestUtils::GetFilterObj());
+            certStoreObj->List(certInfoArray,*attrFilter.get(),testExecutor->GetRequestStatus());
+            CActiveScheduler::Start();
+            CHECK(KErrNone == testExecutor->GetErrorCode());
+            CHECK(1 == certInfoArray.Count());
+
+            //# 3
+            //Getting apps associated to certificate. Returned list is empty because only cert
+            //has been already disabled.
+            RArray<TUid> uidList;
+            certStoreObj->Applications(*certInfoArray[0],uidList,testExecutor->GetRequestStatus());
+            testExecutor->Activate();
+            CActiveScheduler::Start();
+            CHECK(KErrNone == testExecutor->GetErrorCode());
+            CHECK(0 == uidList.Count());
+            uidList.Close();
+
+            //# 4
+            //Providing list of active apps to plugin by SetApplicability() operation.
+            RArray<TUid> uidList2;
+            uidList2.Append(KMidletInstallApplicabilityUid);
+            certStoreObj->SetApplicability(*certInfoArray[0],uidList2,testExecutor->GetRequestStatus());
+            testExecutor->Activate();
+            CActiveScheduler::Start();
+            CHECK(KErrNone == testExecutor->GetErrorCode());
+            uidList2.Close();
+
+            //# 5
+            //Verifing that Applications() operation appends active app to the list after enabling.
+            RArray<TUid> uidList3;
+            certStoreObj->Applications(*certInfoArray[0],uidList3,testExecutor->GetRequestStatus());
+            testExecutor->Activate();
+            CActiveScheduler::Start();
+            CHECK(KErrNone == testExecutor->GetErrorCode());
+            CHECK(1 == uidList3.Count());
+            CHECK(KMidletInstallApplicabilityUid == uidList3[0]);
+            certInfoArray.Close();
+            uidList3.Close();
+        }
+
+        {
+            //# 6
+            //Retrieve certificates through new CJavaCertStoreImpl object.
+            auto_ptr<CJavaCertStoreImpl> certStoreObj(CJavaCertStoreImpl::NewL(*certStoreToken.get()));
+            RMPointerArray<CCTCertInfo> certInfoArray;
+            auto_ptr<CCertAttributeFilter> attrFilter(TestUtils::GetFilterObj());
+            certStoreObj->List(certInfoArray,*attrFilter.get(),testExecutor->GetRequestStatus());
+            testExecutor->Activate();
+            CActiveScheduler::Start();
+            CHECK(KErrNone == testExecutor->GetErrorCode());
+            CHECK(1 == certInfoArray.Count());
+
+            //# 7
+            //Check that Applications() operation appends active app to the list.
+            RArray<TUid> uidList;
+            certStoreObj->Applications(*certInfoArray[0],uidList,testExecutor->GetRequestStatus());
+            testExecutor->Activate();
+            CActiveScheduler::Start();
+            CHECK(KErrNone == testExecutor->GetErrorCode());
+            CHECK(1 == uidList.Count());
+            CHECK(KMidletInstallApplicabilityUid == uidList[0]);
+            certInfoArray.Close();
+            uidList.Close();
+        }
+
+        printf("-testEnablingCert\n");
+    }
+    catch (TestFailedException& ex)
+    {
+        printf("testEnablingCert() ERROR: %s",ex.toString().c_str());
+        CHECK(false);
+    }
+    catch (...)
+    {
+        printf("testEnablingCert() Unexpected exception caught");
+        CHECK(false);
+    }
+}
+
+//
+// TEST CASE 4
+//
+TEST(ReadCerts,testDeletingCert)
+{
+    printf("+testDeletingCert\n");
+    try
+    {
+        //Starting java captain.
+        TestUtils::StartJavaCaptain();
+
+        //Stopping javacertstore extension plugin of the java captain.
+        CommsMsgSender commsMsgSender;
+        commsMsgSender.SendStopJavaCertStorePlugin();
+        sleep(2);
+
+        //Deleting all existing
+        auto_ptr<CTestData> testData(CTestData::NewL());
+        testData->DeleteTestDataL();
+
+        //# 1
+        //Create certificates + metadata.
+        list<CertMetaData> listOfCerts;
+        {
+            CertMetaData tmpObj(STATE_ENABLED,"enabledcert1",true,true,"1","content1");
+            listOfCerts.push_back(tmpObj);
+        }
+        {
+            CertMetaData tmpObj(STATE_ENABLED,"enabledcert2",true,true,"2","content12");
+            listOfCerts.push_back(tmpObj);
+        }
+        {
+            CertMetaData tmpObj(STATE_DISABLED,"disabledcert1",true,true,"3","content123");
+            listOfCerts.push_back(tmpObj);
+        }
+        testData->StoreTestData(listOfCerts);
+
+        auto_ptr<CTestExecutor> testExecutor(new CTestExecutor());
+        auto_ptr<CJavaCertStoreTokenType> certStoreTokenType
+        (static_cast<CJavaCertStoreTokenType*>(CJavaCertStoreTokenType::New2L()));
+        auto_ptr<CJavaCertStoreToken> certStoreToken
+        (CJavaCertStoreToken::New(0x1234,*certStoreTokenType.get()));
+
+        {
+            //# 2
+            //List certificates.
+            auto_ptr<CJavaCertStoreImpl> certStoreObj(CJavaCertStoreImpl::NewL(*certStoreToken.get()));
+            RMPointerArray<CCTCertInfo> certInfoArray;
+            auto_ptr<CCertAttributeFilter> attrFilter(TestUtils::GetFilterObj());
+            certStoreObj->List(certInfoArray,*attrFilter.get(),testExecutor->GetRequestStatus());
+            CActiveScheduler::Start();
+            CHECK(KErrNone == testExecutor->GetErrorCode());
+            CHECK(3 == certInfoArray.Count());
+
+            //# 3
+            //Remove first cert.
+            certStoreObj->Remove(*certInfoArray[0],testExecutor->GetRequestStatus());
+            testExecutor->Activate();
+            CActiveScheduler::Start();
+            CHECK(KErrNone == testExecutor->GetErrorCode());
+            certInfoArray.Close();
+
+            //# 4
+            //List certificates. Only two should be returned by List() operation.
+            //certInfoArray.ResetAndDestroy();
+            RMPointerArray<CCTCertInfo> certInfoArray2;
+            certStoreObj->List(certInfoArray2,*attrFilter.get(),testExecutor->GetRequestStatus());
+            testExecutor->Activate();
+            CActiveScheduler::Start();
+            CHECK(KErrNone == testExecutor->GetErrorCode());
+            CHECK(2 == certInfoArray2.Count());
+
+            //# 5
+            //Remove second cert.
+            certStoreObj->Remove(*certInfoArray2[0],testExecutor->GetRequestStatus());
+            testExecutor->Activate();
+            CActiveScheduler::Start();
+            CHECK(KErrNone == testExecutor->GetErrorCode());
+            certInfoArray2.Close();
+
+            //# 6
+            //List certificates. Only one should be returned by List() operation.
+            //certInfoArray.ResetAndDestroy();
+            RMPointerArray<CCTCertInfo> certInfoArray3;
+            certStoreObj->List(certInfoArray3,*attrFilter.get(),testExecutor->GetRequestStatus());
+            testExecutor->Activate();
+            CActiveScheduler::Start();
+            CHECK(KErrNone == testExecutor->GetErrorCode());
+            CHECK(1 == certInfoArray3.Count());
+
+            //# 7
+            //Remove last cert.
+            certStoreObj->Remove(*certInfoArray3[0],testExecutor->GetRequestStatus());
+            testExecutor->Activate();
+            CActiveScheduler::Start();
+            CHECK(KErrNone == testExecutor->GetErrorCode());
+            certInfoArray3.Close();
+
+            //# 8
+            //List certificates. Only one should be returned by List() operation.
+            //certInfoArray.ResetAndDestroy();
+            RMPointerArray<CCTCertInfo> certInfoArray4;
+            certStoreObj->List(certInfoArray4,*attrFilter.get(),testExecutor->GetRequestStatus());
+            testExecutor->Activate();
+            CActiveScheduler::Start();
+            CHECK(KErrNone == testExecutor->GetErrorCode());
+            CHECK(0 == certInfoArray4.Count());
+            certInfoArray4.Close();
+        }
+
+        printf("-testDeletingCert\n");
+    }
+    catch (TestFailedException& ex)
+    {
+        printf("testDeletingCert() ERROR: %s",ex.toString().c_str());
+        CHECK(false);
+    }
+    catch (...)
+    {
+        printf("testDeletingCert() Unexpected exception caught");
+        CHECK(false);
+    }
+}
+
+//
+// TEST CASE 5
+//
+TEST(ReadCerts,testsForValidateCertAttrFilter)
+{
+    printf("+testsForValidateCertAttrFilter\n");
+    try
+    {
+        //Starting java captain.
+        TestUtils::StartJavaCaptain();
+
+        //Stopping javacertstore extension plugin of the java captain.
+        CommsMsgSender commsMsgSender;
+        commsMsgSender.SendStopJavaCertStorePlugin();
+        sleep(2);
+
+        //Deleting all existing
+        auto_ptr<CTestData> testData(CTestData::NewL());
+        testData->DeleteTestDataL();
+
+        auto_ptr<CTestExecutor> testExecutor(new CTestExecutor());
+        auto_ptr<CJavaCertStoreTokenType> certStoreTokenType
+        (static_cast<CJavaCertStoreTokenType*>(CJavaCertStoreTokenType::New2L()));
+        auto_ptr<CJavaCertStoreToken> certStoreToken
+        (CJavaCertStoreToken::New(0x1234,*certStoreTokenType.get()));
+        auto_ptr<CJavaCertStoreImpl> certStoreObj(CJavaCertStoreImpl::NewL(*certStoreToken.get()));
+
+        //# 1
+        //Not supported uid(0x101F9B29).
+        {
+            RMPointerArray<CCTCertInfo> certInfoArray;
+            std::auto_ptr< CCertAttributeFilter> filterObj(CCertAttributeFilter::NewL());
+            TUid uid = TUid::Uid(0x101F9B29);
+            filterObj->SetUid(uid);
+            filterObj->SetFormat(EX509Certificate);
+            filterObj->SetOwnerType(ECACertificate);
+            filterObj->SetLabel(KMIDP2TrustRoot());
+            certStoreObj->List(certInfoArray,*filterObj.get(),testExecutor->GetRequestStatus());
+            CActiveScheduler::Start();
+            CHECK(KErrNone == testExecutor->GetErrorCode());
+            CHECK(0 == certInfoArray.Count());
+            certInfoArray.Close();
+        }
+
+        //# 2
+        //Not supported certificate format(EWTLSCertificate).
+        {
+            RMPointerArray<CCTCertInfo> certInfoArray;
+            std::auto_ptr< CCertAttributeFilter> filterObj(CCertAttributeFilter::NewL());
+            filterObj->SetUid(KMidletInstallApplicabilityUid);
+            filterObj->SetFormat(EWTLSCertificate);
+            filterObj->SetOwnerType(ECACertificate);
+            filterObj->SetLabel(KMIDP2TrustRoot());
+            certStoreObj->List(certInfoArray,*filterObj.get(),testExecutor->GetRequestStatus());
+            testExecutor->Activate();
+            CActiveScheduler::Start();
+            CHECK(KErrNone == testExecutor->GetErrorCode());
+            CHECK(0 == certInfoArray.Count());
+            certInfoArray.Close();
+        }
+
+        //# 3
+        //Not supported owner type(EUserCertificate).
+        {
+            RMPointerArray<CCTCertInfo> certInfoArray;
+            std::auto_ptr< CCertAttributeFilter> filterObj(CCertAttributeFilter::NewL());
+            filterObj->SetUid(KMidletInstallApplicabilityUid);
+            filterObj->SetFormat(EX509Certificate);
+            filterObj->SetOwnerType(EUserCertificate);
+            filterObj->SetLabel(KMIDP2TrustRoot());
+            certStoreObj->List(certInfoArray,*filterObj.get(),testExecutor->GetRequestStatus());
+            testExecutor->Activate();
+            CActiveScheduler::Start();
+            CHECK(KErrNone == testExecutor->GetErrorCode());
+            CHECK(0 == certInfoArray.Count());
+            certInfoArray.Close();
+        }
+
+        //# 4
+        //Adding subject key to filter object.
+        {
+            RMPointerArray<CCTCertInfo> certInfoArray;
+            std::auto_ptr< CCertAttributeFilter> filterObj(CCertAttributeFilter::NewL());
+            filterObj->SetUid(KMidletInstallApplicabilityUid);
+            filterObj->SetFormat(EX509Certificate);
+            filterObj->SetOwnerType(ECACertificate);
+            filterObj->SetLabel(KMIDP2TrustRoot());
+            TKeyIdentifier keyIdent = _L8("blaah");
+            filterObj->SetSubjectKeyId(keyIdent);
+            certStoreObj->List(certInfoArray,*filterObj.get(),testExecutor->GetRequestStatus());
+            testExecutor->Activate();
+            CActiveScheduler::Start();
+            CHECK(KErrNone == testExecutor->GetErrorCode());
+            CHECK(0 == certInfoArray.Count());
+            certInfoArray.Close();
+        }
+
+        //# 5
+        //Adding issuer key to filter object.
+        {
+            RMPointerArray<CCTCertInfo> certInfoArray;
+            std::auto_ptr< CCertAttributeFilter> filterObj(CCertAttributeFilter::NewL());
+            filterObj->SetUid(KMidletInstallApplicabilityUid);
+            filterObj->SetFormat(EX509Certificate);
+            filterObj->SetOwnerType(ECACertificate);
+            filterObj->SetLabel(KMIDP2TrustRoot());
+            TKeyIdentifier keyIdent = _L8("blaah");
+            filterObj->SetIssuerKeyId(keyIdent);
+            certStoreObj->List(certInfoArray,*filterObj.get(),testExecutor->GetRequestStatus());
+            testExecutor->Activate();
+            CActiveScheduler::Start();
+            CHECK(KErrNone == testExecutor->GetErrorCode());
+            CHECK(0 == certInfoArray.Count());
+            certInfoArray.Close();
+        }
+
+        //# 6
+        //Not supported label.
+        {
+            RMPointerArray<CCTCertInfo> certInfoArray;
+            std::auto_ptr< CCertAttributeFilter> filterObj(CCertAttributeFilter::NewL());
+            filterObj->SetUid(KMidletInstallApplicabilityUid);
+            filterObj->SetFormat(EX509Certificate);
+            filterObj->SetOwnerType(ECACertificate);
+            filterObj->SetLabel(_L("blaah"));
+            certStoreObj->List(certInfoArray,*filterObj.get(),testExecutor->GetRequestStatus());
+            testExecutor->Activate();
+            CActiveScheduler::Start();
+            CHECK(KErrNone == testExecutor->GetErrorCode());
+            CHECK(0 == certInfoArray.Count());
+            certInfoArray.Close();
+        }
+
+        printf("-testsForValidateCertAttrFilter\n");
+    }
+    catch (TestFailedException& ex)
+    {
+        printf("testsForValidateCertAttrFilter() ERROR: %s",ex.toString().c_str());
+        CHECK(false);
+    }
+    catch (...)
+    {
+        printf("testsForValidateCertAttrFilter() Unexpected exception caught");
+        CHECK(false);
+    }
+}
+
+//
+// TEST CASE 6
+//
+TEST(ReadCerts,errorCasesForList)
+{
+    printf("+errorCasesForList\n");
+    try
+    {
+        //Starting java captain.
+        TestUtils::StartJavaCaptain();
+
+        //Stopping javacertstore extension plugin of the java captain.
+        CommsMsgSender commsMsgSender;
+        commsMsgSender.SendStopJavaCertStorePlugin();
+        sleep(2);
+
+        //Deleting all existing
+        auto_ptr<CTestData> testData(CTestData::NewL());
+        testData->DeleteTestDataL();
+
+        auto_ptr<CTestExecutor> testExecutor(new CTestExecutor());
+        auto_ptr<CJavaCertStoreTokenType> certStoreTokenType
+        (static_cast<CJavaCertStoreTokenType*>(CJavaCertStoreTokenType::New2L()));
+        auto_ptr<CJavaCertStoreToken> certStoreToken
+        (CJavaCertStoreToken::New(0x1234,*certStoreTokenType.get()));
+        auto_ptr<CJavaCertStoreImpl> certStoreObj(CJavaCertStoreImpl::NewL(*certStoreToken.get()));
+        auto_ptr<CCertAttributeFilter> attrFilter(TestUtils::GetFilterObj());
+
+        {
+            //# 1
+            //Calling List() operation two times in the row.
+            RMPointerArray<CCTCertInfo> certInfoArray1;
+            RMPointerArray<CCTCertInfo> certInfoArray2;
+            auto_ptr<CTestExecutor> testExecutor2(new CTestExecutor());
+            certStoreObj->List(certInfoArray1,*attrFilter.get(),testExecutor2->GetRequestStatus());
+            auto_ptr<CTestExecutor> testExecutor3(new CTestExecutor());
+            certStoreObj->List(certInfoArray2,*attrFilter.get(),testExecutor3->GetRequestStatus());
+            certStoreObj->CancelList();
+            certInfoArray1.Close();
+            certInfoArray2.Close();
+        }
+
+        {
+            //# 2
+            //Calling CancelList() immediately after List() operation.
+            RMPointerArray<CCTCertInfo> certInfoArray1;
+            certStoreObj->List(certInfoArray1,*attrFilter.get(),testExecutor->GetRequestStatus());
+            certStoreObj->CancelList();
+            CActiveScheduler::Start();
+            CHECK(KErrCancel == testExecutor->GetErrorCode());
+            certInfoArray1.Close();
+        }
+
+        printf("-errorCasesForList\n");
+    }
+    catch (TestFailedException& ex)
+    {
+        printf("errorCasesForList() ERROR: %s",ex.toString().c_str());
+        CHECK(false);
+    }
+    catch (...)
+    {
+        printf("errorCasesForList() Unexpected exception caught");
+        CHECK(false);
+    }
+}
+
+//
+// TEST CASE 7
+//
+TEST(ReadCerts,errorCasesForAdd)
+{
+    printf("+errorCasesForAdd\n");
+    try
+    {
+        //Starting java captain.
+        TestUtils::StartJavaCaptain();
+
+        //Stopping javacertstore extension plugin of the java captain.
+        CommsMsgSender commsMsgSender;
+        commsMsgSender.SendStopJavaCertStorePlugin();
+        sleep(2);
+
+        //Deleting all existing
+        auto_ptr<CTestData> testData(CTestData::NewL());
+        testData->DeleteTestDataL();
+
+        auto_ptr<CTestExecutor> testExecutor(new CTestExecutor());
+        auto_ptr<CJavaCertStoreTokenType> certStoreTokenType
+        (static_cast<CJavaCertStoreTokenType*>(CJavaCertStoreTokenType::New2L()));
+        auto_ptr<CJavaCertStoreToken> certStoreToken
+        (CJavaCertStoreToken::New(0x1234,*certStoreTokenType.get()));
+        auto_ptr<CJavaCertStoreImpl> certStoreObj(CJavaCertStoreImpl::NewL(*certStoreToken.get()));
+        auto_ptr<CCertAttributeFilter> attrFilter(TestUtils::GetFilterObj());
+
+        {
+            //# 1
+            //Calling not supported Add() operation.
+            certStoreObj->Add(_L("someLabel"),EX509Certificate,ECACertificate,NULL,NULL,_L8("some"),
+                              testExecutor->GetRequestStatus());
+            CActiveScheduler::Start();
+            CHECK(KErrNotSupported == testExecutor->GetErrorCode());
+        }
+
+        printf("-errorCasesForAdd\n");
+    }
+    catch (TestFailedException& ex)
+    {
+        printf("errorCasesForAdd() ERROR: %s",ex.toString().c_str());
+        CHECK(false);
+    }
+    catch (...)
+    {
+        printf("errorCasesForAdd() Unexpected exception caught");
+        CHECK(false);
+    }
+}
+
+//
+// TEST CASE 8
+//
+TEST(ReadCerts,errorCasesForRemove)
+{
+    printf("+errorCasesForRemove\n");
+    try
+    {
+        //Starting java captain.
+        TestUtils::StartJavaCaptain();
+
+        //Stopping javacertstore extension plugin of the java captain.
+        CommsMsgSender commsMsgSender;
+        commsMsgSender.SendStopJavaCertStorePlugin();
+        sleep(2);
+
+        //Deleting all existing
+        auto_ptr<CTestData> testData(CTestData::NewL());
+        testData->DeleteTestDataL();
+
+        //# 1
+        //Create certificates + metadata.
+        list<CertMetaData> listOfCerts;
+        {
+            CertMetaData tmpObj(STATE_ENABLED,"enabledcert1",false,true,"1","content1");
+            listOfCerts.push_back(tmpObj);
+        }
+        testData->StoreTestData(listOfCerts);
+
+        auto_ptr<CTestExecutor> testExecutor(new CTestExecutor());
+        auto_ptr<CJavaCertStoreTokenType> certStoreTokenType
+        (static_cast<CJavaCertStoreTokenType*>(CJavaCertStoreTokenType::New2L()));
+        auto_ptr<CJavaCertStoreToken> certStoreToken
+        (CJavaCertStoreToken::New(0x1234,*certStoreTokenType.get()));
+        auto_ptr<CJavaCertStoreImpl> certStoreObj(CJavaCertStoreImpl::NewL(*certStoreToken.get()));
+        auto_ptr<CCertAttributeFilter> attrFilter(TestUtils::GetFilterObj());
+
+        RMPointerArray<CCTCertInfo> certInfoArray;
+        {
+            //# 2
+            //List certificates.
+            certStoreObj->List(certInfoArray,*attrFilter.get(),testExecutor->GetRequestStatus());
+            CActiveScheduler::Start();
+            CHECK(KErrNone == testExecutor->GetErrorCode());
+            CHECK(1 == certInfoArray.Count());
+        }
+
+        {
+            //# 3
+            //Passing CCTCertInfo object, which does not match to any cert, as argument to
+            //Remove() operation.
+            CCTCertInfo* certInfo(CCTCertInfo::NewL(KMIDP2TrustRoot,EX509Certificate,
+                                                    ECACertificate,10,NULL,NULL,
+                                                    certStoreObj->Token(),2,true));
+            certStoreObj->Remove(*certInfo,testExecutor->GetRequestStatus());
+            testExecutor->Activate();
+            CActiveScheduler::Start();
+            CHECK(KErrArgument == testExecutor->GetErrorCode());
+            certInfo->Release();
+        }
+
+        {
+            //# 4
+            //Passing CCTCertInfo object, which points to non-deletable, as argument to
+            //Remove() operation.
+            certStoreObj->Remove(*certInfoArray[0],testExecutor->GetRequestStatus());
+            testExecutor->Activate();
+            CActiveScheduler::Start();
+            CHECK(KErrArgument == testExecutor->GetErrorCode());
+        }
+        certInfoArray.Close();
+
+        printf("-errorCasesForRemove\n");
+    }
+    catch (TestFailedException& ex)
+    {
+        printf("errorCasesForRemove() ERROR: %s",ex.toString().c_str());
+        CHECK(false);
+    }
+    catch (...)
+    {
+        printf("errorCasesForRemove() Unexpected exception caught");
+        CHECK(false);
+    }
+}
+
+//
+// TEST CASE 9
+//
+TEST(ReadCerts,testsForSetTrust)
+{
+    printf("+testsForSetTrust\n");
+
+    try
+    {
+        //Starting java captain.
+        TestUtils::StartJavaCaptain();
+
+        //Stopping javacertstore extension plugin of the java captain.
+        CommsMsgSender commsMsgSender;
+        commsMsgSender.SendStopJavaCertStorePlugin();
+        sleep(2);
+
+        //Deleting all existing
+        auto_ptr<CTestData> testData(CTestData::NewL());
+        testData->DeleteTestDataL();
+
+        //# 1
+        //Create certificates + metadata.
+        list<CertMetaData> listOfCerts;
+        {
+            CertMetaData tmpObj(STATE_ENABLED,"enabledcert1",true,false,"1","content1");
+            listOfCerts.push_back(tmpObj);
+        }
+        testData->StoreTestData(listOfCerts);
+
+        auto_ptr<CTestExecutor> testExecutor(new CTestExecutor());
+        auto_ptr<CJavaCertStoreTokenType> certStoreTokenType
+        (static_cast<CJavaCertStoreTokenType*>(CJavaCertStoreTokenType::New2L()));
+        auto_ptr<CJavaCertStoreToken> certStoreToken
+        (CJavaCertStoreToken::New(0x1234,*certStoreTokenType.get()));
+        auto_ptr<CJavaCertStoreImpl> certStoreObj(CJavaCertStoreImpl::NewL(*certStoreToken.get()));
+        auto_ptr<CCertAttributeFilter> attrFilter(TestUtils::GetFilterObj());
+
+        {
+            //# 2
+            //Passing CCTCertInfo object, which does not match to any cert, as argument to
+            //SetTrust() operation.
+            CCTCertInfo* certInfo(CCTCertInfo::NewL(KMIDP2TrustRoot,EX509Certificate,
+                                                    ECACertificate,10,NULL,NULL,
+                                                    certStoreObj->Token(),2,true));
+            certStoreObj->SetTrust(*certInfo,ETrue,testExecutor->GetRequestStatus());
+            CActiveScheduler::Start();
+            CHECK(KErrArgument == testExecutor->GetErrorCode());
+            certInfo->Release();
+        }
+
+        {
+            //# 3
+            //Try to set trusted cert to non-trusted.
+            ////Try to disable cert which is not allowed to disable.
+            RMPointerArray<CCTCertInfo> certInfoArray;
+            certStoreObj->List(certInfoArray,*attrFilter.get(),testExecutor->GetRequestStatus());
+            testExecutor->Activate();
+            CActiveScheduler::Start();
+            CHECK(KErrNone == testExecutor->GetErrorCode());
+            CHECK(1 == certInfoArray.Count());
+
+            certStoreObj->SetTrust(*certInfoArray[0],EFalse,testExecutor->GetRequestStatus());
+            testExecutor->Activate();
+            CActiveScheduler::Start();
+            CHECK(KErrArgument == testExecutor->GetErrorCode());
+            certInfoArray.Close();
+        }
+
+        printf("-testsForSetTrust\n");
+    }
+    catch (TestFailedException& ex)
+    {
+        printf("testsForSetTrust() ERROR: %s",ex.toString().c_str());
+        CHECK(false);
+    }
+    catch (...)
+    {
+        printf("testsForSetTrust() Unexpected exception caught");
+        CHECK(false);
+    }
+}
+
+//
+// TEST CASE 10
+//
+TEST(ReadCerts,testsForGetCert)
+{
+    printf("+testsForGetCert\n");
+
+    try
+    {
+        //Starting java captain.
+        TestUtils::StartJavaCaptain();
+
+        //Stopping javacertstore extension plugin of the java captain.
+        CommsMsgSender commsMsgSender;
+        commsMsgSender.SendStopJavaCertStorePlugin();
+        sleep(2);
+
+        //Deleting all existing
+        auto_ptr<CTestData> testData(CTestData::NewL());
+        testData->DeleteTestDataL();
+
+        //# 1
+        //Create certificates + metadata.
+        list<CertMetaData> listOfCerts;
+        {
+            CertMetaData tmpObj(STATE_ENABLED,"enabledcert1",false,true,"1","content1");
+            listOfCerts.push_back(tmpObj);
+        }
+        testData->StoreTestData(listOfCerts);
+
+        auto_ptr<CTestExecutor> testExecutor(new CTestExecutor());
+        auto_ptr<CJavaCertStoreTokenType> certStoreTokenType
+        (static_cast<CJavaCertStoreTokenType*>(CJavaCertStoreTokenType::New2L()));
+        auto_ptr<CJavaCertStoreToken> certStoreToken
+        (CJavaCertStoreToken::New(0x1234,*certStoreTokenType.get()));
+        auto_ptr<CJavaCertStoreImpl> certStoreObj(CJavaCertStoreImpl::NewL(*certStoreToken.get()));
+        auto_ptr<CCertAttributeFilter> attrFilter(TestUtils::GetFilterObj());
+
+        {
+            //# 2
+            //Try to retrieve CCTCertInfo using non-existing handle.
+            CCTCertInfo* retCert = NULL;
+            TCTTokenHandle tmpObj;
+            TCTTokenObjectHandle tmpHandle(tmpObj,2);
+            certStoreObj->GetCert(retCert,tmpHandle,testExecutor->GetRequestStatus());
+            CActiveScheduler::Start();
+            CHECK(KErrArgument == testExecutor->GetErrorCode());
+        }
+
+        {
+            //# 3
+            //Get CCTCertInfo object by TCTTokenObjectHandle.
+            RMPointerArray<CCTCertInfo> certInfoArray;
+            auto_ptr<CCertAttributeFilter> attrFilter(TestUtils::GetFilterObj());
+            certStoreObj->List(certInfoArray,*attrFilter.get(),testExecutor->GetRequestStatus());
+            testExecutor->Activate();
+            CActiveScheduler::Start();
+            CHECK(KErrNone == testExecutor->GetErrorCode());
+            CHECK(1 == certInfoArray.Count());
+
+            CCTCertInfo* retCert = NULL;
+            TCTTokenHandle tmpObj;
+            TCTTokenObjectHandle tmpHandle(tmpObj,0);
+            certStoreObj->GetCert(retCert,tmpHandle,testExecutor->GetRequestStatus());
+            testExecutor->Activate();
+            CActiveScheduler::Start();
+            CHECK(KErrNone == testExecutor->GetErrorCode());
+            CHECK(8 != retCert->Size());
+            certInfoArray.Close();
+            retCert->Release();
+        }
+
+        printf("-testsForGetCert\n");
+    }
+    catch (TestFailedException& ex)
+    {
+        printf("testsForGetCert() ERROR: %s",ex.toString().c_str());
+        CHECK(false);
+    }
+    catch (...)
+    {
+        printf("testsForGetCert() Unexpected exception caught");
+        CHECK(false);
+    }
+}
+
+//
+// TEST CASE 11
+//
+TEST(ReadCerts,errorCasesForApplications)
+{
+    printf("+errorCasesForApplications\n");
+
+    try
+    {
+
+        //Starting java captain.
+        TestUtils::StartJavaCaptain();
+
+        //Stopping javacertstore extension plugin of the java captain.
+        CommsMsgSender commsMsgSender;
+        commsMsgSender.SendStopJavaCertStorePlugin();
+        sleep(2);
+
+        //Deleting all existing
+        auto_ptr<CTestData> testData(CTestData::NewL());
+        testData->DeleteTestDataL();
+
+        auto_ptr<CTestExecutor> testExecutor(new CTestExecutor());
+        auto_ptr<CJavaCertStoreTokenType> certStoreTokenType
+        (static_cast<CJavaCertStoreTokenType*>(CJavaCertStoreTokenType::New2L()));
+        auto_ptr<CJavaCertStoreToken> certStoreToken
+        (CJavaCertStoreToken::New(0x1234,*certStoreTokenType.get()));
+        auto_ptr<CJavaCertStoreImpl> certStoreObj(CJavaCertStoreImpl::NewL(*certStoreToken.get()));
+        auto_ptr<CCertAttributeFilter> attrFilter(TestUtils::GetFilterObj());
+
+        //# 1
+        //Pass CCTCertInfo object, which does not match to any cert, as argument to
+        //Applications() operation.
+        CCTCertInfo* certInfo(CCTCertInfo::NewL(KMIDP2TrustRoot,EX509Certificate,
+                                                ECACertificate,10,NULL,NULL,
+                                                certStoreObj->Token(),2,true));
+        RArray<TUid> uidList;
+        certStoreObj->Applications(*certInfo,uidList,testExecutor->GetRequestStatus());
+        CActiveScheduler::Start();
+        CHECK(KErrArgument == testExecutor->GetErrorCode());
+        certInfo->Release();
+
+        printf("-errorCasesForApplications\n");
+    }
+    catch (TestFailedException& ex)
+    {
+        printf("errorCasesForApplications() ERROR: %s",ex.toString().c_str());
+        CHECK(false);
+    }
+    catch (...)
+    {
+        printf("errorCasesForApplications() Unexpected exception caught");
+        CHECK(false);
+    }
+}
+
+//
+// TEST CASE 12
+//
+TEST(ReadCerts,testCasesForIsApplicable)
+{
+    printf("+testCasesForIsApplicable\n");
+
+    try
+    {
+        //Starting java captain.
+        TestUtils::StartJavaCaptain();
+
+        //Stopping javacertstore extension plugin of the java captain.
+        CommsMsgSender commsMsgSender;
+        commsMsgSender.SendStopJavaCertStorePlugin();
+        sleep(2);
+
+        //Deleting all existing
+        auto_ptr<CTestData> testData(CTestData::NewL());
+        testData->DeleteTestDataL();
+
+        //# 1
+        //Create certificates + metadata.
+        list<CertMetaData> listOfCerts;
+        {
+            CertMetaData tmpObj(STATE_DISABLED,"disabledcert1",true,true,"1","content1");
+            listOfCerts.push_back(tmpObj);
+        }
+        {
+            CertMetaData tmpObj(STATE_ENABLED,"enabledcert1",true,true,"2","content12");
+            listOfCerts.push_back(tmpObj);
+        }
+        testData->StoreTestData(listOfCerts);
+
+        auto_ptr<CTestExecutor> testExecutor(new CTestExecutor());
+        auto_ptr<CJavaCertStoreTokenType> certStoreTokenType
+        (static_cast<CJavaCertStoreTokenType*>(CJavaCertStoreTokenType::New2L()));
+        auto_ptr<CJavaCertStoreToken> certStoreToken
+        (CJavaCertStoreToken::New(0x1234,*certStoreTokenType.get()));
+        auto_ptr<CJavaCertStoreImpl> certStoreObj(CJavaCertStoreImpl::NewL(*certStoreToken.get()));
+        auto_ptr<CCertAttributeFilter> attrFilter(TestUtils::GetFilterObj());
+
+        {
+            //# 2
+            //Passing incorrect Uid as argument to IsApplicable() operation.
+            CCTCertInfo* certInfo(CCTCertInfo::NewL(KMIDP2TrustRoot,EX509Certificate,
+                                                    ECACertificate,10,NULL,NULL,
+                                                    certStoreObj->Token(),2,true));
+            TUid tmpUid = TUid::Uid(0x101F9B);
+            TBool isApplicable;
+            certStoreObj->IsApplicable(*certInfo,tmpUid,isApplicable,testExecutor->GetRequestStatus());
+            CActiveScheduler::Start();
+            CHECK(KErrNone == testExecutor->GetErrorCode());
+            if (isApplicable)
+                CHECK(false);
+            certInfo->Release();
+        }
+
+        {
+            //# 3
+            //Pass CCTCertInfo object, which does not match to any cert, as argument to
+            //IsApplicable() operation.
+            CCTCertInfo* certInfo(CCTCertInfo::NewL(KMIDP2TrustRoot,EX509Certificate,
+                                                    ECACertificate,10,NULL,NULL,
+                                                    certStoreObj->Token(),2,true));
+            TBool isApplicable;
+            certStoreObj->IsApplicable(*certInfo,KMidletInstallApplicabilityUid,
+                                       isApplicable,testExecutor->GetRequestStatus());
+            testExecutor->Activate();
+            CActiveScheduler::Start();
+            CHECK(KErrArgument == testExecutor->GetErrorCode());
+            certInfo->Release();
+        }
+
+        {
+            //# 4
+            //Ask applicability of disabled cert.
+            RMPointerArray<CCTCertInfo> certInfoArray;
+            testExecutor->Activate();
+            certStoreObj->List(certInfoArray,*attrFilter.get(),testExecutor->GetRequestStatus());
+            //testExecutor->Activate();
+            CActiveScheduler::Start();
+            CHECK(KErrNone == testExecutor->GetErrorCode());
+            CHECK(2 == certInfoArray.Count());
+
+            TBool isApplicable = ETrue;
+            certStoreObj->IsApplicable(*certInfoArray[1],KMidletInstallApplicabilityUid,
+                                       isApplicable,testExecutor->GetRequestStatus());
+            testExecutor->Activate();
+            CActiveScheduler::Start();
+            CHECK(KErrNone == testExecutor->GetErrorCode());
+            if (isApplicable)
+                CHECK(false);
+
+            //# 5
+            //Delete cert.
+            certStoreObj->Remove(*certInfoArray[1],testExecutor->GetRequestStatus());
+            testExecutor->Activate();
+            CActiveScheduler::Start();
+            CHECK(KErrNone == testExecutor->GetErrorCode());
+
+            //# 6
+            //Ask applicability of deleted cert.
+            isApplicable = ETrue;
+            certStoreObj->IsApplicable(*certInfoArray[1],KMidletInstallApplicabilityUid,
+                                       isApplicable,testExecutor->GetRequestStatus());
+            testExecutor->Activate();
+            CActiveScheduler::Start();
+            CHECK(KErrNone == testExecutor->GetErrorCode());
+            if (isApplicable)
+                CHECK(false);
+
+            //# 7
+            //Ask applicability of enabled cert.
+            isApplicable = EFalse;
+            certStoreObj->IsApplicable(*certInfoArray[0],KMidletInstallApplicabilityUid,
+                                       isApplicable,testExecutor->GetRequestStatus());
+            testExecutor->Activate();
+            CActiveScheduler::Start();
+            CHECK(KErrNone == testExecutor->GetErrorCode());
+            if (!isApplicable)
+                CHECK(false);
+            certInfoArray.Close();
+        }
+
+        printf("-testCasesForIsApplicable\n");
+    }
+    catch (TestFailedException& ex)
+    {
+        printf("testCasesForIsApplicable() ERROR: %s",ex.toString().c_str());
+        CHECK(false);
+    }
+    catch (...)
+    {
+        printf("testCasesForIsApplicable() Unexpected exception caught");
+        CHECK(false);
+    }
+}
+
+//
+// TEST CASE 13
+//
+TEST(ReadCerts,testCasesForTrusted)
+{
+    printf("+testCasesForTrusted\n");
+
+    try
+    {
+        //Starting java captain.
+        TestUtils::StartJavaCaptain();
+
+        //Stopping javacertstore extension plugin of the java captain.
+        CommsMsgSender commsMsgSender;
+        commsMsgSender.SendStopJavaCertStorePlugin();
+        sleep(2);
+
+        //Deleting all existing
+        auto_ptr<CTestData> testData(CTestData::NewL());
+        testData->DeleteTestDataL();
+
+        //# 1
+        //Create certificates + metadata.
+        list<CertMetaData> listOfCerts;
+        {
+            CertMetaData tmpObj(STATE_ENABLED,"enabledcert1",true,true,"1","content1");
+            listOfCerts.push_back(tmpObj);
+        }
+        testData->StoreTestData(listOfCerts);
+
+        auto_ptr<CTestExecutor> testExecutor(new CTestExecutor());
+        auto_ptr<CJavaCertStoreTokenType> certStoreTokenType
+        (static_cast<CJavaCertStoreTokenType*>(CJavaCertStoreTokenType::New2L()));
+        auto_ptr<CJavaCertStoreToken> certStoreToken
+        (CJavaCertStoreToken::New(0x1234,*certStoreTokenType.get()));
+        auto_ptr<CJavaCertStoreImpl> certStoreObj(CJavaCertStoreImpl::NewL(*certStoreToken.get()));
+        auto_ptr<CCertAttributeFilter> attrFilter(TestUtils::GetFilterObj());
+
+        {
+            //# 2
+            //Passing CCTCertInfo object, which does not point to any cert,
+            //as argument to Trusted() operation.
+            CCTCertInfo* certInfo(CCTCertInfo::NewL(KMIDP2TrustRoot,EX509Certificate,
+                                                    ECACertificate,10,NULL,NULL,
+                                                    certStoreObj->Token(),2,true));
+            TBool retFlag;
+            certStoreObj->Trusted(*certInfo,retFlag,testExecutor->GetRequestStatus());
+            CActiveScheduler::Start();
+            CHECK(KErrArgument == testExecutor->GetErrorCode());
+            if (!retFlag)
+            {
+                CHECK(false);
+            }
+            certInfo->Release();
+        }
+
+        {
+            //# 3
+            //Passing valid CCTCertInfo object as argument to Trusted() operation.
+            RMPointerArray<CCTCertInfo> certInfoArray;
+            auto_ptr<CCertAttributeFilter> attrFilter(TestUtils::GetFilterObj());
+            certStoreObj->List(certInfoArray,*attrFilter.get(),testExecutor->GetRequestStatus());
+            testExecutor->Activate();
+            CActiveScheduler::Start();
+            CHECK(KErrNone == testExecutor->GetErrorCode());
+            CHECK(1 == certInfoArray.Count());
+
+            TBool retFlag;
+            certStoreObj->Trusted(*certInfoArray[0],retFlag,testExecutor->GetRequestStatus());
+            testExecutor->Activate();
+            CActiveScheduler::Start();
+            CHECK(KErrNone == testExecutor->GetErrorCode());
+            CHECK(retFlag);
+
+            //# 4
+            //Deleting cert.
+            certStoreObj->Remove(*certInfoArray[0],testExecutor->GetRequestStatus());
+            testExecutor->Activate();
+            CActiveScheduler::Start();
+            CHECK(KErrNone == testExecutor->GetErrorCode());
+
+            //# 5
+            //Call Trusted() to deleted cert.
+            certStoreObj->Trusted(*certInfoArray[0],retFlag,testExecutor->GetRequestStatus());
+            testExecutor->Activate();
+            CActiveScheduler::Start();
+            CHECK(KErrArgument == testExecutor->GetErrorCode());
+
+            certInfoArray.Close();
+        }
+
+        printf("-testCasesForTrusted\n");
+    }
+    catch (TestFailedException& ex)
+    {
+        printf("testCasesForTrusted() ERROR: %s",ex.toString().c_str());
+        CHECK(false);
+    }
+    catch (...)
+    {
+        printf("testCasesForTrusted() Unexpected exception caught");
+        CHECK(false);
+    }
+}
+
+//
+// TEST CASE 14
+//
+TEST(ReadCerts,errorCasesForRetrieve)
+{
+    printf("+errorCasesForRetrieve\n");
+
+    try
+    {
+        //Starting java captain.
+        TestUtils::StartJavaCaptain();
+
+        //Stopping javacertstore extension plugin of the java captain.
+        CommsMsgSender commsMsgSender;
+        commsMsgSender.SendStopJavaCertStorePlugin();
+        sleep(2);
+
+        //Deleting all existing
+        auto_ptr<CTestData> testData(CTestData::NewL());
+        testData->DeleteTestDataL();
+
+        //# 1
+        //Create certificates + metadata.
+        list<CertMetaData> listOfCerts;
+        {
+            CertMetaData tmpObj(STATE_ENABLED,"enablecert1",true,true,"1","content1");
+            listOfCerts.push_back(tmpObj);
+        }
+        {
+            CertMetaData tmpObj(STATE_ENABLED,"enabledcert2",true,true,"2","content12");
+            listOfCerts.push_back(tmpObj);
+        }
+        testData->StoreTestData(listOfCerts);
+
+        auto_ptr<CTestExecutor> testExecutor(new CTestExecutor());
+        auto_ptr<CJavaCertStoreTokenType> certStoreTokenType
+        (static_cast<CJavaCertStoreTokenType*>(CJavaCertStoreTokenType::New2L()));
+        auto_ptr<CJavaCertStoreToken> certStoreToken
+        (CJavaCertStoreToken::New(0x1234,*certStoreTokenType.get()));
+        auto_ptr<CJavaCertStoreImpl> certStoreObj(CJavaCertStoreImpl::NewL(*certStoreToken.get()));
+        auto_ptr<CCertAttributeFilter> attrFilter(TestUtils::GetFilterObj());
+
+        {
+            //# 2
+            //Call twice Retrieve() operation in the row.
+            RMPointerArray<CCTCertInfo> certInfoArray;
+            certStoreObj->List(certInfoArray,*attrFilter.get(),testExecutor->GetRequestStatus());
+            CActiveScheduler::Start();
+            CHECK(KErrNone == testExecutor->GetErrorCode());
+            CHECK(2 == certInfoArray.Count());
+
+            auto_ptr<HBufC8> certContentBuf(HBufC8::NewL(certInfoArray[0]->Size()));
+            TPtr8 certContentPtr(certContentBuf->Des());
+            auto_ptr<HBufC8> certContentBuf2(HBufC8::NewL(certInfoArray[1]->Size()));
+            TPtr8 certContentPtr2(certContentBuf2->Des());
+            auto_ptr<CTestExecutor> testExecutor2(new CTestExecutor());
+            certStoreObj->Retrieve(*certInfoArray[0],certContentPtr,testExecutor2->GetRequestStatus());
+            auto_ptr<CTestExecutor> testExecutor3(new CTestExecutor());
+            certStoreObj->Retrieve(*certInfoArray[1],certContentPtr2,testExecutor3->GetRequestStatus());
+            certStoreObj->CancelRetrieve();
+            certInfoArray.Close();
+            certStoreObj->CancelRetrieve();
+        }
+
+        {
+            //# 3
+            //Pass CCTCertInfo object, which does not match to any cert, as argument to
+            //Retrieve() operation.
+            CCTCertInfo* certInfo(CCTCertInfo::NewL(KMIDP2TrustRoot,EX509Certificate,
+                                                    ECACertificate,10,NULL,NULL,
+                                                    certStoreObj->Token(),4,true));
+            auto_ptr<HBufC8> certContentBuf(HBufC8::NewL(100));
+            TPtr8 certContentPtr(certContentBuf->Des());
+            certStoreObj->Retrieve(*certInfo,certContentPtr,testExecutor->GetRequestStatus());
+            testExecutor->Activate();
+            CActiveScheduler::Start();
+            CHECK(KErrArgument == testExecutor->GetErrorCode());
+            certInfo->Release();
+        }
+
+        printf("-errorCasesForRetrieve\n");
+    }
+    catch (TestFailedException& ex)
+    {
+        printf("errorCasesForRetrieve() ERROR: %s",ex.toString().c_str());
+        CHECK(false);
+    }
+    catch (...)
+    {
+        printf("errorCasesForRetrieve() Unexpected exception caught");
+        CHECK(false);
+    }
+}
+
+//
+// TEST CASE 15
+//
+TEST(ReadCerts,errorCasesForSetApplicability)
+{
+    printf("+errorCasesForSetApplicability\n");
+
+    try
+    {
+        //Starting java captain.
+        TestUtils::StartJavaCaptain();
+
+        //Stopping javacertstore extension plugin of the java captain.
+        CommsMsgSender commsMsgSender;
+        commsMsgSender.SendStopJavaCertStorePlugin();
+        sleep(2);
+
+        //Deleting all existing
+        auto_ptr<CTestData> testData(CTestData::NewL());
+        testData->DeleteTestDataL();
+
+        //# 1
+        //Create certificates + metadata.
+        list<CertMetaData> listOfCerts;
+        {
+            CertMetaData tmpObj(STATE_ENABLED,"enabledcert1",true,false,"1","content1");
+            listOfCerts.push_back(tmpObj);
+        }
+        testData->StoreTestData(listOfCerts);
+
+        auto_ptr<CTestExecutor> testExecutor(new CTestExecutor());
+        auto_ptr<CJavaCertStoreTokenType> certStoreTokenType
+        (static_cast<CJavaCertStoreTokenType*>(CJavaCertStoreTokenType::New2L()));
+        auto_ptr<CJavaCertStoreToken> certStoreToken
+        (CJavaCertStoreToken::New(0x1234,*certStoreTokenType.get()));
+        auto_ptr<CJavaCertStoreImpl> certStoreObj(CJavaCertStoreImpl::NewL(*certStoreToken.get()));
+        auto_ptr<CCertAttributeFilter> attrFilter(TestUtils::GetFilterObj());
+
+        {
+            //# 2
+            //CertInfo object does not match to any cert.
+            CCTCertInfo* certInfo(CCTCertInfo::NewL(KMIDP2TrustRoot,EX509Certificate,
+                                                    ECACertificate,10,NULL,NULL,
+                                                    certStoreObj->Token(),2,true));
+            RArray<TUid> emptyArray;
+            certStoreObj->SetApplicability(*certInfo,emptyArray,testExecutor->GetRequestStatus());
+            CActiveScheduler::Start();
+            CHECK(KErrArgument == testExecutor->GetErrorCode());
+            certInfo->Release();
+            emptyArray.Close();
+        }
+
+        {
+            //# 3
+            //Try to disable cert which cannot be disabled.
+            RMPointerArray<CCTCertInfo> certInfoArray;
+            certStoreObj->List(certInfoArray,*attrFilter.get(),testExecutor->GetRequestStatus());
+            testExecutor->Activate();
+            CActiveScheduler::Start();
+            CHECK(KErrNone == testExecutor->GetErrorCode());
+            CHECK(1 == certInfoArray.Count());
+
+            RArray<TUid> emptyArray;
+            certStoreObj->SetApplicability(*certInfoArray[0],emptyArray,testExecutor->GetRequestStatus());
+            testExecutor->Activate();
+            CActiveScheduler::Start();
+            CHECK(KErrArgument == testExecutor->GetErrorCode());
+            certInfoArray.Close();
+            emptyArray.Close();
+        }
+
+        printf("-errorCasesForSetApplicability\n");
+    }
+    catch (TestFailedException& ex)
+    {
+        printf("errorCasesForSetApplicability() ERROR: %s",ex.toString().c_str());
+        CHECK(false);
+    }
+    catch (...)
+    {
+        printf("errorCasesForSetApplicability() Unexpected exception caught");
+        CHECK(false);
+    }
+}
+
+