2016-08-19 04:15:55 +02:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"io"
|
|
|
|
"os"
|
|
|
|
"path/filepath"
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
"github.com/adammck/venv"
|
|
|
|
"github.com/blang/vfs"
|
|
|
|
"github.com/blang/vfs/memfs"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestGetInputPath(t *testing.T) {
|
2017-06-09 21:25:34 +02:00
|
|
|
assert.Equal(t, ".", GetInputPath(memfs.Create(), venv.Mock()))
|
2016-08-19 04:15:55 +02:00
|
|
|
assert.Equal(t, "aaa", GetInputPath(memfs.Create(), envWith(map[string]string{"TF_STATE": "aaa"})))
|
|
|
|
assert.Equal(t, "bbb", GetInputPath(memfs.Create(), envWith(map[string]string{"TI_TFSTATE": "bbb"})))
|
|
|
|
assert.Equal(t, "terraform.tfstate", GetInputPath(fsWithFiles([]string{"terraform.tfstate"}), venv.Mock()))
|
2017-06-09 21:25:34 +02:00
|
|
|
assert.Equal(t, ".", GetInputPath(fsWithFiles([]string{".terraform/terraform.tfstate"}), venv.Mock()))
|
|
|
|
assert.Equal(t, "terraform", GetInputPath(fsWithDirs([]string{"terraform"}), envWith(map[string]string{"TF_STATE": "terraform"})))
|
2016-08-19 04:15:55 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
func envWith(env map[string]string) venv.Env {
|
|
|
|
e := venv.Mock()
|
|
|
|
|
|
|
|
for k, v := range env {
|
|
|
|
e.Setenv(k, v)
|
|
|
|
}
|
|
|
|
|
|
|
|
return e
|
|
|
|
}
|
|
|
|
|
|
|
|
func fsWithFiles(filenames []string) vfs.Filesystem {
|
|
|
|
fs := memfs.Create()
|
|
|
|
var err error
|
|
|
|
|
|
|
|
for _, fn := range filenames {
|
|
|
|
|
|
|
|
path := filepath.Dir(fn)
|
|
|
|
if path != "" {
|
|
|
|
err = vfs.MkdirAll(fs, path, 0700)
|
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
err = touchFile(fs, fn)
|
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return fs
|
|
|
|
}
|
|
|
|
|
2017-06-09 21:25:34 +02:00
|
|
|
func fsWithDirs(dirs []string) vfs.Filesystem {
|
|
|
|
fs := memfs.Create()
|
|
|
|
|
|
|
|
var err error
|
|
|
|
|
|
|
|
for _, fp := range dirs {
|
|
|
|
err = vfs.MkdirAll(fs, fp, 0700)
|
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return fs
|
|
|
|
}
|
|
|
|
|
2016-08-19 04:15:55 +02:00
|
|
|
// TODO: Upgrade this later with file contents.
|
|
|
|
func touchFile(fs vfs.Filesystem, filename string) error {
|
|
|
|
return writeFile(fs, filename, []byte{}, 0600)
|
|
|
|
}
|
|
|
|
|
|
|
|
// port of ioutil.Writefile for vfs
|
|
|
|
func writeFile(fs vfs.Filesystem, filename string, data []byte, perm os.FileMode) error {
|
|
|
|
f, err := fs.OpenFile(filename, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, perm)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
n, err := f.Write(data)
|
|
|
|
if err == nil && n < len(data) {
|
|
|
|
err = io.ErrShortWrite
|
|
|
|
}
|
|
|
|
if err1 := f.Close(); err == nil {
|
|
|
|
err = err1
|
|
|
|
}
|
|
|
|
return err
|
|
|
|
}
|