Index: topia/src/test/org/codelutin/topia/persistence/PersistenceStorageTest.java diff -u /dev/null topia/src/test/org/codelutin/topia/persistence/PersistenceStorageTest.java:1.1 --- /dev/null Fri Jul 22 16:52:52 2005 +++ topia/src/test/org/codelutin/topia/persistence/PersistenceStorageTest.java Fri Jul 22 16:52:47 2005 @@ -0,0 +1,338 @@ +/* *##% + * Copyright (C) 2005 + * Code Lutin, Cédric Pineau, Benjamin Poussin + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + *##%*/ + +/* * + * TopiaPersistenceStorageTest.java + * + * Created: 21 juillet 2005 19:57:28 CEST + * + * @author Benjamin POUSSIN + * @version $Revision: 1.1 $ + * + * Last update: $Date: 2005/07/22 16:52:47 $ + * by : $Author: bpoussin $ + */ + +package org.codelutin.topia.persistence; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.logging.Level; +import java.util.logging.Logger; +import java.util.Properties; +import junit.framework.TestCase; +import org.codelutin.topia.TopiaConst; +import org.codelutin.topia.TopiaId; +import org.codelutin.topia.TopiaUser; + +public class PersistenceStorageTest extends TestCase { // TopiaPersistenceStorageTest + + /** to use log facility, just put in your code: log.info(\"...\"); */ + static private Logger log = Logger.getLogger("org.codelutin.topia.persistence.TopiaPersistenceStorageTest"); + + PersistenceStorageJDBC storage = null; + TopiaTransactionHelper tth = null; + + int MAX = 1000; + + public void setUp() throws Exception { + Properties config = new Properties(); + // config.setProperty(TopiaConst.PERSISTENCE_STORAGE_JDBC_DRIVER, "oracle.jdbc.driver.OracleDriver"); + // config.setProperty(TopiaConst.PERSISTENCE_STORAGE_JDBC_URL, "jdbc:oracle:thin:@oracle.codelutin.home:1521:setib"); + + // config.setProperty(TopiaConst.PERSISTENCE_STORAGE_JDBC_DRIVER, "com.mckoi.JDBCDriver"); + // config.setProperty(TopiaConst.PERSISTENCE_STORAGE_JDBC_URL, "jdbc:mckoi:local:///tmp/mckoi/db.conf?create_or_boot=true&log_path=/tmp/mckoi"); + + // config.setProperty(TopiaConst.PERSISTENCE_STORAGE_JDBC_DRIVER, "com.mckoi.JDBCDriver"); + // config.setProperty(TopiaConst.PERSISTENCE_STORAGE_JDBC_URL, "jdbc:mckoi://localhost/test"); + + config.setProperty(TopiaConst.PERSISTENCE_STORAGE_JDBC_DRIVER, "com.mysql.jdbc.Driver"); + config.setProperty(TopiaConst.PERSISTENCE_STORAGE_JDBC_URL, "jdbc:mysql:///test"); + + // config.setProperty(TopiaConst.PERSISTENCE_STORAGE_JDBC_DRIVER, "org.postgresql.Driver"); + // config.setProperty(TopiaConst.PERSISTENCE_STORAGE_JDBC_URL, "jdbc:postgresql:test"); + + config.setProperty(TopiaConst.PERSISTENCE_STORAGE_JDBC_LOGIN, "dbuser"); + config.setProperty(TopiaConst.PERSISTENCE_STORAGE_JDBC_PASSWORD, "xxxxxxxx"); + + tth = new TopiaTransactionHelper(config); + storage = new PersistenceStorageJDBC(config); + } + + public void testCommit() throws Exception { + TopiaTransaction tt = tth.newTranstaction(); + + String id = TopiaId.create(TopiaUser.class); + + TopiaPersistenceObject o = new TopiaPersistenceObject(id); + TopiaPersistenceObject o2 = new TopiaPersistenceObject(id); + + o.getData().setField("name", "poussin"); + storage.beginTransaction(tt); + storage.store(tt, o); + + assertTrue(storage.exists(tt, id)); + tt = storage.commitTransaction(tt); + + TopiaTransaction tt3 = tth.newTranstaction(); + + assertTrue(storage.exists(tt, id)); + assertTrue(storage.exists(tt3, id)); + + o2.getAskedFields().add("name"); + storage.restore(tt3, o2); + + assertEquals(o.getData(), o2.getData()); + assertEquals("poussin", o.getData().getField("name")); + assertEquals("poussin", o2.getData().getField("name")); + } + + public void testRollback() throws Exception { + TopiaTransaction tt = tth.newTranstaction(); + String id = TopiaId.create(TopiaUser.class); + TopiaPersistenceObject o = new TopiaPersistenceObject(id); + + o.getData().setField("name", "poussin"); + storage.beginTransaction(tt); + storage.store(tt, o); + + assertTrue(storage.exists(tt, id)); + + tt = storage.rollbackTransaction(tt); + + assertFalse(storage.exists(tt, id)); + } + + public void testIsolation() throws Exception { + TopiaTransaction tt = tth.newTranstaction(); + TopiaTransaction tt2 = tth.newTranstaction(); + + String id = TopiaId.create(TopiaUser.class); + + TopiaPersistenceObject o = new TopiaPersistenceObject(id); + TopiaPersistenceObject o2 = new TopiaPersistenceObject(id); + + o.getData().setField("name", "poussin"); + storage.beginTransaction(tt); + storage.store(tt, o); + + assertTrue(storage.exists(tt, id)); + assertFalse(storage.exists(tt2, id)); + tt = storage.commitTransaction(tt); + + TopiaTransaction tt3 = tth.newTranstaction(); + + assertTrue(storage.exists(tt, id)); + assertFalse(storage.exists(tt2, id)); + assertTrue(storage.exists(tt3, id)); + + o.getData().setField("name", "repoussin"); + storage.store(tt, o); + + assertTrue(storage.exists(tt, id)); + assertFalse(storage.exists(tt2, id)); + assertTrue(storage.exists(tt3, id)); + + tt = storage.commitTransaction(tt); + + assertTrue(storage.exists(tt, id)); + assertFalse(storage.exists(tt2, id)); + assertTrue(storage.exists(tt3, id)); + + o2.getAskedFields().add("name"); + storage.restore(tt3, o2); + + assertFalse(o.getData().equals(o2.getData())); + assertEquals("repoussin", o.getData().getField("name")); + assertEquals("poussin", o2.getData().getField("name")); + } + + public void testDelete() throws Exception { + TopiaTransaction tt = tth.newTranstaction(); + + String id = TopiaId.create(TopiaUser.class); + + TopiaPersistenceObject o = new TopiaPersistenceObject(id); + TopiaPersistenceObject o2 = new TopiaPersistenceObject(id); + + o.getData().setField("name", "poussin"); + storage.beginTransaction(tt); + storage.store(tt, o); + + assertTrue(storage.exists(tt, id)); + tt = storage.commitTransaction(tt); + + TopiaTransaction tt3 = tth.newTranstaction(); + + assertTrue(storage.exists(tt, id)); + assertTrue(storage.exists(tt3, id)); + + o.getManagement().setDeleted(true); + storage.store(tt, o); + + assertFalse(storage.exists(tt, id)); + assertTrue(storage.exists(tt3, id)); + + tt = storage.commitTransaction(tt); + + assertFalse(storage.exists(tt, id)); + assertTrue(storage.exists(tt3, id)); + + TopiaTransaction tt4 = tth.newTranstaction(); + + assertFalse(storage.exists(tt, id)); + assertFalse(storage.exists(tt4, id)); + } + + public void testGetAllId() throws Exception { + TopiaTransaction tt = tth.newTranstaction(); + + Collection ids = storage.getAllId(tt); + log.info("ids.size: " + ids.size()); + Collection os = new ArrayList(ids.size()); + for(String id: ids){ + TopiaPersistenceObject o = new TopiaPersistenceObject(id); + o.getManagement().setDeleted(true); + os.add(o); + } + + storage.beginTransaction(tt); + storage.store(tt, os); + + Collection idsvide = storage.getAllId(tt); + assertEquals(0, idsvide.size()); + + TopiaTransaction tt2 = tth.newTranstaction(); + Collection ids2 = storage.getAllId(tt2); + assertEquals(ids, ids2); + + storage.commitTransaction(tt); + + TopiaTransaction tt3 = tth.newTranstaction(); + Collection ids3 = storage.getAllId(tt3); + assertEquals(0, ids3.size()); + } + + public void testDataType() throws Exception { + TopiaTransaction tt = tth.newTranstaction(); + System.out.println("tt=" + tt); + String id = TopiaId.create(TopiaUser.class); + System.out.println("id=" + id); + TopiaPersistenceObject o = new TopiaPersistenceObject(id); + TopiaPersistenceObject o2 = new TopiaPersistenceObject(id); + + o.getData().setField("string", "poussin"); + o2.getAskedFields().add("string"); + + o.getData().setField("boolean", Boolean.TRUE); + o2.getAskedFields().add("boolean"); + + o.getData().setField("byte", Byte.valueOf((byte)1)); + o2.getAskedFields().add("byte"); + + o.getData().setField("int", Integer.valueOf(2)); + o2.getAskedFields().add("int"); + + o.getData().setField("double", Double.valueOf(3.3)); + o2.getAskedFields().add("double"); + + o.getData().setField("char", Character.valueOf('c')); + o2.getAskedFields().add("char"); + + o.getData().setField("object", new ArrayList()); + o2.getAskedFields().add("object"); + + storage.beginTransaction(tt); + storage.store(tt, o); + tt = storage.commitTransaction(tt); + + storage.restore(tt, o2); + + System.out.println("o =" + o.getData()); + System.out.println("o2=" + o2.getData()); + assertEquals(o.getData(), o2.getData()); + } + + public void testPerf() throws Exception { + TopiaTransaction tt = tth.newTranstaction(); + + long time = System.currentTimeMillis(); + + ArrayList list = new ArrayList(MAX); + for(int i=0; i