/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
package org.mozilla.android.sync.stage.test;
import org.json.simple.JSONArray;
import org.mozilla.android.sync.test.AndroidSyncTestCase;
import org.mozilla.android.sync.test.helpers.DefaultGlobalSessionCallback;
import org.mozilla.android.sync.test.helpers.MockClientsDataDelegate;
import org.mozilla.gecko.sync.GlobalSession;
import org.mozilla.gecko.sync.SyncConfiguration;
import org.mozilla.gecko.sync.crypto.KeyBundle;
import org.mozilla.gecko.sync.delegates.ClientsDataDelegate;
import org.mozilla.gecko.sync.delegates.GlobalSessionCallback;
import org.mozilla.gecko.sync.repositories.android.ClientsDatabaseAccessor;
import org.mozilla.gecko.sync.repositories.domain.ClientRecord;
import org.mozilla.gecko.sync.stage.SyncClientsEngineStage;
import android.content.Context;
public class TestClientsStage extends AndroidSyncTestCase {
private static final String TEST_USERNAME = "johndoe";
private static final String TEST_PASSWORD = "password";
private static final String TEST_SYNC_KEY = "abcdeabcdeabcdeabcdeabcdea";
public void setUp() {
ClientsDatabaseAccessor db = new ClientsDatabaseAccessor(getApplicationContext());
db.wipeDB();
db.close();
}
public void testWipeClearsClients() throws Exception {
// Wiping clients is equivalent to a reset and dropping all local stored client records.
// Resetting is defined as being the same as for other engines -- discard local
// and remote timestamps, tracked failed records, and tracked records to fetch.
final Context context = getApplicationContext();
final ClientsDatabaseAccessor dataAccessor = new ClientsDatabaseAccessor(context);
final GlobalSessionCallback callback = new DefaultGlobalSessionCallback();
final ClientsDataDelegate delegate = new MockClientsDataDelegate();
final GlobalSession session = new GlobalSession(
SyncConfiguration.DEFAULT_USER_API,
null,
TEST_USERNAME, TEST_PASSWORD, null,
new KeyBundle(TEST_USERNAME, TEST_SYNC_KEY),
callback, context, null, delegate);
SyncClientsEngineStage stage = new SyncClientsEngineStage(session) {
@Override
public synchronized ClientsDatabaseAccessor getClientsDatabaseAccessor() {
if (db == null) {
db = dataAccessor;
}
return db;
}
};
String guid = "clientabcdef";
long lastModified = System.currentTimeMillis();
ClientRecord record = new ClientRecord(guid, "clients", lastModified , false);
record.name = "John's Phone";
record.type = "mobile";
record.commands = new JSONArray();
dataAccessor.store(record);
assertEquals(1, dataAccessor.clientsCount());
stage.wipeLocal();
try {
assertEquals(0, dataAccessor.clientsCount());
assertEquals(0L, session.config.getPersistedServerClientRecordTimestamp());
assertEquals(0, session.getClientsDelegate().getClientsCount());
} finally {
dataAccessor.close();
}
}
}