Merge 841578e64965059d18374960f619805283928c4d into 1a2bc0e7cb1a69b7750bd652d92c4d2b41504f04

This commit is contained in:
迷茫少年 2021-09-30 20:43:30 -05:00 committed by GitHub
commit 7122766550
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 23 additions and 5 deletions

17
gin.go
View File

@ -353,6 +353,23 @@ func (engine *Engine) Run(addr ...string) (err error) {
return return
} }
// Run attaches the router to a http.Server and starts listening and serving HTTP requests.
// You can use your http.server config like ReadTimeout ...
// It is a shortcut for server.ListenAndServe()
// Note: this method will block the calling goroutine indefinitely unless an error happens.
func (engine *Engine) RunServer(server *http.Server, addr ...string) (err error) {
defer func() { debugPrintError(err) }()
address := resolveAddress(addr)
debugPrint("Listening and serving HTTP on %s\n", address)
if len(addr) > 0 || server.Addr == "" {
server.Addr = address
}
server.Handler = engine
err = server.ListenAndServe()
return
}
func (engine *Engine) prepareTrustedCIDRs() ([]*net.IPNet, error) { func (engine *Engine) prepareTrustedCIDRs() ([]*net.IPNet, error) {
if engine.TrustedProxies == nil { if engine.TrustedProxies == nil {
return nil, nil return nil, nil

View File

@ -76,6 +76,7 @@ func TestRunEmpty(t *testing.T) {
testRequest(t, "http://localhost:8080/example") testRequest(t, "http://localhost:8080/example")
} }
func TestBadTrustedCIDRsForRun(t *testing.T) { func TestBadTrustedCIDRsForRun(t *testing.T) {
os.Setenv("PORT", "") os.Setenv("PORT", "")
router := New() router := New()
@ -146,20 +147,20 @@ func TestBadTrustedCIDRsForRunTLS(t *testing.T) {
func TestRunTLS(t *testing.T) { func TestRunTLS(t *testing.T) {
router := New() router := New()
service := &http.Server{}
go func() { go func() {
router.GET("/example", func(c *Context) { c.String(http.StatusOK, "it worked") }) router.GET("/example", func(c *Context) { c.String(http.StatusOK, "it worked") })
assert.NoError(t, router.RunServer(service, ":8090"))
assert.NoError(t, router.RunTLS(":8443", "./testdata/certificate/cert.pem", "./testdata/certificate/key.pem"))
}() }()
// have to wait for the goroutine to start and run the server // have to wait for the goroutine to start and run the server
// otherwise the main thread will complete // otherwise the main thread will complete
time.Sleep(5 * time.Millisecond) time.Sleep(5 * time.Millisecond)
assert.Error(t, router.RunTLS(":8443", "./testdata/certificate/cert.pem", "./testdata/certificate/key.pem")) assert.Error(t, router.RunServer(service, ":8090"))
testRequest(t, "https://localhost:8443/example") testRequest(t, "http://localhost:8090/example")
} }
func TestPusher(t *testing.T) { func TestPusher(t *testing.T) {
var html = template.Must(template.New("https").Parse(` var html = template.Must(template.New("https").Parse(`
<html> <html>