debug_test.go 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. // Copyright 2014 Manu Martinez-Almeida. All rights reserved.
  2. // Use of this source code is governed by a MIT style
  3. // license that can be found in the LICENSE file.
  4. package gin
  5. import (
  6. "bytes"
  7. "errors"
  8. "html/template"
  9. "io"
  10. "log"
  11. "os"
  12. "testing"
  13. "github.com/stretchr/testify/assert"
  14. )
  15. // TODO
  16. // func debugRoute(httpMethod, absolutePath string, handlers HandlersChain) {
  17. // func debugPrint(format string, values ...interface{}) {
  18. func TestIsDebugging(t *testing.T) {
  19. SetMode(DebugMode)
  20. assert.True(t, IsDebugging())
  21. SetMode(ReleaseMode)
  22. assert.False(t, IsDebugging())
  23. SetMode(TestMode)
  24. assert.False(t, IsDebugging())
  25. }
  26. func TestDebugPrint(t *testing.T) {
  27. var w bytes.Buffer
  28. setup(&w)
  29. defer teardown()
  30. SetMode(ReleaseMode)
  31. debugPrint("DEBUG this!")
  32. SetMode(TestMode)
  33. debugPrint("DEBUG this!")
  34. assert.Empty(t, w.String())
  35. SetMode(DebugMode)
  36. debugPrint("these are %d %s\n", 2, "error messages")
  37. assert.Equal(t, "[GIN-debug] these are 2 error messages\n", w.String())
  38. }
  39. func TestDebugPrintError(t *testing.T) {
  40. var w bytes.Buffer
  41. setup(&w)
  42. defer teardown()
  43. SetMode(DebugMode)
  44. debugPrintError(nil)
  45. assert.Empty(t, w.String())
  46. debugPrintError(errors.New("this is an error"))
  47. assert.Equal(t, "[GIN-debug] [ERROR] this is an error\n", w.String())
  48. }
  49. func TestDebugPrintRoutes(t *testing.T) {
  50. var w bytes.Buffer
  51. setup(&w)
  52. defer teardown()
  53. debugPrintRoute("GET", "/path/to/route/:param", HandlersChain{func(c *Context) {}, handlerNameTest})
  54. assert.Regexp(t, `^\[GIN-debug\] GET /path/to/route/:param --> (.*/vendor/)?github.com/gin-gonic/gin.handlerNameTest \(2 handlers\)\n$`, w.String())
  55. }
  56. func TestDebugPrintLoadTemplate(t *testing.T) {
  57. var w bytes.Buffer
  58. setup(&w)
  59. defer teardown()
  60. templ := template.Must(template.New("").Delims("{[{", "}]}").ParseGlob("./testdata/template/hello.tmpl"))
  61. debugPrintLoadTemplate(templ)
  62. assert.Regexp(t, `^\[GIN-debug\] Loaded HTML Templates \(2\): \n(\t- \n|\t- hello\.tmpl\n){2}\n`, w.String())
  63. }
  64. func TestDebugPrintWARNINGSetHTMLTemplate(t *testing.T) {
  65. var w bytes.Buffer
  66. setup(&w)
  67. defer teardown()
  68. debugPrintWARNINGSetHTMLTemplate()
  69. assert.Equal(t, "[GIN-debug] [WARNING] Since SetHTMLTemplate() is NOT thread-safe. It should only be called\nat initialization. ie. before any route is registered or the router is listening in a socket:\n\n\trouter := gin.Default()\n\trouter.SetHTMLTemplate(template) // << good place\n\n", w.String())
  70. }
  71. func TestDebugPrintWARNINGDefault(t *testing.T) {
  72. var w bytes.Buffer
  73. setup(&w)
  74. defer teardown()
  75. debugPrintWARNINGDefault()
  76. assert.Equal(t, "[GIN-debug] [WARNING] Now Gin requires Go 1.6 or later and Go 1.7 will be required soon.\n\n[GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.\n\n", w.String())
  77. }
  78. func TestDebugPrintWARNINGNew(t *testing.T) {
  79. var w bytes.Buffer
  80. setup(&w)
  81. defer teardown()
  82. debugPrintWARNINGNew()
  83. assert.Equal(t, "[GIN-debug] [WARNING] Running in \"debug\" mode. Switch to \"release\" mode in production.\n - using env:\texport GIN_MODE=release\n - using code:\tgin.SetMode(gin.ReleaseMode)\n\n", w.String())
  84. }
  85. func setup(w io.Writer) {
  86. SetMode(DebugMode)
  87. log.SetOutput(w)
  88. }
  89. func teardown() {
  90. SetMode(TestMode)
  91. log.SetOutput(os.Stdout)
  92. }