...

Source file src/github.com/go-openapi/runtime/middleware/debug_test.go

Documentation: github.com/go-openapi/runtime/middleware

     1  package middleware
     2  
     3  import (
     4  	"bytes"
     5  	stdcontext "context"
     6  	"log"
     7  	"net/http"
     8  	"net/http/httptest"
     9  	"testing"
    10  
    11  	"github.com/go-openapi/runtime/internal/testing/petstore"
    12  	"github.com/go-openapi/runtime/logger"
    13  	"github.com/stretchr/testify/assert"
    14  	"github.com/stretchr/testify/require"
    15  )
    16  
    17  type customLogger struct {
    18  	logger.StandardLogger
    19  	lg *log.Logger
    20  }
    21  
    22  func (l customLogger) Debugf(format string, args ...interface{}) {
    23  	l.lg.Printf(format, args...)
    24  }
    25  
    26  func TestDebugMode(t *testing.T) {
    27  	t.Run("with normal mode", func(t *testing.T) {
    28  		t.Setenv("DEBUG", "")
    29  
    30  		logFunc := debugLogfFunc(nil)
    31  		require.NotNil(t, logFunc)
    32  	})
    33  
    34  	t.Run("with debug mode", func(t *testing.T) {
    35  		t.Setenv("DEBUG", "true")
    36  
    37  		t.Run("debugLogFunc with nil logger yields standard logger", func(t *testing.T) {
    38  			logFunc := debugLogfFunc(nil)
    39  			require.NotNil(t, logFunc)
    40  		})
    41  		t.Run("debugLogFunc with custom logger", func(t *testing.T) {
    42  			var capture bytes.Buffer
    43  			logger := customLogger{lg: log.New(&capture, "test", log.Lshortfile)}
    44  			logFunc := debugLogfFunc(logger)
    45  			require.NotNil(t, logFunc)
    46  
    47  			logFunc("debug")
    48  			assert.NotEmpty(t, capture.String())
    49  		})
    50  	})
    51  }
    52  
    53  func TestDebugRouterOptions(t *testing.T) {
    54  	t.Run("with normal mode", func(t *testing.T) {
    55  		t.Setenv("DEBUG", "")
    56  
    57  		t.Run("should capture debug from context & router", func(t *testing.T) {
    58  			var capture bytes.Buffer
    59  			logger := customLogger{lg: log.New(&capture, "test", log.Lshortfile)}
    60  
    61  			t.Run("run some activiy", doCheckWithContext(logger))
    62  			assert.Empty(t, capture.String())
    63  		})
    64  
    65  		t.Run("should capture debug from standalone DefaultRouter", func(t *testing.T) {
    66  			var capture bytes.Buffer
    67  			logger := customLogger{lg: log.New(&capture, "test", log.Lshortfile)}
    68  
    69  			t.Run("run some activiy", doCheckWithDefaultRouter(logger))
    70  			assert.Empty(t, capture.String())
    71  		})
    72  	})
    73  
    74  	t.Run("with debug mode", func(t *testing.T) {
    75  		t.Setenv("DEBUG", "1")
    76  
    77  		t.Run("should capture debug from context & router", func(t *testing.T) {
    78  			var capture bytes.Buffer
    79  			logger := customLogger{lg: log.New(&capture, "test", log.Lshortfile)}
    80  
    81  			t.Run("run some activiy", doCheckWithContext(logger))
    82  			assert.NotEmpty(t, capture.String())
    83  		})
    84  
    85  		t.Run("should capture debug from standalone DefaultRouter", func(t *testing.T) {
    86  			var capture bytes.Buffer
    87  			logger := customLogger{lg: log.New(&capture, "test", log.Lshortfile)}
    88  
    89  			t.Run("run some activiy", doCheckWithDefaultRouter(logger))
    90  			assert.NotEmpty(t, capture.String())
    91  		})
    92  	})
    93  }
    94  
    95  func doCheckWithContext(logger logger.Logger) func(*testing.T) {
    96  	return func(t *testing.T) {
    97  		spec, api := petstore.NewAPI(t)
    98  		context := NewContext(spec, api, nil)
    99  		context.SetLogger(logger)
   100  		mw := NewRouter(context, http.HandlerFunc(terminator))
   101  
   102  		recorder := httptest.NewRecorder()
   103  		request, err := http.NewRequestWithContext(stdcontext.Background(), http.MethodGet, "/api/pets", nil)
   104  		require.NoError(t, err)
   105  		mw.ServeHTTP(recorder, request)
   106  		assert.Equal(t, http.StatusOK, recorder.Code)
   107  	}
   108  }
   109  
   110  func doCheckWithDefaultRouter(lg logger.Logger) func(*testing.T) {
   111  	return func(t *testing.T) {
   112  		spec, api := petstore.NewAPI(t)
   113  		context := NewContext(spec, api, nil)
   114  		context.SetLogger(lg)
   115  		router := DefaultRouter(
   116  			spec,
   117  			newRoutableUntypedAPI(spec, api, new(Context)),
   118  			WithDefaultRouterLogger(lg))
   119  
   120  		_ = router.OtherMethods("post", "/api/pets/{id}")
   121  	}
   122  }
   123  

View as plain text