From f8e1ac4ebe0d93a7fe904cc0aa9f14c0ebfd47d1 Mon Sep 17 00:00:00 2001 From: Zac Spitzer Date: Sat, 20 Jul 2024 08:53:44 +0200 Subject: [PATCH] LDEV-5034 add test case for extract and file permissions --- test/functions/FileSetAccessMode.cfc | 67 +++++++++++------ test/tickets/LDEV5034.cfc | 107 +++++++++++++++++++++++++++ 2 files changed, 151 insertions(+), 23 deletions(-) create mode 100644 test/tickets/LDEV5034.cfc diff --git a/test/functions/FileSetAccessMode.cfc b/test/functions/FileSetAccessMode.cfc index 421172395b..0594c2f76e 100644 --- a/test/functions/FileSetAccessMode.cfc +++ b/test/functions/FileSetAccessMode.cfc @@ -1,44 +1,64 @@ -component extends="org.lucee.cfml.test.LuceeTestCase" { +component extends="org.lucee.cfml.test.LuceeTestCase" { - function run( testResults, testBox ){ - describe( "fileSetAccessMode", function(){ + function beforeAll(){ + variables.dir = getTempDirectory() & "fileSetAccessMode/"; + if ( directoryExists( dir ) ) + directoryDelete( dir, true ); + directoryCreate( dir ); + }; - it( title="test access modes", skip=isNotUnix(), body=function(){ - - var dir = getTempDirectory() & "fileSetAccessMode/"; - if ( !directoryExists( dir ) ){ - directoryCreate( dir ); - }; + function afterAll(){ + if ( directoryExists( dir ) ){ + directoryDelete( dir, true ); + }; + }; + function run( testResults, testBox ){ + describe( "fileSetAccessMode", function(){ + it( title="test access modes", skip=isNotUnix(), body=function(){ var tests = []; arrayAppend( tests, _dir( dir, "755", "755" ) ); + arrayAppend( tests, _dir( dir, "777", "777" ) ); arrayAppend( tests, _dir( dir, "644", "644" ) ); - arrayAppend( tests, _file( dir, "755/644.txt", "644" ) ); - arrayAppend( tests, _file( dir, "755/743.txt", "743" ) ); - arrayAppend( tests, _file( dir, "755/043.txt", "043" ) ); + var files = directoryList( dir, true, "query"); + var st = QueryToStruct( files, "name" ); + + loop array=st index="local.item"{ + systemOutput( item, true ); + } - arrayAppend( tests, _file( dir, "644/400.txt", "400" ) ); + arrayAppend( tests, _file( dir, "644.txt", "644" ) ); + arrayAppend( tests, _file( dir, "743.txt", "743" ) ); + arrayAppend( tests, _file( dir, "043.txt", "043" ) ); + arrayAppend( tests, _file( dir, "400.txt", "400" ) ); var files = directoryList( dir, true, "query"); var st = QueryToStruct( files, "name" ); - loop array=tests index="local.test"{ + loop collection=st item="local.item"{ + systemOutput( item, true ); + } + loop array=tests item="local.test" { systemOutput( test, true ); } - - loop array=st index="local.item"{ - systemOutput( item, true ); + loop array=tests item="local.test" { + systemOutput( test, true ); + var key = mid( test.name, len( dir ) + 1 ); + systemOutput( key, true ); + expect( st ).toHaveKey( key ); + systemOutput( st[ key ], true ); + expect( test.mode ).toBe( st[ key ].mode ); } }); - } ); } - private function _dir(parent, name, mode){ - var dir = directoryCreate( name & mode ); + private function _dir( parent, name, mode ){ + var dir = parent & name; + directoryCreate( dir ); fileSetAccessMode( dir, mode ); return { name: dir, @@ -47,8 +67,9 @@ component extends="org.lucee.cfml.test.LuceeTestCase" { }; } - private function _file(parent, name, mode){ - var file = fileWrite( parent & name, "" ); + private function _file( parent, name, mode ){ + var file = parent & name; + fileWrite( file, "" ); fileSetAccessMode( file, mode ); return { name: file, @@ -58,7 +79,7 @@ component extends="org.lucee.cfml.test.LuceeTestCase" { } private function isNotUnix(){ - return (server.os.name != "windows"); + return (server.os.name == "windows"); } } diff --git a/test/tickets/LDEV5034.cfc b/test/tickets/LDEV5034.cfc new file mode 100644 index 0000000000..d3e1283ca8 --- /dev/null +++ b/test/tickets/LDEV5034.cfc @@ -0,0 +1,107 @@ +component extends="org.lucee.cfml.test.LuceeTestCase" { + + function beforeAll(){ + variables.dir = getTempDirectory() & "LDEV-5034/"; + if ( directoryExists( dir ) ) + directoryDelete( dir, true ); + directoryCreate( dir ); + }; + + function afterAll(){ + if ( directoryExists( dir ) ){ + directoryDelete( dir, true ); + }; + }; + + function run( testResults, testBox ){ + describe( "fileSetAccessMode", function(){ + it( title="test access modes", skip=isNotUnix(), body=function(){ + var tests = []; + + arrayAppend( tests, _dir( dir, "755", "755" ) ); + arrayAppend( tests, _dir( dir, "777", "777" ) ); + arrayAppend( tests, _dir( dir, "644", "644" ) ); + + var files = directoryList( dir, true, "query"); + var st = QueryToStruct( files, "name" ); + + loop array=st index="local.item"{ + systemOutput( item, true ); + } + + arrayAppend( tests, _file( dir, "644.txt", "644" ) ); + arrayAppend( tests, _file( dir, "743.txt", "743" ) ); + arrayAppend( tests, _file( dir, "043.txt", "043" ) ); + arrayAppend( tests, _file( dir, "400.txt", "400" ) ); + + var files = directoryList( dir, true, "query"); + var st = QueryToStruct( files, "name" ); + + loop collection=st item="local.item"{ + systemOutput( item, true ); + } + loop array=tests item="local.test" { + systemOutput( test, true ); + } + loop array=tests item="local.test" { + systemOutput( test, true ); + var key = mid( test.name, len( dir ) + 1 ); + systemOutput( key, true ); + expect( st ).toHaveKey( key ); + systemOutput( st[ key ], true ); + expect( test.mode ).toBe( st[ key ].mode ); + } + + var tar = getTempFile(getTempDirectory(), "LDEV-5034", ".tar.gz") + + compress( "tgz", dir, tar ); + var dest = getTempDirectory() & "LDEV-5034-" & createUUID() & "/"; + extract( "tgz", tar, dest ); + + var extractedFiles = directoryList( dest, true, "query" ); + var st2 = QueryToStruct( files, "name" ); + loop collection=st2 item="local.item"{ + systemOutput( item, true ); + } + + expect( files.recordcount ).toBe( extractedFiles.recordcount ); + + loop array=tests item="local.test" { + systemOutput( test, true ); + var key = mid( test.name, len( dest) + 1 ); + expect( st ).toHaveKey( key ); + systemOutput( st[ key ], true ); + expect( test.mode ).toBe( st[ key ].mode, test.name ); + } + + }); + } ); + } + + private function _dir( parent, name, mode ){ + var dir = parent & name; + directoryCreate( dir ); + fileSetAccessMode( dir, mode ); + return { + name: dir, + mode: mode, + type: "dir" + }; + } + + private function _file( parent, name, mode ){ + var file = parent & name; + fileWrite( file, "" ); + fileSetAccessMode( file, mode ); + return { + name: file, + mode: mode, + type: "file" + }; + } + + private function isNotUnix(){ + return (server.os.name == "windows"); + } + +}