10f1469bcdad11cf8bfe79ace33d28052418ecb48borenet#!/usr/bin/env python
20f1469bcdad11cf8bfe79ace33d28052418ecb48borenet#
30f1469bcdad11cf8bfe79ace33d28052418ecb48borenet# Copyright 2016 Google Inc.
40f1469bcdad11cf8bfe79ace33d28052418ecb48borenet#
50f1469bcdad11cf8bfe79ace33d28052418ecb48borenet# Use of this source code is governed by a BSD-style license that can be
60f1469bcdad11cf8bfe79ace33d28052418ecb48borenet# found in the LICENSE file.
70f1469bcdad11cf8bfe79ace33d28052418ecb48borenet
80f1469bcdad11cf8bfe79ace33d28052418ecb48borenet
90f1469bcdad11cf8bfe79ace33d28052418ecb48borenet"""Tests for zip_utils."""
100f1469bcdad11cf8bfe79ace33d28052418ecb48borenet
110f1469bcdad11cf8bfe79ace33d28052418ecb48borenet
120f1469bcdad11cf8bfe79ace33d28052418ecb48borenetimport filecmp
130f1469bcdad11cf8bfe79ace33d28052418ecb48borenetimport os
140f1469bcdad11cf8bfe79ace33d28052418ecb48borenetimport test_utils
150f1469bcdad11cf8bfe79ace33d28052418ecb48borenetimport unittest
160f1469bcdad11cf8bfe79ace33d28052418ecb48borenetimport utils
170f1469bcdad11cf8bfe79ace33d28052418ecb48borenetimport uuid
180f1469bcdad11cf8bfe79ace33d28052418ecb48borenetimport zip_utils
190f1469bcdad11cf8bfe79ace33d28052418ecb48borenet
200f1469bcdad11cf8bfe79ace33d28052418ecb48borenet
210f1469bcdad11cf8bfe79ace33d28052418ecb48borenetclass ZipUtilsTest(unittest.TestCase):
220f1469bcdad11cf8bfe79ace33d28052418ecb48borenet  def test_zip_unzip(self):
230f1469bcdad11cf8bfe79ace33d28052418ecb48borenet    with utils.tmp_dir():
240f1469bcdad11cf8bfe79ace33d28052418ecb48borenet      fw = test_utils.FileWriter(os.path.join(os.getcwd(), 'input'))
250f1469bcdad11cf8bfe79ace33d28052418ecb48borenet      # Create input files and directories.
260f1469bcdad11cf8bfe79ace33d28052418ecb48borenet      fw.mkdir('mydir')
270f1469bcdad11cf8bfe79ace33d28052418ecb48borenet      fw.mkdir('anotherdir', 0666)
280f1469bcdad11cf8bfe79ace33d28052418ecb48borenet      fw.mkdir('dir3', 0600)
290f1469bcdad11cf8bfe79ace33d28052418ecb48borenet      fw.mkdir('subdir')
300f1469bcdad11cf8bfe79ace33d28052418ecb48borenet      fw.write('a.txt', 0777)
310f1469bcdad11cf8bfe79ace33d28052418ecb48borenet      fw.write('b.txt', 0751)
320f1469bcdad11cf8bfe79ace33d28052418ecb48borenet      fw.write('c.txt', 0640)
330f1469bcdad11cf8bfe79ace33d28052418ecb48borenet      fw.write(os.path.join('subdir', 'd.txt'), 0640)
3463fd760a37905c45d26fc3d49cac261fad1b4808Ben Wagner
350f1469bcdad11cf8bfe79ace33d28052418ecb48borenet      # Zip, unzip.
360f1469bcdad11cf8bfe79ace33d28052418ecb48borenet      zip_utils.zip('input', 'test.zip')
370f1469bcdad11cf8bfe79ace33d28052418ecb48borenet      zip_utils.unzip('test.zip', 'output')
380f1469bcdad11cf8bfe79ace33d28052418ecb48borenet
390f1469bcdad11cf8bfe79ace33d28052418ecb48borenet      # Compare the inputs and outputs.
400f1469bcdad11cf8bfe79ace33d28052418ecb48borenet      test_utils.compare_trees(self, 'input', 'output')
410f1469bcdad11cf8bfe79ace33d28052418ecb48borenet
420f1469bcdad11cf8bfe79ace33d28052418ecb48borenet  def test_blacklist(self):
430f1469bcdad11cf8bfe79ace33d28052418ecb48borenet    with utils.tmp_dir():
440f1469bcdad11cf8bfe79ace33d28052418ecb48borenet      # Create input files and directories.
450f1469bcdad11cf8bfe79ace33d28052418ecb48borenet      fw = test_utils.FileWriter(os.path.join(os.getcwd(), 'input'))
460f1469bcdad11cf8bfe79ace33d28052418ecb48borenet      fw.mkdir('.git')
470f1469bcdad11cf8bfe79ace33d28052418ecb48borenet      fw.write(os.path.join('.git', 'index'))
480f1469bcdad11cf8bfe79ace33d28052418ecb48borenet      fw.write('somefile')
490f1469bcdad11cf8bfe79ace33d28052418ecb48borenet      fw.write('.DS_STORE')
500f1469bcdad11cf8bfe79ace33d28052418ecb48borenet      fw.write('leftover.pyc')
510f1469bcdad11cf8bfe79ace33d28052418ecb48borenet      fw.write('.pycfile')
520f1469bcdad11cf8bfe79ace33d28052418ecb48borenet
530f1469bcdad11cf8bfe79ace33d28052418ecb48borenet      # Zip, unzip.
540f1469bcdad11cf8bfe79ace33d28052418ecb48borenet      zip_utils.zip('input', 'test.zip', blacklist=['.git', '.DS*', '*.pyc'])
550f1469bcdad11cf8bfe79ace33d28052418ecb48borenet      zip_utils.unzip('test.zip', 'output')
560f1469bcdad11cf8bfe79ace33d28052418ecb48borenet
570f1469bcdad11cf8bfe79ace33d28052418ecb48borenet      # Remove the files/dirs we don't expect to see in output, so that we can
580f1469bcdad11cf8bfe79ace33d28052418ecb48borenet      # use self._compare_trees to check the results.
590f1469bcdad11cf8bfe79ace33d28052418ecb48borenet      fw.remove(os.path.join('.git', 'index'))
600f1469bcdad11cf8bfe79ace33d28052418ecb48borenet      fw.remove('.git')
610f1469bcdad11cf8bfe79ace33d28052418ecb48borenet      fw.remove('.DS_STORE')
620f1469bcdad11cf8bfe79ace33d28052418ecb48borenet      fw.remove('leftover.pyc')
630f1469bcdad11cf8bfe79ace33d28052418ecb48borenet
640f1469bcdad11cf8bfe79ace33d28052418ecb48borenet      # Compare results.
650f1469bcdad11cf8bfe79ace33d28052418ecb48borenet      test_utils.compare_trees(self, 'input', 'output')
660f1469bcdad11cf8bfe79ace33d28052418ecb48borenet
670f1469bcdad11cf8bfe79ace33d28052418ecb48borenet  def test_nonexistent_dir(self):
680f1469bcdad11cf8bfe79ace33d28052418ecb48borenet    with utils.tmp_dir():
690f1469bcdad11cf8bfe79ace33d28052418ecb48borenet      with self.assertRaises(IOError):
700f1469bcdad11cf8bfe79ace33d28052418ecb48borenet        zip_utils.zip('input', 'test.zip')
710f1469bcdad11cf8bfe79ace33d28052418ecb48borenet
720f1469bcdad11cf8bfe79ace33d28052418ecb48borenet
730f1469bcdad11cf8bfe79ace33d28052418ecb48borenetif __name__ == '__main__':
740f1469bcdad11cf8bfe79ace33d28052418ecb48borenet  unittest.main()
75