diff options
author | Sumir Kataria <sumir@google.com> | 2018-06-21 14:09:36 -0700 |
---|---|---|
committer | Sumir Kataria <sumir@google.com> | 2018-06-21 14:10:42 -0700 |
commit | 97dbd9ddc0df753e557342644df04bba668f4f68 (patch) | |
tree | 439b6f1ad65fd25b9b289d72fb1f0cc578c707b5 | |
parent | 42cedc674c7521b238806498b09cda1c3e0dbc7b (diff) | |
download | support-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.java | 86 | ||||
-rw-r--r-- | work/workmanager/src/main/java/androidx/work/impl/WorkDatabaseMigrations.java | 2 |
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"); } }; |