diff --git a/go.mod b/go.mod index 9551f29..18afc15 100644 --- a/go.mod +++ b/go.mod @@ -14,10 +14,10 @@ require ( github.com/spf13/jwalterweatherman v1.1.0 // indirect github.com/spf13/pflag v1.0.5 // indirect github.com/spf13/viper v1.12.0 + github.com/stretchr/testify v1.8.0 // indirect github.com/subosito/gotenv v1.3.0 // indirect golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a // indirect golang.org/x/text v0.3.7 // indirect gopkg.in/ini.v1 v1.66.4 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect - gopkg.in/yaml.v3 v3.0.0 // indirect ) diff --git a/go.sum b/go.sum index 1c4e344..0d04429 100644 --- a/go.sum +++ b/go.sum @@ -95,6 +95,7 @@ github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3Ee github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= @@ -301,6 +302,7 @@ github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= @@ -344,6 +346,8 @@ github.com/spf13/viper v1.12.0 h1:CZ7eSOd3kZoaYDLbXnmzgQI5RlciuXBMA+18HwHRfZQ= github.com/spf13/viper v1.12.0/go.mod h1:b6COn30jlNxbm/V2IqWiNWkJ+vZNiMNksliPCiuKtSI= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0 h1:M2gUjqZET1qApGOWNSnZ49BAIMX4F/1plDv3+l31EJ4= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= @@ -351,6 +355,8 @@ github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5 github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/subosito/gotenv v1.3.0 h1:mjC+YW8QpAdXibNi+vNWgzmgBH4+5l5dCXv8cNysBLI= github.com/subosito/gotenv v1.3.0/go.mod h1:YzJjq/33h7nrwdY+iHMhEOEEbW0ovIz0tB6t6PwAXzs= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= @@ -842,6 +848,8 @@ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0 h1:hjy8E9ON/egN1tAYqKb61G10WtihqetD4sz2H+8nIeA= gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/util/env_test.go b/util/env_test.go index 667516c..962d2f8 100644 --- a/util/env_test.go +++ b/util/env_test.go @@ -1,19 +1,29 @@ package util -import "testing" +import ( + "testing" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/suite" +) -func TestResolveTilde(t *testing.T) { +// define our test suite struct +type EnvTestSuite struct { + suite.Suite +} + +// the tilde should expand to user's home directory +func (s *EnvTestSuite) TestResolveTilde() { resolvedPath := ResolveTilde("~") - - if resolvedPath == "~" { - t.Logf("ResolveTilde returned '%s'; it should have expanded to an absolute path.", resolvedPath) - } + assert.NotEqual(s.T(), resolvedPath, "~") } -func TestResolveTildePath(t *testing.T) { +// ensure the tilde + relative path gets expanded fully +func (s *EnvTestSuite) TestResolveTildePath() { resolvedPath := ResolveTilde("~/test") - - if resolvedPath == "~/test" { - t.Logf("ResolveTilde returned '%s'; it should have expanded to an absolute path.", resolvedPath) - } + assert.NotEqual(s.T(), resolvedPath, "~/test") +} + +// this is needed to run the test suite +func TestEnvTestSuite(t *testing.T) { + suite.Run(t, new(EnvTestSuite)) } diff --git a/util/file_test.go b/util/file_test.go index 6591a82..e3e0bd4 100644 --- a/util/file_test.go +++ b/util/file_test.go @@ -1,11 +1,63 @@ package util -import "testing" +import ( + "os" + "testing" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/suite" +) -func TestFilenameWithoutExtension(t *testing.T) { - filename := FilenameWithoutExtension("testfile.txt") +// define our test suite struct +type FileTestSuite struct { + suite.Suite + TestFile string +} + +// run before tests to set up +func (s *FileTestSuite) SetupSuite() { + s.TestFile = "testfile.txt" + // create the test file for file lock testing + file, _ := os.Create(s.TestFile) + file.Close() // do this just to make extra sure the file handle is closed +} +// run after tests to clean up +func (s *FileTestSuite) TearDownSuite() { + // remove the test file since it's no longer needed + os.Remove(s.TestFile) +} + +// test the filename extension removal works +func (s *FileTestSuite) TestFilenameWithoutExtension() { + filename := FilenameWithoutExtension(s.TestFile) if filename != "testfile" { - t.Logf("FilenameWithoutExtension returned '%s'; it should be 'testfile'.", filename) + s.T().Logf("FilenameWithoutExtension returned '%s'; it should be 'testfile'.", filename) } } + +// test that IsFileLocked returns true when the file is active +func (s *FileTestSuite) TestFileShouldBeLocked() { + file, err := os.Open(s.TestFile) + if err != nil { + s.T().Logf("Unable to open file %s: %s", s.TestFile, err) + } + defer file.Close() + + assert.True(s.T(), IsFileLocked(s.TestFile)) +} + +// test that IsFileLocked returns false when the file is not active +func (s *FileTestSuite) TestFileShouldNotBeLocked() { + file, err := os.Open(s.TestFile) + if err != nil { + s.T().Logf("Unable to open file %s: %s", s.TestFile, err) + } + file.Close() // we want this closed now so it's NOT open! + + assert.False(s.T(), IsFileLocked(s.TestFile)) +} + +// this is needed to run the test suite +func TestFileTestSuite(t *testing.T) { + suite.Run(t, new(FileTestSuite)) +}