--- /dev/null
+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
+}