github.com/pusher/oauth2_proxy@v3.2.0+incompatible/logging_handler_test.go (about)

     1  package main
     2  
     3  import (
     4  	"bytes"
     5  	"fmt"
     6  	"net/http"
     7  	"net/http/httptest"
     8  	"strings"
     9  	"testing"
    10  	"time"
    11  )
    12  
    13  func TestLoggingHandler_ServeHTTP(t *testing.T) {
    14  	ts := time.Now()
    15  
    16  	tests := []struct {
    17  		Format,
    18  		ExpectedLogMessage string
    19  	}{
    20  		{defaultRequestLoggingFormat, fmt.Sprintf("127.0.0.1 - - [%s] test-server GET - \"/foo/bar\" HTTP/1.1 \"\" 200 4 0", ts.Format("02/Jan/2006:15:04:05 -0700"))},
    21  		{"{{.RequestMethod}}", "GET\n"},
    22  	}
    23  
    24  	for _, test := range tests {
    25  		buf := bytes.NewBuffer(nil)
    26  		handler := func(w http.ResponseWriter, req *http.Request) {
    27  			_, ok := w.(http.Hijacker)
    28  			if !ok {
    29  				t.Error("http.Hijacker is not available")
    30  			}
    31  
    32  			w.Write([]byte("test"))
    33  		}
    34  
    35  		h := LoggingHandler(buf, http.HandlerFunc(handler), true, test.Format)
    36  
    37  		r, _ := http.NewRequest("GET", "/foo/bar", nil)
    38  		r.RemoteAddr = "127.0.0.1"
    39  		r.Host = "test-server"
    40  
    41  		h.ServeHTTP(httptest.NewRecorder(), r)
    42  
    43  		actual := buf.String()
    44  		if !strings.Contains(actual, test.ExpectedLogMessage) {
    45  			t.Errorf("Log message was\n%s\ninstead of matching \n%s", actual, test.ExpectedLogMessage)
    46  		}
    47  	}
    48  }