javamanager/javaregistry/legacy/tsrc/src/testlegacyregistry.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Wed, 13 Oct 2010 14:23:59 +0300
branchRCL_3
changeset 83 26b2b12093af
parent 60 6c158198356e
permissions -rw-r--r--
Revision: v2.2.17 Kit: 201041

/*
* 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 "TestHarness.h"

#include "javacommonutils.h"
#include "javaoslayer.h"
#include "javastorage.h"
#include "javastorageexception.h"
#include "javastoragenames.h"
#include "javasymbianoslayer.h"
#include "javauid.h"
#include "logger.h"
#include "mjavaregistry.h"
#include "storagetestutils.h"

using namespace std;
using namespace java::storage;
using namespace java::util;

TEST_GROUP(TestLegacyRegistry)
{
    JavaStorage* js;
    JavaStorageTestUtils* jtu;
    CActiveScheduler* newScheduler;

    TEST_SETUP()
    {
        newScheduler = new CActiveScheduler();
        CActiveScheduler::Install(newScheduler);

        js = JavaStorage::createInstance();
        jtu = new JavaStorageTestUtils();
    }
    TEST_TEARDOWN()
    {
        try
        {
            js->rollbackTransaction();
            js->close();
            delete js;
            js = NULL;
        }
        catch (...)
        {
            // No can do
        }

        delete js;
        js = 0;
        delete jtu;
        jtu = 0;

        delete newScheduler;
        newScheduler = NULL;
    }
};

/**
 * Test CJavaRegistry::InstalledSuiteUidsL() method.
 *   1. No UID in registry.
 *   2. One UID in registry.
 *   3. Several UIDs in registtry.
 */
TEST(TestLegacyRegistry, TestInstalledSuiteUidsL)
{
    LOG(EJavaStorage, EInfo, "+TestInstalledSuiteUidsL");

    // 1. No UID in registry
    MJavaRegistry* registry = MJavaRegistry::CreateL();
    CHECK(registry != NULL);

    RArray<TUid> suiteUids;
    registry->InstalledSuiteUidsL(suiteUids);

    CHECK(0 == suiteUids.Count());

    // 2. One UID in registry.
    suiteUids.Reset();
    suiteUids.Close();

    // Populate first suite
    js->open();
    js->startTransaction();

    JavaStorageApplicationEntry_t suite1;
    JavaStorageEntry attr;
    attr.setEntry(PACKAGE_NAME, L"TestSuite1");
    suite1.insert(attr);

    string tableName = APPLICATION_PACKAGE_TABLE;
    Uid suite1Uid(L"[e22a4577]");
    attr.setEntry(ID, suite1Uid.toString());
    suite1.insert(attr);

    attr.setEntry(MEDIA_ID, L"-124614446");
    suite1.insert(attr);

    CHECK(jtu->populate(*js, tableName, suite1));

    JavaStorageApplicationEntry_t midlet1;
    attr.setEntry(NAME, L"MyMIDlet1");
    midlet1.insert(attr);

    attr.setEntry(PACKAGE_ID, suite1Uid.toString());
    midlet1.insert(attr);

    string appTableName = APPLICATION_TABLE;
    Uid midlet1Uid(L"[e12abc77]");
    attr.setEntry(ID, midlet1Uid.toString());
    midlet1.insert(attr);

    CHECK(jtu->populate(*js, appTableName, midlet1));

    // Session must be committed before next use of Registry otherwise
    // it is locked.
    js->commitTransaction();

    registry->InstalledSuiteUidsL(suiteUids);

    CHECK(1 == suiteUids.Count());

    // Check uid is same than populated one
    TUid suiteUid;
    uidToTUid(suite1Uid, suiteUid);

    CHECK(suiteUids[0] == suiteUid);

    // 3. Several UIDs in registtry.
    suiteUids.Reset();
    suiteUids.Close();

    // Populate the second suite
    js->startTransaction();

    JavaStorageApplicationEntry_t suite2;
    attr.setEntry(PACKAGE_NAME, L"TestSuite2");
    suite2.insert(attr);

    Uid suite2Uid(L"[e1234a88]");
    attr.setEntry(ID, suite2Uid.toString());
    suite2.insert(attr);

    attr.setEntry(MEDIA_ID, L"-124614446");
    suite2.insert(attr);

    CHECK(jtu->populate(*js, tableName, suite2));

    JavaStorageApplicationEntry_t midlet2;
    attr.setEntry(NAME, L"MyMIDlet2");
    midlet2.insert(attr);

    attr.setEntry(PACKAGE_ID, suite2Uid.toString());
    midlet2.insert(attr);

    Uid midlet2Uid(L"[e12cba77]");
    attr.setEntry(ID, midlet2Uid.toString());
    midlet2.insert(attr);

    CHECK(jtu->populate(*js, appTableName, midlet2));

    // Session must be committed before next use of Registry otherwise
    // it is locked.
    js->commitTransaction();

    registry->InstalledSuiteUidsL(suiteUids);
    CHECK(2 == suiteUids.Count());

    // Check uids are the same. Entries are returned at same
    // order they're written.
    uidToTUid(suite1Uid, suiteUid);
    CHECK(suiteUids[0] == suiteUid);

    uidToTUid(suite2Uid, suiteUid);
    CHECK(suiteUids[1] == suiteUid);

    // Clean
    js->startTransaction();
    CHECK(jtu->remove(*js, tableName, suite1));
    CHECK(jtu->remove(*js, tableName, suite2));
    CHECK(jtu->remove(*js, appTableName, midlet1));
    CHECK(jtu->remove(*js, appTableName, midlet2));

    js->commitTransaction();
    js->close();

    registry->Release();
    suiteUids.Reset();
    suiteUids.Close();
    LOG(EJavaStorage, EInfo, "-TestInstalledSuiteUidsL");
}

/**
 * Test SuiteEntryL() method.
 * 1. No suite entry in registry.
 * 2. NullUid.
 * 3. No matching entry in registry.
 * 4. Matching entry in registry.
 */
TEST(TestLegacyRegistry, TestSuiteEntryL)
{
    LOG(EJavaStorage, EInfo, "+TestSuiteEntryL");

    MJavaRegistry* registry = MJavaRegistry::CreateL();
    CHECK(registry != NULL);

    TUid uid = TUid::Uid(3777185127);    // e1234567

    // 1. No suite entry in registry.
    MJavaRegistrySuiteEntry* suiteEntry = NULL;

    TRAPD(err, suiteEntry = registry->SuiteEntryL(uid));
    CHECK(KErrNotFound == err);

    // 2. NullUid.
    TRAP(err, suiteEntry = registry->SuiteEntryL(TUid::Null()));
    CHECK(KErrArgument == err);

    // 3. No matching entry in registry.

    // Populate not matching entry
    js->open(JAVA_DATABASE_NAME);
    js->startTransaction();

    JavaStorageApplicationEntry_t suite1;
    JavaStorageEntry attr;
    attr.setEntry(PACKAGE_NAME, L"TestSuite1");
    suite1.insert(attr);

    string tableName = APPLICATION_PACKAGE_TABLE;
    Uid suite1Uid(L"[e1234577]");

    attr.setEntry(ID, suite1Uid.toString());
    suite1.insert(attr);

    attr.setEntry(MEDIA_ID, L"-124614446");
    suite1.insert(attr);

    CHECK(jtu->populate(*js, tableName, suite1));

    JavaStorageApplicationEntry_t midlet1;
    attr.setEntry(PACKAGE_ID, suite1Uid.toString());
    midlet1.insert(attr);

    Uid midlet1Uid(L"[e3335577]");
    attr.setEntry(ID, midlet1Uid.toString());
    midlet1.insert(attr);

    string appTableName = APPLICATION_TABLE;

    CHECK(jtu->populate(*js, appTableName, midlet1));
    js->commitTransaction();

    TRAP(err, suiteEntry = registry->SuiteEntryL(uid));
    CHECK(KErrNotFound == err);

    // 4. Matching entry in registry.

    // Populate matching entry.
    js->startTransaction();

    JavaStorageApplicationEntry_t suite2;
    attr.setEntry(PACKAGE_NAME, L"TestSuite2");
    suite2.insert(attr);

    Uid suite2Uid(L"[e1234567]");
    attr.setEntry(ID, suite2Uid.toString());
    suite2.insert(attr);

    attr.setEntry(MEDIA_ID, L"-124614446");
    suite2.insert(attr);

    CHECK(jtu->populate(*js, tableName, suite2));

    JavaStorageApplicationEntry_t midlet2;
    attr.setEntry(PACKAGE_ID, suite2Uid.toString());
    midlet2.insert(attr);

    Uid midlet2Uid(L"[e3365577]");
    attr.setEntry(ID, midlet2Uid.toString());
    midlet2.insert(attr);

    CHECK(jtu->populate(*js, appTableName, midlet2));
    js->commitTransaction();

    TRAP(err, suiteEntry = registry->SuiteEntryL(uid));
    CHECK(KErrNone == err);
    CHECK(NULL != suiteEntry);  // Actual suite entry is tested elsewhere.

    // Clean
    js->startTransaction();
    CHECK(jtu->remove(*js, tableName, suite1));
    CHECK(jtu->remove(*js, tableName, suite2));
    CHECK(jtu->remove(*js, appTableName, midlet1));
    CHECK(jtu->remove(*js, appTableName, midlet2));
    js->commitTransaction();
    js->close();

    suiteEntry->Release();
    registry->Release();

    LOG(EJavaStorage, EInfo, "-TestSuiteEntryL");
}

/**
 * Test MIDletEntryL() method.
 *
 * 1. No midlet entry in registry.
 * 2. No matching entry in registry.
 * 3. Matching entry in registry.
 */
TEST(TestLegacyRegistry, TestMIDletEntryL)
{
    LOG(EJavaStorage, EInfo, "+TestMIDletEntryL");
    MJavaRegistry* registry = MJavaRegistry::CreateL();
    CHECK(registry != NULL);

    TUid uid = TUid::Uid(3777185127);    // e1234567

    // 1. No suite entry in registry.
    MJavaRegistryMIDletEntry* midletEntry = NULL;

    TRAPD(err, midletEntry = registry->MIDletEntryL(uid));
    CHECK(KErrNotFound == err);

    // 2. NullUid.
    TRAP(err, midletEntry = registry->MIDletEntryL(TUid::Null()));
    CHECK(KErrNotFound == err);

    // 3. No matching entry in registry.

    // Populate not matching entry
    js->open(JAVA_DATABASE_NAME);
    js->startTransaction();

    JavaStorageApplicationEntry_t midlet1;
    JavaStorageEntry attr;
    attr.setEntry(NAME, L"MyMIDlet1");
    midlet1.insert(attr);

    Uid suite1Uid(L"[e123456a]");
    attr.setEntry(PACKAGE_ID, suite1Uid.toString());
    midlet1.insert(attr);

    string tableName = APPLICATION_TABLE;
    Uid midlet1Uid(L"[e1234577]");
    attr.setEntry(ID, midlet1Uid.toString());
    midlet1.insert(attr);

    CHECK(jtu->populate(*js, tableName, midlet1));

    // Suite is alse required
    JavaStorageApplicationEntry_t suite1;
    attr.setEntry(PACKAGE_NAME, L"TestSuite1");
    suite1.insert(attr);

    string suiteTable = APPLICATION_PACKAGE_TABLE;
    attr.setEntry(ID, suite1Uid.toString());
    suite1.insert(attr);

    attr.setEntry(MEDIA_ID, L"-124614446");
    suite1.insert(attr);

    CHECK(jtu->populate(*js, suiteTable, suite1));

    // Session must be committed before next use of Registry otherwise
    // it is locked.
    js->commitTransaction();

    TRAP(err, midletEntry = registry->MIDletEntryL(uid));
    CHECK(KErrNotFound == err);

    // 4. Matching entry in registry.

    // Populate matching entry.
    js->startTransaction();

    JavaStorageApplicationEntry_t midlet2;
    attr.setEntry(NAME, L"MyMIDlet2");
    midlet2.insert(attr);

    attr.setEntry(PACKAGE_ID, suite1Uid.toString());
    midlet2.insert(attr);

    Uid midlet2Uid(L"[e1234567]");
    attr.setEntry(ID, midlet2Uid.toString());
    midlet2.insert(attr);

    CHECK(jtu->populate(*js, tableName, midlet2));

    // Session must be committed before next use of Registry otherwise
    // it is locked.
    js->commitTransaction();

    TRAP(err, midletEntry = registry->MIDletEntryL(uid));
    CHECK(KErrNone == err);
    CHECK(NULL != midletEntry);  // Actual midlet entry is tested elsewhere.

    midletEntry->Release();

    // Clean
    js->startTransaction();
    CHECK(jtu->remove(*js, tableName, midlet1));
    CHECK(jtu->remove(*js, tableName, midlet2));
    CHECK(jtu->remove(*js, suiteTable,suite1));

    js->commitTransaction();
    js->close();

    registry->Release();

    LOG(EJavaStorage, EInfo, "-TestMIDletEntryL");
}

/**
 * Test MJavaRegistrySuiteEntry attributes are returned correctly.
 */
TEST(TestLegacyRegistry, TestSuiteEntryAttributes)
{
    LOG(EJavaStorage, EInfo, "+TestSuiteEntryAttributes");

    MJavaRegistry* registry = MJavaRegistry::CreateL();
    CHECK(registry != NULL);

    TUid uid = TUid::Uid(3777185127);    // e1234567

    // Populate entry
    js->open(JAVA_DATABASE_NAME);
    js->startTransaction();

    JavaStorageApplicationEntry_t suite1;
    JavaStorageEntry attr;
    wstring srcSuiteName = L"TestSuite1";
    attr.setEntry(PACKAGE_NAME, srcSuiteName);
    suite1.insert(attr);

    wstring srcJarPath = L"Path/To/Jar";
    attr.setEntry(JAR_PATH, srcJarPath);
    suite1.insert(attr);

    wstring srcJadPath = L"JAD/To/Path";
    attr.setEntry(JAD_PATH, srcJadPath);
    suite1.insert(attr);

    wstring srcVendorName = L"TestSuite1";
    attr.setEntry(VENDOR, srcVendorName);
    suite1.insert(attr);

    attr.setEntry(VERSION, L"1.2.3");
    suite1.insert(attr);

    string tableName = APPLICATION_PACKAGE_TABLE;
    Uid suite1Uid(L"[e1234567]");
    attr.setEntry(ID, suite1Uid.toString());
    suite1.insert(attr);

    attr.setEntry(MEDIA_ID, L"-124614446");
    suite1.insert(attr);

    CHECK(jtu->populate(*js, tableName, suite1));

    JavaStorageApplicationEntry_t midlet1;
    attr.setEntry(PACKAGE_ID, suite1Uid.toString());
    midlet1.insert(attr);

    Uid midlet1Uid(L"[e3334577]");
    attr.setEntry(ID, midlet1Uid.toString());
    midlet1.insert(attr);

    string appTableName = APPLICATION_TABLE;

    CHECK(jtu->populate(*js, appTableName, midlet1));
    js->commitTransaction();

    MJavaRegistrySuiteEntry* suiteEntry = NULL;
    TRAPD(err, suiteEntry = registry->SuiteEntryL(uid));

    CHECK(KErrNone == err);
    CHECK(NULL != suiteEntry);

    // Test UID
    TUid suiteUid;
    uidToTUid(suite1Uid, suiteUid);
    CHECK(suiteEntry->UidL() == suiteUid);

    const TDesC16& suiteName = suiteEntry->SuiteNameL();
    auto_ptr<HBufC16> nameBuf(HBufC16::NewL(suiteName.Length() + 1));
    TPtr16 nameBufPtr(nameBuf->Des());
    nameBufPtr.Append(suiteName);
    wstring refStr(desToWstring(nameBufPtr));

    CHECK(refStr == srcSuiteName);

    const TDesC16& vendor = suiteEntry->VendorL();
    auto_ptr<HBufC16> vendorBuf(HBufC16::NewL(vendor.Length() + 1));
    TPtr16 vendorBufPtr(vendorBuf->Des());
    vendorBufPtr.Append(vendor);
    refStr = desToWstring(vendorBufPtr);

    CHECK(refStr == srcVendorName);

    TAppVersion version = suiteEntry->VersionL();
    TAppVersion srcVersion(1, 2, 3);
    CHECK(version.iMajor == srcVersion.iMajor);
    CHECK(version.iMinor == srcVersion.iMinor);
    CHECK(version.iBuild == srcVersion.iBuild);

    const TDesC16& jadPath = suiteEntry->JadPathL();
    auto_ptr<HBufC16> jadBuf(HBufC16::NewL(jadPath.Length() + 1));
    TPtr16 jadBufPtr(jadBuf->Des());
    jadBufPtr.Append(jadPath);
    refStr = desToWstring(jadBufPtr);

    CHECK(refStr == srcJadPath);

    const TDesC16& jarPath = suiteEntry->JarPathL();
    auto_ptr<HBufC16> jarBuf(HBufC16::NewL(jarPath.Length() + 1));
    TPtr16 jarBufPtr(jarBuf->Des());
    jarBufPtr.Append(jarPath);
    refStr = desToWstring(jarBufPtr);

    CHECK(refStr == srcJarPath);

    // Clean
    js->startTransaction();
    CHECK(jtu->remove(*js, tableName, suite1));
    CHECK(jtu->remove(*js, appTableName, midlet1));
    js->commitTransaction();
    js->close();

    suiteEntry->Release();
    registry->Release();

    LOG(EJavaStorage, EInfo, "-TestSuiteEntryAttributes");
}

/**
 * Test MJavaRegistryMIDletEntry attributes are returned correctly.
 */
TEST(TestLegacyRegistry, TestMIDletEntryAttributes)
{
    LOG(EJavaStorage, EInfo, "+TestMIDletEntryAttributes");

    MJavaRegistry* registry = MJavaRegistry::CreateL();
    CHECK(registry != NULL);

    // Populate entry
    js->open(JAVA_DATABASE_NAME);
    js->startTransaction();

    JavaStorageApplicationEntry_t suite1;
    JavaStorageEntry attr;
    attr.setEntry(PACKAGE_NAME, L"TestSuite1");
    suite1.insert(attr);

    attr.setEntry(JAR_PATH, L"Path/To/Jar");
    suite1.insert(attr);

    attr.setEntry(JAD_PATH, L"JAD/To/Path");
    suite1.insert(attr);

    attr.setEntry(VENDOR, L"TestSuite1Vendor");
    suite1.insert(attr);

    attr.setEntry(VERSION, L"1.2.3");
    suite1.insert(attr);

    attr.setEntry(MEDIA_ID, L"-124614446");
    suite1.insert(attr);

    string tableName = APPLICATION_PACKAGE_TABLE;
    Uid suite1Uid(L"[e1234567]");
    attr.setEntry(ID, suite1Uid.toString());
    suite1.insert(attr);
    CHECK(jtu->populate(*js, tableName, suite1));

    JavaStorageApplicationEntry_t midlet1;
    wstring srcMidletName = L"MyMIDlet1";
    attr.setEntry(NAME, srcMidletName);
    midlet1.insert(attr);

    attr.setEntry(PACKAGE_ID, L"[e1234567]");
    midlet1.insert(attr);

    string appTableName = APPLICATION_TABLE;
    TUid uid = TUid::Uid(3777185143);    // e1234577
    Uid midlet1Uid(L"[e1234577]");
    attr.setEntry(ID, midlet1Uid.toString());
    midlet1.insert(attr);

    CHECK(jtu->populate(*js, appTableName, midlet1));

    // Session must be committed before next use of Registry otherwise
    // it is locked.
    js->commitTransaction();

    MJavaRegistryMIDletEntry* midletEntry = NULL;
    TRAPD(err, midletEntry = registry->MIDletEntryL(uid));

    CHECK(KErrNone == err);
    CHECK(NULL != midletEntry);

    // Test UID
    TUid midletUid;
    uidToTUid(midlet1Uid, midletUid);
    CHECK(midletEntry->UidL() == midletUid);

    const TDesC16& midletName = midletEntry->MIDletNameL();
    auto_ptr<HBufC16> nameBuf(HBufC16::NewL(midletName.Length() + 1));
    TPtr16 nameBufPtr(nameBuf->Des());
    nameBufPtr.Append(midletName);
    wstring refStr(desToWstring(nameBufPtr));

    CHECK(refStr == srcMidletName);

    const MJavaRegistrySuiteEntry& suiteEntry = midletEntry->SuiteEntryL();

    // Verify suite UID to be sure we're dealing with correct entry.
    TUid suiteUid;
    uidToTUid(suite1Uid, suiteUid);
    CHECK(suiteEntry.UidL() == suiteUid);

    // Clean
    js->startTransaction();
    CHECK(jtu->remove(*js, tableName, suite1));
    CHECK(jtu->remove(*js, appTableName, midlet1));

    js->commitTransaction();
    js->close();

    midletEntry->Release();
    registry->Release();

    LOG(EJavaStorage, EInfo, "-TestMIDletEntryAttributes");
}

/**
 * Test CJavaRegistry::InstalledMIDletUidsL() method.
 *   1. No UID in registry.
 *   2. One UID in registry.
 *   3. Several UIDs in registtry.
 */
TEST(TestLegacyRegistry, TestInstalledMIDletUidsL)
{
    LOG(EJavaStorage, EInfo, "+TestInstalledMIDletUidsL");

    // 1. No UID in registry
    MJavaRegistry* registry = MJavaRegistry::CreateL();
    CHECK(registry != NULL);

    RArray<TUid> midletUids;
    registry->InstalledMIDletUidsL(midletUids);

    CHECK(0 == midletUids.Count());

    // 2. One UID in registry.
    midletUids.Reset();
    midletUids.Close();

    // Populate first suite
    js->open();
    js->startTransaction();

    Uid suite1Uid(L"[e22a45d7]");
    JavaStorageEntry attr;
    JavaStorageApplicationEntry_t midlet1;
    attr.setEntry(NAME, L"MyMIDlet1");
    midlet1.insert(attr);

    attr.setEntry(PACKAGE_ID, suite1Uid.toString());
    midlet1.insert(attr);

    string appTableName = APPLICATION_TABLE;
    Uid midlet1Uid(L"[e12abcd7]");
    attr.setEntry(ID, midlet1Uid.toString());
    midlet1.insert(attr);

    CHECK(jtu->populate(*js, appTableName, midlet1));

    JavaStorageApplicationEntry_t suite1;

    attr.setEntry(MEDIA_ID, L"-124614446");
    suite1.insert(attr);

    attr.setEntry(ID, suite1Uid.toString());
    suite1.insert(attr);

    CHECK(jtu->populate(*js, APPLICATION_PACKAGE_TABLE, suite1));

    // Session must be committed before next use of Registry otherwise
    // it is locked.
    js->commitTransaction();

    registry->InstalledMIDletUidsL(midletUids);

    CHECK(1 == midletUids.Count());

    // Check uid is same than populated one
    TUid midletUid;
    uidToTUid(midlet1Uid, midletUid);

    CHECK(midletUids[0] == midletUid);

    // 3. Several UIDs in registtry.
    midletUids.Reset();
    midletUids.Close();

    // Populate the second suite
    js->startTransaction();

    Uid suite2Uid(L"[e0234a88]");
    JavaStorageApplicationEntry_t midlet2;
    attr.setEntry(NAME, L"MyMIDlet2");
    midlet2.insert(attr);

    attr.setEntry(PACKAGE_ID, suite2Uid.toString());
    midlet2.insert(attr);

    Uid midlet2Uid(L"[e02cba77]");
    attr.setEntry(ID, midlet2Uid.toString());
    midlet2.insert(attr);

    CHECK(jtu->populate(*js, appTableName, midlet2));

    JavaStorageApplicationEntry_t suite2;

    attr.setEntry(MEDIA_ID, L"-124614446");
    suite2.insert(attr);

    attr.setEntry(ID, suite2Uid.toString());
    suite2.insert(attr);

    CHECK(jtu->populate(*js, APPLICATION_PACKAGE_TABLE, suite2));
    js->commitTransaction();

    registry->InstalledMIDletUidsL(midletUids);
    CHECK(2 == midletUids.Count());

    // Check uids are the same. Entries are returned at same
    // order they're written.
    uidToTUid(midlet1Uid, midletUid);
    CHECK(midletUids[0] == midletUid);

    uidToTUid(midlet2Uid, midletUid);
    CHECK(midletUids[1] == midletUid);

    // Clean
    js->startTransaction();
    CHECK(jtu->remove(*js, appTableName, midlet1));
    CHECK(jtu->remove(*js, appTableName, midlet2));
    CHECK(jtu->remove(*js, APPLICATION_PACKAGE_TABLE, suite1));
    CHECK(jtu->remove(*js, APPLICATION_PACKAGE_TABLE, suite2));

    js->commitTransaction();
    js->close();

    registry->Release();

    midletUids.Reset();
    midletUids.Close();

    LOG(EJavaStorage, EInfo, "-TestInstalledMIDletUidsL");
}

/**
 * Test CJavaRegistry::TestSuiteEntryExistsL() method.
 * 1. No UID in registry.
 * 2. One UID in registry.
 * 3. Application UID in registry. Entry must not exists.
 * 4. TUid::Null leaves KErrArgument.
 */
TEST(TestLegacyRegistry, TestSuiteEntryExistsL)
{
    LOG(EJavaStorage, EInfo, "+TestSuiteEntryExistsL");

    MJavaRegistry* registry = MJavaRegistry::CreateL();
    CHECK(registry != NULL);

    TUid uid = TUid::Uid(3777185127);    // e1234567

    // 1. No UID in registry.
    CHECK(registry->SuiteEntryExistsL(uid) == EFalse);

    // 4. TUid::Null leaves KErrArgument.
    TRAPD(err, registry->SuiteEntryExistsL(TUid::Null()));
    CHECK(KErrArgument == err);

    // Populate entry
    JavaStorageApplicationEntry_t suite1;
    JavaStorageEntry attr;
    attr.setEntry(PACKAGE_NAME, L"TestSuite1");
    suite1.insert(attr);

    attr.setEntry(JAR_PATH, L"Path/To/Jar");
    suite1.insert(attr);

    attr.setEntry(JAD_PATH, L"JAD/To/Path");
    suite1.insert(attr);

    attr.setEntry(VENDOR, L"TestSuite1Vendor");
    suite1.insert(attr);

    attr.setEntry(VERSION, L"1.2.3");
    suite1.insert(attr);

    attr.setEntry(MEDIA_ID, L"-124614446");
    suite1.insert(attr);

    string tableName = APPLICATION_PACKAGE_TABLE;
    Uid suite1Uid(L"[e0001111]");
    attr.setEntry(ID, suite1Uid.toString());
    suite1.insert(attr);

    js->open();
    js->startTransaction();
    CHECK(jtu->populate(*js, tableName, suite1));

    JavaStorageApplicationEntry_t midlet1;
    attr.setEntry(NAME, L"MyMIDlet1");
    midlet1.insert(attr);

    attr.setEntry(PACKAGE_ID, suite1Uid.toString());
    midlet1.insert(attr);

    string appTableName = APPLICATION_TABLE;
    Uid midlet1Uid(L"[e000bcd7]");
    attr.setEntry(ID, midlet1Uid.toString());
    midlet1.insert(attr);

    CHECK(jtu->populate(*js, appTableName, midlet1));
    js->commitTransaction();

    // 2. One suite UID in registry.
    TUid suiteUid;
    uidToTUid(suite1Uid, suiteUid);

    CHECK(registry->SuiteEntryExistsL(suiteUid) == true);

    // 3. Application UID in registry. Entry must not exists.

    TUid midletUid;
    uidToTUid(midlet1Uid, midletUid);
    CHECK(registry->SuiteEntryExistsL(midletUid) == EFalse);

    js->startTransaction();
    CHECK(jtu->remove(*js, tableName, suite1));
    CHECK(jtu->remove(*js, appTableName, midlet1));
    js->commitTransaction();
    js->close();
    registry->Release();

    LOG(EJavaStorage, EInfo, "-TestSuiteEntryExistsL");
}

/**
 * Test CJavaRegistry::TestSuiteEntryExistsL() method.
 * 1. Test no entries leaves KErrNotFound.
 * 2. Test empty name leaves KErrNotFound.
 * 3. Test empty vendor leaves KErrNotFound.
 * 4. Test not matching name leaves KErrNotFound.
 * 5. Test matching name and vendor found entry.
 */
TEST(TestLegacyRegistry, TestSuiteEntryL2)
{
    LOG(EJavaStorage, EInfo, "+TestSuiteEntryL2");

    MJavaRegistry* registry = MJavaRegistry::CreateL();
    CHECK(registry != NULL);

    MJavaRegistrySuiteEntry* suiteEntry = NULL;
    _LIT(KSuiteName, "TestMySuiteName");
    _LIT(KSuiteVendor, "TestMySuiteVendor");

    // 1. Test no entries leaves KErrNotFound.
    TRAPD(err, suiteEntry = registry->SuiteEntryL(KSuiteName, KSuiteVendor));
    CHECK(KErrNotFound == err);

    JavaStorageApplicationEntry_t suite1;
    JavaStorageEntry attr;
    attr.setEntry(PACKAGE_NAME, L"TestMySuiteName");
    suite1.insert(attr);

    attr.setEntry(VENDOR, L"TestMySuiteVendor");
    suite1.insert(attr);

    string tableName = APPLICATION_PACKAGE_TABLE;
    Uid suite1Uid(L"[e1111577]");

    attr.setEntry(ID, suite1Uid.toString());
    suite1.insert(attr);

    attr.setEntry(MEDIA_ID, L"-124614446");
    suite1.insert(attr);

    js->open();
    js->startTransaction();
    CHECK(jtu->populate(*js, tableName, suite1));

    JavaStorageApplicationEntry_t midlet1;
    attr.setEntry(PACKAGE_ID, suite1Uid.toString());
    midlet1.insert(attr);

    Uid midlet1Uid(L"[e3333577]");
    attr.setEntry(ID, midlet1Uid.toString());
    midlet1.insert(attr);

    string appTableName = APPLICATION_TABLE;

    CHECK(jtu->populate(*js, appTableName, midlet1));
    js->commitTransaction();

    // 2. Test empty name leaves KErrNotFound.
    TRAP(err, suiteEntry = registry->SuiteEntryL(KNullDesC, KSuiteVendor));
    CHECK(KErrArgument == err);

    // 3. Test empty vendor leaves KErrNotFound.
    TRAP(err, suiteEntry = registry->SuiteEntryL(KSuiteName, KNullDesC));
    CHECK(KErrArgument == err);

    // 4. Test not matching name leaves KErrNotFound.
    _LIT(KSuiteNameNoMatch, "NoMatchName");
    _LIT(KSuiteVendorNoMatch, "NoMatchVendor");
    TRAP(err, suiteEntry =
             registry->SuiteEntryL(KSuiteNameNoMatch, KSuiteVendorNoMatch));
    CHECK(KErrNotFound == err);

    // 5. Test matching name and vendor found entry.
    suiteEntry = registry->SuiteEntryL(KSuiteName, KSuiteVendor);
    CHECK(suiteEntry != NULL);

    TUid suiteUid;
    uidToTUid(suite1Uid, suiteUid);
    CHECK(suiteEntry->UidL() == suiteUid);

    js->startTransaction();
    CHECK(jtu->remove(*js, tableName, suite1));
    CHECK(jtu->remove(*js, appTableName, midlet1));
    js->commitTransaction();
    js->close();

    suiteEntry->Release();
    registry->Release();

    LOG(EJavaStorage, EInfo, "-TestSuiteEntryL2");
}