mirror of
https://github.com/flatcar/scripts.git
synced 2025-08-08 05:26:58 +02:00
definitive list. Add unittests to test an empty filter list, loading filters, and filtering specific packages based off of mock filters.
172 lines
5.8 KiB
Python
Executable File
172 lines
5.8 KiB
Python
Executable File
#!/usr/bin/python
|
|
# Copyright (c) 2010 The Chromium OS 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 mox
|
|
import os
|
|
import prebuilt
|
|
import shutil
|
|
import tempfile
|
|
import unittest
|
|
from chromite.lib import cros_build_lib
|
|
|
|
class TestUpdateFile(unittest.TestCase):
|
|
|
|
def setUp(self):
|
|
self.contents_str = ['stage 20100309/stage3-amd64-20100309.tar.bz2',
|
|
'portage portage-20100310.tar.bz2']
|
|
temp_fd, self.version_file = tempfile.mkstemp()
|
|
os.write(temp_fd, '\n'.join(self.contents_str))
|
|
os.close(temp_fd)
|
|
|
|
def tearDown(self):
|
|
os.remove(self.version_file)
|
|
|
|
def _read_version_file(self):
|
|
"""Read the contents of self.version_file and return as a list."""
|
|
version_fh = open(self.version_file)
|
|
try:
|
|
return [line.strip() for line in version_fh.readlines()]
|
|
finally:
|
|
version_fh.close()
|
|
|
|
def _verify_key_pair(self, key, val):
|
|
file_contents = self._read_version_file()
|
|
for entry in file_contents:
|
|
file_key, file_val = entry.split()
|
|
if file_key == key:
|
|
if val == file_val:
|
|
break
|
|
else:
|
|
self.fail('Could not find "%s %s" in version file' % (key, val))
|
|
|
|
def testAddVariableThatDoesNotExist(self):
|
|
"""Add in a new variable that was no present in the file."""
|
|
key = 'x86-testcase'
|
|
value = '1234567'
|
|
prebuilt.UpdateLocalFile(self.version_file, key, value)
|
|
current_version_str = self._read_version_file()
|
|
self._verify_key_pair(key, value)
|
|
|
|
def testUpdateVariable(self):
|
|
"""Test updating a variable that already exists."""
|
|
# take first entry in contents
|
|
key, val = self.contents_str[0].split()
|
|
new_val = 'test_update'
|
|
self._verify_key_pair(key, val)
|
|
prebuilt.UpdateLocalFile(self.version_file, key, new_val)
|
|
self._verify_key_pair(key, new_val)
|
|
|
|
|
|
class TestPrebuiltFilters(unittest.TestCase):
|
|
|
|
def setUp(self):
|
|
self.tmp_dir = tempfile.mkdtemp()
|
|
self.private_dir = os.path.join(self.tmp_dir,
|
|
prebuilt._PRIVATE_OVERLAY_DIR)
|
|
self.private_structure_base = 'chromeos-overlay/chromeos-base'
|
|
self.private_pkgs = ['test-package/salt-flavor-0.1.r3.ebuild',
|
|
'easy/alpha_beta-0.1.41.r3.ebuild',
|
|
'dev/j-t-r-0.1.r3.ebuild',]
|
|
self.expected_filters = set(['salt-flavor', 'alpha_beta', 'j-t-r'])
|
|
|
|
|
|
def tearDown(self):
|
|
if self.tmp_dir:
|
|
shutil.rmtree(self.tmp_dir)
|
|
|
|
def _CreateNestedDir(self, tmp_dir, dir_structure):
|
|
for entry in dir_structure:
|
|
full_path = os.path.join(os.path.join(tmp_dir, entry))
|
|
# ensure dirs are created
|
|
try:
|
|
os.makedirs(os.path.dirname(full_path))
|
|
if full_path.endswith('/'):
|
|
# we only want to create directories
|
|
return
|
|
except OSError, err:
|
|
if err.errno == errno.EEXIST:
|
|
# we don't care if the dir already exists
|
|
pass
|
|
else:
|
|
raise
|
|
# create dummy files
|
|
tmp = open(full_path, 'w')
|
|
tmp.close()
|
|
|
|
def _LoadPrivateMockFilters(self):
|
|
"""Load mock filters as defined in the setUp function."""
|
|
dir_structure = [os.path.join(self.private_structure_base, entry)
|
|
for entry in self.private_pkgs]
|
|
|
|
self._CreateNestedDir(self.private_dir, dir_structure)
|
|
prebuilt.LoadPrivateFilters(self.tmp_dir)
|
|
|
|
def testFilterPattern(self):
|
|
"""Check that particular packages are filtered properly."""
|
|
self._LoadPrivateMockFilters()
|
|
packages = ['/some/dir/area/j-t-r-0.1.r3.tbz',
|
|
'/var/pkgs/new/alpha_beta-0.2.3.4.tbz',
|
|
'/usr/local/cache/good-0.1.3.tbz',
|
|
'/usr-blah/b_d/salt-flavor-0.0.3.tbz']
|
|
expected_list = ['/usr/local/cache/good-0.1.3.tbz']
|
|
filtered_list = [file for file in packages if not
|
|
prebuilt.ShouldFilterPackage(file)]
|
|
self.assertEqual(expected_list, filtered_list)
|
|
|
|
def testLoadPrivateFilters(self):
|
|
self._LoadPrivateMockFilters()
|
|
prebuilt.LoadPrivateFilters(self.tmp_dir)
|
|
self.assertEqual(self.expected_filters, prebuilt._FILTER_PACKAGES)
|
|
|
|
def testEmptyFiltersErrors(self):
|
|
"""Ensure LoadPrivateFilters errors if an empty list is generated."""
|
|
os.makedirs(os.path.join(self.tmp_dir, prebuilt._PRIVATE_OVERLAY_DIR))
|
|
try:
|
|
prebuilt.LoadPrivateFilters(self.tmp_dir)
|
|
except prebuilt.FiltersEmpty:
|
|
return
|
|
|
|
self.fail('Exception was not raised for empty list')
|
|
|
|
|
|
class TestPrebuilt(unittest.TestCase):
|
|
fake_path = '/b/cbuild/build/chroot/build/x86-dogfood/'
|
|
bin_package_mock = ['packages/x11-misc/shared-mime-info-0.70.tbz2',
|
|
'packages/x11-misc/util-macros-1.5.0.tbz2',
|
|
'packages/x11-misc/xbitmaps-1.1.0.tbz2',
|
|
'packages/x11-misc/read-edid-1.4.2.tbz2',
|
|
'packages/x11-misc/xdg-utils-1.0.2-r3.tbz2']
|
|
|
|
files_to_sync = [os.path.join(fake_path, file) for file in bin_package_mock]
|
|
|
|
def setUp(self):
|
|
self.mox = mox.Mox()
|
|
|
|
def tearDown(self):
|
|
self.mox.UnsetStubs()
|
|
self.mox.VerifyAll()
|
|
|
|
def _generate_dict_results(self, gs_bucket_path):
|
|
"""
|
|
Generate a dictionary result similar to GenerateUploadDict
|
|
"""
|
|
results = {}
|
|
for entry in self.files_to_sync:
|
|
results[entry] = os.path.join(
|
|
gs_bucket_path, entry.replace(self.fake_path, '').lstrip('/'))
|
|
return results
|
|
|
|
def testGenerateUploadDict(self):
|
|
gs_bucket_path = 'gs://chromeos-prebuilt/host/version'
|
|
self.mox.StubOutWithMock(cros_build_lib, 'ListFiles')
|
|
cros_build_lib.ListFiles(' ').AndReturn(self.files_to_sync)
|
|
self.mox.ReplayAll()
|
|
result = prebuilt.GenerateUploadDict(' ', gs_bucket_path, self.fake_path)
|
|
self.assertEqual(result, self._generate_dict_results(gs_bucket_path))
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|