gitea源码

qos_test.go 2.2KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. // Copyright 2025 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package common
  4. import (
  5. "net/http"
  6. "testing"
  7. user_model "code.gitea.io/gitea/models/user"
  8. "code.gitea.io/gitea/modules/web/middleware"
  9. "code.gitea.io/gitea/services/contexttest"
  10. "github.com/go-chi/chi/v5"
  11. "github.com/stretchr/testify/assert"
  12. )
  13. func TestRequestPriority(t *testing.T) {
  14. type test struct {
  15. Name string
  16. User *user_model.User
  17. RoutePattern string
  18. Expected Priority
  19. }
  20. cases := []test{
  21. {
  22. Name: "Logged In",
  23. User: &user_model.User{},
  24. Expected: HighPriority,
  25. },
  26. {
  27. Name: "Sign In",
  28. RoutePattern: "/user/login",
  29. Expected: DefaultPriority,
  30. },
  31. {
  32. Name: "Repo Home",
  33. RoutePattern: "/{username}/{reponame}",
  34. Expected: DefaultPriority,
  35. },
  36. {
  37. Name: "User Repo",
  38. RoutePattern: "/{username}/{reponame}/src/branch/main",
  39. Expected: LowPriority,
  40. },
  41. }
  42. for _, tc := range cases {
  43. t.Run(tc.Name, func(t *testing.T) {
  44. ctx, _ := contexttest.MockContext(t, "")
  45. if tc.User != nil {
  46. data := middleware.GetContextData(ctx)
  47. data[middleware.ContextDataKeySignedUser] = tc.User
  48. }
  49. rctx := chi.RouteContext(ctx)
  50. rctx.RoutePatterns = []string{tc.RoutePattern}
  51. assert.Exactly(t, tc.Expected, requestPriority(ctx))
  52. })
  53. }
  54. }
  55. func TestRenderServiceUnavailable(t *testing.T) {
  56. t.Run("HTML", func(t *testing.T) {
  57. ctx, resp := contexttest.MockContext(t, "")
  58. ctx.Req.Header.Set("Accept", "text/html")
  59. renderServiceUnavailable(resp, ctx.Req)
  60. assert.Equal(t, http.StatusServiceUnavailable, resp.Code)
  61. assert.Contains(t, resp.Header().Get("Content-Type"), "text/html")
  62. body := resp.Body.String()
  63. assert.Contains(t, body, `lang="en-US"`)
  64. assert.Contains(t, body, "503 Service Unavailable")
  65. })
  66. t.Run("plain", func(t *testing.T) {
  67. ctx, resp := contexttest.MockContext(t, "")
  68. ctx.Req.Header.Set("Accept", "text/plain")
  69. renderServiceUnavailable(resp, ctx.Req)
  70. assert.Equal(t, http.StatusServiceUnavailable, resp.Code)
  71. assert.Contains(t, resp.Header().Get("Content-Type"), "text/plain")
  72. body := resp.Body.String()
  73. assert.Contains(t, body, "503 Service Unavailable")
  74. })
  75. }