github.com/dcarley/cf-cli@v6.24.1-0.20170220111324-4225ff346898+incompatible/command/request_logger_file_writer_test.go (about) 1 package command_test 2 3 import ( 4 "errors" 5 "fmt" 6 "io/ioutil" 7 "os" 8 "path/filepath" 9 "time" 10 11 . "code.cloudfoundry.org/cli/command" 12 "code.cloudfoundry.org/cli/util/ui" 13 14 . "github.com/onsi/ginkgo" 15 . "github.com/onsi/gomega" 16 . "github.com/onsi/gomega/gbytes" 17 ) 18 19 var _ = Describe("Request Logger File Writer", func() { 20 var ( 21 testUI *ui.UI 22 display *RequestLoggerFileWriter 23 tmpdir string 24 logFile1 string 25 logFile2 string 26 ) 27 28 BeforeEach(func() { 29 testUI = ui.NewTestUI(NewBuffer(), NewBuffer(), NewBuffer()) 30 var err error 31 tmpdir, err = ioutil.TempDir("", "request_logger") 32 Expect(err).ToNot(HaveOccurred()) 33 34 logFile1 = filepath.Join(tmpdir, "tmpfile1") 35 logFile2 = filepath.Join(tmpdir, "tmpfile2") 36 display = NewRequestLoggerFileWriter(testUI, []string{logFile1, logFile2}) 37 err = display.Start() 38 Expect(err).ToNot(HaveOccurred()) 39 }) 40 41 AfterEach(func() { 42 os.RemoveAll(tmpdir) 43 }) 44 45 Describe("DisplayBody", func() { 46 It("writes the redacted value", func() { 47 err := display.DisplayBody([]byte("this is a body")) 48 Expect(err).ToNot(HaveOccurred()) 49 50 err = display.Stop() 51 Expect(err).ToNot(HaveOccurred()) 52 53 contents, err := ioutil.ReadFile(logFile1) 54 Expect(err).ToNot(HaveOccurred()) 55 Expect(string(contents)).To(Equal(RedactedValue + "\n")) 56 57 contents, err = ioutil.ReadFile(logFile2) 58 Expect(err).ToNot(HaveOccurred()) 59 Expect(string(contents)).To(Equal(RedactedValue + "\n")) 60 }) 61 }) 62 63 Describe("DisplayJSONBody", func() { 64 Context("when provided well formed JSON", func() { 65 It("writes a formated output", func() { 66 raw := `{"a":"b", "c":"d", "don't escape HTML":"<&>"}` 67 formatted := `{ 68 "a": "b", 69 "c": "d", 70 "don't escape HTML": "<&>" 71 } 72 73 ` // Additonal spaces required 74 err := display.DisplayJSONBody([]byte(raw)) 75 Expect(err).ToNot(HaveOccurred()) 76 77 err = display.Stop() 78 Expect(err).ToNot(HaveOccurred()) 79 80 contents, err := ioutil.ReadFile(logFile1) 81 Expect(err).ToNot(HaveOccurred()) 82 Expect(string(contents)).To(Equal(formatted)) 83 84 contents, err = ioutil.ReadFile(logFile2) 85 Expect(err).ToNot(HaveOccurred()) 86 Expect(string(contents)).To(Equal(formatted)) 87 }) 88 }) 89 90 Context("when the body is empty", func() { 91 It("does not write the body", func() { 92 err := display.DisplayJSONBody(nil) 93 Expect(err).ToNot(HaveOccurred()) 94 95 err = display.Stop() 96 Expect(err).ToNot(HaveOccurred()) 97 98 contents, err := ioutil.ReadFile(logFile1) 99 Expect(err).ToNot(HaveOccurred()) 100 // display.Stop() writes "\n" to the file 101 Expect(string(contents)).To(Equal("\n")) 102 103 contents, err = ioutil.ReadFile(logFile2) 104 Expect(err).ToNot(HaveOccurred()) 105 Expect(string(contents)).To(Equal("\n")) 106 }) 107 }) 108 }) 109 110 Describe("DisplayHeader", func() { 111 It("writes the header key and value", func() { 112 err := display.DisplayHeader("Header", "Value") 113 Expect(err).ToNot(HaveOccurred()) 114 115 err = display.Stop() 116 Expect(err).ToNot(HaveOccurred()) 117 118 contents, err := ioutil.ReadFile(logFile1) 119 Expect(err).ToNot(HaveOccurred()) 120 Expect(string(contents)).To(Equal("Header: Value\n\n")) 121 122 contents, err = ioutil.ReadFile(logFile2) 123 Expect(err).ToNot(HaveOccurred()) 124 Expect(string(contents)).To(Equal("Header: Value\n\n")) 125 }) 126 }) 127 128 Describe("DisplayHost", func() { 129 It("writes the host", func() { 130 err := display.DisplayHost("banana") 131 Expect(err).ToNot(HaveOccurred()) 132 133 err = display.Stop() 134 Expect(err).ToNot(HaveOccurred()) 135 136 contents, err := ioutil.ReadFile(logFile1) 137 Expect(err).ToNot(HaveOccurred()) 138 Expect(string(contents)).To(Equal("Host: banana\n\n")) 139 140 contents, err = ioutil.ReadFile(logFile2) 141 Expect(err).ToNot(HaveOccurred()) 142 Expect(string(contents)).To(Equal("Host: banana\n\n")) 143 }) 144 }) 145 146 Describe("DisplayRequestHeader", func() { 147 It("writes the method, uri and http protocal", func() { 148 err := display.DisplayRequestHeader("GET", "/v2/spaces/guid/summary", "HTTP/1.1") 149 Expect(err).ToNot(HaveOccurred()) 150 151 err = display.Stop() 152 Expect(err).ToNot(HaveOccurred()) 153 154 contents, err := ioutil.ReadFile(logFile1) 155 Expect(err).ToNot(HaveOccurred()) 156 Expect(string(contents)).To(Equal("GET /v2/spaces/guid/summary HTTP/1.1\n\n")) 157 158 contents, err = ioutil.ReadFile(logFile2) 159 Expect(err).ToNot(HaveOccurred()) 160 Expect(string(contents)).To(Equal("GET /v2/spaces/guid/summary HTTP/1.1\n\n")) 161 }) 162 }) 163 164 Describe("DisplayResponseHeader", func() { 165 It("writes the method, uri and http protocal", func() { 166 err := display.DisplayResponseHeader("HTTP/1.1", "200 OK") 167 Expect(err).ToNot(HaveOccurred()) 168 169 err = display.Stop() 170 Expect(err).ToNot(HaveOccurred()) 171 172 contents, err := ioutil.ReadFile(logFile1) 173 Expect(err).ToNot(HaveOccurred()) 174 Expect(string(contents)).To(Equal("HTTP/1.1 200 OK\n\n")) 175 176 contents, err = ioutil.ReadFile(logFile2) 177 Expect(err).ToNot(HaveOccurred()) 178 Expect(string(contents)).To(Equal("HTTP/1.1 200 OK\n\n")) 179 }) 180 }) 181 182 Describe("DisplayType", func() { 183 It("writes the passed type and time in localized ISO 8601", func() { 184 passedTime := time.Now() 185 err := display.DisplayType("banana", passedTime) 186 Expect(err).ToNot(HaveOccurred()) 187 188 err = display.Stop() 189 Expect(err).ToNot(HaveOccurred()) 190 191 contents, err := ioutil.ReadFile(logFile1) 192 Expect(err).ToNot(HaveOccurred()) 193 Expect(string(contents)).To(Equal(fmt.Sprintf("banana: [%s]\n\n", passedTime.Format(time.RFC3339)))) 194 195 contents, err = ioutil.ReadFile(logFile2) 196 Expect(err).ToNot(HaveOccurred()) 197 Expect(string(contents)).To(Equal(fmt.Sprintf("banana: [%s]\n\n", passedTime.Format(time.RFC3339)))) 198 }) 199 }) 200 201 Describe("HandleInternalError", func() { 202 It("sends error to standard error", func() { 203 err := errors.New("foobar") 204 display.HandleInternalError(err) 205 Expect(testUI.Err).To(Say("foobar")) 206 }) 207 }) 208 })