javamanager/javainstaller/installer/tsrc/javasrc/com/nokia/mj/impl/installer/downloader/DownloaderTest.java
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) 2008 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.downloader;

import com.nokia.mj.impl.fileutils.FileUtility;
import com.nokia.mj.impl.installer.utils.InstallerException;
import com.nokia.mj.impl.installer.utils.InstallerMain;
import com.nokia.mj.impl.installer.utils.Log;
import com.nokia.mj.impl.utils.Base64;

//import java.net.URL;
//import java.net.URLConnection;

import j2meunit.framework.Test;
import j2meunit.framework.TestCase;
import j2meunit.framework.TestMethod;
import j2meunit.framework.TestSuite;

/**
 * Downloader unit tests.
 */
public class DownloaderTest extends TestCase implements InstallerMain
{
    private static final String TEST_URL = "http://195.134.231.83:7070/java-server/resources/DS_Snow.jar";
    private static final int TEST_URL_SIZE = 10241; // test data file size

    // Begin j2meunit test framework setup

    public void installerMain(String[] args)
    {
        TestSuite suite = new TestSuite(this.getClass().getName());

        suite.addTest(new DownloaderTest("testIsDownloadUrl", new TestMethod()
        {
            public void run(TestCase tc)
            {
                ((DownloaderTest)tc).testIsDownloadUrl();
            }
        }));

        suite.addTest(new DownloaderTest("testGetBasicAuthBase64", new TestMethod()
        {
            public void run(TestCase tc)
            {
                ((DownloaderTest)tc).testGetBasicAuthBase64();
            }
        }));

        suite.addTest(new DownloaderTest("testBasicDownloadGcf", new TestMethod()
        {
            public void run(TestCase tc)
            {
                ((DownloaderTest)tc).testBasicDownloadGcf();
            }
        }));

        suite.addTest(new DownloaderTest("testDownloadFailureGcf", new TestMethod()
        {
            public void run(TestCase tc)
            {
                ((DownloaderTest)tc).testDownloadFailureGcf();
            }
        }));

        com.nokia.mj.impl.utils.OmjTestRunner.run(suite);
    }

    public DownloaderTest()
    {
    }

    public DownloaderTest(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()
    {
    }

    protected void tearDown()
    {
    }

    /**
     * Test isDownUrl method.
     */
    public void testIsDownloadUrl()
    {
        try
        {
            String[] urls = new String[]
            {
                "http://a.b.c/A.jad",
                "https://a.b.c/A.jad",
                "HTTP://a.b.c/A.jad",
                "HTTPS://a.b.c/A.jad",
            };
            for (int i = 0; i < urls.length; i++)
            {
                assertTrue("Expected true for " + urls[i],
                           Downloader.isDownloadUrl(urls[i]));
            }

            urls = new String[]
            {
                "A.jad",
                "file:///A.jad",
            };
            for (int i = 0; i < urls.length; i++)
            {
                assertTrue("Expected false for " + urls[i],
                           !Downloader.isDownloadUrl(urls[i]));
            }
        }
        catch (Exception ex)
        {
            ex.printStackTrace();
            assertTrue("Unexpected exception: " + ex, false);
        }
    }

    /**
     * Test getBasicAuthBase64 method.
     */
    public void testGetBasicAuthBase64()
    {
        try
        {
            String username = "user";
            String password = "pwd";
            String basicAuthEnc =
                Downloader.getBasicAuthBase64(username, password);
            String basicAuthDec =
                new String(Base64.decode(basicAuthEnc), "ISO8859_1");
            assertTrue("Incorrect basic auth credentials: " + basicAuthDec,
                       basicAuthDec.equals(username + ":" + password));
        }
        catch (Exception ex)
        {
            ex.printStackTrace();
            assertTrue("Unexpected exception: " + ex, false);
        }
    }

    /**
     * Test a basic download case with given Downloader.
     */
    public void testBasicDownload(Downloader downloader,
                                  TestDlListener listener)
    {
        try
        {
            String filename = "test.dat";
            DownloadInfo dlInfo = new DownloadInfo(TEST_URL, filename);
            downloader.start(dlInfo);
            downloader.waitForCompletion();
            assertTrue("Result DlInfo is null",
                       listener.getDownloadInfo() != null);
            assertTrue("Result DlInfo has an exception: " +
                       listener.getDownloadInfo().getException(),
                       listener.getDownloadInfo().getException() == null);
            assertTrue("Downloaded file has wrong size",
                       new FileUtility(filename).fileSize() == TEST_URL_SIZE);
        }
        catch (Exception ex)
        {
            ex.printStackTrace();
            assertTrue("Unexpected exception: " + ex, false);
        }
    }
    public void testBasicDownloadGcf()
    {
        TestDlListener listener = new TestDlListener();
        Downloader downloader = GcfDownloader.getDownloader(listener);
        testBasicDownload(downloader, listener);
    }

    /**
     * Test a failing download case with given Downloader.
     */
    public void testDownloadFailure(Downloader downloader,
                                    TestDlListener listener)
    {
        try
        {
            String filename = "test.dat";
            DownloadInfo dlInfo =
                new DownloadInfo("http://unsupportedurl", filename);
            downloader.start(dlInfo);
            downloader.waitForCompletion();
            assertTrue("Result DlInfo is null",
                       listener.getDownloadInfo() != null);
            assertTrue("Result DlInfo does not have an exception",
                       listener.getDownloadInfo().getException() != null);
        }
        catch (Exception ex)
        {
            ex.printStackTrace();
            assertTrue("Unexpected exception: " + ex, false);
        }
    }
    public void testDownloadFailureGcf()
    {
        TestDlListener listener = new TestDlListener();
        Downloader downloader = GcfDownloader.getDownloader(listener);
        testDownloadFailure(downloader, listener);
    }

    private static void sleep(long aMillis)
    {
        try
        {
            Thread.sleep(aMillis);
        }
        catch (InterruptedException ie)
        {
        }
    }

    private static class TestDlListener implements DownloadListener
    {
        private DownloadInfo iDlInfo = null;
        public DownloadInfo getDownloadInfo()
        {
            return iDlInfo;
        }

        /** Download has started. */
        public void started(DownloadInfo aDlInfo)
        {
            Log.log("TestDlListener.started: " + aDlInfo);
        }

        /** Download has progressed. */
        public void updateProgress(DownloadInfo aDlInfo)
        {
            Log.log("TestDlListener.updateProgress: " + aDlInfo);
        }

        /** Download has ended. */
        public void ended(DownloadInfo aDlInfo)
        {
            iDlInfo = aDlInfo;
            Log.log("TestDlListener.ended: " + aDlInfo);
        }

        /**
         * Downloader needs username and password for HTTP authentication.
         * This method returns an array of two strings, the first being username
         * and second being password. If username and password cannot be obtained,
         * method returns null.
         *
         * @param aUrl URL for which username and password is needed.
         */
        public String[] getUsernamePassword(String aUrl)
        {
            Log.log("TestDlListener.getUsernamePassword: " + aUrl);
            return new String[] { "guest", "guest" };
        }
    }

    // Begin JavaNetTest

    /**
     * Test basic functionality of java.net.URLConnection.
     * /
    public void testJavaNet() {
        String[] args = new String[] {
            //"http://www.commonly.known.internet.address.com",
            //"http://test.my.code.com",
            // The expected values below are for this url:
            "http://ip.to.test.server:7070/java-server/resources/JarUnderTest.jar",
        };

        try {
            //System.out.println("Connecting to " + args[0]);
            URL url = new URL(args[0]);
            //System.out.println("Got url");
            URLConnection connection = url.openConnection();
            //System.out.println("Got connection");
            for (int i = 0; i < 3; i++) {
                String h = connection.getHeaderField(i);
                //System.out.println("Got header field " + i + ": " + h);
                switch (i) {
                case 0:
                    assertTrue("Got unexpected header " + i + ": " + h,
                               h.equals("HTTP/1.1 200 OK"));
                    break;
                case 1:
                    assertTrue("Got unexpected header " + i + ": " + h,
                               h.equals("Apache-Coyote/1.1"));
                    break;
                case 2:
                    assertTrue("Got unexpected header " + i + ": " + h,
                               h.equals("W/\"10241-1214380094000\""));
                    break;
                }
            }
            String contentType = connection.getContentType();
            //System.out.println("Got content type " + contentType);
            assertTrue("Got unexpected content type: " + contentType,
                       contentType.equals("application/java-archive"));
            int contentLength = connection.getContentLength();
            //System.out.println("Got content length " + contentLength);
            assertTrue("Got unexpected content length: " + contentLength,
                       contentLength == 10241);
        } catch (Exception ex) {
            //System.out.println("Unexpected exception: " + ex);
            ex.printStackTrace();
            assertTrue("Unexpected exception: " + ex, false);
        }
    }
    */

    // End JavaNetTest
}