package siena.base.test;
import static siena.Json.map;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import junit.framework.TestCase;
import siena.PersistenceManager;
import siena.base.test.model.Address;
import siena.base.test.model.Contact;
import siena.base.test.model.MassEntity;
public abstract class BaseMassTest extends TestCase {
private PersistenceManager pm;
protected static final int NB_ENTITIES = 10000;
public abstract PersistenceManager createPersistenceManager(List<Class<?>> classes) throws Exception;
public void testMassFetch() {
List<MassEntity> ents = pm.createQuery(MassEntity.class).fetch();
assertNotNull(ents);
assertEquals(NB_ENTITIES, ents.size());
}
public void testMassDelete() {
int res = pm.createQuery(MassEntity.class).delete();
assertEquals(NB_ENTITIES, res);
List<MassEntity> ents = pm.createQuery(MassEntity.class).fetch();
assertNotNull(ents);
assertEquals(0, ents.size());
}
public void testMassIter() {
Iterable<MassEntity> it = pm.createQuery(MassEntity.class).iter();
assertNotNull(it);
int i=0;
for(MassEntity ent: it){
assertNotNull(ent);
i++;
}
assertEquals(NB_ENTITIES, i);
}
protected void massInsert() {
// massive data injection
int _int = 0;
short _short = 0;
byte _byte = 0;
long _long = 0;
float _float = 0f;
double _double = 0d;
char[] longstr = new char[501];
Arrays.fill(longstr, 'x');
for(int i=0; i<NB_ENTITIES; i++){
MassEntity ent = new MassEntity();
ent.typeByte = _byte; // incremented later in function
ent.typeShort = _short++;
ent.typeInt = _int++;
ent.typeLong = _long++;
ent.typeFloat = _float++;
ent.typeDouble = _double++;
ent.typeDate = new Date();
ent.typeString = "str_"+i;
ent.typeLargeString = new String(longstr);
ent.typeJson = map().put("foo_"+i, "bar_"+i);
ent.addresses = new ArrayList<Address>();
ent.addresses.add(new Address("addr_"+i+"_0", "town_"+i+"_0"));
ent.addresses.add(new Address("addr_"+i+"_1", "town_"+i+"_1"));
ent.contacts = new HashMap<String, Contact>();
ent.contacts.put("id_"+i,
new Contact("Somebody_"+i, Arrays.asList("foo_"+i, "bar_"+i)));
// Blob
byte[] blob = new byte[5000];
Arrays.fill(blob, _byte++);
ent.typeBlob = blob;
pm.insert(ent);
}
}
protected void massDelete() {
pm.createQuery(MassEntity.class).delete();
}
@Override
protected void setUp() throws Exception {
super.setUp();
List<Class<?>> classes = new ArrayList<Class<?>>();
classes.add(MassEntity.class);
pm = createPersistenceManager(classes);
massInsert();
}
@Override
public void tearDown() throws Exception {
massDelete();
super.tearDown();
}
}