updater_sample: update tools

- Allow gen_update_config.py to use ota_from_target_files from
  $ANDROID_BUILD_TOP/build/make/tools/releasetools/
- tests/res/raw/ota_002_package.zip re-generated using functions from
  $ANDROID_BUILD_TOP/build/make/tools/releasetools/test_ota_from_target_files.py
- sample app tests updated

Test: ./tools/gen_update_config_test.py
Change-Id: I5c492ec22782ba54fe481f592a44e797c695684e
Signed-off-by: Zhomart Mukhamejanov <zhomart@google.com>
diff --git a/updater_sample/tools/gen_update_config.py b/updater_sample/tools/gen_update_config.py
index 0578124..4efa9f1 100755
--- a/updater_sample/tools/gen_update_config.py
+++ b/updater_sample/tools/gen_update_config.py
@@ -17,11 +17,13 @@
 """
 Given a OTA package file, produces update config JSON file.
 
-Example:  tools/gen_update_config.py \\
-            --ab_install_type=STREAMING \\
-            ota-build-001.zip  \\
-            my-config-001.json \\
-            http://foo.bar/ota-builds/ota-build-001.zip
+Example:
+      $ PYTHONPATH=$ANDROID_BUILD_TOP/build/make/tools/releasetools:$PYTHONPATH \\
+            bootable/recovery/updater_sample/tools/gen_update_config.py \\
+                --ab_install_type=STREAMING \\
+                ota-build-001.zip  \\
+                my-config-001.json \\
+                http://foo.bar/ota-builds/ota-build-001.zip
 """
 
 import argparse
@@ -30,6 +32,8 @@
 import sys
 import zipfile
 
+import ota_from_target_files  # pylint: disable=import-error
+
 
 class GenUpdateConfig(object):
     """
@@ -41,7 +45,6 @@
 
     AB_INSTALL_TYPE_STREAMING = 'STREAMING'
     AB_INSTALL_TYPE_NON_STREAMING = 'NON_STREAMING'
-    METADATA_NAME = 'META-INF/com/android/metadata'
 
     def __init__(self, package, url, ab_install_type):
         self.package = package
@@ -82,37 +85,27 @@
     def _gen_ab_streaming_metadata(self):
         """Builds metadata for files required for streaming update."""
         with zipfile.ZipFile(self.package, 'r') as package_zip:
-            property_files = self._get_property_files(package_zip)
-
             metadata = {
-                'property_files': property_files
+                'property_files': self._get_property_files(package_zip)
             }
 
         return metadata
 
-    def _get_property_files(self, zip_file):
+    @staticmethod
+    def _get_property_files(package_zip):
         """Constructs the property-files list for A/B streaming metadata."""
 
-        def compute_entry_offset_size(name):
-            """Computes the zip entry offset and size."""
-            info = zip_file.getinfo(name)
-            offset = info.header_offset + len(info.FileHeader())
-            size = info.file_size
-            return {
-                'filename': os.path.basename(name),
-                'offset': offset,
-                'size': size,
-            }
-
+        ab_ota = ota_from_target_files.AbOtaPropertyFiles()
+        property_str = ab_ota.GetPropertyFilesString(package_zip, False)
         property_files = []
-        for entry in self.streaming_required:
-            property_files.append(compute_entry_offset_size(entry))
-        for entry in self.streaming_optional:
-            if entry in zip_file.namelist():
-                property_files.append(compute_entry_offset_size(entry))
-
-        # 'META-INF/com/android/metadata' is required
-        property_files.append(compute_entry_offset_size(GenUpdateConfig.METADATA_NAME))
+        for file in property_str.split(','):
+            filename, offset, size = file.split(':')
+            inner_file = {
+                'filename': filename,
+                'offset': int(offset),
+                'size': int(size)
+            }
+            property_files.append(inner_file)
 
         return property_files