浏览代码

修改bug

yjp 3 年之前
父节点
当前提交
74e00226bd
共有 3 个文件被更改,包括 67 次插入16 次删除
  1. 1 1
      state/dto.go
  2. 17 5
      state/state.go
  3. 49 10
      test/state_test.go

+ 1 - 1
state/dto.go

@@ -36,7 +36,7 @@ type TransactionOperation struct {
 
 type TransactionOperationRequest struct {
 	Key      string            `json:"key"`
-	Value    string            `json:"value"`
+	Value    string            `json:"value,omitempty"`
 	Etag     string            `json:"etag,omitempty"`
 	MetaData map[string]string `json:"metadata,omitempty"`
 	Options  map[string]string `json:"options,omitempty"`

+ 17 - 5
state/state.go

@@ -4,6 +4,8 @@ import (
 	"encoding/json"
 	"fmt"
 	resty "github.com/go-resty/resty/v2"
+	"strconv"
+	"strings"
 	"time"
 )
 
@@ -54,22 +56,32 @@ func (api *API) SaveState(storeName string, request []SaveStateRequest) error {
 	return nil
 }
 
-func (api *API) GetState(storeName string, key string, queryParams map[string]string, result interface{}) (string, error) {
+func (api *API) GetState(storeName string, key string, queryParams map[string]string) (string, string, error) {
 	getUrl := fmt.Sprintf(getUrlFormat, api.port, storeName, key)
 
 	resp, err := api.client.R().
 		SetQueryParams(queryParams).
-		SetResult(result).
 		Get(getUrl)
 	if err != nil {
-		return "", err
+		return "", "", err
 	}
 
 	if resp.IsError() {
-		return "", fmt.Errorf("Status %d: %s\n", resp.StatusCode(), resp.Body())
+		return "", "", fmt.Errorf("Status %d: %s\n", resp.StatusCode(), resp.Body())
 	}
 
-	return resp.Header().Get("Etag"), nil
+	var body string
+	if resp.Body() != nil && len(resp.Body()) != 0 {
+		body = string(resp.Body())
+		body, err = strconv.Unquote(body)
+		if err != nil {
+			return "", "", err
+		}
+
+		body = strings.Trim(body, "\"")
+	}
+
+	return body, resp.Header().Get("Etag"), nil
 }
 
 func (api *API) GetStateBulk(storeName string, queryParams map[string]string, request GetStateBulkRequest) ([]GetStateBulkItem, error) {

+ 49 - 10
test/state_test.go

@@ -1,6 +1,7 @@
 package test
 
 import (
+	"encoding/json"
 	"git.sxidc.com/service-supports/dapr_api/state"
 	"git.sxidc.com/service-supports/dapr_api/utils"
 	"github.com/stretchr/testify/assert"
@@ -30,28 +31,68 @@ func TestStateSaveAndGet(t *testing.T) {
 		t.Fatal(err)
 	}
 
-	var getValue string
-	etag, err := api.GetState(stateStoreName, key, nil, &getValue)
+	data, etag, err := api.GetState(stateStoreName, key, nil)
 	if err != nil {
 		t.Fatal(err)
 	}
 
 	assert.NotEmpty(t, etag, "etag为空")
-	assert.Equal(t, value, getValue, "value不一致")
+	assert.Equal(t, value, data, "value不一致")
 
 	err = api.DeleteState(stateStoreName, key, nil)
 	if err != nil {
 		t.Fatal(err)
 	}
 
-	getValue = ""
-	etag, err = api.GetState(stateStoreName, key, nil, &getValue)
+	data, etag, err = api.GetState(stateStoreName, key, nil)
 	if err != nil {
 		t.Fatal(err)
 	}
 
 	assert.Empty(t, etag, "etag不为空")
-	assert.Empty(t, getValue, "value不为空")
+	assert.Empty(t, data, "value不为空")
+}
+
+func TestStateSaveAndGetJson(t *testing.T) {
+	api := state.NewAPI(httpPort, 10*time.Second)
+	defer state.DestroyAPI(api)
+
+	key := utils.SimpleUUID()
+	value, err := json.Marshal(map[string]interface{}{"value": "aaa"})
+	if err != nil {
+		t.Fatal(err)
+	}
+
+	err = api.SaveState(stateStoreName, []state.SaveStateRequest{
+		{
+			Key:   key,
+			Value: string(value),
+		},
+	})
+	if err != nil {
+		t.Fatal(err)
+	}
+
+	data, etag, err := api.GetState(stateStoreName, key, nil)
+	if err != nil {
+		t.Fatal(err)
+	}
+
+	assert.NotEmpty(t, etag, "etag为空")
+	assert.Equal(t, string(value), data, "value不一致")
+
+	err = api.DeleteState(stateStoreName, key, nil)
+	if err != nil {
+		t.Fatal(err)
+	}
+
+	data, etag, err = api.GetState(stateStoreName, key, nil)
+	if err != nil {
+		t.Fatal(err)
+	}
+
+	assert.Empty(t, etag, "etag不为空")
+	assert.Empty(t, string(data), "value不为空")
 }
 
 func TestStateGetBulk(t *testing.T) {
@@ -189,15 +230,13 @@ func TestTransaction(t *testing.T) {
 			{
 				Operation: state.TransactionDelete,
 				Request: state.TransactionOperationRequest{
-					Key:   key1,
-					Value: value1,
+					Key: key1,
 				},
 			},
 			{
 				Operation: state.TransactionDelete,
 				Request: state.TransactionOperationRequest{
-					Key:   key2,
-					Value: value2,
+					Key: key2,
 				},
 			},
 		},