github.com/DaAlbrecht/cf-cli@v0.0.0-20231128151943-1fe19bb400b9/util/configv3/config_unix_test.go (about) 1 //go:build !windows 2 // +build !windows 3 4 package configv3_test 5 6 import ( 7 "fmt" 8 "io/ioutil" 9 "os" 10 "path/filepath" 11 12 . "code.cloudfoundry.org/cli/util/configv3" 13 14 . "github.com/onsi/ginkgo" 15 . "github.com/onsi/ginkgo/extensions/table" 16 . "github.com/onsi/gomega" 17 ) 18 19 var _ = Describe("Verbose", func() { 20 var homeDir string 21 22 BeforeEach(func() { 23 homeDir = setup() 24 }) 25 26 AfterEach(func() { 27 teardown(homeDir) 28 }) 29 30 DescribeTable("absolute paths", 31 func(env string, configTrace string, flag bool, expected bool, location []string) { 32 rawConfig := fmt.Sprintf(`{ "Trace":"%s", "ConfigVersion": %d }`, configTrace, CurrentConfigVersion) 33 setConfig(homeDir, rawConfig) 34 35 defer os.Unsetenv("CF_TRACE") 36 if env == "" { 37 Expect(os.Unsetenv("CF_TRACE")).ToNot(HaveOccurred()) 38 } else { 39 Expect(os.Setenv("CF_TRACE", env)).ToNot(HaveOccurred()) 40 } 41 42 config, err := LoadConfig(FlagOverride{ 43 Verbose: flag, 44 }) 45 Expect(err).ToNot(HaveOccurred()) 46 Expect(config).ToNot(BeNil()) 47 48 verbose, parsedLocation := config.Verbose() 49 Expect(verbose).To(Equal(expected)) 50 Expect(parsedLocation).To(Equal(location)) 51 }, 52 53 Entry("CF_TRACE true: enables verbose", "true", "", false, true, nil), 54 Entry("CF_TRACE true, config trace false: enables verbose", "true", "false", false, true, nil), 55 Entry("CF_TRACE true, config trace file path: enables verbose AND logging to file", "true", "/foo/bar", false, true, []string{"/foo/bar"}), 56 57 Entry("CF_TRACE false: disables verbose", "false", "", false, false, nil), 58 Entry("CF_TRACE false, '-v': enables verbose", "false", "", true, true, nil), 59 Entry("CF_TRACE false, config trace true: disables verbose", "false", "true", false, false, nil), 60 Entry("CF_TRACE false, config trace file path: enables logging to file", "false", "/foo/bar", false, false, []string{"/foo/bar"}), 61 Entry("CF_TRACE false, config trace file path, '-v': enables verbose AND logging to file", "false", "/foo/bar", true, true, []string{"/foo/bar"}), 62 63 Entry("CF_TRACE empty: disables verbose", "", "", false, false, nil), 64 Entry("CF_TRACE empty:, '-v': enables verbose", "", "", true, true, nil), 65 Entry("CF_TRACE empty, config trace true: enables verbose", "", "true", false, true, nil), 66 Entry("CF_TRACE empty, config trace file path: enables logging to file", "", "/foo/bar", false, false, []string{"/foo/bar"}), 67 Entry("CF_TRACE empty, config trace file path, '-v': enables verbose AND logging to file", "", "/foo/bar", true, true, []string{"/foo/bar"}), 68 69 Entry("CF_TRACE filepath: enables logging to file", "/foo/bar", "", false, false, []string{"/foo/bar"}), 70 Entry("CF_TRACE filepath, '-v': enables logging to file", "/foo/bar", "", true, true, []string{"/foo/bar"}), 71 Entry("CF_TRACE filepath, config trace true: enables verbose AND logging to file", "/foo/bar", "true", false, true, []string{"/foo/bar"}), 72 Entry("CF_TRACE filepath, config trace filepath: enables logging to file for BOTH paths", "/foo/bar", "/baz", false, false, []string{"/foo/bar", "/baz"}), 73 Entry("CF_TRACE filepath, config trace filepath, '-v': enables verbose AND logging to file for BOTH paths", "/foo/bar", "/baz", true, true, []string{"/foo/bar", "/baz"}), 74 ) 75 76 Context("paths that cannot be tested in DescribeTable", func() { 77 Describe("relative paths", func() { 78 It("resolves relative paths into absolute paths", func() { 79 configTrace := "foo/bar" 80 81 rawConfig := fmt.Sprintf(`{ "Trace":"%s", "ConfigVersion": %d }`, configTrace, CurrentConfigVersion) 82 setConfig(homeDir, rawConfig) 83 84 cfTrace := "foo2/bar2" 85 Expect(os.Setenv("CF_TRACE", cfTrace)).ToNot(HaveOccurred()) 86 defer os.Unsetenv("CF_TRACE") 87 88 config, err := LoadConfig(FlagOverride{}) 89 Expect(err).ToNot(HaveOccurred()) 90 Expect(config).ToNot(BeNil()) 91 92 cwd, err := os.Getwd() 93 Expect(err).ToNot(HaveOccurred()) 94 _, parsedLocation := config.Verbose() 95 Expect(parsedLocation).To(Equal([]string{filepath.Join(cwd, cfTrace), filepath.Join(cwd, configTrace)})) 96 }) 97 }) 98 99 Describe("symlinks", func() { 100 var tempDir, ogLogPath, symlinkLogPath string 101 102 BeforeEach(func() { 103 var err error 104 tempDir, err = ioutil.TempDir("", "config-trace") 105 Expect(err).ToNot(HaveOccurred()) 106 107 tempDirAbs, err := filepath.EvalSymlinks(tempDir) 108 Expect(err).ToNot(HaveOccurred()) 109 ogLogPath = filepath.Join(tempDirAbs, "og.log") 110 err = ioutil.WriteFile(ogLogPath, nil, 0666) 111 Expect(err).ToNot(HaveOccurred()) 112 113 symlinkLogPath = filepath.Join(tempDirAbs, "sym.log") 114 err = os.Symlink(ogLogPath, symlinkLogPath) 115 Expect(err).ToNot(HaveOccurred()) 116 }) 117 118 AfterEach(func() { 119 Expect(os.RemoveAll(tempDir)).ToNot(HaveOccurred()) 120 }) 121 122 It("resolves symlinks into absolute paths", func() { 123 rawConfig := fmt.Sprintf(`{ "Trace":"%s", "ConfigVersion": %d }`, symlinkLogPath, CurrentConfigVersion) 124 setConfig(homeDir, rawConfig) 125 126 config, err := LoadConfig(FlagOverride{}) 127 Expect(err).ToNot(HaveOccurred()) 128 Expect(config).ToNot(BeNil()) 129 130 _, parsedLocation := config.Verbose() 131 Expect(parsedLocation).To(ConsistOf(ogLogPath)) 132 }) 133 }) 134 }) 135 })