|
1 /* This Source Code Form is subject to the terms of the Mozilla Public |
|
2 * License, v. 2.0. If a copy of the MPL was not distributed with this |
|
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. |
|
4 */ |
|
5 |
|
6 const DATA = "ZIP WRITER TEST DATA"; |
|
7 |
|
8 var TESTS = []; |
|
9 |
|
10 function build_tests() { |
|
11 var id = 0; |
|
12 |
|
13 // Minimum mode is 0o400 |
|
14 for (let u = 4; u <= 7; u++) { |
|
15 for (let g = 0; g <= 7; g++) { |
|
16 for (let o = 0; o <= 7; o++) { |
|
17 TESTS[id] = { |
|
18 name: "test" + u + g + o, |
|
19 permission: (u << 6) + (g << 3) + o |
|
20 }; |
|
21 id++; |
|
22 } |
|
23 } |
|
24 } |
|
25 } |
|
26 |
|
27 function run_test() { |
|
28 build_tests(); |
|
29 |
|
30 var foStream = Cc["@mozilla.org/network/file-output-stream;1"]. |
|
31 createInstance(Ci.nsIFileOutputStream); |
|
32 |
|
33 var tmp = tmpDir.clone(); |
|
34 tmp.append("temp-permissions"); |
|
35 tmp.createUnique(Ci.nsILocalFile.DIRECTORY_TYPE, 0755); |
|
36 |
|
37 var file = tmp.clone(); |
|
38 file.append("tempfile"); |
|
39 |
|
40 zipW.open(tmpFile, PR_RDWR | PR_CREATE_FILE | PR_TRUNCATE); |
|
41 for (let i = 0; i < TESTS.length; i++) { |
|
42 // Open the file with the permissions to match how the zipreader extracts |
|
43 // This obeys the umask |
|
44 foStream.init(file, 0x02 | 0x08 | 0x20, TESTS[i].permission, 0); |
|
45 foStream.close(); |
|
46 |
|
47 // umask may have altered the permissions so test against what they really were. |
|
48 // This reduces the coverage of the test but there isn't much we can do |
|
49 var perm = file.permissions & 0xfff; |
|
50 if (TESTS[i].permission != perm) { |
|
51 dump("File permissions for " + TESTS[i].name + " were " + perm.toString(8) + "\n"); |
|
52 TESTS[i].permission = perm; |
|
53 } |
|
54 |
|
55 zipW.addEntryFile(TESTS[i].name, Ci.nsIZipWriter.COMPRESSION_NONE, file, false); |
|
56 do_check_eq(zipW.getEntry(TESTS[i].name).permissions, TESTS[i].permission | 0o400); |
|
57 file.permissions = 0o600; |
|
58 file.remove(true); |
|
59 } |
|
60 zipW.close(); |
|
61 |
|
62 zipW.open(tmpFile, PR_RDWR); |
|
63 for (let i = 0; i < TESTS.length; i++) { |
|
64 dump("Testing zipwriter file permissions for " + TESTS[i].name + "\n"); |
|
65 do_check_eq(zipW.getEntry(TESTS[i].name).permissions, TESTS[i].permission | 0o400); |
|
66 } |
|
67 zipW.close(); |
|
68 |
|
69 var zipR = new ZipReader(tmpFile); |
|
70 for (let i = 0; i < TESTS.length; i++) { |
|
71 dump("Testing zipreader file permissions for " + TESTS[i].name + "\n"); |
|
72 do_check_eq(zipR.getEntry(TESTS[i].name).permissions, TESTS[i].permission | 0o400); |
|
73 dump("Testing extracted file permissions for " + TESTS[i].name + "\n"); |
|
74 zipR.extract(TESTS[i].name, file); |
|
75 do_check_eq(file.permissions & 0xfff, TESTS[i].permission); |
|
76 do_check_false(file.isDirectory()); |
|
77 file.permissions = 0o600; |
|
78 file.remove(true); |
|
79 } |
|
80 zipR.close(); |
|
81 |
|
82 tmp.remove(true); |
|
83 } |