github.com/cloudfoundry/cli@v7.1.0+incompatible/cf/trace/logger_provider_test.go (about)

     1  package trace_test
     2  
     3  import (
     4  	"io/ioutil"
     5  	"path"
     6  	"runtime"
     7  
     8  	. "code.cloudfoundry.org/cli/cf/trace"
     9  	"code.cloudfoundry.org/gofileutils/fileutils"
    10  
    11  	"os"
    12  
    13  	. "github.com/onsi/ginkgo"
    14  	. "github.com/onsi/gomega"
    15  	"github.com/onsi/gomega/gbytes"
    16  )
    17  
    18  var _ = Describe("NewLogger", func() {
    19  	var buffer *gbytes.Buffer
    20  	BeforeEach(func() {
    21  		buffer = gbytes.NewBuffer()
    22  	})
    23  
    24  	It("returns a logger that doesn't write anywhere when nothing is set", func() {
    25  		logger := NewLogger(buffer, false, "", "")
    26  
    27  		logger.Print("Hello World")
    28  
    29  		Expect(buffer).NotTo(gbytes.Say("Hello World"))
    30  	})
    31  
    32  	It("returns a logger that only writes to STDOUT when verbose is set", func() {
    33  		logger := NewLogger(buffer, true, "", "")
    34  
    35  		logger.Print("Hello World")
    36  
    37  		Expect(buffer).To(gbytes.Say("Hello World"))
    38  	})
    39  
    40  	It("returns a logger that only writes to STDOUT when CF_TRACE=true", func() {
    41  		logger := NewLogger(buffer, false, "true", "")
    42  
    43  		logger.Print("Hello World")
    44  
    45  		Expect(buffer).To(gbytes.Say("Hello World"))
    46  
    47  		_, err := os.Open("true")
    48  		Expect(err).To(HaveOccurred())
    49  	})
    50  
    51  	It("returns a logger that only writes to STDOUT when config.trace=true", func() {
    52  		logger := NewLogger(buffer, false, "", "true")
    53  
    54  		logger.Print("Hello World")
    55  
    56  		Expect(buffer).To(gbytes.Say("Hello World"))
    57  
    58  		_, err := os.Open("true")
    59  		Expect(err).To(HaveOccurred())
    60  	})
    61  
    62  	It("returns a logger that only writes to STDOUT when verbose is set and CF_TRACE=false", func() {
    63  		logger := NewLogger(buffer, true, "false", "")
    64  
    65  		logger.Print("Hello World")
    66  
    67  		Expect(buffer).To(gbytes.Say("Hello World"))
    68  
    69  		_, err := os.Open("false")
    70  		Expect(err).To(HaveOccurred())
    71  	})
    72  
    73  	It("returns a logger that only writes to STDOUT when verbose is set and config.trace=false", func() {
    74  		logger := NewLogger(buffer, true, "", "false")
    75  
    76  		logger.Print("Hello World")
    77  
    78  		Expect(buffer).To(gbytes.Say("Hello World"))
    79  
    80  		_, err := os.Open("false")
    81  		Expect(err).To(HaveOccurred())
    82  	})
    83  
    84  	It("returns a logger that writes to STDOUT and a file when verbose is set and CF_TRACE is a path", func() {
    85  		fileutils.TempFile("trace_test", func(file *os.File, err error) {
    86  			logger := NewLogger(buffer, true, file.Name(), "")
    87  
    88  			logger.Print("Hello World")
    89  
    90  			Expect(buffer).To(gbytes.Say("Hello World"))
    91  
    92  			fileContents, _ := ioutil.ReadAll(file)
    93  			Expect(fileContents).To(ContainSubstring("Hello World"))
    94  		})
    95  	})
    96  
    97  	It("creates the file with 0600 permission", func() {
    98  		// cannot use fileutils.TempFile because it sets the permissions to 0600
    99  		// itself
   100  		fileutils.TempDir("trace_test", func(tmpDir string, err error) {
   101  			Expect(err).ToNot(HaveOccurred())
   102  
   103  			fileName := path.Join(tmpDir, "trace_test")
   104  			logger := NewLogger(buffer, true, fileName, "")
   105  			logger.Print("Hello World")
   106  
   107  			stat, err := os.Stat(fileName)
   108  			Expect(err).ToNot(HaveOccurred())
   109  			if runtime.GOOS == "windows" {
   110  				Expect(stat.Mode().String()).To(Equal(os.FileMode(0666).String()))
   111  			} else {
   112  				Expect(stat.Mode().String()).To(Equal(os.FileMode(0600).String()))
   113  			}
   114  		})
   115  	})
   116  
   117  	It("returns a logger that writes to STDOUT and a file when verbose is set and config.trace is a path", func() {
   118  		fileutils.TempFile("trace_test", func(file *os.File, err error) {
   119  			logger := NewLogger(buffer, true, "", file.Name())
   120  
   121  			logger.Print("Hello World")
   122  
   123  			Expect(buffer).To(gbytes.Say("Hello World"))
   124  
   125  			fileContents, _ := ioutil.ReadAll(file)
   126  			Expect(fileContents).To(ContainSubstring("Hello World"))
   127  		})
   128  	})
   129  
   130  	It("returns a logger that writes to a file when CF_TRACE is a path", func() {
   131  		fileutils.TempFile("trace_test", func(file *os.File, err error) {
   132  			logger := NewLogger(buffer, false, file.Name(), "")
   133  
   134  			logger.Print("Hello World")
   135  
   136  			Expect(buffer).NotTo(gbytes.Say("Hello World"))
   137  
   138  			fileContents, _ := ioutil.ReadAll(file)
   139  			Expect(fileContents).To(ContainSubstring("Hello World"))
   140  		})
   141  	})
   142  
   143  	It("returns a logger that writes to a file when config.trace is a path", func() {
   144  		fileutils.TempFile("trace_test", func(file *os.File, err error) {
   145  			logger := NewLogger(buffer, false, "", file.Name())
   146  
   147  			logger.Print("Hello World")
   148  
   149  			Expect(buffer).NotTo(gbytes.Say("Hello World"))
   150  
   151  			fileContents, _ := ioutil.ReadAll(file)
   152  			Expect(fileContents).To(ContainSubstring("Hello World"))
   153  		})
   154  	})
   155  
   156  	It("returns a logger that writes to multiple files when CF_TRACE and config.trace are both paths", func() {
   157  		fileutils.TempFile("cf_trace_test", func(cfTraceFile *os.File, err error) {
   158  			fileutils.TempFile("config_trace_test", func(configTraceFile *os.File, err error) {
   159  				logger := NewLogger(buffer, false, cfTraceFile.Name(), configTraceFile.Name())
   160  
   161  				logger.Print("Hello World")
   162  
   163  				Expect(buffer).NotTo(gbytes.Say("Hello World"))
   164  
   165  				cfTraceFileContents, _ := ioutil.ReadAll(cfTraceFile)
   166  				Expect(cfTraceFileContents).To(ContainSubstring("Hello World"))
   167  
   168  				configTraceFileContents, _ := ioutil.ReadAll(configTraceFile)
   169  				Expect(configTraceFileContents).To(ContainSubstring("Hello World"))
   170  			})
   171  		})
   172  	})
   173  
   174  	It("returns a logger that writes to STDOUT when CF_TRACE is a path that cannot be opened", func() {
   175  		if runtime.GOOS != "windows" {
   176  			logger := NewLogger(buffer, false, "/dev/null/whoops", "")
   177  
   178  			logger.Print("Hello World")
   179  
   180  			Expect(buffer).To(gbytes.Say("Hello World"))
   181  		}
   182  	})
   183  
   184  	It("returns a logger that writes to STDOUT when config.trace is a path that cannot be opened", func() {
   185  		if runtime.GOOS != "windows" {
   186  			logger := NewLogger(buffer, false, "", "/dev/null/whoops")
   187  
   188  			logger.Print("Hello World")
   189  
   190  			Expect(buffer).To(gbytes.Say("CF_TRACE ERROR CREATING LOG FILE /dev/null/whoops"))
   191  			Expect(buffer).To(gbytes.Say("Hello World"))
   192  		}
   193  	})
   194  
   195  	It("returns a logger that writes to STDOUT when verbose is set and CF_TRACE is a path that cannot be opened", func() {
   196  		if runtime.GOOS != "windows" {
   197  			logger := NewLogger(buffer, true, "", "/dev/null/whoops")
   198  
   199  			logger.Print("Hello World")
   200  
   201  			Expect(buffer).To(gbytes.Say("CF_TRACE ERROR CREATING LOG FILE /dev/null/whoops"))
   202  			Expect(buffer).To(gbytes.Say("Hello World"))
   203  		}
   204  	})
   205  })