aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSumir Kataria <sumir@google.com>2018-06-21 14:09:36 -0700
committerSumir Kataria <sumir@google.com>2018-06-21 14:10:42 -0700
commit97dbd9ddc0df753e557342644df04bba668f4f68 (patch)
tree439b6f1ad65fd25b9b289d72fb1f0cc578c707b5
parent42cedc674c7521b238806498b09cda1c3e0dbc7b (diff)
downloadsupport-97dbd9ddc0df753e557342644df04bba668f4f68.tar.gz
Ignore conflicts when implicit tagging on update.
Test: Added and ran tests. Change-Id: I3c74aaec592b0f00377c0916c3e73999431acf72
-rw-r--r--work/workmanager/src/androidTest/java/androidx/work/WorkDatabaseMigrationTest.java86
-rw-r--r--work/workmanager/src/main/java/androidx/work/impl/WorkDatabaseMigrations.java2
2 files changed, 56 insertions, 32 deletions
diff --git a/work/workmanager/src/androidTest/java/androidx/work/WorkDatabaseMigrationTest.java b/work/workmanager/src/androidTest/java/androidx/work/WorkDatabaseMigrationTest.java
index ba4c5f327a8..15bf2240700 100644
--- a/work/workmanager/src/androidTest/java/androidx/work/WorkDatabaseMigrationTest.java
+++ b/work/workmanager/src/androidTest/java/androidx/work/WorkDatabaseMigrationTest.java
@@ -92,32 +92,44 @@ public class WorkDatabaseMigrationTest {
SupportSQLiteDatabase database =
mMigrationTestHelper.createDatabase(TEST_DATABASE, OLD_VERSION);
- String workSpecId0 = UUID.randomUUID().toString();
- ContentValues contentValues = new ContentValues();
- contentValues.put("id", workSpecId0);
- contentValues.put("state", WorkTypeConverters.StateIds.ENQUEUED);
- contentValues.put("worker_class_name", TestWorker.class.getName());
- contentValues.put("input_merger_class_name", OverwritingInputMerger.class.getName());
- contentValues.put("input", Data.toByteArray(Data.EMPTY));
- contentValues.put("output", Data.toByteArray(Data.EMPTY));
- contentValues.put("initial_delay", 0L);
- contentValues.put("interval_duration", 0L);
- contentValues.put("flex_duration", 0L);
- contentValues.put("required_network_type", false);
- contentValues.put("requires_charging", false);
- contentValues.put("requires_device_idle", false);
- contentValues.put("requires_battery_not_low", false);
- contentValues.put("requires_storage_not_low", false);
- contentValues.put("content_uri_triggers",
- WorkTypeConverters.contentUriTriggersToByteArray(new ContentUriTriggers()));
- contentValues.put("run_attempt_count", 0);
- contentValues.put("backoff_policy",
- WorkTypeConverters.backoffPolicyToInt(BackoffPolicy.EXPONENTIAL));
- contentValues.put("backoff_delay_duration", WorkRequest.DEFAULT_BACKOFF_DELAY_MILLIS);
- contentValues.put("period_start_time", 0L);
- contentValues.put("minimum_retention_duration", 0L);
- contentValues.put("schedule_requested_at", WorkSpec.SCHEDULE_NOT_REQUESTED_YET);
- database.insert("workspec", CONFLICT_FAIL, contentValues);
+ String[] prepopulatedWorkSpecIds = new String[] {
+ UUID.randomUUID().toString(),
+ UUID.randomUUID().toString()
+ };
+ for (String workSpecId : prepopulatedWorkSpecIds) {
+ ContentValues contentValues = new ContentValues();
+ contentValues.put("id", workSpecId);
+ contentValues.put("state", WorkTypeConverters.StateIds.ENQUEUED);
+ contentValues.put("worker_class_name", TestWorker.class.getName());
+ contentValues.put("input_merger_class_name", OverwritingInputMerger.class.getName());
+ contentValues.put("input", Data.toByteArray(Data.EMPTY));
+ contentValues.put("output", Data.toByteArray(Data.EMPTY));
+ contentValues.put("initial_delay", 0L);
+ contentValues.put("interval_duration", 0L);
+ contentValues.put("flex_duration", 0L);
+ contentValues.put("required_network_type", false);
+ contentValues.put("requires_charging", false);
+ contentValues.put("requires_device_idle", false);
+ contentValues.put("requires_battery_not_low", false);
+ contentValues.put("requires_storage_not_low", false);
+ contentValues.put("content_uri_triggers",
+ WorkTypeConverters.contentUriTriggersToByteArray(new ContentUriTriggers()));
+ contentValues.put("run_attempt_count", 0);
+ contentValues.put("backoff_policy",
+ WorkTypeConverters.backoffPolicyToInt(BackoffPolicy.EXPONENTIAL));
+ contentValues.put("backoff_delay_duration", WorkRequest.DEFAULT_BACKOFF_DELAY_MILLIS);
+ contentValues.put("period_start_time", 0L);
+ contentValues.put("minimum_retention_duration", 0L);
+ contentValues.put("schedule_requested_at", WorkSpec.SCHEDULE_NOT_REQUESTED_YET);
+ database.insert("workspec", CONFLICT_FAIL, contentValues);
+
+ if (workSpecId.equals(prepopulatedWorkSpecIds[0])) {
+ ContentValues tagValues = new ContentValues();
+ tagValues.put("tag", TestWorker.class.getName());
+ tagValues.put("work_spec_id", workSpecId);
+ database.insert("worktag", CONFLICT_FAIL, tagValues);
+ }
+ }
String workSpecId1 = UUID.randomUUID().toString();
String workSpecId2 = UUID.randomUUID().toString();
@@ -135,11 +147,23 @@ public class WorkDatabaseMigrationTest {
WorkDatabaseMigrations.MIGRATION_1_2);
Cursor tagCursor = database.query("SELECT * FROM worktag");
- assertThat(tagCursor.getCount(), is(1));
- tagCursor.moveToFirst();
- assertThat(tagCursor.getString(tagCursor.getColumnIndex("tag")),
- is(TestWorker.class.getName()));
- assertThat(tagCursor.getString(tagCursor.getColumnIndex("work_spec_id")), is(workSpecId0));
+ assertThat(tagCursor.getCount(), is(prepopulatedWorkSpecIds.length));
+ boolean[] foundWorkSpecId = new boolean[prepopulatedWorkSpecIds.length];
+ for (int i = 0; i < prepopulatedWorkSpecIds.length; ++i) {
+ tagCursor.moveToPosition(i);
+ assertThat(tagCursor.getString(tagCursor.getColumnIndex("tag")),
+ is(TestWorker.class.getName()));
+ String currentId = tagCursor.getString(tagCursor.getColumnIndex("work_spec_id"));
+ for (int j = 0; j < prepopulatedWorkSpecIds.length; ++j) {
+ if (prepopulatedWorkSpecIds[j].equals(currentId)) {
+ foundWorkSpecId[j] = true;
+ break;
+ }
+ }
+ }
+ for (int i = 0; i < prepopulatedWorkSpecIds.length; ++i) {
+ assertThat(foundWorkSpecId[i], is(true));
+ }
tagCursor.close();
Cursor cursor = database.query(CHECK_SYSTEM_ID_INFO);
diff --git a/work/workmanager/src/main/java/androidx/work/impl/WorkDatabaseMigrations.java b/work/workmanager/src/main/java/androidx/work/impl/WorkDatabaseMigrations.java
index e52d8ff7537..935561ba91c 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/WorkDatabaseMigrations.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/WorkDatabaseMigrations.java
@@ -59,7 +59,7 @@ public class WorkDatabaseMigrations {
database.execSQL(CREATE_SYSTEM_ID_INFO);
database.execSQL(MIGRATE_ALARM_INFO_TO_SYSTEM_ID_INFO);
database.execSQL(REMOVE_ALARM_INFO);
- database.execSQL("INSERT INTO worktag(tag, work_spec_id) "
+ database.execSQL("INSERT OR IGNORE INTO worktag(tag, work_spec_id) "
+ "SELECT worker_class_name AS tag, id AS work_spec_id FROM workspec");
}
};