diff --git a/.changelog/11644.txt b/.changelog/11644.txt new file mode 100644 index 000000000000..0980926fa1d2 --- /dev/null +++ b/.changelog/11644.txt @@ -0,0 +1,3 @@ +```release-note:improvement +api: Improve error message returned by `Operator.LicenseGet` +``` diff --git a/api/operator.go b/api/operator.go index 439fabe052e2..c3343c5e4ce8 100644 --- a/api/operator.go +++ b/api/operator.go @@ -3,6 +3,7 @@ package api import ( "encoding/json" "errors" + "fmt" "io" "io/ioutil" "strconv" @@ -338,6 +339,11 @@ func (op *Operator) LicenseGet(q *QueryOptions) (*LicenseReply, *QueryMeta, erro return nil, nil, errors.New("Nomad Enterprise only endpoint") } + if resp.StatusCode != 200 { + body, _ := io.ReadAll(resp.Body) + return nil, nil, fmt.Errorf("Unexpected response code: %d (%s)", resp.StatusCode, body) + } + err = json.NewDecoder(resp.Body).Decode(&reply) if err != nil { return nil, nil, err diff --git a/api/operator_ent_test.go b/api/operator_ent_test.go new file mode 100644 index 000000000000..6be12845b41c --- /dev/null +++ b/api/operator_ent_test.go @@ -0,0 +1,28 @@ +//go:build ent +// +build ent + +package api + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +func TestOperator_LicenseGet(t *testing.T) { + t.Parallel() + c, s, _ := makeACLClient(t, nil, nil) + defer s.Stop() + + operator := c.Operator() + + // Make authenticated request. + _, _, err := operator.LicenseGet(nil) + require.NoError(t, err) + + // Make unauthenticated request. + c.SetSecretID("") + _, _, err = operator.LicenseGet(nil) + require.Error(t, err) + require.Contains(t, err.Error(), "403") +}