| Index: infra/bots/assets/asset_utils_test.py
|
| diff --git a/infra/bots/assets/asset_utils_test.py b/infra/bots/assets/asset_utils_test.py
|
| index edfc271f9e769e378d1173865f0daa7ee870842e..a76042fe770be1e8e905764b5ab7315c62c9674c 100644
|
| --- a/infra/bots/assets/asset_utils_test.py
|
| +++ b/infra/bots/assets/asset_utils_test.py
|
| @@ -20,13 +20,13 @@ import uuid
|
|
|
|
|
| FILE_DIR = os.path.dirname(os.path.abspath(__file__))
|
| -INFRA_BOTS_DIR = os.path.realpath(os.path.join(
|
| - FILE_DIR, os.pardir, 'infra', 'bots'))
|
| +INFRA_BOTS_DIR = os.path.realpath(os.path.join(FILE_DIR, os.pardir))
|
| sys.path.insert(0, INFRA_BOTS_DIR)
|
| import test_utils
|
| import utils
|
|
|
|
|
| +CIPD_DEV_SERVICE_URL = 'https://chrome-infra-packages-dev.appspot.com'
|
| GS_BUCKET = 'skia-infra-testdata'
|
|
|
|
|
| @@ -48,16 +48,131 @@ def _write_stuff(target_dir):
|
| fw.write(os.path.join('subdir', 'd.txt'), 0640)
|
|
|
|
|
| -class AssetUtilsTest(unittest.TestCase):
|
| +class _LocalStore(object):
|
| + """Local store used for testing."""
|
| + def __init__(self):
|
| + self.dir = tempfile.mkdtemp()
|
| +
|
| + def get_available_versions(self, name):
|
| + target = os.path.join(self.dir, name)
|
| + if not os.path.isdir(target):
|
| + return []
|
| + contents = os.listdir(os.path.join(self.dir, name))
|
| + return sorted([int(d) for d in contents])
|
| +
|
| + def upload(self, name, version, target_dir):
|
| + shutil.copytree(target_dir, os.path.join(self.dir, name, str(version)))
|
| +
|
| + def download(self, name, version, target_dir):
|
| + shutil.copytree(os.path.join(self.dir, name, str(version)), target_dir)
|
| +
|
| + def delete_contents(self, name):
|
| + try:
|
| + shutil.rmtree(self.dir)
|
| + except OSError:
|
| + if os.path.exists(self.dir):
|
| + raise
|
| +
|
| +
|
| +class StoreTest(unittest.TestCase):
|
| + """Superclass used for testing one of the stores."""
|
| + def setUp(self):
|
| + self.asset_name = str(uuid.uuid4())
|
| +
|
| + def tearDown(self):
|
| + pass
|
| +
|
| + def _test_upload_download(self, store):
|
| + with utils.tmp_dir():
|
| + # Create input files and directories.
|
| + input_dir = os.path.join(os.getcwd(), 'input')
|
| + _write_stuff(input_dir)
|
| +
|
| + # Upload a version, download it again.
|
| + store.upload(self.asset_name, 0, input_dir)
|
| + output_dir = os.path.join(os.getcwd(), 'output')
|
| + store.download(self.asset_name, 0, output_dir)
|
| +
|
| + # Compare.
|
| + test_utils.compare_trees(self, input_dir, output_dir)
|
| +
|
| + def _test_versions(self, store):
|
| + with utils.tmp_dir():
|
| + # Create input files and directories.
|
| + input_dir = os.path.join(os.getcwd(), 'input')
|
| + _write_stuff(input_dir)
|
| + self.assertEqual(store.get_available_versions(self.asset_name), [])
|
| + store.upload(self.asset_name, 0, input_dir)
|
| + self.assertEqual(store.get_available_versions(self.asset_name), [0])
|
| + store.upload(self.asset_name, 1, input_dir)
|
| + self.assertEqual(store.get_available_versions(self.asset_name), [0, 1])
|
| + store.delete_contents(self.asset_name)
|
| + self.assertEqual(store.get_available_versions(self.asset_name), [])
|
| +
|
| +
|
| +class LocalStoreTest(StoreTest):
|
| + """Test the local store."""
|
| + def setUp(self):
|
| + super(LocalStoreTest, self).setUp()
|
| + self._store = _LocalStore()
|
| +
|
| + def tearDown(self):
|
| + self._store.delete_contents(self.asset_name)
|
| + super(LocalStoreTest, self).tearDown()
|
| +
|
| + def test_upload_download(self):
|
| + self._test_upload_download(self._store)
|
| +
|
| + def test_versions(self):
|
| + self._test_versions(self._store)
|
| +
|
| +
|
| +class CIPDStoreTest(StoreTest):
|
| + """Test the CIPD store."""
|
| + def setUp(self):
|
| + super(CIPDStoreTest, self).setUp()
|
| + self._store = asset_utils.CIPDStore(cipd_url=CIPD_DEV_SERVICE_URL)
|
| +
|
| + def tearDown(self):
|
| + self._store.delete_contents(self.asset_name)
|
| + super(CIPDStoreTest, self).tearDown()
|
| +
|
| + def test_upload_download(self):
|
| + self._test_upload_download(self._store)
|
| +
|
| + def test_versions(self):
|
| + self._test_versions(self._store)
|
| +
|
| +
|
| +class GSStoreTest(StoreTest):
|
| + """Test the GS store."""
|
| + def setUp(self):
|
| + super(GSStoreTest, self).setUp()
|
| + self._store = asset_utils.GSStore(gsutil=None, bucket=GS_BUCKET)
|
| +
|
| + def tearDown(self):
|
| + self._store.delete_contents(self.asset_name)
|
| + super(GSStoreTest, self).tearDown()
|
| +
|
| + def test_upload_download(self):
|
| + self._test_upload_download(self._store)
|
| +
|
| + def test_versions(self):
|
| + self._test_versions(self._store)
|
| +
|
| +
|
| +class AssetTest(unittest.TestCase):
|
| + """Test Asset operations using a local store."""
|
| def setUp(self):
|
| self.asset_name = str(uuid.uuid4())
|
| self.old_prompt = asset_utils._prompt
|
| asset_utils._prompt = _fake_prompt('y')
|
| - self.a = asset_utils.Asset.add(self.asset_name, gs_bucket=GS_BUCKET)
|
| + self._store = _LocalStore()
|
| + self.a = asset_utils.Asset.add(self.asset_name, self._store)
|
|
|
| def tearDown(self):
|
| if self.a:
|
| - self.a.remove()
|
| + self.a.remove(remove_in_store=True)
|
| asset_utils._prompt = self.old_prompt
|
|
|
| gs_path = 'gs://%s/assets/%s' % (GS_BUCKET, self.asset_name)
|
| @@ -72,7 +187,7 @@ class AssetUtilsTest(unittest.TestCase):
|
| def test_add_remove(self):
|
| # Ensure that we can't create an asset twice.
|
| with self.assertRaises(Exception):
|
| - asset_utils.Asset.add(self.asset_name, gs_bucket=GS_BUCKET)
|
| + asset_utils.Asset.add(self.asset_name, self._store)
|
|
|
| # Ensure that the asset dir exists.
|
| asset_dir = os.path.join(FILE_DIR, self.asset_name)
|
|
|