Set Permissions after OpenFile, MkDir and MkDirAll methods called. Added tests to validate.

This commit is contained in:
SonOfBytes 2016-11-22 16:24:52 +00:00
parent 06b7e5f506
commit 030e8c054a
2 changed files with 68 additions and 0 deletions

View File

@ -136,6 +136,7 @@ func (m *MemMapFs) Mkdir(name string, perm os.FileMode) error {
m.getData()[name] = item m.getData()[name] = item
m.registerWithParent(item) m.registerWithParent(item)
m.mu.Unlock() m.mu.Unlock()
m.Chmod(name, perm)
} }
return nil return nil
} }
@ -205,9 +206,12 @@ func (m *MemMapFs) lockfreeOpen(name string) (*mem.FileData, error) {
} }
func (m *MemMapFs) OpenFile(name string, flag int, perm os.FileMode) (File, error) { func (m *MemMapFs) OpenFile(name string, flag int, perm os.FileMode) (File, error) {
chmod := false
file, err := m.openWrite(name) file, err := m.openWrite(name)
if os.IsNotExist(err) && (flag&os.O_CREATE > 0) { if os.IsNotExist(err) && (flag&os.O_CREATE > 0) {
file, err = m.Create(name) file, err = m.Create(name)
chmod = true
// if we create a new file
} }
if err != nil { if err != nil {
return nil, err return nil, err
@ -229,6 +233,9 @@ func (m *MemMapFs) OpenFile(name string, flag int, perm os.FileMode) (File, erro
return nil, err return nil, err
} }
} }
if chmod {
m.Chmod(name, perm)
}
return file, nil return file, nil
} }

View File

@ -102,6 +102,67 @@ func checkPathError(t *testing.T, err error, op string) {
} }
} }
// Ensure Permissions are set on OpenFile/Mkdir/MkdirAll
func TestPermSet(t *testing.T) {
const fileName = "/myFileTest"
const dirPath = "/myDirTest"
const dirPathAll = "/my/path/to/dir"
const fileMode = os.FileMode(0765)
fs := NewMemMapFs()
// Test Openfile
f, err := fs.OpenFile(fileName, os.O_CREATE, fileMode)
if err != nil {
t.Errorf("OpenFile Create failed: %s", err)
return
}
f.Close()
s, err := fs.Stat(fileName)
if err != nil {
t.Errorf("Stat failed: %s", err)
return
}
if s.Mode().String() != fileMode.String() {
t.Errorf("Permissions Incorrect: %s != %s", s.Mode().String(), fileMode.String())
return
}
// Test Mkdir
err = fs.Mkdir(dirPath, fileMode)
if err != nil {
t.Errorf("MkDir Create failed: %s", err)
return
}
s, err = fs.Stat(dirPath)
if err != nil {
t.Errorf("Stat failed: %s", err)
return
}
if s.Mode().String() != fileMode.String() {
t.Errorf("Permissions Incorrect: %s != %s", s.Mode().String(), fileMode.String())
return
}
// Test MkdirAll
err = fs.MkdirAll(dirPathAll, fileMode)
if err != nil {
t.Errorf("MkDir Create failed: %s", err)
return
}
s, err = fs.Stat(dirPathAll)
if err != nil {
t.Errorf("Stat failed: %s", err)
return
}
if s.Mode().String() != fileMode.String() {
t.Errorf("Permissions Incorrect: %s != %s", s.Mode().String(), fileMode.String())
return
}
}
// Fails if multiple file objects use the same file.at counter in MemMapFs // Fails if multiple file objects use the same file.at counter in MemMapFs
func TestMultipleOpenFiles(t *testing.T) { func TestMultipleOpenFiles(t *testing.T) {
defer removeAllTestFiles(t) defer removeAllTestFiles(t)