dev.azure.com/aidainnovazione0090/DeviceManager/_git/go-mod-core-contracts@v1.0.2/clients/http/command_test.go (about) 1 // 2 // Copyright (C) 2021-2022 IOTech Ltd 3 // 4 // SPDX-License-Identifier: Apache-2.0 5 6 package http 7 8 import ( 9 "context" 10 "encoding/json" 11 "net/http" 12 "net/http/httptest" 13 "strconv" 14 "testing" 15 16 "dev.azure.com/aidainnovazione0090/DeviceManager/_git/go-mod-core-contracts/common" 17 dtoCommon "dev.azure.com/aidainnovazione0090/DeviceManager/_git/go-mod-core-contracts/dtos/common" 18 "dev.azure.com/aidainnovazione0090/DeviceManager/_git/go-mod-core-contracts/dtos/responses" 19 20 "github.com/stretchr/testify/require" 21 ) 22 23 func TestQueryDeviceCoreCommands(t *testing.T) { 24 ts := newTestServer(http.MethodGet, common.ApiAllDeviceRoute, responses.MultiDeviceCoreCommandsResponse{}) 25 defer ts.Close() 26 client := NewCommandClient(ts.URL, NewNullAuthenticationInjector(), false) 27 res, err := client.AllDeviceCoreCommands(context.Background(), 0, 10) 28 require.NoError(t, err) 29 require.IsType(t, responses.MultiDeviceCoreCommandsResponse{}, res) 30 } 31 32 func TestQueryDeviceCoreCommandsByDeviceName(t *testing.T) { 33 deviceName := "Simple-Device01" 34 path := common.NewPathBuilder().EnableNameFieldEscape(false). 35 SetPath(common.ApiDeviceRoute).SetPath(common.Name).SetNameFieldPath(deviceName).BuildPath() 36 ts := newTestServer(http.MethodGet, path, responses.DeviceCoreCommandResponse{}) 37 defer ts.Close() 38 client := NewCommandClient(ts.URL, NewNullAuthenticationInjector(), false) 39 res, err := client.DeviceCoreCommandsByDeviceName(context.Background(), deviceName) 40 require.NoError(t, err) 41 require.IsType(t, responses.DeviceCoreCommandResponse{}, res) 42 } 43 44 func TestIssueGetCommandByName(t *testing.T) { 45 deviceName := "Simple-Device01" 46 cmdName := "SwitchButton" 47 path := common.NewPathBuilder().EnableNameFieldEscape(false). 48 SetPath(common.ApiDeviceRoute).SetPath(common.Name).SetNameFieldPath(deviceName).SetNameFieldPath(cmdName).BuildPath() 49 ts := newTestServer(http.MethodGet, path, &responses.EventResponse{}) 50 defer ts.Close() 51 client := NewCommandClient(ts.URL, NewNullAuthenticationInjector(), false) 52 pushEvent, err := strconv.ParseBool(common.ValueTrue) 53 require.NoError(t, err) 54 notReturnEvent, err := strconv.ParseBool(common.ValueFalse) 55 require.NoError(t, err) 56 res, err := client.IssueGetCommandByName(context.Background(), deviceName, cmdName, pushEvent, notReturnEvent) 57 require.NoError(t, err) 58 require.IsType(t, &responses.EventResponse{}, res) 59 } 60 61 func TestIssueGetCommandByNameWithQueryParams(t *testing.T) { 62 deviceName := "Simple-Device01" 63 cmdName := "SwitchButton" 64 testQueryParams := map[string]string{"foo": "bar", "key": "value"} 65 ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 66 for k, v := range testQueryParams { 67 if r.URL.Query().Get(k) != v { 68 w.WriteHeader(http.StatusBadRequest) 69 return 70 } 71 } 72 73 w.WriteHeader(http.StatusOK) 74 b, _ := json.Marshal(responses.EventResponse{}) 75 _, _ = w.Write(b) 76 })) 77 defer ts.Close() 78 79 client := NewCommandClient(ts.URL, NewNullAuthenticationInjector(), false) 80 res, err := client.IssueGetCommandByNameWithQueryParams(context.Background(), deviceName, cmdName, testQueryParams) 81 require.NoError(t, err) 82 require.IsType(t, &responses.EventResponse{}, res) 83 } 84 85 func TestIssueIssueSetCommandByName(t *testing.T) { 86 deviceName := "Simple-Device01" 87 cmdName := "SwitchButton" 88 settings := map[string]string{ 89 "SwitchButton": "true", 90 } 91 path := common.NewPathBuilder().EnableNameFieldEscape(false). 92 SetPath(common.ApiDeviceRoute).SetPath(common.Name).SetNameFieldPath(deviceName).SetNameFieldPath(cmdName).BuildPath() 93 ts := newTestServer(http.MethodPut, path, dtoCommon.BaseResponse{}) 94 defer ts.Close() 95 client := NewCommandClient(ts.URL, NewNullAuthenticationInjector(), false) 96 res, err := client.IssueSetCommandByName(context.Background(), deviceName, cmdName, settings) 97 require.NoError(t, err) 98 require.IsType(t, dtoCommon.BaseResponse{}, res) 99 } 100 101 func TestIssueIssueSetCommandByNameWithObject(t *testing.T) { 102 deviceName := "Simple-Device01" 103 cmdName := "SwitchButton" 104 settings := map[string]interface{}{ 105 "SwitchButton": map[string]interface{}{ 106 "kind": "button", 107 "value": "on", 108 }, 109 } 110 path := common.NewPathBuilder().EnableNameFieldEscape(false). 111 SetPath(common.ApiDeviceRoute).SetPath(common.Name).SetNameFieldPath(deviceName).SetNameFieldPath(cmdName).BuildPath() 112 ts := newTestServer(http.MethodPut, path, dtoCommon.BaseResponse{}) 113 defer ts.Close() 114 client := NewCommandClient(ts.URL, NewNullAuthenticationInjector(), false) 115 res, err := client.IssueSetCommandByNameWithObject(context.Background(), deviceName, cmdName, settings) 116 require.NoError(t, err) 117 require.IsType(t, dtoCommon.BaseResponse{}, res) 118 }