javamanager/javainstaller/installer/tsrc/javasrc/com/nokia/mj/impl/installer/GetComponentInfoTest.java
changeset 21 2a9601315dfc
child 47 f40128debb5d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/javasrc/com/nokia/mj/impl/installer/GetComponentInfoTest.java	Mon May 03 12:27:20 2010 +0300
@@ -0,0 +1,886 @@
+/*
+* Copyright (c) 2008-2010 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:
+*
+*/
+
+
+package com.nokia.mj.impl.installer;
+
+import com.nokia.mj.impl.comms.CommsEndpoint;
+import com.nokia.mj.impl.comms.CommsServerEndpoint;
+import com.nokia.mj.impl.comms.CommsListener;
+import com.nokia.mj.impl.comms.CommsMessage;
+import com.nokia.mj.impl.installer.utils.InstallerMain;
+import com.nokia.mj.impl.installer.utils.Log;
+import com.nokia.mj.impl.installer.utils.Platform;
+
+import java.io.IOException;
+import java.util.Vector;
+
+import j2meunit.framework.Test;
+import j2meunit.framework.TestCase;
+import j2meunit.framework.TestMethod;
+import j2meunit.framework.TestSuite;
+
+/**
+ * Test cases for GetComponentInfo.
+ */
+public class GetComponentInfoTest extends TestCase implements InstallerMain
+{
+    // Comms endpoint for the tests.
+    private static final int TEST_ENDPOINT = 11000;
+
+    private static String iInstalledApp = null;
+    private CommsServerEndpoint iComms = null;
+    private InstallerResultMessage iMsg = null;
+    private InstallerTestUtils iItu = null;
+    private Vector iDefaultOptions = null;
+
+    // Begin j2meunit test framework setup
+
+    public void installerMain(String[] aArgs)
+    {
+        TestSuite suite = new TestSuite(this.getClass().getName());
+
+        suite.addTest(new GetComponentInfoTest("testComponentInfoJadNotFound", new TestMethod()
+        {
+            public void run(TestCase tc)
+            {
+                ((GetComponentInfoTest)tc).testComponentInfoJadNotFound();
+            }
+        }));
+
+        suite.addTest(new GetComponentInfoTest("testComponentInfoJarNotFound", new TestMethod()
+        {
+            public void run(TestCase tc)
+            {
+                ((GetComponentInfoTest)tc).testComponentInfoJarNotFound();
+            }
+        }));
+
+        suite.addTest(new GetComponentInfoTest("testComponentInfoUidNotFound", new TestMethod()
+        {
+            public void run(TestCase tc)
+            {
+                ((GetComponentInfoTest)tc).testComponentInfoUidNotFound();
+            }
+        }));
+
+        suite.addTest(new GetComponentInfoTest("testComponentInfoJadNoName", new TestMethod()
+        {
+            public void run(TestCase tc)
+            {
+                ((GetComponentInfoTest)tc).testComponentInfoJadNoName();
+            }
+        }));
+
+        suite.addTest(new GetComponentInfoTest("testComponentInfoJadNoJar", new TestMethod()
+        {
+            public void run(TestCase tc)
+            {
+                ((GetComponentInfoTest)tc).testComponentInfoJadNoJar();
+            }
+        }));
+
+        suite.addTest(new GetComponentInfoTest("testComponentInfoJad3Ok", new TestMethod()
+        {
+            public void run(TestCase tc)
+            {
+                ((GetComponentInfoTest)tc).testComponentInfoJad3Ok();
+            }
+        }));
+
+        suite.addTest(new GetComponentInfoTest("testComponentInfoJadOk", new TestMethod()
+        {
+            public void run(TestCase tc)
+            {
+                ((GetComponentInfoTest)tc).testComponentInfoJadOk();
+            }
+        }));
+
+        suite.addTest(new GetComponentInfoTest("testComponentInfoJarOk", new TestMethod()
+        {
+            public void run(TestCase tc)
+            {
+                ((GetComponentInfoTest)tc).testComponentInfoJarOk();
+            }
+        }));
+
+        suite.addTest(new GetComponentInfoTest("testComponentInfoMmNok", new TestMethod()
+        {
+            public void run(TestCase tc)
+            {
+                ((GetComponentInfoTest)tc).testComponentInfoMmNok();
+            }
+        }));
+
+        suite.addTest(new GetComponentInfoTest("testComponentInfoMmOk", new TestMethod()
+        {
+            public void run(TestCase tc)
+            {
+                ((GetComponentInfoTest)tc).testComponentInfoMmOk();
+            }
+        }));
+
+        suite.addTest(new GetComponentInfoTest("testComponentInfoUidOk", new TestMethod()
+        {
+            public void run(TestCase tc)
+            {
+                ((GetComponentInfoTest)tc).testComponentInfoUidOk();
+            }
+        }));
+
+        suite.addTest(new GetComponentInfoTest("testComponentInfoJadInstalledOk", new TestMethod()
+        {
+            public void run(TestCase tc)
+            {
+                ((GetComponentInfoTest)tc).testComponentInfoJadInstalledOk();
+            }
+        }));
+
+        suite.addTest(new GetComponentInfoTest("testComponentInfoUidAfterUninstallation", new TestMethod()
+        {
+            public void run(TestCase tc)
+            {
+                ((GetComponentInfoTest)tc).testComponentInfoUidAfterUninstallation();
+            }
+        }));
+
+        if (Platform.isS60())
+        {
+            suite.addTest(new GetComponentInfoTest("testComponentInfoJadInboxOk", new TestMethod()
+            {
+                public void run(TestCase tc)
+                {
+                    ((GetComponentInfoTest)tc).testComponentInfoJadInboxOk();
+                }
+            }));
+
+            suite.addTest(new GetComponentInfoTest("testComponentInfoJarInboxOk", new TestMethod()
+            {
+                public void run(TestCase tc)
+                {
+                    ((GetComponentInfoTest)tc).testComponentInfoJarInboxOk();
+                }
+            }));
+
+            suite.addTest(new GetComponentInfoTest("testComponentInfoMmInboxOk", new TestMethod()
+            {
+                public void run(TestCase tc)
+                {
+                    ((GetComponentInfoTest)tc).testComponentInfoMmInboxOk();
+                }
+            }));
+        }
+
+        com.nokia.mj.impl.utils.OmjTestRunner.run(suite);
+    }
+
+    public GetComponentInfoTest()
+    {
+    }
+
+    public GetComponentInfoTest(String aTestName, TestMethod aTestMethod)
+    {
+        super(aTestName, aTestMethod);
+    }
+
+    public void assertFalse(String aMsg, boolean aCondition)
+    {
+        assertTrue(aMsg, !aCondition);
+    }
+
+    // End j2meunit test framework setup
+
+    protected void setUp()
+    {
+        iComms = new CommsServerEndpoint();
+        iComms.start(TEST_ENDPOINT);
+        iMsg = null;
+        iItu = new InstallerTestUtils();
+        iItu.init();
+    }
+
+    protected void tearDown()
+    {
+        if (iItu != null)
+        {
+            iItu.destroy();
+        }
+        if (iComms != null)
+        {
+            iComms.stop();
+            iComms.destroy();
+            iComms = null;
+        }
+    }
+
+    public void assertResult(int aResult, int aExpectedResult)
+    {
+        assertTrue("Installer returned " + aResult +
+                   ", expected " + aExpectedResult,
+                   aResult == aExpectedResult);
+    }
+
+    public void assertResult(String aMsg, int aResult, int aExpectedResult)
+    {
+        assertTrue(aMsg + ": Installer returned " + aResult +
+                   ", expected " + aExpectedResult,
+                   aResult == aExpectedResult);
+    }
+
+    public void testComponentInfoJadNotFound()
+    {
+        Log.log("GetComponentInfoTest.testComponentInfoJadNotFound begins");
+        iComms.registerListener(0, new ResultListener());
+        String[] args = new String[]
+        {
+            "componentinfo",
+            "-commsresult=" + TEST_ENDPOINT,
+            "-jad=" + iItu.getTestDir() + "nonexisting.jad",
+        };
+        int result = Installer.mainWithResult(args);
+        // Check result code.
+        assertResult(result, Installer.ERR_NOT_FOUND);
+        // Check result
+        assertResultMessage(iMsg, InstallerResultMessage.NAME_OPERATION, 2);
+        assertResultMessage(iMsg, InstallerResultMessage.NAME_RESULT, Installer.ERR_NOT_FOUND);
+    }
+
+    public void testComponentInfoJarNotFound()
+    {
+        Log.log("GetComponentInfoTest.testComponentInfoJarNotFound begins");
+        iComms.registerListener(0, new ResultListener());
+        String[] args = new String[]
+        {
+            "componentinfo",
+            "-commsresult=" + TEST_ENDPOINT,
+            "-jad=" + iItu.getTestDir() + "nonexisting.jar",
+        };
+        int result = Installer.mainWithResult(args);
+        // Check result code.
+        assertResult(result, Installer.ERR_NOT_FOUND);
+        // Check result
+        assertResultMessage(iMsg, InstallerResultMessage.NAME_OPERATION, 2);
+        assertResultMessage(iMsg, InstallerResultMessage.NAME_RESULT, Installer.ERR_NOT_FOUND);
+    }
+
+    public void testComponentInfoUidNotFound()
+    {
+        Log.log("GetComponentInfoTest.testComponentInfoUidNotFound begins");
+        iComms.registerListener(0, new ResultListener());
+        String[] args = new String[]
+        {
+            "componentinfo",
+            "-commsresult=" + TEST_ENDPOINT,
+            "-uid=" + (Platform.isS60()? "0xe0000000": "0"),
+        };
+        int result = Installer.mainWithResult(args);
+        // Check result code.
+        assertResult(result, Installer.ERR_NOT_FOUND);
+        // Check result
+        assertResultMessage(iMsg, InstallerResultMessage.NAME_OPERATION, 2);
+        assertResultMessage(iMsg, InstallerResultMessage.NAME_RESULT, Installer.ERR_NOT_FOUND);
+    }
+
+    public void testComponentInfoJadNoName()
+    {
+        Log.log("GetComponentInfoTest.testComponentInfoJadNoName begins");
+        iComms.registerListener(0, new ResultListener());
+        String[] args = new String[]
+        {
+            "componentinfo",
+            "-commsresult=" + TEST_ENDPOINT,
+            "-jad=" + iItu.getTestDir() + "HelloWorld_NoName.jad",
+        };
+        int result = Installer.mainWithResult(args);
+        // Check result code.
+        assertResult(result, Installer.ERR_NONE);
+        try
+        {
+            // Check result message
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_OPERATION, 2);
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_RESULT, Installer.ERR_NONE);
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_INSTALL_STATUS, GetComponentInfo.INVALID_PACKAGE);
+            assertResultMessageNoValue(iMsg, InstallerResultMessage.NAME_AUTHENTICITY);
+            assertResultMessageNoValue(iMsg, InstallerResultMessage.NAME_SUITE_NAME);
+            assertResultMessageNoValue(iMsg, InstallerResultMessage.NAME_VENDOR);
+            assertResultMessageNoValue(iMsg, InstallerResultMessage.NAME_VERSION);
+            assertResultMessageNoValue(iMsg, InstallerResultMessage.NAME_SUITE_GID);
+            assertResultMessageNoValue(iMsg, InstallerResultMessage.NAME_SUITE_UID);
+            assertResultMessageNoValue(iMsg, InstallerResultMessage.NAME_MIDLET_GID+1);
+            assertResultMessageNoValue(iMsg, InstallerResultMessage.NAME_MIDLET_NAME+1);
+        }
+        catch (Throwable t)
+        {
+            t.printStackTrace();
+            assertTrue(t.toString(), false);
+        }
+    }
+
+    public void testComponentInfoJadNoJar()
+    {
+        Log.log("GetComponentInfoTest.testComponentInfoJadNoJar begins");
+        iComms.registerListener(0, new ResultListener());
+        String[] args = new String[]
+        {
+            "componentinfo",
+            "-commsresult=" + TEST_ENDPOINT,
+            "-jad=" + iItu.getTestDir() + "HelloWorld_no_jar.jad",
+        };
+        int result = Installer.mainWithResult(args);
+        // Check result code.
+        assertResult(result, Installer.ERR_NONE);
+        try
+        {
+            // Check result message
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_OPERATION, 2);
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_RESULT, Installer.ERR_NONE);
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_INSTALL_STATUS, GetComponentInfo.NEW_COMPONENT);
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_AUTHENTICITY, 0);
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_SUITE_NAME, "HelloWorld_no_jar");
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_VENDOR, "Nokia");
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_VERSION, "1.0");
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_SUITE_GID, "Nokia/HelloWorld_no_jar");
+            assertResultMessageNoValue(iMsg, InstallerResultMessage.NAME_SUITE_UID);
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_MIDLET_GID+1, "Nokia/HelloWorld_no_jar/HelloWorld");
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_MIDLET_NAME+1, "HelloWorld");
+            assertResultMessageNoValue(iMsg, InstallerResultMessage.NAME_MIDLET_UID+1);
+        }
+        catch (Throwable t)
+        {
+            t.printStackTrace();
+            assertTrue(t.toString(), false);
+        }
+    }
+
+    public void testComponentInfoJadOk()
+    {
+        Log.log("GetComponentInfoTest.testComponentInfoJadOk begins");
+        iComms.registerListener(0, new ResultListener());
+        String[] args = new String[]
+        {
+            "componentinfo",
+            "-commsresult=" + TEST_ENDPOINT,
+            "-jad=" + iItu.getTestDir() + "HelloWorld.jad",
+        };
+        int result = Installer.mainWithResult(args);
+        // Check result code.
+        assertResult(result, Installer.ERR_NONE);
+        try
+        {
+            // Check result message
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_OPERATION, 2);
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_RESULT, Installer.ERR_NONE);
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_INSTALL_STATUS, GetComponentInfo.NEW_COMPONENT);
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_AUTHENTICITY, 1);
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_SUITE_NAME, "HelloWorld");
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_VENDOR, "Nokia");
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_VERSION, "1.0");
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_SUITE_GID, "Nokia/HelloWorld");
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_MIDLET_GID+1, "Nokia/HelloWorld/HelloWorld");
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_MIDLET_NAME+1, "HelloWorld");
+            assertResultMessageNoValue(iMsg, InstallerResultMessage.NAME_MIDLET_GID+2);
+            assertResultMessageNoValue(iMsg, InstallerResultMessage.NAME_MIDLET_UID+2);
+            assertResultMessageNoValue(iMsg, InstallerResultMessage.NAME_MIDLET_NAME+2);
+            if (Platform.isS60())
+            {
+                assertResultMessageNoValue(iMsg, InstallerResultMessage.NAME_SUITE_UID);
+                assertResultMessageNoValue(iMsg, InstallerResultMessage.NAME_MIDLET_UID+1);
+            }
+        }
+        catch (Throwable t)
+        {
+            t.printStackTrace();
+            assertTrue(t.toString(), false);
+        }
+    }
+
+    public void testComponentInfoJad3Ok()
+    {
+        Log.log("GetComponentInfoTest.testComponentInfoJad3Ok begins");
+        iComms.registerListener(0, new ResultListener());
+        String[] args = new String[]
+        {
+            "componentinfo",
+            "-commsresult=" + TEST_ENDPOINT,
+            "-jad=" + iItu.getTestDir() + "HelloWorld_3_midlets_no_ota_status.jad",
+        };
+        int result = Installer.mainWithResult(args);
+        // Check result code.
+        assertResult(result, Installer.ERR_NONE);
+        try
+        {
+            // Check result message
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_OPERATION, 2);
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_RESULT, Installer.ERR_NONE);
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_INSTALL_STATUS, GetComponentInfo.NEW_COMPONENT);
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_AUTHENTICITY, 0);
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_SUITE_NAME, "HelloWorld");
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_VENDOR, "Nokia");
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_VERSION, "1.0");
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_SUITE_GID, "Nokia/HelloWorld");
+            assertResultMessageNoValue(iMsg, InstallerResultMessage.NAME_SUITE_UID);
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_MIDLET_GID+1, "Nokia/HelloWorld/HelloWorld");
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_MIDLET_NAME+1, "HelloWorld");
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_MIDLET_GID+2, "Nokia/HelloWorld/HelloWorld2");
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_MIDLET_NAME+2, "HelloWorld2");
+            assertResultMessageNoValue(iMsg, InstallerResultMessage.NAME_MIDLET_UID+2);
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_MIDLET_GID+3, "Nokia/HelloWorld/HelloWorld3");
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_MIDLET_NAME+3, "HelloWorld3");
+            if (Platform.isS60())
+            {
+                assertResultMessage(iMsg, InstallerResultMessage.NAME_MIDLET_UID+1, 0xefef0001);
+                assertResultMessage(iMsg, InstallerResultMessage.NAME_MIDLET_UID+3, 0xefef0003);
+            }
+        }
+        catch (Throwable t)
+        {
+            t.printStackTrace();
+            assertTrue(t.toString(), false);
+        }
+    }
+
+    public void testComponentInfoJarOk()
+    {
+        Log.log("GetComponentInfoTest.testComponentInfoJarOk begins");
+        iComms.registerListener(0, new ResultListener());
+        String[] args = new String[]
+        {
+            "componentinfo",
+            "-commsresult=" + TEST_ENDPOINT,
+            "-jar=" + iItu.getTestDir() + "HelloWorld.jar",
+        };
+        int result = Installer.mainWithResult(args);
+        // Check result code.
+        assertResult(result, Installer.ERR_NONE);
+        try
+        {
+            // Check result message
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_OPERATION, 2);
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_RESULT, Installer.ERR_NONE);
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_INSTALL_STATUS, GetComponentInfo.NEW_COMPONENT);
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_AUTHENTICITY, 1);
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_SUITE_NAME, "HelloWorld");
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_VENDOR, "Nokia");
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_VERSION, "1.0");
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_SUITE_GID, "Nokia/HelloWorld");
+            assertResultMessageNoValue(iMsg, InstallerResultMessage.NAME_SUITE_UID);
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_MIDLET_GID+1, "Nokia/HelloWorld/HelloWorld");
+            assertResultMessageNoValue(iMsg, InstallerResultMessage.NAME_MIDLET_UID+1);
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_MIDLET_NAME+1, "HelloWorld");
+            assertResultMessageNoValue(iMsg, InstallerResultMessage.NAME_MIDLET_GID+2);
+            assertResultMessageNoValue(iMsg, InstallerResultMessage.NAME_MIDLET_UID+2);
+            assertResultMessageNoValue(iMsg, InstallerResultMessage.NAME_MIDLET_NAME+2);
+        }
+        catch (Throwable t)
+        {
+            t.printStackTrace();
+            assertTrue(t.toString(), false);
+        }
+    }
+
+    public void testComponentInfoMmNok()
+    {
+        Log.log("GetComponentInfoTest.testComponentInfoMmNok begins");
+        iComms.registerListener(0, new ResultListener());
+        String[] args = new String[]
+        {
+            "componentinfo",
+            "-commsresult=" + TEST_ENDPOINT,
+            "-jar=" + iItu.getTestDir() + "helloworldmm_invalid.jar",
+        };
+        int result = Installer.mainWithResult(args);
+        // Check result code.
+        assertResult(result, Installer.ERR_GENERAL);
+        try
+        {
+            // Check result message
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_OPERATION, 2);
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_RESULT, Installer.ERR_GENERAL);
+            assertResultMessageNoValue(iMsg, InstallerResultMessage.NAME_INSTALL_STATUS);
+            assertResultMessageNoValue(iMsg, InstallerResultMessage.NAME_AUTHENTICITY);
+            assertResultMessageNoValue(iMsg, InstallerResultMessage.NAME_SUITE_NAME);
+            assertResultMessageNoValue(iMsg, InstallerResultMessage.NAME_VENDOR);
+            assertResultMessageNoValue(iMsg, InstallerResultMessage.NAME_VERSION);
+            assertResultMessageNoValue(iMsg, InstallerResultMessage.NAME_SUITE_GID);
+            assertResultMessageNoValue(iMsg, InstallerResultMessage.NAME_SUITE_UID);
+            assertResultMessageNoValue(iMsg, InstallerResultMessage.NAME_MIDLET_GID+1);
+            assertResultMessageNoValue(iMsg, InstallerResultMessage.NAME_MIDLET_UID+1);
+            assertResultMessageNoValue(iMsg, InstallerResultMessage.NAME_MIDLET_NAME+1);
+            assertResultMessageNoValue(iMsg, InstallerResultMessage.NAME_MIDLET_GID+2);
+            assertResultMessageNoValue(iMsg, InstallerResultMessage.NAME_MIDLET_UID+2);
+            assertResultMessageNoValue(iMsg, InstallerResultMessage.NAME_MIDLET_NAME+2);
+        }
+        catch (Throwable t)
+        {
+            t.printStackTrace();
+            assertTrue(t.toString(), false);
+        }
+    }
+
+    public void testComponentInfoMmOk()
+    {
+        Log.log("GetComponentInfoTest.testComponentInfoMmOk begins");
+        iComms.registerListener(0, new ResultListener());
+        String[] args = new String[]
+        {
+            "componentinfo",
+            "-commsresult=" + TEST_ENDPOINT,
+            "-jar=" + iItu.getTestDir() + "helloworldmm.jar",
+        };
+        int result = Installer.mainWithResult(args);
+        // Check result code.
+        assertResult(result, Installer.ERR_NONE);
+        try
+        {
+            // Check result message
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_OPERATION, 2);
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_RESULT, Installer.ERR_NONE);
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_INSTALL_STATUS, GetComponentInfo.NEW_COMPONENT);
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_AUTHENTICITY, 1);
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_SUITE_NAME, "HelloWorld");
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_VENDOR, "Nokia");
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_VERSION, "1.0");
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_SUITE_GID, "Nokia/HelloWorld");
+            assertResultMessageNoValue(iMsg, InstallerResultMessage.NAME_SUITE_UID);
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_MIDLET_GID+1, "Nokia/HelloWorld/HelloWorld");
+            assertResultMessageNoValue(iMsg, InstallerResultMessage.NAME_MIDLET_UID+1);
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_MIDLET_NAME+1, "HelloWorld");
+            assertResultMessageNoValue(iMsg, InstallerResultMessage.NAME_MIDLET_GID+2);
+            assertResultMessageNoValue(iMsg, InstallerResultMessage.NAME_MIDLET_UID+2);
+            assertResultMessageNoValue(iMsg, InstallerResultMessage.NAME_MIDLET_NAME+2);
+        }
+        catch (Throwable t)
+        {
+            t.printStackTrace();
+            assertTrue(t.toString(), false);
+        }
+    }
+
+    public void testComponentInfoUidOk()
+    {
+        Log.log("GetComponentInfoTest.testComponentInfoUidOk begins");
+        iComms.registerListener(0, new ResultListener());
+
+        // Install test application.
+        String[] args = new String[]
+        {
+            "install",
+            "-silent",
+            "-commsresult=" + TEST_ENDPOINT,
+            "-jad=" + iItu.getTestDir() + "HelloWorld_3_midlets_no_ota_status.jad",
+        };
+        int result = Installer.mainWithResult(args);
+        // Check result code.
+        assertResult(result, Installer.ERR_NONE);
+        // Save the uid of the installed application.
+        iInstalledApp = Installer.iInstalledApps[0].toString();
+
+        // Get component info for the installed application.
+        args = new String[]
+        {
+            "componentinfo",
+            "-commsresult=" + TEST_ENDPOINT,
+            "-uid=" + iInstalledApp,
+        };
+        result = Installer.mainWithResult(args);
+        // Check result code.
+        assertResult(result, Installer.ERR_NONE);
+        try
+        {
+            // Check result message
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_OPERATION, 2);
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_RESULT, Installer.ERR_NONE);
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_INSTALL_STATUS, GetComponentInfo.ALREADY_INSTALLED);
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_AUTHENTICITY, 0);
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_SUITE_NAME, "HelloWorld");
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_VENDOR, "Nokia");
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_VERSION, "1.0");
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_SUITE_GID, "Nokia/HelloWorld");
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_MIDLET_GID+1, "Nokia/HelloWorld/HelloWorld");
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_MIDLET_NAME+1, "HelloWorld");
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_MIDLET_GID+2, "Nokia/HelloWorld/HelloWorld2");
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_MIDLET_NAME+2, "HelloWorld2");
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_MIDLET_GID+3, "Nokia/HelloWorld/HelloWorld3");
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_MIDLET_NAME+3, "HelloWorld3");
+            if (Platform.isS60())
+            {
+                assertResultMessage(iMsg, InstallerResultMessage.NAME_SUITE_UID, 0x101b2bd2);
+                assertResultMessage(iMsg, InstallerResultMessage.NAME_MIDLET_UID+1, 0xefef0001);
+                assertResultMessage(iMsg, InstallerResultMessage.NAME_MIDLET_UID+2, 0x101631a4);
+                assertResultMessage(iMsg, InstallerResultMessage.NAME_MIDLET_UID+3, 0xefef0003);
+            }
+        }
+        catch (Throwable t)
+        {
+            t.printStackTrace();
+            assertTrue(t.toString(), false);
+        }
+    }
+
+    public void testComponentInfoJadInstalledOk()
+    {
+        Log.log("GetComponentInfoTest.testComponentInfoJadInstalledOk begins");
+        iComms.registerListener(0, new ResultListener());
+        String[] args = new String[]
+        {
+            "componentinfo",
+            "-commsresult=" + TEST_ENDPOINT,
+            "-jad=" + iItu.getTestDir() + "HelloWorld.jad",
+        };
+        int result = Installer.mainWithResult(args);
+        // Check result code.
+        assertResult(result, Installer.ERR_NONE);
+        try
+        {
+            // Check result message
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_OPERATION, 2);
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_RESULT, Installer.ERR_NONE);
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_INSTALL_STATUS, GetComponentInfo.ALREADY_INSTALLED);
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_AUTHENTICITY, 1);
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_SUITE_NAME, "HelloWorld");
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_VENDOR, "Nokia");
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_VERSION, "1.0");
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_SUITE_GID, "Nokia/HelloWorld");
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_MIDLET_GID+1, "Nokia/HelloWorld/HelloWorld");
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_MIDLET_NAME+1, "HelloWorld");
+            assertResultMessageNoValue(iMsg, InstallerResultMessage.NAME_MIDLET_GID+2);
+            assertResultMessageNoValue(iMsg, InstallerResultMessage.NAME_MIDLET_UID+2);
+            assertResultMessageNoValue(iMsg, InstallerResultMessage.NAME_MIDLET_NAME+2);
+            if (Platform.isS60())
+            {
+                assertResultMessage(iMsg, InstallerResultMessage.NAME_SUITE_UID, 0x101b2bd2);
+                assertResultMessage(iMsg, InstallerResultMessage.NAME_MIDLET_UID+1, 0xefef0001);
+            }
+        }
+        catch (Throwable t)
+        {
+            t.printStackTrace();
+            assertTrue(t.toString(), false);
+        }
+    }
+
+    public void testComponentInfoUidAfterUninstallation()
+    {
+        Log.log("GetComponentInfoTest.testComponentInfoUidAfterUninstallation begins");
+        iComms.registerListener(0, new ResultListener());
+
+        // Uninstall test application.
+        String[] args = new String[]
+        {
+            "uninstall",
+            "-silent",
+            "-iap=1",
+            "-commsresult=" + TEST_ENDPOINT,
+            "-uid=" + iInstalledApp,
+        };
+        int result = Installer.mainWithResult(args);
+        // Check result code.
+        assertResult(result, Installer.ERR_NONE);
+
+        // Get component info after uninstallation.
+        args = new String[]
+        {
+            "componentinfo",
+            "-commsresult=" + TEST_ENDPOINT,
+            "-uid=" + iInstalledApp,
+        };
+        result = Installer.mainWithResult(args);
+        // Check result code.
+        assertResult(result, Installer.ERR_NOT_FOUND);
+        // Check result
+        assertResultMessage(iMsg, InstallerResultMessage.NAME_OPERATION, 2);
+        assertResultMessage(iMsg, InstallerResultMessage.NAME_RESULT, Installer.ERR_NOT_FOUND);
+    }
+
+    public void testComponentInfoJadInboxOk()
+    {
+        Log.log("GetComponentInfoTest.testComponentInfoJadInboxOk begins");
+        iComms.registerListener(0, new ResultListener());
+        String startPath = "c:\\private\\1000484b\\Mail2\\00001001_S\\7\\00100007_F\\HelloWorld1.jad";
+        String[] args = new String[]
+        {
+            "componentinfo",
+            "-commsresult=" + TEST_ENDPOINT,
+            "-jad=" + startPath,
+        };
+        int result = Installer.mainWithResult(args);
+        // Check result code.
+        assertResult(result, Installer.ERR_NONE);
+        try
+        {
+            // Check result message
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_OPERATION, 2);
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_RESULT, Installer.ERR_NONE);
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_INSTALL_STATUS, GetComponentInfo.NEW_COMPONENT);
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_AUTHENTICITY, 0);
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_SUITE_NAME, "HelloWorld1");
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_VENDOR, "Unknown");
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_VERSION, "1.0");
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_SUITE_GID, "Unknown/HelloWorld1");
+            assertResultMessageNoValue(iMsg, InstallerResultMessage.NAME_SUITE_UID);
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_MIDLET_GID+1, "Unknown/HelloWorld1/HelloWorld1");
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_MIDLET_NAME+1, "HelloWorld1");
+            assertResultMessageNoValue(iMsg, InstallerResultMessage.NAME_MIDLET_UID+1);
+        }
+        catch (Throwable t)
+        {
+            t.printStackTrace();
+            assertTrue(t.toString(), false);
+        }
+    }
+
+    public void testComponentInfoJarInboxOk()
+    {
+        Log.log("GetComponentInfoTest.testComponentInfoJarInboxOk begins");
+        iComms.registerListener(0, new ResultListener());
+        String startPath = "c:\\private\\1000484b\\Mail2\\00001001_S\\d\\0010000d_F\\HelloWorld2.jar";
+        String[] args = new String[]
+        {
+            "componentinfo",
+            "-commsresult=" + TEST_ENDPOINT,
+            "-jar=" + startPath,
+        };
+        int result = Installer.mainWithResult(args);
+        // Check result code.
+        assertResult(result, Installer.ERR_NONE);
+        try
+        {
+            // Check result message
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_OPERATION, 2);
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_RESULT, Installer.ERR_NONE);
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_INSTALL_STATUS, GetComponentInfo.NEW_COMPONENT);
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_AUTHENTICITY, 0);
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_SUITE_NAME, "HelloWorld2");
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_VENDOR, "Unknown");
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_VERSION, "1.0");
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_SUITE_GID, "Unknown/HelloWorld2");
+            assertResultMessageNoValue(iMsg, InstallerResultMessage.NAME_SUITE_UID);
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_MIDLET_GID+1, "Unknown/HelloWorld2/HelloWorld2");
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_MIDLET_NAME+1, "HelloWorld2");
+            assertResultMessageNoValue(iMsg, InstallerResultMessage.NAME_MIDLET_UID+1);
+        }
+        catch (Throwable t)
+        {
+            t.printStackTrace();
+            assertTrue(t.toString(), false);
+        }
+    }
+
+    public void testComponentInfoMmInboxOk()
+    {
+        Log.log("GetComponentInfoTest.testComponentInfoMmInboxOk begins");
+        iComms.registerListener(0, new ResultListener());
+        String startPath = "c:\\private\\1000484b\\Mail2\\00001001_S\\1\\00100011_F\\hwmm.jar";
+        String[] args = new String[]
+        {
+            "componentinfo",
+            "-commsresult=" + TEST_ENDPOINT,
+            "-jar=" + startPath,
+        };
+        int result = Installer.mainWithResult(args);
+        // Check result code.
+        assertResult(result, Installer.ERR_NONE);
+        try
+        {
+            // Check result message
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_OPERATION, 2);
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_RESULT, Installer.ERR_NONE);
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_INSTALL_STATUS, GetComponentInfo.NEW_COMPONENT);
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_AUTHENTICITY, 0);
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_SUITE_NAME, "HelloWorldMM");
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_VENDOR, "Nokia");
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_VERSION, "1.0");
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_SUITE_GID, "Nokia/HelloWorldMM");
+            assertResultMessageNoValue(iMsg, InstallerResultMessage.NAME_SUITE_UID);
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_MIDLET_GID+1, "Nokia/HelloWorldMM/HelloWorld");
+            assertResultMessage(iMsg, InstallerResultMessage.NAME_MIDLET_NAME+1, "HelloWorld");
+            assertResultMessageNoValue(iMsg, InstallerResultMessage.NAME_MIDLET_UID+1);
+        }
+        catch (Throwable t)
+        {
+            t.printStackTrace();
+            assertTrue(t.toString(), false);
+        }
+    }
+
+    private class ResultListener implements CommsListener
+    {
+        public void processMessage(CommsMessage aMessage)
+        {
+            try
+            {
+                iMsg = new InstallerResultMessage();
+                iMsg.parse(aMessage);
+                Log.log("ResultListener received " + iMsg);
+                CommsMessage response = new CommsMessage();
+                response.replyTo(aMessage);
+                response.setMessageId(602);
+                iComms.send(response);
+                Log.log("ResultListener sent " + response);
+            }
+            catch (Throwable t)
+            {
+                t.printStackTrace();
+            }
+        }
+    }
+
+    private void assertResultMessage(InstallerResultMessage aMsg, String aName, int aValue)
+    {
+        assertTrue(aName + "!=" + aValue + " (" + aMsg.getIntValue(aName) + ")",
+                   aMsg.getIntValue(aName) == aValue);
+    }
+
+    private void assertResultMessage(InstallerResultMessage aMsg, String aName, String aValue)
+    {
+        assertTrue(aName + "!=" + aValue + " (" + aMsg.getStringValue(aName) + ")",
+                   aValue.equals(aMsg.getStringValue(aName)));
+    }
+
+    private void assertResultMessageNoValue(InstallerResultMessage aMsg, String aName)
+    {
+        try
+        {
+            String value = aMsg.getStringValue(aName);
+            assertTrue("Unexpected value " + aName + "=" + value, false);
+        }
+        catch (IllegalArgumentException iae)
+        {
+            // Expected exception.
+        }
+        catch (Throwable t)
+        {
+            assertTrue("Incorrect exception for string value " + aName +
+                       ": " + t, false);
+        }
+
+        try
+        {
+            int value = aMsg.getIntValue(aName);
+            assertTrue("Unexpected value " + aName + "=" + value, false);
+        }
+        catch (IllegalArgumentException iae)
+        {
+            // Expected exception.
+        }
+        catch (Throwable t)
+        {
+            assertTrue("Incorrect exception for int value " + aName +
+                       ": " + t, false);
+        }
+    }
+}