@@ -322,6 +322,130 @@ func TestFileManagerService_checkAllowedDirectory(t *testing.T) {
322322 require .Error (t , err )
323323}
324324
325+ func TestFileManagerService_validateAndFixPermissions (t * testing.T ) {
326+ ctx := context .Background ()
327+ fileManagerService := NewFileManagerService (nil , types .AgentConfig (), & sync.RWMutex {})
328+
329+ tempDir := t .TempDir ()
330+ execFile := helpers .CreateFileWithErrorCheck (t , tempDir , "exec.conf" )
331+ defer helpers .RemoveFileWithErrorCheck (t , execFile .Name ())
332+
333+ normalFile := helpers .CreateFileWithErrorCheck (t , tempDir , "normal.conf" )
334+ defer helpers .RemoveFileWithErrorCheck (t , normalFile .Name ())
335+
336+ err := os .Chmod (execFile .Name (), 0o700 )
337+ require .NoError (t , err )
338+ err = os .Chmod (normalFile .Name (), 0o600 )
339+ require .NoError (t , err )
340+
341+ fileList := []* mpi.File {
342+ {
343+ FileMeta : & mpi.FileMeta {
344+ Name : execFile .Name (),
345+ Permissions : "0700" ,
346+ },
347+ },
348+ {
349+ FileMeta : & mpi.FileMeta {
350+ Name : normalFile .Name (),
351+ Permissions : "0600" ,
352+ },
353+ },
354+ }
355+
356+ err = fileManagerService .validateAndFixPermissions (ctx , fileList )
357+
358+ require .Error (t , err )
359+ assert .Contains (t , err .Error (), "reset execute permissions for files" )
360+ assert .Contains (t , err .Error (), execFile .Name ())
361+
362+ info , err := os .Stat (execFile .Name ())
363+ require .NoError (t , err )
364+ assert .Equal (t , os .FileMode (0o644 ), info .Mode ().Perm ())
365+
366+ info , err = os .Stat (normalFile .Name ())
367+ require .NoError (t , err )
368+ assert .Equal (t , os .FileMode (0o600 ), info .Mode ().Perm ())
369+ }
370+
371+ func TestFileManagerService_checkFilePermissions (t * testing.T ) {
372+ fileManagerService := NewFileManagerService (nil , types .AgentConfig (), & sync.RWMutex {})
373+
374+ tests := []struct {
375+ name string
376+ permissions string
377+ errorMsg string
378+ expectError bool
379+ }{
380+ {
381+ name : "File with read and write permissions for owner" ,
382+ permissions : "0600" ,
383+ expectError : false ,
384+ },
385+ {
386+ name : "File with read permissions for all" ,
387+ permissions : "0444" ,
388+ expectError : false ,
389+ },
390+ {
391+ name : "File with read/write and execute permissions for owner" ,
392+ permissions : "0700" ,
393+ expectError : true ,
394+ errorMsg : "has execute permissions" ,
395+ },
396+ {
397+ name : "File with execute permission for all" ,
398+ permissions : "0777" ,
399+ expectError : true ,
400+ errorMsg : "has execute permissions" ,
401+ },
402+ }
403+
404+ for _ , test := range tests {
405+ t .Run (test .name , func (t * testing.T ) {
406+ file := & mpi.File {
407+ FileMeta : & mpi.FileMeta {
408+ Name : "test.conf" ,
409+ Permissions : test .permissions ,
410+ },
411+ }
412+
413+ err := fileManagerService .checkFilePermissions (file )
414+
415+ if test .expectError {
416+ require .Error (t , err )
417+ assert .Contains (t , err .Error (), test .errorMsg )
418+ } else {
419+ assert .NoError (t , err )
420+ }
421+ })
422+ }
423+ }
424+
425+ func TestFileManagerService_resetFilePermissions (t * testing.T ) {
426+ fileManagerService := NewFileManagerService (nil , types .AgentConfig (), & sync.RWMutex {})
427+
428+ tempDir := t .TempDir ()
429+ tempFile := helpers .CreateFileWithErrorCheck (t , tempDir , "test.conf" )
430+ defer helpers .RemoveFileWithErrorCheck (t , tempFile .Name ())
431+
432+ err := os .Chmod (tempFile .Name (), 0o700 )
433+ require .NoError (t , err )
434+
435+ file := & mpi.File {
436+ FileMeta : & mpi.FileMeta {
437+ Name : tempFile .Name (),
438+ },
439+ }
440+
441+ err = fileManagerService .resetFilePermissions (file )
442+ require .NoError (t , err )
443+
444+ info , err := os .Stat (tempFile .Name ())
445+ require .NoError (t , err )
446+ assert .Equal (t , os .FileMode (0o644 ), info .Mode ().Perm ())
447+ }
448+
325449func TestFileManagerService_ClearCache (t * testing.T ) {
326450 fakeFileServiceClient := & v1fakes.FakeFileServiceClient {}
327451 fileManagerService := NewFileManagerService (fakeFileServiceClient , types .AgentConfig (), & sync.RWMutex {})
0 commit comments