fix: Accept bucket ID or bucket name arguments (#151)

* fix: Accept bucket ID or bucket name arguments

* chore: Change order, prioritising bucket ID over bucket name argument

* fix: Ensure name or ID is used to print error
This commit is contained in:
Stuart Carnie
2021-06-29 08:52:34 +10:00
committed by GitHub
parent a058fe7e0b
commit 8adffc2bca
4 changed files with 231 additions and 72 deletions

View File

@ -40,11 +40,7 @@ func (c Client) resolveMeasurement(ctx context.Context, ids orgBucketID, name st
} }
func (c Client) resolveOrgBucketIds(ctx context.Context, params clients.OrgBucketParams) (*orgBucketID, error) { func (c Client) resolveOrgBucketIds(ctx context.Context, params clients.OrgBucketParams) (*orgBucketID, error) {
if params.OrgID.Valid() && params.BucketID.Valid() { if params.BucketName == "" && !params.BucketID.Valid() {
return &orgBucketID{OrgID: params.OrgID.String(), BucketID: params.BucketID.String()}, nil
}
if params.BucketName == "" {
return nil, errors.New("bucket missing: specify bucket ID or bucket name") return nil, errors.New("bucket missing: specify bucket ID or bucket name")
} }
@ -52,7 +48,15 @@ func (c Client) resolveOrgBucketIds(ctx context.Context, params clients.OrgBucke
return nil, errors.New("org missing: specify org ID or org name") return nil, errors.New("org missing: specify org ID or org name")
} }
req := c.GetBuckets(ctx).Name(params.BucketName) req := c.GetBuckets(ctx)
var nameID string
if params.BucketID.Valid() {
req = req.Id(params.BucketID.String())
nameID = params.BucketID.String()
} else {
req = req.Name(params.BucketName)
nameID = params.BucketName
}
if params.OrgID.Valid() { if params.OrgID.Valid() {
req = req.OrgID(params.OrgID.String()) req = req.OrgID(params.OrgID.String())
} else if params.OrgName != "" { } else if params.OrgName != "" {
@ -63,11 +67,11 @@ func (c Client) resolveOrgBucketIds(ctx context.Context, params clients.OrgBucke
resp, err := req.Execute() resp, err := req.Execute()
if err != nil { if err != nil {
return nil, fmt.Errorf("failed to find bucket %q: %w", params.BucketName, err) return nil, fmt.Errorf("failed to find bucket %q: %w", nameID, err)
} }
buckets := resp.GetBuckets() buckets := resp.GetBuckets()
if len(buckets) == 0 { if len(buckets) == 0 {
return nil, fmt.Errorf("bucket %q not found", params.BucketName) return nil, fmt.Errorf("bucket %q not found", nameID)
} }
return &orgBucketID{OrgID: buckets[0].GetOrgID(), BucketID: buckets[0].GetId()}, nil return &orgBucketID{OrgID: buckets[0].GetOrgID(), BucketID: buckets[0].GetId()}, nil

View File

@ -3,6 +3,7 @@ package bucket_schema_test
import ( import (
"bytes" "bytes"
"context" "context"
"fmt"
"os" "os"
"path/filepath" "path/filepath"
"strings" "strings"
@ -16,6 +17,7 @@ import (
"github.com/influxdata/influx-cli/v2/clients/bucket_schema" "github.com/influxdata/influx-cli/v2/clients/bucket_schema"
"github.com/influxdata/influx-cli/v2/internal/mock" "github.com/influxdata/influx-cli/v2/internal/mock"
"github.com/influxdata/influx-cli/v2/internal/testutils" "github.com/influxdata/influx-cli/v2/internal/testutils"
"github.com/influxdata/influx-cli/v2/pkg/influxid"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
tmock "github.com/stretchr/testify/mock" tmock "github.com/stretchr/testify/mock"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
@ -25,9 +27,9 @@ func TestClient_Create(t *testing.T) {
t.Parallel() t.Parallel()
var ( var (
orgID = "dead" orgID = influxid.MustIDFromString("deadf00dbaadf00d")
bucketID = "f00d" bucketID = influxid.MustIDFromString("f00ddeadf00dbaad")
measurementID = "1010" measurementID = influxid.MustIDFromString("1010f00ddeedfeed")
createdAt = time.Date(2004, 4, 9, 2, 15, 0, 0, time.UTC) createdAt = time.Date(2004, 4, 9, 2, 15, 0, 0, time.UTC)
) )
@ -44,7 +46,9 @@ func TestClient_Create(t *testing.T) {
type args struct { type args struct {
OrgName string OrgName string
OrgID influxid.ID
BucketName string BucketName string
BucketID influxid.ID
Name string Name string
ColumnsFile string ColumnsFile string
ExtendedOutput bool ExtendedOutput bool
@ -60,8 +64,8 @@ func TestClient_Create(t *testing.T) {
a.params = bucket_schema.CreateParams{ a.params = bucket_schema.CreateParams{
OrgBucketParams: clients.OrgBucketParams{ OrgBucketParams: clients.OrgBucketParams{
OrgParams: clients.OrgParams{OrgName: args.OrgName}, OrgParams: clients.OrgParams{OrgName: args.OrgName, OrgID: args.OrgID},
BucketParams: clients.BucketParams{BucketName: args.BucketName}, BucketParams: clients.BucketParams{BucketName: args.BucketName, BucketID: args.BucketID},
}, },
Name: args.Name, Name: args.Name,
ColumnsFile: colFile, ColumnsFile: colFile,
@ -77,8 +81,8 @@ func TestClient_Create(t *testing.T) {
var buckets []api.Bucket var buckets []api.Bucket
if len(n) == 1 { if len(n) == 1 {
bucket := api.NewBucket(n[0], nil) bucket := api.NewBucket(n[0], nil)
bucket.SetOrgID(orgID) bucket.SetOrgID(orgID.String())
bucket.SetId(bucketID) bucket.SetId(bucketID.String())
bucket.SetName(n[0]) bucket.SetName(n[0])
buckets = []api.Bucket{*bucket} buckets = []api.Bucket{*bucket}
} }
@ -91,7 +95,11 @@ func TestClient_Create(t *testing.T) {
a.buckets.EXPECT(). a.buckets.EXPECT().
GetBucketsExecute(tmock.MatchedBy(func(in api.ApiGetBucketsRequest) bool { GetBucketsExecute(tmock.MatchedBy(func(in api.ApiGetBucketsRequest) bool {
return cmp.Equal(in.GetOrg(), &a.params.OrgName) && cmp.Equal(in.GetName(), &a.params.BucketName) matchOrg := (in.GetOrg() != nil && *in.GetOrg() == a.params.OrgName) ||
(in.GetOrgID() != nil && a.params.OrgID.Valid() && *in.GetOrgID() == a.params.OrgID.String())
matchBucket := (in.GetName() != nil && *in.GetName() == a.params.BucketName) ||
(in.GetId() != nil && a.params.BucketID.Valid() && *in.GetId() == a.params.BucketID.String())
return matchOrg && matchBucket
})). })).
Return(api.Buckets{Buckets: &buckets}, nil) Return(api.Buckets{Buckets: &buckets}, nil)
} }
@ -115,18 +123,19 @@ func TestClient_Create(t *testing.T) {
return func(t *testing.T, a *setupArgs) { return func(t *testing.T, a *setupArgs) {
t.Helper() t.Helper()
req := api.ApiCreateMeasurementSchemaRequest{ApiService: a.schemas}.BucketID(bucketID) req := api.ApiCreateMeasurementSchemaRequest{ApiService: a.schemas}.BucketID(bucketID.String())
a.schemas.EXPECT(). a.schemas.EXPECT().
CreateMeasurementSchema(gomock.Any(), bucketID). CreateMeasurementSchema(gomock.Any(), bucketID.String()).
Return(req) Return(req)
a.schemas.EXPECT(). a.schemas.EXPECT().
CreateMeasurementSchemaExecute(tmock.MatchedBy(func(in api.ApiCreateMeasurementSchemaRequest) bool { CreateMeasurementSchemaExecute(tmock.MatchedBy(func(in api.ApiCreateMeasurementSchemaRequest) bool {
return cmp.Equal(in.GetOrgID(), &orgID) && cmp.Equal(in.GetBucketID(), bucketID) orgIDPtr := orgID.String()
return cmp.Equal(in.GetOrgID(), &orgIDPtr) && cmp.Equal(in.GetBucketID(), bucketID.String())
})). })).
Return(api.MeasurementSchema{ Return(api.MeasurementSchema{
Id: measurementID, Id: measurementID.String(),
Name: a.params.Name, Name: a.params.Name,
Columns: a.cols, Columns: a.cols,
CreatedAt: createdAt, CreatedAt: createdAt,
@ -172,7 +181,7 @@ func TestClient_Create(t *testing.T) {
expErr: `bucket "my-bucket" not found`, expErr: `bucket "my-bucket" not found`,
}, },
{ {
name: "create succeeds with csv", name: "create succeeds with csv using org name and bucket name",
opts: opts( opts: opts(
withArgs(args{OrgName: "my-org", BucketName: "my-bucket", Name: "cpu", ColumnsFile: "columns.csv"}), withArgs(args{OrgName: "my-org", BucketName: "my-bucket", Name: "cpu", ColumnsFile: "columns.csv"}),
withCols("columns.csv"), withCols("columns.csv"),
@ -181,7 +190,46 @@ func TestClient_Create(t *testing.T) {
), ),
expLines: lines( expLines: lines(
`^ID\s+Measurement Name\s+Bucket ID$`, `^ID\s+Measurement Name\s+Bucket ID$`,
`^1010\s+cpu\s+f00d$`, fmt.Sprintf(`^%s\s+cpu\s+%s`, measurementID, bucketID),
),
},
{
name: "create succeeds with csv using org id and bucket name",
opts: opts(
withArgs(args{OrgID: orgID, BucketName: "my-bucket", Name: "cpu", ColumnsFile: "columns.csv"}),
withCols("columns.csv"),
expGetBuckets("my-bucket"),
expCreate(),
),
expLines: lines(
`^ID\s+Measurement Name\s+Bucket ID$`,
fmt.Sprintf(`^%s\s+cpu\s+%s`, measurementID, bucketID),
),
},
{
name: "create succeeds with csv using org name and bucket id",
opts: opts(
withArgs(args{OrgName: "my-org", BucketID: bucketID, Name: "cpu", ColumnsFile: "columns.csv"}),
withCols("columns.csv"),
expGetBuckets("my-bucket"),
expCreate(),
),
expLines: lines(
`^ID\s+Measurement Name\s+Bucket ID$`,
fmt.Sprintf(`^%s\s+cpu\s+%s`, measurementID, bucketID),
),
},
{
name: "create succeeds with csv using org id and bucket id",
opts: opts(
withArgs(args{OrgID: orgID, BucketID: bucketID, Name: "cpu", ColumnsFile: "columns.csv"}),
withCols("columns.csv"),
expGetBuckets("my-bucket"),
expCreate(),
),
expLines: lines(
`^ID\s+Measurement Name\s+Bucket ID$`,
fmt.Sprintf(`^%s\s+cpu\s+%s`, measurementID, bucketID),
), ),
}, },
{ {
@ -194,7 +242,7 @@ func TestClient_Create(t *testing.T) {
), ),
expLines: lines( expLines: lines(
`^ID\s+Measurement Name\s+Bucket ID$`, `^ID\s+Measurement Name\s+Bucket ID$`,
`^1010\s+cpu\s+f00d$`, fmt.Sprintf(`^%s\s+cpu\s+%s`, measurementID, bucketID),
), ),
}, },
{ {
@ -207,7 +255,7 @@ func TestClient_Create(t *testing.T) {
), ),
expLines: lines( expLines: lines(
`^ID\s+Measurement Name\s+Bucket ID$`, `^ID\s+Measurement Name\s+Bucket ID$`,
`^1010\s+cpu\s+f00d$`, fmt.Sprintf(`^%s\s+cpu\s+%s`, measurementID, bucketID),
), ),
}, },
{ {
@ -220,9 +268,9 @@ func TestClient_Create(t *testing.T) {
), ),
expLines: lines( expLines: lines(
`^ID\s+Measurement Name\s+Column Name\s+Column Type\s+Column Data Type\s+Bucket ID$`, `^ID\s+Measurement Name\s+Column Name\s+Column Type\s+Column Data Type\s+Bucket ID$`,
`^1010\s+cpu\s+time\s+timestamp\s+f00d$`, fmt.Sprintf(`^%s\s+cpu\s+time\s+timestamp\s+%s$`, measurementID, bucketID),
`^1010\s+cpu\s+host\s+tag\s+f00d$`, fmt.Sprintf(`^%s\s+cpu\s+host\s+tag\s+%s$`, measurementID, bucketID),
`^1010\s+cpu\s+usage_user\s+field\s+float\s+f00d$`, fmt.Sprintf(`^%s\s+cpu\s+usage_user\s+field\s+float\s+%s$`, measurementID, bucketID),
), ),
}, },
} }

View File

@ -3,6 +3,7 @@ package bucket_schema_test
import ( import (
"bytes" "bytes"
"context" "context"
"fmt"
"os" "os"
"path/filepath" "path/filepath"
"strings" "strings"
@ -15,6 +16,7 @@ import (
"github.com/influxdata/influx-cli/v2/clients/bucket_schema" "github.com/influxdata/influx-cli/v2/clients/bucket_schema"
"github.com/influxdata/influx-cli/v2/internal/mock" "github.com/influxdata/influx-cli/v2/internal/mock"
"github.com/influxdata/influx-cli/v2/internal/testutils" "github.com/influxdata/influx-cli/v2/internal/testutils"
"github.com/influxdata/influx-cli/v2/pkg/influxid"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
tmock "github.com/stretchr/testify/mock" tmock "github.com/stretchr/testify/mock"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
@ -24,9 +26,9 @@ func TestClient_List(t *testing.T) {
t.Parallel() t.Parallel()
var ( var (
orgID = "dead" orgID = influxid.MustIDFromString("deadf00dbaadf00d")
bucketID = "f00d" bucketID = influxid.MustIDFromString("f00ddeadf00dbaad")
measurementID = "1010" measurementID = influxid.MustIDFromString("1010f00ddeedfeed")
createdAt = time.Date(2004, 4, 9, 2, 15, 0, 0, time.UTC) createdAt = time.Date(2004, 4, 9, 2, 15, 0, 0, time.UTC)
updatedAt = time.Date(2009, 9, 1, 2, 15, 0, 0, time.UTC) updatedAt = time.Date(2009, 9, 1, 2, 15, 0, 0, time.UTC)
) )
@ -44,7 +46,9 @@ func TestClient_List(t *testing.T) {
type args struct { type args struct {
OrgName string OrgName string
OrgID influxid.ID
BucketName string BucketName string
BucketID influxid.ID
Name string Name string
ExtendedOutput bool ExtendedOutput bool
} }
@ -54,8 +58,8 @@ func TestClient_List(t *testing.T) {
t.Helper() t.Helper()
a.params = bucket_schema.ListParams{ a.params = bucket_schema.ListParams{
OrgBucketParams: clients.OrgBucketParams{ OrgBucketParams: clients.OrgBucketParams{
OrgParams: clients.OrgParams{OrgName: args.OrgName}, OrgParams: clients.OrgParams{OrgName: args.OrgName, OrgID: args.OrgID},
BucketParams: clients.BucketParams{BucketName: args.BucketName}, BucketParams: clients.BucketParams{BucketName: args.BucketName, BucketID: args.BucketID},
}, },
Name: args.Name, Name: args.Name,
ExtendedOutput: args.ExtendedOutput, ExtendedOutput: args.ExtendedOutput,
@ -70,8 +74,8 @@ func TestClient_List(t *testing.T) {
var buckets []api.Bucket var buckets []api.Bucket
if len(n) == 1 { if len(n) == 1 {
bucket := api.NewBucket(n[0], nil) bucket := api.NewBucket(n[0], nil)
bucket.SetOrgID(orgID) bucket.SetOrgID(orgID.String())
bucket.SetId(bucketID) bucket.SetId(bucketID.String())
bucket.SetName(n[0]) bucket.SetName(n[0])
buckets = []api.Bucket{*bucket} buckets = []api.Bucket{*bucket}
} }
@ -84,8 +88,11 @@ func TestClient_List(t *testing.T) {
a.buckets.EXPECT(). a.buckets.EXPECT().
GetBucketsExecute(tmock.MatchedBy(func(in api.ApiGetBucketsRequest) bool { GetBucketsExecute(tmock.MatchedBy(func(in api.ApiGetBucketsRequest) bool {
return (in.GetOrg() != nil && *in.GetOrg() == a.params.OrgName) && matchOrg := (in.GetOrg() != nil && *in.GetOrg() == a.params.OrgName) ||
(in.GetName() != nil && *in.GetName() == a.params.BucketName) (in.GetOrgID() != nil && a.params.OrgID.Valid() && *in.GetOrgID() == a.params.OrgID.String())
matchBucket := (in.GetName() != nil && *in.GetName() == a.params.BucketName) ||
(in.GetId() != nil && a.params.BucketID.Valid() && *in.GetId() == a.params.BucketID.String())
return matchOrg && matchBucket
})). })).
Return(api.Buckets{Buckets: &buckets}, nil) Return(api.Buckets{Buckets: &buckets}, nil)
} }
@ -109,22 +116,22 @@ func TestClient_List(t *testing.T) {
return func(t *testing.T, a *setupArgs) { return func(t *testing.T, a *setupArgs) {
t.Helper() t.Helper()
req := api.ApiGetMeasurementSchemasRequest{ApiService: a.schemas}.BucketID(bucketID) req := api.ApiGetMeasurementSchemasRequest{ApiService: a.schemas}.BucketID(bucketID.String())
a.schemas.EXPECT(). a.schemas.EXPECT().
GetMeasurementSchemas(gomock.Any(), bucketID). GetMeasurementSchemas(gomock.Any(), bucketID.String()).
Return(req) Return(req)
a.schemas.EXPECT(). a.schemas.EXPECT().
GetMeasurementSchemasExecute(tmock.MatchedBy(func(in api.ApiGetMeasurementSchemasRequest) bool { GetMeasurementSchemasExecute(tmock.MatchedBy(func(in api.ApiGetMeasurementSchemasRequest) bool {
return (in.GetOrgID() != nil && *in.GetOrgID() == orgID) && return (in.GetOrgID() != nil && *in.GetOrgID() == orgID.String()) &&
in.GetBucketID() == bucketID && in.GetBucketID() == bucketID.String() &&
(in.GetName() != nil && *in.GetName() == a.params.Name) (in.GetName() != nil && *in.GetName() == a.params.Name)
})). })).
Return(api.MeasurementSchemaList{ Return(api.MeasurementSchemaList{
MeasurementSchemas: []api.MeasurementSchema{ MeasurementSchemas: []api.MeasurementSchema{
{ {
Id: measurementID, Id: measurementID.String(),
Name: a.params.Name, Name: a.params.Name,
Columns: a.cols, Columns: a.cols,
CreatedAt: createdAt, CreatedAt: createdAt,
@ -153,7 +160,7 @@ func TestClient_List(t *testing.T) {
expErr: "org missing: specify org ID or org name", expErr: "org missing: specify org ID or org name",
}, },
{ {
name: "bucket arg missing", name: "bucket args missing",
opts: opts( opts: opts(
withArgs(args{OrgName: "my-org"}), withArgs(args{OrgName: "my-org"}),
), ),
@ -168,7 +175,15 @@ func TestClient_List(t *testing.T) {
expErr: `bucket "my-bucket" not found`, expErr: `bucket "my-bucket" not found`,
}, },
{ {
name: "list succeeds", name: "bucket not found by id",
opts: opts(
withArgs(args{OrgName: "my-org", BucketID: influxid.MustIDFromString("baadf00d7777deed")}),
expGetBuckets(),
),
expErr: `bucket "baadf00d7777deed" not found`,
},
{
name: "list succeeds with org name and bucket name",
opts: opts( opts: opts(
withArgs(args{OrgName: "my-org", BucketName: "my-bucket", Name: "cpu"}), withArgs(args{OrgName: "my-org", BucketName: "my-bucket", Name: "cpu"}),
withCols("columns.csv"), withCols("columns.csv"),
@ -177,7 +192,46 @@ func TestClient_List(t *testing.T) {
), ),
expLines: lines( expLines: lines(
`^ID\s+Measurement Name\s+Bucket ID$`, `^ID\s+Measurement Name\s+Bucket ID$`,
`^1010\s+cpu\s+f00d$`, fmt.Sprintf(`^%s\s+cpu\s+%s`, measurementID, bucketID),
),
},
{
name: "list succeeds with org id and bucket name",
opts: opts(
withArgs(args{OrgID: orgID, BucketName: "my-bucket", Name: "cpu"}),
withCols("columns.csv"),
expGetBuckets("my-bucket"),
expGetMeasurementSchemas(),
),
expLines: lines(
`^ID\s+Measurement Name\s+Bucket ID$`,
fmt.Sprintf(`^%s\s+cpu\s+%s`, measurementID, bucketID),
),
},
{
name: "list succeeds with org name and bucket id",
opts: opts(
withArgs(args{OrgName: "my-org", BucketID: bucketID, Name: "cpu"}),
withCols("columns.csv"),
expGetBuckets("my-bucket"),
expGetMeasurementSchemas(),
),
expLines: lines(
`^ID\s+Measurement Name\s+Bucket ID$`,
fmt.Sprintf(`^%s\s+cpu\s+%s`, measurementID, bucketID),
),
},
{
name: "list succeeds with org id and bucket id",
opts: opts(
withArgs(args{OrgID: orgID, BucketID: bucketID, Name: "cpu"}),
withCols("columns.csv"),
expGetBuckets("my-bucket"),
expGetMeasurementSchemas(),
),
expLines: lines(
`^ID\s+Measurement Name\s+Bucket ID$`,
fmt.Sprintf(`^%s\s+cpu\s+%s`, measurementID, bucketID),
), ),
}, },
{ {
@ -190,9 +244,9 @@ func TestClient_List(t *testing.T) {
), ),
expLines: lines( expLines: lines(
`^ID\s+Measurement Name\s+Column Name\s+Column Type\s+Column Data Type\s+Bucket ID$`, `^ID\s+Measurement Name\s+Column Name\s+Column Type\s+Column Data Type\s+Bucket ID$`,
`^1010\s+cpu\s+time\s+timestamp\s+f00d$`, fmt.Sprintf(`^%s\s+cpu\s+time\s+timestamp\s+%s`, measurementID, bucketID),
`^1010\s+cpu\s+host\s+tag\s+f00d$`, fmt.Sprintf(`^%s\s+cpu\s+host\s+tag\s+%s`, measurementID, bucketID),
`^1010\s+cpu\s+usage_user\s+field\s+float\s+f00d$`, fmt.Sprintf(`^%s\s+cpu\s+usage_user\s+field\s+float\s+%s`, measurementID, bucketID),
), ),
}, },
} }

View File

@ -3,6 +3,7 @@ package bucket_schema_test
import ( import (
"bytes" "bytes"
"context" "context"
"fmt"
"os" "os"
"path/filepath" "path/filepath"
"strings" "strings"
@ -16,6 +17,7 @@ import (
"github.com/influxdata/influx-cli/v2/clients/bucket_schema" "github.com/influxdata/influx-cli/v2/clients/bucket_schema"
"github.com/influxdata/influx-cli/v2/internal/mock" "github.com/influxdata/influx-cli/v2/internal/mock"
"github.com/influxdata/influx-cli/v2/internal/testutils" "github.com/influxdata/influx-cli/v2/internal/testutils"
"github.com/influxdata/influx-cli/v2/pkg/influxid"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
tmock "github.com/stretchr/testify/mock" tmock "github.com/stretchr/testify/mock"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
@ -25,9 +27,9 @@ func TestClient_Update(t *testing.T) {
t.Parallel() t.Parallel()
var ( var (
orgID = "dead" orgID = influxid.MustIDFromString("deadf00dbaadf00d")
bucketID = "f00d" bucketID = influxid.MustIDFromString("f00ddeadf00dbaad")
measurementID = "1010" measurementID = influxid.MustIDFromString("1010f00ddeedfeed")
createdAt = time.Date(2004, 4, 9, 2, 15, 0, 0, time.UTC) createdAt = time.Date(2004, 4, 9, 2, 15, 0, 0, time.UTC)
updatedAt = time.Date(2009, 9, 1, 2, 15, 0, 0, time.UTC) updatedAt = time.Date(2009, 9, 1, 2, 15, 0, 0, time.UTC)
) )
@ -45,7 +47,9 @@ func TestClient_Update(t *testing.T) {
type args struct { type args struct {
OrgName string OrgName string
OrgID influxid.ID
BucketName string BucketName string
BucketID influxid.ID
Name string Name string
ColumnsFile string ColumnsFile string
ExtendedOutput bool ExtendedOutput bool
@ -61,8 +65,8 @@ func TestClient_Update(t *testing.T) {
a.params = bucket_schema.UpdateParams{ a.params = bucket_schema.UpdateParams{
OrgBucketParams: clients.OrgBucketParams{ OrgBucketParams: clients.OrgBucketParams{
OrgParams: clients.OrgParams{OrgName: args.OrgName}, OrgParams: clients.OrgParams{OrgName: args.OrgName, OrgID: args.OrgID},
BucketParams: clients.BucketParams{BucketName: args.BucketName}, BucketParams: clients.BucketParams{BucketName: args.BucketName, BucketID: args.BucketID},
}, },
Name: args.Name, Name: args.Name,
ColumnsFile: colFile, ColumnsFile: colFile,
@ -78,8 +82,8 @@ func TestClient_Update(t *testing.T) {
var buckets []api.Bucket var buckets []api.Bucket
if len(n) == 1 { if len(n) == 1 {
bucket := api.NewBucket(n[0], nil) bucket := api.NewBucket(n[0], nil)
bucket.SetOrgID(orgID) bucket.SetOrgID(orgID.String())
bucket.SetId(bucketID) bucket.SetId(bucketID.String())
bucket.SetName(n[0]) bucket.SetName(n[0])
buckets = []api.Bucket{*bucket} buckets = []api.Bucket{*bucket}
} }
@ -92,8 +96,11 @@ func TestClient_Update(t *testing.T) {
a.buckets.EXPECT(). a.buckets.EXPECT().
GetBucketsExecute(tmock.MatchedBy(func(in api.ApiGetBucketsRequest) bool { GetBucketsExecute(tmock.MatchedBy(func(in api.ApiGetBucketsRequest) bool {
return (in.GetOrg() != nil && *in.GetOrg() == a.params.OrgName) && matchOrg := (in.GetOrg() != nil && *in.GetOrg() == a.params.OrgName) ||
(in.GetName() != nil && *in.GetName() == a.params.BucketName) (in.GetOrgID() != nil && a.params.OrgID.Valid() && *in.GetOrgID() == a.params.OrgID.String())
matchBucket := (in.GetName() != nil && *in.GetName() == a.params.BucketName) ||
(in.GetId() != nil && a.params.BucketID.Valid() && *in.GetId() == a.params.BucketID.String())
return matchOrg && matchBucket
})). })).
Return(api.Buckets{Buckets: &buckets}, nil) Return(api.Buckets{Buckets: &buckets}, nil)
} }
@ -117,22 +124,22 @@ func TestClient_Update(t *testing.T) {
return func(t *testing.T, a *setupArgs) { return func(t *testing.T, a *setupArgs) {
t.Helper() t.Helper()
req := api.ApiGetMeasurementSchemasRequest{ApiService: a.schemas}.BucketID(bucketID) req := api.ApiGetMeasurementSchemasRequest{ApiService: a.schemas}.BucketID(bucketID.String())
a.schemas.EXPECT(). a.schemas.EXPECT().
GetMeasurementSchemas(gomock.Any(), bucketID). GetMeasurementSchemas(gomock.Any(), bucketID.String()).
Return(req) Return(req)
a.schemas.EXPECT(). a.schemas.EXPECT().
GetMeasurementSchemasExecute(tmock.MatchedBy(func(in api.ApiGetMeasurementSchemasRequest) bool { GetMeasurementSchemasExecute(tmock.MatchedBy(func(in api.ApiGetMeasurementSchemasRequest) bool {
return (in.GetOrgID() != nil && *in.GetOrgID() == orgID) && return (in.GetOrgID() != nil && *in.GetOrgID() == orgID.String()) &&
in.GetBucketID() == bucketID && in.GetBucketID() == bucketID.String() &&
(in.GetName() != nil && *in.GetName() == a.params.Name) (in.GetName() != nil && *in.GetName() == a.params.Name)
})). })).
Return(api.MeasurementSchemaList{ Return(api.MeasurementSchemaList{
MeasurementSchemas: []api.MeasurementSchema{ MeasurementSchemas: []api.MeasurementSchema{
{ {
Id: measurementID, Id: measurementID.String(),
Name: a.params.Name, Name: a.params.Name,
Columns: a.cols, Columns: a.cols,
CreatedAt: createdAt, CreatedAt: createdAt,
@ -147,21 +154,22 @@ func TestClient_Update(t *testing.T) {
return func(t *testing.T, a *setupArgs) { return func(t *testing.T, a *setupArgs) {
t.Helper() t.Helper()
req := api.ApiUpdateMeasurementSchemaRequest{ApiService: a.schemas}.BucketID(bucketID).MeasurementID(measurementID) req := api.ApiUpdateMeasurementSchemaRequest{ApiService: a.schemas}.BucketID(bucketID.String()).MeasurementID(measurementID.String())
a.schemas.EXPECT(). a.schemas.EXPECT().
UpdateMeasurementSchema(gomock.Any(), bucketID, measurementID). UpdateMeasurementSchema(gomock.Any(), bucketID.String(), measurementID.String()).
Return(req) Return(req)
a.schemas.EXPECT(). a.schemas.EXPECT().
UpdateMeasurementSchemaExecute(tmock.MatchedBy(func(in api.ApiUpdateMeasurementSchemaRequest) bool { UpdateMeasurementSchemaExecute(tmock.MatchedBy(func(in api.ApiUpdateMeasurementSchemaRequest) bool {
return cmp.Equal(in.GetOrgID(), &orgID) && orgIDPtr := orgID.String()
cmp.Equal(in.GetBucketID(), bucketID) && return cmp.Equal(in.GetOrgID(), &orgIDPtr) &&
cmp.Equal(in.GetMeasurementID(), measurementID) && cmp.Equal(in.GetBucketID(), bucketID.String()) &&
cmp.Equal(in.GetMeasurementID(), measurementID.String()) &&
cmp.Equal(in.GetMeasurementSchemaUpdateRequest().Columns, a.cols) cmp.Equal(in.GetMeasurementSchemaUpdateRequest().Columns, a.cols)
})). })).
Return(api.MeasurementSchema{ Return(api.MeasurementSchema{
Id: measurementID, Id: measurementID.String(),
Name: a.params.Name, Name: a.params.Name,
Columns: a.cols, Columns: a.cols,
CreatedAt: createdAt, CreatedAt: createdAt,
@ -207,7 +215,7 @@ func TestClient_Update(t *testing.T) {
expErr: `bucket "my-bucket" not found`, expErr: `bucket "my-bucket" not found`,
}, },
{ {
name: "update succeeds", name: "update succeeds with org name and bucket name",
opts: opts( opts: opts(
withArgs(args{OrgName: "my-org", BucketName: "my-bucket", Name: "cpu", ColumnsFile: "columns.csv"}), withArgs(args{OrgName: "my-org", BucketName: "my-bucket", Name: "cpu", ColumnsFile: "columns.csv"}),
withCols("columns.csv"), withCols("columns.csv"),
@ -218,7 +226,52 @@ func TestClient_Update(t *testing.T) {
), ),
expLines: lines( expLines: lines(
`^ID\s+Measurement Name\s+Bucket ID$`, `^ID\s+Measurement Name\s+Bucket ID$`,
`^1010\s+cpu\s+f00d$`, fmt.Sprintf(`^%s\s+cpu\s+%s$`, measurementID, bucketID),
),
},
{
name: "update succeeds with org id and bucket name",
opts: opts(
withArgs(args{OrgID: orgID, BucketName: "my-bucket", Name: "cpu", ColumnsFile: "columns.csv"}),
withCols("columns.csv"),
expGetBuckets("my-bucket"),
expGetMeasurementSchema(),
expUpdate(),
),
expLines: lines(
`^ID\s+Measurement Name\s+Bucket ID$`,
fmt.Sprintf(`^%s\s+cpu\s+%s$`, measurementID, bucketID),
),
},
{
name: "update succeeds with org id and bucket id",
opts: opts(
withArgs(args{OrgID: orgID, BucketID: bucketID, Name: "cpu", ColumnsFile: "columns.csv"}),
withCols("columns.csv"),
expGetBuckets("my-bucket"),
expGetMeasurementSchema(),
expUpdate(),
),
expLines: lines(
`^ID\s+Measurement Name\s+Bucket ID$`,
fmt.Sprintf(`^%s\s+cpu\s+%s$`, measurementID, bucketID),
),
},
{
name: "update succeeds with org name and bucket id",
opts: opts(
withArgs(args{OrgName: "my-org", BucketID: bucketID, Name: "cpu", ColumnsFile: "columns.csv"}),
withCols("columns.csv"),
expGetBuckets("my-bucket"),
expGetMeasurementSchema(),
expUpdate(),
),
expLines: lines(
`^ID\s+Measurement Name\s+Bucket ID$`,
fmt.Sprintf(`^%s\s+cpu\s+%s$`, measurementID, bucketID),
), ),
}, },
{ {
@ -232,9 +285,9 @@ func TestClient_Update(t *testing.T) {
), ),
expLines: lines( expLines: lines(
`^ID\s+Measurement Name\s+Column Name\s+Column Type\s+Column Data Type\s+Bucket ID$`, `^ID\s+Measurement Name\s+Column Name\s+Column Type\s+Column Data Type\s+Bucket ID$`,
`^1010\s+cpu\s+time\s+timestamp\s+f00d$`, fmt.Sprintf(`^%s\s+cpu\s+time\s+timestamp\s+%s$`, measurementID, bucketID),
`^1010\s+cpu\s+host\s+tag\s+f00d$`, fmt.Sprintf(`^%s\s+cpu\s+host\s+tag\s+%s$`, measurementID, bucketID),
`^1010\s+cpu\s+usage_user\s+field\s+float\s+f00d$`, fmt.Sprintf(`^%s\s+cpu\s+usage_user\s+field\s+float\s+%s$`, measurementID, bucketID),
), ),
}, },
} }