luvit/luvit

chmod test fails on WSL

SinisterRectus opened this issue · 0 comments

Tested on Windows 10 64-bit WSL2 Ubuntu 18.04.1 LTS.

sinister@DESKTOP-SB6R31A:/mnt/c/Users/Sinister/Desktop/luvit$ ./luvi . -- tests/test-fs-chmod.lua
1..1

# Starting Test: fs chmod
  /mnt/c/Users/Sinister/Desktop/luvit/tests/libs/tap.lua:81: /mnt/c/Users/Sinister/Desktop/luvit/tests/test-fs-chmod.lua:82: assertion failed!
  stack traceback:
        [C]: in function 'error'
        /mnt/c/Users/Sinister/Desktop/luvit/tests/libs/tap.lua:81: in function </mnt/c/Users/Sinister/Desktop/luvit/tests/libs/tap.lua:64>
        [C]: in function 'xpcall'
        /mnt/c/Users/Sinister/Desktop/luvit/tests/libs/tap.lua:64: in function 'run'
        /mnt/c/Users/Sinister/Desktop/luvit/tests/libs/tap.lua:165: in function </mnt/c/Users/Sinister/Desktop/luvit/tests/libs/tap.lua:142>
        /mnt/c/Users/Sinister/Desktop/luvit/tests/test-fs-chmod.lua:19: in function 'fn'
        [string "bundle:deps/require.lua"]:310: in function 'require'
        /mnt/c/Users/Sinister/Desktop/luvit/main.lua:128: in function 'main'
        /mnt/c/Users/Sinister/Desktop/luvit/init.lua:49: in function </mnt/c/Users/Sinister/Desktop/luvit/init.lua:47>
        [C]: in function 'xpcall'
        /mnt/c/Users/Sinister/Desktop/luvit/init.lua:47: in function 'fn'
        [string "bundle:deps/require.lua"]:310: in function <[string "bundle:deps/require.lua"]:266>
not ok 1 fs chmod
#1 failed test

This does not fail on Windows itself or on native Ubuntu 16.04. I haven't tested it on native Ubuntu 18.04.

The relevant code is:

        if is_windows then
          assert(maskMode(maskMode(fs.fstatSync(fd).mode), mode_sync))
        else
          assert(mode_sync == maskMode(fs.fstatSync(fd).mode))
        end

On Windows:

  is_windows    true
  mode_sync     438
  fs.fstatSync(fd).mode 33206
  maskMode(fs.fstatSync(fd).mode)       438
  maskMode(maskMode(fs.fstatSync(fd).mode), mode_sync)  438

On WSL:

  is_windows    false
  mode_sync     420
  fs.fstatSync(fd).mode 33279
  maskMode(fs.fstatSync(fd).mode)       511
  maskMode(maskMode(fs.fstatSync(fd).mode), mode_sync)  420

On native Linux:

  is_windows    false
  mode_sync     420
  fs.fstatSync(fd).mode 33188
  maskMode(fs.fstatSync(fd).mode)       420
  maskMode(maskMode(fs.fstatSync(fd).mode), mode_sync)  420

I'm guessing it has something to do with "On Windows chmod is only able to manipulate read-only bit"?