xref: /aosp_15_r20/external/skia/infra/bots/zip_utils_test.py (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
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