/*
* Copyright 2005 Ralf Joachim
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.castor.cpaptf.rel1toN;
import java.text.DecimalFormat;
import java.util.Date;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.exolab.castor.jdo.Database;
import org.exolab.castor.jdo.JDOManager;
import org.exolab.castor.jdo.OQLQuery;
import org.exolab.castor.jdo.QueryResults;
/**
* @author <a href="mailto:ralf DOT joachim AT syscon DOT eu">Ralf Joachim</a>
* @version $Revision:6814 $ $Date: 2005-06-24 19:41:08 -0600 (Fri, 24 Jun 2005) $
*/
public final class TestCreate extends TestCase {
private static final String JDO_CONF_FILE = "uni-jdo-conf.xml";
private static final String DATABASE_NAME = "rel1toN_uni";
/** Factor that influences how much test objects are created. Defaults to 1.0 which
* means that 10000 service objects are created. Minimum is 0.2 and maximum depends
* onthe amount of memory you have available for your virtual machine. */
public static final double FACTOR = 0.2;
private static final int LOCKED_MAX = 4;
private static final int STATE_MAX = (int) (7 * FACTOR);
private static final int DEPARTMENT_MAX = (int) (29 * FACTOR);
private static final int REASON_MAX = (int) (11 * FACTOR);
private static final int SUPPLIER_MAX = (int) (17 * FACTOR);
private static final int TYPE_MAX = (int) (333 * FACTOR);
private static final int EQUIPMENT_MAX = (int) (1967 * FACTOR);
private static final int SERVICE_MAX = (int) (10000 * FACTOR);
private static final Log LOG = LogFactory.getLog(TestCreate.class);
private static boolean _logHeader = false;
private JDOManager _jdo = null;
public static Test suite() throws Exception {
String config = TestCreate.class.getResource(JDO_CONF_FILE).toString();
JDOManager.loadConfiguration(config, TestCreate.class.getClassLoader());
TestSuite suite = new TestSuite("Setup ptf.jdo.rel1toN test objects");
suite.addTest(new TestCreate("testLoadLocked"));
suite.addTest(new TestCreate("testCreateState"));
suite.addTest(new TestCreate("testCreateDepartment"));
suite.addTest(new TestCreate("testCreateReason"));
suite.addTest(new TestCreate("testCreateSupplier"));
suite.addTest(new TestCreate("testCreateType"));
suite.addTest(new TestCreate("testCreateEquipment"));
suite.addTest(new TestCreate("testCreateService"));
return suite;
}
public TestCreate() {
super();
}
public TestCreate(final String name) {
super(name);
}
protected void setUp() throws Exception {
super.setUp();
if (!_logHeader) {
LOG.info("");
LOG.info("");
LOG.info("TestCreate (" + (int) (10000 * TestCreate.FACTOR) + ")");
LOG.info("");
_logHeader = true;
}
_jdo = JDOManager.createInstance(DATABASE_NAME);
}
protected void tearDown() throws Exception {
super.tearDown();
}
public void testLoadLocked() throws Exception {
Database db = _jdo.getDatabase();
db.begin();
OQLQuery query = db.getOQLQuery("SELECT o FROM " + Locked.class.getName() + " o");
QueryResults results = query.execute();
int count = 0;
while (results.hasMore()) {
Locked locked = (Locked) results.next();
assertTrue(new Integer(1).equals(locked.getId())
|| new Integer(2).equals(locked.getId())
|| new Integer(3).equals(locked.getId())
|| new Integer(4).equals(locked.getId()));
count++;
}
assertTrue(4 == count);
db.commit();
db.close();
}
public void testCreateState() throws Exception {
Locked locked;
int countLocked = 1;
State state;
Date date = new Date();
long time = System.currentTimeMillis();
int count = 1;
Database db = _jdo.getDatabase();
db.begin();
while (count <= STATE_MAX) {
locked = db.load(Locked.class, new Integer(countLocked));
state = new State();
state.setId(new Integer(count));
state.setName("state " + count);
state.setLocked(locked);
state.setInput((count % 2) == 0);
state.setOutput((count % 2) == 1);
state.setService((count % 3) == 0);
state.setChangeFrom((count % 3) == 1);
state.setChangeTo((count % 3) == 2);
state.setCreated(date, "user");
state.setUpdated(date, "user");
db.create(state);
countLocked = (countLocked < LOCKED_MAX) ? (countLocked + 1) : 1;
count++;
}
db.commit();
db.close();
LOG.info("Created " + (count - 1) + " state objects in "
+ (System.currentTimeMillis() - time) + "ms.");
}
public void testCreateDepartment() throws Exception {
State state;
int countState = 1;
Department dept;
Date date = new Date();
long time = System.currentTimeMillis();
int count = 1;
Database db = _jdo.getDatabase();
db.begin();
while (count <= DEPARTMENT_MAX) {
state = db.load(State.class, new Integer(countState));
dept = new Department();
dept.setId(new Integer(count));
dept.setName("department " + count);
dept.setState(state);
dept.setCreated(date, "user");
dept.setUpdated(date, "user");
db.create(dept);
countState = (countState < STATE_MAX) ? (countState + 1) : 1;
count++;
}
db.commit();
db.close();
LOG.info("Created " + (count - 1) + " department objects in "
+ (System.currentTimeMillis() - time) + "ms.");
}
public void testCreateReason() throws Exception {
Reason reason;
Date date = new Date();
long time = System.currentTimeMillis();
int count = 1;
Database db = _jdo.getDatabase();
db.begin();
while (count <= REASON_MAX) {
reason = new Reason();
reason.setId(new Integer(count));
reason.setName("reason " + count);
reason.setFailure((count % 2) == 0);
reason.setCreated(date, "user");
reason.setUpdated(date, "user");
db.create(reason);
count++;
}
db.commit();
db.close();
LOG.info("Created " + (count - 1) + " reason objects in "
+ (System.currentTimeMillis() - time) + "ms.");
}
public void testCreateSupplier() throws Exception {
Supplier supplier;
Date date = new Date();
long time = System.currentTimeMillis();
int count = 1;
Database db = _jdo.getDatabase();
db.begin();
while (count <= SUPPLIER_MAX) {
supplier = new Supplier();
supplier.setId(new Integer(count));
supplier.setName("supplier " + count);
supplier.setCreated(date, "user");
supplier.setUpdated(date, "user");
db.create(supplier);
count++;
}
db.commit();
db.close();
LOG.info("Created " + (count - 1) + " supplier objects in "
+ (System.currentTimeMillis() - time) + "ms.");
}
public void testCreateType() throws Exception {
Type type;
Date date = new Date();
long time = System.currentTimeMillis();
int count = 1;
Database db = _jdo.getDatabase();
db.begin();
while (count <= TYPE_MAX) {
type = new Type();
type.setId(new Integer(count));
type.setNumber(new Integer(5000 + count).toString());
type.setCreated(date, "user");
type.setUpdated(date, "user");
db.create(type);
count++;
}
db.commit();
db.close();
LOG.info("Created " + (count - 1) + " type objects in "
+ (System.currentTimeMillis() - time) + "ms.");
}
public void testCreateEquipment() throws Exception {
DecimalFormat df = new DecimalFormat("000000");
Type type;
int countType = 1;
Supplier supplier;
int countSupplier = 1;
State state;
int countState = 1;
Reason reason;
int countReason = 1;
Equipment equip;
Date date = new Date();
long time = System.currentTimeMillis();
int count = 1;
Database db = _jdo.getDatabase();
db.begin();
while (count <= EQUIPMENT_MAX) {
type = db.load(Type.class, new Integer(countType));
supplier = db.load(Supplier.class, new Integer(countSupplier));
state = db.load(State.class, new Integer(countState));
reason = db.load(Reason.class, new Integer(countReason));
equip = new Equipment();
equip.setId(new Integer(count));
equip.setType(type);
equip.setNumber(new Integer(10000 + count).toString());
equip.setSupplier(supplier);
equip.setDelivery(new Integer(7 + (count % 13)));
equip.setCost(new Double(12.3456 * (7 + (count % 13))));
equip.setSerial("S/N" + df.format(count));
equip.setState(state);
equip.setReason(reason);
equip.setCount(new Integer(count));
equip.setCreated(date, "user");
equip.setUpdated(date, "user");
db.create(equip);
countType = (countType < TYPE_MAX) ? (countType + 1) : 1;
countSupplier = (countSupplier < SUPPLIER_MAX) ? (countSupplier + 1) : 1;
countState = (countState < STATE_MAX) ? (countState + 1) : 1;
countReason = (countReason < REASON_MAX) ? (countReason + 1) : 1;
count++;
}
db.commit();
db.close();
LOG.info("Created " + (count - 1) + " equipment objects in "
+ (System.currentTimeMillis() - time) + "ms.");
}
public void testCreateService() throws Exception {
Equipment equip;
int countEquip = 1;
Service service;
Date date = new Date();
long time = System.currentTimeMillis();
int count = 1;
Database db = _jdo.getDatabase();
db.begin();
while (count <= SERVICE_MAX) {
equip = db.load(Equipment.class, new Integer(countEquip));
service = new Service();
service.setId(new Integer(count));
service.setEquipment(equip);
service.setNumber(new Integer(count));
service.setName("type " + count);
service.setDate(date);
service.setFlag1((count % 2) == 0);
service.setFlag2((count % 2) == 1);
service.setFlag3((count % 3) == 0);
service.setFlag4((count % 3) == 1);
service.setCreated(date, "user");
service.setUpdated(date, "user");
db.create(service);
countEquip = (countEquip < EQUIPMENT_MAX) ? (countEquip + 1) : 1;
count++;
}
db.commit();
db.close();
LOG.info("Created " + (count - 1) + " service objects in "
+ (System.currentTimeMillis() - time) + "ms.");
}
}