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