cubefs

Форк
0
/
client_test.go 
156 строк · 4.0 Кб
1
// Copyright 2022 The CubeFS Authors.
2
//
3
// Licensed under the Apache License, Version 2.0 (the "License");
4
// you may not use this file except in compliance with the License.
5
// You may obtain a copy of the License at
6
//
7
//     http://www.apache.org/licenses/LICENSE-2.0
8
//
9
// Unless required by applicable law or agreed to in writing, software
10
// distributed under the License is distributed on an "AS IS" BASIS,
11
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
12
// implied. See the License for the specific language governing
13
// permissions and limitations under the License.
14

15
package blobnode
16

17
import (
18
	"bytes"
19
	"context"
20
	"io/ioutil"
21
	"net/http"
22
	"net/http/httptest"
23
	"testing"
24

25
	"github.com/stretchr/testify/require"
26

27
	"github.com/cubefs/cubefs/blobstore/common/proto"
28
	"github.com/cubefs/cubefs/blobstore/common/trace"
29
	_ "github.com/cubefs/cubefs/blobstore/testing/nolog"
30
)
31

32
func TestNewBlobNodeClient(t *testing.T) {
33
	span, ctx := trace.StartSpanFromContextWithTraceID(context.Background(), "", "NewBlobNodeService")
34

35
	mockServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
36
		if req.Header.Get("X-Crc-Encoded") != "" {
37
			w.Header().Set("X-Ack-Crc-Encoded", "1")
38
		}
39
		w.WriteHeader(http.StatusOK)
40
	}))
41

42
	cfg := &Config{}
43

44
	cli := New(cfg)
45

46
	diskid := proto.DiskID(100002)
47

48
	stat, err := cli.Stat(ctx, mockServer.URL)
49
	require.NoError(t, err)
50
	span.Infof("stat: %v\n", stat)
51

52
	diskStatArgs := &DiskStatArgs{
53
		DiskID: diskid,
54
	}
55
	diskInfo, err := cli.DiskInfo(ctx, mockServer.URL, diskStatArgs)
56
	require.NoError(t, err)
57
	span.Infof("disk info: %v\n", diskInfo)
58

59
	creteChunkArgs := &CreateChunkArgs{
60
		DiskID: diskid,
61
		Vuid:   20001,
62
	}
63
	err = cli.CreateChunk(ctx, mockServer.URL, creteChunkArgs)
64
	require.NoError(t, err)
65

66
	changeChunkArgs := &ChangeChunkStatusArgs{
67
		DiskID: diskid,
68
		Vuid:   20002,
69
	}
70
	err = cli.ReleaseChunk(ctx, mockServer.URL, changeChunkArgs)
71
	require.NoError(t, err)
72

73
	changeChunkArgs.Vuid = 20003
74
	err = cli.SetChunkReadonly(ctx, mockServer.URL, changeChunkArgs)
75
	require.NoError(t, err)
76

77
	changeChunkArgs.Vuid = 20004
78
	err = cli.SetChunkReadwrite(ctx, mockServer.URL, changeChunkArgs)
79
	require.NoError(t, err)
80

81
	listChunkArgs := &ListChunkArgs{
82
		DiskID: diskid,
83
	}
84
	chunks, err := cli.ListChunks(ctx, mockServer.URL, listChunkArgs)
85
	require.NoError(t, err)
86
	span.Infof("chunks: %v\n", chunks)
87

88
	databytes := []byte("test context")
89
	putShardArgs := &PutShardArgs{
90
		DiskID: diskid,
91
		Vuid:   20006,
92
		Bid:    300002,
93
		Size:   int64(len(databytes)),
94
		Body:   bytes.NewReader(databytes),
95
	}
96
	_, err = cli.PutShard(ctx, mockServer.URL, putShardArgs)
97
	require.NoError(t, err)
98

99
	getShardArgs := &RangeGetShardArgs{
100
		GetShardArgs: GetShardArgs{
101
			DiskID: diskid,
102
			Vuid:   20007,
103
			Bid:    300003,
104
		},
105
		Offset: 0,
106
		Size:   4000002,
107
	}
108
	body, _, err := cli.RangeGetShard(ctx, mockServer.URL, getShardArgs)
109
	require.NoError(t, err)
110
	if body != nil {
111
		b, _ := ioutil.ReadAll(body)
112
		span.Infof("body: %s\n", b)
113
	}
114

115
	deleteShardArgs := &DeleteShardArgs{
116
		DiskID: diskid,
117
		Vuid:   20008,
118
		Bid:    300004,
119
	}
120
	err = cli.MarkDeleteShard(ctx, mockServer.URL, deleteShardArgs)
121
	require.NoError(t, err)
122

123
	deleteShardArgs.Vuid = 20009
124
	deleteShardArgs.Bid = 300005
125
	err = cli.DeleteShard(ctx, mockServer.URL, deleteShardArgs)
126
	require.NoError(t, err)
127

128
	statShardArgs := &StatShardArgs{
129
		DiskID: diskid,
130
		Vuid:   10010,
131
		Bid:    300005,
132
	}
133
	blobInfo, err := cli.StatShard(ctx, mockServer.URL, statShardArgs)
134
	require.NoError(t, err)
135
	span.Infof("blob info: %v\n", blobInfo)
136

137
	listShardsArgs := &ListShardsArgs{
138
		DiskID:   diskid,
139
		Vuid:     20011,
140
		StartBid: 300007,
141
		Status:   ShardStatusMarkDelete,
142
		Count:    50,
143
	}
144
	bids, _, err := cli.ListShards(ctx, mockServer.URL, listShardsArgs)
145
	require.NoError(t, err)
146
	span.Infof("bids: %v\n", bids)
147

148
	listShardsArgs.Status = ShardStatusNormal
149
	bids, _, err = cli.ListShards(ctx, mockServer.URL, listShardsArgs)
150
	require.NoError(t, err)
151
	span.Infof("bids: %v\n", bids)
152

153
	_ = cli.String(ctx, mockServer.URL)
154
	_ = cli.Close(ctx, mockServer.URL)
155
	_ = cli.IsOnline(ctx, mockServer.URL)
156
}
157

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.