aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeorge Roman <george.roman.99@gmail.com>2018-05-16 19:07:04 +0300
committerHisham Muhammad <hisham@gobolinux.org>2018-05-17 18:30:29 -0300
commitac1cb9b178fd5bd7bbd909062034fdb60434092a (patch)
tree53a24283dcc9dae78e60de3a92d8186ef4ec3933
parent42b85be332ebaabdbc7f457c484aeedd361d0528 (diff)
downloadluarocks-ac1cb9b178fd5bd7bbd909062034fdb60434092a.tar.gz
luarocks-ac1cb9b178fd5bd7bbd909062034fdb60434092a.tar.bz2
luarocks-ac1cb9b178fd5bd7bbd909062034fdb60434092a.zip
Update fs module tests to use fs.set_permissions
-rw-r--r--spec/fs_spec.lua316
1 files changed, 186 insertions, 130 deletions
diff --git a/spec/fs_spec.lua b/spec/fs_spec.lua
index a74980f3..9681b0e7 100644
--- a/spec/fs_spec.lua
+++ b/spec/fs_spec.lua
@@ -4,8 +4,58 @@ test_env.unload_luarocks()
4local fs = require("luarocks.fs") 4local fs = require("luarocks.fs")
5local lfs = require("lfs") 5local lfs = require("lfs")
6local is_win = test_env.TEST_TARGET_OS == "windows" 6local is_win = test_env.TEST_TARGET_OS == "windows"
7local posix_ok = pcall(require, "posix")
7 8
8describe("Luarocks fs test #whitebox #w_fs", function() 9describe("Luarocks fs test #whitebox #w_fs", function()
10 local get_tmp_path = function()
11 local path = os.tmpname()
12 if is_win and not path:find(":") then
13 path = os.getenv("TEMP") .. path
14 end
15 return path
16 end
17
18 local exists_file = function(path)
19 local ok, err, code = os.rename(path, path)
20 if not ok and code == 13 then
21 return true
22 end
23 return ok
24 end
25
26 local create_file = function(path, content)
27 local fd = assert(io.open(path, "w"))
28 if not content then
29 content = "foo"
30 end
31 assert(fd:write(content))
32 fd:close()
33 end
34
35 local make_unreadable = function(path)
36 if is_win then
37 fs.execute("icacls " .. fs.Q(path) .. " /deny %USERNAME%:(RD)")
38 else
39 fs.execute("chmod -r " .. fs.Q(path))
40 end
41 end
42
43 local make_unwritable = function(path)
44 if is_win then
45 fs.execute("icacls " .. fs.Q(path) .. " /deny %USERNAME%:(WD,AD)")
46 else
47 fs.execute("chmod -w " .. fs.Q(path))
48 end
49 end
50
51 local make_unexecutable = function(path)
52 if is_win then
53 fs.execute("icacls " .. fs.Q(path) .. " /deny %USERNAME%:(X)")
54 else
55 fs.execute("chmod -x " .. fs.Q(path))
56 end
57 end
58
9 describe("fs.Q", function() 59 describe("fs.Q", function()
10 it("simple argument", function() 60 it("simple argument", function()
11 assert.are.same(is_win and '"foo"' or "'foo'", fs.Q("foo")) 61 assert.are.same(is_win and '"foo"' or "'foo'", fs.Q("foo"))
@@ -20,6 +70,72 @@ describe("Luarocks fs test #whitebox #w_fs", function()
20 end) 70 end)
21 end) 71 end)
22 72
73 describe("fs.set_permissions", function()
74 local readfile
75 local execfile
76 local tmpdir
77
78 after_each(function()
79 if readfile then
80 os.remove(readfile)
81 readfile = nil
82 end
83 if execfile then
84 os.remove(execfile)
85 execfile = nil
86 end
87 if tmpdir then
88 lfs.rmdir(tmpdir)
89 tmpdir = nil
90 end
91 end)
92
93 it("returns true and sets the permissions of the argument accordingly", function()
94 readfile = get_tmp_path()
95 create_file(readfile)
96 make_unreadable(readfile)
97 assert.falsy(io.open(readfile, "r"))
98 assert.truthy(fs.set_permissions(readfile, "read", "user"))
99 assert.truthy(io.open(readfile, "r"))
100
101 if is_win then
102 execfile = get_tmp_path() .. ".exe"
103 create_file(execfile)
104 else
105 execfile = get_tmp_path() .. ".sh"
106 create_file(execfile, "#!/bin/bash")
107 end
108 make_unexecutable(execfile)
109 local fd = assert(io.popen(execfile .. " 2>&1"))
110 local result = assert(fd:read("*a"))
111 assert.truthy(result:match("denied"))
112 fd:close()
113 assert.truthy(fs.set_permissions(execfile, "exec", "user"))
114 fd = assert(io.popen(execfile .. " 2>&1"))
115 result = assert(fd:read("*a"))
116 assert.falsy(result:match("denied"))
117 fd:close()
118
119 tmpdir = get_tmp_path()
120 os.remove(tmpdir)
121 lfs.mkdir(tmpdir)
122 make_unexecutable(tmpdir)
123 fd = assert(io.popen("cd " .. fs.Q(tmpdir) .. " 2>&1"))
124 result = assert(fd:read("*a"))
125 assert.truthy(result:match("denied") or result:match("can't cd"))
126 fd:close()
127 assert.truthy(fs.set_permissions(tmpdir, "exec", "user"))
128 fd = assert(io.popen("cd " .. fs.Q(tmpdir) .. " 2>&1"))
129 result = assert(fd:read("*a"))
130 assert.falsy(result:match("denied") or result:match("can't cd"))
131 fd:close()
132 end)
133
134 it("returns false and does nothing if the argument is nonexistent", function()
135 assert.falsy(fs.set_permissions("/nonexistent", "read", "user"))
136 end)
137 end)
138
23 describe("fs.is_file", function() 139 describe("fs.is_file", function()
24 local tmpfile 140 local tmpfile
25 local tmpdir 141 local tmpdir
@@ -36,10 +152,8 @@ describe("Luarocks fs test #whitebox #w_fs", function()
36 end) 152 end)
37 153
38 it("returns true when the argument is a file", function() 154 it("returns true when the argument is a file", function()
39 tmpfile = os.tmpname() 155 tmpfile = get_tmp_path()
40 local fd = assert(io.open(tmpfile, "w")) 156 create_file(tmpfile)
41 assert(fd:write("foo"))
42 fd:close()
43 assert.same(true, fs.is_file(tmpfile)) 157 assert.same(true, fs.is_file(tmpfile))
44 end) 158 end)
45 159
@@ -48,7 +162,7 @@ describe("Luarocks fs test #whitebox #w_fs", function()
48 end) 162 end)
49 163
50 it("returns false when the argument exists but is not a file", function() 164 it("returns false when the argument exists but is not a file", function()
51 tmpdir = os.tmpname() 165 tmpdir = get_tmp_path()
52 os.remove(tmpdir) 166 os.remove(tmpdir)
53 lfs.mkdir(tmpdir) 167 lfs.mkdir(tmpdir)
54 assert.same(false, fs.is_file("/nonexistent")) 168 assert.same(false, fs.is_file("/nonexistent"))
@@ -71,17 +185,15 @@ describe("Luarocks fs test #whitebox #w_fs", function()
71 end) 185 end)
72 186
73 it("returns true when the argument is a directory", function() 187 it("returns true when the argument is a directory", function()
74 tmpdir = os.tmpname() 188 tmpdir = get_tmp_path()
75 os.remove(tmpdir) 189 os.remove(tmpdir)
76 lfs.mkdir(tmpdir) 190 lfs.mkdir(tmpdir)
77 assert.truthy(fs.is_dir(tmpdir)) 191 assert.truthy(fs.is_dir(tmpdir))
78 end) 192 end)
79 193
80 it("returns false when the argument is a file", function() 194 it("returns false when the argument is a file", function()
81 tmpfile = os.tmpname() 195 tmpfile = get_tmp_path()
82 local fd = assert(io.open(tmpfile, "w")) 196 create_file(tmpfile)
83 assert(fd:write("foo"))
84 fd:close()
85 assert.falsy(fs.is_dir(tmpfile)) 197 assert.falsy(fs.is_dir(tmpfile))
86 end) 198 end)
87 199
@@ -106,15 +218,13 @@ describe("Luarocks fs test #whitebox #w_fs", function()
106 end) 218 end)
107 219
108 it("returns true when the argument is a file", function() 220 it("returns true when the argument is a file", function()
109 tmpfile = os.tmpname() 221 tmpfile = get_tmp_path()
110 local fd = assert(io.open(tmpfile, "w")) 222 create_file(tmpfile)
111 assert(fd:write("foo"))
112 fd:close()
113 assert.truthy(fs.exists(tmpfile)) 223 assert.truthy(fs.exists(tmpfile))
114 end) 224 end)
115 225
116 it("returns true when the argument is a directory", function() 226 it("returns true when the argument is a directory", function()
117 tmpdir = os.tmpname() 227 tmpdir = get_tmp_path()
118 os.remove(tmpdir) 228 os.remove(tmpdir)
119 lfs.mkdir(tmpdir) 229 lfs.mkdir(tmpdir)
120 assert.truthy(fs.exists(tmpdir)) 230 assert.truthy(fs.exists(tmpdir))
@@ -147,7 +257,7 @@ describe("Luarocks fs test #whitebox #w_fs", function()
147 it("returns the current working directory", function() 257 it("returns the current working directory", function()
148 local currentdir = lfs.currentdir() 258 local currentdir = lfs.currentdir()
149 assert.same(currentdir, fs.current_dir()) 259 assert.same(currentdir, fs.current_dir())
150 tmpdir = os.tmpname() 260 tmpdir = get_tmp_path()
151 os.remove(tmpdir) 261 os.remove(tmpdir)
152 lfs.mkdir(tmpdir) 262 lfs.mkdir(tmpdir)
153 assert.truthy(fs.change_dir(tmpdir)) 263 assert.truthy(fs.change_dir(tmpdir))
@@ -184,7 +294,7 @@ describe("Luarocks fs test #whitebox #w_fs", function()
184 end) 294 end)
185 295
186 it("returns true and changes the current working directory if the argument is a directory", function() 296 it("returns true and changes the current working directory if the argument is a directory", function()
187 tmpdir = os.tmpname() 297 tmpdir = get_tmp_path()
188 os.remove(tmpdir) 298 os.remove(tmpdir)
189 lfs.mkdir(tmpdir) 299 lfs.mkdir(tmpdir)
190 assert.truthy(fs.change_dir(tmpdir)) 300 assert.truthy(fs.change_dir(tmpdir))
@@ -196,10 +306,8 @@ describe("Luarocks fs test #whitebox #w_fs", function()
196 end) 306 end)
197 307
198 it("returns false and does nothing when the argument is a file", function() 308 it("returns false and does nothing when the argument is a file", function()
199 tmpfile = os.tmpname() 309 tmpfile = get_tmp_path()
200 local fd = assert(io.open(tmpfile, "w")) 310 create_file(tmpfile)
201 assert(fd:write("foo"))
202 fd:close()
203 assert.falsy(fs.change_dir(tmpfile)) 311 assert.falsy(fs.change_dir(tmpfile))
204 assert.same(olddir, lfs.currentdir()) 312 assert.same(olddir, lfs.currentdir())
205 end) 313 end)
@@ -229,7 +337,7 @@ describe("Luarocks fs test #whitebox #w_fs", function()
229 end) 337 end)
230 338
231 it("returns true and changes the current directory to root if the current directory is valid", function() 339 it("returns true and changes the current directory to root if the current directory is valid", function()
232 tmpdir = os.tmpname() 340 tmpdir = get_tmp_path()
233 os.remove(tmpdir) 341 os.remove(tmpdir)
234 lfs.mkdir(tmpdir) 342 lfs.mkdir(tmpdir)
235 assert.truthy(fs.change_dir(tmpdir)) 343 assert.truthy(fs.change_dir(tmpdir))
@@ -241,7 +349,7 @@ describe("Luarocks fs test #whitebox #w_fs", function()
241 end) 349 end)
242 350
243 it("returns false and does nothing if the current directory is not valid #unix", function() 351 it("returns false and does nothing if the current directory is not valid #unix", function()
244 tmpdir = os.tmpname() 352 tmpdir = get_tmp_path()
245 os.remove(tmpdir) 353 os.remove(tmpdir)
246 lfs.mkdir(tmpdir) 354 lfs.mkdir(tmpdir)
247 lfs.chdir(tmpdir) 355 lfs.chdir(tmpdir)
@@ -270,7 +378,7 @@ describe("Luarocks fs test #whitebox #w_fs", function()
270 end) 378 end)
271 379
272 it("returns true and changes the current directory to the previous one in the dir stack if the dir stack is not empty", function() 380 it("returns true and changes the current directory to the previous one in the dir stack if the dir stack is not empty", function()
273 tmpdir = os.tmpname() 381 tmpdir = get_tmp_path()
274 os.remove(tmpdir) 382 os.remove(tmpdir)
275 lfs.mkdir(tmpdir) 383 lfs.mkdir(tmpdir)
276 assert.truthy(fs.change_dir(tmpdir)) 384 assert.truthy(fs.change_dir(tmpdir))
@@ -300,14 +408,14 @@ describe("Luarocks fs test #whitebox #w_fs", function()
300 end) 408 end)
301 409
302 it("returns true and creates the directory specified by the argument", function() 410 it("returns true and creates the directory specified by the argument", function()
303 tmpdir = os.tmpname() 411 tmpdir = get_tmp_path()
304 os.remove(tmpdir) 412 os.remove(tmpdir)
305 assert.truthy(fs.make_dir(tmpdir)) 413 assert.truthy(fs.make_dir(tmpdir))
306 assert.same("directory", lfs.attributes(tmpdir, "mode")) 414 assert.same("directory", lfs.attributes(tmpdir, "mode"))
307 end) 415 end)
308 416
309 it("returns true and creates the directory path specified by the argument", function() 417 it("returns true and creates the directory path specified by the argument", function()
310 tmpdir = os.tmpname() 418 tmpdir = get_tmp_path()
311 os.remove(tmpdir) 419 os.remove(tmpdir)
312 intdir = "/internaldir" 420 intdir = "/internaldir"
313 local dirpath = tmpdir .. intdir 421 local dirpath = tmpdir .. intdir
@@ -317,7 +425,7 @@ describe("Luarocks fs test #whitebox #w_fs", function()
317 end) 425 end)
318 426
319 it("returns false and does nothing if the argument is not valid (file in the path)", function() 427 it("returns false and does nothing if the argument is not valid (file in the path)", function()
320 tmpfile = os.tmpname() 428 tmpfile = get_tmp_path()
321 local fd = assert(io.open(tmpfile, "w")) 429 local fd = assert(io.open(tmpfile, "w"))
322 assert(fd:write("foo")) 430 assert(fd:write("foo"))
323 fd:close() 431 fd:close()
@@ -327,22 +435,12 @@ describe("Luarocks fs test #whitebox #w_fs", function()
327 end) 435 end)
328 436
329 it("returns false and does nothing if the argument already exists", function() 437 it("returns false and does nothing if the argument already exists", function()
330 tmpfile = os.tmpname() 438 tmpfile = get_tmp_path()
331 local fd = assert(io.open(tmpfile, "w")) 439 create_file(tmpfile)
332 assert(fd:write("foo"))
333 fd:close()
334 assert.falsy(fs.make_dir(tmpfile)) 440 assert.falsy(fs.make_dir(tmpfile))
335 end) 441 end)
336 end) 442 end)
337 443
338 local exists_file = function(path)
339 local ok, err, code = os.rename(path, path)
340 if not ok and code == 13 then
341 return true
342 end
343 return ok
344 end
345
346 describe("fs.remove_dir_if_empty", function() 444 describe("fs.remove_dir_if_empty", function()
347 local tmpfile 445 local tmpfile
348 local tmpdir 446 local tmpdir
@@ -359,7 +457,7 @@ describe("Luarocks fs test #whitebox #w_fs", function()
359 end) 457 end)
360 458
361 it("removes the directory specified by the argument if it is empty", function() 459 it("removes the directory specified by the argument if it is empty", function()
362 tmpdir = os.tmpname() 460 tmpdir = get_tmp_path()
363 os.remove(tmpdir) 461 os.remove(tmpdir)
364 lfs.mkdir(tmpdir) 462 lfs.mkdir(tmpdir)
365 fs.remove_dir_if_empty(tmpdir) 463 fs.remove_dir_if_empty(tmpdir)
@@ -367,15 +465,12 @@ describe("Luarocks fs test #whitebox #w_fs", function()
367 end) 465 end)
368 466
369 it("does nothing if the directory specified by the argument is not empty", function() 467 it("does nothing if the directory specified by the argument is not empty", function()
370 tmpdir = os.tmpname() 468 tmpdir = get_tmp_path()
371 os.remove(tmpdir) 469 os.remove(tmpdir)
372 lfs.mkdir(tmpdir) 470 lfs.mkdir(tmpdir)
373 tmpfile = "/internalfile" 471 tmpfile = "/internalfile"
374 local filepath = tmpdir .. tmpfile 472 local filepath = tmpdir .. tmpfile
375 lfs.touch(filepath) 473 create_file(filepath)
376 local fd = assert(io.open(filepath, "w"))
377 assert(fd:write("foo"))
378 fd:close()
379 fs.remove_dir_if_empty(tmpdir) 474 fs.remove_dir_if_empty(tmpdir)
380 assert.truthy(exists_file(tmpdir)) 475 assert.truthy(exists_file(tmpdir))
381 end) 476 end)
@@ -402,7 +497,7 @@ describe("Luarocks fs test #whitebox #w_fs", function()
402 end) 497 end)
403 498
404 it("removes the directory path specified by the argument if it is empty", function() 499 it("removes the directory path specified by the argument if it is empty", function()
405 tmpdir = os.tmpname() 500 tmpdir = get_tmp_path()
406 os.remove(tmpdir) 501 os.remove(tmpdir)
407 lfs.mkdir(tmpdir) 502 lfs.mkdir(tmpdir)
408 fs.remove_dir_tree_if_empty(tmpdir) 503 fs.remove_dir_tree_if_empty(tmpdir)
@@ -410,7 +505,7 @@ describe("Luarocks fs test #whitebox #w_fs", function()
410 end) 505 end)
411 506
412 it("does nothing if the directory path specified by the argument is not empty", function() 507 it("does nothing if the directory path specified by the argument is not empty", function()
413 tmpdir = os.tmpname() 508 tmpdir = get_tmp_path()
414 os.remove(tmpdir) 509 os.remove(tmpdir)
415 lfs.mkdir(tmpdir) 510 lfs.mkdir(tmpdir)
416 intdir = "/internaldir" 511 intdir = "/internaldir"
@@ -418,7 +513,6 @@ describe("Luarocks fs test #whitebox #w_fs", function()
418 lfs.mkdir(dirpath) 513 lfs.mkdir(dirpath)
419 tmpfile = "/internalfile" 514 tmpfile = "/internalfile"
420 local filepath = dirpath .. tmpfile 515 local filepath = dirpath .. tmpfile
421 lfs.touch(filepath)
422 fs.remove_dir_tree_if_empty(tmpdir) 516 fs.remove_dir_tree_if_empty(tmpdir)
423 assert.truthy(exists_file(dirpath)) 517 assert.truthy(exists_file(dirpath))
424 assert.truthy(exists_file(tmpdir)) 518 assert.truthy(exists_file(tmpdir))
@@ -447,71 +541,58 @@ describe("Luarocks fs test #whitebox #w_fs", function()
447 541
448 it("returns true and copies the contents and the permissions of the source file to the destination file", function() 542 it("returns true and copies the contents and the permissions of the source file to the destination file", function()
449 srcfile = os.tmpname() 543 srcfile = os.tmpname()
450 local fd = assert(io.open(srcfile, "w")) 544 create_file(srcfile, srccontent)
451 local srccontent = "foo"
452 assert(fd:write(srccontent))
453 fd:close()
454 dstfile = os.tmpname() 545 dstfile = os.tmpname()
455 os.remove(dstfile) 546 os.remove(dstfile)
456 assert.truthy(fs.copy(srcfile, dstfile, nil)) 547 assert.truthy(fs.copy(srcfile, dstfile))
457 fd = assert(io.open(dstfile, "r")) 548 fd = assert(io.open(dstfile, "r"))
458 local dstcontent = fd:read("*a") 549 local dstcontent = fd:read("*a")
459 assert.same(srccontent, dstcontent) 550 assert.same("foo", dstcontent)
460 if not is_win then 551 if posix_ok then
461 assert.same(lfs.attributes(srcfile, "permissions"), lfs.attributes(dstfile, "permissions")) 552 assert.same(lfs.attributes(srcfile, "permissions"), lfs.attributes(dstfile, "permissions"))
462 end 553 end
463 end) 554 end)
464 555
465 it("returns true and copies contents of the source file to the destination file with custom permissions", function() 556 it("returns true and copies contents of the source file to the destination file with custom permissions", function()
466 srcfile = os.tmpname() 557 srcfile = os.tmpname()
467 local fd = assert(io.open(srcfile, "w")) 558 create_file(srcfile, srccontent)
468 local srccontent = "foo"
469 assert(fd:write(srccontent))
470 fd:close()
471 dstfile = os.tmpname() 559 dstfile = os.tmpname()
472 os.remove(dstfile) 560 os.remove(dstfile)
473 assert.truthy(fs.copy(srcfile, dstfile, "755")) 561 assert.truthy(fs.copy(srcfile, dstfile, "exec"))
474 fd = assert(io.open(dstfile, "r")) 562 fd = assert(io.open(dstfile, "r"))
475 local dstcontent = fd:read("*a") 563 local dstcontent = fd:read("*a")
476 assert.same(srccontent, dstcontent) 564 assert.same("foo", dstcontent)
477 if not is_win then
478 assert.same("rwxr-xr-x", lfs.attributes(dstfile, "permissions"))
479 end
480 end) 565 end)
481 566
482 it("returns false and does nothing if the source file does not exist", function() 567 it("returns false and does nothing if the source file does not exist", function()
483 srcfile = os.tmpname() 568 srcfile = get_tmp_path()
484 os.remove(srcfile) 569 os.remove(srcfile)
485 dstfile = os.tmpname() 570 dstfile = get_tmp_path()
486 os.remove(dstfile) 571 os.remove(dstfile)
487 assert.falsy(fs.copy(srcfile, dstfile, nil)) 572 assert.falsy(fs.copy(srcfile, dstfile, nil))
488 assert.falsy(exists_file(dstfile)) 573 assert.falsy(exists_file(dstfile))
489 end) 574 end)
490 575
491 it("returns false and does nothing if the source file doesn't have the proper permissions #unix", function() 576 it("returns false and does nothing if the source file doesn't have the proper permissions", function()
492 srcfile = os.tmpname() 577 srcfile = get_tmp_path()
493 local fd = assert(io.open(srcfile, "w")) 578 create_file(srcfile)
494 assert(fd:write("foo")) 579 make_unreadable(srcfile)
495 fd:close() 580 dstfile = get_tmp_path()
496 assert(fs.chmod(srcfile, "333"))
497 dstfile = os.tmpname()
498 os.remove(dstfile) 581 os.remove(dstfile)
499 assert.falsy(fs.copy(srcfile, dstfile, nil)) 582 assert.falsy(fs.copy(srcfile, dstfile, nil))
500 assert.falsy(exists_file(dstfile)) 583 assert.falsy(exists_file(dstfile))
501 end) 584 end)
502 585
503 it("returns false and does nothing if the destination file directory doesn't have the proper permissions #unix", function() 586 it("returns false and does nothing if the destination file directory doesn't have the proper permissions", function()
504 srcfile = os.tmpname() 587 srcfile = get_tmp_path()
505 local fd = assert(io.open(srcfile, "w")) 588 create_file(srcfile)
506 assert(fd:write("foo")) 589 tmpdir = get_tmp_path()
507 fd:close()
508 tmpdir = os.tmpname()
509 os.remove(tmpdir) 590 os.remove(tmpdir)
510 lfs.mkdir(tmpdir) 591 lfs.mkdir(tmpdir)
511 assert(fs.chmod(tmpdir, "666")) 592 make_unwritable(tmpdir)
512 dstfile = tmpdir .. "/dstfile" 593 dstfile = tmpdir .. "/dstfile"
513 assert.falsy(fs.copy(srcfile, dstfile, nil)) 594 assert.falsy(fs.copy(srcfile, dstfile, nil))
514 assert(fs.chmod(tmpdir, "777")) 595 assert(fs.set_permissions(tmpdir, "exec", "all"))
515 assert.falsy(exists_file(dstfile)) 596 assert.falsy(exists_file(dstfile))
516 end) 597 end)
517 end) 598 end)
@@ -552,23 +633,20 @@ describe("Luarocks fs test #whitebox #w_fs", function()
552 end) 633 end)
553 634
554 local create_dir_tree = function() 635 local create_dir_tree = function()
555 srcdir = os.tmpname() 636 srcdir = get_tmp_path()
556 os.remove(srcdir) 637 os.remove(srcdir)
557 lfs.mkdir(srcdir) 638 lfs.mkdir(srcdir)
558 srcintdir = srcdir .. "/internaldir" 639 srcintdir = srcdir .. "/internaldir"
559 lfs.mkdir(srcintdir) 640 lfs.mkdir(srcintdir)
560 srcfile = srcintdir .. "/internalfile" 641 srcfile = srcintdir .. "/internalfile"
561 lfs.touch(srcfile) 642 create_file(srcfile)
562 local fd = assert(io.open(srcfile, "w")) 643 dstdir = get_tmp_path()
563 assert(fd:write("foo"))
564 fd:close()
565 dstdir = os.tmpname()
566 os.remove(dstdir) 644 os.remove(dstdir)
567 end 645 end
568 646
569 it("returns true and copies the contents (with their permissions) of the source dir to the destination dir", function() 647 it("returns true and copies the contents (with their permissions) of the source dir to the destination dir", function()
570 create_dir_tree() 648 create_dir_tree()
571 assert.truthy(fs.copy_contents(srcdir, dstdir, nil)) 649 assert.truthy(fs.copy_contents(srcdir, dstdir))
572 assert.truthy(exists_file(dstdir)) 650 assert.truthy(exists_file(dstdir))
573 dstintdir = dstdir .. "/internaldir" 651 dstintdir = dstdir .. "/internaldir"
574 assert.truthy(exists_file(dstintdir)) 652 assert.truthy(exists_file(dstintdir))
@@ -576,14 +654,14 @@ describe("Luarocks fs test #whitebox #w_fs", function()
576 local fd = assert(io.open(dstfile, "r")) 654 local fd = assert(io.open(dstfile, "r"))
577 local dstfilecontent = fd:read("*a") 655 local dstfilecontent = fd:read("*a")
578 assert.same("foo", dstfilecontent) 656 assert.same("foo", dstfilecontent)
579 if not is_win then 657 if posix_ok then
580 assert.same(lfs.attributes(srcfile, "permissions"), lfs.attributes(dstfile, "permissions")) 658 assert.same(lfs.attributes(srcfile, "permissions"), lfs.attributes(dstfile, "permissions"))
581 end 659 end
582 end) 660 end)
583 661
584 it("returns true and copies the contents of the source dir to the destination dir with custom permissions", function() 662 it("returns true and copies the contents of the source dir to the destination dir with custom permissions", function()
585 create_dir_tree() 663 create_dir_tree()
586 assert.truthy(fs.copy_contents(srcdir, dstdir, "755")) 664 assert.truthy(fs.copy_contents(srcdir, dstdir, "read"))
587 assert.truthy(exists_file(dstdir)) 665 assert.truthy(exists_file(dstdir))
588 dstintdir = dstdir .. "/internaldir" 666 dstintdir = dstdir .. "/internaldir"
589 assert.truthy(exists_file(dstintdir)) 667 assert.truthy(exists_file(dstintdir))
@@ -591,36 +669,32 @@ describe("Luarocks fs test #whitebox #w_fs", function()
591 local fd = assert(io.open(dstfile, "r")) 669 local fd = assert(io.open(dstfile, "r"))
592 local dstfilecontent = fd:read("*a") 670 local dstfilecontent = fd:read("*a")
593 assert.same("foo", dstfilecontent) 671 assert.same("foo", dstfilecontent)
594 if not is_win then
595 assert.same("rwxr-xr-x", lfs.attributes(dstfile, "permissions"))
596 end
597 end) 672 end)
598 673
599 it("returns false and does nothing if the source dir doesn't exist", function() 674 it("returns false and does nothing if the source dir doesn't exist", function()
600 srcdir = os.tmpname() 675 srcdir = get_tmp_path()
601 os.remove(srcdir) 676 os.remove(srcdir)
602 dstdir = os.tmpname() 677 dstdir = get_tmp_path()
603 os.remove(dstdir) 678 os.remove(dstdir)
604 assert.falsy(fs.copy_contents(srcdir, dstdir, nil)) 679 assert.falsy(fs.copy_contents(srcdir, dstdir))
605 assert.falsy(exists_file(dstdir)) 680 assert.falsy(exists_file(dstdir))
606 end) 681 end)
607 682
608 it("returns false if the source argument is a file", function() 683 it("returns false if the source argument is a file", function()
609 srcdir = os.tmpname() 684 srcdir = get_tmp_path()
610 local fd = assert(io.open(srcdir, "w")) 685 create_file(srcdir)
611 assert(fd:write("foo")) 686 dstdir = get_tmp_path()
612 fd:close()
613 dstdir = os.tmpname()
614 os.remove(dstdir) 687 os.remove(dstdir)
615 assert.falsy(fs.copy_contents(srcdir, dstdir, nil)) 688 assert.falsy(fs.copy_contents(srcdir, dstdir))
616 assert.falsy(exists_file(dstdir)) 689 assert.falsy(exists_file(dstdir))
617 end) 690 end)
618 691
619 it("returns false and does nothing if the source dir doesn't have the proper permissions #unix", function() 692 it("returns false and does nothing if the source dir doesn't have the proper permissions", function()
620 create_dir_tree() 693 create_dir_tree()
621 assert(fs.chmod(srcdir, "333")) 694 make_unreadable(srcdir)
622 assert.falsy(fs.copy_contents(srcdir, dstdir, nil)) 695 assert.falsy(fs.copy_contents(srcdir, dstdir))
623 assert.falsy(exists_file(dstdir)) 696 assert.falsy(exists_file(dstdir .. "/internaldir"))
697 assert.falsy(exists_file(dstdir .. "/internalfile"))
624 end) 698 end)
625 end) 699 end)
626 700
@@ -650,26 +724,20 @@ describe("Luarocks fs test #whitebox #w_fs", function()
650 end) 724 end)
651 725
652 local create_dir_tree = function() 726 local create_dir_tree = function()
653 tmpdir = os.tmpname() 727 tmpdir = get_tmp_path()
654 os.remove(tmpdir) 728 os.remove(tmpdir)
655 lfs.mkdir(tmpdir) 729 lfs.mkdir(tmpdir)
656 tmpintdir = tmpdir .. "/internaldir" 730 tmpintdir = tmpdir .. "/internaldir"
657 lfs.mkdir(tmpintdir) 731 lfs.mkdir(tmpintdir)
658 tmpfile1 = tmpdir .. "/internalfile1" 732 tmpfile1 = tmpdir .. "/internalfile1"
659 lfs.touch(tmpfile1) 733 create_file(tmpfile1)
660 local fd = assert(io.open(tmpfile1, "w")) 734 tmpfile2 = tmpdir .. "/internalfile2"
661 assert(fd:write("foo")) 735 create_file(tmpfile2)
662 fd:close()
663 tmpfile2 = tmpintdir .. "/internalfile2"
664 lfs.touch(tmpfile2)
665 fd = assert(io.open(tmpfile2, "w"))
666 assert(fd:write("foo"))
667 fd:close()
668 end 736 end
669 737
670 it("deletes the file specified by the argument", function() 738 it("deletes the file specified by the argument", function()
671 tmpfile1 = os.tmpname() 739 tmpfile1 = get_tmp_path()
672 tmpfile2 = os.tmpname() 740 tmpfile2 = get_tmp_path()
673 fs.delete(tmpfile1) 741 fs.delete(tmpfile1)
674 fs.delete(tmpfile2) 742 fs.delete(tmpfile2)
675 assert.falsy(exists_file(tmpfile1)) 743 assert.falsy(exists_file(tmpfile1))
@@ -684,17 +752,5 @@ describe("Luarocks fs test #whitebox #w_fs", function()
684 assert.falsy(exists_file(tmpfile1)) 752 assert.falsy(exists_file(tmpfile1))
685 assert.falsy(exists_file(tmpdir)) 753 assert.falsy(exists_file(tmpdir))
686 end) 754 end)
687
688 it("does nothing if the parent directory of the argument doesn't have the proper permissions #unix", function()
689 create_dir_tree()
690 assert(fs.chmod(tmpdir, "000"))
691 fs.delete(tmpfile1)
692 fs.delete(tmpfile2)
693 fs.delete(tmpintdir)
694 assert.truthy(exists_file(tmpfile2))
695 assert.truthy(exists_file(tmpintdir))
696 assert.truthy(exists_file(tmpfile1))
697 assert.truthy(exists_file(tmpdir))
698 end)
699 end) 755 end)
700end) 756end)