1
0
Fork 0
mirror of https://github.com/Luzifer/cloudkeys-go.git synced 2024-11-13 00:12:43 +00:00
cloudkeys-go/vendor/github.com/juju/testing/checkers/file_test.go
2017-12-28 01:56:23 +00:00

288 lines
8.6 KiB
Go

// Copyright 2013 Canonical Ltd.
// Copyright 2014 Cloudbase Solutions SRL
// Licensed under the LGPLv3, see LICENCE file for details.
package checkers_test
import (
"fmt"
"io/ioutil"
"os"
"path/filepath"
"runtime"
"strings"
gc "gopkg.in/check.v1"
jc "github.com/juju/testing/checkers"
)
type FileSuite struct{}
var _ = gc.Suite(&FileSuite{})
func (s *FileSuite) TestIsNonEmptyFile(c *gc.C) {
file, err := ioutil.TempFile(c.MkDir(), "")
c.Assert(err, gc.IsNil)
fmt.Fprintf(file, "something")
file.Close()
c.Assert(file.Name(), jc.IsNonEmptyFile)
}
func (s *FileSuite) TestIsNonEmptyFileWithEmptyFile(c *gc.C) {
file, err := ioutil.TempFile(c.MkDir(), "")
c.Assert(err, gc.IsNil)
file.Close()
result, message := jc.IsNonEmptyFile.Check([]interface{}{file.Name()}, nil)
c.Assert(result, jc.IsFalse)
c.Assert(message, gc.Equals, file.Name()+" is empty")
}
func (s *FileSuite) TestIsNonEmptyFileWithMissingFile(c *gc.C) {
name := filepath.Join(c.MkDir(), "missing")
result, message := jc.IsNonEmptyFile.Check([]interface{}{name}, nil)
c.Assert(result, jc.IsFalse)
c.Assert(message, gc.Equals, name+" does not exist")
}
func (s *FileSuite) TestIsNonEmptyFileWithNumber(c *gc.C) {
result, message := jc.IsNonEmptyFile.Check([]interface{}{42}, nil)
c.Assert(result, jc.IsFalse)
c.Assert(message, gc.Equals, "obtained value is not a string and has no .String(), int:42")
}
func (s *FileSuite) TestIsDirectory(c *gc.C) {
dir := c.MkDir()
c.Assert(dir, jc.IsDirectory)
}
func (s *FileSuite) TestIsDirectoryMissing(c *gc.C) {
absentDir := filepath.Join(c.MkDir(), "foo")
result, message := jc.IsDirectory.Check([]interface{}{absentDir}, nil)
c.Assert(result, jc.IsFalse)
c.Assert(message, gc.Equals, absentDir+" does not exist")
}
func (s *FileSuite) TestIsDirectoryWithFile(c *gc.C) {
file, err := ioutil.TempFile(c.MkDir(), "")
c.Assert(err, gc.IsNil)
file.Close()
result, message := jc.IsDirectory.Check([]interface{}{file.Name()}, nil)
c.Assert(result, jc.IsFalse)
c.Assert(message, gc.Equals, file.Name()+" is not a directory")
}
func (s *FileSuite) TestIsDirectoryWithNumber(c *gc.C) {
result, message := jc.IsDirectory.Check([]interface{}{42}, nil)
c.Assert(result, jc.IsFalse)
c.Assert(message, gc.Equals, "obtained value is not a string and has no .String(), int:42")
}
func (s *FileSuite) TestDoesNotExist(c *gc.C) {
absentDir := filepath.Join(c.MkDir(), "foo")
c.Assert(absentDir, jc.DoesNotExist)
}
func (s *FileSuite) TestDoesNotExistWithPath(c *gc.C) {
dir := c.MkDir()
result, message := jc.DoesNotExist.Check([]interface{}{dir}, nil)
c.Assert(result, jc.IsFalse)
c.Assert(message, gc.Equals, dir+" exists")
}
func (s *FileSuite) TestDoesNotExistWithSymlink(c *gc.C) {
dir := c.MkDir()
deadPath := filepath.Join(dir, "dead")
symlinkPath := filepath.Join(dir, "a-symlink")
err := os.Symlink(deadPath, symlinkPath)
c.Assert(err, gc.IsNil)
// A valid symlink pointing to something that doesn't exist passes.
// Use SymlinkDoesNotExist to check for the non-existence of the link itself.
c.Assert(symlinkPath, jc.DoesNotExist)
}
func (s *FileSuite) TestDoesNotExistWithNumber(c *gc.C) {
result, message := jc.DoesNotExist.Check([]interface{}{42}, nil)
c.Assert(result, jc.IsFalse)
c.Assert(message, gc.Equals, "obtained value is not a string and has no .String(), int:42")
}
func (s *FileSuite) TestSymlinkDoesNotExist(c *gc.C) {
absentDir := filepath.Join(c.MkDir(), "foo")
c.Assert(absentDir, jc.SymlinkDoesNotExist)
}
func (s *FileSuite) TestSymlinkDoesNotExistWithPath(c *gc.C) {
dir := c.MkDir()
result, message := jc.SymlinkDoesNotExist.Check([]interface{}{dir}, nil)
c.Assert(result, jc.IsFalse)
c.Assert(message, gc.Equals, dir+" exists")
}
func (s *FileSuite) TestSymlinkDoesNotExistWithSymlink(c *gc.C) {
dir := c.MkDir()
deadPath := filepath.Join(dir, "dead")
symlinkPath := filepath.Join(dir, "a-symlink")
err := os.Symlink(deadPath, symlinkPath)
c.Assert(err, gc.IsNil)
result, message := jc.SymlinkDoesNotExist.Check([]interface{}{symlinkPath}, nil)
c.Assert(result, jc.IsFalse)
c.Assert(message, gc.Equals, symlinkPath+" exists")
}
func (s *FileSuite) TestSymlinkDoesNotExistWithNumber(c *gc.C) {
result, message := jc.SymlinkDoesNotExist.Check([]interface{}{42}, nil)
c.Assert(result, jc.IsFalse)
c.Assert(message, gc.Equals, "obtained value is not a string and has no .String(), int:42")
}
func (s *FileSuite) TestIsSymlink(c *gc.C) {
file, err := ioutil.TempFile(c.MkDir(), "")
c.Assert(err, gc.IsNil)
c.Log(file.Name())
c.Log(filepath.Dir(file.Name()))
symlinkPath := filepath.Join(filepath.Dir(file.Name()), "a-symlink")
err = os.Symlink(file.Name(), symlinkPath)
c.Assert(err, gc.IsNil)
c.Assert(symlinkPath, jc.IsSymlink)
}
func (s *FileSuite) TestIsSymlinkWithFile(c *gc.C) {
file, err := ioutil.TempFile(c.MkDir(), "")
c.Assert(err, gc.IsNil)
result, message := jc.IsSymlink.Check([]interface{}{file.Name()}, nil)
c.Assert(result, jc.IsFalse)
c.Assert(message, jc.Contains, " is not a symlink")
}
func (s *FileSuite) TestIsSymlinkWithDir(c *gc.C) {
result, message := jc.IsSymlink.Check([]interface{}{c.MkDir()}, nil)
c.Assert(result, jc.IsFalse)
c.Assert(message, jc.Contains, " is not a symlink")
}
func (s *FileSuite) TestSamePathWithNumber(c *gc.C) {
result, message := jc.SamePath.Check([]interface{}{42, 52}, nil)
c.Assert(result, jc.IsFalse)
c.Assert(message, gc.Equals, "obtained value is not a string and has no .String(), int:42")
}
func (s *FileSuite) TestSamePathBasic(c *gc.C) {
dir := c.MkDir()
result, message := jc.SamePath.Check([]interface{}{dir, dir}, nil)
c.Assert(result, jc.IsTrue)
c.Assert(message, gc.Equals, "")
}
type SamePathLinuxSuite struct{}
var _ = gc.Suite(&SamePathLinuxSuite{})
func (s *SamePathLinuxSuite) SetUpSuite(c *gc.C) {
if runtime.GOOS == "windows" {
c.Skip("Skipped Linux-intented SamePath tests on Windows.")
}
}
func (s *SamePathLinuxSuite) TestNotSamePathLinuxBasic(c *gc.C) {
dir := c.MkDir()
path1 := filepath.Join(dir, "Test")
path2 := filepath.Join(dir, "test")
result, message := jc.SamePath.Check([]interface{}{path1, path2}, nil)
c.Assert(result, jc.IsFalse)
c.Assert(message, gc.Equals, "stat "+path1+": no such file or directory")
}
func (s *SamePathLinuxSuite) TestSamePathLinuxSymlinks(c *gc.C) {
file, err := ioutil.TempFile(c.MkDir(), "")
c.Assert(err, gc.IsNil)
symlinkPath := filepath.Join(filepath.Dir(file.Name()), "a-symlink")
err = os.Symlink(file.Name(), symlinkPath)
result, message := jc.SamePath.Check([]interface{}{file.Name(), symlinkPath}, nil)
c.Assert(result, jc.IsTrue)
c.Assert(message, gc.Equals, "")
}
type SamePathWindowsSuite struct{}
var _ = gc.Suite(&SamePathWindowsSuite{})
func (s *SamePathWindowsSuite) SetUpSuite(c *gc.C) {
if runtime.GOOS != "windows" {
c.Skip("Skipped Windows-intented SamePath tests.")
}
}
func (s *SamePathWindowsSuite) TestNotSamePathBasic(c *gc.C) {
dir := c.MkDir()
path1 := filepath.Join(dir, "notTest")
path2 := filepath.Join(dir, "test")
result, message := jc.SamePath.Check([]interface{}{path1, path2}, nil)
c.Assert(result, jc.IsFalse)
path1 = strings.ToUpper(path1)
c.Assert(message, gc.Equals, "GetFileAttributesEx "+path1+": The system cannot find the file specified.")
}
func (s *SamePathWindowsSuite) TestSamePathWindowsCaseInsensitive(c *gc.C) {
dir := c.MkDir()
path1 := filepath.Join(dir, "Test")
path2 := filepath.Join(dir, "test")
result, message := jc.SamePath.Check([]interface{}{path1, path2}, nil)
c.Assert(result, jc.IsTrue)
c.Assert(message, gc.Equals, "")
}
func (s *SamePathWindowsSuite) TestSamePathWindowsFixSlashes(c *gc.C) {
result, message := jc.SamePath.Check([]interface{}{"C:/Users", "C:\\Users"}, nil)
c.Assert(result, jc.IsTrue)
c.Assert(message, gc.Equals, "")
}
func (s *SamePathWindowsSuite) TestSamePathShortenedPaths(c *gc.C) {
dir := c.MkDir()
dir1, err := ioutil.TempDir(dir, "Programming")
defer os.Remove(dir1)
c.Assert(err, gc.IsNil)
result, message := jc.SamePath.Check([]interface{}{dir + "\\PROGRA~1", dir1}, nil)
c.Assert(result, jc.IsTrue)
c.Assert(message, gc.Equals, "")
}
func (s *SamePathWindowsSuite) TestSamePathShortenedPathsConsistent(c *gc.C) {
dir := c.MkDir()
dir1, err := ioutil.TempDir(dir, "Programming")
defer os.Remove(dir1)
c.Assert(err, gc.IsNil)
dir2, err := ioutil.TempDir(dir, "Program Files")
defer os.Remove(dir2)
c.Assert(err, gc.IsNil)
result, message := jc.SamePath.Check([]interface{}{dir + "\\PROGRA~1", dir2}, nil)
c.Assert(result, gc.Not(jc.IsTrue))
c.Assert(message, gc.Equals, "Not the same file")
result, message = jc.SamePath.Check([]interface{}{"C:/PROGRA~2", "C:/Program Files (x86)"}, nil)
c.Assert(result, jc.IsTrue)
c.Assert(message, gc.Equals, "")
}