package siena.base.test; import java.util.ArrayList; import java.util.List; import siena.Model; import siena.PersistenceManager; import siena.PersistenceManagerFactory; import siena.SienaException; import siena.base.test.model.AggregateChildModel; import siena.base.test.model.AggregateParentModel; import siena.base.test.model.StringListModel; import siena.base.test.model.TransactionAccountFrom; import siena.base.test.model.TransactionAccountFromModel; import siena.gae.GaePersistenceManager; import com.google.appengine.tools.development.testing.LocalDatastoreServiceTestConfig; import com.google.appengine.tools.development.testing.LocalServiceTestHelper; public class GaeModelTest extends BaseModelTest{ private final LocalServiceTestHelper helper = new LocalServiceTestHelper(new LocalDatastoreServiceTestConfig()); @Override public PersistenceManager createPersistenceManager(List<Class<?>> classes) throws Exception { GaePersistenceManager pm = new GaePersistenceManager(); pm.init(null); return pm; } @Override public void setUp() throws Exception { helper.setUp(); super.setUp(); PersistenceManagerFactory.install(pm, AggregateChildModel.class); PersistenceManagerFactory.install(pm, AggregateParentModel.class); PersistenceManagerFactory.install(pm, StringListModel.class); } @Override public void tearDown() throws Exception { super.tearDown(); helper.tearDown(); } @Override public void testGet() { // TODO Auto-generated method stub super.testGet(); } @Override public void testFetch() { // TODO Auto-generated method stub super.testFetch(); } @Override public void testFetchAsync() { // TODO Auto-generated method stub super.testFetchAsync(); } @Override public void testFetchAsync2Models() { // TODO Auto-generated method stub super.testFetchAsync2Models(); } @Override public void testFetchAsyncAndGetAndResetAsync2Models() { // TODO Auto-generated method stub super.testFetchAsyncAndGetAndResetAsync2Models(); } @Override public void testFetchPaginateSyncAndGetAndResetAsync2Models() { // TODO Auto-generated method stub super.testFetchPaginateSyncAndGetAndResetAsync2Models(); } @Override public void testFetchAsyncAndGetAndResetSync2Models() { // TODO Auto-generated method stub super.testFetchAsyncAndGetAndResetSync2Models(); } @Override public void testFetchPaginateAsyncAndGetAndResetAsync2Models() { // TODO Auto-generated method stub super.testFetchPaginateAsyncAndGetAndResetAsync2Models(); } @Override public void testFetchPaginateAsyncStatefulAndGetAndResetAsync2Models() { // TODO Auto-generated method stub super.testFetchPaginateAsyncStatefulAndGetAndResetAsync2Models(); } @Override public void testFetchPaginateStatefulAsyncAndGetAndResetAsync2Models() { // TODO Auto-generated method stub super.testFetchPaginateStatefulAsyncAndGetAndResetAsync2Models(); } @Override public void testFetchPaginateStatefulAsyncAndGetAndResetSync2Models() { // TODO Auto-generated method stub super.testFetchPaginateStatefulAsyncAndGetAndResetSync2Models(); } @Override public void testFetchPaginateAsync2Sync2AsyncAndGetAndResetSync2Models() { // TODO Auto-generated method stub super.testFetchPaginateAsync2Sync2AsyncAndGetAndResetSync2Models(); } @Override public void testFetchPaginateStatefulUpdateData() { // TODO Auto-generated method stub super.testFetchPaginateStatefulUpdateData(); } @Override public void testFetchPaginateStatelessUpdateData() { // TODO Auto-generated method stub super.testFetchPaginateStatelessUpdateData(); } @Override public void testFetchPaginateStatefulAsyncUpdateData() { // TODO Auto-generated method stub super.testFetchPaginateStatefulAsyncUpdateData(); } @Override public void testFetchPaginateStatelessAsyncUpdateData() { // TODO Auto-generated method stub super.testFetchPaginateStatelessAsyncUpdateData(); } @Override public void testFetchPaginateStatefulRealAsyncUpdateData() { // TODO Auto-generated method stub super.testFetchPaginateStatefulRealAsyncUpdateData(); } @Override public void testInsert() { // TODO Auto-generated method stub super.testInsert(); } @Override public void testInsertManyAsync() { // TODO Auto-generated method stub super.testInsertManyAsync(); } @Override public void testInsertMany() { // TODO Auto-generated method stub super.testInsertMany(); } @Override public void testInsertAsync() { // TODO Auto-generated method stub super.testInsertAsync(); } @Override public void testInsertAutoQuery() { // TODO Auto-generated method stub super.testInsertAutoQuery(); } @Override public void testInsertAutoQueryAsyncFetchSync() { // TODO Auto-generated method stub super.testInsertAutoQueryAsyncFetchSync(); } @Override public void testInsertAutoQueryAsyncFetchAsync() { // TODO Auto-generated method stub super.testInsertAutoQueryAsyncFetchAsync(); } @Override public void testInsertAutoQueryMany() { // TODO Auto-generated method stub super.testInsertAutoQueryMany(); } @Override public void testInsertBatchAsync() { // TODO Auto-generated method stub super.testInsertBatchAsync(); } @Override public void testInsertAutoQueryAsyncFetchAsyncQueryAsync() { // TODO Auto-generated method stub super.testInsertAutoQueryAsyncFetchAsyncQueryAsync(); } @Override public void testSimpleInheritance() { // TODO Auto-generated method stub super.testSimpleInheritance(); } @Override public void testDoubleInheritance() { // TODO Auto-generated method stub super.testDoubleInheritance(); } @Override public void testAbstractInheritance() { // TODO Auto-generated method stub super.testAbstractInheritance(); } @Override public void testFilterInheritance() { // TODO Auto-generated method stub super.testFilterInheritance(); } // SPECIFIC TESTS FOR GAE (transaction on one entity in a given group) public void testTransactionSave() { TransactionAccountFromModel accFrom = new TransactionAccountFromModel(1000L); accFrom.insert(); try { accFrom.getPersistenceManager().beginTransaction(); accFrom.amount-=100L; accFrom.save(); accFrom.getPersistenceManager().commitTransaction(); }catch(SienaException e){ accFrom.getPersistenceManager().rollbackTransaction(); fail(); }finally{ accFrom.getPersistenceManager().closeConnection(); } TransactionAccountFrom accFromAfter = pm.getByKey(TransactionAccountFrom.class, accFrom.id); assertTrue(900L == accFromAfter.amount); } public void testTransactionSaveFailure() { TransactionAccountFromModel accFrom = new TransactionAccountFromModel(1000L); accFrom.insert(); try { accFrom.getPersistenceManager().beginTransaction(); accFrom.amount-=100L; accFrom.save(); throw new SienaException("test"); }catch(SienaException e){ accFrom.getPersistenceManager().rollbackTransaction(); }finally{ accFrom.getPersistenceManager().closeConnection(); } TransactionAccountFrom accFromAfter = pm.getByKey(TransactionAccountFrom.class, accFrom.id); assertTrue(1000L == accFromAfter.amount); } public void testStringListProperty() { List<StringListModel> bobs = new ArrayList<StringListModel>(); for(int i=0; i<100; i++) { StringListModel bob = new StringListModel("bob"+i); final int nb = i; bob.friends = new ArrayList<String>(){{ add("robert"+nb); add("john"+nb); add("brutus"+nb); }}; bob.insert(); bobs.add(bob); } StringListModel bobAfter = Model.all(StringListModel.class).filter("friends", "robert27").filter("friends", "john27").get(); assertEquals(bobs.get(27), bobAfter); } public void testStringListProperty2() { List<StringListModel> bobs = new ArrayList<StringListModel>(); for(int i=0; i<100; i++) { StringListModel bob = new StringListModel("bob"+i); final int nb = i; if(i == 27 || i == 65 || i == 89){ bob.friends = new ArrayList<String>(){{ add("robert"+nb); add("john_doe"); add("brutus_smith"); }}; }else { bob.friends = new ArrayList<String>(){{ add("robert"+nb); add("john"+nb); add("brutus"+nb); }}; } bob.insert(); bobs.add(bob); } List<StringListModel> bobsAfter = Model.all(StringListModel.class).filter("friends", "brutus_smith").filter("friends", "john_doe").fetch(); assertEquals(bobs.get(27), bobsAfter.get(0)); assertEquals(bobs.get(65), bobsAfter.get(1)); assertEquals(bobs.get(89), bobsAfter.get(2)); } }