github.com/clusterize-io/tusk@v0.6.3-0.20211001020217-cfe8a8cd0d4a/runner/file_test.go (about) 1 package runner 2 3 import ( 4 "io/ioutil" 5 "os" 6 "path/filepath" 7 "testing" 8 ) 9 10 func TestSearchForFile(t *testing.T) { 11 tmpdir, cleanup := useTempDir(t) 12 defer cleanup() 13 14 emptyDir := mkDir(t, tmpdir, "empty") 15 16 topDir := mkDir(t, tmpdir, "top") 17 topConfig := mkConfigFile(t, topDir, "tusk.yml") 18 19 yamlDir := mkDir(t, tmpdir, "yaml") 20 yamlConfig := mkConfigFile(t, yamlDir, "tusk.yaml") 21 22 nestedDir := mkDir(t, topDir, "foo", "bar") 23 nestedConfig := mkConfigFile(t, nestedDir, "tusk.yml") 24 25 inheritedDir := mkDir(t, topDir, "baz", "empty") 26 27 testcases := []struct { 28 wd string 29 path string 30 }{ 31 { 32 wd: emptyDir, 33 path: "", 34 }, 35 { 36 wd: topDir, 37 path: topConfig, 38 }, 39 { 40 wd: yamlDir, 41 path: yamlConfig, 42 }, 43 { 44 wd: nestedDir, 45 path: nestedConfig, 46 }, 47 { 48 wd: inheritedDir, 49 path: topConfig, 50 }, 51 } 52 53 for _, tt := range testcases { 54 if err := os.Chdir(tt.wd); err != nil { 55 t.Fatalf("failed to change directory: %v", err) 56 } 57 58 fullPath, err := searchForFile() 59 if err != nil { 60 t.Errorf("unexpected error: %v", err) 61 continue 62 } 63 64 if tt.path != fullPath { 65 t.Errorf( 66 "SearchForFile(): expected path: %s, actual: %s", 67 tt.path, fullPath, 68 ) 69 } 70 } 71 } 72 73 func useTempDir(t *testing.T) (dirname string, cleanup func()) { 74 t.Helper() 75 76 tmpdir, err := ioutil.TempDir("", "tusk-test") 77 if err != nil { 78 t.Fatalf("failed to create temp dir: %v", err) 79 } 80 81 tmpdir, err = filepath.EvalSymlinks(tmpdir) 82 if err != nil { 83 t.Fatalf("failed to follow symlink for temp dir: %v", err) 84 } 85 86 oldwd, err := os.Getwd() 87 if err != nil { 88 t.Fatalf("failed to get working directory: %v", err) 89 } 90 91 if err := os.Chdir(tmpdir); err != nil { 92 t.Fatalf("failed to change directory: %v", err) 93 } 94 95 cleanup = func() { 96 if err := os.RemoveAll(tmpdir); err != nil { 97 t.Logf("failed to remove tmpdir: %v", err) 98 } 99 if err := os.Chdir(oldwd); err != nil { 100 t.Fatalf("failed to change directory: %v", err) 101 } 102 } 103 104 return tmpdir, cleanup 105 } 106 107 func mkDir(t *testing.T, elem ...string) string { 108 t.Helper() 109 110 fullPath := filepath.Join(elem...) 111 if err := os.MkdirAll(fullPath, 0750); err != nil { 112 t.Fatalf("failed to make directory: %v", err) 113 } 114 115 return fullPath 116 } 117 118 func mkConfigFile(t *testing.T, dir, fileName string) string { 119 t.Helper() 120 121 fullPath := filepath.Join(dir, fileName) 122 if err := ioutil.WriteFile(fullPath, []byte{}, 0644); err != nil { 123 t.Fatalf("failed to create file: %v", err) 124 } 125 126 return fullPath 127 }