From fe3b1182c5e98018dca6a1093bd5983b9620b5a1 Mon Sep 17 00:00:00 2001 From: Neil Fuller Date: Mon, 19 Jun 2017 12:56:08 +0100 Subject: 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 --- .../server/timezone/RulesManagerService.java | 4 +++- .../server/updates/TzDataInstallReceiver.java | 5 +++- .../server/timezone/RulesManagerServiceTest.java | 27 ++++++++++++++-------- 3 files changed, 24 insertions(+), 12 deletions(-) diff --git a/services/core/java/com/android/server/timezone/RulesManagerService.java b/services/core/java/com/android/server/timezone/RulesManagerService.java index bbb77826a4e0..58bdeb9d11ec 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.internal.annotations.VisibleForTesting; 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 @@ public final class RulesManagerService extends IRulesManager.Stub { 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 3c73c88b4f5c..2be69ac68219 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 @@ public class TzDataInstallReceiver extends ConfigUpdateInstallReceiver { @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 b6983fa58f8f..86116a9237bf 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 @@ public class RulesManagerServiceTest { 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 @@ public class RulesManagerServiceTest { 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 @@ public class RulesManagerServiceTest { 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 @@ public class RulesManagerServiceTest { .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 @@ public class RulesManagerServiceTest { 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); } -- cgit v1.2.3-59-g8ed1b