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