Add unit test of restapi
authorjw_wonny.cha <jw_wonny.cha@samsung.com>
Mon, 25 Mar 2019 08:03:57 +0000 (17:03 +0900)
committerjw_wonny.cha <jw_wonny.cha@samsung.com>
Mon, 25 Mar 2019 08:03:57 +0000 (17:03 +0900)
src/restapi/v1/restapi_test.go [new file with mode: 0644]

diff --git a/src/restapi/v1/restapi_test.go b/src/restapi/v1/restapi_test.go
new file mode 100644 (file)
index 0000000..cd3b879
--- /dev/null
@@ -0,0 +1,297 @@
+package v1
+
+import (
+       "bytes"
+       "devicemgr"
+       "encoding/json"
+       "io/ioutil"
+       "log"
+       "net/http"
+       "net/http/httptest"
+       "servicemgr"
+       "strconv"
+       "strings"
+       "testing"
+       "time"
+)
+
+var (
+       server  *httptest.Server
+       testURL string
+)
+
+const (
+       // Resource mgr URI
+       ConstDeviceResourceUsageCPUGet     = "/api/v1/device/resource/usage/cpu"
+       ConstDeviceResourceUsageDiskGet    = "/api/v1/device/resource/usage/disk"
+       ConstDeviceResourceUsageMemoryGet  = "/api/v1/device/resource/usage/memory"
+       ConstDeviceResourceUsageNetworkGet = "/api/v1/device/resource/usage/network"
+
+       // @TODO discovery mgr URI
+
+       // Service mgr URI
+       ConstServicemgrServices = "/api/v1/servicemgr/services"
+
+       ConstAppName     = "AppName"
+       ConstServiceName = "ls"
+)
+
+type Response struct {
+       Content string
+       Code    int
+}
+
+func AssertEqualStr(t *testing.T, a, b string) {
+       t.Helper()
+       if strings.Compare(a, b) != 0 {
+               t.Errorf("%s != %s", a, b)
+       }
+}
+
+func AssertEqualInt(t *testing.T, a, b int) {
+       t.Helper()
+       if a != b {
+               t.Errorf("%d != %d", a, b)
+       }
+}
+
+func DoGet(url string) (res *Response, err error) {
+       req, err := http.NewRequest("GET", url, nil)
+       if err != nil {
+               return
+       }
+
+       client := &http.Client{}
+       resp, err := client.Do(req)
+       if err != nil {
+               return
+       }
+       defer resp.Body.Close()
+
+       contents, err := ioutil.ReadAll(resp.Body)
+       if err != nil {
+
+               return
+       }
+
+       res = &Response{Content: string(contents), Code: resp.StatusCode}
+       return
+}
+
+func DoPost(url string, body []byte) (res *Response, err error) {
+       buff := bytes.NewBuffer(body)
+
+       log.Println(url)
+       req, err := http.NewRequest("POST", url, buff)
+       if err != nil {
+               return
+       }
+
+       req.Header.Add("Content-Type", "application/json")
+
+       client := &http.Client{}
+       resp, err := client.Do(req)
+       if err != nil {
+               return
+       }
+       defer resp.Body.Close()
+
+       contents, err := ioutil.ReadAll(resp.Body)
+       if err != nil {
+               return
+       }
+       res = &Response{Content: string(contents), Code: resp.StatusCode}
+
+       return
+}
+
+func DoDelete(url string) (res *Response, err error) {
+       req, err := http.NewRequest("DELETE", url, nil)
+       if err != nil {
+               return
+       }
+
+       client := &http.Client{}
+       resp, err := client.Do(req)
+       if err != nil {
+               return
+       }
+       defer resp.Body.Close()
+
+       contents, err := ioutil.ReadAll(resp.Body)
+       if err != nil {
+
+               return
+       }
+
+       log.Println("[contents]", contents)
+       res = &Response{Content: string(contents), Code: resp.StatusCode}
+       return
+}
+
+func testGet(t *testing.T, targetURI string, statusCode int) {
+       t.Helper()
+
+       res, err := DoGet(testURL + targetURI)
+       if err != nil {
+               t.Log(err.Error())
+               t.Error()
+       }
+
+       t.Log(res.Content)
+       if len(res.Content) == 0 {
+               t.Error()
+       }
+
+       AssertEqualInt(t, res.Code, statusCode)
+}
+
+func testPost(t *testing.T, targetURI string, bodyContents []byte, statusCode int) (res *Response) {
+       t.Helper()
+
+       res, err := DoPost(testURL+targetURI, bodyContents)
+       if err != nil {
+               t.Log(err.Error())
+               t.Error()
+       }
+
+       t.Log(res.Content)
+       if len(res.Content) == 0 {
+               t.Error()
+       }
+
+       AssertEqualInt(t, res.Code, statusCode)
+       return
+}
+
+func registerService(t *testing.T) (createResponse servicemgr.ServiceCreationResponse) {
+       t.Helper()
+
+       body := servicemgr.ServiceParam{AppName: ConstAppName, ServiceName: ConstServiceName, Count: 1}
+       t.Log(body)
+       bdbytes, err := json.Marshal(body)
+
+       if err != nil {
+               t.Log(err.Error())
+               t.Error()
+       }
+
+       targetURI := ConstServicemgrServices
+       res := []byte(testPost(t, targetURI, bdbytes, http.StatusOK).Content)
+
+       err = json.Unmarshal(res, &createResponse)
+
+       if err != nil {
+               t.Log(err.Error())
+               t.Error()
+       }
+
+       return
+}
+
+func executeService(t *testing.T, serviceID uint64) {
+       t.Helper()
+       targetURI := ConstServicemgrServices + "/" + strconv.FormatUint(serviceID, 10)
+
+       userArgs := make([]string, 1)
+       userArgs[0] = "-ail"
+
+       body := servicemgr.DistService{UserArgs: userArgs}
+       bdbytes, err := json.Marshal(body)
+
+       if err != nil {
+               t.Log(err.Error())
+               t.Error()
+       }
+
+       testPost(t, targetURI, bdbytes, http.StatusOK)
+}
+
+func init() {
+       devicemgr.InitDeviceMgr()
+       servicemgr.InitServiceMap()
+
+       router := NewRouter()
+       server = httptest.NewServer(router)
+
+       testURL = server.URL
+
+       log.Println("testURL:", testURL)
+}
+
+func TestAPIV1DeviceResourceUsageCPUGet(t *testing.T) {
+       targetURI := ConstDeviceResourceUsageCPUGet
+       testGet(t, targetURI, http.StatusOK)
+}
+
+func TestAPIV1DeviceResourceUsageDiskGet(t *testing.T) {
+       targetURI := ConstDeviceResourceUsageDiskGet
+       testGet(t, targetURI, http.StatusOK)
+}
+
+func TestAPIV1DeviceResourceUsageMemoryGet(t *testing.T) {
+       targetURI := ConstDeviceResourceUsageMemoryGet
+       testGet(t, targetURI, http.StatusOK)
+}
+
+func TestAPIV1DeviceResourceUsageNetworkGet(t *testing.T) {
+       targetURI := ConstDeviceResourceUsageNetworkGet
+       testGet(t, targetURI, http.StatusOK)
+}
+
+func TestAPIV1ServicemgrServicesPost(t *testing.T) {
+       registerService(t)
+}
+
+func TestAPIV1ServicemgrServicesGet(t *testing.T) {
+       registerService(t)
+
+       targetURI := ConstServicemgrServices
+       testGet(t, targetURI, http.StatusOK)
+}
+
+func TestAPIV1ServicemgrServicesGetByAppName(t *testing.T) {
+       // @TODO add register service
+       registerService(t)
+
+       targetURI := ConstServicemgrServices + "/" + ConstAppName
+       testGet(t, targetURI, http.StatusOK)
+}
+
+func TestAPIV1ServicemgrServicesGetByServiceID(t *testing.T) {
+       // @TODO add register service
+       createResponse := registerService(t)
+
+       targetURI := ConstServicemgrServices + "/" + strconv.FormatUint(createResponse.ServiceList[0].ID, 10)
+       testGet(t, targetURI, http.StatusOK)
+}
+
+func TestAPIV1ServicemgrServicesServiceIDPost(t *testing.T) {
+       createResponse := registerService(t)
+       executeService(t, createResponse.ServiceList[0].ID)
+
+       time.Sleep(time.Second * 2)
+}
+
+func TestAPIV1ServicemgrServicesServiceIDDeleteNotFoundService(t *testing.T) {
+       // createResponse := registerService(t)
+       // executeService(t, createResponse.ServiceList[0].ID)
+
+       // time.Sleep(time.Second * 1)
+       // targetURI := ConstServicemgrServices + "/" + strconv.FormatUint(createResponse.ServiceList[0].ID, 10)
+
+       targetURI := ConstServicemgrServices + "/6"
+       res, err := DoDelete(testURL + targetURI)
+       if err != nil {
+               t.Log(err.Error())
+               t.Error()
+       }
+
+       t.Log(res.Content)
+       if len(res.Content) == 0 {
+               t.Error()
+       }
+
+       AssertEqualInt(t, res.Code, http.StatusBadRequest)
+       return
+}