aboutsummaryrefslogtreecommitdiffstats
path: root/routers/common
diff options
context:
space:
mode:
authorwxiaoguang <wxiaoguang@gmail.com>2023-05-29 23:00:21 +0800
committerGitHub <noreply@github.com>2023-05-29 15:00:21 +0000
commitca5f3028763f82dfe2491d3e408afbc369ec2a73 (patch)
treea69d1f87de57b7e92d017ed88d22b595094f5325 /routers/common
parent73b57c29922a9f76ca061dfe7c118b6e923ee606 (diff)
downloadgitea-ca5f3028763f82dfe2491d3e408afbc369ec2a73.tar.gz
gitea-ca5f3028763f82dfe2491d3e408afbc369ec2a73.zip
Fix admin config page error, use tests to cover the admin config and 500 error page (#24965)
The admin config page has been broken for many many times, a little refactoring would make this page panic. So, add a test for it, and add another test to cover the 500 error page. Co-authored-by: Giteabot <teabot@gitea.io>
Diffstat (limited to 'routers/common')
-rw-r--r--routers/common/errpage.go2
-rw-r--r--routers/common/errpage_test.go41
2 files changed, 42 insertions, 1 deletions
diff --git a/routers/common/errpage.go b/routers/common/errpage.go
index 4cf3bf8357..3d82c96deb 100644
--- a/routers/common/errpage.go
+++ b/routers/common/errpage.go
@@ -26,7 +26,7 @@ func RenderPanicErrorPage(w http.ResponseWriter, req *http.Request, err any) {
defer func() {
if err := recover(); err != nil {
- log.Error("Panic occurs again when rendering error page: %v", err)
+ log.Error("Panic occurs again when rendering error page: %v. Stack:\n%s", err, log.Stack(2))
}
}()
diff --git a/routers/common/errpage_test.go b/routers/common/errpage_test.go
new file mode 100644
index 0000000000..ea9a9e745c
--- /dev/null
+++ b/routers/common/errpage_test.go
@@ -0,0 +1,41 @@
+// Copyright 2023 The Gitea Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+
+package common
+
+import (
+ "context"
+ "errors"
+ "net/http"
+ "net/http/httptest"
+ "net/url"
+ "path/filepath"
+ "testing"
+
+ "code.gitea.io/gitea/models/unittest"
+ "code.gitea.io/gitea/modules/test"
+ "code.gitea.io/gitea/modules/web/middleware"
+
+ "github.com/stretchr/testify/assert"
+)
+
+func TestRenderPanicErrorPage(t *testing.T) {
+ w := httptest.NewRecorder()
+ req := &http.Request{URL: &url.URL{}}
+ req = req.WithContext(middleware.WithContextData(context.Background()))
+ RenderPanicErrorPage(w, req, errors.New("fake panic error (for test only)"))
+ respContent := w.Body.String()
+ assert.Contains(t, respContent, `class="page-content status-page-500"`)
+ assert.Contains(t, respContent, `</html>`)
+
+ // the 500 page doesn't have normal pages footer, it makes it easier to distinguish a normal page and a failed page.
+ // especially when a sub-template causes page error, the HTTP response code is still 200,
+ // the different "footer" is the only way to know whether a page is fully rendered without error.
+ assert.False(t, test.IsNormalPageCompleted(respContent))
+}
+
+func TestMain(m *testing.M) {
+ unittest.MainTest(m, &unittest.TestOptions{
+ GiteaRootPath: filepath.Join("..", ".."),
+ })
+}