github.com/windmilleng/wat@v0.0.2-0.20180626175338-9349b638e250/cli/dirs/dirs_test.go (about)

     1  package dirs
     2  
     3  import (
     4  	"os"
     5  	"path"
     6  	"path/filepath"
     7  	"testing"
     8  )
     9  
    10  func TestWindmillDir(t *testing.T) {
    11  	emptyPath := ""
    12  	oldWmdaemonHome := os.Getenv("WMDAEMON_HOME")
    13  	oldHome := os.Getenv("HOME")
    14  	oldWindmillDir := os.Getenv("WINDMILL_DIR")
    15  	defer os.Setenv("WMDAEMON_HOME", oldWmdaemonHome)
    16  	defer os.Setenv("HOME", oldHome)
    17  	defer os.Setenv("WINDMILL_DIR", oldWindmillDir)
    18  	tmpHome := os.TempDir()
    19  
    20  	f := setup(t)
    21  
    22  	os.Setenv("HOME", tmpHome)
    23  
    24  	os.Setenv("WMDAEMON_HOME", emptyPath)
    25  	f.assertWindmillDir(path.Join(tmpHome, ".windmill"), "empty WMDAEMON_HOME")
    26  
    27  	tmpWmdaemonHome := os.TempDir()
    28  	os.Setenv("WMDAEMON_HOME", tmpWmdaemonHome)
    29  	f.assertWindmillDir(tmpWmdaemonHome, "tmp WMDAEMON_HOME")
    30  
    31  	nonExistentWmdaemonHome := path.Join(tmpWmdaemonHome, "foo")
    32  	os.Setenv("WMDAEMON_HOME", nonExistentWmdaemonHome)
    33  	f.assertWindmillDir(nonExistentWmdaemonHome, "nonexistent WMDAEMON_HOME")
    34  
    35  	wmDir := os.TempDir()
    36  	os.Setenv("WINDMILL_DIR", wmDir)
    37  	f.assertWindmillDir(nonExistentWmdaemonHome, "prefer WMDAEMON_HOME") // prefer WMDAEMON_HOME
    38  
    39  	os.Unsetenv("WMDAEMON_HOME")
    40  	f.assertWindmillDir(wmDir, "no WMDAEMON_HOME")
    41  }
    42  
    43  type fixture struct {
    44  	t *testing.T
    45  }
    46  
    47  func setup(t *testing.T) *fixture {
    48  	return &fixture{t: t}
    49  }
    50  
    51  func (f *fixture) assertWindmillDir(expected, testCase string) {
    52  	actual, err := GetWindmillDir()
    53  	if err != nil {
    54  		f.t.Error(err)
    55  	}
    56  
    57  	// NOTE(maia): filepath behavior is weird on macOS, use abs path to mitigate
    58  	absExpected, err := filepath.Abs(expected)
    59  	if err != nil {
    60  		f.t.Error("[filepath.Abs]", err)
    61  	}
    62  
    63  	if actual != absExpected {
    64  		f.t.Errorf("[TEST CASE: %s] got windmill dir %q; expected %q", testCase, actual, absExpected)
    65  	}
    66  }