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  })