Skip to content

Commit

Permalink
unit test for prometheus handler
Browse files Browse the repository at this point in the history
  • Loading branch information
WakeupTsai committed Jul 25, 2018
1 parent 9cfcf07 commit 0dd5408
Show file tree
Hide file tree
Showing 12 changed files with 188 additions and 60 deletions.
6 changes: 6 additions & 0 deletions src/net/http/response.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,12 @@ type ErrorPayload struct {
PreviousMessage string `json:"previousMessage,omitempty" xml:"previousMessage,omitempty"`
}

// ActionResponse is the structure for Response action
type ActionResponse struct {
Error bool `json:"error"`
Message string `json:"message"`
}

// NewErrorPayload will return the ErrorPayload message according the parameters (errors)
// The ErrorPayload contains at most error messages
func NewErrorPayload(errs ...error) ErrorPayload {
Expand Down
Binary file added src/prometheuscontroller/debug.test
Binary file not shown.
2 changes: 1 addition & 1 deletion src/prometheuscontroller/expression.go
Original file line number Diff line number Diff line change
Expand Up @@ -271,12 +271,12 @@ func GetService(sp *serviceprovider.Container, id string) (entity.ServiceMetrics

}

// get service port config
kc := sp.KubeCtl
object, err := kc.GetService(service.ServiceName, service.Namespace)
if err != nil {
return entity.ServiceMetrics{}, err
}

service.Ports = object.Spec.Ports

return service, nil
Expand Down
4 changes: 2 additions & 2 deletions src/server/handler_network.go
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ func createNetworkHandler(ctx *web.Context) {
return
}

resp.WriteEntity(ActionResponse{
resp.WriteEntity(response.ActionResponse{
Error: false,
Message: "Create success",
})
Expand Down Expand Up @@ -218,7 +218,7 @@ func deleteNetworkHandler(ctx *web.Context) {
}
}

resp.WriteEntity(ActionResponse{
resp.WriteEntity(response.ActionResponse{
Error: false,
Message: "Delete success",
})
Expand Down
4 changes: 2 additions & 2 deletions src/server/handler_pod.go
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ func createPodHandler(ctx *web.Context) {
return
}

resp.WriteEntity(ActionResponse{
resp.WriteEntity(response.ActionResponse{
Error: false,
Message: "Create success",
})
Expand Down Expand Up @@ -94,7 +94,7 @@ func deletePodHandler(ctx *web.Context) {
}
}

resp.WriteEntity(ActionResponse{
resp.WriteEntity(response.ActionResponse{
Error: false,
Message: "Delete success",
})
Expand Down
169 changes: 169 additions & 0 deletions src/server/handler_prometheus_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,169 @@
package server

import (
"math/rand"
"net/http"
"net/http/httptest"
"testing"
"time"

restful "github.com/emicklei/go-restful"

"github.com/linkernetworks/vortex/src/config"
"github.com/linkernetworks/vortex/src/serviceprovider"
"github.com/stretchr/testify/suite"
)

func init() {
rand.Seed(time.Now().UnixNano())
}

type PrometheusTestSuite struct {
suite.Suite
wc *restful.Container
sp *serviceprovider.Container
}

func (suite *PrometheusTestSuite) SetupSuite() {
cf := config.MustRead("../../config/testing.json")
sp := serviceprovider.New(cf)

//init restful container
suite.wc = restful.NewContainer()
suite.sp = serviceprovider.New(cf)
service := newMonitoringService(sp)
suite.wc.Add(service)
}

func (suite *PrometheusTestSuite) TearDownSuite() {}

func TestPrometheusSuite(t *testing.T) {
suite.Run(t, new(PrometheusTestSuite))
}

func (suite *PrometheusTestSuite) TestListNodeMetricsStatus() {
httpRequest, err := http.NewRequest("GET", "http://localhost:7890/v1/monitoring/nodes/", nil)
suite.NoError(err)

httpWriter := httptest.NewRecorder()
suite.wc.Dispatch(httpWriter, httpRequest)
assertResponseCode(suite.T(), http.StatusOK, httpWriter)
}

func (suite *PrometheusTestSuite) TestGetNodeMetricsStatus() {
nodes, err := suite.sp.KubeCtl.GetNodes()
suite.NoError(err)
nodeName := nodes[0].GetName()

httpRequest, err := http.NewRequest("GET", "http://localhost:7890/v1/monitoring/nodes/"+nodeName, nil)
suite.NoError(err)

httpWriter := httptest.NewRecorder()
suite.wc.Dispatch(httpWriter, httpRequest)
assertResponseCode(suite.T(), http.StatusOK, httpWriter)
}

func (suite *PrometheusTestSuite) TestListNodeNicsMetricsStatus() {
nodes, err := suite.sp.KubeCtl.GetNodes()
suite.NoError(err)
nodeName := nodes[0].GetName()

httpRequest, err := http.NewRequest("GET", "http://localhost:7890/v1/monitoring/nodes/"+nodeName+"/nics", nil)
suite.NoError(err)

httpWriter := httptest.NewRecorder()
suite.wc.Dispatch(httpWriter, httpRequest)
assertResponseCode(suite.T(), http.StatusOK, httpWriter)
}

func (suite *PrometheusTestSuite) TestListPodMetricsStatus() {
httpRequest, err := http.NewRequest("GET", "http://localhost:7890/v1/monitoring/pods/", nil)
suite.NoError(err)

httpWriter := httptest.NewRecorder()
suite.wc.Dispatch(httpWriter, httpRequest)
assertResponseCode(suite.T(), http.StatusOK, httpWriter)
}

func (suite *PrometheusTestSuite) TestGetPodMetricsStatus() {
namespace := "vortex"
pods, err := suite.sp.KubeCtl.GetPods(namespace)
suite.NoError(err)
podName := pods[0].GetName()

httpRequest, err := http.NewRequest("GET", "http://localhost:7890/v1/monitoring/pods/"+podName, nil)
suite.NoError(err)

httpWriter := httptest.NewRecorder()
suite.wc.Dispatch(httpWriter, httpRequest)
assertResponseCode(suite.T(), http.StatusOK, httpWriter)
}

func (suite *PrometheusTestSuite) TestListContainerMetricsStatus() {
httpRequest, err := http.NewRequest("GET", "http://localhost:7890/v1/monitoring/containers/", nil)
suite.NoError(err)

httpWriter := httptest.NewRecorder()
suite.wc.Dispatch(httpWriter, httpRequest)
assertResponseCode(suite.T(), http.StatusOK, httpWriter)
}

func (suite *PrometheusTestSuite) TestGetContainerMetricsStatus() {
namespace := "vortex"
pods, err := suite.sp.KubeCtl.GetPods(namespace)
suite.NoError(err)
containerName := pods[0].Status.ContainerStatuses[0].Name

httpRequest, err := http.NewRequest("GET", "http://localhost:7890/v1/monitoring/containers/"+containerName, nil)
suite.NoError(err)

httpWriter := httptest.NewRecorder()
suite.wc.Dispatch(httpWriter, httpRequest)
assertResponseCode(suite.T(), http.StatusOK, httpWriter)
}

func (suite *PrometheusTestSuite) TestListServiceMetricsStatus() {
httpRequest, err := http.NewRequest("GET", "http://localhost:7890/v1/monitoring/services", nil)
suite.NoError(err)

httpWriter := httptest.NewRecorder()
suite.wc.Dispatch(httpWriter, httpRequest)
assertResponseCode(suite.T(), http.StatusOK, httpWriter)
}

func (suite *PrometheusTestSuite) TestGetServiceMetricsStatus() {
namespace := "vortex"
services, err := suite.sp.KubeCtl.GetServices(namespace)
suite.NoError(err)
serviceName := services[0].GetName()

httpRequest, err := http.NewRequest("GET", "http://localhost:7890/v1/monitoring/services/"+serviceName, nil)
suite.NoError(err)

httpWriter := httptest.NewRecorder()
suite.wc.Dispatch(httpWriter, httpRequest)
assertResponseCode(suite.T(), http.StatusOK, httpWriter)
}

func (suite *PrometheusTestSuite) TestListControllerMetricsStatus() {
httpRequest, err := http.NewRequest("GET", "http://localhost:7890/v1/monitoring/controllers/", nil)
suite.NoError(err)

httpWriter := httptest.NewRecorder()
suite.wc.Dispatch(httpWriter, httpRequest)
assertResponseCode(suite.T(), http.StatusOK, httpWriter)
}

func (suite *PrometheusTestSuite) TestGetControllerMetricsStatus() {
namespace := "vortex"
deployments, err := suite.sp.KubeCtl.GetDeployments(namespace)
suite.NoError(err)
deploymentName := deployments[0].GetName()

httpRequest, err := http.NewRequest("GET", "http://localhost:7890/v1/monitoring/controllers/"+deploymentName, nil)
suite.NoError(err)

httpWriter := httptest.NewRecorder()
suite.wc.Dispatch(httpWriter, httpRequest)
assertResponseCode(suite.T(), http.StatusOK, httpWriter)
}
4 changes: 2 additions & 2 deletions src/server/handler_service.go
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ func createServiceHandler(ctx *web.Context) {
return
}

resp.WriteEntity(ActionResponse{
resp.WriteEntity(response.ActionResponse{
Error: false,
Message: "Create success",
})
Expand Down Expand Up @@ -90,7 +90,7 @@ func deleteServiceHandler(ctx *web.Context) {
}
}

resp.WriteEntity(ActionResponse{
resp.WriteEntity(response.ActionResponse{
Error: false,
Message: "Delete success",
})
Expand Down
4 changes: 2 additions & 2 deletions src/server/handler_storage.go
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ func createStorage(ctx *web.Context) {
return
}

resp.WriteEntity(ActionResponse{
resp.WriteEntity(response.ActionResponse{
Error: false,
Message: "Create success",
})
Expand Down Expand Up @@ -165,7 +165,7 @@ func deleteStorage(ctx *web.Context) {
}
}

resp.WriteEntity(ActionResponse{
resp.WriteEntity(response.ActionResponse{
Error: false,
Message: "Delete success",
})
Expand Down
3 changes: 2 additions & 1 deletion src/server/handler_version.go
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
package server

import (
response "github.com/linkernetworks/vortex/src/net/http"
"github.com/linkernetworks/vortex/src/version"
"github.com/linkernetworks/vortex/src/web"
)

func versionHandler(ctx *web.Context) {
_, _, resp := ctx.ServiceProvider, ctx.Request, ctx.Response
resp.WriteEntity(ActionResponse{
resp.WriteEntity(response.ActionResponse{
Error: false,
Message: version.GetVersion(),
})
Expand Down
4 changes: 2 additions & 2 deletions src/server/handler_volume.go
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ func createVolume(ctx *web.Context) {
return
}

resp.WriteEntity(ActionResponse{
resp.WriteEntity(response.ActionResponse{
Error: false,
Message: "Create success",
})
Expand Down Expand Up @@ -90,7 +90,7 @@ func deleteVolume(ctx *web.Context) {
}
}

resp.WriteEntity(ActionResponse{
resp.WriteEntity(response.ActionResponse{
Error: false,
Message: "Delete success",
})
Expand Down
45 changes: 0 additions & 45 deletions src/server/response.go

This file was deleted.

3 changes: 0 additions & 3 deletions src/server/route_filter.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,6 @@ import (
"github.com/linkernetworks/logger"
)

// SessionKey will be the cookie name defined in the http header
const SessionKey = "ses"

func globalLogging(req *restful.Request, resp *restful.Response, chain *restful.FilterChain) {
logger.Infof("%s %s", req.Request.Method, req.Request.URL)
chain.ProcessFilter(req, resp)
Expand Down

0 comments on commit 0dd5408

Please sign in to comment.