diff options
Diffstat (limited to 'hugofs/nosymlink_test.go')
-rw-r--r-- | hugofs/nosymlink_test.go | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/hugofs/nosymlink_test.go b/hugofs/nosymlink_test.go new file mode 100644 index 000000000..6d0b99dcc --- /dev/null +++ b/hugofs/nosymlink_test.go @@ -0,0 +1,97 @@ +// Copyright 2019 The Hugo Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package hugofs + +import ( + "os" + "path/filepath" + "testing" + + "github.com/gohugoio/hugo/htesting" + + "github.com/spf13/afero" + + "github.com/stretchr/testify/require" +) + +func TestNoSymlinkFs(t *testing.T) { + if skipSymlink() { + t.Skip("Skip; os.Symlink needs administrator rights on Windows") + } + assert := require.New(t) + workDir, clean, err := htesting.CreateTempDir(Os, "hugo-nosymlink") + assert.NoError(err) + defer clean() + wd, _ := os.Getwd() + defer func() { + os.Chdir(wd) + }() + + blogDir := filepath.Join(workDir, "blog") + blogFile := filepath.Join(blogDir, "a.txt") + assert.NoError(os.MkdirAll(blogDir, 0777)) + afero.WriteFile(Os, filepath.Join(blogFile), []byte("content"), 0777) + os.Chdir(workDir) + assert.NoError(os.Symlink("blog", "symlinkdedir")) + os.Chdir(blogDir) + assert.NoError(os.Symlink("a.txt", "symlinkdedfile.txt")) + + fs := NewNoSymlinkFs(Os) + ls := fs.(afero.Lstater) + symlinkedDir := filepath.Join(workDir, "symlinkdedir") + symlinkedFile := filepath.Join(blogDir, "symlinkdedfile.txt") + + // Check Stat and Lstat + for _, stat := range []func(name string) (os.FileInfo, error){ + func(name string) (os.FileInfo, error) { + return fs.Stat(name) + }, + func(name string) (os.FileInfo, error) { + fi, _, err := ls.LstatIfPossible(name) + return fi, err + }, + } { + _, err = stat(symlinkedDir) + assert.Equal(ErrPermissionSymlink, err) + _, err = stat(symlinkedFile) + assert.Equal(ErrPermissionSymlink, err) + + fi, err := stat(filepath.Join(workDir, "blog")) + assert.NoError(err) + assert.NotNil(fi) + + fi, err = stat(blogFile) + assert.NoError(err) + assert.NotNil(fi) + } + + // Check Open + _, err = fs.Open(symlinkedDir) + assert.Equal(ErrPermissionSymlink, err) + _, err = fs.OpenFile(symlinkedDir, os.O_RDWR|os.O_APPEND|os.O_CREATE, 0666) + assert.Equal(ErrPermissionSymlink, err) + _, err = fs.OpenFile(symlinkedFile, os.O_RDWR|os.O_APPEND|os.O_CREATE, 0666) + assert.Equal(ErrPermissionSymlink, err) + _, err = fs.Open(symlinkedFile) + assert.Equal(ErrPermissionSymlink, err) + f, err := fs.Open(blogDir) + assert.NoError(err) + f.Close() + f, err = fs.Open(blogFile) + assert.NoError(err) + f.Close() + + // os.OpenFile(logFile, os.O_RDWR|os.O_APPEND|os.O_CREATE, 0666) + +} |