Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Task] VX-214: Unit test for prometheus handler #170

Merged
merged 3 commits into from
Jul 25, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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) TestListNodeMetrics() {
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) TestGetNodeMetrics() {
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) TestListNodeNicsMetrics() {
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) TestListPodMetrics() {
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) TestGetPodMetrics() {
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) TestListContainerMetrics() {
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) TestGetContainerMetrics() {
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) TestListServiceMetrics() {
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) TestGetServiceMetrics() {
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) TestListControllerMetrics() {
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) TestGetControllerMetrics() {
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
50 changes: 50 additions & 0 deletions src/server/handler_version_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
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 VersionTestSuite struct {
suite.Suite
wc *restful.Container
sp *serviceprovider.Container
}

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

//init restful container
suite.wc = restful.NewContainer()
service := newVersionService(sp)
suite.wc.Add(service)
}

func (suite *VersionTestSuite) TearDownSuite() {}

func TestVersionSuite(t *testing.T) {
suite.Run(t, new(VersionTestSuite))
}

func (suite *VersionTestSuite) TestVersion() {
httpRequest, err := http.NewRequest("GET", "http://localhost:7890/v1/version", 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_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.

Loading