Home | History | Annotate | Download | only in bots
      1 #!/usr/bin/env python
      2 #
      3 # Copyright 2016 Google Inc.
      4 #
      5 # Use of this source code is governed by a BSD-style license that can be
      6 # found in the LICENSE file.
      7 
      8 
      9 """Tests for zip_utils."""
     10 
     11 
     12 import filecmp
     13 import os
     14 import test_utils
     15 import unittest
     16 import utils
     17 import uuid
     18 import zip_utils
     19 
     20 
     21 class ZipUtilsTest(unittest.TestCase):
     22   def test_zip_unzip(self):
     23     with utils.tmp_dir():
     24       fw = test_utils.FileWriter(os.path.join(os.getcwd(), 'input'))
     25       # Create input files and directories.
     26       fw.mkdir('mydir')
     27       fw.mkdir('anotherdir', 0666)
     28       fw.mkdir('dir3', 0600)
     29       fw.mkdir('subdir')
     30       fw.write('a.txt', 0777)
     31       fw.write('b.txt', 0751)
     32       fw.write('c.txt', 0640)
     33       fw.write(os.path.join('subdir', 'd.txt'), 0640)
     34 
     35       # Zip, unzip.
     36       zip_utils.zip('input', 'test.zip')
     37       zip_utils.unzip('test.zip', 'output')
     38 
     39       # Compare the inputs and outputs.
     40       test_utils.compare_trees(self, 'input', 'output')
     41 
     42   def test_blacklist(self):
     43     with utils.tmp_dir():
     44       # Create input files and directories.
     45       fw = test_utils.FileWriter(os.path.join(os.getcwd(), 'input'))
     46       fw.mkdir('.git')
     47       fw.write(os.path.join('.git', 'index'))
     48       fw.write('somefile')
     49       fw.write('.DS_STORE')
     50       fw.write('leftover.pyc')
     51       fw.write('.pycfile')
     52 
     53       # Zip, unzip.
     54       zip_utils.zip('input', 'test.zip', blacklist=['.git', '.DS*', '*.pyc'])
     55       zip_utils.unzip('test.zip', 'output')
     56 
     57       # Remove the files/dirs we don't expect to see in output, so that we can
     58       # use self._compare_trees to check the results.
     59       fw.remove(os.path.join('.git', 'index'))
     60       fw.remove('.git')
     61       fw.remove('.DS_STORE')
     62       fw.remove('leftover.pyc')
     63 
     64       # Compare results.
     65       test_utils.compare_trees(self, 'input', 'output')
     66 
     67   def test_nonexistent_dir(self):
     68     with utils.tmp_dir():
     69       with self.assertRaises(IOError):
     70         zip_utils.zip('input', 'test.zip')
     71 
     72 
     73 if __name__ == '__main__':
     74   unittest.main()
     75