001: /*
002: * ====================================================================
003: * JAFFA - Java Application Framework For All
004: *
005: * Copyright (C) 2002 JAFFA Development Group
006: *
007: * This library is free software; you can redistribute it and/or
008: * modify it under the terms of the GNU Lesser General Public
009: * License as published by the Free Software Foundation; either
010: * version 2.1 of the License, or (at your option) any later version.
011: *
012: * This library is distributed in the hope that it will be useful,
013: * but WITHOUT ANY WARRANTY; without even the implied warranty of
014: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
015: * Lesser General Public License for more details.
016: *
017: * You should have received a copy of the GNU Lesser General Public
018: * License along with this library; if not, write to the Free Software
019: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
020: *
021: * Redistribution and use of this software and associated documentation ("Software"),
022: * with or without modification, are permitted provided that the following conditions are met:
023: * 1. Redistributions of source code must retain copyright statements and notices.
024: * Redistributions must also contain a copy of this document.
025: * 2. Redistributions in binary form must reproduce the above copyright notice,
026: * this list of conditions and the following disclaimer in the documentation
027: * and/or other materials provided with the distribution.
028: * 3. The name "JAFFA" must not be used to endorse or promote products derived from
029: * this Software without prior written permission. For written permission,
030: * please contact mail to: jaffagroup@yahoo.com.
031: * 4. Products derived from this Software may not be called "JAFFA" nor may "JAFFA"
032: * appear in their names without prior written permission.
033: * 5. Due credit should be given to the JAFFA Project (http://jaffa.sourceforge.net).
034: *
035: * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED
036: * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
037: * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
038: * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
039: * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
040: * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
041: * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
042: * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
043: * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
044: * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
045: * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
046: * SUCH DAMAGE.
047: * ====================================================================
048: */
049:
050: /*
051: * HitlistTest.java
052: *
053: * Created on April 18, 2002, 3:52 PM
054: */
055:
056: package org.jaffa.persistence.blackboxtests;
057:
058: import junit.framework.TestCase;
059: import java.util.*;
060: import org.jaffa.datatypes.DateTime;
061: import org.jaffa.persistence.UOW;
062: import org.jaffa.persistence.Criteria;
063: import org.jaffa.persistence.IPersistent;
064: import org.jaffa.persistence.domainobjects.*;
065:
066: /**
067: *
068: * @author GautamJ
069: * @version
070: */
071: public class HitlistTest extends TestCase {
072:
073: private UOW m_uow = null;
074:
075: /** Creates new QueryTest
076: * @param name The name of the test case.
077: */
078: public HitlistTest(String name) {
079: super (name);
080: }
081:
082: /** Sets up the fixture, by creating the UOW. This method is called before a test is executed.
083: */
084: protected void setUp() {
085: try {
086: m_uow = new UOW();
087: } catch (Exception e) {
088: e.printStackTrace();
089: fail("Failed to create a UOW: " + e.toString());
090: }
091: }
092:
093: /** Tears down the fixture, by closing the UOW. This method is called after a test is executed.
094: */
095: protected void tearDown() {
096: try {
097: if (m_uow != null)
098: m_uow.rollback();
099: m_uow = null;
100: } catch (Exception e) {
101: e.printStackTrace();
102: fail("Failed to rollback a UOW: " + e.toString());
103: }
104: }
105:
106: /** This creates 123 Item records. It then retrieves them. After reading each record, the size of the Collection will be checked.
107: * The size will increment in steps of hitlist size (which is assumed to be 10). The size will be negative, until all the records have been fetched.
108: */
109: public void testHitlist() {
110: try {
111: int rows = 123;
112: int hitlistSize = 10;
113: String itemIdPrefix = "ZZ-HIT-LIST-";
114: DateTime createdDateTime = new DateTime();
115:
116: // create items
117: for (int i = 1; i <= rows; i++) {
118: Item item = (Item) m_uow
119: .newPersistentInstance(Item.class);
120: item.updateItemId(itemIdPrefix + i);
121: item.updateQty(new Long(i));
122: item.updateCreatedDatetime(createdDateTime);
123: m_uow.add(item);
124: }
125: m_uow.commit();
126:
127: // now retrieve the items
128: m_uow = new UOW();
129: Criteria c = new Criteria();
130: c.setLocking(Criteria.LOCKING_PARANOID);
131: c.setTable(ItemMeta.getName());
132: c.addCriteria(ItemMeta.ITEM_ID,
133: Criteria.RELATIONAL_BEGINS_WITH, itemIdPrefix);
134: c.addOrderBy(ItemMeta.QTY, Criteria.ORDER_BY_ASC);
135: Collection items = m_uow.query(c);
136: assertEquals(-hitlistSize, items.size());
137: int i = 0;
138: for (Iterator itr = items.iterator(); itr.hasNext();) {
139: ++i;
140: Item item = (Item) itr.next();
141: assertEquals(itemIdPrefix + i, item.getItemId());
142: assertEquals(new Long(i), item.getQty());
143: assertEquals(createdDateTime.toString(), item
144: .getCreatedDatetime().toString());
145:
146: // hitlist checks
147: if (i == rows) {
148: assertEquals(rows, items.size());
149: } else if (i % hitlistSize == 0) {
150: assertEquals(-i, items.size());
151: } else {
152: int expectedSize = i - (i % hitlistSize)
153: + hitlistSize;
154: if (expectedSize >= rows)
155: assertEquals(rows, items.size());
156: else
157: assertEquals(-expectedSize, items.size());
158: }
159: }
160:
161: // one final check.. to ensure that all the records were retrieved
162: assertEquals(rows, items.size());
163:
164: // now delete the records
165: for (Iterator itr = items.iterator(); itr.hasNext();)
166: m_uow.delete((IPersistent) itr.next());
167: m_uow.commit();
168:
169: } catch (Exception e) {
170: e.printStackTrace();
171: fail();
172: }
173: }
174: }
|