001: /**
002: * Copyright (C) 2006 NetMind Consulting Bt.
003: *
004: * This library is free software; you can redistribute it and/or
005: * modify it under the terms of the GNU Lesser General Public
006: * License as published by the Free Software Foundation; either
007: * version 3 of the License, or (at your option) any later version.
008: *
009: * This library is distributed in the hope that it will be useful,
010: * but WITHOUT ANY WARRANTY; without even the implied warranty of
011: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
012: * Lesser General Public License for more details.
013: *
014: * You should have received a copy of the GNU Lesser General Public
015: * License along with this library; if not, write to the Free Software
016: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
017: */package hu.netmind.persistence;
018:
019: import java.util.List;
020: import java.util.Date;
021:
022: /**
023: * Tests the cache mechanism of the library.
024: * @author Brautigam Robert
025: * @version Revision: $Revision$
026: */
027: public class CacheTests extends AbstractPersistenceTest {
028: public CacheTests(String name) throws Exception {
029: super (name);
030: }
031:
032: public void testCacheHistoricResult() throws Exception {
033: dropTables("book");
034: // Memorize
035: Date noDate = new Date();
036: // Create book
037: Book book = new Book("Cache", "1-2-3-4");
038: // Save in store
039: store.save(book);
040: // Select historically
041: assertEquals(0, store.find("find book at ?",
042: new Object[] { noDate }).size());
043: // Select normally
044: assertEquals(1, store.find("find book").size());
045: }
046:
047: public void testCacheSameTransaction() throws Exception {
048: dropTables("book");
049: // Create book
050: Book book = new Book("Cache", "1-2-3-4");
051: // Save in store
052: store.save(book);
053: // Select
054: Transaction tx = store.getTransactionTracker().getTransaction(
055: TransactionTracker.TX_REQUIRED);
056: tx.begin();
057: List result = store.find("find book where book.title='Cache'");
058: DatabaseStatistics stats = new DatabaseStatistics();
059: stats.add(tx.getStats());
060: // Again
061: result = store.find("find book where book.title='Cache'");
062: // Cache must have been invoked
063: assertEquals(stats.getSelectCount(), tx.getStats()
064: .getSelectCount());
065: // Close transaction
066: tx.commit();
067: }
068:
069: public void testCacheOtherTransaction() throws Exception {
070: dropTables("book");
071: // Create book
072: Book book = new Book("Cache", "1-2-3-4");
073: // Save in store
074: store.save(book);
075: // Select
076: Transaction tx = store.getTransactionTracker().getTransaction(
077: TransactionTracker.TX_REQUIRED);
078: tx.begin();
079: List result = store.find("find book where book.title='Cache'");
080: DatabaseStatistics stats = new DatabaseStatistics();
081: stats.add(tx.getStats());
082: tx.commit();
083: // Again
084: tx = store.getTransactionTracker().getTransaction(
085: TransactionTracker.TX_REQUIRED);
086: tx.begin();
087: result = store.find("find book where book.title='Cache'");
088: // Cache must have been invoked
089: assertEquals(0, tx.getStats().getSelectCount());
090: tx.commit();
091: // Close transaction
092: }
093:
094: public void testCacheModifiedOtherTablesTransaction()
095: throws Exception {
096: dropTables("book");
097: // Create book
098: Book book = new Book("Cache", "1-2-3-4");
099: // Save in store
100: store.save(book);
101: // Select
102: Transaction tx = store.getTransactionTracker().getTransaction(
103: TransactionTracker.TX_REQUIRED);
104: tx.begin();
105: store.save(new Author("Spence", "Persi")); // Unrelated save
106: List result = store.find("find book where book.title='Cache'");
107: DatabaseStatistics stats = new DatabaseStatistics();
108: stats.add(tx.getStats());
109: tx.commit();
110: // Again
111: tx = store.getTransactionTracker().getTransaction(
112: TransactionTracker.TX_REQUIRED);
113: tx.begin();
114: result = store.find("find book where book.title='Cache'");
115: // Cache must have been invoked
116: assertEquals(0, tx.getStats().getSelectCount());
117: tx.commit();
118: // Close transaction
119: }
120:
121: public void testCacheModifiedSameTableTransaction()
122: throws Exception {
123: dropTables("book");
124: // Create book
125: Book book = new Book("Cache", "1-2-3-4");
126: // Save in store
127: store.save(book);
128: // Select
129: Transaction tx = store.getTransactionTracker().getTransaction(
130: TransactionTracker.TX_REQUIRED);
131: tx.begin();
132: store.save(new Book("Persistence does Cache", "1-2-3-4")); // Make tx dirty
133: List result = store.find("find book where book.title='Cache'");
134: DatabaseStatistics stats = new DatabaseStatistics();
135: stats.add(tx.getStats());
136: tx.commit();
137: // Again
138: tx = store.getTransactionTracker().getTransaction(
139: TransactionTracker.TX_REQUIRED);
140: tx.begin();
141: result = store.find("find book where book.title='Cache'");
142: result.size(); // Make it load
143: // Cache was not invoked
144: assertEquals(1, tx.getStats().getSelectCount());
145: tx.commit();
146: // Close transaction
147: }
148:
149: public void testCacheModifiedRelatedTableTransaction()
150: throws Exception {
151: dropTables("book");
152: // Create book
153: Book book = new Book("Cache", "1-2-3-4");
154: book.setMainAuthor(new Author("Spence", "Persi"));
155: // Save in store
156: store.save(book);
157: // Select
158: Transaction tx = store.getTransactionTracker().getTransaction(
159: TransactionTracker.TX_REQUIRED);
160: tx.begin();
161: store.save(new Author("Candy", "Cache")); // Make tx dirty
162: List result = store
163: .find("find book where book.mainauthor.firstName='Spence'");
164: DatabaseStatistics stats = new DatabaseStatistics();
165: stats.add(tx.getStats());
166: tx.commit();
167: // Again
168: tx = store.getTransactionTracker().getTransaction(
169: TransactionTracker.TX_REQUIRED);
170: tx.begin();
171: result = store
172: .find("find book where book.mainauthor.firstName='Spence'");
173: result.size();
174: // Cache was not invoked
175: assertEquals(1, tx.getStats().getSelectCount());
176: tx.commit();
177: // Close transaction
178: }
179:
180: }
|