/* * Copyright 2001-2008 Geert Bevin (gbevin[remove] at uwyn dot com) and * JR Boyens <gnu-jrb[remove] at gmx dot net> * Licensed under the Apache License, Version 2.0 (the "License") * $Id: TestGenericQueryManagerSimple.java 3918 2008-04-14 17:35:35Z gbevin $ */ package com.uwyn.rife.database.querymanagers.generic; import java.sql.ResultSet; import java.sql.SQLException; import java.util.List; import java.util.UUID; import junit.framework.TestCase; import com.uwyn.rife.database.Datasource; import com.uwyn.rife.database.DbRowProcessor; import com.uwyn.rife.database.SomeEnum; import com.uwyn.rife.database.exceptions.DatabaseException; import com.uwyn.rife.database.querymanagers.generic.beans.NoDefaultConstructorBean; import com.uwyn.rife.database.querymanagers.generic.beans.SimpleBean; import com.uwyn.rife.database.querymanagers.generic.beans.SparseBean; import com.uwyn.rife.database.querymanagers.generic.exceptions.MissingDefaultConstructorException; public class TestGenericQueryManagerSimple extends TestCase { private Datasource mDatasource = null; private GenericQueryManager<SimpleBean> mSimpleManager = null; public TestGenericQueryManagerSimple(Datasource datasource, String datasourceName, String name) { super(name); mDatasource = datasource; } protected void setUp() throws Exception { mSimpleManager = GenericQueryManagerFactory.getInstance(mDatasource, SimpleBean.class); int poolsize = mDatasource.getPoolsize(); // disabling pool for firebird if ("org.firebirdsql.jdbc.FBDriver".equals(mDatasource.getAliasedDriver())) { mDatasource.setPoolsize(0); } try { mSimpleManager.install(); } finally { if ("org.firebirdsql.jdbc.FBDriver".equals(mDatasource.getAliasedDriver())) { mDatasource.setPoolsize(poolsize); } } } protected void tearDown() throws Exception { int poolsize = mDatasource.getPoolsize(); // disabling pool for firebird if ("org.firebirdsql.jdbc.FBDriver".equals(mDatasource.getAliasedDriver())) { mDatasource.setPoolsize(0); } try { mSimpleManager.remove(); } finally { if ("org.firebirdsql.jdbc.FBDriver".equals(mDatasource.getAliasedDriver())) { mDatasource.setPoolsize(poolsize); } } } public void testNoDefaultConstructor() { try { GenericQueryManagerFactory.getInstance(mDatasource, NoDefaultConstructorBean.class); fail("MissingDefaultConstructorException exception wasn't thrown"); } catch (MissingDefaultConstructorException e) { assertSame(e.getBeanClass(), NoDefaultConstructorBean.class); } } public void testGetBaseClass() { assertSame(SimpleBean.class, mSimpleManager.getBaseClass()); } public void testInstallCustomQuery() { int poolsize = mDatasource.getPoolsize(); // disabling pool for firebird if ("org.firebirdsql.jdbc.FBDriver".equals(mDatasource.getAliasedDriver())) { mDatasource.setPoolsize(0); } try { mSimpleManager.remove(); mSimpleManager.install(mSimpleManager.getInstallTableQuery()); } finally { if ("org.firebirdsql.jdbc.FBDriver".equals(mDatasource.getAliasedDriver())) { mDatasource.setPoolsize(poolsize); } } } public void testSaveRestore() { SimpleBean bean = new SimpleBean(); SimpleBean newbean = null; UUID uuid1 = UUID.randomUUID(); bean.setTestString("This is my test string"); bean.setUuid(uuid1); bean.setEnum(SomeEnum.VALUE_TWO); int id = mSimpleManager.save(bean); newbean = mSimpleManager.restore(id); assertTrue(newbean != null); assertTrue(newbean != bean); assertEquals(newbean.getTestString(), bean.getTestString()); assertEquals(newbean.getId(), id); assertEquals(newbean.getUuid(), uuid1); assertEquals(newbean.getEnum(), SomeEnum.VALUE_TWO); UUID uuid2 = UUID.randomUUID(); bean.setId(id); bean.setTestString("This is a new test string"); bean.setUuid(uuid2); bean.setEnum(SomeEnum.VALUE_THREE); assertEquals(mSimpleManager.save(bean), id); assertEquals(bean.getId(), id); newbean = mSimpleManager.restore(id); assertTrue(newbean != null); assertTrue(newbean != bean); assertEquals(newbean.getTestString(), "This is a new test string"); assertEquals(newbean.getUuid(), uuid2); assertEquals(newbean.getEnum(), SomeEnum.VALUE_THREE); bean.setId(999999); bean.setTestString("This is another test string"); assertFalse(999999 == mSimpleManager.save(bean)); assertEquals(bean.getId(), id+1); GenericQueryManager<SimpleBean> manager_othertable = GenericQueryManagerFactory.getInstance(mDatasource, SimpleBean.class, "othertable"); manager_othertable.install(); SimpleBean bean2 = new SimpleBean(); bean2.setTestString("test"); manager_othertable.save(bean2); SimpleBean bean3 = manager_othertable.restore(bean2.getId()); assertEquals(bean3.getTestString(), bean2.getTestString()); manager_othertable.remove(); } public void testSparseIdentifier() { GenericQueryManager<SparseBean> manager_sparsebean = GenericQueryManagerFactory.getInstance(mDatasource, SparseBean.class); SparseBean sparse_bean = new SparseBean(); manager_sparsebean.install(); sparse_bean.setId(1000); sparse_bean.setTestString("Test String"); assertTrue(1000 == manager_sparsebean.save(sparse_bean)); SparseBean restored_sparsebean = manager_sparsebean.restore(1000); assertEquals(restored_sparsebean.getId(), 1000); assertEquals(restored_sparsebean.getTestString(), "Test String"); try { manager_sparsebean.insert(sparse_bean); assertFalse(true); } catch (DatabaseException e) { assertTrue(true); } assertTrue(1000 == manager_sparsebean.update(sparse_bean)); sparse_bean.setId(1001); assertTrue(-1 == manager_sparsebean.update(sparse_bean)); // not there; update should fail manager_sparsebean.remove(); } public void testDelete() { SimpleBean bean = new SimpleBean(); bean.setTestString("This is my test string"); int id1 = mSimpleManager.save(bean); assertTrue(mSimpleManager.restore(id1) != null); mSimpleManager.delete(id1); assertTrue(mSimpleManager.restoreFirst(mSimpleManager.getRestoreQuery(id1)) == null); int id2 = mSimpleManager.save(bean); assertTrue(mSimpleManager.restoreFirst(mSimpleManager.getRestoreQuery(id2)) != null); mSimpleManager.delete(mSimpleManager.getDeleteQuery(id2)); assertTrue(mSimpleManager.restore(id2) == null); } public void testRestore() { SimpleBean bean1 = new SimpleBean(); SimpleBean bean2 = new SimpleBean(); SimpleBean bean3 = new SimpleBean(); UUID uuid1 = UUID.randomUUID(); UUID uuid2 = UUID.randomUUID(); UUID uuid3 = UUID.randomUUID(); bean1.setTestString("This is bean1"); bean1.setUuid(uuid1); bean1.setEnum(SomeEnum.VALUE_ONE); bean2.setTestString("This is bean2"); bean2.setUuid(uuid2); bean2.setEnum(SomeEnum.VALUE_TWO); bean3.setTestString("This is bean3"); bean3.setUuid(uuid3); bean3.setEnum(SomeEnum.VALUE_THREE); mSimpleManager.save(bean1); mSimpleManager.save(bean2); mSimpleManager.save(bean3); List<SimpleBean> list = mSimpleManager.restore(); assertEquals(list.size(), 3); for (SimpleBean bean : list) { assertTrue(bean != null); assertTrue(bean != bean1 || bean != bean2 || bean != bean3); assertTrue( bean.getTestString().equals("This is bean1") && bean.getUuid().equals(uuid1) && bean.getEnum().equals(SomeEnum.VALUE_ONE) || bean.getTestString().equals("This is bean2") && bean.getUuid().equals(uuid2) && bean.getEnum().equals(SomeEnum.VALUE_TWO) || bean.getTestString().equals("This is bean3") && bean.getUuid().equals(uuid3) && bean.getEnum().equals(SomeEnum.VALUE_THREE)); } } public void testRestoreRowProcessor() { SimpleBean bean1 = new SimpleBean(); SimpleBean bean2 = new SimpleBean(); SimpleBean bean3 = new SimpleBean(); final UUID uuid1 = UUID.randomUUID(); final UUID uuid2 = UUID.randomUUID(); final UUID uuid3 = UUID.randomUUID(); bean1.setTestString("This is bean1"); bean1.setUuid(uuid1); bean1.setEnum(SomeEnum.VALUE_ONE); bean2.setTestString("This is bean2"); bean2.setUuid(uuid2); bean2.setEnum(SomeEnum.VALUE_TWO); bean3.setTestString("This is bean3"); bean3.setUuid(uuid3); bean3.setEnum(SomeEnum.VALUE_THREE); mSimpleManager.save(bean1); mSimpleManager.save(bean2); mSimpleManager.save(bean3); final int[] count = new int[] {0}; mSimpleManager.restore(new DbRowProcessor() { public boolean processRow(ResultSet resultSet) throws SQLException { count[0]++; String test_string = resultSet.getString("testString"); assertTrue( test_string.equals("This is bean1") || test_string.equals("This is bean2") || test_string.equals("This is bean3") ); String uuid = resultSet.getString("uuid"); assertTrue( uuid.equals(uuid1.toString()) || uuid.equals(uuid2.toString()) || uuid.equals(uuid3.toString())); return true; } }); assertEquals(count[0], 3); } public void testRestoreQueryRowProcessor() { SimpleBean bean1 = new SimpleBean(); SimpleBean bean2 = new SimpleBean(); SimpleBean bean3 = new SimpleBean(); final UUID uuid1 = UUID.randomUUID(); final UUID uuid2 = UUID.randomUUID(); final UUID uuid3 = UUID.randomUUID(); bean1.setTestString("This is bean1"); bean1.setUuid(uuid1); bean2.setTestString("This is bean2"); bean2.setUuid(uuid2); bean3.setTestString("This is bean3"); bean3.setUuid(uuid3); mSimpleManager.save(bean1); mSimpleManager.save(bean2); mSimpleManager.save(bean3); final int[] count = new int[] {0}; mSimpleManager.restore(mSimpleManager.getRestoreQuery().where("testString", "LIKE", "%bean2"), new DbRowProcessor() { public boolean processRow(ResultSet resultSet) throws SQLException { count[0]++; String test_string = resultSet.getString("testString"); assertTrue(test_string.equals("This is bean2")); String uuid = resultSet.getString("uuid"); assertTrue(uuid.equals(uuid2.toString())); return true; } }); assertEquals(count[0], 1); } public void testCount() { SimpleBean bean1 = new SimpleBean(); SimpleBean bean2 = new SimpleBean(); SimpleBean bean3 = new SimpleBean(); SimpleBean bean4 = new SimpleBean(); SimpleBean bean5 = new SimpleBean(); bean1.setTestString("bean set 1"); bean2.setTestString("bean set 1"); bean3.setTestString("bean set 1"); bean4.setTestString("bean set 2"); bean5.setTestString("bean set 2"); mSimpleManager.save(bean1); mSimpleManager.save(bean2); mSimpleManager.save(bean3); mSimpleManager.save(bean4); mSimpleManager.save(bean5); assertEquals(mSimpleManager.count(), 5); mSimpleManager.delete(bean1.getId()); mSimpleManager.delete(bean2.getId()); mSimpleManager.delete(bean3.getId()); assertEquals(mSimpleManager.count(), 2); } }