mobile/android/tests/background/junit3/src/db/TestAndroidBrowserHistoryDataExtender.java

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/mobile/android/tests/background/junit3/src/db/TestAndroidBrowserHistoryDataExtender.java	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,149 @@
     1.4 +/* Any copyright is dedicated to the Public Domain.
     1.5 +   http://creativecommons.org/publicdomain/zero/1.0/ */
     1.6 +
     1.7 +package org.mozilla.gecko.background.db;
     1.8 +
     1.9 +import java.io.IOException;
    1.10 +import java.util.ArrayList;
    1.11 +
    1.12 +import org.json.simple.JSONArray;
    1.13 +import org.json.simple.JSONObject;
    1.14 +import org.json.simple.parser.ParseException;
    1.15 +import org.mozilla.gecko.background.helpers.AndroidSyncTestCase;
    1.16 +import org.mozilla.gecko.background.sync.helpers.HistoryHelpers;
    1.17 +import org.mozilla.gecko.sync.ExtendedJSONObject;
    1.18 +import org.mozilla.gecko.sync.NonArrayJSONException;
    1.19 +import org.mozilla.gecko.sync.NonObjectJSONException;
    1.20 +import org.mozilla.gecko.sync.Utils;
    1.21 +import org.mozilla.gecko.sync.repositories.NullCursorException;
    1.22 +import org.mozilla.gecko.sync.repositories.android.AndroidBrowserHistoryDataExtender;
    1.23 +import org.mozilla.gecko.sync.repositories.android.RepoUtils;
    1.24 +import org.mozilla.gecko.sync.repositories.domain.HistoryRecord;
    1.25 +
    1.26 +import android.database.Cursor;
    1.27 +
    1.28 +public class TestAndroidBrowserHistoryDataExtender extends AndroidSyncTestCase {
    1.29 +
    1.30 +  protected AndroidBrowserHistoryDataExtender extender;
    1.31 +  protected static final String LOG_TAG = "SyncHistoryVisitsTest";
    1.32 +
    1.33 +  public void setUp() {
    1.34 +    extender = new AndroidBrowserHistoryDataExtender(getApplicationContext());
    1.35 +    extender.wipe();
    1.36 +  }
    1.37 +
    1.38 +  public void tearDown() {
    1.39 +    extender.close();
    1.40 +  }
    1.41 +
    1.42 +  public void testStoreFetch() throws NullCursorException, NonObjectJSONException, IOException, ParseException {
    1.43 +    String guid = Utils.generateGuid();
    1.44 +    extender.store(Utils.generateGuid(), null);
    1.45 +    extender.store(guid, null);
    1.46 +    extender.store(Utils.generateGuid(), null);
    1.47 +
    1.48 +    Cursor cur = null;
    1.49 +    try {
    1.50 +      cur = extender.fetch(guid);
    1.51 +      assertEquals(1, cur.getCount());
    1.52 +      assertTrue(cur.moveToFirst());
    1.53 +      assertEquals(guid, cur.getString(0));
    1.54 +    } finally {
    1.55 +      if (cur != null) {
    1.56 +        cur.close();
    1.57 +      }
    1.58 +    }
    1.59 +  }
    1.60 +
    1.61 +  public void testVisitsForGUID() throws NonArrayJSONException, NonObjectJSONException, IOException, ParseException, NullCursorException {
    1.62 +    String guid = Utils.generateGuid();
    1.63 +    JSONArray visits = new ExtendedJSONObject("{ \"visits\": [ { \"key\" : \"value\" } ] }").getArray("visits");
    1.64 +
    1.65 +    extender.store(Utils.generateGuid(), null);
    1.66 +    extender.store(guid, visits);
    1.67 +    extender.store(Utils.generateGuid(), null);
    1.68 +
    1.69 +    JSONArray fetchedVisits = extender.visitsForGUID(guid);
    1.70 +    assertEquals(1, fetchedVisits.size());
    1.71 +    assertEquals("value", ((JSONObject)fetchedVisits.get(0)).get("key"));
    1.72 +  }
    1.73 +
    1.74 +  public void testDeleteHandlesBadGUIDs() {
    1.75 +    String evilGUID = "' or '1'='1";
    1.76 +    extender.store(Utils.generateGuid(), null);
    1.77 +    extender.store(Utils.generateGuid(), null);
    1.78 +    extender.store(evilGUID, null);
    1.79 +    extender.delete(evilGUID);
    1.80 +
    1.81 +    Cursor cur = null;
    1.82 +    try {
    1.83 +      cur = extender.fetchAll();
    1.84 +      assertEquals(cur.getCount(), 2);
    1.85 +      assertTrue(cur.moveToFirst());
    1.86 +      while (!cur.isAfterLast()) {
    1.87 +        String guid = RepoUtils.getStringFromCursor(cur, AndroidBrowserHistoryDataExtender.COL_GUID);
    1.88 +        assertFalse(evilGUID.equals(guid));
    1.89 +        cur.moveToNext();
    1.90 +      }
    1.91 +    } catch (NullCursorException e) {
    1.92 +      e.printStackTrace();
    1.93 +      fail("Should not have null cursor.");
    1.94 +    } finally {
    1.95 +      if (cur != null) {
    1.96 +        cur.close();
    1.97 +      }
    1.98 +    }
    1.99 +  }
   1.100 +
   1.101 +  public void testStoreFetchHandlesBadGUIDs() {
   1.102 +    String evilGUID = "' or '1'='1";
   1.103 +    extender.store(Utils.generateGuid(), null);
   1.104 +    extender.store(Utils.generateGuid(), null);
   1.105 +    extender.store(evilGUID, null);
   1.106 +
   1.107 +    Cursor cur = null;
   1.108 +    try {
   1.109 +      cur = extender.fetch(evilGUID);
   1.110 +      assertEquals(1, cur.getCount());
   1.111 +      assertTrue(cur.moveToFirst());
   1.112 +      while (!cur.isAfterLast()) {
   1.113 +        String guid = RepoUtils.getStringFromCursor(cur, AndroidBrowserHistoryDataExtender.COL_GUID);
   1.114 +        assertEquals(evilGUID, guid);
   1.115 +        cur.moveToNext();
   1.116 +      }
   1.117 +    } catch (NullCursorException e) {
   1.118 +      e.printStackTrace();
   1.119 +      fail("Should not have null cursor.");
   1.120 +    } finally {
   1.121 +      if (cur != null) {
   1.122 +        cur.close();
   1.123 +      }
   1.124 +    }
   1.125 +  }
   1.126 +
   1.127 +  public void testBulkInsert() throws NullCursorException {
   1.128 +    ArrayList<HistoryRecord> records = new ArrayList<HistoryRecord>();
   1.129 +    records.add(HistoryHelpers.createHistory1());
   1.130 +    records.add(HistoryHelpers.createHistory2());
   1.131 +    extender.bulkInsert(records);
   1.132 +
   1.133 +    for (HistoryRecord record : records) {
   1.134 +      HistoryRecord toCompare = (HistoryRecord) record.copyWithIDs(record.guid, record.androidID);
   1.135 +      toCompare.visits = extender.visitsForGUID(record.guid);
   1.136 +      assertEquals(record.visits.size(), toCompare.visits.size());
   1.137 +      assertTrue(record.equals(toCompare));
   1.138 +    }
   1.139 +
   1.140 +    // Now insert existing records, changing one, and add another record.
   1.141 +    records.get(0).title = "test";
   1.142 +    records.add(HistoryHelpers.createHistory3());
   1.143 +    extender.bulkInsert(records);
   1.144 +
   1.145 +    for (HistoryRecord record : records) {
   1.146 +      HistoryRecord toCompare = (HistoryRecord) record.copyWithIDs(record.guid, record.androidID);
   1.147 +      toCompare.visits = extender.visitsForGUID(record.guid);
   1.148 +      assertEquals(record.visits.size(), toCompare.visits.size());
   1.149 +      assertTrue(record.equals(toCompare));
   1.150 +    }
   1.151 +  }
   1.152 +}

mercurial