Skip to content

Commit

Permalink
Merge pull request #36 from linkernetworks/hwchiu/VX-131
Browse files Browse the repository at this point in the history
Support the list function of storage Provider

Former-commit-id: 27d7d85e5f48eee4e78538aa7f9c50e38b8e2823 [formerly b305193]
Former-commit-id: 2b5bb42c943721cc6ea149463806f5bcc1576ad9
  • Loading branch information
Hung-Wei Chiu authored Jun 25, 2018
2 parents 6c4ec42 + a6111ea commit b88f569
Show file tree
Hide file tree
Showing 3 changed files with 153 additions and 6 deletions.
56 changes: 50 additions & 6 deletions src/server/handler_storage_provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,22 +2,19 @@ package server

import (
"fmt"
"math/rand"
"time"
"math"
"strconv"

"github.com/linkernetworks/logger"
"github.com/linkernetworks/utils/timeutils"
"github.com/linkernetworks/vortex/src/entity"
response "github.com/linkernetworks/vortex/src/net/http"
"github.com/linkernetworks/vortex/src/net/http/query"
"github.com/linkernetworks/vortex/src/web"
mgo "gopkg.in/mgo.v2"
"gopkg.in/mgo.v2/bson"
)

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

func CreateStorageProvider(ctx *web.Context) {
sp, req, resp := ctx.ServiceProvider, ctx.Request, ctx.Response

Expand Down Expand Up @@ -51,3 +48,50 @@ func CreateStorageProvider(ctx *web.Context) {
Message: "Create success",
})
}

func ListStorageProvider(ctx *web.Context) {
sp, req, resp := ctx.ServiceProvider, ctx.Request, ctx.Response

var pageSize = 10
query := query.New(req.Request.URL.Query())

page, err := query.Int("page", 1)
if err != nil {
response.BadRequest(req.Request, resp.ResponseWriter, err)
return
}
pageSize, err = query.Int("page_size", pageSize)
if err != nil {
response.BadRequest(req.Request, resp.ResponseWriter, err)
return
}

session := sp.Mongo.NewSession()
defer session.Close()

storageProviders := []entity.StorageProvider{}

var c = session.C(entity.StorageProviderCollectionName)
var q *mgo.Query

selector := bson.M{}
q = c.Find(selector).Sort("_id").Skip((page - 1) * pageSize).Limit(pageSize)

if err := q.All(&storageProviders); err != nil {
if err == mgo.ErrNotFound {
response.NotFound(req.Request, resp.ResponseWriter, err)
} else {
response.InternalServerError(req.Request, resp.ResponseWriter, err)
}
return
}

count, err := session.Count(entity.StorageProviderCollectionName, bson.M{})
if err != nil {
logger.Error(err)
}
totalPages := int(math.Ceil(float64(count) / float64(pageSize)))
resp.AddHeader("X-Total-Count", strconv.Itoa(count))
resp.AddHeader("X-Total-Pages", strconv.Itoa(totalPages))
resp.WriteEntity(storageProviders)
}
102 changes: 102 additions & 0 deletions src/server/handler_storage_provider_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import (
"github.com/linkernetworks/vortex/src/entity"
"github.com/linkernetworks/vortex/src/serviceprovider"
"github.com/stretchr/testify/assert"
"gopkg.in/mgo.v2/bson"
)

func TestCreateStorageProvider(t *testing.T) {
Expand Down Expand Up @@ -63,3 +64,104 @@ func TestCreateStorageProvider(t *testing.T) {
assertResponseCode(t, http.StatusConflict, httpWriter)
defer session.Remove(entity.StorageProviderCollectionName, "displayName", tName)
}

func TestListStorageProvider(t *testing.T) {
cf := config.MustRead("../../config/testing.json")
sp := serviceprovider.New(cf)

session := sp.Mongo.NewSession()
defer session.Close()
storageProviders := []entity.StorageProvider{}
for i := 0; i < 3; i++ {
storageProviders = append(storageProviders, entity.StorageProvider{
ID: bson.NewObjectId(),
DisplayName: namesgenerator.GetRandomName(0),
Type: "nfs",
NFSStorageProvider: entity.NFSStorageProvider{
IP: "1.2.3.4",
PATH: "/expots",
},
})
}

for _, v := range storageProviders {
err := session.C(entity.StorageProviderCollectionName).Insert(v)
assert.NoError(t, err)
defer session.Remove(entity.StorageProviderCollectionName, "_id", v.ID)
}

//default page & page_size
httpRequest, err := http.NewRequest("GET", "http://localhost:7890/v1/storageprovider/", nil)
assert.NoError(t, err)

httpWriter := httptest.NewRecorder()
wc := restful.NewContainer()
service := newStorageProviderService(sp)
wc.Add(service)
wc.Dispatch(httpWriter, httpRequest)
assertResponseCode(t, http.StatusOK, httpWriter)

retStorageProviders := []entity.StorageProvider{}
err = json.Unmarshal(httpWriter.Body.Bytes(), &retStorageProviders)
assert.NoError(t, err)
assert.Equal(t, len(storageProviders), len(retStorageProviders))
for i, v := range retStorageProviders {
assert.Equal(t, storageProviders[i].ID, v.ID)
assert.Equal(t, storageProviders[i].DisplayName, v.DisplayName)
assert.Equal(t, storageProviders[i].Type, v.Type)
assert.Equal(t, storageProviders[i].IP, v.IP)
assert.Equal(t, storageProviders[i].PATH, v.PATH)
}

httpRequest, err = http.NewRequest("GET", "http://localhost:7890/v1/storageprovider?page=1&page_size=30", nil)
assert.NoError(t, err)

httpWriter = httptest.NewRecorder()
wc.Dispatch(httpWriter, httpRequest)
assertResponseCode(t, http.StatusOK, httpWriter)

retStorageProviders = []entity.StorageProvider{}
err = json.Unmarshal(httpWriter.Body.Bytes(), &retStorageProviders)
assert.NoError(t, err)
assert.Equal(t, len(storageProviders), len(retStorageProviders))
for i, v := range retStorageProviders {
assert.Equal(t, storageProviders[i].ID, v.ID)
assert.Equal(t, storageProviders[i].DisplayName, v.DisplayName)
assert.Equal(t, storageProviders[i].Type, v.Type)
assert.Equal(t, storageProviders[i].IP, v.IP)
assert.Equal(t, storageProviders[i].PATH, v.PATH)
}
}

func TestListInvalidStorageProvider(t *testing.T) {
cf := config.MustRead("../../config/testing.json")
sp := serviceprovider.New(cf)

//Invliad page size
httpRequest, err := http.NewRequest("GET", "http://localhost:7890/v1/storageprovider?page=0", nil)
assert.NoError(t, err)

httpWriter := httptest.NewRecorder()
wc := restful.NewContainer()
service := newStorageProviderService(sp)
wc.Add(service)
wc.Dispatch(httpWriter, httpRequest)
assertResponseCode(t, http.StatusInternalServerError, httpWriter)

//Invliad page type
httpRequest, err = http.NewRequest("GET", "http://localhost:7890/v1/storageprovider?page=asd", nil)
assert.NoError(t, err)

httpWriter = httptest.NewRecorder()
wc.Dispatch(httpWriter, httpRequest)
assertResponseCode(t, http.StatusBadRequest, httpWriter)

//Invliad page_size type
httpRequest, err = http.NewRequest("GET", "http://localhost:7890/v1/storageprovider?page_size=asd", nil)
assert.NoError(t, err)

httpWriter = httptest.NewRecorder()
wc.Dispatch(httpWriter, httpRequest)
assertResponseCode(t, http.StatusBadRequest, httpWriter)

}
1 change: 1 addition & 0 deletions src/server/route.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,5 +43,6 @@ func newStorageProviderService(sp *serviceprovider.Container) *restful.WebServic
webService := new(restful.WebService)
webService.Path("/v1/storageprovider").Consumes(restful.MIME_JSON, restful.MIME_JSON).Produces(restful.MIME_JSON, restful.MIME_JSON)
webService.Route(webService.POST("/").To(handler.RESTfulServiceHandler(sp, CreateStorageProvider)))
webService.Route(webService.GET("/").To(handler.RESTfulServiceHandler(sp, ListStorageProvider)))
return webService
}

0 comments on commit b88f569

Please sign in to comment.