aboutsummaryrefslogtreecommitdiff
path: root/work/workmanager/src/androidTest/java/androidx
diff options
context:
space:
mode:
authorSumir Kataria <sumir@google.com>2018-05-22 11:23:27 -0700
committerSumir Kataria <sumir@google.com>2018-05-22 12:33:43 -0700
commitbf4f4f72fd27f110b95cc9867fb5dc695d2689b1 (patch)
tree298f1351a239e883a4899116dc9392cd2c5da2b4 /work/workmanager/src/androidTest/java/androidx
parent04235d35dad79d4f166443932ac60601a9051029 (diff)
downloadsupport-bf4f4f72fd27f110b95cc9867fb5dc695d2689b1.tar.gz
Add Worker interruption-related methods.
- Worker#isStopped indicates if the Worker is currently considered interrupted and should stop its processing. - Worker#onStopped is called upon interruption for lightweight cleanup operations. Change-Id: Idb656029f6594fe6b9953571113c972f39e43cd6 Fixes: 79632247 Test: Added and a ran testInterruption_isMarkedOnRunningWorker
Diffstat (limited to 'work/workmanager/src/androidTest/java/androidx')
-rw-r--r--work/workmanager/src/androidTest/java/androidx/work/impl/WorkerWrapperTest.java26
-rw-r--r--work/workmanager/src/androidTest/java/androidx/work/worker/InterruptionAwareWorker.java37
2 files changed, 63 insertions, 0 deletions
diff --git a/work/workmanager/src/androidTest/java/androidx/work/impl/WorkerWrapperTest.java b/work/workmanager/src/androidTest/java/androidx/work/impl/WorkerWrapperTest.java
index 3dd75719ba3..375c5224201 100644
--- a/work/workmanager/src/androidTest/java/androidx/work/impl/WorkerWrapperTest.java
+++ b/work/workmanager/src/androidTest/java/androidx/work/impl/WorkerWrapperTest.java
@@ -58,6 +58,7 @@ import androidx.work.worker.ChainedArgumentWorker;
import androidx.work.worker.EchoingWorker;
import androidx.work.worker.ExceptionWorker;
import androidx.work.worker.FailureWorker;
+import androidx.work.worker.InterruptionAwareWorker;
import androidx.work.worker.RetryWorker;
import androidx.work.worker.SleepTestWorker;
import androidx.work.worker.TestWorker;
@@ -701,6 +702,31 @@ public class WorkerWrapperTest extends DatabaseTest {
@Test
@SmallTest
+ public void testInterruption_isMarkedOnRunningWorker() {
+ OneTimeWorkRequest work =
+ new OneTimeWorkRequest.Builder(InterruptionAwareWorker.class).build();
+ insertWork(work);
+
+ Worker worker = WorkerWrapper.workerFromClassName(mContext,
+ InterruptionAwareWorker.class.getName(),
+ work.getStringId(),
+ new Extras(Data.EMPTY, Collections.<String>emptyList(), null));
+ assertThat(worker, is(notNullValue()));
+ assertThat(worker.isStopped(), is(false));
+
+ WorkerWrapper workerWrapper =
+ new WorkerWrapper.Builder(mContext, mDatabase, work.getStringId())
+ .withSchedulers(Collections.singletonList(mMockScheduler))
+ .withListener(mMockListener)
+ .withWorker(worker)
+ .build();
+ Executors.newSingleThreadExecutor().submit(workerWrapper);
+ workerWrapper.interrupt();
+ assertThat(worker.isStopped(), is(true));
+ }
+
+ @Test
+ @SmallTest
public void testException_isTreatedAsFailure() {
OneTimeWorkRequest work = new OneTimeWorkRequest.Builder(ExceptionWorker.class).build();
insertWork(work);
diff --git a/work/workmanager/src/androidTest/java/androidx/work/worker/InterruptionAwareWorker.java b/work/workmanager/src/androidTest/java/androidx/work/worker/InterruptionAwareWorker.java
new file mode 100644
index 00000000000..30a64149c3a
--- /dev/null
+++ b/work/workmanager/src/androidTest/java/androidx/work/worker/InterruptionAwareWorker.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.work.worker;
+
+import android.support.annotation.NonNull;
+
+import androidx.work.Worker;
+
+public class InterruptionAwareWorker extends Worker {
+
+ @NonNull
+ @Override
+ public WorkerResult doWork() {
+ try {
+ do {
+ Thread.sleep(1000L);
+ } while(!isStopped());
+ } catch (InterruptedException e) {
+ // Do nothing.
+ }
+ return WorkerResult.SUCCESS;
+ }
+}