Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(24)

Unified Diff: infra/bots/zip_utils_test.py

Issue 2069543002: Add asset management scripts (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Add FYI prints for asset creation Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« infra/bots/zip_utils.py ('K') | « infra/bots/zip_utils.py ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: infra/bots/zip_utils_test.py
diff --git a/infra/bots/zip_utils_test.py b/infra/bots/zip_utils_test.py
new file mode 100644
index 0000000000000000000000000000000000000000..a0376ca9bf813ab3bedeaf76695804cc60b415c1
--- /dev/null
+++ b/infra/bots/zip_utils_test.py
@@ -0,0 +1,108 @@
+#!/usr/bin/env python
+#
+# Copyright 2016 Google Inc.
+#
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+
+"""Tests for zip_utils."""
+
+
+import filecmp
+import os
+import unittest
+import utils
+import uuid
+import zip_utils
+
+
+def writefile(fname, mode=0640):
+ """Write the file with the given mode and random contents."""
+ dirname = os.path.dirname(fname)
+ if not os.path.isdir(dirname):
+ os.makedirs(dirname)
+ with open(fname, 'w') as f:
+ f.write(str(uuid.uuid4()))
+ os.chmod(fname, mode)
+
+
+class ZipUtilsTest(unittest.TestCase):
+ def _compare_trees(self, a, b):
+ """Compare two directory trees, assert if any differences."""
+ def _cmp(prefix, dcmp):
+ # Verify that the file and directory names are the same.
+ self.assertEqual(len(dcmp.left_only), 0)
+ self.assertEqual(len(dcmp.right_only), 0)
+ self.assertEqual(len(dcmp.diff_files), 0)
+ self.assertEqual(len(dcmp.funny_files), 0)
+
+ # Verify that the files are identical.
+ for f in dcmp.common_files:
+ pathA = os.path.join(a, prefix, f)
+ pathB = os.path.join(b, prefix, f)
+ self.assertTrue(filecmp.cmp(pathA, pathB, shallow=False))
+ statA = os.stat(pathA)
+ statB = os.stat(pathB)
+ self.assertEqual(statA.st_mode, statB.st_mode)
+ with open(pathA, 'rb') as f:
+ contentsA = f.read()
+ with open(pathB, 'rb') as f:
+ contentsB = f.read()
+ self.assertEqual(contentsA, contentsB)
+
+ # Recurse on subdirectories.
+ for prefix, obj in dcmp.subdirs.iteritems():
+ _cmp(prefix, obj)
+
+ _cmp('', filecmp.dircmp(a, b))
+
+ def test_zip_unzip(self):
+ with utils.tmp_dir():
+ # Create input files and directories.
+ os.mkdir('input')
+ os.mkdir(os.path.join('input', 'mydir'))
+ os.mkdir(os.path.join('input', 'anotherdir'))
+ os.chmod(os.path.join('input', 'anotherdir'), 0666)
+ os.mkdir(os.path.join('input', 'dir3'))
+ os.chmod(os.path.join('input', 'dir3'), 0600)
+ writefile(os.path.join('input', 'a.txt'), 0777)
+ writefile(os.path.join('input', 'b.txt'), 0751)
+ writefile(os.path.join('input', 'c.txt'), 0640)
+ writefile(os.path.join('input', 'subdir', 'd.txt'), 0640)
+
+ # Zip, unzip.
+ zip_utils.zip('input', 'test.zip')
+ zip_utils.unzip('test.zip', 'output')
+
+ # Compare the inputs and outputs.
+ self._compare_trees('input', 'output')
+
+ def test_blacklist(self):
+ with utils.tmp_dir():
+ # Create input files and directories.
+ os.mkdir('input')
+ os.mkdir(os.path.join('input', '.git'))
+ writefile(os.path.join('input', '.git', 'index'))
+ writefile(os.path.join('input', 'somefile'))
+ writefile(os.path.join('input', '.DS_STORE'))
+ writefile(os.path.join('input', 'leftover.pyc'))
+ writefile(os.path.join('input', '.pycfile'))
+
+ # Zip, unzip.
+ zip_utils.zip('input', 'test.zip', blacklist=['.git', '.DS*', '*.pyc'])
+ zip_utils.unzip('test.zip', 'output')
+
+ # Remove the files/dirs we don't expect to see in output, so that we can
+ # use self._compare_trees to check the results.
+ os.remove(os.path.join('input', '.git', 'index'))
+ os.rmdir(os.path.join('input', '.git'))
+ os.remove(os.path.join('input', '.DS_STORE'))
+ os.remove(os.path.join('input', 'leftover.pyc'))
+
+ # Compare results.
+ self._compare_trees('input', 'output')
+
+
+if __name__ == '__main__':
+ unittest.main()
« infra/bots/zip_utils.py ('K') | « infra/bots/zip_utils.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698