blob: 19d44ab78538be0ed9e4e82c80086b740b48a461 [file] [log] [blame]
# Copyright 2019 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import unittest
import base64
import gzip
import io
from far.far_reader import far_read, FarFormatError
INVALID_FILE = b"AAAAAAAAAAAAAAAAAA"
EOF_INDEX_LEN = b"\xc8\xbf\x0b\x48\xad\xab\xc5\x11\xAA"
EMPTY_ARCHIVE = b"\xc8\xbf\x0b\x48\xad\xab\xc5\x11\x00\x00\x00\x00\x00\x00\x00\x00"
CAT_FAR_GZ = """
H4sICFAerl0AA2NhdC5mYXIA7dBPSgMxGAXwrquC7l3IrLXN5P8IhQoKutCFnuBL8kUG26nYwY0I
3kc8gyvBk3gOW1uoui50836EkJeQR8jn+9b52+vHnugsnF5cH80Nl3m42r86uTy7eVnmg87Kznza
Xay/On/Nz7Z/Xdj/dz7mlvpx0rTctNOfcE/xjm65AwAAAAAAAADrEuqmH6kd2BylFq6SKWdZGS2y
Zqm0TzZUxnsXWFudhbOSDSVvUsxVjFo5Y0uTvO2O6tAfpd500isHUZO1JLw1nKMTHEqWpTBsrHMu
SZkNS2HLrGaDnfReVLGiiqwKQXOiRVkdcqons8ZBFLJ0NtGsMNhkSBgX5+1KRB1ToKhNYJuc5cTK
KK48EZNSIQXvOVB3078MAAAAAAAAsFlPRUNjLo6LSG1xWDzyw7SeNLMsiudNvw0AAAAAAAAA1uMb
TkMm1wAwAAA=
"""
class TestFarReader(unittest.TestCase):
def test_example_package(self):
far_binary_data = gzip.GzipFile(fileobj = io.BytesIO(base64.b64decode(CAT_FAR_GZ))).read()
far_data = far_read(far_binary_data)
self.assertTrue("meta/contents" in far_data)
self.assertTrue("meta/package" in far_data)
self.assertTrue("bin/cat" in far_data["meta/contents"].decode())
self.assertTrue("lib/ld.so.1" in far_data["meta/contents"].decode())
self.assertTrue("lib/libfdio.so" in far_data["meta/contents"].decode())
def test_invalid_package(self):
with self.assertRaises(FarFormatError) as exception_context:
far_data = far_read(INVALID_FILE)
self.assertTrue("Expected magic number does not match." in str(exception_context.exception))
def test_invalid_index_len(self):
with self.assertRaises(FarFormatError) as exception_context:
far_data = far_read(EOF_INDEX_LEN)
self.assertEqual("Unexpected EOF parsing far index bytes.", str(exception_context.exception))
def test_empty(self):
with self.assertRaises(FarFormatError) as exception_context:
far_data = far_read(EMPTY_ARCHIVE)
self.assertEqual("Empty archive.", str(exception_context.exception))