(t *testing.T)
| 170 | } |
| 171 | |
| 172 | func TestClusterImport(t *testing.T) { |
| 173 | ns := "test-ns" |
| 174 | clusterName := "test-cluster-import" |
| 175 | handler := &ClusterHandler{s: store.NewClusterStore(engine.NewMock())} |
| 176 | // cluster import must be done on a real cluster |
| 177 | testNodeAddr := "127.0.0.1:7770" |
| 178 | clusterNode := store.NewClusterNode(testNodeAddr, "") |
| 179 | cluster, err := store.NewCluster(clusterName, []string{testNodeAddr}, 1) |
| 180 | require.NoError(t, err) |
| 181 | ctx := context.Background() |
| 182 | require.NoError(t, cluster.Reset(ctx)) |
| 183 | require.NoError(t, clusterNode.SyncClusterInfo(ctx, cluster)) |
| 184 | defer func() { |
| 185 | // clean up the cluster information to avoid affecting other tests |
| 186 | require.NoError(t, cluster.Reset(ctx)) |
| 187 | }() |
| 188 | |
| 189 | var req struct { |
| 190 | Nodes []string `json:"nodes"` |
| 191 | } |
| 192 | req.Nodes = []string{testNodeAddr} |
| 193 | |
| 194 | recorder := httptest.NewRecorder() |
| 195 | testCtx := GetTestContext(recorder) |
| 196 | body, err := json.Marshal(req) |
| 197 | require.NoError(t, err) |
| 198 | |
| 199 | testCtx.Request.Body = io.NopCloser(bytes.NewBuffer(body)) |
| 200 | testCtx.Params = []gin.Param{{Key: "namespace", Value: ns}, {Key: "cluster", Value: "test-cluster-import"}} |
| 201 | handler.Import(testCtx) |
| 202 | require.Equal(t, http.StatusOK, recorder.Code) |
| 203 | |
| 204 | var rsp struct { |
| 205 | Data struct { |
| 206 | Cluster *store.Cluster `json:"cluster"` |
| 207 | } `json:"data"` |
| 208 | } |
| 209 | require.NoError(t, json.Unmarshal(recorder.Body.Bytes(), &rsp)) |
| 210 | require.Len(t, rsp.Data.Cluster.Shards, 1) |
| 211 | require.Len(t, rsp.Data.Cluster.Shards[0].Nodes, 1) |
| 212 | require.Equal(t, testNodeAddr, rsp.Data.Cluster.Shards[0].Nodes[0].Addr()) |
| 213 | } |
| 214 | |
| 215 | func TestClusterMigrateData(t *testing.T) { |
| 216 | ns := "test-ns" |
nothing calls this directly
no test coverage detected