mirror of
				https://github.com/caddyserver/caddy.git
				synced 2025-11-04 03:27:23 -05:00 
			
		
		
		
	log: add log request body test
Signed-off-by: Tw <tw19881113@gmail.com>
This commit is contained in:
		
							parent
							
								
									1d3212a598
								
							
						
					
					
						commit
						bba1059ef9
					
				@ -276,5 +276,6 @@ const (
 | 
				
			|||||||
	headerContentType = "Content-Type"
 | 
						headerContentType = "Content-Type"
 | 
				
			||||||
	contentTypeJSON   = "application/json"
 | 
						contentTypeJSON   = "application/json"
 | 
				
			||||||
	contentTypeXML    = "application/xml"
 | 
						contentTypeXML    = "application/xml"
 | 
				
			||||||
	maxLogBodySize    = 100 * 1024
 | 
						// MaxLogBodySize limits the size of logged request's body
 | 
				
			||||||
 | 
						MaxLogBodySize = 100 * 1024
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
				
			|||||||
@ -2,6 +2,7 @@ package log
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"bytes"
 | 
						"bytes"
 | 
				
			||||||
 | 
						"io/ioutil"
 | 
				
			||||||
	"log"
 | 
						"log"
 | 
				
			||||||
	"net/http"
 | 
						"net/http"
 | 
				
			||||||
	"net/http/httptest"
 | 
						"net/http/httptest"
 | 
				
			||||||
@ -60,3 +61,59 @@ func TestLoggedStatus(t *testing.T) {
 | 
				
			|||||||
		t.Errorf("Expected the log entry to contain 'foobar' (custom placeholder), but it didn't: %s", logged)
 | 
							t.Errorf("Expected the log entry to contain 'foobar' (custom placeholder), but it didn't: %s", logged)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func TestLogRequestBody(t *testing.T) {
 | 
				
			||||||
 | 
						var got bytes.Buffer
 | 
				
			||||||
 | 
						logger := Logger{
 | 
				
			||||||
 | 
							Rules: []Rule{{
 | 
				
			||||||
 | 
								PathScope: "/",
 | 
				
			||||||
 | 
								Format:    "{request_body}",
 | 
				
			||||||
 | 
								Log:       log.New(&got, "", 0),
 | 
				
			||||||
 | 
							}},
 | 
				
			||||||
 | 
							Next: httpserver.HandlerFunc(func(w http.ResponseWriter, r *http.Request) (int, error) {
 | 
				
			||||||
 | 
								// drain up body
 | 
				
			||||||
 | 
								ioutil.ReadAll(r.Body)
 | 
				
			||||||
 | 
								return 0, nil
 | 
				
			||||||
 | 
							}),
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						for i, c := range []struct {
 | 
				
			||||||
 | 
							body   string
 | 
				
			||||||
 | 
							expect string
 | 
				
			||||||
 | 
						}{
 | 
				
			||||||
 | 
							{"", "\n"},
 | 
				
			||||||
 | 
							{"{hello} world!", "{hello} world!\n"},
 | 
				
			||||||
 | 
							{func() string {
 | 
				
			||||||
 | 
								length := httpserver.MaxLogBodySize + 100
 | 
				
			||||||
 | 
								b := make([]byte, length)
 | 
				
			||||||
 | 
								for i := 0; i < length; i++ {
 | 
				
			||||||
 | 
									b[i] = 0xab
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								return string(b)
 | 
				
			||||||
 | 
							}(), func() string {
 | 
				
			||||||
 | 
								b := make([]byte, httpserver.MaxLogBodySize)
 | 
				
			||||||
 | 
								for i := 0; i < httpserver.MaxLogBodySize; i++ {
 | 
				
			||||||
 | 
									b[i] = 0xab
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								return string(b) + "\n"
 | 
				
			||||||
 | 
							}(),
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
						} {
 | 
				
			||||||
 | 
							got.Reset()
 | 
				
			||||||
 | 
							r, err := http.NewRequest("POST", "/", bytes.NewBufferString(c.body))
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								t.Fatal(err)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							r.Header.Set("Content-Type", "application/json")
 | 
				
			||||||
 | 
							status, err := logger.ServeHTTP(httptest.NewRecorder(), r)
 | 
				
			||||||
 | 
							if status != 0 {
 | 
				
			||||||
 | 
								t.Errorf("case %d: Expected status to be 0, but was %d", i, status)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								t.Errorf("case %d: Expected error to be nil, instead got: %v", i, err)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if got.String() != c.expect {
 | 
				
			||||||
 | 
								t.Errorf("case %d: Expected body %q, but got %q", i, c.expect, got.String())
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user