Multi-layer routing
Co-authored-by: Romain <rtribotte@users.noreply.github.com>
This commit is contained in:
parent
8392503df7
commit
d6598f370c
37 changed files with 2834 additions and 37 deletions
96
pkg/middlewares/accesslog/field_middleware_test.go
Normal file
96
pkg/middlewares/accesslog/field_middleware_test.go
Normal file
|
|
@ -0,0 +1,96 @@
|
|||
package accesslog
|
||||
|
||||
import (
|
||||
"context"
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func TestConcatFieldHandler_ServeHTTP(t *testing.T) {
|
||||
testCases := []struct {
|
||||
desc string
|
||||
existingValue interface{}
|
||||
newValue string
|
||||
expectedResult string
|
||||
}{
|
||||
{
|
||||
desc: "first router - no existing value",
|
||||
existingValue: nil,
|
||||
newValue: "router1",
|
||||
expectedResult: "router1",
|
||||
},
|
||||
{
|
||||
desc: "second router - concatenate with existing string",
|
||||
existingValue: "router1",
|
||||
newValue: "router2",
|
||||
expectedResult: "router1 -> router2",
|
||||
},
|
||||
{
|
||||
desc: "third router - concatenate with existing chain",
|
||||
existingValue: "router1 -> router2",
|
||||
newValue: "router3",
|
||||
expectedResult: "router1 -> router2 -> router3",
|
||||
},
|
||||
{
|
||||
desc: "empty existing value - treat as first",
|
||||
existingValue: " ",
|
||||
newValue: "router1",
|
||||
expectedResult: "router1",
|
||||
},
|
||||
{
|
||||
desc: "non-string existing value - replace with new value",
|
||||
existingValue: 123,
|
||||
newValue: "router1",
|
||||
expectedResult: "router1",
|
||||
},
|
||||
}
|
||||
|
||||
for _, test := range testCases {
|
||||
t.Run(test.desc, func(t *testing.T) {
|
||||
nextHandler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
w.WriteHeader(http.StatusOK)
|
||||
})
|
||||
|
||||
logData := &LogData{
|
||||
Core: CoreLogData{},
|
||||
}
|
||||
if test.existingValue != nil {
|
||||
logData.Core[RouterName] = test.existingValue
|
||||
}
|
||||
|
||||
req := httptest.NewRequest(http.MethodGet, "/test", nil)
|
||||
req = req.WithContext(context.WithValue(req.Context(), DataTableKey, logData))
|
||||
|
||||
handler := NewConcatFieldHandler(nextHandler, RouterName, test.newValue)
|
||||
|
||||
rec := httptest.NewRecorder()
|
||||
handler.ServeHTTP(rec, req)
|
||||
|
||||
assert.Equal(t, test.expectedResult, logData.Core[RouterName])
|
||||
assert.Equal(t, http.StatusOK, rec.Code)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestConcatFieldHandler_ServeHTTP_NoLogData(t *testing.T) {
|
||||
nextHandlerCalled := false
|
||||
nextHandler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
nextHandlerCalled = true
|
||||
w.WriteHeader(http.StatusOK)
|
||||
})
|
||||
|
||||
handler := NewConcatFieldHandler(nextHandler, RouterName, "router1")
|
||||
|
||||
// Create request without LogData in context.
|
||||
req := httptest.NewRequest(http.MethodGet, "/test", nil)
|
||||
rec := httptest.NewRecorder()
|
||||
|
||||
handler.ServeHTTP(rec, req)
|
||||
|
||||
// Verify next handler was called and no panic occurred.
|
||||
assert.True(t, nextHandlerCalled)
|
||||
assert.Equal(t, http.StatusOK, rec.Code)
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue