summaryrefslogtreecommitdiff
path: root/services/robotests/src
diff options
context:
space:
mode:
authorNeil Fuller <nfuller@google.com>2019-12-20 15:59:38 +0000
committerNeil Fuller <nfuller@google.com>2020-01-13 16:49:20 +0000
commit65f0f31bdee65d1bbe76fcd14a13151a476a51ec (patch)
treeb8edc3adaed30f41007797dc92200271d2924310 /services/robotests/src
parent90c697776b402a752e92e2fc631a337c9650ef6e (diff)
Make NtpTrustedTime safer / expand docs
This commit makes a number of changes: 1) Documents / enforces thread safety, removes or deprecates unsafe check-then-do methods / adds a way to get the NTP query result atomically. 2) Delays configuration lookup until point of use: the config can change due to various possible config overlays, e.g. MCC-based config. (1) is because the threading model is currently unclear / possibly unsafe - it looks like NtpTrustedTime is supposed to be single threaded but it's also a singleton so could be accessed from multiple threads. If NtpTrustedTime were not a singleton things might be easier but the @UnsupportedAppUsage makes it difficult to change now. (2) is to address the same issue as https://r.android.com/1182530, contributed by Luca Stefani. Bug: 140712361 Test: build only Change-Id: Ie09da9db5d853b59829886a020de21a88da5dd51
Diffstat (limited to 'services/robotests/src')
-rw-r--r--services/robotests/src/com/android/server/location/NtpTimeHelperTest.java17
1 files changed, 12 insertions, 5 deletions
diff --git a/services/robotests/src/com/android/server/location/NtpTimeHelperTest.java b/services/robotests/src/com/android/server/location/NtpTimeHelperTest.java
index a8a258fc5ff7..9c5d4ad6ceeb 100644
--- a/services/robotests/src/com/android/server/location/NtpTimeHelperTest.java
+++ b/services/robotests/src/com/android/server/location/NtpTimeHelperTest.java
@@ -3,6 +3,7 @@ package com.android.server.location;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
import android.os.Looper;
import android.os.SystemClock;
@@ -52,8 +53,10 @@ public class NtpTimeHelperTest {
@Test
public void handleInjectNtpTime_cachedAgeLow_injectTime() throws InterruptedException {
- doReturn(NtpTimeHelper.NTP_INTERVAL - 1).when(mMockNtpTrustedTime).getCacheAge();
- doReturn(MOCK_NTP_TIME).when(mMockNtpTrustedTime).getCachedNtpTime();
+ NtpTrustedTime.TimeResult result = mock(NtpTrustedTime.TimeResult.class);
+ doReturn(NtpTimeHelper.NTP_INTERVAL - 1).when(result).getAgeMillis();
+ doReturn(MOCK_NTP_TIME).when(result).getTimeMillis();
+ doReturn(result).when(mMockNtpTrustedTime).getCachedTimeResult();
mNtpTimeHelper.retrieveAndInjectNtpTime();
@@ -64,7 +67,9 @@ public class NtpTimeHelperTest {
@Test
public void handleInjectNtpTime_injectTimeFailed_injectTimeDelayed()
throws InterruptedException {
- doReturn(NtpTimeHelper.NTP_INTERVAL + 1).when(mMockNtpTrustedTime).getCacheAge();
+ NtpTrustedTime.TimeResult result1 = mock(NtpTrustedTime.TimeResult.class);
+ doReturn(NtpTimeHelper.NTP_INTERVAL + 1).when(result1).getAgeMillis();
+ doReturn(result1).when(mMockNtpTrustedTime).getCachedTimeResult();
doReturn(false).when(mMockNtpTrustedTime).forceRefresh();
mNtpTimeHelper.retrieveAndInjectNtpTime();
@@ -72,8 +77,10 @@ public class NtpTimeHelperTest {
assertThat(mCountDownLatch.await(2, TimeUnit.SECONDS)).isFalse();
doReturn(true).when(mMockNtpTrustedTime).forceRefresh();
- doReturn(1L).when(mMockNtpTrustedTime).getCacheAge();
- doReturn(MOCK_NTP_TIME).when(mMockNtpTrustedTime).getCachedNtpTime();
+ NtpTrustedTime.TimeResult result2 = mock(NtpTrustedTime.TimeResult.class);
+ doReturn(1L).when(result2).getAgeMillis();
+ doReturn(MOCK_NTP_TIME).when(result2).getTimeMillis();
+ doReturn(result2).when(mMockNtpTrustedTime).getCachedTimeResult();
SystemClock.sleep(NtpTimeHelper.RETRY_INTERVAL);
waitForTasksToBePostedOnHandlerAndRunThem();