javacommons/javastorage/tsrc/java_api/javasrc/com/nokia/mj/test/storage/TestConnection.java
changeset 21 2a9601315dfc
child 80 d6dafc5d983f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javacommons/javastorage/tsrc/java_api/javasrc/com/nokia/mj/test/storage/TestConnection.java	Mon May 03 12:27:20 2010 +0300
@@ -0,0 +1,437 @@
+/*
+* Copyright (c) 2008-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:
+*
+*/
+
+
+package com.nokia.mj.test.storage;
+
+import com.nokia.mj.test.storage.utils.StorageSessionTestUtils;
+import com.nokia.mj.impl.storage.*;
+
+import com.nokia.mj.impl.installer.utils.InstallerMain;
+import j2meunit.framework.Test;
+import j2meunit.framework.TestCase;
+import j2meunit.framework.TestMethod;
+import j2meunit.framework.TestSuite;
+
+/**
+ * StorageSession connection test cases. See test methods for test case details.
+ */
+public class TestConnection extends TestCase implements InstallerMain, StorageNames
+{
+    /**
+     * Directory for JavaStorage tests.
+     */
+    private static final String iTestRoot = "./jstest";
+
+    /**
+     * Directory for JavaStorage journal and temp files.
+     */
+    private static final String iIsRoot = iTestRoot + "/js";
+
+    private StorageSession iSession = null;
+    private StorageSessionTestUtils iJtu = null;
+
+    public void installerMain(String[] args)
+    {
+        TestSuite suite = new TestSuite(this.getClass().getName());
+
+        suite.addTest(new TestConnection("testOpen", new TestMethod()
+        {
+            public void run(TestCase tc)
+            {
+                ((TestConnection)tc).testOpen();
+            }
+        }));
+
+        suite.addTest(new TestConnection("testMultiOpen", new TestMethod()
+        {
+            public void run(TestCase tc)
+            {
+                ((TestConnection)tc).testMultiOpen();
+            }
+        }));
+
+        suite.addTest(new TestConnection("testClose", new TestMethod()
+        {
+            public void run(TestCase tc)
+            {
+                ((TestConnection)tc).testClose();
+            }
+        }));
+
+        com.nokia.mj.impl.utils.OmjTestRunner.run(suite);
+    }
+
+    public TestConnection()
+    {
+    }
+
+    public TestConnection(String aTestName, TestMethod aTestMethod)
+    {
+        super(aTestName, aTestMethod);
+    }
+
+    protected void setUp()
+    {
+        iSession = StorageFactory.createSession();
+        iJtu = new StorageSessionTestUtils();
+    }
+
+    protected void tearDown()
+    {
+        if (iSession != null)
+        {
+            try
+            {
+                iSession.destroySession();
+            }
+            catch (StorageException se)
+            {
+                // No can do
+                System.out.println("TearDown failed: " + se.toString());
+            }
+        }
+    }
+
+    /**
+     * Test connection open
+     * 1. Test open().
+     * 2. Test open(JAVA_DATABASE_NAME)
+     * 3. Test open to FOO_BAR.db.
+     * 4. Test open with empty name. JavaStorageException is thrown.
+     * 5. Test open with null name. JavaStorageException is thrown.
+     * 6. Test two consecutive opens.
+     * 7. Test re-open.
+     */
+    public void testOpen()
+    {
+        // 1. Test open
+        try
+        {
+            String appUID = "TestOpen1";
+            iSession.open();
+            iSession.startTransaction();
+
+            // Write and read to verify connection.
+            assertTrue("Populate with default",
+                       iJtu.populateWithDefault(iSession, appUID));
+            assertTrue("Check defaults",
+                       iJtu.checkDefaultParams(iSession, appUID));
+
+            // Do not store changes.
+            iSession.rollbackTransaction();
+        }
+        catch (StorageException se)
+        {
+            iSession.rollbackTransaction();
+            assertTrue("Database open failed: " + se.getMessage(), false);
+        }
+
+        iSession.close();
+
+        // 2. Test open (JAVA_DATABASE_NAME.)
+        try
+        {
+            String appUID = "TestOpen1";
+            iSession.open(JAVA_DATABASE_NAME);
+            iSession.startTransaction();
+
+            // Write and read to verify connection.
+            assertTrue("Populate with default",
+                       iJtu.populateWithDefault(iSession, appUID));
+            assertTrue("Check defaults",
+                       iJtu.checkDefaultParams(iSession, appUID));
+
+            // Do not store changes.
+            iSession.rollbackTransaction();
+        }
+        catch (StorageException se)
+        {
+            iSession.rollbackTransaction();
+            assertTrue("Database open with name failed: " + se.getMessage(),
+                       false);
+        }
+
+        iSession.close();
+
+        // 3. Test open ("FOO_BAR.db".)
+        try
+        {
+            // Depending on the platform this should change.
+            // based on system variable.
+            iSession.open("c:\\FOO_BAR.db");
+        }
+        catch (StorageException se)
+        {
+            assertTrue("Database open to foo bar failed: " + se.getMessage(),
+                       false);
+        }
+
+        iSession.close();
+
+        // 4. Test open with empty name
+        try
+        {
+            iSession.open("");
+            assertTrue("Opening with empty name did not thrown exception",
+                       false);
+
+        }
+        catch (StorageException se)
+        {
+            // PASSED
+        }
+
+        // 5. Test open with null name
+        try
+        {
+            String name = null;
+            iSession.open(name);
+            assertTrue("Opening with null name did not thrown exception",
+                       false);
+
+        }
+        catch (StorageException se)
+        {
+            // PASSED
+        }
+
+        // 6. Test two consecutive opens.
+        try
+        {
+            iSession.open();
+            iSession.open();
+            assertTrue("Consecutive open does not throw exp", false);
+        }
+        catch (StorageException se)
+        {
+            // PASSED
+        }
+        catch (Throwable t)
+        {
+            assertTrue("UnExp6: " + t.toString(), false);
+        }
+
+        iSession.close();
+
+        // 7. Test re-open
+        try
+        {
+            String appUID = "TestOpen2";
+            iSession.open();
+            iSession.startTransaction();
+
+            assertTrue("Re-Open: Populate with default",
+                       iJtu.populateWithDefault(iSession, appUID));
+
+            // Write and read to verify connection.
+            assertTrue("Re-Open: Check defaults",
+                       iJtu.checkDefaultParams(iSession, appUID));
+
+            assertTrue("Re-Open: Remove defaults",
+                       iJtu.removeDefaultParams(iSession, appUID));
+
+            // Store changes for re-open test cases.
+            iSession.rollbackTransaction();
+        }
+        catch (StorageException se)
+        {
+            iSession.rollbackTransaction();
+            assertTrue("Re-open: " + se.getMessage(), false);
+        }
+
+        // Currently this deletes instance.
+        iSession.close();
+    }
+
+    /**
+     * Test connection open.
+     * 1. Test two connections to same target can be opened.
+     * 2. Test two connections to separate targets can be opened.
+     */
+    public void testMultiOpen()
+    {
+        // 1. Two connections to same target.
+        StorageSession session2 = null;
+        try
+        {
+            String appUID = "TwoConnections";
+            iSession.open();
+
+            session2 = StorageFactory.createSession();
+            session2.open();
+
+            iSession.startTransaction();
+            // session2.startTransaction(); // This will fail as not supported
+
+            // Write and read to verify connection.
+            assertTrue("Conn1: Populate with default",
+                       iJtu.populateWithDefault(iSession, appUID));
+            assertTrue("Conn1: Check defaults",
+                       iJtu.checkDefaultParams(iSession, appUID));
+
+            // Cannot have two concurrent transactions to same db without"
+            // getting database busy.
+            iSession.rollbackTransaction();
+            session2.startTransaction();
+
+            StorageEntry entry = new StorageEntry();
+            entry.addAttribute(new StorageAttribute(PACKAGE_ID,
+                                                    "GreatSuite"));
+            entry.addAttribute(new StorageAttribute(NAME, "MyJavaApp"));
+            entry.addAttribute(new StorageAttribute(MAIN_CLASS,
+                                                    "com.my.java.app.GreatApp"));
+            entry.addAttribute(new StorageAttribute(AUTORUN, "0",
+                                                    StorageAttribute.INT_TYPE));
+
+            assertTrue("Conn2: Populate",
+                       iJtu.populate(session2, APPLICATION_TABLE,
+                                     appUID, entry));
+            assertTrue("Conn2: Check",
+                       iJtu.checkParams(session2,
+                                        APPLICATION_TABLE, entry, 1));
+
+            session2.rollbackTransaction();
+        }
+        catch (StorageException se)
+        {
+            iSession.rollbackTransaction();
+
+            if (session2 != null)
+            {
+                session2.rollbackTransaction();
+            }
+
+            assertTrue("Test two connections: " + se.getMessage(), false);
+        }
+        iSession.close();
+        session2.close();
+
+        // 2. Two connections to different target.
+        try
+        {
+            String appUID = "TwoConnections";
+            iSession.open();
+            session2.open("c:\\FOO_BAR.db");
+
+            iSession.startTransaction();
+            session2.startTransaction();
+
+            // Write and read to verify connection.
+            assertTrue("Conn1: Populate with default",
+                       iJtu.populateWithDefault(iSession, appUID));
+            assertTrue("Conn1: Check defaults",
+                       iJtu.checkDefaultParams(iSession, appUID));
+
+            StorageEntry entry = new StorageEntry();
+            entry.addAttribute(new StorageAttribute(ID, ""));
+            entry.addAttribute(new StorageAttribute(PACKAGE_ID,
+                                                    "ROOT_PACKAGE"));
+            entry.addAttribute(new StorageAttribute(NAME, "MyJavaApp"));
+            entry.addAttribute(new StorageAttribute(MAIN_CLASS,
+                                                    "com.my.java.app.GreatApp"));
+            entry.addAttribute(new StorageAttribute(AUTORUN, "0",
+                                                    StorageAttribute.INT_TYPE));
+
+            // Create table to new database.
+            session2.createTable(APPLICATION_TABLE, entry, null);
+
+            entry.removeAttribute(ID);
+
+            assertTrue("DB2Conn: Populate",
+                       iJtu.populate(session2, APPLICATION_TABLE,
+                                     appUID, entry));
+
+            assertTrue("DB2Conn: Check",
+                       iJtu.checkParams(session2,
+                                        APPLICATION_TABLE, entry, 1));
+
+            iSession.rollbackTransaction();
+            session2.rollbackTransaction();
+        }
+        catch (StorageException se)
+        {
+            iSession.rollbackTransaction();
+
+            if (session2 != null)
+            {
+                session2.rollbackTransaction();
+            }
+
+            assertTrue("Test two diff connections: " + se.getMessage(), false);
+        }
+
+        iSession.close();
+        session2.close();
+        session2.destroySession();
+    }
+
+    /**
+     * Test connection close.
+     * 1. Test close not open connection.
+     * 2. Close connection. JavaStorage cannot be read after that i.e.
+     *    StorageException is thrown.
+     * 3. Test two consecutive close.
+     */
+    public void testClose()
+    {
+        // 1. Close not open.
+        try
+        {
+            iSession.close();
+        }
+        catch (StorageException se)
+        {
+            // PASSED
+        }
+        catch (Throwable t)
+        {
+            assertTrue("Close not open: " + t.toString(), false);
+        }
+
+        // 2. Read not open.
+        try
+        {
+            StorageEntry[] entry = iSession.search(
+                                       JAVA_DATABASE_NAME, iJtu.getDefaultEntry());
+
+            assertTrue("Read closed connection did not thrown exp.", false);
+        }
+        catch (StorageException se)
+        {
+            // PASSED
+        }
+
+        iSession = StorageFactory.createSession();
+
+        // 3. Two closes.
+        try
+        {
+            iSession.close();
+            iSession.close();
+        }
+        catch (StorageException se)
+        {
+            // PASSED
+        }
+        catch (Throwable t)
+        {
+            assertTrue("Two closes: " + t.toString(), false);
+
+        }
+    }
+}