package co.mwater.clientapp.test; import java.util.UUID; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.test.AndroidTestCase; import co.mwater.clientapp.db.MWaterServer; import co.mwater.clientapp.dbsync.ChangeSet; import co.mwater.clientapp.dbsync.CompleteDataSlice; import co.mwater.clientapp.dbsync.DataSlice; import co.mwater.clientapp.dbsync.RESTClient; import co.mwater.clientapp.dbsync.SyncClientImpl; import co.mwater.clientapp.dbsync.SyncServerException; import co.mwater.clientapp.dbsync.SyncServerImpl; import co.mwater.clientapp.dbsync.SyncTable; import co.mwater.clientapp.dbsync.Synchronizer; public class SynchronizerTests extends AndroidTestCase { TestSyncDatabase testSyncDatabase1 = new TestSyncDatabase(); TestSyncDatabase testSyncDatabase2 = new TestSyncDatabase(); SQLiteDatabase db1, db2; SyncClientImpl clientImpl1, clientImpl2; SyncServerImpl serverImpl1, serverImpl2; Synchronizer sync1, sync2; DataSlice dataSlice = new CompleteDataSlice(); static String serverAddr = MWaterServer.serverUrl; @Override public void setUp() throws Exception { super.setUp(); db1 = testSyncDatabase1.setUp(getContext()); db2 = testSyncDatabase2.setUp(getContext()); RESTClient restClient = new RESTClient(serverAddr, null); restClient.get("resettests"); String clientId1 = restClient.get("login", "username", "test", "password", "test"); String clientId2 = restClient.get("login", "username", "test", "password", "test"); clientImpl1 = new SyncClientImpl(db1, new SyncTable[] { new TestSyncTable() }); clientImpl2 = new SyncClientImpl(db2, new SyncTable[] { new TestSyncTable() }); serverImpl1 = new SyncServerImpl(restClient, clientId1); serverImpl2 = new SyncServerImpl(restClient, clientId2); sync1 = new Synchronizer(clientImpl1, serverImpl1); sync2 = new Synchronizer(clientImpl2, serverImpl2); } @Override public void tearDown() throws Exception { super.tearDown(); testSyncDatabase1.tearDown(); testSyncDatabase2.tearDown(); } public void testDontGetMyChanges() throws SyncServerException { String uid = UUID.randomUUID().toString(); testSyncDatabase1.insert(uid, 0); ChangeSet upcs = clientImpl1.getChangeSet(); serverImpl1.uploadChangeSet(upcs); ChangeSet downcs = serverImpl1.downloadChangeSet(dataSlice, 0); assertEquals(0, downcs.getTable(TestSyncTable.TABLE_NAME).upserts.getCount()); } public void testOtherGetsMyChanges() throws SyncServerException { String uid = UUID.randomUUID().toString(); testSyncDatabase1.insert(uid, 0); sync1.synchronize(dataSlice); sync2.synchronize(dataSlice); assertEquals(1, testSyncDatabase2.query().getCount()); } public void testNullPreserved() throws SyncServerException { String uid = UUID.randomUUID().toString(); testSyncDatabase1.insert(uid, 0); testSyncDatabase1.update(uid, null, 0); sync1.synchronize(dataSlice); sync2.synchronize(dataSlice); assertEquals(1, testSyncDatabase2.query().getCount()); Cursor c = testSyncDatabase2.query(); c.moveToFirst(); assertTrue(c.isNull(c.getColumnIndex("a"))); } public void testOtherGetsMyDeletes() throws SyncServerException { String uid = UUID.randomUUID().toString(); testSyncDatabase1.insert(uid, 0); sync1.synchronize(dataSlice); sync2.synchronize(dataSlice); testSyncDatabase1.delete(uid); sync1.synchronize(dataSlice); sync2.synchronize(dataSlice); assertEquals(0, testSyncDatabase2.query().getCount()); } }