Remove reuse of TimeZoneDistro

TimeZoneDistro is becoming single-use to better reflect its
normal usage as a wrapper around a stream from a
ParcelFileDescriptor.

This change switches to using methods on TimeZoneDistroBuilder
that return byte[] instead of TimeZoneDistro objects. Returning
TimeZoneDistro objects from TimeZoneDistroBuilder will be removed
in future changes.

Bug: 31008728
Test: make cts
Test: run cts -m CtsHostTzDataTests
Change-Id: I5539944af792bf8b2c63fdfe0295a943a1954858
diff --git a/hostsidetests/tzdata/src/com/android/cts/tzdata/TzDataCheckTest.java b/hostsidetests/tzdata/src/com/android/cts/tzdata/TzDataCheckTest.java
index 2c5ab6e..a17abf9 100644
--- a/hostsidetests/tzdata/src/com/android/cts/tzdata/TzDataCheckTest.java
+++ b/hostsidetests/tzdata/src/com/android/cts/tzdata/TzDataCheckTest.java
@@ -228,8 +228,8 @@
 
         // Create a current installed distro.
         PathPair dataCurrentDir = mDataDir.createSubPath(CURRENT_DIR_NAME);
-        TimeZoneDistro distro = createValidDistroBuilder().build();
-        unpackOnHost(dataCurrentDir, distro);
+        byte[] distroBytes = createValidDistroBuilder().buildBytes();
+        unpackOnHost(dataCurrentDir, distroBytes);
 
         // Push the host test directory and contents to the device.
         pushHostTestDirToDevice();
@@ -252,8 +252,8 @@
 
         // Create a staged install.
         PathPair dataStagedDir = mDataDir.createSubPath(STAGED_DIR_NAME);
-        TimeZoneDistro distro = createValidDistroBuilder().build();
-        unpackOnHost(dataStagedDir, distro);
+        byte[] distroBytes = createValidDistroBuilder().buildBytes();
+        unpackOnHost(dataStagedDir, distroBytes);
 
         // Create a file with the same name as the directory that tzdatacheck expects.
         PathPair dataCurrentDir = mDataDir.createSubPath(CURRENT_DIR_NAME);
@@ -268,7 +268,7 @@
 
         // Assert the device was left in a valid "installed" state.
         assertDevicePathDoesNotExist(dataStagedDir);
-        assertDeviceDirContainsDistro(dataCurrentDir, distro);
+        assertDeviceDirContainsDistro(dataCurrentDir, distroBytes);
     }
 
     // {dataDir}/staged contains an install, but there is nothing to replace.
@@ -282,8 +282,8 @@
 
         // Create a staged install.
         PathPair dataStagedDir = mDataDir.createSubPath(STAGED_DIR_NAME);
-        TimeZoneDistro stagedDistro = createValidDistroBuilder().build();
-        unpackOnHost(dataStagedDir, stagedDistro);
+        byte[] stagedDistroBytes = createValidDistroBuilder().buildBytes();
+        unpackOnHost(dataStagedDir, stagedDistroBytes);
 
         // Push the host test directory and contents to the device.
         pushHostTestDirToDevice();
@@ -294,7 +294,7 @@
 
         // Assert the device was left in a valid "installed" state.
         assertDevicePathDoesNotExist(dataStagedDir);
-        assertDeviceDirContainsDistro(dataCurrentDir, stagedDistro);
+        assertDeviceDirContainsDistro(dataCurrentDir, stagedDistroBytes);
     }
 
     // {dataDir}/staged contains an install, and there is something to replace.
@@ -311,17 +311,17 @@
 
         // Create a staged uninstall.
         PathPair dataStagedDir = mDataDir.createSubPath(STAGED_DIR_NAME);
-        TimeZoneDistro stagedDistro = createValidDistroBuilder()
+        byte[] stagedDistroBytes = createValidDistroBuilder()
                 .setDistroVersion(stagedDistroVersion)
-                .build();
-        unpackOnHost(dataStagedDir, stagedDistro);
+                .buildBytes();
+        unpackOnHost(dataStagedDir, stagedDistroBytes);
 
         // Create a current installed distro.
         PathPair dataCurrentDir = mDataDir.createSubPath(CURRENT_DIR_NAME);
-        TimeZoneDistro currentDistro = createValidDistroBuilder()
+        byte[] currentDistroBytes = createValidDistroBuilder()
                 .setDistroVersion(currentDistroVersion)
-                .build();
-        unpackOnHost(dataCurrentDir, currentDistro);
+                .buildBytes();
+        unpackOnHost(dataCurrentDir, currentDistroBytes);
 
         // Push the host test directory and contents to the device.
         pushHostTestDirToDevice();
@@ -333,7 +333,7 @@
         // Assert the device was left in a valid "installed" state.
         // The stagedDistro should now be the one in the current dir.
         assertDevicePathDoesNotExist(dataStagedDir);
-        assertDeviceDirContainsDistro(dataCurrentDir, stagedDistro);
+        assertDeviceDirContainsDistro(dataCurrentDir, stagedDistroBytes);
     }
 
     // {dataDir}/staged contains an invalid install, and there is something to replace.
@@ -347,15 +347,15 @@
 
         // Create a staged uninstall which contains invalid.
         PathPair dataStagedDir = mDataDir.createSubPath(STAGED_DIR_NAME);
-        TimeZoneDistro stagedDistro = createValidDistroBuilder()
+        byte[] stagedDistroBytes = createValidDistroBuilder()
                 .clearVersionForTests()
-                .buildUnvalidated();
-        unpackOnHost(dataStagedDir, stagedDistro);
+                .buildUnvalidatedBytes();
+        unpackOnHost(dataStagedDir, stagedDistroBytes);
 
         // Create a current installed distro.
         PathPair dataCurrentDir = mDataDir.createSubPath(CURRENT_DIR_NAME);
-        TimeZoneDistro currentDistro = createValidDistroBuilder().build();
-        unpackOnHost(dataCurrentDir, currentDistro);
+        byte[] currentDistroBytes = createValidDistroBuilder().buildBytes();
+        unpackOnHost(dataCurrentDir, currentDistroBytes);
 
         // Push the host test directory and contents to the device.
         pushHostTestDirToDevice();
@@ -413,10 +413,10 @@
 
         // Set up the /data directory structure on host.
         PathPair dataCurrentDir = mDataDir.createSubPath(CURRENT_DIR_NAME);
-        TimeZoneDistro distroWithoutAVersionFile = createValidDistroBuilder()
+        byte[] distroWithoutAVersionFileBytes = createValidDistroBuilder()
                 .clearVersionForTests()
-                .buildUnvalidated();
-        unpackOnHost(dataCurrentDir, distroWithoutAVersionFile);
+                .buildUnvalidatedBytes();
+        unpackOnHost(dataCurrentDir, distroWithoutAVersionFileBytes);
 
         // Push the host test directory and contents to the device.
         pushHostTestDirToDevice();
@@ -435,7 +435,7 @@
 
         // Set up the /data directory structure on host.
         PathPair dataCurrentDir = mDataDir.createSubPath(CURRENT_DIR_NAME);
-        unpackOnHost(dataCurrentDir, createValidDistroBuilder().build());
+        unpackOnHost(dataCurrentDir, createValidDistroBuilder().buildBytes());
         // Replace the distro version file with a short file.
         Path distroVersionFile =
                 dataCurrentDir.hostPath.resolve(TimeZoneDistro.DISTRO_VERSION_FILE_NAME);
@@ -459,7 +459,7 @@
 
         // Set up the /data directory structure on host.
         PathPair dataCurrentDir = mDataDir.createSubPath(CURRENT_DIR_NAME);
-        unpackOnHost(dataCurrentDir, createValidDistroBuilder().build());
+        unpackOnHost(dataCurrentDir, createValidDistroBuilder().buildBytes());
 
         // Replace the distro version file with junk.
         Path distroVersionFile =
@@ -489,10 +489,10 @@
         PathPair dataCurrentDir = mDataDir.createSubPath(CURRENT_DIR_NAME);
         DistroVersion oldMajorDistroVersion = new DistroVersion(
                 DistroVersion.CURRENT_FORMAT_MAJOR_VERSION - 1, 1, VALID_RULES_VERSION, 1);
-        TimeZoneDistro distro = createValidDistroBuilder()
+        byte[] distroBytes = createValidDistroBuilder()
                 .setDistroVersion(oldMajorDistroVersion)
-                .build();
-        unpackOnHost(dataCurrentDir, distro);
+                .buildBytes();
+        unpackOnHost(dataCurrentDir, distroBytes);
 
         // Push the host test directory and contents to the device.
         pushHostTestDirToDevice();
@@ -515,10 +515,10 @@
                 DistroVersion.CURRENT_FORMAT_MAJOR_VERSION + 1,
                 DistroVersion.CURRENT_FORMAT_MINOR_VERSION,
                 VALID_RULES_VERSION, VALID_REVISION);
-        TimeZoneDistro distro = createValidDistroBuilder()
+        byte[] distroBytes = createValidDistroBuilder()
                 .setDistroVersion(newMajorDistroVersion)
-                .build();
-        unpackOnHost(dataCurrentDir, distro);
+                .buildBytes();
+        unpackOnHost(dataCurrentDir, distroBytes);
 
         // Push the host test directory and contents to the device.
         pushHostTestDirToDevice();
@@ -541,10 +541,10 @@
                 DistroVersion.CURRENT_FORMAT_MAJOR_VERSION,
                 DistroVersion.CURRENT_FORMAT_MINOR_VERSION - 1,
                 VALID_RULES_VERSION, 1);
-        TimeZoneDistro distro = createValidDistroBuilder()
+        byte[] distroBytes = createValidDistroBuilder()
                 .setDistroVersion(oldMinorDistroVersion)
-                .build();
-        unpackOnHost(dataCurrentDir, distro);
+                .buildBytes();
+        unpackOnHost(dataCurrentDir, distroBytes);
 
         // Push the host test directory and contents to the device.
         pushHostTestDirToDevice();
@@ -568,10 +568,10 @@
                 DistroVersion.CURRENT_FORMAT_MAJOR_VERSION,
                 DistroVersion.CURRENT_FORMAT_MINOR_VERSION + 1,
                 VALID_RULES_VERSION, VALID_REVISION);
-        TimeZoneDistro distro = createValidDistroBuilder()
+        byte[] distroBytes = createValidDistroBuilder()
                 .setDistroVersion(newMajorDistroVersion)
-                .build();
-        unpackOnHost(dataCurrentDir, distro);
+                .buildBytes();
+        unpackOnHost(dataCurrentDir, distroBytes);
 
         // Push the host test directory and contents to the device.
         pushHostTestDirToDevice();
@@ -580,7 +580,7 @@
         assertEquals(0, runTzDataCheckOnDevice());
 
         // Assert the current data directory was not touched.
-        assertDeviceDirContainsDistro(dataCurrentDir, distro);
+        assertDeviceDirContainsDistro(dataCurrentDir, distroBytes);
     }
 
     // {dataDir}/current is valid but the tzdata file in /system is missing.
@@ -589,8 +589,8 @@
 
         // Set up the /data directory structure on host.
         PathPair dataCurrentDir = mDataDir.createSubPath(CURRENT_DIR_NAME);
-        TimeZoneDistro validDistro = createValidDistroBuilder().build();
-        unpackOnHost(dataCurrentDir, validDistro);
+        byte[] validDistroBytes = createValidDistroBuilder().buildBytes();
+        unpackOnHost(dataCurrentDir, validDistroBytes);
 
         // Push the host test directory and contents to the device.
         pushHostTestDirToDevice();
@@ -599,7 +599,7 @@
         assertEquals(6, runTzDataCheckOnDevice());
 
         // Assert the current data directory was not touched.
-        assertDeviceDirContainsDistro(dataCurrentDir, validDistro);
+        assertDeviceDirContainsDistro(dataCurrentDir, validDistroBytes);
     }
 
     // {dataDir}/current is valid but the tzdata file in /system has an invalid header.
@@ -610,8 +610,8 @@
 
         // Set up the /data directory structure on host.
         PathPair dataCurrentDir = mDataDir.createSubPath(CURRENT_DIR_NAME);
-        TimeZoneDistro validDistro = createValidDistroBuilder().build();
-        unpackOnHost(dataCurrentDir, validDistro);
+        byte[] validDistroBytes = createValidDistroBuilder().buildBytes();
+        unpackOnHost(dataCurrentDir, validDistroBytes);
 
         // Push the host test directory and contents to the device.
         pushHostTestDirToDevice();
@@ -620,7 +620,7 @@
         assertEquals(7, runTzDataCheckOnDevice());
 
         // Assert the current data directory was not touched.
-        assertDeviceDirContainsDistro(dataCurrentDir, validDistro);
+        assertDeviceDirContainsDistro(dataCurrentDir, validDistroBytes);
     }
 
     // {dataDir}/current is valid and the tzdata file in /system is older.
@@ -635,11 +635,11 @@
         DistroVersion distroVersion = new DistroVersion(
                 DistroVersion.CURRENT_FORMAT_MAJOR_VERSION,
                 DistroVersion.CURRENT_FORMAT_MINOR_VERSION, distroRulesVersion, VALID_REVISION);
-        TimeZoneDistro distro = createValidDistroBuilder()
+        byte[] distroBytes = createValidDistroBuilder()
                 .setDistroVersion(distroVersion)
                 .setTzDataFile(createValidTzDataBytes(distroRulesVersion))
-                .build();
-        unpackOnHost(dataCurrentDir, distro);
+                .buildBytes();
+        unpackOnHost(dataCurrentDir, distroBytes);
 
         // Push the host test directory and contents to the device.
         pushHostTestDirToDevice();
@@ -648,7 +648,7 @@
         assertEquals(0, runTzDataCheckOnDevice());
 
         // Assert the current data directory was not touched.
-        assertDeviceDirContainsDistro(dataCurrentDir, distro);
+        assertDeviceDirContainsDistro(dataCurrentDir, distroBytes);
     }
 
     // {dataDir}/current is valid and the tzdata file in /system is the same (and should be kept).
@@ -662,11 +662,11 @@
         DistroVersion distroVersion = new DistroVersion(
                 DistroVersion.CURRENT_FORMAT_MAJOR_VERSION,
                 DistroVersion.CURRENT_FORMAT_MINOR_VERSION, systemRulesVersion, VALID_REVISION);
-        TimeZoneDistro distro = createValidDistroBuilder()
+        byte[] distroBytes = createValidDistroBuilder()
                 .setDistroVersion(distroVersion)
                 .setTzDataFile(createValidTzDataBytes(systemRulesVersion))
-                .build();
-        unpackOnHost(dataCurrentDir, distro);
+                .buildBytes();
+        unpackOnHost(dataCurrentDir, distroBytes);
 
         // Push the host test directory and contents to the device.
         pushHostTestDirToDevice();
@@ -675,7 +675,7 @@
         assertEquals(0, runTzDataCheckOnDevice());
 
         // Assert the current data directory was not touched.
-        assertDeviceDirContainsDistro(dataCurrentDir, distro);
+        assertDeviceDirContainsDistro(dataCurrentDir, distroBytes);
     }
 
     // {dataDir}/current is valid and the tzdata file in /system is the newer.
@@ -692,11 +692,11 @@
                 DistroVersion.CURRENT_FORMAT_MINOR_VERSION,
                 distroRulesVersion,
                 VALID_REVISION);
-        TimeZoneDistro distro = createValidDistroBuilder()
+        byte[] distroBytes = createValidDistroBuilder()
                 .setDistroVersion(distroVersion)
                 .setTzDataFile(createValidTzDataBytes(distroRulesVersion))
-                .build();
-        unpackOnHost(dataCurrentDir, distro);
+                .buildBytes();
+        unpackOnHost(dataCurrentDir, distroBytes);
 
         // Push the host test directory and contents to the device.
         pushHostTestDirToDevice();
@@ -722,9 +722,9 @@
         new FileOutputStream(uninstallTombstoneFile.hostFile()).close();
     }
 
-    private static void unpackOnHost(PathPair path, TimeZoneDistro distro) throws Exception {
+    private static void unpackOnHost(PathPair path, byte[] distroBytes) throws Exception {
         createHostDirectory(path);
-        distro.extractTo(path.hostFile());
+        new TimeZoneDistro(distroBytes).extractTo(path.hostFile());
     }
 
     private static TimeZoneDistroBuilder createValidDistroBuilder() throws Exception {
@@ -910,7 +910,7 @@
         assertTrue(getDevice().doesFileExist(path.devicePath));
     }
 
-    private void assertDeviceDirContainsDistro(PathPair distroPath, TimeZoneDistro expectedDistro)
+    private void assertDeviceDirContainsDistro(PathPair distroPath, byte[] expectedDistroBytes)
             throws Exception {
         // Pull back just the version file and compare it.
         File localFile = mTestRootDir.createSubPath("temp.file").hostFile();
@@ -921,7 +921,8 @@
                     getDevice().pullFile(remoteVersionFile, localFile));
 
             byte[] bytes = Files.readAllBytes(localFile.toPath());
-            assertArrayEquals(bytes, expectedDistro.getDistroVersion().toBytes());
+            assertArrayEquals(bytes,
+                    new TimeZoneDistro(expectedDistroBytes).getDistroVersion().toBytes());
         } finally {
             localFile.delete();
         }