Files
oceanbase/tools/ob-configserver/server/http_server_test.go
2022-05-30 16:44:36 +08:00

94 lines
2.3 KiB
Go

/**
* Copyright (c) 2021 OceanBase
* OceanBase CE is licensed under Mulan PubL v2.
* You can use this software according to the terms and conditions of the Mulan PubL v2.
* You may obtain a copy of Mulan PubL v2 at:
* http://license.coscl.org.cn/MulanPubL-2.0
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PubL v2 for more details.
*/
package server
import (
"context"
"net/http"
"net/http/httptest"
"testing"
"time"
"github.com/gin-gonic/gin"
. "github.com/smartystreets/goconvey/convey"
)
func TestCounter(t *testing.T) {
count := new(Counter)
Convey("counter after init", t, func() {
So(count.sessionCount, ShouldEqual, 0)
})
count.incr()
Convey("counter after incr", t, func() {
So(count.sessionCount, ShouldEqual, 1)
})
count.decr()
Convey("counter after decr", t, func() {
So(count.sessionCount, ShouldEqual, 0)
})
}
func TestHttpServer(t *testing.T) {
server := &HttpServer{
Counter: new(Counter),
Router: gin.Default(),
Server: &http.Server{
Addr: ":0",
},
}
w := httptest.NewRecorder()
server.UseCounter()
server.Router.GET("/foo", fooHandler)
end := make(chan bool, 1)
handler := func(w http.ResponseWriter, r *http.Request) {
server.Router.ServeHTTP(w, r)
time.Sleep(time.Second)
}
req := httptest.NewRequest(http.MethodGet, "/foo", nil)
go func() {
handler(w, req)
end <- true
}()
time.Sleep(10 * time.Millisecond)
t.Run("handle a 1 second request", func(t *testing.T) {
Convey("session count should be 1", t, func() {
So(server.Counter.sessionCount, ShouldEqual, 1)
})
err := server.Shutdown(context.Background())
Convey("server shutdown should fail", t, func() {
So(err, ShouldNotBeNil)
So(err.Error(), ShouldContainSubstring, "server shutdown failed")
})
})
<-end
t.Run("handle request end", func(t *testing.T) {
Convey("session count should be 0", t, func() {
So(server.Counter.sessionCount, ShouldEqual, 0)
})
err := server.Shutdown(context.Background())
Convey("server shutdown should success", t, func() {
So(err, ShouldBeNil)
})
})
}
func fooHandler(c *gin.Context) {
time.Sleep(time.Second)
}