// Copyright (c) HashiCorp, Inc. // SPDX-License-Identifier: MPL-2.0 package api import ( "fmt" "strings" "testing" "github.com/stretchr/testify/require" "github.com/hashicorp/consul/sdk/testutil" ) type V2WriteRequest struct { Data map[string]any `json:"data"` } type V2WriteResponse struct { ID struct { Name string `json:"name"` } `json:"id"` Data map[string]any `json:"data"` } // We are testing a v2 endpoint here in the v1 api module as a temporary measure to // support v2 CRUD operations, until we have a final design for v2 api clients. func TestAPI_RawV2ExportedServices(t *testing.T) { t.Parallel() c, s := makeClientWithConfig(t, nil, func(conf *testutil.TestServerConfig) { conf.EnableDebug = true }) defer s.Stop() endpoint := strings.ToLower(fmt.Sprintf("/api/multicluster/v2/exportedservices/e1")) wResp := &V2WriteResponse{} wReq := &V2WriteRequest{ Data: map[string]any{ "consumers": []map[string]any{ {"peer": "p1"}, }, "services": []string{"s1"}, }, } _, err := c.Raw().Write(endpoint, wReq, wResp, &WriteOptions{Datacenter: "dc1"}) require.NoError(t, err) require.NotEmpty(t, wResp.ID.Name) qOpts := &QueryOptions{Datacenter: "dc1"} var out map[string]interface{} _, err = c.Raw().Query(endpoint, &out, qOpts) require.NoError(t, err) require.Equal(t, map[string]any{ "consumers": []any{ map[string]any{"peer": "p1"}, }, "services": []any{"s1"}, }, out["data"]) _, err = c.Raw().Delete(endpoint, qOpts) require.NoError(t, err) out = make(map[string]interface{}) _, err = c.Raw().Query(endpoint, &out, qOpts) require.ErrorContains(t, err, "404") }