Fix flaky tests due to time unit quantization errors.

Test: Updated unit tests.
Change-Id: I2e0e6de1250ce7b1a5e66c5b480cd85ce82f21f8
diff --git a/work/workmanager-gcm/src/androidTest/java/androidx/work/impl/background/gcm/GcmTaskConverterTest.kt b/work/workmanager-gcm/src/androidTest/java/androidx/work/impl/background/gcm/GcmTaskConverterTest.kt
index 827712634..547c3ac 100644
--- a/work/workmanager-gcm/src/androidTest/java/androidx/work/impl/background/gcm/GcmTaskConverterTest.kt
+++ b/work/workmanager-gcm/src/androidTest/java/androidx/work/impl/background/gcm/GcmTaskConverterTest.kt
@@ -27,6 +27,7 @@
 import androidx.work.impl.background.gcm.GcmTaskConverter.EXECUTION_WINDOW_SIZE_IN_SECONDS
 import com.google.android.gms.gcm.Task
 import org.hamcrest.Matchers.greaterThan
+import org.hamcrest.Matchers.lessThanOrEqualTo
 import org.junit.Assert.assertEquals
 import org.junit.Assert.assertThat
 import org.junit.Before
@@ -57,6 +58,7 @@
 
         val expected = request.workSpec.calculateNextRunTime()
         val offset = offset(expected, now)
+        val delta = task.windowEnd - (offset + EXECUTION_WINDOW_SIZE_IN_SECONDS)
 
         assertEquals(task.serviceName, WorkManagerGcmService::class.java.name)
         assertEquals(task.isPersisted, false)
@@ -64,7 +66,8 @@
         assertEquals(task.requiredNetwork, Task.NETWORK_STATE_ANY)
         assertEquals(task.requiresCharging, false)
         assertEquals(task.windowStart, offset)
-        assertEquals(task.windowEnd, offset + EXECUTION_WINDOW_SIZE_IN_SECONDS)
+        // Account for time unit quantization errors
+        assertThat(delta, lessThanOrEqualTo(1L))
     }
 
     @Test
@@ -84,6 +87,7 @@
         val task = mTaskConverter.convert(request.workSpec)
         val expected = request.workSpec.calculateNextRunTime()
         val offset = offset(expected, now)
+        val delta = task.windowEnd - (offset + EXECUTION_WINDOW_SIZE_IN_SECONDS)
 
         assertEquals(task.serviceName, WorkManagerGcmService::class.java.name)
         assertEquals(task.isPersisted, false)
@@ -91,7 +95,8 @@
         assertEquals(task.requiredNetwork, Task.NETWORK_STATE_CONNECTED)
         assertEquals(task.requiresCharging, true)
         assertEquals(task.windowStart, offset)
-        assertEquals(task.windowEnd, offset + EXECUTION_WINDOW_SIZE_IN_SECONDS)
+        // Account for time unit quantization errors
+        assertThat(delta, lessThanOrEqualTo(1L))
     }
 
     @Test
@@ -110,6 +115,7 @@
         val task = mTaskConverter.convert(request.workSpec)
         val expected = request.workSpec.calculateNextRunTime()
         val offset = offset(expected, now)
+        val delta = task.windowEnd - (offset + EXECUTION_WINDOW_SIZE_IN_SECONDS)
 
         assertEquals(task.serviceName, WorkManagerGcmService::class.java.name)
         assertEquals(task.isPersisted, false)
@@ -117,7 +123,8 @@
         assertEquals(task.requiredNetwork, Task.NETWORK_STATE_UNMETERED)
         assertEquals(task.requiresCharging, false)
         assertEquals(task.windowStart, offset)
-        assertEquals(task.windowEnd, offset + EXECUTION_WINDOW_SIZE_IN_SECONDS)
+        // Account for time unit quantization errors
+        assertThat(delta, lessThanOrEqualTo(1L))
     }
 
     @Test
@@ -133,6 +140,7 @@
         val task = mTaskConverter.convert(request.workSpec)
         val expected = request.workSpec.calculateNextRunTime()
         val offset = offset(expected, now)
+        val delta = task.windowEnd - (offset + EXECUTION_WINDOW_SIZE_IN_SECONDS)
 
         assertEquals(task.serviceName, WorkManagerGcmService::class.java.name)
         assertEquals(task.isPersisted, false)
@@ -140,7 +148,8 @@
         assertEquals(task.requiredNetwork, Task.NETWORK_STATE_ANY)
         assertEquals(task.requiresCharging, false)
         assertEquals(task.windowStart, offset)
-        assertEquals(task.windowEnd, offset + EXECUTION_WINDOW_SIZE_IN_SECONDS)
+        // Account for time unit quantization errors
+        assertThat(delta, lessThanOrEqualTo(1L))
     }
 
     @Test
@@ -153,17 +162,19 @@
             .build()
 
         val workSpec = request.workSpec
+        val task = mTaskConverter.convert(request.workSpec)
         val expected = workSpec.calculateNextRunTime()
         val offset = offset(expected, now)
+        val delta = task.windowEnd - (offset + EXECUTION_WINDOW_SIZE_IN_SECONDS)
 
-        val task = mTaskConverter.convert(request.workSpec)
         assertEquals(task.serviceName, WorkManagerGcmService::class.java.name)
         assertEquals(task.isPersisted, false)
         assertEquals(task.isUpdateCurrent, true)
         assertEquals(task.requiredNetwork, Task.NETWORK_STATE_ANY)
         assertEquals(task.requiresCharging, false)
         assertEquals(task.windowStart, offset)
-        assertEquals(task.windowEnd, offset + EXECUTION_WINDOW_SIZE_IN_SECONDS)
+        // Account for time unit quantization errors
+        assertThat(delta, lessThanOrEqualTo(1L))
     }
 
     @Test
@@ -175,9 +186,10 @@
         val request = PeriodicWorkRequestBuilder<TestWorker>(15L, TimeUnit.MINUTES)
             .build()
 
+        val task = mTaskConverter.convert(request.workSpec)
         val expected = request.workSpec.calculateNextRunTime()
         val offset = offset(expected, now)
-        val task = mTaskConverter.convert(request.workSpec)
+        val delta = task.windowEnd - (offset + EXECUTION_WINDOW_SIZE_IN_SECONDS)
 
         assertEquals(task.serviceName, WorkManagerGcmService::class.java.name)
         assertEquals(task.isPersisted, false)
@@ -185,7 +197,8 @@
         assertEquals(task.requiredNetwork, Task.NETWORK_STATE_ANY)
         assertEquals(task.requiresCharging, false)
         assertEquals(task.windowStart, offset)
-        assertEquals(task.windowEnd, offset + EXECUTION_WINDOW_SIZE_IN_SECONDS)
+        // Account for time unit quantization errors
+        assertThat(delta, lessThanOrEqualTo(1L))
     }
 
     @Test