Track TimeZoneDistroInstaller method changes
The TimeZoneDistroInstaller now takes a TimeZoneDistro object
not bytes, which will help to hide whether the distro is in memory
or in storage. See the associated libcore change for details.
To run tests:
make -j30 FrameworksServicesTests
adb install -r -g
"out/target/product/angler/data/app/FrameworksServicesTests/FrameworksServicesTests.apk"
adb shell am instrument -e package com.android.server.timezone -w
com.android.frameworks.servicestests \
"com.android.frameworks.servicestests/android.support.test.runner.AndroidJUnitRunner"
Test: See above.
Bug: 31008728
Change-Id: Ieead1bb87b9ae196abab93342ba5c5747ca45116
diff --git a/services/core/java/com/android/server/timezone/RulesManagerService.java b/services/core/java/com/android/server/timezone/RulesManagerService.java
index bbb7782..58bdeb9 100644
--- a/services/core/java/com/android/server/timezone/RulesManagerService.java
+++ b/services/core/java/com/android/server/timezone/RulesManagerService.java
@@ -20,6 +20,7 @@
import com.android.server.SystemService;
import com.android.timezone.distro.DistroException;
import com.android.timezone.distro.DistroVersion;
+import com.android.timezone.distro.TimeZoneDistro;
import com.android.timezone.distro.StagedDistroOperation;
import android.app.timezone.Callback;
@@ -224,7 +225,8 @@
try {
byte[] distroBytes =
RulesManagerService.this.mFileDescriptorHelper.readFully(mTimeZoneDistro);
- int installerResult = mInstaller.stageInstallWithErrorCode(distroBytes);
+ TimeZoneDistro distro = new TimeZoneDistro(distroBytes);
+ int installerResult = mInstaller.stageInstallWithErrorCode(distro);
int resultCode = mapInstallerResultToApiCode(installerResult);
sendFinishedStatus(mCallback, resultCode);
diff --git a/services/core/java/com/android/server/updates/TzDataInstallReceiver.java b/services/core/java/com/android/server/updates/TzDataInstallReceiver.java
index 3c73c88..2be69ac 100644
--- a/services/core/java/com/android/server/updates/TzDataInstallReceiver.java
+++ b/services/core/java/com/android/server/updates/TzDataInstallReceiver.java
@@ -16,6 +16,8 @@
package com.android.server.updates;
+import com.android.timezone.distro.TimeZoneDistro;
+
import android.util.Slog;
import java.io.File;
@@ -46,7 +48,8 @@
@Override
protected void install(byte[] content, int version) throws IOException {
- boolean valid = installer.install(content);
+ TimeZoneDistro distro = new TimeZoneDistro(content);
+ boolean valid = installer.install(distro);
Slog.i(TAG, "Timezone data install valid for this device: " + valid);
// Even if !valid, we call super.install(). Only in the event of an exception should we
// not. If we didn't do this we could attempt to install repeatedly.
diff --git a/services/tests/servicestests/src/com/android/server/timezone/RulesManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/timezone/RulesManagerServiceTest.java
index b6983fa..86116a9 100644
--- a/services/tests/servicestests/src/com/android/server/timezone/RulesManagerServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/timezone/RulesManagerServiceTest.java
@@ -17,6 +17,7 @@
package com.android.server.timezone;
import com.android.timezone.distro.DistroVersion;
+import com.android.timezone.distro.TimeZoneDistro;
import com.android.timezone.distro.StagedDistroOperation;
import org.junit.Before;
@@ -403,14 +404,16 @@
verifyNoInstallerCallsMade();
verifyNoPackageTrackerCallsMade();
+ TimeZoneDistro expectedDistro = new TimeZoneDistro(expectedContent);
+
// Set up the installer.
- configureStageInstallExpectation(expectedContent, TimeZoneDistroInstaller.INSTALL_SUCCESS);
+ configureStageInstallExpectation(expectedDistro, TimeZoneDistroInstaller.INSTALL_SUCCESS);
// Simulate the async execution.
mFakeExecutor.simulateAsyncExecutionOfLastCommand();
// Verify the expected calls were made to other components.
- verifyStageInstallCalled(expectedContent);
+ verifyStageInstallCalled(expectedDistro);
verifyPackageTrackerCalled(token, true /* success */);
// Check the callback was called.
@@ -436,14 +439,16 @@
verifyNoInstallerCallsMade();
callback.assertNoResultReceived();
+ TimeZoneDistro expectedDistro = new TimeZoneDistro(expectedContent);
+
// Set up the installer.
- configureStageInstallExpectation(expectedContent, TimeZoneDistroInstaller.INSTALL_SUCCESS);
+ configureStageInstallExpectation(expectedDistro, TimeZoneDistroInstaller.INSTALL_SUCCESS);
// Simulate the async execution.
mFakeExecutor.simulateAsyncExecutionOfLastCommand();
// Verify the expected calls were made to other components.
- verifyStageInstallCalled(expectedContent);
+ verifyStageInstallCalled(expectedDistro);
verifyPackageTrackerCalled(null /* expectedToken */, true /* success */);
// Check the callback was received.
@@ -471,15 +476,17 @@
verifyNoInstallerCallsMade();
callback.assertNoResultReceived();
+ TimeZoneDistro expectedDistro = new TimeZoneDistro(expectedContent);
+
// Set up the installer.
configureStageInstallExpectation(
- expectedContent, TimeZoneDistroInstaller.INSTALL_FAIL_VALIDATION_ERROR);
+ expectedDistro, TimeZoneDistroInstaller.INSTALL_FAIL_VALIDATION_ERROR);
// Simulate the async execution.
mFakeExecutor.simulateAsyncExecutionOfLastCommand();
// Verify the expected calls were made to other components.
- verifyStageInstallCalled(expectedContent);
+ verifyStageInstallCalled(expectedDistro);
// Validation failure is treated like a successful check: repeating it won't improve things.
boolean expectedSuccess = true;
@@ -780,9 +787,9 @@
.thenThrow(new IOException("Simulated failure"));
}
- private void configureStageInstallExpectation(byte[] expectedContent, int resultCode)
+ private void configureStageInstallExpectation(TimeZoneDistro expected, int resultCode)
throws Exception {
- when(mMockTimeZoneDistroInstaller.stageInstallWithErrorCode(eq(expectedContent)))
+ when(mMockTimeZoneDistroInstaller.stageInstallWithErrorCode(eq(expected)))
.thenReturn(resultCode);
}
@@ -790,8 +797,8 @@
doReturn(success).when(mMockTimeZoneDistroInstaller).stageUninstall();
}
- private void verifyStageInstallCalled(byte[] expectedContent) throws Exception {
- verify(mMockTimeZoneDistroInstaller).stageInstallWithErrorCode(eq(expectedContent));
+ private void verifyStageInstallCalled(TimeZoneDistro expected) throws Exception {
+ verify(mMockTimeZoneDistroInstaller).stageInstallWithErrorCode(eq(expected));
verifyNoMoreInteractions(mMockTimeZoneDistroInstaller);
reset(mMockTimeZoneDistroInstaller);
}