/* Any copyright is dedicated to the Public Domain. http://creativecommons.org/publicdomain/zero/1.0/ */ package org.mozilla.gecko.sync.test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import java.io.IOException; import org.json.simple.parser.ParseException; import org.junit.Before; import org.junit.Test; import org.mozilla.android.sync.test.helpers.MockSharedPreferences; import org.mozilla.gecko.sync.CryptoRecord; import org.mozilla.gecko.sync.ExtendedJSONObject; import org.mozilla.gecko.sync.MetaGlobal; import org.mozilla.gecko.sync.NoCollectionKeysSetException; import org.mozilla.gecko.sync.NonObjectJSONException; import org.mozilla.gecko.sync.PersistedMetaGlobal; import org.mozilla.gecko.sync.crypto.CryptoException; public class TestPersistedMetaGlobal { MockSharedPreferences prefs = null; private final String TEST_META_URL = "metaURL"; private final String TEST_CREDENTIALS = "credentials"; @Before public void setUp() { prefs = new MockSharedPreferences(); } @Test public void testPersistLastModified() throws CryptoException, NoCollectionKeysSetException { long LAST_MODIFIED = System.currentTimeMillis(); PersistedMetaGlobal persisted = new PersistedMetaGlobal(prefs); // Test fresh start. assertEquals(-1, persisted.lastModified()); // Test persisting. persisted.persistLastModified(LAST_MODIFIED); assertEquals(LAST_MODIFIED, persisted.lastModified()); // Test clearing. persisted.persistLastModified(0); assertEquals(-1, persisted.lastModified()); } @Test public void testPersistMetaGlobal() throws IllegalStateException, NonObjectJSONException, IOException, ParseException { PersistedMetaGlobal persisted = new PersistedMetaGlobal(prefs); // Test fresh start. assertNull(persisted.metaGlobal(TEST_META_URL, TEST_CREDENTIALS)); // Test persisting. String body = "{\"id\":\"global\",\"payload\":\"{\\\"syncID\\\":\\\"zPSQTm7WBVWB\\\",\\\"storageVersion\\\":5,\\\"engines\\\":{\\\"clients\\\":{\\\"version\\\":1,\\\"syncID\\\":\\\"fDg0MS5bDtV7\\\"},\\\"bookmarks\\\":{\\\"version\\\":2,\\\"syncID\\\":\\\"NNaQr6_F-9dm\\\"},\\\"forms\\\":{\\\"version\\\":1,\\\"syncID\\\":\\\"GXF29AFprnvc\\\"},\\\"history\\\":{\\\"version\\\":1,\\\"syncID\\\":\\\"av75g4vm-_rp\\\"},\\\"passwords\\\":{\\\"version\\\":1,\\\"syncID\\\":\\\"LT_ACGpuKZ6a\\\"},\\\"prefs\\\":{\\\"version\\\":2,\\\"syncID\\\":\\\"-3nsksP9wSAs\\\"},\\\"tabs\\\":{\\\"version\\\":1,\\\"syncID\\\":\\\"W4H5lOMChkYA\\\"}}}\",\"username\":\"5817483\",\"modified\":1.32046073744E9}"; MetaGlobal mg = new MetaGlobal(TEST_META_URL, TEST_CREDENTIALS); mg.setFromRecord(CryptoRecord.fromJSONRecord(body)); persisted.persistMetaGlobal(mg); MetaGlobal persistedGlobal = persisted.metaGlobal(TEST_META_URL, TEST_CREDENTIALS); assertNotNull(persistedGlobal); assertEquals("zPSQTm7WBVWB", persistedGlobal.getSyncID()); assertTrue(persistedGlobal.getEngines() instanceof ExtendedJSONObject); assertEquals(Long.valueOf(5), persistedGlobal.getStorageVersion()); // Test clearing. persisted.persistMetaGlobal(null); assertNull(persisted.metaGlobal(null, null)); } }