feat(platform/id): using uint64 for platform.IDs
Signed-off-by: Leonardo Di Donato <leodidonato@gmail.com> Co-Authored-by: Lorenzo Fontana <lo@linux.com>pull/10616/head
parent
23a53d2d2e
commit
8d7f06cf4b
|
|
@ -1,7 +1,6 @@
|
|||
package bolt
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
|
|
@ -57,9 +56,13 @@ func (c *Client) FindAuthorizationByID(ctx context.Context, id platform.ID) (*pl
|
|||
}
|
||||
|
||||
func (c *Client) findAuthorizationByID(ctx context.Context, tx *bolt.Tx, id platform.ID) (*platform.Authorization, error) {
|
||||
var a platform.Authorization
|
||||
encodedID, err := id.Encode()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
v := tx.Bucket(authorizationBucket).Get(id)
|
||||
var a platform.Authorization
|
||||
v := tx.Bucket(authorizationBucket).Get(encodedID)
|
||||
|
||||
if len(v) == 0 {
|
||||
// TODO: Make standard error
|
||||
|
|
@ -94,14 +97,17 @@ func (c *Client) FindAuthorizationByToken(ctx context.Context, n string) (*platf
|
|||
}
|
||||
|
||||
func (c *Client) findAuthorizationByToken(ctx context.Context, tx *bolt.Tx, n string) (*platform.Authorization, error) {
|
||||
id := tx.Bucket(authorizationIndex).Get(authorizationIndexKey(n))
|
||||
return c.findAuthorizationByID(ctx, tx, platform.ID(id))
|
||||
var id platform.ID
|
||||
if err := id.Decode(tx.Bucket(authorizationIndex).Get(authorizationIndexKey(n))); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return c.findAuthorizationByID(ctx, tx, id)
|
||||
}
|
||||
|
||||
func filterAuthorizationsFn(filter platform.AuthorizationFilter) func(a *platform.Authorization) bool {
|
||||
if filter.ID != nil {
|
||||
return func(a *platform.Authorization) bool {
|
||||
return bytes.Equal(a.ID, *filter.ID)
|
||||
return a.ID.Valid() && a.ID == *filter.ID
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -113,7 +119,7 @@ func filterAuthorizationsFn(filter platform.AuthorizationFilter) func(a *platfor
|
|||
|
||||
if filter.UserID != nil {
|
||||
return func(a *platform.Authorization) bool {
|
||||
return bytes.Equal(a.UserID, *filter.UserID)
|
||||
return a.UserID.Valid() && a.UserID == *filter.UserID
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -187,7 +193,7 @@ func (c *Client) findAuthorizations(ctx context.Context, tx *bolt.Tx, f platform
|
|||
// CreateAuthorization creates a platform authorization and sets b.ID, and b.UserID if not provided.
|
||||
func (c *Client) CreateAuthorization(ctx context.Context, a *platform.Authorization) error {
|
||||
return c.db.Update(func(tx *bolt.Tx) error {
|
||||
if len(a.UserID) == 0 {
|
||||
if !a.UserID.Valid() {
|
||||
u, err := c.findUserByName(ctx, tx, a.User)
|
||||
if err != nil {
|
||||
return err
|
||||
|
|
@ -239,10 +245,15 @@ func (c *Client) putAuthorization(ctx context.Context, tx *bolt.Tx, a *platform.
|
|||
return err
|
||||
}
|
||||
|
||||
if err := tx.Bucket(authorizationIndex).Put(authorizationIndexKey(a.Token), a.ID); err != nil {
|
||||
encodedID, err := a.ID.Encode()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if err := tx.Bucket(authorizationBucket).Put(a.ID, v); err != nil {
|
||||
|
||||
if err := tx.Bucket(authorizationIndex).Put(authorizationIndexKey(a.Token), encodedID); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := tx.Bucket(authorizationBucket).Put(encodedID, v); err != nil {
|
||||
return err
|
||||
}
|
||||
return c.setUserOnAuthorization(ctx, tx, a)
|
||||
|
|
@ -302,7 +313,12 @@ func (c *Client) deleteAuthorization(ctx context.Context, tx *bolt.Tx, id platfo
|
|||
if err := tx.Bucket(authorizationIndex).Delete(authorizationIndexKey(a.Token)); err != nil {
|
||||
return err
|
||||
}
|
||||
return tx.Bucket(authorizationBucket).Delete(id)
|
||||
encodedID, err := id.Encode()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return tx.Bucket(authorizationBucket).Delete(encodedID)
|
||||
}
|
||||
|
||||
// SetAuthorizationStatus updates the status of the authorization. Useful
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
package bolt
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
|
|
@ -57,7 +56,12 @@ func (c *Client) FindBucketByID(ctx context.Context, id platform.ID) (*platform.
|
|||
func (c *Client) findBucketByID(ctx context.Context, tx *bolt.Tx, id platform.ID) (*platform.Bucket, error) {
|
||||
var b platform.Bucket
|
||||
|
||||
v := tx.Bucket(bucketBucket).Get(id)
|
||||
encodedID, err := id.Encode()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
v := tx.Bucket(bucketBucket).Get(encodedID)
|
||||
|
||||
if len(v) == 0 {
|
||||
// TODO: Make standard error
|
||||
|
|
@ -97,8 +101,16 @@ func (c *Client) findBucketByName(ctx context.Context, tx *bolt.Tx, orgID platfo
|
|||
OrganizationID: orgID,
|
||||
Name: n,
|
||||
}
|
||||
id := tx.Bucket(bucketIndex).Get(bucketIndexKey(b))
|
||||
return c.findBucketByID(ctx, tx, platform.ID(id))
|
||||
key, err := bucketIndexKey(b)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var id platform.ID
|
||||
if err := id.Decode(tx.Bucket(bucketIndex).Get(key)); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return c.findBucketByID(ctx, tx, id)
|
||||
}
|
||||
|
||||
// FindBucket retrives a bucket using an arbitrary bucket filter.
|
||||
|
|
@ -147,13 +159,13 @@ func (c *Client) FindBucket(ctx context.Context, filter platform.BucketFilter) (
|
|||
func filterBucketsFn(filter platform.BucketFilter) func(b *platform.Bucket) bool {
|
||||
if filter.ID != nil {
|
||||
return func(b *platform.Bucket) bool {
|
||||
return bytes.Equal(b.ID, *filter.ID)
|
||||
return b.ID == *filter.ID
|
||||
}
|
||||
}
|
||||
|
||||
if filter.Name != nil && filter.OrganizationID != nil {
|
||||
return func(b *platform.Bucket) bool {
|
||||
return bytes.Equal(b.OrganizationID, *filter.OrganizationID) && b.Name == *filter.Name
|
||||
return b.Name == *filter.Name && b.OrganizationID == *filter.OrganizationID
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -165,7 +177,7 @@ func filterBucketsFn(filter platform.BucketFilter) func(b *platform.Bucket) bool
|
|||
|
||||
if filter.OrganizationID != nil {
|
||||
return func(b *platform.Bucket) bool {
|
||||
return bytes.Equal(b.OrganizationID, *filter.OrganizationID)
|
||||
return b.OrganizationID == *filter.OrganizationID
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -239,7 +251,7 @@ func (c *Client) findBuckets(ctx context.Context, tx *bolt.Tx, filter platform.B
|
|||
// CreateBucket creates a platform bucket and sets b.ID.
|
||||
func (c *Client) CreateBucket(ctx context.Context, b *platform.Bucket) error {
|
||||
return c.db.Update(func(tx *bolt.Tx) error {
|
||||
if len(b.OrganizationID) == 0 {
|
||||
if !b.OrganizationID.Valid() {
|
||||
o, err := c.findOrganizationByName(ctx, tx, b.Organization)
|
||||
if err != nil {
|
||||
return err
|
||||
|
|
@ -273,20 +285,33 @@ func (c *Client) putBucket(ctx context.Context, tx *bolt.Tx, b *platform.Bucket)
|
|||
return err
|
||||
}
|
||||
|
||||
if err := tx.Bucket(bucketIndex).Put(bucketIndexKey(b), b.ID); err != nil {
|
||||
encodedID, err := b.ID.Encode()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if err := tx.Bucket(bucketBucket).Put(b.ID, v); err != nil {
|
||||
key, err := bucketIndexKey(b)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := tx.Bucket(bucketIndex).Put(key, encodedID); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := tx.Bucket(bucketBucket).Put(encodedID, v); err != nil {
|
||||
return err
|
||||
}
|
||||
return c.setOrganizationOnBucket(ctx, tx, b)
|
||||
}
|
||||
|
||||
func bucketIndexKey(b *platform.Bucket) []byte {
|
||||
k := make([]byte, len(b.OrganizationID)+len(b.Name))
|
||||
copy(k, b.OrganizationID)
|
||||
copy(k[len(b.OrganizationID):], []byte(b.Name))
|
||||
return k
|
||||
func bucketIndexKey(b *platform.Bucket) ([]byte, error) {
|
||||
orgID, err := b.OrganizationID.Encode()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
k := make([]byte, platform.IDStringLength+len(b.Name))
|
||||
copy(k, orgID)
|
||||
copy(k[platform.IDStringLength:], []byte(b.Name))
|
||||
return k, nil
|
||||
}
|
||||
|
||||
// forEachBucket will iterate through all buckets while fn returns true.
|
||||
|
|
@ -309,7 +334,11 @@ func (c *Client) forEachBucket(ctx context.Context, tx *bolt.Tx, fn func(*platfo
|
|||
}
|
||||
|
||||
func (c *Client) uniqueBucketName(ctx context.Context, tx *bolt.Tx, b *platform.Bucket) bool {
|
||||
v := tx.Bucket(bucketIndex).Get(bucketIndexKey(b))
|
||||
key, err := bucketIndexKey(b)
|
||||
if err != nil {
|
||||
return false
|
||||
}
|
||||
v := tx.Bucket(bucketIndex).Get(key)
|
||||
return len(v) == 0
|
||||
}
|
||||
|
||||
|
|
@ -339,9 +368,12 @@ func (c *Client) updateBucket(ctx context.Context, tx *bolt.Tx, id platform.ID,
|
|||
}
|
||||
|
||||
if upd.Name != nil {
|
||||
// Buckets are indexed by name and so the bucket index must be pruned when name
|
||||
// is modified.
|
||||
if err := tx.Bucket(bucketIndex).Delete(bucketIndexKey(b)); err != nil {
|
||||
key, err := bucketIndexKey(b)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
// Buckets are indexed by name and so the bucket index must be pruned when name is modified.
|
||||
if err := tx.Bucket(bucketIndex).Delete(key); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
b.Name = *upd.Name
|
||||
|
|
@ -370,9 +402,17 @@ func (c *Client) deleteBucket(ctx context.Context, tx *bolt.Tx, id platform.ID)
|
|||
if err != nil {
|
||||
return err
|
||||
}
|
||||
// make lowercase deleteBucket with tx
|
||||
if err := tx.Bucket(bucketIndex).Delete(bucketIndexKey(b)); err != nil {
|
||||
key, err := bucketIndexKey(b)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return tx.Bucket(bucketBucket).Delete(id)
|
||||
// make lowercase deleteBucket with tx
|
||||
if err := tx.Bucket(bucketIndex).Delete(key); err != nil {
|
||||
return err
|
||||
}
|
||||
encodedID, err := id.Encode()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return tx.Bucket(bucketBucket).Delete(encodedID)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -45,9 +45,13 @@ func (c *Client) FindDashboardByID(ctx context.Context, id platform.ID) (*platfo
|
|||
}
|
||||
|
||||
func (c *Client) findDashboardByID(ctx context.Context, tx *bolt.Tx, id platform.ID) (*platform.Dashboard, error) {
|
||||
var d platform.Dashboard
|
||||
encodedID, err := id.Encode()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
v := tx.Bucket(dashboardBucket).Get([]byte(id))
|
||||
var d platform.Dashboard
|
||||
v := tx.Bucket(dashboardBucket).Get(encodedID)
|
||||
|
||||
if len(v) == 0 {
|
||||
return nil, platform.ErrDashboardNotFound
|
||||
|
|
@ -326,7 +330,11 @@ func (c *Client) putDashboard(ctx context.Context, tx *bolt.Tx, d *platform.Dash
|
|||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if err := tx.Bucket(dashboardBucket).Put([]byte(d.ID), v); err != nil {
|
||||
encodedID, err := d.ID.Encode()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if err := tx.Bucket(dashboardBucket).Put(encodedID, v); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
|
|
@ -397,5 +405,9 @@ func (c *Client) deleteDashboard(ctx context.Context, tx *bolt.Tx, id platform.I
|
|||
return err
|
||||
}
|
||||
}
|
||||
return tx.Bucket(dashboardBucket).Delete([]byte(id))
|
||||
encodedID, err := id.Encode()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return tx.Bucket(dashboardBucket).Delete(encodedID)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
package bolt
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
|
|
@ -48,9 +47,13 @@ func (c *Client) FindOrganizationByID(ctx context.Context, id platform.ID) (*pla
|
|||
}
|
||||
|
||||
func (c *Client) findOrganizationByID(ctx context.Context, tx *bolt.Tx, id platform.ID) (*platform.Organization, error) {
|
||||
var o platform.Organization
|
||||
encodedID, err := id.Encode()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
v := tx.Bucket(organizationBucket).Get(id)
|
||||
var o platform.Organization
|
||||
v := tx.Bucket(organizationBucket).Get(encodedID)
|
||||
|
||||
if len(v) == 0 {
|
||||
// TODO: Make standard error
|
||||
|
|
@ -81,8 +84,11 @@ func (c *Client) FindOrganizationByName(ctx context.Context, n string) (*platfor
|
|||
}
|
||||
|
||||
func (c *Client) findOrganizationByName(ctx context.Context, tx *bolt.Tx, n string) (*platform.Organization, error) {
|
||||
id := tx.Bucket(organizationIndex).Get(organizationIndexKey(n))
|
||||
return c.findOrganizationByID(ctx, tx, platform.ID(id))
|
||||
var id platform.ID
|
||||
if err := id.Decode(tx.Bucket(organizationIndex).Get(organizationIndexKey(n))); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return c.findOrganizationByID(ctx, tx, id)
|
||||
}
|
||||
|
||||
// FindOrganization retrives a organization using an arbitrary organization filter.
|
||||
|
|
@ -124,7 +130,7 @@ func (c *Client) FindOrganization(ctx context.Context, filter platform.Organizat
|
|||
func filterOrganizationsFn(filter platform.OrganizationFilter) func(o *platform.Organization) bool {
|
||||
if filter.ID != nil {
|
||||
return func(o *platform.Organization) bool {
|
||||
return bytes.Equal(o.ID, *filter.ID)
|
||||
return o.ID.Valid() && o.ID == *filter.ID
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -205,11 +211,14 @@ func (c *Client) putOrganization(ctx context.Context, tx *bolt.Tx, o *platform.O
|
|||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := tx.Bucket(organizationIndex).Put(organizationIndexKey(o.Name), o.ID); err != nil {
|
||||
encodedID, err := o.ID.Encode()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return tx.Bucket(organizationBucket).Put(o.ID, v)
|
||||
if err := tx.Bucket(organizationIndex).Put(organizationIndexKey(o.Name), encodedID); err != nil {
|
||||
return err
|
||||
}
|
||||
return tx.Bucket(organizationBucket).Put(encodedID, v)
|
||||
}
|
||||
|
||||
func organizationIndexKey(n string) []byte {
|
||||
|
|
@ -292,7 +301,11 @@ func (c *Client) deleteOrganization(ctx context.Context, tx *bolt.Tx, id platfor
|
|||
if err := tx.Bucket(organizationIndex).Delete(organizationIndexKey(o.Name)); err != nil {
|
||||
return err
|
||||
}
|
||||
return tx.Bucket(organizationBucket).Delete(id)
|
||||
encodedID, err := id.Encode()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return tx.Bucket(organizationBucket).Delete(encodedID)
|
||||
}
|
||||
|
||||
func (c *Client) deleteOrganizationsBuckets(ctx context.Context, tx *bolt.Tx, id platform.ID) error {
|
||||
|
|
|
|||
|
|
@ -22,8 +22,8 @@ func initOrganizationService(f platformtesting.OrganizationFields, t *testing.T)
|
|||
}
|
||||
return c, func() {
|
||||
defer closeFn()
|
||||
for _, u := range f.Organizations {
|
||||
if err := c.DeleteOrganization(ctx, u.ID); err != nil {
|
||||
for _, o := range f.Organizations {
|
||||
if err := c.DeleteOrganization(ctx, o.ID); err != nil {
|
||||
t.Logf("failed to remove organizations: %v", err)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
34
bolt/user.go
34
bolt/user.go
|
|
@ -1,7 +1,6 @@
|
|||
package bolt
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
|
|
@ -55,9 +54,13 @@ func (c *Client) FindUserByID(ctx context.Context, id platform.ID) (*platform.Us
|
|||
}
|
||||
|
||||
func (c *Client) findUserByID(ctx context.Context, tx *bolt.Tx, id platform.ID) (*platform.User, error) {
|
||||
var u platform.User
|
||||
encodedID, err := id.Encode()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
v := tx.Bucket(userBucket).Get(id)
|
||||
var u platform.User
|
||||
v := tx.Bucket(userBucket).Get(encodedID)
|
||||
|
||||
if len(v) == 0 {
|
||||
// TODO: Make standard error
|
||||
|
|
@ -88,8 +91,11 @@ func (c *Client) FindUserByName(ctx context.Context, n string) (*platform.User,
|
|||
}
|
||||
|
||||
func (c *Client) findUserByName(ctx context.Context, tx *bolt.Tx, n string) (*platform.User, error) {
|
||||
id := tx.Bucket(userIndex).Get(userIndexKey(n))
|
||||
return c.findUserByID(ctx, tx, platform.ID(id))
|
||||
var id platform.ID
|
||||
if err := id.Decode(tx.Bucket(userIndex).Get(userIndexKey(n))); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return c.findUserByID(ctx, tx, id)
|
||||
}
|
||||
|
||||
// FindUser retrives a user using an arbitrary user filter.
|
||||
|
|
@ -131,7 +137,7 @@ func (c *Client) FindUser(ctx context.Context, filter platform.UserFilter) (*pla
|
|||
func filterUsersFn(filter platform.UserFilter) func(u *platform.User) bool {
|
||||
if filter.ID != nil {
|
||||
return func(u *platform.User) bool {
|
||||
return bytes.Equal(u.ID, *filter.ID)
|
||||
return u.ID.Valid() && u.ID == *filter.ID
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -212,11 +218,14 @@ func (c *Client) putUser(ctx context.Context, tx *bolt.Tx, u *platform.User) err
|
|||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := tx.Bucket(userIndex).Put(userIndexKey(u.Name), u.ID); err != nil {
|
||||
encodedID, err := u.ID.Encode()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return tx.Bucket(userBucket).Put(u.ID, v)
|
||||
if err := tx.Bucket(userIndex).Put(userIndexKey(u.Name), encodedID); err != nil {
|
||||
return err
|
||||
}
|
||||
return tx.Bucket(userBucket).Put(encodedID, v)
|
||||
}
|
||||
|
||||
func userIndexKey(n string) []byte {
|
||||
|
|
@ -296,11 +305,14 @@ func (c *Client) deleteUser(ctx context.Context, tx *bolt.Tx, id platform.ID) er
|
|||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
encodedID, err := id.Encode()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if err := tx.Bucket(userIndex).Delete(userIndexKey(u.Name)); err != nil {
|
||||
return err
|
||||
}
|
||||
return tx.Bucket(userBucket).Delete(id)
|
||||
return tx.Bucket(userBucket).Delete(encodedID)
|
||||
}
|
||||
|
||||
func (c *Client) deleteUsersAuthorizations(ctx context.Context, tx *bolt.Tx, id platform.ID) error {
|
||||
|
|
|
|||
|
|
@ -151,23 +151,23 @@ func authorizationFindF(cmd *cobra.Command, args []string) {
|
|||
|
||||
filter := platform.AuthorizationFilter{}
|
||||
if authorizationFindFlags.id != "" {
|
||||
filter.ID = &platform.ID{}
|
||||
err := filter.ID.DecodeFromString(authorizationFindFlags.id)
|
||||
fID, err := platform.IDFromString(authorizationFindFlags.id)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
os.Exit(1)
|
||||
}
|
||||
filter.ID = fID
|
||||
}
|
||||
if authorizationFindFlags.user != "" {
|
||||
filter.User = &authorizationFindFlags.user
|
||||
}
|
||||
if authorizationFindFlags.userID != "" {
|
||||
filter.UserID = &platform.ID{}
|
||||
err := filter.UserID.DecodeFromString(authorizationFindFlags.userID)
|
||||
uID, err := platform.IDFromString(authorizationFindFlags.userID)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
os.Exit(1)
|
||||
}
|
||||
filter.UserID = uID
|
||||
}
|
||||
|
||||
authorizations, _, err := s.FindAuthorizations(context.Background(), filter)
|
||||
|
|
@ -230,20 +230,20 @@ func authorizationDeleteF(cmd *cobra.Command, args []string) {
|
|||
Token: flags.token,
|
||||
}
|
||||
|
||||
id := platform.ID{}
|
||||
if err := id.DecodeFromString(authorizationDeleteFlags.id); err != nil {
|
||||
fmt.Println(err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
ctx := context.TODO()
|
||||
a, err := s.FindAuthorizationByID(ctx, id)
|
||||
id, err := platform.IDFromString(authorizationDeleteFlags.id)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
if err := s.DeleteAuthorization(context.Background(), id); err != nil {
|
||||
ctx := context.TODO()
|
||||
a, err := s.FindAuthorizationByID(ctx, *id)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
if err := s.DeleteAuthorization(context.Background(), *id); err != nil {
|
||||
fmt.Println(err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -71,12 +71,12 @@ func bucketCreateF(cmd *cobra.Command, args []string) {
|
|||
}
|
||||
|
||||
if bucketCreateFlags.orgID != "" {
|
||||
var id platform.ID
|
||||
if err := id.DecodeFromString(bucketCreateFlags.orgID); err != nil {
|
||||
id, err := platform.IDFromString(bucketCreateFlags.orgID)
|
||||
if err != nil {
|
||||
fmt.Printf("error parsing organization id: %v\n", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
b.OrganizationID = id
|
||||
b.OrganizationID = *id
|
||||
}
|
||||
|
||||
if err := s.CreateBucket(context.Background(), b); err != nil {
|
||||
|
|
@ -139,12 +139,12 @@ func bucketFindF(cmd *cobra.Command, args []string) {
|
|||
}
|
||||
|
||||
if bucketFindFlags.id != "" {
|
||||
filter.ID = &platform.ID{}
|
||||
err := filter.ID.DecodeFromString(bucketFindFlags.id)
|
||||
id, err := platform.IDFromString(bucketFindFlags.id)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
os.Exit(1)
|
||||
}
|
||||
filter.ID = id
|
||||
}
|
||||
|
||||
if bucketFindFlags.orgID != "" && bucketFindFlags.org != "" {
|
||||
|
|
@ -154,12 +154,12 @@ func bucketFindF(cmd *cobra.Command, args []string) {
|
|||
}
|
||||
|
||||
if bucketFindFlags.orgID != "" {
|
||||
filter.OrganizationID = &platform.ID{}
|
||||
err := filter.OrganizationID.DecodeFromString(bucketFindFlags.orgID)
|
||||
orgID, err := platform.IDFromString(bucketFindFlags.orgID)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
os.Exit(1)
|
||||
}
|
||||
filter.OrganizationID = orgID
|
||||
}
|
||||
|
||||
if bucketFindFlags.org != "" {
|
||||
|
|
|
|||
|
|
@ -103,11 +103,12 @@ func organizationFindF(cmd *cobra.Command, args []string) {
|
|||
}
|
||||
|
||||
if organizationFindFlags.id != "" {
|
||||
filter.ID = &platform.ID{}
|
||||
if err := filter.ID.DecodeFromString(organizationFindFlags.id); err != nil {
|
||||
id, err := platform.IDFromString(organizationFindFlags.id)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
os.Exit(1)
|
||||
}
|
||||
filter.ID = id
|
||||
}
|
||||
|
||||
orgs, _, err := s.FindOrganizations(context.Background(), filter)
|
||||
|
|
|
|||
|
|
@ -155,11 +155,12 @@ func userFindF(cmd *cobra.Command, args []string) {
|
|||
filter.Name = &userFindFlags.name
|
||||
}
|
||||
if userFindFlags.id != "" {
|
||||
filter.ID = &platform.ID{}
|
||||
if err := filter.ID.DecodeFromString(userFindFlags.id); err != nil {
|
||||
id, err := platform.IDFromString(userFindFlags.id)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
os.Exit(1)
|
||||
}
|
||||
filter.ID = id
|
||||
}
|
||||
|
||||
users, _, err := s.FindUsers(context.Background(), filter)
|
||||
|
|
|
|||
|
|
@ -92,7 +92,7 @@ type CellUpdate struct {
|
|||
Y *int32 `json:"y"`
|
||||
W *int32 `json:"w"`
|
||||
H *int32 `json:"h"`
|
||||
ViewID *ID `json:"viewID"`
|
||||
ViewID ID `json:"viewID"`
|
||||
}
|
||||
|
||||
// Apply applies an update to a Cell.
|
||||
|
|
@ -113,8 +113,8 @@ func (u CellUpdate) Apply(c *Cell) error {
|
|||
c.H = *u.H
|
||||
}
|
||||
|
||||
if u.ViewID != nil {
|
||||
c.ViewID = *u.ViewID
|
||||
if u.ViewID.Valid() {
|
||||
c.ViewID = u.ViewID
|
||||
}
|
||||
|
||||
return nil
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
package platform
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"errors"
|
||||
"strconv"
|
||||
|
|
@ -48,10 +47,10 @@ func (m DBRPMapping) Validate() error {
|
|||
if !validName(m.RetentionPolicy) {
|
||||
return errors.New("RetentionPolicy must contain at least one character and only be letters, numbers, '_', '-', and '.'")
|
||||
}
|
||||
if len(m.OrganizationID) == 0 {
|
||||
if !m.OrganizationID.Valid() {
|
||||
return errors.New("OrganizationID is required")
|
||||
}
|
||||
if len(m.BucketID) == 0 {
|
||||
if !m.BucketID.Valid() {
|
||||
return errors.New("BucketID is required")
|
||||
}
|
||||
return nil
|
||||
|
|
@ -64,7 +63,6 @@ func validName(name string) bool {
|
|||
return false
|
||||
}
|
||||
}
|
||||
|
||||
return name != "" &&
|
||||
name != "." &&
|
||||
name != ".." &&
|
||||
|
|
@ -83,8 +81,12 @@ func (m *DBRPMapping) Equal(o *DBRPMapping) bool {
|
|||
m.Database == o.Database &&
|
||||
m.RetentionPolicy == o.RetentionPolicy &&
|
||||
m.Default == o.Default &&
|
||||
bytes.Equal(m.OrganizationID, o.OrganizationID) &&
|
||||
bytes.Equal(m.BucketID, o.BucketID)
|
||||
m.OrganizationID.Valid() &&
|
||||
o.OrganizationID.Valid() &&
|
||||
m.BucketID.Valid() &&
|
||||
o.BucketID.Valid() &&
|
||||
m.OrganizationID == o.OrganizationID &&
|
||||
m.BucketID == o.BucketID
|
||||
}
|
||||
|
||||
// DBRPMappingFilter represents a set of filters that restrict the returned results by cluster, database and retention policy.
|
||||
|
|
|
|||
|
|
@ -0,0 +1,41 @@
|
|||
package platform
|
||||
|
||||
import (
|
||||
"testing"
|
||||
)
|
||||
|
||||
func Test_validName(t *testing.T) {
|
||||
tests := []struct {
|
||||
arg string
|
||||
name string
|
||||
want bool
|
||||
}{
|
||||
{
|
||||
name: "names cannot have unprintable characters",
|
||||
arg: string([]byte{0x0D}),
|
||||
want: false,
|
||||
},
|
||||
{
|
||||
name: "names cannot have .",
|
||||
arg: ".",
|
||||
want: false,
|
||||
},
|
||||
{
|
||||
name: "names cannot have ..",
|
||||
arg: "..",
|
||||
want: false,
|
||||
},
|
||||
{
|
||||
name: "names cannot have /",
|
||||
arg: "/",
|
||||
want: false,
|
||||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
if got := validName(tt.arg); got != tt.want {
|
||||
t.Errorf("validName() = %v, want %v", got, tt.want)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
@ -1,7 +1,10 @@
|
|||
package platform
|
||||
package platform_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/influxdata/platform"
|
||||
platformtesting "github.com/influxdata/platform/testing"
|
||||
)
|
||||
|
||||
func TestDBRPMapping_Validate(t *testing.T) {
|
||||
|
|
@ -10,8 +13,8 @@ func TestDBRPMapping_Validate(t *testing.T) {
|
|||
Database string
|
||||
RetentionPolicy string
|
||||
Default bool
|
||||
OrganizationID ID
|
||||
BucketID ID
|
||||
OrganizationID platform.ID
|
||||
BucketID platform.ID
|
||||
}
|
||||
tests := []struct {
|
||||
name string
|
||||
|
|
@ -57,7 +60,7 @@ func TestDBRPMapping_Validate(t *testing.T) {
|
|||
Cluster: "abc",
|
||||
Database: "telegraf",
|
||||
RetentionPolicy: "autogen",
|
||||
OrganizationID: []byte{0xde, 0xba, 0xc1, 0xe0, 0xde, 0xad, 0xbe, 0xef},
|
||||
OrganizationID: platformtesting.MustIDFromString("debac1e0deadbeef"),
|
||||
},
|
||||
wantErr: true,
|
||||
},
|
||||
|
|
@ -85,21 +88,20 @@ func TestDBRPMapping_Validate(t *testing.T) {
|
|||
},
|
||||
wantErr: true,
|
||||
},
|
||||
|
||||
{
|
||||
name: "dash accepted as valid database",
|
||||
fields: fields{
|
||||
Cluster: "12345_.",
|
||||
Database: "howdy-doody",
|
||||
RetentionPolicy: "autogen",
|
||||
OrganizationID: []byte{0xde, 0xba, 0xc1, 0xe0, 0xde, 0xad, 0xbe, 0xef},
|
||||
BucketID: []byte{0x5c, 0xa1, 0xab, 0x1e, 0xde, 0xad, 0xbe, 0xa7},
|
||||
OrganizationID: platformtesting.MustIDFromString("debac1e0deadbeef"),
|
||||
BucketID: platformtesting.MustIDFromString("5ca1ab1edeadbea7"),
|
||||
},
|
||||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
m := DBRPMapping{
|
||||
m := platform.DBRPMapping{
|
||||
Cluster: tt.fields.Cluster,
|
||||
Database: tt.fields.Database,
|
||||
RetentionPolicy: tt.fields.RetentionPolicy,
|
||||
|
|
@ -107,45 +109,10 @@ func TestDBRPMapping_Validate(t *testing.T) {
|
|||
OrganizationID: tt.fields.OrganizationID,
|
||||
BucketID: tt.fields.BucketID,
|
||||
}
|
||||
|
||||
if err := m.Validate(); (err != nil) != tt.wantErr {
|
||||
t.Errorf("DBRPMapping.Validate() error = %v, wantErr %v", err, tt.wantErr)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func Test_validName(t *testing.T) {
|
||||
tests := []struct {
|
||||
arg string
|
||||
name string
|
||||
want bool
|
||||
}{
|
||||
{
|
||||
name: "names cannot have unprintable characters",
|
||||
arg: string([]byte{0x0D}),
|
||||
want: false,
|
||||
},
|
||||
{
|
||||
name: "names cannot have .",
|
||||
arg: ".",
|
||||
want: false,
|
||||
},
|
||||
{
|
||||
name: "names cannot have ..",
|
||||
arg: "..",
|
||||
want: false,
|
||||
},
|
||||
{
|
||||
name: "names cannot have /",
|
||||
arg: "/",
|
||||
want: false,
|
||||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
if got := validName(tt.arg); got != tt.want {
|
||||
t.Errorf("validName() = %v, want %v", got, tt.want)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -155,10 +155,11 @@ func decodeGetAuthorizationsRequest(ctx context.Context, r *http.Request) (*getA
|
|||
|
||||
userID := qp.Get("userID")
|
||||
if userID != "" {
|
||||
req.filter.UserID = &platform.ID{}
|
||||
if err := req.filter.UserID.DecodeFromString(userID); err != nil {
|
||||
id, err := platform.IDFromString(userID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
req.filter.UserID = id
|
||||
}
|
||||
|
||||
user := qp.Get("user")
|
||||
|
|
@ -168,10 +169,11 @@ func decodeGetAuthorizationsRequest(ctx context.Context, r *http.Request) (*getA
|
|||
|
||||
authID := qp.Get("id")
|
||||
if authID != "" {
|
||||
req.filter.ID = &platform.ID{}
|
||||
if err := req.filter.ID.DecodeFromString(authID); err != nil {
|
||||
id, err := platform.IDFromString(authID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
req.filter.ID = id
|
||||
}
|
||||
|
||||
return req, nil
|
||||
|
|
|
|||
|
|
@ -348,10 +348,11 @@ func decodeGetBucketsRequest(ctx context.Context, r *http.Request) (*getBucketsR
|
|||
req := &getBucketsRequest{}
|
||||
|
||||
if id := qp.Get("orgID"); id != "" {
|
||||
req.filter.OrganizationID = &platform.ID{}
|
||||
if err := req.filter.OrganizationID.DecodeFromString(id); err != nil {
|
||||
temp, err := platform.IDFromString(id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
req.filter.OrganizationID = temp
|
||||
}
|
||||
|
||||
if org := qp.Get("org"); org != "" {
|
||||
|
|
@ -359,10 +360,11 @@ func decodeGetBucketsRequest(ctx context.Context, r *http.Request) (*getBucketsR
|
|||
}
|
||||
|
||||
if id := qp.Get("id"); id != "" {
|
||||
req.filter.ID = &platform.ID{}
|
||||
if err := req.filter.ID.DecodeFromString(id); err != nil {
|
||||
temp, err := platform.IDFromString(id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
req.filter.ID = temp
|
||||
}
|
||||
|
||||
if name := qp.Get("name"); name != "" {
|
||||
|
|
|
|||
|
|
@ -210,10 +210,11 @@ func decodeGetOrgsRequest(ctx context.Context, r *http.Request) (*getOrgsRequest
|
|||
req := &getOrgsRequest{}
|
||||
|
||||
if id := qp.Get("id"); id != "" {
|
||||
req.filter.ID = &platform.ID{}
|
||||
if err := req.filter.ID.DecodeFromString(id); err != nil {
|
||||
temp, err := platform.IDFromString(id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
req.filter.ID = temp
|
||||
}
|
||||
|
||||
if name := qp.Get("name"); name != "" {
|
||||
|
|
|
|||
|
|
@ -100,24 +100,27 @@ func decodeGetTasksRequest(ctx context.Context, r *http.Request) (*getTasksReque
|
|||
req := &getTasksRequest{}
|
||||
|
||||
if id := qp.Get("after"); id != "" {
|
||||
req.filter.After = &platform.ID{}
|
||||
if err := req.filter.After.DecodeFromString(id); err != nil {
|
||||
temp, err := platform.IDFromString(id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
req.filter.After = temp
|
||||
}
|
||||
|
||||
if id := qp.Get("organization"); id != "" {
|
||||
req.filter.Organization = &platform.ID{}
|
||||
if err := req.filter.Organization.DecodeFromString(id); err != nil {
|
||||
temp, err := platform.IDFromString(id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
req.filter.Organization = temp
|
||||
}
|
||||
|
||||
if id := qp.Get("user"); id != "" {
|
||||
req.filter.User = &platform.ID{}
|
||||
if err := req.filter.User.DecodeFromString(id); err != nil {
|
||||
userID, err := platform.IDFromString(id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
req.filter.User = userID
|
||||
}
|
||||
|
||||
return req, nil
|
||||
|
|
@ -337,10 +340,11 @@ func decodeGetLogsRequest(ctx context.Context, r *http.Request, orgs platform.Or
|
|||
}
|
||||
|
||||
req := &getLogsRequest{}
|
||||
req.filter.Task = &platform.ID{}
|
||||
if err := req.filter.Task.DecodeFromString(id); err != nil {
|
||||
taskID, err := platform.IDFromString(id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
req.filter.Task = taskID
|
||||
|
||||
qp := r.URL.Query()
|
||||
|
||||
|
|
@ -354,10 +358,11 @@ func decodeGetLogsRequest(ctx context.Context, r *http.Request, orgs platform.Or
|
|||
}
|
||||
|
||||
if id := params.ByName("rid"); id != "" {
|
||||
req.filter.Run = &platform.ID{}
|
||||
if err := req.filter.Run.DecodeFromString(id); err != nil {
|
||||
temp, err := platform.IDFromString(id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
req.filter.Run = temp
|
||||
}
|
||||
|
||||
return req, nil
|
||||
|
|
@ -409,10 +414,11 @@ func decodeGetRunsRequest(ctx context.Context, r *http.Request, orgs platform.Or
|
|||
}
|
||||
|
||||
req := &getRunsRequest{}
|
||||
req.filter.Task = &platform.ID{}
|
||||
if err := req.filter.Task.DecodeFromString(id); err != nil {
|
||||
taskID, err := platform.IDFromString(id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
req.filter.Task = taskID
|
||||
|
||||
qp := r.URL.Query()
|
||||
|
||||
|
|
@ -426,10 +432,11 @@ func decodeGetRunsRequest(ctx context.Context, r *http.Request, orgs platform.Or
|
|||
}
|
||||
|
||||
if id := qp.Get("after"); id != "" {
|
||||
req.filter.After = &platform.ID{}
|
||||
if err := req.filter.After.DecodeFromString(id); err != nil {
|
||||
afterID, err := platform.IDFromString(id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
req.filter.After = afterID
|
||||
}
|
||||
|
||||
if limit := qp.Get("limit"); limit != "" {
|
||||
|
|
|
|||
|
|
@ -257,10 +257,11 @@ func decodeGetUsersRequest(ctx context.Context, r *http.Request) (*getUsersReque
|
|||
req := &getUsersRequest{}
|
||||
|
||||
if id := qp.Get("id"); id != "" {
|
||||
req.filter.ID = &platform.ID{}
|
||||
if err := req.filter.ID.DecodeFromString(id); err != nil {
|
||||
temp, err := platform.IDFromString(id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
req.filter.ID = temp
|
||||
}
|
||||
|
||||
if name := qp.Get("name"); name != "" {
|
||||
|
|
|
|||
75
id.go
75
id.go
|
|
@ -1,12 +1,25 @@
|
|||
package platform
|
||||
|
||||
import (
|
||||
"encoding/binary"
|
||||
"encoding/hex"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
)
|
||||
|
||||
// IDStringLength is the exact length a string (or a byte slice representing it) must have in order to be decoded into a valid ID.
|
||||
const IDStringLength = 16
|
||||
|
||||
// ErrInvalidID is the error thrown to notify invalid IDs.
|
||||
var ErrInvalidID = errors.New("invalid ID")
|
||||
|
||||
// ErrInvalidIDLength is the error thrown to notify input does not match the wanted length.
|
||||
var ErrInvalidIDLength = errors.New("input must be an array of 16 bytes")
|
||||
|
||||
// ID is a unique identifier.
|
||||
type ID []byte
|
||||
//
|
||||
// Its zero value is not a valid ID.
|
||||
type ID uint64
|
||||
|
||||
// IDGenerator represents a generator for IDs.
|
||||
type IDGenerator interface {
|
||||
|
|
@ -14,10 +27,12 @@ type IDGenerator interface {
|
|||
ID() ID
|
||||
}
|
||||
|
||||
// IDFromString creates an ID from a given string
|
||||
func IDFromString(idstr string) (*ID, error) {
|
||||
// IDFromString creates an ID from a given string.
|
||||
//
|
||||
// It errors if the input string does not match a valid ID.
|
||||
func IDFromString(str string) (*ID, error) {
|
||||
var id ID
|
||||
err := id.DecodeFromString(idstr)
|
||||
err := id.DecodeFromString(str)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
@ -25,13 +40,25 @@ func IDFromString(idstr string) (*ID, error) {
|
|||
}
|
||||
|
||||
// Decode parses b as a hex-encoded byte-slice-string.
|
||||
//
|
||||
// It errors if the input byte slice does not have the correct length
|
||||
// or if it contains all zeros.
|
||||
func (i *ID) Decode(b []byte) error {
|
||||
dst := make([]byte, hex.DecodedLen(len(b)))
|
||||
if len(b) != IDStringLength {
|
||||
return ErrInvalidIDLength
|
||||
}
|
||||
|
||||
dst := make([]byte, hex.DecodedLen(IDStringLength))
|
||||
_, err := hex.Decode(dst, b)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
*i = dst
|
||||
*i = ID(binary.BigEndian.Uint64(dst))
|
||||
|
||||
if !i.Valid() {
|
||||
return ErrInvalidID
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
@ -41,15 +68,32 @@ func (i *ID) DecodeFromString(s string) error {
|
|||
}
|
||||
|
||||
// Encode converts ID to a hex-encoded byte-slice-string.
|
||||
func (i ID) Encode() []byte {
|
||||
dst := make([]byte, hex.EncodedLen(len(i)))
|
||||
hex.Encode(dst, i)
|
||||
return dst
|
||||
//
|
||||
// It errors if the receiving ID holds its zero value.
|
||||
func (i ID) Encode() ([]byte, error) {
|
||||
if !i.Valid() {
|
||||
return nil, ErrInvalidID
|
||||
}
|
||||
|
||||
b := make([]byte, hex.DecodedLen(IDStringLength))
|
||||
binary.BigEndian.PutUint64(b, uint64(i))
|
||||
|
||||
dst := make([]byte, hex.EncodedLen(len(b)))
|
||||
hex.Encode(dst, b)
|
||||
return dst, nil
|
||||
}
|
||||
|
||||
// String returns the ID as a hex encoded string
|
||||
// Valid checks whether the receiving ID is a valid one or not.
|
||||
func (i ID) Valid() bool {
|
||||
return i != 0
|
||||
}
|
||||
|
||||
// String returns the ID as a hex encoded string.
|
||||
//
|
||||
// Returns an empty string in the case the ID is invalid.
|
||||
func (i ID) String() string {
|
||||
return string(i.Encode())
|
||||
enc, _ := i.Encode()
|
||||
return string(enc)
|
||||
}
|
||||
|
||||
// UnmarshalJSON implements JSON unmarshaller for IDs.
|
||||
|
|
@ -60,6 +104,9 @@ func (i *ID) UnmarshalJSON(b []byte) error {
|
|||
|
||||
// MarshalJSON implements JSON marshaller for IDs.
|
||||
func (i ID) MarshalJSON() ([]byte, error) {
|
||||
id := i.Encode()
|
||||
return json.Marshal(string(id[:]))
|
||||
enc, err := i.Encode()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return json.Marshal(string(enc))
|
||||
}
|
||||
|
|
|
|||
178
id_test.go
178
id_test.go
|
|
@ -1,38 +1,190 @@
|
|||
package platform
|
||||
package platform_test
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"reflect"
|
||||
"testing"
|
||||
|
||||
"github.com/influxdata/platform"
|
||||
platformtesting "github.com/influxdata/platform/testing"
|
||||
)
|
||||
|
||||
func TestIDFromString(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
idstr string
|
||||
want *ID
|
||||
id string
|
||||
want platform.ID
|
||||
wantErr bool
|
||||
err string
|
||||
}{
|
||||
{
|
||||
name: "Is able to decode an id",
|
||||
idstr: "020f755c3c082000",
|
||||
want: &ID{0x02, 0x0f, 0x75, 0x5c, 0x3c, 0x08, 0x20, 0x00},
|
||||
name: "Should be able to decode an all zeros ID",
|
||||
id: "0000000000000000",
|
||||
wantErr: true,
|
||||
err: platform.ErrInvalidID.Error(),
|
||||
},
|
||||
{
|
||||
name: "It should not be able to decode an id that's not hex",
|
||||
idstr: "gggggggggggggg",
|
||||
name: "Should be able to decode an all f ID",
|
||||
id: "ffffffffffffffff",
|
||||
want: platformtesting.MustIDFromString("ffffffffffffffff"),
|
||||
},
|
||||
{
|
||||
name: "Should be able to decode an ID",
|
||||
id: "020f755c3c082000",
|
||||
want: platformtesting.MustIDFromString("020f755c3c082000"),
|
||||
},
|
||||
{
|
||||
name: "Should not be able to decode a non hex ID",
|
||||
id: "gggggggggggggggg",
|
||||
wantErr: true,
|
||||
err: "encoding/hex: invalid byte: U+0067 'g'",
|
||||
},
|
||||
{
|
||||
name: "Should not be able to decode inputs with length less than 16 bytes",
|
||||
id: "abc",
|
||||
wantErr: true,
|
||||
err: platform.ErrInvalidIDLength.Error(),
|
||||
},
|
||||
{
|
||||
name: "Should not be able to decode inputs with length greater than 16 bytes",
|
||||
id: "abcdabcdabcdabcd0",
|
||||
wantErr: true,
|
||||
err: platform.ErrInvalidIDLength.Error(),
|
||||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
got, err := IDFromString(tt.idstr)
|
||||
if (err != nil) != tt.wantErr {
|
||||
t.Errorf("IDFromString() error = %v, wantErr %v", err, tt.wantErr)
|
||||
got, err := platform.IDFromString(tt.id)
|
||||
|
||||
// Check negative test cases
|
||||
if (err != nil) && tt.wantErr {
|
||||
if tt.err != err.Error() {
|
||||
t.Errorf("IDFromString() errors out \"%s\", want \"%s\"", err, tt.err)
|
||||
}
|
||||
return
|
||||
}
|
||||
if !reflect.DeepEqual(got, tt.want) {
|
||||
t.Errorf("IDFromString() = %v, want %v", got, tt.want)
|
||||
|
||||
// Check positive test cases
|
||||
if !reflect.DeepEqual(*got, tt.want) && !tt.wantErr {
|
||||
t.Errorf("IDFromString() outputs %v, want %v", got, tt.want)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestDecodeFromString(t *testing.T) {
|
||||
var id platform.ID
|
||||
err := id.DecodeFromString("020f755c3c082000")
|
||||
if err != nil {
|
||||
t.Errorf(err.Error())
|
||||
}
|
||||
want := []byte{48, 50, 48, 102, 55, 53, 53, 99, 51, 99, 48, 56, 50, 48, 48, 48}
|
||||
got, _ := id.Encode()
|
||||
if !bytes.Equal(want, got) {
|
||||
t.Errorf("got ID not equal to wanted ID")
|
||||
}
|
||||
if id.String() != "020f755c3c082000" {
|
||||
t.Errorf("expecting string representation to contain the right value")
|
||||
}
|
||||
if !id.Valid() {
|
||||
t.Errorf("expecting ID to be a valid one")
|
||||
}
|
||||
}
|
||||
|
||||
func TestEncode(t *testing.T) {
|
||||
var id platform.ID
|
||||
if _, err := id.Encode(); err == nil {
|
||||
t.Errorf("encoding an invalid ID should not be possible")
|
||||
}
|
||||
|
||||
id.DecodeFromString("5ca1ab1eba5eba11")
|
||||
want := []byte{53, 99, 97, 49, 97, 98, 49, 101, 98, 97, 53, 101, 98, 97, 49, 49}
|
||||
got, _ := id.Encode()
|
||||
if !bytes.Equal(want, got) {
|
||||
t.Errorf("encoding error")
|
||||
}
|
||||
if id.String() != "5ca1ab1eba5eba11" {
|
||||
t.Errorf("expecting string representation to contain the right value")
|
||||
}
|
||||
if !id.Valid() {
|
||||
t.Errorf("expecting ID to be a valid one")
|
||||
}
|
||||
}
|
||||
|
||||
func TestDecodeFromAllZeros(t *testing.T) {
|
||||
var id platform.ID
|
||||
err := id.Decode(make([]byte, platform.IDStringLength))
|
||||
if err == nil {
|
||||
t.Errorf("expecting all zeros ID to not be a valid ID")
|
||||
}
|
||||
}
|
||||
|
||||
func TestDecodeFromShorterString(t *testing.T) {
|
||||
var id platform.ID
|
||||
err := id.DecodeFromString("020f75")
|
||||
if err == nil {
|
||||
t.Errorf("expecting shorter inputs to error")
|
||||
}
|
||||
if id.String() != "" {
|
||||
t.Errorf("expecting invalid ID to be serialized into empty string")
|
||||
}
|
||||
}
|
||||
|
||||
func TestDecodeFromLongerString(t *testing.T) {
|
||||
var id platform.ID
|
||||
err := id.DecodeFromString("020f755c3c082000aaa")
|
||||
if err == nil {
|
||||
t.Errorf("expecting shorter inputs to error")
|
||||
}
|
||||
if id.String() != "" {
|
||||
t.Errorf("expecting invalid ID to be serialized into empty string")
|
||||
}
|
||||
}
|
||||
|
||||
func TestDecodeFromEmptyString(t *testing.T) {
|
||||
var id platform.ID
|
||||
err := id.DecodeFromString("")
|
||||
if err == nil {
|
||||
t.Errorf("expecting empty inputs to error")
|
||||
}
|
||||
if id.String() != "" {
|
||||
t.Errorf("expecting invalid ID to be serialized into empty string")
|
||||
}
|
||||
}
|
||||
|
||||
func TestMarshalling(t *testing.T) {
|
||||
var id0 platform.ID
|
||||
_, err := json.Marshal(id0)
|
||||
if err == nil {
|
||||
t.Errorf("expecting empty ID to not be a valid one")
|
||||
}
|
||||
|
||||
init := "ca55e77eca55e77e"
|
||||
id1, err := platform.IDFromString(init)
|
||||
if err != nil {
|
||||
t.Errorf(err.Error())
|
||||
}
|
||||
|
||||
serialized, err := json.Marshal(id1)
|
||||
if err != nil {
|
||||
t.Errorf(err.Error())
|
||||
}
|
||||
|
||||
var id2 platform.ID
|
||||
json.Unmarshal(serialized, &id2)
|
||||
|
||||
bytes1, _ := id1.Encode()
|
||||
bytes2, _ := id2.Encode()
|
||||
|
||||
if !bytes.Equal(bytes1, bytes2) {
|
||||
t.Errorf("error marshalling/unmarshalling ID")
|
||||
}
|
||||
}
|
||||
|
||||
func TestValid(t *testing.T) {
|
||||
var id platform.ID
|
||||
if id.Valid() {
|
||||
t.Errorf("expecting initial ID to be invalid")
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ package platform
|
|||
|
||||
import "context"
|
||||
|
||||
// Organization is a organization. 🎉
|
||||
// Organization is an organization. 🎉
|
||||
type Organization struct {
|
||||
ID ID `json:"id"`
|
||||
Name string `json:"name"`
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@ func TestAuthorizationService_Metrics(t *testing.T) {
|
|||
reg.MustRegister(svc.PrometheusCollectors()...)
|
||||
|
||||
ctx := context.Background()
|
||||
id := platform.ID{1}
|
||||
id := platform.ID(1)
|
||||
|
||||
if _, err := svc.FindAuthorizationByID(ctx, id); err != nil {
|
||||
t.Fatal(err)
|
||||
|
|
@ -89,7 +89,8 @@ func TestAuthorizationService_Metrics(t *testing.T) {
|
|||
t.Fatalf("exp 1 request, got %v", got)
|
||||
}
|
||||
|
||||
if err := svc.DeleteAuthorization(ctx, nil); err != nil {
|
||||
var tempID platform.ID
|
||||
if err := svc.DeleteAuthorization(ctx, tempID); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
mfs = promtest.MustGather(t, reg)
|
||||
|
|
@ -137,7 +138,7 @@ func TestAuthorizationService_Metrics(t *testing.T) {
|
|||
t.Fatalf("exp 1 request, got %v", got)
|
||||
}
|
||||
|
||||
if err := svc.DeleteAuthorization(ctx, nil); err != forced {
|
||||
if err := svc.DeleteAuthorization(ctx, tempID); err != forced {
|
||||
t.Fatalf("expected forced error, got %v", err)
|
||||
}
|
||||
mfs = promtest.MustGather(t, reg)
|
||||
|
|
|
|||
|
|
@ -0,0 +1,450 @@
|
|||
package execute_test
|
||||
|
||||
import (
|
||||
"sort"
|
||||
"testing"
|
||||
|
||||
"github.com/google/go-cmp/cmp"
|
||||
"github.com/google/go-cmp/cmp/cmpopts"
|
||||
"github.com/influxdata/platform/query"
|
||||
"github.com/influxdata/platform/query/execute"
|
||||
"github.com/influxdata/platform/query/execute/executetest"
|
||||
"github.com/influxdata/platform/query/functions"
|
||||
)
|
||||
|
||||
func TestAggregate_Process(t *testing.T) {
|
||||
sumAgg := new(functions.SumAgg)
|
||||
countAgg := new(functions.CountAgg)
|
||||
testCases := []struct {
|
||||
name string
|
||||
agg execute.Aggregate
|
||||
config execute.AggregateConfig
|
||||
data []*executetest.Table
|
||||
want []*executetest.Table
|
||||
}{
|
||||
{
|
||||
name: "single",
|
||||
config: execute.DefaultAggregateConfig,
|
||||
agg: sumAgg,
|
||||
data: []*executetest.Table{{
|
||||
KeyCols: []string{"_start", "_stop"},
|
||||
ColMeta: []query.ColMeta{
|
||||
{Label: "_start", Type: query.TTime},
|
||||
{Label: "_stop", Type: query.TTime},
|
||||
{Label: "_time", Type: query.TTime},
|
||||
{Label: "_value", Type: query.TFloat},
|
||||
},
|
||||
Data: [][]interface{}{
|
||||
{execute.Time(0), execute.Time(100), execute.Time(0), 0.0},
|
||||
{execute.Time(0), execute.Time(100), execute.Time(10), 1.0},
|
||||
{execute.Time(0), execute.Time(100), execute.Time(20), 2.0},
|
||||
{execute.Time(0), execute.Time(100), execute.Time(30), 3.0},
|
||||
{execute.Time(0), execute.Time(100), execute.Time(40), 4.0},
|
||||
{execute.Time(0), execute.Time(100), execute.Time(50), 5.0},
|
||||
{execute.Time(0), execute.Time(100), execute.Time(60), 6.0},
|
||||
{execute.Time(0), execute.Time(100), execute.Time(70), 7.0},
|
||||
{execute.Time(0), execute.Time(100), execute.Time(80), 8.0},
|
||||
{execute.Time(0), execute.Time(100), execute.Time(90), 9.0},
|
||||
},
|
||||
}},
|
||||
want: []*executetest.Table{{
|
||||
KeyCols: []string{"_start", "_stop"},
|
||||
ColMeta: []query.ColMeta{
|
||||
{Label: "_start", Type: query.TTime},
|
||||
{Label: "_stop", Type: query.TTime},
|
||||
{Label: "_time", Type: query.TTime},
|
||||
{Label: "_value", Type: query.TFloat},
|
||||
},
|
||||
Data: [][]interface{}{
|
||||
{execute.Time(0), execute.Time(100), execute.Time(100), 45.0},
|
||||
},
|
||||
}},
|
||||
},
|
||||
{
|
||||
name: "single use start time",
|
||||
config: execute.AggregateConfig{
|
||||
Columns: []string{execute.DefaultValueColLabel},
|
||||
TimeSrc: execute.DefaultStartColLabel,
|
||||
TimeDst: execute.DefaultTimeColLabel,
|
||||
},
|
||||
agg: sumAgg,
|
||||
data: []*executetest.Table{{
|
||||
KeyCols: []string{"_start", "_stop"},
|
||||
ColMeta: []query.ColMeta{
|
||||
{Label: "_start", Type: query.TTime},
|
||||
{Label: "_stop", Type: query.TTime},
|
||||
{Label: "_time", Type: query.TTime},
|
||||
{Label: "_value", Type: query.TFloat},
|
||||
},
|
||||
Data: [][]interface{}{
|
||||
{execute.Time(0), execute.Time(100), execute.Time(0), 0.0},
|
||||
{execute.Time(0), execute.Time(100), execute.Time(10), 1.0},
|
||||
{execute.Time(0), execute.Time(100), execute.Time(20), 2.0},
|
||||
{execute.Time(0), execute.Time(100), execute.Time(30), 3.0},
|
||||
{execute.Time(0), execute.Time(100), execute.Time(40), 4.0},
|
||||
{execute.Time(0), execute.Time(100), execute.Time(50), 5.0},
|
||||
{execute.Time(0), execute.Time(100), execute.Time(60), 6.0},
|
||||
{execute.Time(0), execute.Time(100), execute.Time(70), 7.0},
|
||||
{execute.Time(0), execute.Time(100), execute.Time(80), 8.0},
|
||||
{execute.Time(0), execute.Time(100), execute.Time(90), 9.0},
|
||||
},
|
||||
}},
|
||||
want: []*executetest.Table{{
|
||||
KeyCols: []string{"_start", "_stop"},
|
||||
ColMeta: []query.ColMeta{
|
||||
{Label: "_start", Type: query.TTime},
|
||||
{Label: "_stop", Type: query.TTime},
|
||||
{Label: "_time", Type: query.TTime},
|
||||
{Label: "_value", Type: query.TFloat},
|
||||
},
|
||||
Data: [][]interface{}{
|
||||
{execute.Time(0), execute.Time(100), execute.Time(0), 45.0},
|
||||
},
|
||||
}},
|
||||
},
|
||||
{
|
||||
name: "multiple tables",
|
||||
config: execute.DefaultAggregateConfig,
|
||||
agg: sumAgg,
|
||||
data: []*executetest.Table{
|
||||
{
|
||||
KeyCols: []string{"_start", "_stop"},
|
||||
ColMeta: []query.ColMeta{
|
||||
{Label: "_start", Type: query.TTime},
|
||||
{Label: "_stop", Type: query.TTime},
|
||||
{Label: "_time", Type: query.TTime},
|
||||
{Label: "_value", Type: query.TFloat},
|
||||
},
|
||||
Data: [][]interface{}{
|
||||
{execute.Time(0), execute.Time(100), execute.Time(0), 0.0},
|
||||
{execute.Time(0), execute.Time(100), execute.Time(10), 1.0},
|
||||
{execute.Time(0), execute.Time(100), execute.Time(20), 2.0},
|
||||
{execute.Time(0), execute.Time(100), execute.Time(30), 3.0},
|
||||
{execute.Time(0), execute.Time(100), execute.Time(40), 4.0},
|
||||
{execute.Time(0), execute.Time(100), execute.Time(50), 5.0},
|
||||
{execute.Time(0), execute.Time(100), execute.Time(60), 6.0},
|
||||
{execute.Time(0), execute.Time(100), execute.Time(70), 7.0},
|
||||
{execute.Time(0), execute.Time(100), execute.Time(80), 8.0},
|
||||
{execute.Time(0), execute.Time(100), execute.Time(90), 9.0},
|
||||
},
|
||||
},
|
||||
{
|
||||
KeyCols: []string{"_start", "_stop"},
|
||||
ColMeta: []query.ColMeta{
|
||||
{Label: "_start", Type: query.TTime},
|
||||
{Label: "_stop", Type: query.TTime},
|
||||
{Label: "_time", Type: query.TTime},
|
||||
{Label: "_value", Type: query.TFloat},
|
||||
},
|
||||
Data: [][]interface{}{
|
||||
{execute.Time(100), execute.Time(200), execute.Time(100), 10.0},
|
||||
{execute.Time(100), execute.Time(200), execute.Time(110), 11.0},
|
||||
{execute.Time(100), execute.Time(200), execute.Time(120), 12.0},
|
||||
{execute.Time(100), execute.Time(200), execute.Time(130), 13.0},
|
||||
{execute.Time(100), execute.Time(200), execute.Time(140), 14.0},
|
||||
{execute.Time(100), execute.Time(200), execute.Time(150), 15.0},
|
||||
{execute.Time(100), execute.Time(200), execute.Time(160), 16.0},
|
||||
{execute.Time(100), execute.Time(200), execute.Time(170), 17.0},
|
||||
{execute.Time(100), execute.Time(200), execute.Time(180), 18.0},
|
||||
{execute.Time(100), execute.Time(200), execute.Time(190), 19.0},
|
||||
},
|
||||
},
|
||||
},
|
||||
want: []*executetest.Table{
|
||||
{
|
||||
KeyCols: []string{"_start", "_stop"},
|
||||
ColMeta: []query.ColMeta{
|
||||
{Label: "_start", Type: query.TTime},
|
||||
{Label: "_stop", Type: query.TTime},
|
||||
{Label: "_time", Type: query.TTime},
|
||||
{Label: "_value", Type: query.TFloat},
|
||||
},
|
||||
Data: [][]interface{}{
|
||||
{execute.Time(0), execute.Time(100), execute.Time(100), 45.0},
|
||||
},
|
||||
},
|
||||
{
|
||||
KeyCols: []string{"_start", "_stop"},
|
||||
ColMeta: []query.ColMeta{
|
||||
{Label: "_start", Type: query.TTime},
|
||||
{Label: "_stop", Type: query.TTime},
|
||||
{Label: "_time", Type: query.TTime},
|
||||
{Label: "_value", Type: query.TFloat},
|
||||
},
|
||||
Data: [][]interface{}{
|
||||
{execute.Time(100), execute.Time(200), execute.Time(200), 145.0},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "multiple tables with keyed columns",
|
||||
config: execute.DefaultAggregateConfig,
|
||||
agg: sumAgg,
|
||||
data: []*executetest.Table{
|
||||
{
|
||||
KeyCols: []string{"_start", "_stop", "t1"},
|
||||
ColMeta: []query.ColMeta{
|
||||
{Label: "_start", Type: query.TTime},
|
||||
{Label: "_stop", Type: query.TTime},
|
||||
{Label: "t1", Type: query.TString},
|
||||
{Label: "_time", Type: query.TTime},
|
||||
{Label: "_value", Type: query.TFloat},
|
||||
},
|
||||
Data: [][]interface{}{
|
||||
{execute.Time(0), execute.Time(100), "a", execute.Time(0), 0.0},
|
||||
{execute.Time(0), execute.Time(100), "a", execute.Time(10), 1.0},
|
||||
{execute.Time(0), execute.Time(100), "a", execute.Time(20), 2.0},
|
||||
{execute.Time(0), execute.Time(100), "a", execute.Time(30), 3.0},
|
||||
{execute.Time(0), execute.Time(100), "a", execute.Time(40), 4.0},
|
||||
{execute.Time(0), execute.Time(100), "a", execute.Time(50), 5.0},
|
||||
{execute.Time(0), execute.Time(100), "a", execute.Time(60), 6.0},
|
||||
{execute.Time(0), execute.Time(100), "a", execute.Time(70), 7.0},
|
||||
{execute.Time(0), execute.Time(100), "a", execute.Time(80), 8.0},
|
||||
{execute.Time(0), execute.Time(100), "a", execute.Time(90), 9.0},
|
||||
},
|
||||
},
|
||||
{
|
||||
KeyCols: []string{"_start", "_stop", "t1"},
|
||||
ColMeta: []query.ColMeta{
|
||||
{Label: "_start", Type: query.TTime},
|
||||
{Label: "_stop", Type: query.TTime},
|
||||
{Label: "t1", Type: query.TString},
|
||||
{Label: "_time", Type: query.TTime},
|
||||
{Label: "_value", Type: query.TFloat},
|
||||
},
|
||||
Data: [][]interface{}{
|
||||
{execute.Time(0), execute.Time(100), "b", execute.Time(0), 0.3},
|
||||
{execute.Time(0), execute.Time(100), "b", execute.Time(10), 1.3},
|
||||
{execute.Time(0), execute.Time(100), "b", execute.Time(20), 2.3},
|
||||
{execute.Time(0), execute.Time(100), "b", execute.Time(30), 3.3},
|
||||
{execute.Time(0), execute.Time(100), "b", execute.Time(40), 4.3},
|
||||
{execute.Time(0), execute.Time(100), "b", execute.Time(50), 5.3},
|
||||
{execute.Time(0), execute.Time(100), "b", execute.Time(60), 6.3},
|
||||
{execute.Time(0), execute.Time(100), "b", execute.Time(70), 7.3},
|
||||
{execute.Time(0), execute.Time(100), "b", execute.Time(80), 8.3},
|
||||
{execute.Time(0), execute.Time(100), "b", execute.Time(90), 9.3},
|
||||
},
|
||||
},
|
||||
{
|
||||
KeyCols: []string{"_start", "_stop", "t1"},
|
||||
ColMeta: []query.ColMeta{
|
||||
{Label: "_start", Type: query.TTime},
|
||||
{Label: "_stop", Type: query.TTime},
|
||||
{Label: "t1", Type: query.TString},
|
||||
{Label: "_time", Type: query.TTime},
|
||||
{Label: "_value", Type: query.TFloat},
|
||||
},
|
||||
Data: [][]interface{}{
|
||||
{execute.Time(100), execute.Time(200), "a", execute.Time(100), 10.0},
|
||||
{execute.Time(100), execute.Time(200), "a", execute.Time(110), 11.0},
|
||||
{execute.Time(100), execute.Time(200), "a", execute.Time(120), 12.0},
|
||||
{execute.Time(100), execute.Time(200), "a", execute.Time(130), 13.0},
|
||||
{execute.Time(100), execute.Time(200), "a", execute.Time(140), 14.0},
|
||||
{execute.Time(100), execute.Time(200), "a", execute.Time(150), 15.0},
|
||||
{execute.Time(100), execute.Time(200), "a", execute.Time(160), 16.0},
|
||||
{execute.Time(100), execute.Time(200), "a", execute.Time(170), 17.0},
|
||||
{execute.Time(100), execute.Time(200), "a", execute.Time(180), 18.0},
|
||||
{execute.Time(100), execute.Time(200), "a", execute.Time(190), 19.0},
|
||||
},
|
||||
},
|
||||
{
|
||||
KeyCols: []string{"_start", "_stop", "t1"},
|
||||
ColMeta: []query.ColMeta{
|
||||
{Label: "_start", Type: query.TTime},
|
||||
{Label: "_stop", Type: query.TTime},
|
||||
{Label: "t1", Type: query.TString},
|
||||
{Label: "_time", Type: query.TTime},
|
||||
{Label: "_value", Type: query.TFloat},
|
||||
},
|
||||
Data: [][]interface{}{
|
||||
{execute.Time(100), execute.Time(200), "b", execute.Time(100), 10.3},
|
||||
{execute.Time(100), execute.Time(200), "b", execute.Time(110), 11.3},
|
||||
{execute.Time(100), execute.Time(200), "b", execute.Time(120), 12.3},
|
||||
{execute.Time(100), execute.Time(200), "b", execute.Time(130), 13.3},
|
||||
{execute.Time(100), execute.Time(200), "b", execute.Time(140), 14.3},
|
||||
{execute.Time(100), execute.Time(200), "b", execute.Time(150), 15.3},
|
||||
{execute.Time(100), execute.Time(200), "b", execute.Time(160), 16.3},
|
||||
{execute.Time(100), execute.Time(200), "b", execute.Time(170), 17.3},
|
||||
{execute.Time(100), execute.Time(200), "b", execute.Time(180), 18.3},
|
||||
{execute.Time(100), execute.Time(200), "b", execute.Time(190), 19.3},
|
||||
},
|
||||
},
|
||||
},
|
||||
want: []*executetest.Table{
|
||||
{
|
||||
KeyCols: []string{"_start", "_stop", "t1"},
|
||||
ColMeta: []query.ColMeta{
|
||||
{Label: "_start", Type: query.TTime},
|
||||
{Label: "_stop", Type: query.TTime},
|
||||
{Label: "t1", Type: query.TString},
|
||||
{Label: "_time", Type: query.TTime},
|
||||
{Label: "_value", Type: query.TFloat},
|
||||
},
|
||||
Data: [][]interface{}{
|
||||
{execute.Time(0), execute.Time(100), "a", execute.Time(100), 45.0},
|
||||
},
|
||||
},
|
||||
{
|
||||
KeyCols: []string{"_start", "_stop", "t1"},
|
||||
ColMeta: []query.ColMeta{
|
||||
{Label: "_start", Type: query.TTime},
|
||||
{Label: "_stop", Type: query.TTime},
|
||||
{Label: "t1", Type: query.TString},
|
||||
{Label: "_time", Type: query.TTime},
|
||||
{Label: "_value", Type: query.TFloat},
|
||||
},
|
||||
Data: [][]interface{}{
|
||||
{execute.Time(100), execute.Time(200), "a", execute.Time(200), 145.0},
|
||||
},
|
||||
},
|
||||
{
|
||||
KeyCols: []string{"_start", "_stop", "t1"},
|
||||
ColMeta: []query.ColMeta{
|
||||
{Label: "_start", Type: query.TTime},
|
||||
{Label: "_stop", Type: query.TTime},
|
||||
{Label: "t1", Type: query.TString},
|
||||
{Label: "_time", Type: query.TTime},
|
||||
{Label: "_value", Type: query.TFloat},
|
||||
},
|
||||
Data: [][]interface{}{
|
||||
{execute.Time(0), execute.Time(100), "b", execute.Time(100), 48.0},
|
||||
},
|
||||
},
|
||||
{
|
||||
KeyCols: []string{"_start", "_stop", "t1"},
|
||||
ColMeta: []query.ColMeta{
|
||||
{Label: "_start", Type: query.TTime},
|
||||
{Label: "_stop", Type: query.TTime},
|
||||
{Label: "t1", Type: query.TString},
|
||||
{Label: "_time", Type: query.TTime},
|
||||
{Label: "_value", Type: query.TFloat},
|
||||
},
|
||||
Data: [][]interface{}{
|
||||
{execute.Time(100), execute.Time(200), "b", execute.Time(200), 148.0},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "multiple values",
|
||||
config: execute.AggregateConfig{
|
||||
Columns: []string{"x", "y"},
|
||||
TimeSrc: execute.DefaultStopColLabel,
|
||||
TimeDst: execute.DefaultTimeColLabel,
|
||||
},
|
||||
agg: sumAgg,
|
||||
data: []*executetest.Table{{
|
||||
KeyCols: []string{"_start", "_stop"},
|
||||
ColMeta: []query.ColMeta{
|
||||
{Label: "_start", Type: query.TTime},
|
||||
{Label: "_stop", Type: query.TTime},
|
||||
{Label: "_time", Type: query.TTime},
|
||||
{Label: "x", Type: query.TFloat},
|
||||
{Label: "y", Type: query.TFloat},
|
||||
},
|
||||
Data: [][]interface{}{
|
||||
{execute.Time(0), execute.Time(100), execute.Time(0), 0.0, 0.0},
|
||||
{execute.Time(0), execute.Time(100), execute.Time(10), 1.0, -1.0},
|
||||
{execute.Time(0), execute.Time(100), execute.Time(20), 2.0, -2.0},
|
||||
{execute.Time(0), execute.Time(100), execute.Time(30), 3.0, -3.0},
|
||||
{execute.Time(0), execute.Time(100), execute.Time(40), 4.0, -4.0},
|
||||
{execute.Time(0), execute.Time(100), execute.Time(50), 5.0, -5.0},
|
||||
{execute.Time(0), execute.Time(100), execute.Time(60), 6.0, -6.0},
|
||||
{execute.Time(0), execute.Time(100), execute.Time(70), 7.0, -7.0},
|
||||
{execute.Time(0), execute.Time(100), execute.Time(80), 8.0, -8.0},
|
||||
{execute.Time(0), execute.Time(100), execute.Time(90), 9.0, -9.0},
|
||||
},
|
||||
}},
|
||||
want: []*executetest.Table{{
|
||||
KeyCols: []string{"_start", "_stop"},
|
||||
ColMeta: []query.ColMeta{
|
||||
{Label: "_start", Type: query.TTime},
|
||||
{Label: "_stop", Type: query.TTime},
|
||||
{Label: "_time", Type: query.TTime},
|
||||
{Label: "x", Type: query.TFloat},
|
||||
{Label: "y", Type: query.TFloat},
|
||||
},
|
||||
Data: [][]interface{}{
|
||||
{execute.Time(0), execute.Time(100), execute.Time(100), 45.0, -45.0},
|
||||
},
|
||||
}},
|
||||
},
|
||||
{
|
||||
name: "multiple values changing types",
|
||||
config: execute.AggregateConfig{
|
||||
Columns: []string{"x", "y"},
|
||||
TimeSrc: execute.DefaultStopColLabel,
|
||||
TimeDst: execute.DefaultTimeColLabel,
|
||||
},
|
||||
agg: countAgg,
|
||||
data: []*executetest.Table{{
|
||||
KeyCols: []string{"_start", "_stop"},
|
||||
ColMeta: []query.ColMeta{
|
||||
{Label: "_start", Type: query.TTime},
|
||||
{Label: "_stop", Type: query.TTime},
|
||||
{Label: "_time", Type: query.TTime},
|
||||
{Label: "x", Type: query.TFloat},
|
||||
{Label: "y", Type: query.TFloat},
|
||||
},
|
||||
Data: [][]interface{}{
|
||||
{execute.Time(0), execute.Time(100), execute.Time(0), 0.0, 0.0},
|
||||
{execute.Time(0), execute.Time(100), execute.Time(10), 1.0, -1.0},
|
||||
{execute.Time(0), execute.Time(100), execute.Time(20), 2.0, -2.0},
|
||||
{execute.Time(0), execute.Time(100), execute.Time(30), 3.0, -3.0},
|
||||
{execute.Time(0), execute.Time(100), execute.Time(40), 4.0, -4.0},
|
||||
{execute.Time(0), execute.Time(100), execute.Time(50), 5.0, -5.0},
|
||||
{execute.Time(0), execute.Time(100), execute.Time(60), 6.0, -6.0},
|
||||
{execute.Time(0), execute.Time(100), execute.Time(70), 7.0, -7.0},
|
||||
{execute.Time(0), execute.Time(100), execute.Time(80), 8.0, -8.0},
|
||||
{execute.Time(0), execute.Time(100), execute.Time(90), 9.0, -9.0},
|
||||
},
|
||||
}},
|
||||
want: []*executetest.Table{{
|
||||
KeyCols: []string{"_start", "_stop"},
|
||||
ColMeta: []query.ColMeta{
|
||||
{Label: "_start", Type: query.TTime},
|
||||
{Label: "_stop", Type: query.TTime},
|
||||
{Label: "_time", Type: query.TTime},
|
||||
{Label: "x", Type: query.TInt},
|
||||
{Label: "y", Type: query.TInt},
|
||||
},
|
||||
Data: [][]interface{}{
|
||||
{execute.Time(0), execute.Time(100), execute.Time(100), int64(10), int64(10)},
|
||||
},
|
||||
}},
|
||||
},
|
||||
}
|
||||
for _, tc := range testCases {
|
||||
tc := tc
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
d := executetest.NewDataset(executetest.RandomDatasetID())
|
||||
c := execute.NewTableBuilderCache(executetest.UnlimitedAllocator)
|
||||
c.SetTriggerSpec(execute.DefaultTriggerSpec)
|
||||
|
||||
agg := execute.NewAggregateTransformation(d, c, tc.agg, tc.config)
|
||||
|
||||
parentID := executetest.RandomDatasetID()
|
||||
for _, b := range tc.data {
|
||||
if err := agg.Process(parentID, b); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
got, err := executetest.TablesFromCache(c)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
executetest.NormalizeTables(got)
|
||||
executetest.NormalizeTables(tc.want)
|
||||
|
||||
sort.Sort(executetest.SortedTables(got))
|
||||
sort.Sort(executetest.SortedTables(tc.want))
|
||||
|
||||
if !cmp.Equal(tc.want, got, cmpopts.EquateNaNs()) {
|
||||
t.Errorf("unexpected tables -want/+got\n%s", cmp.Diff(tc.want, got))
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
@ -16,6 +16,8 @@ import (
|
|||
"github.com/influxdata/platform"
|
||||
"github.com/influxdata/platform/mock"
|
||||
"github.com/influxdata/platform/query/influxql"
|
||||
"github.com/influxdata/platform/query/semantic/semantictest"
|
||||
platformtesting "github.com/influxdata/platform/testing"
|
||||
|
||||
"github.com/google/go-cmp/cmp"
|
||||
"golang.org/x/text/unicode/norm"
|
||||
|
|
@ -92,15 +94,13 @@ func main() {
|
|||
var dbrpMappingSvc = mock.NewDBRPMappingService()
|
||||
|
||||
func init() {
|
||||
organizationID := platform.ID("aaaa")
|
||||
bucketID := platform.ID("bbbb")
|
||||
mapping := platform.DBRPMapping{
|
||||
Cluster: "cluster",
|
||||
Database: "db",
|
||||
RetentionPolicy: "rp",
|
||||
Default: true,
|
||||
OrganizationID: organizationID,
|
||||
BucketID: bucketID,
|
||||
OrganizationID: platformtesting.MustIDFromString("aaaaaaaaaaaaaaaa"),
|
||||
BucketID: platformtesting.MustIDFromString("bbbbbbbbbbbbbbbb"),
|
||||
}
|
||||
dbrpMappingSvc.FindByFn = func(ctx context.Context, cluster string, db string, rp string) (*platform.DBRPMapping, error) {
|
||||
return &mapping, nil
|
||||
|
|
|
|||
|
|
@ -17,6 +17,8 @@ import (
|
|||
"github.com/influxdata/platform/query"
|
||||
_ "github.com/influxdata/platform/query/builtin"
|
||||
"github.com/influxdata/platform/query/influxql"
|
||||
"github.com/influxdata/platform/query/querytest"
|
||||
platformtesting "github.com/influxdata/platform/testing"
|
||||
|
||||
"github.com/andreyvit/diff"
|
||||
)
|
||||
|
|
@ -29,8 +31,8 @@ func init() {
|
|||
Database: "db0",
|
||||
RetentionPolicy: "autogen",
|
||||
Default: true,
|
||||
OrganizationID: platform.ID("org"),
|
||||
BucketID: platform.ID("bucket"),
|
||||
OrganizationID: platformtesting.MustIDFromString("cadecadecadecade"),
|
||||
BucketID: platformtesting.MustIDFromString("da7aba5e5eedca5e"),
|
||||
}
|
||||
dbrpMappingSvc.FindByFn = func(ctx context.Context, cluster string, db string, rp string) (*platform.DBRPMapping, error) {
|
||||
return &mapping, nil
|
||||
|
|
|
|||
|
|
@ -14,12 +14,13 @@ import (
|
|||
"github.com/influxdata/platform"
|
||||
"github.com/influxdata/platform/mock"
|
||||
"github.com/influxdata/platform/query/influxql"
|
||||
platformtesting "github.com/influxdata/platform/testing"
|
||||
)
|
||||
|
||||
var dbrpMappingSvc = mock.NewDBRPMappingService()
|
||||
var organizationID = platform.ID("aaaa")
|
||||
var bucketID = platform.ID("bbbb")
|
||||
var altBucketID = platform.ID("cccc")
|
||||
var organizationID platform.ID
|
||||
var bucketID platform.ID
|
||||
var altBucketID platform.ID
|
||||
|
||||
func init() {
|
||||
mapping := platform.DBRPMapping{
|
||||
|
|
@ -83,6 +84,10 @@ func NewFixture(stmt string, spec *flux.Spec) Fixture {
|
|||
}
|
||||
|
||||
func (f *fixture) Run(t *testing.T) {
|
||||
organizationID = platformtesting.MustIDFromString("aaaaaaaaaaaaaaaa")
|
||||
bucketID = platformtesting.MustIDFromString("bbbbbbbbbbbbbbbb")
|
||||
altBucketID = platformtesting.MustIDFromString("cccccccccccccccc")
|
||||
|
||||
t.Run(f.stmt, func(t *testing.T) {
|
||||
if err := f.spec.Validate(); err != nil {
|
||||
t.Fatalf("%s:%d: expected spec is not valid: %s", f.file, f.line, err)
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ import (
|
|||
"github.com/influxdata/platform/mock"
|
||||
"github.com/influxdata/platform/query/influxql"
|
||||
"github.com/influxdata/platform/query/influxql/spectests"
|
||||
platformtesting "github.com/influxdata/platform/testing"
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
|
|
@ -20,8 +21,8 @@ func init() {
|
|||
Database: "db0",
|
||||
RetentionPolicy: "autogen",
|
||||
Default: true,
|
||||
OrganizationID: platform.ID("aaaa"),
|
||||
BucketID: platform.ID("bbbb"),
|
||||
OrganizationID: platformtesting.MustIDFromString("aaaaaaaaaaaaaaaa"),
|
||||
BucketID: platformtesting.MustIDFromString("bbbbbbbbbbbbbbbb"),
|
||||
}
|
||||
dbrpMappingSvc.FindByFn = func(ctx context.Context, cluster string, db string, rp string) (*platform.DBRPMapping, error) {
|
||||
return &mapping, nil
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
package snowflake
|
||||
|
||||
import (
|
||||
"encoding/binary"
|
||||
"errors"
|
||||
"math/rand"
|
||||
"sync"
|
||||
|
|
@ -57,7 +56,7 @@ func NewDefaultIDGenerator() *IDGenerator {
|
|||
return NewIDGenerator()
|
||||
}
|
||||
|
||||
// IDGenerator generates a new ID.
|
||||
// IDGenerator holds the ID generator.
|
||||
type IDGenerator struct {
|
||||
Generator *snowflake.Generator
|
||||
}
|
||||
|
|
@ -87,8 +86,12 @@ func NewIDGenerator(opts ...IDGeneratorOp) *IDGenerator {
|
|||
|
||||
// ID returns the next platform.ID from an IDGenerator.
|
||||
func (g *IDGenerator) ID() platform.ID {
|
||||
id := make(platform.ID, 8)
|
||||
i := g.Generator.Next()
|
||||
binary.BigEndian.PutUint64(id, i)
|
||||
var id platform.ID
|
||||
for {
|
||||
id = platform.ID(g.Generator.Next())
|
||||
if id.Valid() {
|
||||
break
|
||||
}
|
||||
}
|
||||
return id
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,16 +1,19 @@
|
|||
package snowflake
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"testing"
|
||||
|
||||
"github.com/influxdata/platform"
|
||||
)
|
||||
|
||||
func TestIDLength(t *testing.T) {
|
||||
func TestIDStringLength(t *testing.T) {
|
||||
gen := NewIDGenerator()
|
||||
id := gen.ID()
|
||||
if len(id) != 8 {
|
||||
if !id.Valid() {
|
||||
t.Fail()
|
||||
}
|
||||
enc, _ := id.Encode()
|
||||
if len(enc) != platform.IDStringLength {
|
||||
t.Fail()
|
||||
}
|
||||
}
|
||||
|
|
@ -21,7 +24,7 @@ func TestToFromString(t *testing.T) {
|
|||
var clone platform.ID
|
||||
if err := clone.DecodeFromString(id.String()); err != nil {
|
||||
t.Error(err)
|
||||
} else if !bytes.Equal(id, clone) {
|
||||
} else if id != clone {
|
||||
t.Errorf("id started as %x but got back %x", id, clone)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@ import (
|
|||
_ "github.com/influxdata/platform/query/builtin"
|
||||
"github.com/influxdata/platform/task/backend"
|
||||
"github.com/influxdata/platform/task/backend/executor"
|
||||
platformtesting "github.com/influxdata/platform/testing"
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
|
|
@ -250,13 +251,15 @@ const testScript = `option task = {
|
|||
from(bucket: "one") |> toHTTP(url: "http://example.com")`
|
||||
|
||||
func testExecutorQuerySuccess(t *testing.T, fn createSysFn) {
|
||||
var orgID = platformtesting.MustIDFromString("aaaaaaaaaaaaaaaa")
|
||||
var userID = platformtesting.MustIDFromString("baaaaaaaaaaaaaab")
|
||||
sys := fn()
|
||||
t.Run(sys.name+"/QuerySuccess", func(t *testing.T) {
|
||||
tid, err := sys.st.CreateTask(context.Background(), platform.ID("org"), platform.ID("user"), testScript, 0)
|
||||
tid, err := sys.st.CreateTask(context.Background(), orgID, userID, testScript)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
qr := backend.QueuedRun{TaskID: tid, RunID: platform.ID{1}, Now: 123}
|
||||
qr := backend.QueuedRun{TaskID: *tid, RunID: platform.ID(1), Now: 123}
|
||||
rp, err := sys.ex.Execute(context.Background(), qr)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
|
|
@ -300,13 +303,15 @@ func testExecutorQuerySuccess(t *testing.T, fn createSysFn) {
|
|||
}
|
||||
|
||||
func testExecutorQueryFailure(t *testing.T, fn createSysFn) {
|
||||
var orgID = platformtesting.MustIDFromString("aaaaaaaaaaaaaaaa")
|
||||
var userID = platformtesting.MustIDFromString("baaaaaaaaaaaaaab")
|
||||
sys := fn()
|
||||
t.Run(sys.name+"/QueryFail", func(t *testing.T) {
|
||||
tid, err := sys.st.CreateTask(context.Background(), platform.ID("org"), platform.ID("user"), testScript, 0)
|
||||
tid, err := sys.st.CreateTask(context.Background(), orgID, userID, testScript)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
qr := backend.QueuedRun{TaskID: tid, RunID: platform.ID{1}, Now: 123}
|
||||
qr := backend.QueuedRun{TaskID: *tid, RunID: platform.ID(1), Now: 123}
|
||||
rp, err := sys.ex.Execute(context.Background(), qr)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
|
|
@ -326,13 +331,15 @@ func testExecutorQueryFailure(t *testing.T, fn createSysFn) {
|
|||
}
|
||||
|
||||
func testExecutorPromiseCancel(t *testing.T, fn createSysFn) {
|
||||
var orgID = platformtesting.MustIDFromString("aaaaaaaaaaaaaaaa")
|
||||
var userID = platformtesting.MustIDFromString("baaaaaaaaaaaaaab")
|
||||
sys := fn()
|
||||
t.Run(sys.name+"/PromiseCancel", func(t *testing.T) {
|
||||
tid, err := sys.st.CreateTask(context.Background(), platform.ID("org"), platform.ID("user"), testScript, 0)
|
||||
tid, err := sys.st.CreateTask(context.Background(), orgID, userID, testScript)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
qr := backend.QueuedRun{TaskID: tid, RunID: platform.ID{1}, Now: 123}
|
||||
qr := backend.QueuedRun{TaskID: *tid, RunID: platform.ID(1), Now: 123}
|
||||
rp, err := sys.ex.Execute(context.Background(), qr)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
|
|
@ -351,13 +358,15 @@ func testExecutorPromiseCancel(t *testing.T, fn createSysFn) {
|
|||
}
|
||||
|
||||
func testExecutorServiceError(t *testing.T, fn createSysFn) {
|
||||
var orgID = platformtesting.MustIDFromString("aaaaaaaaaaaaaaaa")
|
||||
var userID = platformtesting.MustIDFromString("baaaaaaaaaaaaaab")
|
||||
sys := fn()
|
||||
t.Run(sys.name+"/ServiceError", func(t *testing.T) {
|
||||
tid, err := sys.st.CreateTask(context.Background(), platform.ID("org"), platform.ID("user"), testScript, 0)
|
||||
tid, err := sys.st.CreateTask(context.Background(), orgID, userID, testScript)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
qr := backend.QueuedRun{TaskID: tid, RunID: platform.ID{1}, Now: 123}
|
||||
qr := backend.QueuedRun{TaskID: *tid, RunID: platform.ID(1), Now: 123}
|
||||
|
||||
var forced = errors.New("forced")
|
||||
sys.svc.FailNextQuery(forced)
|
||||
|
|
|
|||
|
|
@ -66,7 +66,7 @@ func (s *inmem) CreateTask(_ context.Context, org, user platform.ID, script stri
|
|||
Delay: int32(o.Delay / time.Second),
|
||||
}
|
||||
|
||||
return id, nil
|
||||
return &id, nil
|
||||
}
|
||||
|
||||
func (s *inmem) ModifyTask(_ context.Context, id platform.ID, script string) error {
|
||||
|
|
@ -79,7 +79,7 @@ func (s *inmem) ModifyTask(_ context.Context, id platform.ID, script string) err
|
|||
defer s.mu.Unlock()
|
||||
|
||||
for n, t := range s.tasks {
|
||||
if !bytes.Equal(t.ID, id) {
|
||||
if t.ID != id {
|
||||
continue
|
||||
}
|
||||
|
||||
|
|
@ -93,7 +93,7 @@ func (s *inmem) ModifyTask(_ context.Context, id platform.ID, script string) err
|
|||
}
|
||||
|
||||
func (s *inmem) ListTasks(_ context.Context, params TaskSearchParams) ([]StoreTask, error) {
|
||||
if len(params.Org) > 0 && len(params.User) > 0 {
|
||||
if params.Org.Valid() && params.User.Valid() {
|
||||
return nil, errors.New("ListTasks: org and user filters are mutually exclusive")
|
||||
}
|
||||
|
||||
|
|
@ -124,13 +124,19 @@ func (s *inmem) ListTasks(_ context.Context, params TaskSearchParams) ([]StoreTa
|
|||
defer s.mu.RUnlock()
|
||||
|
||||
for _, t := range s.tasks {
|
||||
if len(after) > 0 && bytes.Compare(after, t.ID) >= 0 {
|
||||
taskIDBytes, err := t.ID.Encode()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
afterBytes, _ := after.Encode()
|
||||
|
||||
if bytes.Compare(afterBytes, taskIDBytes) >= 0 {
|
||||
continue
|
||||
}
|
||||
if len(org) > 0 && !bytes.Equal(org, t.Org) {
|
||||
if org.Valid() && org != t.Org {
|
||||
continue
|
||||
}
|
||||
if len(user) > 0 && !bytes.Equal(user, t.User) {
|
||||
if user.Valid() && user != t.User {
|
||||
continue
|
||||
}
|
||||
|
||||
|
|
@ -148,7 +154,7 @@ func (s *inmem) FindTaskByID(_ context.Context, id platform.ID) (*StoreTask, err
|
|||
defer s.mu.RUnlock()
|
||||
|
||||
for _, t := range s.tasks {
|
||||
if bytes.Equal(t.ID, id) {
|
||||
if t.ID == id {
|
||||
// Return a copy of the task.
|
||||
task := new(StoreTask)
|
||||
*task = t
|
||||
|
|
@ -230,7 +236,7 @@ func (s *inmem) DeleteTask(_ context.Context, id platform.ID) (deleted bool, err
|
|||
|
||||
idx := -1
|
||||
for i, t := range s.tasks {
|
||||
if bytes.Equal(t.ID, id) {
|
||||
if t.ID == id {
|
||||
idx = i
|
||||
break
|
||||
}
|
||||
|
|
@ -317,7 +323,7 @@ func (s *inmem) delete(ctx context.Context, id platform.ID, f func(StoreTask) pl
|
|||
newTasks := []StoreTask{}
|
||||
deletingTasks := []platform.ID{}
|
||||
for i := range s.tasks {
|
||||
if !bytes.Equal(f(s.tasks[i]), id) {
|
||||
if f(s.tasks[i]) != id {
|
||||
newTasks = append(newTasks, s.tasks[i])
|
||||
} else {
|
||||
deletingTasks = append(deletingTasks, s.tasks[i].ID)
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ func TestScheduler_StartScriptOnClaim(t *testing.T) {
|
|||
defer o.Stop()
|
||||
|
||||
task := &backend.StoreTask{
|
||||
ID: platform.ID{1},
|
||||
ID: platform.ID(1),
|
||||
}
|
||||
meta := &backend.StoreTaskMeta{
|
||||
MaxConcurrency: 1,
|
||||
|
|
@ -44,7 +44,7 @@ func TestScheduler_StartScriptOnClaim(t *testing.T) {
|
|||
|
||||
// For every second, can queue for timestamps 4 and 5.
|
||||
task = &backend.StoreTask{
|
||||
ID: platform.ID{2},
|
||||
ID: platform.ID(2),
|
||||
}
|
||||
meta = &backend.StoreTaskMeta{
|
||||
MaxConcurrency: 99,
|
||||
|
|
@ -99,7 +99,7 @@ func TestScheduler_CreateNextRunOnTick(t *testing.T) {
|
|||
defer o.Stop()
|
||||
|
||||
task := &backend.StoreTask{
|
||||
ID: platform.ID{1},
|
||||
ID: platform.ID(1),
|
||||
}
|
||||
meta := &backend.StoreTaskMeta{
|
||||
MaxConcurrency: 2,
|
||||
|
|
@ -169,7 +169,7 @@ func TestScheduler_Release(t *testing.T) {
|
|||
defer o.Stop()
|
||||
|
||||
task := &backend.StoreTask{
|
||||
ID: platform.ID{1},
|
||||
ID: platform.ID(1),
|
||||
}
|
||||
meta := &backend.StoreTaskMeta{
|
||||
MaxConcurrency: 99,
|
||||
|
|
@ -205,7 +205,7 @@ func TestScheduler_Queue(t *testing.T) {
|
|||
defer o.Stop()
|
||||
|
||||
task := &backend.StoreTask{
|
||||
ID: platform.ID{1},
|
||||
ID: platform.ID(1),
|
||||
}
|
||||
meta := &backend.StoreTaskMeta{
|
||||
MaxConcurrency: 1,
|
||||
|
|
@ -418,7 +418,7 @@ func TestScheduler_Metrics(t *testing.T) {
|
|||
|
||||
// Claim a task that starts later.
|
||||
task := &backend.StoreTask{
|
||||
ID: platform.ID{1},
|
||||
ID: platform.ID(1),
|
||||
}
|
||||
meta := &backend.StoreTaskMeta{
|
||||
MaxConcurrency: 99,
|
||||
|
|
|
|||
|
|
@ -256,10 +256,10 @@ func (StoreValidation) CreateArgs(org, user platform.ID, script string) (options
|
|||
}
|
||||
}
|
||||
|
||||
if len(org) == 0 {
|
||||
if !org.Valid() {
|
||||
missing = append(missing, "organization ID")
|
||||
}
|
||||
if len(user) == 0 {
|
||||
if !user.Valid() {
|
||||
missing = append(missing, "user ID")
|
||||
}
|
||||
|
||||
|
|
@ -286,7 +286,7 @@ func (StoreValidation) ModifyArgs(taskID platform.ID, script string) (options.Op
|
|||
}
|
||||
}
|
||||
|
||||
if len(taskID) == 0 {
|
||||
if !taskID.Valid() {
|
||||
missing = append(missing, "task ID")
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2,7 +2,6 @@
|
|||
package mock
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"encoding/binary"
|
||||
"errors"
|
||||
|
|
@ -134,7 +133,7 @@ func (s *Scheduler) ReleaseError(err error) {
|
|||
type DesiredState struct {
|
||||
mu sync.Mutex
|
||||
// Map of stringified task ID to last ID used for run.
|
||||
runIDs map[string]uint32
|
||||
runIDs map[string]uint64
|
||||
|
||||
// Map of stringified, concatenated task and platform ID, to runs that have been created.
|
||||
created map[string]backend.QueuedRun
|
||||
|
|
@ -147,7 +146,7 @@ var _ backend.DesiredState = (*DesiredState)(nil)
|
|||
|
||||
func NewDesiredState() *DesiredState {
|
||||
return &DesiredState{
|
||||
runIDs: make(map[string]uint32),
|
||||
runIDs: make(map[string]uint64),
|
||||
created: make(map[string]backend.QueuedRun),
|
||||
meta: make(map[string]backend.StoreTaskMeta),
|
||||
}
|
||||
|
|
@ -217,7 +216,7 @@ func (d *DesiredState) CreatedFor(taskID platform.ID) []backend.QueuedRun {
|
|||
|
||||
var qrs []backend.QueuedRun
|
||||
for _, qr := range d.created {
|
||||
if bytes.Equal(qr.TaskID, taskID) {
|
||||
if qr.TaskID == taskID {
|
||||
qrs = append(qrs, qr)
|
||||
}
|
||||
}
|
||||
|
|
@ -289,7 +288,7 @@ func (e *Executor) RunningFor(taskID platform.ID) []*RunPromise {
|
|||
|
||||
var rps []*RunPromise
|
||||
for _, rp := range e.running {
|
||||
if bytes.Equal(rp.Run().TaskID, taskID) {
|
||||
if rp.Run().TaskID == taskID {
|
||||
rps = append(rps, rp)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -79,7 +79,7 @@ func (p pAdapter) CreateTask(ctx context.Context, t *platform.Task) error {
|
|||
if err != nil {
|
||||
return err
|
||||
}
|
||||
t.ID = id
|
||||
t.ID = *id
|
||||
t.Every = opts.Every.String()
|
||||
t.Cron = opts.Cron
|
||||
|
||||
|
|
@ -172,8 +172,8 @@ func toPlatformTask(t backend.StoreTask) (*platform.Task, error) {
|
|||
Name: t.Name,
|
||||
Status: "", // TODO: set and update status
|
||||
Owner: platform.User{
|
||||
ID: append([]byte(nil), t.User...), // Copy just in case.
|
||||
Name: "", // TODO(mr): how to get owner name?
|
||||
ID: t.User,
|
||||
Name: "", // TODO(mr): how to get owner name?
|
||||
},
|
||||
Flux: t.Script,
|
||||
Cron: opts.Cron,
|
||||
|
|
|
|||
185
testing/auth.go
185
testing/auth.go
|
|
@ -110,7 +110,7 @@ func CreateAuthorization(
|
|||
Users: []*platform.User{
|
||||
{
|
||||
Name: "cooluser",
|
||||
ID: idFromString(t, userOneID),
|
||||
ID: MustIDFromString(userOneID),
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
@ -126,8 +126,8 @@ func CreateAuthorization(
|
|||
wants: wants{
|
||||
authorizations: []*platform.Authorization{
|
||||
{
|
||||
ID: idFromString(t, authOneID),
|
||||
UserID: idFromString(t, userOneID),
|
||||
ID: MustIDFromString(authOneID),
|
||||
UserID: MustIDFromString(userOneID),
|
||||
Token: "rand",
|
||||
Status: platform.Active,
|
||||
User: "cooluser",
|
||||
|
|
@ -151,17 +151,17 @@ func CreateAuthorization(
|
|||
Users: []*platform.User{
|
||||
{
|
||||
Name: "cooluser",
|
||||
ID: idFromString(t, userOneID),
|
||||
ID: MustIDFromString(userOneID),
|
||||
},
|
||||
{
|
||||
Name: "regularuser",
|
||||
ID: idFromString(t, userTwoID),
|
||||
ID: MustIDFromString(userTwoID),
|
||||
},
|
||||
},
|
||||
Authorizations: []*platform.Authorization{
|
||||
{
|
||||
ID: idFromString(t, authOneID),
|
||||
UserID: idFromString(t, userOneID),
|
||||
ID: MustIDFromString(authOneID),
|
||||
UserID: MustIDFromString(userOneID),
|
||||
Token: "supersecret",
|
||||
Permissions: []platform.Permission{
|
||||
platform.CreateUserPermission,
|
||||
|
|
@ -181,8 +181,8 @@ func CreateAuthorization(
|
|||
wants: wants{
|
||||
authorizations: []*platform.Authorization{
|
||||
{
|
||||
ID: idFromString(t, authOneID),
|
||||
UserID: idFromString(t, userOneID),
|
||||
ID: MustIDFromString(authOneID),
|
||||
UserID: MustIDFromString(userOneID),
|
||||
User: "cooluser",
|
||||
Status: platform.Active,
|
||||
Token: "supersecret",
|
||||
|
|
@ -192,9 +192,8 @@ func CreateAuthorization(
|
|||
},
|
||||
},
|
||||
{
|
||||
ID: idFromString(t, authTwoID),
|
||||
UserID: idFromString(t, userTwoID),
|
||||
Status: platform.Active,
|
||||
ID: MustIDFromString(authTwoID),
|
||||
UserID: MustIDFromString(userTwoID),
|
||||
User: "regularuser",
|
||||
Token: "rand",
|
||||
Permissions: []platform.Permission{
|
||||
|
|
@ -221,7 +220,9 @@ func CreateAuthorization(
|
|||
t.Fatalf("expected error messages to match '%v' got '%v'", tt.wants.err, err.Error())
|
||||
}
|
||||
}
|
||||
// if tt.args.authorization.ID != nil {
|
||||
defer s.DeleteAuthorization(ctx, tt.args.authorization.ID)
|
||||
// }
|
||||
|
||||
authorizations, _, err := s.FindAuthorizations(ctx, platform.AuthorizationFilter{})
|
||||
if err != nil {
|
||||
|
|
@ -259,17 +260,17 @@ func FindAuthorizationByID(
|
|||
Users: []*platform.User{
|
||||
{
|
||||
Name: "cooluser",
|
||||
ID: idFromString(t, userOneID),
|
||||
ID: MustIDFromString(userOneID),
|
||||
},
|
||||
{
|
||||
Name: "regularuser",
|
||||
ID: idFromString(t, userTwoID),
|
||||
ID: MustIDFromString(userTwoID),
|
||||
},
|
||||
},
|
||||
Authorizations: []*platform.Authorization{
|
||||
{
|
||||
ID: idFromString(t, authOneID),
|
||||
UserID: idFromString(t, userOneID),
|
||||
ID: MustIDFromString(authOneID),
|
||||
UserID: MustIDFromString(userOneID),
|
||||
Token: "rand1",
|
||||
Permissions: []platform.Permission{
|
||||
platform.CreateUserPermission,
|
||||
|
|
@ -277,8 +278,8 @@ func FindAuthorizationByID(
|
|||
},
|
||||
},
|
||||
{
|
||||
ID: idFromString(t, authTwoID),
|
||||
UserID: idFromString(t, userTwoID),
|
||||
ID: MustIDFromString(authTwoID),
|
||||
UserID: MustIDFromString(userTwoID),
|
||||
Token: "rand2",
|
||||
Permissions: []platform.Permission{
|
||||
platform.CreateUserPermission,
|
||||
|
|
@ -287,12 +288,12 @@ func FindAuthorizationByID(
|
|||
},
|
||||
},
|
||||
args: args{
|
||||
id: idFromString(t, authTwoID),
|
||||
id: MustIDFromString(authTwoID),
|
||||
},
|
||||
wants: wants{
|
||||
authorization: &platform.Authorization{
|
||||
ID: idFromString(t, authTwoID),
|
||||
UserID: idFromString(t, userTwoID),
|
||||
ID: MustIDFromString(authTwoID),
|
||||
UserID: MustIDFromString(userTwoID),
|
||||
User: "regularuser",
|
||||
Status: platform.Active,
|
||||
Token: "rand2",
|
||||
|
|
@ -353,17 +354,17 @@ func FindAuthorizationByToken(
|
|||
Users: []*platform.User{
|
||||
{
|
||||
Name: "cooluser",
|
||||
ID: idFromString(t, userOneID),
|
||||
ID: MustIDFromString(userOneID),
|
||||
},
|
||||
{
|
||||
Name: "regularuser",
|
||||
ID: idFromString(t, userTwoID),
|
||||
ID: MustIDFromString(userTwoID),
|
||||
},
|
||||
},
|
||||
Authorizations: []*platform.Authorization{
|
||||
{
|
||||
ID: idFromString(t, authOneID),
|
||||
UserID: idFromString(t, userOneID),
|
||||
ID: MustIDFromString(authOneID),
|
||||
UserID: MustIDFromString(userOneID),
|
||||
Token: "rand1",
|
||||
Status: platform.Inactive,
|
||||
Permissions: []platform.Permission{
|
||||
|
|
@ -372,8 +373,8 @@ func FindAuthorizationByToken(
|
|||
},
|
||||
},
|
||||
{
|
||||
ID: idFromString(t, authZeroID),
|
||||
UserID: idFromString(t, userOneID),
|
||||
ID: MustIDFromString(authZeroID),
|
||||
UserID: MustIDFromString(userOneID),
|
||||
Token: "rand0",
|
||||
Permissions: []platform.Permission{
|
||||
platform.CreateUserPermission,
|
||||
|
|
@ -381,16 +382,16 @@ func FindAuthorizationByToken(
|
|||
},
|
||||
},
|
||||
{
|
||||
ID: idFromString(t, authTwoID),
|
||||
UserID: idFromString(t, userTwoID),
|
||||
ID: MustIDFromString(authTwoID),
|
||||
UserID: MustIDFromString(userTwoID),
|
||||
Token: "rand2",
|
||||
Permissions: []platform.Permission{
|
||||
platform.CreateUserPermission,
|
||||
},
|
||||
},
|
||||
{
|
||||
ID: idFromString(t, authThreeID),
|
||||
UserID: idFromString(t, userOneID),
|
||||
ID: MustIDFromString(authThreeID),
|
||||
UserID: MustIDFromString(userOneID),
|
||||
Token: "rand3",
|
||||
Permissions: []platform.Permission{
|
||||
platform.CreateUserPermission,
|
||||
|
|
@ -404,9 +405,8 @@ func FindAuthorizationByToken(
|
|||
},
|
||||
wants: wants{
|
||||
authorization: &platform.Authorization{
|
||||
ID: idFromString(t, authOneID),
|
||||
UserID: idFromString(t, userOneID),
|
||||
Status: platform.Inactive,
|
||||
ID: MustIDFromString(authOneID),
|
||||
UserID: MustIDFromString(userOneID),
|
||||
User: "cooluser",
|
||||
Token: "rand1",
|
||||
Permissions: []platform.Permission{
|
||||
|
|
@ -469,17 +469,17 @@ func FindAuthorizations(
|
|||
Users: []*platform.User{
|
||||
{
|
||||
Name: "cooluser",
|
||||
ID: idFromString(t, userOneID),
|
||||
ID: MustIDFromString(userOneID),
|
||||
},
|
||||
{
|
||||
Name: "regularuser",
|
||||
ID: idFromString(t, userTwoID),
|
||||
ID: MustIDFromString(userTwoID),
|
||||
},
|
||||
},
|
||||
Authorizations: []*platform.Authorization{
|
||||
{
|
||||
ID: idFromString(t, authOneID),
|
||||
UserID: idFromString(t, userOneID),
|
||||
ID: MustIDFromString(authOneID),
|
||||
UserID: MustIDFromString(userOneID),
|
||||
Token: "rand1",
|
||||
Permissions: []platform.Permission{
|
||||
platform.CreateUserPermission,
|
||||
|
|
@ -487,9 +487,8 @@ func FindAuthorizations(
|
|||
},
|
||||
},
|
||||
{
|
||||
ID: idFromString(t, authTwoID),
|
||||
UserID: idFromString(t, userTwoID),
|
||||
Status: platform.Active,
|
||||
ID: MustIDFromString(authTwoID),
|
||||
UserID: MustIDFromString(userTwoID),
|
||||
Token: "rand2",
|
||||
Permissions: []platform.Permission{
|
||||
platform.CreateUserPermission,
|
||||
|
|
@ -501,8 +500,8 @@ func FindAuthorizations(
|
|||
wants: wants{
|
||||
authorizations: []*platform.Authorization{
|
||||
{
|
||||
ID: idFromString(t, authOneID),
|
||||
UserID: idFromString(t, userOneID),
|
||||
ID: MustIDFromString(authOneID),
|
||||
UserID: MustIDFromString(userOneID),
|
||||
User: "cooluser",
|
||||
Token: "rand1",
|
||||
Status: platform.Active,
|
||||
|
|
@ -512,8 +511,8 @@ func FindAuthorizations(
|
|||
},
|
||||
},
|
||||
{
|
||||
ID: idFromString(t, authTwoID),
|
||||
UserID: idFromString(t, userTwoID),
|
||||
ID: MustIDFromString(authTwoID),
|
||||
UserID: MustIDFromString(userTwoID),
|
||||
User: "regularuser",
|
||||
Token: "rand2",
|
||||
Status: platform.Active,
|
||||
|
|
@ -530,17 +529,17 @@ func FindAuthorizations(
|
|||
Users: []*platform.User{
|
||||
{
|
||||
Name: "cooluser",
|
||||
ID: idFromString(t, userOneID),
|
||||
ID: MustIDFromString(userOneID),
|
||||
},
|
||||
{
|
||||
Name: "regularuser",
|
||||
ID: idFromString(t, userTwoID),
|
||||
ID: MustIDFromString(userTwoID),
|
||||
},
|
||||
},
|
||||
Authorizations: []*platform.Authorization{
|
||||
{
|
||||
ID: idFromString(t, authOneID),
|
||||
UserID: idFromString(t, userOneID),
|
||||
ID: MustIDFromString(authOneID),
|
||||
UserID: MustIDFromString(userOneID),
|
||||
Token: "rand1",
|
||||
Status: platform.Active,
|
||||
Permissions: []platform.Permission{
|
||||
|
|
@ -549,16 +548,16 @@ func FindAuthorizations(
|
|||
},
|
||||
},
|
||||
{
|
||||
ID: idFromString(t, authTwoID),
|
||||
UserID: idFromString(t, userTwoID),
|
||||
ID: MustIDFromString(authTwoID),
|
||||
UserID: MustIDFromString(userTwoID),
|
||||
Token: "rand2",
|
||||
Permissions: []platform.Permission{
|
||||
platform.CreateUserPermission,
|
||||
},
|
||||
},
|
||||
{
|
||||
ID: idFromString(t, authThreeID),
|
||||
UserID: idFromString(t, userOneID),
|
||||
ID: MustIDFromString(authThreeID),
|
||||
UserID: MustIDFromString(userOneID),
|
||||
Token: "rand3",
|
||||
Permissions: []platform.Permission{
|
||||
platform.DeleteUserPermission,
|
||||
|
|
@ -567,13 +566,13 @@ func FindAuthorizations(
|
|||
},
|
||||
},
|
||||
args: args{
|
||||
UserID: idFromString(t, userOneID),
|
||||
UserID: MustIDFromString(userOneID),
|
||||
},
|
||||
wants: wants{
|
||||
authorizations: []*platform.Authorization{
|
||||
{
|
||||
ID: idFromString(t, authOneID),
|
||||
UserID: idFromString(t, userOneID),
|
||||
ID: MustIDFromString(authOneID),
|
||||
UserID: MustIDFromString(userOneID),
|
||||
User: "cooluser",
|
||||
Status: platform.Active,
|
||||
Token: "rand1",
|
||||
|
|
@ -583,8 +582,8 @@ func FindAuthorizations(
|
|||
},
|
||||
},
|
||||
{
|
||||
ID: idFromString(t, authThreeID),
|
||||
UserID: idFromString(t, userOneID),
|
||||
ID: MustIDFromString(authThreeID),
|
||||
UserID: MustIDFromString(userOneID),
|
||||
User: "cooluser",
|
||||
Status: platform.Active,
|
||||
Token: "rand3",
|
||||
|
|
@ -601,25 +600,25 @@ func FindAuthorizations(
|
|||
Users: []*platform.User{
|
||||
{
|
||||
Name: "cooluser",
|
||||
ID: idFromString(t, userOneID),
|
||||
ID: MustIDFromString(userOneID),
|
||||
},
|
||||
{
|
||||
Name: "regularuser",
|
||||
ID: idFromString(t, userTwoID),
|
||||
ID: MustIDFromString(userTwoID),
|
||||
},
|
||||
},
|
||||
Authorizations: []*platform.Authorization{
|
||||
{
|
||||
ID: idFromString(t, authZeroID),
|
||||
UserID: idFromString(t, userOneID),
|
||||
ID: MustIDFromString(authZeroID),
|
||||
UserID: MustIDFromString(userOneID),
|
||||
Token: "rand1",
|
||||
Permissions: []platform.Permission{
|
||||
platform.DeleteUserPermission,
|
||||
},
|
||||
},
|
||||
{
|
||||
ID: idFromString(t, authOneID),
|
||||
UserID: idFromString(t, userOneID),
|
||||
ID: MustIDFromString(authOneID),
|
||||
UserID: MustIDFromString(userOneID),
|
||||
Token: "rand1",
|
||||
Permissions: []platform.Permission{
|
||||
platform.CreateUserPermission,
|
||||
|
|
@ -627,16 +626,16 @@ func FindAuthorizations(
|
|||
},
|
||||
},
|
||||
{
|
||||
ID: idFromString(t, authTwoID),
|
||||
UserID: idFromString(t, userTwoID),
|
||||
ID: MustIDFromString(authTwoID),
|
||||
UserID: MustIDFromString(userTwoID),
|
||||
Token: "rand2",
|
||||
Permissions: []platform.Permission{
|
||||
platform.CreateUserPermission,
|
||||
},
|
||||
},
|
||||
{
|
||||
ID: idFromString(t, authThreeID),
|
||||
UserID: idFromString(t, userOneID),
|
||||
ID: MustIDFromString(authThreeID),
|
||||
UserID: MustIDFromString(userOneID),
|
||||
Token: "rand3",
|
||||
Permissions: []platform.Permission{
|
||||
platform.DeleteUserPermission,
|
||||
|
|
@ -650,8 +649,8 @@ func FindAuthorizations(
|
|||
wants: wants{
|
||||
authorizations: []*platform.Authorization{
|
||||
{
|
||||
ID: idFromString(t, authTwoID),
|
||||
UserID: idFromString(t, userTwoID),
|
||||
ID: MustIDFromString(authTwoID),
|
||||
UserID: MustIDFromString(userTwoID),
|
||||
User: "regularuser",
|
||||
Token: "rand2",
|
||||
Status: platform.Active,
|
||||
|
|
@ -671,10 +670,10 @@ func FindAuthorizations(
|
|||
ctx := context.TODO()
|
||||
|
||||
filter := platform.AuthorizationFilter{}
|
||||
if tt.args.ID != nil {
|
||||
if tt.args.ID.Valid() {
|
||||
filter.ID = &tt.args.ID
|
||||
}
|
||||
if tt.args.UserID != nil {
|
||||
if tt.args.UserID.Valid() {
|
||||
filter.UserID = &tt.args.UserID
|
||||
}
|
||||
if tt.args.token != "" {
|
||||
|
|
@ -724,17 +723,17 @@ func DeleteAuthorization(
|
|||
Users: []*platform.User{
|
||||
{
|
||||
Name: "cooluser",
|
||||
ID: idFromString(t, userOneID),
|
||||
ID: MustIDFromString(userOneID),
|
||||
},
|
||||
{
|
||||
Name: "regularuser",
|
||||
ID: idFromString(t, userTwoID),
|
||||
ID: MustIDFromString(userTwoID),
|
||||
},
|
||||
},
|
||||
Authorizations: []*platform.Authorization{
|
||||
{
|
||||
ID: idFromString(t, authOneID),
|
||||
UserID: idFromString(t, userOneID),
|
||||
ID: MustIDFromString(authOneID),
|
||||
UserID: MustIDFromString(userOneID),
|
||||
Token: "rand1",
|
||||
Permissions: []platform.Permission{
|
||||
platform.CreateUserPermission,
|
||||
|
|
@ -742,8 +741,8 @@ func DeleteAuthorization(
|
|||
},
|
||||
},
|
||||
{
|
||||
ID: idFromString(t, authTwoID),
|
||||
UserID: idFromString(t, userTwoID),
|
||||
ID: MustIDFromString(authTwoID),
|
||||
UserID: MustIDFromString(userTwoID),
|
||||
Token: "rand2",
|
||||
Permissions: []platform.Permission{
|
||||
platform.CreateUserPermission,
|
||||
|
|
@ -752,13 +751,13 @@ func DeleteAuthorization(
|
|||
},
|
||||
},
|
||||
args: args{
|
||||
ID: idFromString(t, authOneID),
|
||||
ID: MustIDFromString(authOneID),
|
||||
},
|
||||
wants: wants{
|
||||
authorizations: []*platform.Authorization{
|
||||
{
|
||||
ID: idFromString(t, authTwoID),
|
||||
UserID: idFromString(t, userTwoID),
|
||||
ID: MustIDFromString(authTwoID),
|
||||
UserID: MustIDFromString(userTwoID),
|
||||
User: "regularuser",
|
||||
Status: platform.Active,
|
||||
Token: "rand2",
|
||||
|
|
@ -775,17 +774,17 @@ func DeleteAuthorization(
|
|||
Users: []*platform.User{
|
||||
{
|
||||
Name: "cooluser",
|
||||
ID: idFromString(t, userOneID),
|
||||
ID: MustIDFromString(userOneID),
|
||||
},
|
||||
{
|
||||
Name: "regularuser",
|
||||
ID: idFromString(t, userTwoID),
|
||||
ID: MustIDFromString(userTwoID),
|
||||
},
|
||||
},
|
||||
Authorizations: []*platform.Authorization{
|
||||
{
|
||||
ID: idFromString(t, authOneID),
|
||||
UserID: idFromString(t, userOneID),
|
||||
ID: MustIDFromString(authOneID),
|
||||
UserID: MustIDFromString(userOneID),
|
||||
Token: "rand1",
|
||||
Permissions: []platform.Permission{
|
||||
platform.CreateUserPermission,
|
||||
|
|
@ -793,8 +792,8 @@ func DeleteAuthorization(
|
|||
},
|
||||
},
|
||||
{
|
||||
ID: idFromString(t, authTwoID),
|
||||
UserID: idFromString(t, userTwoID),
|
||||
ID: MustIDFromString(authTwoID),
|
||||
UserID: MustIDFromString(userTwoID),
|
||||
Token: "rand2",
|
||||
Permissions: []platform.Permission{
|
||||
platform.CreateUserPermission,
|
||||
|
|
@ -803,14 +802,14 @@ func DeleteAuthorization(
|
|||
},
|
||||
},
|
||||
args: args{
|
||||
ID: idFromString(t, authThreeID),
|
||||
ID: MustIDFromString(authThreeID),
|
||||
},
|
||||
wants: wants{
|
||||
err: fmt.Errorf("authorization not found"),
|
||||
authorizations: []*platform.Authorization{
|
||||
{
|
||||
ID: idFromString(t, authOneID),
|
||||
UserID: idFromString(t, userOneID),
|
||||
ID: MustIDFromString(authOneID),
|
||||
UserID: MustIDFromString(userOneID),
|
||||
User: "cooluser",
|
||||
Token: "rand1",
|
||||
Status: platform.Active,
|
||||
|
|
@ -820,8 +819,8 @@ func DeleteAuthorization(
|
|||
},
|
||||
},
|
||||
{
|
||||
ID: idFromString(t, authTwoID),
|
||||
UserID: idFromString(t, userTwoID),
|
||||
ID: MustIDFromString(authTwoID),
|
||||
UserID: MustIDFromString(userTwoID),
|
||||
User: "regularuser",
|
||||
Token: "rand2",
|
||||
Status: platform.Active,
|
||||
|
|
@ -839,7 +838,7 @@ func DeleteAuthorization(
|
|||
s, done := init(tt.fields, t)
|
||||
defer done()
|
||||
ctx := context.TODO()
|
||||
err := s.DeleteAuthorization(ctx, platform.ID(tt.args.ID))
|
||||
err := s.DeleteAuthorization(ctx, tt.args.ID)
|
||||
if (err != nil) != (tt.wants.err != nil) {
|
||||
t.Fatalf("expected error '%v' got '%v'", tt.wants.err, err)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -112,22 +112,22 @@ func CreateBucket(
|
|||
Organizations: []*platform.Organization{
|
||||
{
|
||||
Name: "theorg",
|
||||
ID: idFromString(t, orgOneID),
|
||||
ID: MustIDFromString(orgOneID),
|
||||
},
|
||||
},
|
||||
},
|
||||
args: args{
|
||||
bucket: &platform.Bucket{
|
||||
Name: "name1",
|
||||
OrganizationID: idFromString(t, orgOneID),
|
||||
OrganizationID: MustIDFromString(orgOneID),
|
||||
},
|
||||
},
|
||||
wants: wants{
|
||||
buckets: []*platform.Bucket{
|
||||
{
|
||||
Name: "name1",
|
||||
ID: idFromString(t, bucketOneID),
|
||||
OrganizationID: idFromString(t, orgOneID),
|
||||
ID: MustIDFromString(bucketOneID),
|
||||
OrganizationID: MustIDFromString(orgOneID),
|
||||
Organization: "theorg",
|
||||
},
|
||||
},
|
||||
|
|
@ -138,46 +138,46 @@ func CreateBucket(
|
|||
fields: BucketFields{
|
||||
IDGenerator: &mock.IDGenerator{
|
||||
IDFn: func() platform.ID {
|
||||
return idFromString(t, bucketTwoID)
|
||||
return MustIDFromString(bucketTwoID)
|
||||
},
|
||||
},
|
||||
Buckets: []*platform.Bucket{
|
||||
{
|
||||
ID: idFromString(t, bucketOneID),
|
||||
ID: MustIDFromString(bucketOneID),
|
||||
Name: "bucket1",
|
||||
OrganizationID: idFromString(t, orgOneID),
|
||||
OrganizationID: MustIDFromString(orgOneID),
|
||||
},
|
||||
},
|
||||
Organizations: []*platform.Organization{
|
||||
{
|
||||
Name: "theorg",
|
||||
ID: idFromString(t, orgOneID),
|
||||
ID: MustIDFromString(orgOneID),
|
||||
},
|
||||
{
|
||||
Name: "otherorg",
|
||||
ID: idFromString(t, orgTwoID),
|
||||
ID: MustIDFromString(orgTwoID),
|
||||
},
|
||||
},
|
||||
},
|
||||
args: args{
|
||||
bucket: &platform.Bucket{
|
||||
Name: "bucket2",
|
||||
OrganizationID: idFromString(t, orgTwoID),
|
||||
OrganizationID: MustIDFromString(orgTwoID),
|
||||
},
|
||||
},
|
||||
wants: wants{
|
||||
buckets: []*platform.Bucket{
|
||||
{
|
||||
ID: idFromString(t, bucketOneID),
|
||||
ID: MustIDFromString(bucketOneID),
|
||||
Name: "bucket1",
|
||||
Organization: "theorg",
|
||||
OrganizationID: idFromString(t, orgOneID),
|
||||
OrganizationID: MustIDFromString(orgOneID),
|
||||
},
|
||||
{
|
||||
ID: idFromString(t, bucketTwoID),
|
||||
ID: MustIDFromString(bucketTwoID),
|
||||
Name: "bucket2",
|
||||
Organization: "otherorg",
|
||||
OrganizationID: idFromString(t, orgTwoID),
|
||||
OrganizationID: MustIDFromString(orgTwoID),
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
@ -187,24 +187,24 @@ func CreateBucket(
|
|||
fields: BucketFields{
|
||||
IDGenerator: &mock.IDGenerator{
|
||||
IDFn: func() platform.ID {
|
||||
return idFromString(t, bucketTwoID)
|
||||
return MustIDFromString(bucketTwoID)
|
||||
},
|
||||
},
|
||||
Buckets: []*platform.Bucket{
|
||||
{
|
||||
ID: idFromString(t, bucketOneID),
|
||||
ID: MustIDFromString(bucketOneID),
|
||||
Name: "bucket1",
|
||||
OrganizationID: idFromString(t, orgOneID),
|
||||
OrganizationID: MustIDFromString(orgOneID),
|
||||
},
|
||||
},
|
||||
Organizations: []*platform.Organization{
|
||||
{
|
||||
Name: "theorg",
|
||||
ID: idFromString(t, orgOneID),
|
||||
ID: MustIDFromString(orgOneID),
|
||||
},
|
||||
{
|
||||
Name: "otherorg",
|
||||
ID: idFromString(t, orgTwoID),
|
||||
ID: MustIDFromString(orgTwoID),
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
@ -217,16 +217,16 @@ func CreateBucket(
|
|||
wants: wants{
|
||||
buckets: []*platform.Bucket{
|
||||
{
|
||||
ID: idFromString(t, bucketOneID),
|
||||
ID: MustIDFromString(bucketOneID),
|
||||
Name: "bucket1",
|
||||
Organization: "theorg",
|
||||
OrganizationID: idFromString(t, orgOneID),
|
||||
OrganizationID: MustIDFromString(orgOneID),
|
||||
},
|
||||
{
|
||||
ID: idFromString(t, bucketTwoID),
|
||||
ID: MustIDFromString(bucketTwoID),
|
||||
Name: "bucket2",
|
||||
Organization: "otherorg",
|
||||
OrganizationID: idFromString(t, orgTwoID),
|
||||
OrganizationID: MustIDFromString(orgTwoID),
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
@ -236,40 +236,40 @@ func CreateBucket(
|
|||
fields: BucketFields{
|
||||
IDGenerator: &mock.IDGenerator{
|
||||
IDFn: func() platform.ID {
|
||||
return idFromString(t, bucketTwoID)
|
||||
return MustIDFromString(bucketTwoID)
|
||||
},
|
||||
},
|
||||
Buckets: []*platform.Bucket{
|
||||
{
|
||||
ID: idFromString(t, bucketOneID),
|
||||
ID: MustIDFromString(bucketOneID),
|
||||
Name: "bucket1",
|
||||
OrganizationID: idFromString(t, orgOneID),
|
||||
OrganizationID: MustIDFromString(orgOneID),
|
||||
},
|
||||
},
|
||||
Organizations: []*platform.Organization{
|
||||
{
|
||||
Name: "theorg",
|
||||
ID: idFromString(t, orgOneID),
|
||||
ID: MustIDFromString(orgOneID),
|
||||
},
|
||||
{
|
||||
Name: "otherorg",
|
||||
ID: idFromString(t, orgTwoID),
|
||||
ID: MustIDFromString(orgTwoID),
|
||||
},
|
||||
},
|
||||
},
|
||||
args: args{
|
||||
bucket: &platform.Bucket{
|
||||
Name: "bucket1",
|
||||
OrganizationID: idFromString(t, orgOneID),
|
||||
OrganizationID: MustIDFromString(orgOneID),
|
||||
},
|
||||
},
|
||||
wants: wants{
|
||||
buckets: []*platform.Bucket{
|
||||
{
|
||||
ID: idFromString(t, bucketOneID),
|
||||
ID: MustIDFromString(bucketOneID),
|
||||
Name: "bucket1",
|
||||
Organization: "theorg",
|
||||
OrganizationID: idFromString(t, orgOneID),
|
||||
OrganizationID: MustIDFromString(orgOneID),
|
||||
},
|
||||
},
|
||||
err: fmt.Errorf("bucket with name bucket1 already exists"),
|
||||
|
|
@ -280,46 +280,46 @@ func CreateBucket(
|
|||
fields: BucketFields{
|
||||
IDGenerator: &mock.IDGenerator{
|
||||
IDFn: func() platform.ID {
|
||||
return idFromString(t, bucketTwoID)
|
||||
return MustIDFromString(bucketTwoID)
|
||||
},
|
||||
},
|
||||
Organizations: []*platform.Organization{
|
||||
{
|
||||
Name: "theorg",
|
||||
ID: idFromString(t, orgOneID),
|
||||
ID: MustIDFromString(orgOneID),
|
||||
},
|
||||
{
|
||||
Name: "otherorg",
|
||||
ID: idFromString(t, orgTwoID),
|
||||
ID: MustIDFromString(orgTwoID),
|
||||
},
|
||||
},
|
||||
Buckets: []*platform.Bucket{
|
||||
{
|
||||
ID: idFromString(t, bucketOneID),
|
||||
ID: MustIDFromString(bucketOneID),
|
||||
Name: "bucket1",
|
||||
OrganizationID: idFromString(t, orgOneID),
|
||||
OrganizationID: MustIDFromString(orgOneID),
|
||||
},
|
||||
},
|
||||
},
|
||||
args: args{
|
||||
bucket: &platform.Bucket{
|
||||
Name: "bucket1",
|
||||
OrganizationID: idFromString(t, orgTwoID),
|
||||
OrganizationID: MustIDFromString(orgTwoID),
|
||||
},
|
||||
},
|
||||
wants: wants{
|
||||
buckets: []*platform.Bucket{
|
||||
{
|
||||
ID: idFromString(t, bucketOneID),
|
||||
ID: MustIDFromString(bucketOneID),
|
||||
Name: "bucket1",
|
||||
Organization: "theorg",
|
||||
OrganizationID: idFromString(t, orgOneID),
|
||||
OrganizationID: MustIDFromString(orgOneID),
|
||||
},
|
||||
{
|
||||
ID: idFromString(t, bucketTwoID),
|
||||
ID: MustIDFromString(bucketTwoID),
|
||||
Name: "bucket1",
|
||||
Organization: "otherorg",
|
||||
OrganizationID: idFromString(t, orgTwoID),
|
||||
OrganizationID: MustIDFromString(orgTwoID),
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
@ -344,7 +344,11 @@ func CreateBucket(
|
|||
t.Fatalf("expected error messages to match '%v' got '%v'", tt.wants.err, err.Error())
|
||||
}
|
||||
}
|
||||
|
||||
// Delete only newly created buckets - ie., with a not nil ID
|
||||
// if tt.args.bucket.ID.Valid() {
|
||||
defer s.DeleteBucket(ctx, tt.args.bucket.ID)
|
||||
// }
|
||||
|
||||
buckets, _, err := s.FindBuckets(ctx, platform.BucketFilter{})
|
||||
if err != nil {
|
||||
|
|
@ -381,30 +385,30 @@ func FindBucketByID(
|
|||
fields: BucketFields{
|
||||
Buckets: []*platform.Bucket{
|
||||
{
|
||||
ID: idFromString(t, bucketOneID),
|
||||
OrganizationID: idFromString(t, orgOneID),
|
||||
ID: MustIDFromString(bucketOneID),
|
||||
OrganizationID: MustIDFromString(orgOneID),
|
||||
Name: "bucket1",
|
||||
},
|
||||
{
|
||||
ID: idFromString(t, bucketTwoID),
|
||||
OrganizationID: idFromString(t, orgOneID),
|
||||
ID: MustIDFromString(bucketTwoID),
|
||||
OrganizationID: MustIDFromString(orgOneID),
|
||||
Name: "bucket2",
|
||||
},
|
||||
},
|
||||
Organizations: []*platform.Organization{
|
||||
{
|
||||
Name: "theorg",
|
||||
ID: idFromString(t, orgOneID),
|
||||
ID: MustIDFromString(orgOneID),
|
||||
},
|
||||
},
|
||||
},
|
||||
args: args{
|
||||
id: idFromString(t, bucketTwoID),
|
||||
id: MustIDFromString(bucketTwoID),
|
||||
},
|
||||
wants: wants{
|
||||
bucket: &platform.Bucket{
|
||||
ID: idFromString(t, bucketTwoID),
|
||||
OrganizationID: idFromString(t, orgOneID),
|
||||
ID: MustIDFromString(bucketTwoID),
|
||||
OrganizationID: MustIDFromString(orgOneID),
|
||||
Organization: "theorg",
|
||||
Name: "bucket2",
|
||||
},
|
||||
|
|
@ -464,22 +468,22 @@ func FindBuckets(
|
|||
Organizations: []*platform.Organization{
|
||||
{
|
||||
Name: "theorg",
|
||||
ID: idFromString(t, orgOneID),
|
||||
ID: MustIDFromString(orgOneID),
|
||||
},
|
||||
{
|
||||
Name: "otherorg",
|
||||
ID: idFromString(t, orgTwoID),
|
||||
ID: MustIDFromString(orgTwoID),
|
||||
},
|
||||
},
|
||||
Buckets: []*platform.Bucket{
|
||||
{
|
||||
ID: idFromString(t, bucketOneID),
|
||||
OrganizationID: idFromString(t, orgOneID),
|
||||
ID: MustIDFromString(bucketOneID),
|
||||
OrganizationID: MustIDFromString(orgOneID),
|
||||
Name: "abc",
|
||||
},
|
||||
{
|
||||
ID: idFromString(t, bucketTwoID),
|
||||
OrganizationID: idFromString(t, orgTwoID),
|
||||
ID: MustIDFromString(bucketTwoID),
|
||||
OrganizationID: MustIDFromString(orgTwoID),
|
||||
Name: "xyz",
|
||||
},
|
||||
},
|
||||
|
|
@ -488,14 +492,14 @@ func FindBuckets(
|
|||
wants: wants{
|
||||
buckets: []*platform.Bucket{
|
||||
{
|
||||
ID: idFromString(t, bucketOneID),
|
||||
OrganizationID: idFromString(t, orgOneID),
|
||||
ID: MustIDFromString(bucketOneID),
|
||||
OrganizationID: MustIDFromString(orgOneID),
|
||||
Organization: "theorg",
|
||||
Name: "abc",
|
||||
},
|
||||
{
|
||||
ID: idFromString(t, bucketTwoID),
|
||||
OrganizationID: idFromString(t, orgTwoID),
|
||||
ID: MustIDFromString(bucketTwoID),
|
||||
OrganizationID: MustIDFromString(orgTwoID),
|
||||
Organization: "otherorg",
|
||||
Name: "xyz",
|
||||
},
|
||||
|
|
@ -508,27 +512,27 @@ func FindBuckets(
|
|||
Organizations: []*platform.Organization{
|
||||
{
|
||||
Name: "theorg",
|
||||
ID: idFromString(t, orgOneID),
|
||||
ID: MustIDFromString(orgOneID),
|
||||
},
|
||||
{
|
||||
Name: "otherorg",
|
||||
ID: idFromString(t, orgTwoID),
|
||||
ID: MustIDFromString(orgTwoID),
|
||||
},
|
||||
},
|
||||
Buckets: []*platform.Bucket{
|
||||
{
|
||||
ID: idFromString(t, bucketOneID),
|
||||
OrganizationID: idFromString(t, orgOneID),
|
||||
ID: MustIDFromString(bucketOneID),
|
||||
OrganizationID: MustIDFromString(orgOneID),
|
||||
Name: "abc",
|
||||
},
|
||||
{
|
||||
ID: idFromString(t, bucketTwoID),
|
||||
OrganizationID: idFromString(t, orgTwoID),
|
||||
ID: MustIDFromString(bucketTwoID),
|
||||
OrganizationID: MustIDFromString(orgTwoID),
|
||||
Name: "xyz",
|
||||
},
|
||||
{
|
||||
ID: idFromString(t, bucketThreeID),
|
||||
OrganizationID: idFromString(t, orgOneID),
|
||||
ID: MustIDFromString(bucketThreeID),
|
||||
OrganizationID: MustIDFromString(orgOneID),
|
||||
Name: "123",
|
||||
},
|
||||
},
|
||||
|
|
@ -539,14 +543,14 @@ func FindBuckets(
|
|||
wants: wants{
|
||||
buckets: []*platform.Bucket{
|
||||
{
|
||||
ID: idFromString(t, bucketOneID),
|
||||
OrganizationID: idFromString(t, orgOneID),
|
||||
ID: MustIDFromString(bucketOneID),
|
||||
OrganizationID: MustIDFromString(orgOneID),
|
||||
Organization: "theorg",
|
||||
Name: "abc",
|
||||
},
|
||||
{
|
||||
ID: idFromString(t, bucketThreeID),
|
||||
OrganizationID: idFromString(t, orgOneID),
|
||||
ID: MustIDFromString(bucketThreeID),
|
||||
OrganizationID: MustIDFromString(orgOneID),
|
||||
Organization: "theorg",
|
||||
Name: "123",
|
||||
},
|
||||
|
|
@ -559,45 +563,45 @@ func FindBuckets(
|
|||
Organizations: []*platform.Organization{
|
||||
{
|
||||
Name: "theorg",
|
||||
ID: idFromString(t, orgOneID),
|
||||
ID: MustIDFromString(orgOneID),
|
||||
},
|
||||
{
|
||||
Name: "otherorg",
|
||||
ID: idFromString(t, orgTwoID),
|
||||
ID: MustIDFromString(orgTwoID),
|
||||
},
|
||||
},
|
||||
Buckets: []*platform.Bucket{
|
||||
{
|
||||
ID: idFromString(t, bucketOneID),
|
||||
OrganizationID: idFromString(t, orgOneID),
|
||||
ID: MustIDFromString(bucketOneID),
|
||||
OrganizationID: MustIDFromString(orgOneID),
|
||||
Name: "abc",
|
||||
},
|
||||
{
|
||||
ID: idFromString(t, bucketTwoID),
|
||||
OrganizationID: idFromString(t, orgTwoID),
|
||||
ID: MustIDFromString(bucketTwoID),
|
||||
OrganizationID: MustIDFromString(orgTwoID),
|
||||
Name: "xyz",
|
||||
},
|
||||
{
|
||||
ID: idFromString(t, bucketThreeID),
|
||||
OrganizationID: idFromString(t, orgOneID),
|
||||
ID: MustIDFromString(bucketThreeID),
|
||||
OrganizationID: MustIDFromString(orgOneID),
|
||||
Name: "123",
|
||||
},
|
||||
},
|
||||
},
|
||||
args: args{
|
||||
organizationID: idFromString(t, orgOneID),
|
||||
organizationID: MustIDFromString(orgOneID),
|
||||
},
|
||||
wants: wants{
|
||||
buckets: []*platform.Bucket{
|
||||
{
|
||||
ID: idFromString(t, bucketOneID),
|
||||
OrganizationID: idFromString(t, orgOneID),
|
||||
ID: MustIDFromString(bucketOneID),
|
||||
OrganizationID: MustIDFromString(orgOneID),
|
||||
Organization: "theorg",
|
||||
Name: "abc",
|
||||
},
|
||||
{
|
||||
ID: idFromString(t, bucketThreeID),
|
||||
OrganizationID: idFromString(t, orgOneID),
|
||||
ID: MustIDFromString(bucketThreeID),
|
||||
OrganizationID: MustIDFromString(orgOneID),
|
||||
Organization: "theorg",
|
||||
Name: "123",
|
||||
},
|
||||
|
|
@ -610,30 +614,30 @@ func FindBuckets(
|
|||
Organizations: []*platform.Organization{
|
||||
{
|
||||
Name: "theorg",
|
||||
ID: idFromString(t, orgOneID),
|
||||
ID: MustIDFromString(orgOneID),
|
||||
},
|
||||
},
|
||||
Buckets: []*platform.Bucket{
|
||||
{
|
||||
ID: idFromString(t, bucketOneID),
|
||||
OrganizationID: idFromString(t, orgOneID),
|
||||
ID: MustIDFromString(bucketOneID),
|
||||
OrganizationID: MustIDFromString(orgOneID),
|
||||
Name: "abc",
|
||||
},
|
||||
{
|
||||
ID: idFromString(t, bucketTwoID),
|
||||
OrganizationID: idFromString(t, orgOneID),
|
||||
ID: MustIDFromString(bucketTwoID),
|
||||
OrganizationID: MustIDFromString(orgOneID),
|
||||
Name: "xyz",
|
||||
},
|
||||
},
|
||||
},
|
||||
args: args{
|
||||
ID: idFromString(t, bucketTwoID),
|
||||
ID: MustIDFromString(bucketTwoID),
|
||||
},
|
||||
wants: wants{
|
||||
buckets: []*platform.Bucket{
|
||||
{
|
||||
ID: idFromString(t, bucketTwoID),
|
||||
OrganizationID: idFromString(t, orgOneID),
|
||||
ID: MustIDFromString(bucketTwoID),
|
||||
OrganizationID: MustIDFromString(orgOneID),
|
||||
Organization: "theorg",
|
||||
Name: "xyz",
|
||||
},
|
||||
|
|
@ -646,18 +650,18 @@ func FindBuckets(
|
|||
Organizations: []*platform.Organization{
|
||||
{
|
||||
Name: "theorg",
|
||||
ID: idFromString(t, orgOneID),
|
||||
ID: MustIDFromString(orgOneID),
|
||||
},
|
||||
},
|
||||
Buckets: []*platform.Bucket{
|
||||
{
|
||||
ID: idFromString(t, bucketOneID),
|
||||
OrganizationID: idFromString(t, orgOneID),
|
||||
ID: MustIDFromString(bucketOneID),
|
||||
OrganizationID: MustIDFromString(orgOneID),
|
||||
Name: "abc",
|
||||
},
|
||||
{
|
||||
ID: idFromString(t, bucketTwoID),
|
||||
OrganizationID: idFromString(t, orgOneID),
|
||||
ID: MustIDFromString(bucketTwoID),
|
||||
OrganizationID: MustIDFromString(orgOneID),
|
||||
Name: "xyz",
|
||||
},
|
||||
},
|
||||
|
|
@ -668,8 +672,8 @@ func FindBuckets(
|
|||
wants: wants{
|
||||
buckets: []*platform.Bucket{
|
||||
{
|
||||
ID: idFromString(t, bucketTwoID),
|
||||
OrganizationID: idFromString(t, orgOneID),
|
||||
ID: MustIDFromString(bucketTwoID),
|
||||
OrganizationID: MustIDFromString(orgOneID),
|
||||
Organization: "theorg",
|
||||
Name: "xyz",
|
||||
},
|
||||
|
|
@ -685,10 +689,10 @@ func FindBuckets(
|
|||
ctx := context.TODO()
|
||||
|
||||
filter := platform.BucketFilter{}
|
||||
if tt.args.ID != nil {
|
||||
if tt.args.ID.Valid() {
|
||||
filter.ID = &tt.args.ID
|
||||
}
|
||||
if tt.args.organizationID != nil {
|
||||
if tt.args.organizationID.Valid() {
|
||||
filter.OrganizationID = &tt.args.organizationID
|
||||
}
|
||||
if tt.args.organization != "" {
|
||||
|
|
@ -741,31 +745,31 @@ func DeleteBucket(
|
|||
Organizations: []*platform.Organization{
|
||||
{
|
||||
Name: "theorg",
|
||||
ID: idFromString(t, orgOneID),
|
||||
ID: MustIDFromString(orgOneID),
|
||||
},
|
||||
},
|
||||
Buckets: []*platform.Bucket{
|
||||
{
|
||||
Name: "A",
|
||||
ID: platform.ID("abc"),
|
||||
OrganizationID: idFromString(t, orgOneID),
|
||||
ID: MustIDFromString(bucketOneID),
|
||||
OrganizationID: MustIDFromString(orgOneID),
|
||||
},
|
||||
{
|
||||
Name: "B",
|
||||
ID: platform.ID("xyz"),
|
||||
OrganizationID: idFromString(t, orgOneID),
|
||||
ID: MustIDFromString(bucketThreeID),
|
||||
OrganizationID: MustIDFromString(orgOneID),
|
||||
},
|
||||
},
|
||||
},
|
||||
args: args{
|
||||
ID: "abc",
|
||||
ID: bucketOneID,
|
||||
},
|
||||
wants: wants{
|
||||
buckets: []*platform.Bucket{
|
||||
{
|
||||
Name: "B",
|
||||
ID: platform.ID("xyz"),
|
||||
OrganizationID: idFromString(t, orgOneID),
|
||||
ID: MustIDFromString(bucketThreeID),
|
||||
OrganizationID: MustIDFromString(orgOneID),
|
||||
Organization: "theorg",
|
||||
},
|
||||
},
|
||||
|
|
@ -777,38 +781,38 @@ func DeleteBucket(
|
|||
Organizations: []*platform.Organization{
|
||||
{
|
||||
Name: "theorg",
|
||||
ID: idFromString(t, orgOneID),
|
||||
ID: MustIDFromString(orgOneID),
|
||||
},
|
||||
},
|
||||
Buckets: []*platform.Bucket{
|
||||
{
|
||||
Name: "A",
|
||||
ID: platform.ID("abc"),
|
||||
OrganizationID: idFromString(t, orgOneID),
|
||||
ID: MustIDFromString(bucketOneID),
|
||||
OrganizationID: MustIDFromString(orgOneID),
|
||||
},
|
||||
{
|
||||
Name: "B",
|
||||
ID: platform.ID("xyz"),
|
||||
OrganizationID: idFromString(t, orgOneID),
|
||||
ID: MustIDFromString(bucketThreeID),
|
||||
OrganizationID: MustIDFromString(orgOneID),
|
||||
},
|
||||
},
|
||||
},
|
||||
args: args{
|
||||
ID: "123",
|
||||
ID: "1234567890654321",
|
||||
},
|
||||
wants: wants{
|
||||
err: fmt.Errorf("bucket not found"),
|
||||
buckets: []*platform.Bucket{
|
||||
{
|
||||
Name: "A",
|
||||
ID: platform.ID("abc"),
|
||||
OrganizationID: idFromString(t, orgOneID),
|
||||
ID: MustIDFromString(bucketOneID),
|
||||
OrganizationID: MustIDFromString(orgOneID),
|
||||
Organization: "theorg",
|
||||
},
|
||||
{
|
||||
Name: "B",
|
||||
ID: platform.ID("xyz"),
|
||||
OrganizationID: idFromString(t, orgOneID),
|
||||
ID: MustIDFromString(bucketThreeID),
|
||||
OrganizationID: MustIDFromString(orgOneID),
|
||||
Organization: "theorg",
|
||||
},
|
||||
},
|
||||
|
|
@ -821,7 +825,7 @@ func DeleteBucket(
|
|||
s, done := init(tt.fields, t)
|
||||
defer done()
|
||||
ctx := context.TODO()
|
||||
err := s.DeleteBucket(ctx, platform.ID(tt.args.ID))
|
||||
err := s.DeleteBucket(ctx, MustIDFromString(tt.args.ID))
|
||||
if (err != nil) != (tt.wants.err != nil) {
|
||||
t.Fatalf("expected error '%v' got '%v'", tt.wants.err, err)
|
||||
}
|
||||
|
|
@ -871,30 +875,30 @@ func FindBucket(
|
|||
Organizations: []*platform.Organization{
|
||||
{
|
||||
Name: "theorg",
|
||||
ID: idFromString(t, orgOneID),
|
||||
ID: MustIDFromString(orgOneID),
|
||||
},
|
||||
},
|
||||
Buckets: []*platform.Bucket{
|
||||
{
|
||||
ID: idFromString(t, bucketOneID),
|
||||
OrganizationID: idFromString(t, orgOneID),
|
||||
ID: MustIDFromString(bucketOneID),
|
||||
OrganizationID: MustIDFromString(orgOneID),
|
||||
Name: "abc",
|
||||
},
|
||||
{
|
||||
ID: idFromString(t, bucketTwoID),
|
||||
OrganizationID: idFromString(t, orgOneID),
|
||||
ID: MustIDFromString(bucketTwoID),
|
||||
OrganizationID: MustIDFromString(orgOneID),
|
||||
Name: "xyz",
|
||||
},
|
||||
},
|
||||
},
|
||||
args: args{
|
||||
name: "abc",
|
||||
organizationID: idFromString(t, orgOneID),
|
||||
organizationID: MustIDFromString(orgOneID),
|
||||
},
|
||||
wants: wants{
|
||||
bucket: &platform.Bucket{
|
||||
ID: idFromString(t, bucketOneID),
|
||||
OrganizationID: idFromString(t, orgOneID),
|
||||
ID: MustIDFromString(bucketOneID),
|
||||
OrganizationID: MustIDFromString(orgOneID),
|
||||
Organization: "theorg",
|
||||
Name: "abc",
|
||||
},
|
||||
|
|
@ -911,7 +915,7 @@ func FindBucket(
|
|||
if tt.args.name != "" {
|
||||
filter.Name = &tt.args.name
|
||||
}
|
||||
if tt.args.organizationID != nil {
|
||||
if tt.args.organizationID.Valid() {
|
||||
filter.OrganizationID = &tt.args.organizationID
|
||||
}
|
||||
|
||||
|
|
@ -960,30 +964,30 @@ func UpdateBucket(
|
|||
Organizations: []*platform.Organization{
|
||||
{
|
||||
Name: "theorg",
|
||||
ID: idFromString(t, orgOneID),
|
||||
ID: MustIDFromString(orgOneID),
|
||||
},
|
||||
},
|
||||
Buckets: []*platform.Bucket{
|
||||
{
|
||||
ID: idFromString(t, bucketOneID),
|
||||
OrganizationID: idFromString(t, orgOneID),
|
||||
ID: MustIDFromString(bucketOneID),
|
||||
OrganizationID: MustIDFromString(orgOneID),
|
||||
Name: "bucket1",
|
||||
},
|
||||
{
|
||||
ID: idFromString(t, bucketTwoID),
|
||||
OrganizationID: idFromString(t, orgOneID),
|
||||
ID: MustIDFromString(bucketTwoID),
|
||||
OrganizationID: MustIDFromString(orgOneID),
|
||||
Name: "bucket2",
|
||||
},
|
||||
},
|
||||
},
|
||||
args: args{
|
||||
id: idFromString(t, bucketOneID),
|
||||
id: MustIDFromString(bucketOneID),
|
||||
name: "changed",
|
||||
},
|
||||
wants: wants{
|
||||
bucket: &platform.Bucket{
|
||||
ID: idFromString(t, bucketOneID),
|
||||
OrganizationID: idFromString(t, orgOneID),
|
||||
ID: MustIDFromString(bucketOneID),
|
||||
OrganizationID: MustIDFromString(orgOneID),
|
||||
Organization: "theorg",
|
||||
Name: "changed",
|
||||
},
|
||||
|
|
@ -995,30 +999,30 @@ func UpdateBucket(
|
|||
Organizations: []*platform.Organization{
|
||||
{
|
||||
Name: "theorg",
|
||||
ID: idFromString(t, orgOneID),
|
||||
ID: MustIDFromString(orgOneID),
|
||||
},
|
||||
},
|
||||
Buckets: []*platform.Bucket{
|
||||
{
|
||||
ID: idFromString(t, bucketOneID),
|
||||
OrganizationID: idFromString(t, orgOneID),
|
||||
ID: MustIDFromString(bucketOneID),
|
||||
OrganizationID: MustIDFromString(orgOneID),
|
||||
Name: "bucket1",
|
||||
},
|
||||
{
|
||||
ID: idFromString(t, bucketTwoID),
|
||||
OrganizationID: idFromString(t, orgOneID),
|
||||
ID: MustIDFromString(bucketTwoID),
|
||||
OrganizationID: MustIDFromString(orgOneID),
|
||||
Name: "bucket2",
|
||||
},
|
||||
},
|
||||
},
|
||||
args: args{
|
||||
id: idFromString(t, bucketOneID),
|
||||
id: MustIDFromString(bucketOneID),
|
||||
retention: 100,
|
||||
},
|
||||
wants: wants{
|
||||
bucket: &platform.Bucket{
|
||||
ID: idFromString(t, bucketOneID),
|
||||
OrganizationID: idFromString(t, orgOneID),
|
||||
ID: MustIDFromString(bucketOneID),
|
||||
OrganizationID: MustIDFromString(orgOneID),
|
||||
Organization: "theorg",
|
||||
Name: "bucket1",
|
||||
RetentionPeriod: 100 * time.Minute,
|
||||
|
|
@ -1031,31 +1035,31 @@ func UpdateBucket(
|
|||
Organizations: []*platform.Organization{
|
||||
{
|
||||
Name: "theorg",
|
||||
ID: idFromString(t, orgOneID),
|
||||
ID: MustIDFromString(orgOneID),
|
||||
},
|
||||
},
|
||||
Buckets: []*platform.Bucket{
|
||||
{
|
||||
ID: idFromString(t, bucketOneID),
|
||||
OrganizationID: idFromString(t, orgOneID),
|
||||
ID: MustIDFromString(bucketOneID),
|
||||
OrganizationID: MustIDFromString(orgOneID),
|
||||
Name: "bucket1",
|
||||
},
|
||||
{
|
||||
ID: idFromString(t, bucketTwoID),
|
||||
OrganizationID: idFromString(t, orgOneID),
|
||||
ID: MustIDFromString(bucketTwoID),
|
||||
OrganizationID: MustIDFromString(orgOneID),
|
||||
Name: "bucket2",
|
||||
},
|
||||
},
|
||||
},
|
||||
args: args{
|
||||
id: idFromString(t, bucketTwoID),
|
||||
id: MustIDFromString(bucketTwoID),
|
||||
retention: 101,
|
||||
name: "changed",
|
||||
},
|
||||
wants: wants{
|
||||
bucket: &platform.Bucket{
|
||||
ID: idFromString(t, bucketTwoID),
|
||||
OrganizationID: idFromString(t, orgOneID),
|
||||
ID: MustIDFromString(bucketTwoID),
|
||||
OrganizationID: MustIDFromString(orgOneID),
|
||||
Organization: "theorg",
|
||||
Name: "changed",
|
||||
RetentionPeriod: 101 * time.Minute,
|
||||
|
|
|
|||
|
|
@ -11,6 +11,16 @@ import (
|
|||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
const (
|
||||
dbrpOrg1ID = "ba55ba55ba55ba55"
|
||||
dbrpOrg2ID = "beadbeadbeadbead"
|
||||
dbrpOrg3ID = "1005e1eaf1005e1e"
|
||||
dbrpBucket1ID = "cab00d1ecab00d1e"
|
||||
dbrpBucket2ID = "ca1fca1fca1fca1f"
|
||||
dbrpBucketAID = "a55e55eda55e55ed"
|
||||
dbrpBucketBID = "b1077edb1077eded"
|
||||
)
|
||||
|
||||
var dbrpMappingCmpOptions = cmp.Options{
|
||||
cmp.Comparer(func(x, y []byte) bool {
|
||||
return bytes.Equal(x, y)
|
||||
|
|
@ -91,8 +101,8 @@ func CreateDBRPMapping(
|
|||
Database: "database1",
|
||||
RetentionPolicy: "retention_policy1",
|
||||
Default: false,
|
||||
OrganizationID: platform.ID("org1"),
|
||||
BucketID: platform.ID("bucket1"),
|
||||
OrganizationID: MustIDFromString(dbrpOrg1ID),
|
||||
BucketID: MustIDFromString(dbrpBucket1ID),
|
||||
},
|
||||
},
|
||||
wants: wants{
|
||||
|
|
@ -101,8 +111,8 @@ func CreateDBRPMapping(
|
|||
Database: "database1",
|
||||
RetentionPolicy: "retention_policy1",
|
||||
Default: false,
|
||||
OrganizationID: platform.ID("org1"),
|
||||
BucketID: platform.ID("bucket1"),
|
||||
OrganizationID: MustIDFromString(dbrpOrg1ID),
|
||||
BucketID: MustIDFromString(dbrpBucket1ID),
|
||||
}},
|
||||
},
|
||||
},
|
||||
|
|
@ -114,8 +124,8 @@ func CreateDBRPMapping(
|
|||
Database: "database1",
|
||||
RetentionPolicy: "retention_policy1",
|
||||
Default: false,
|
||||
OrganizationID: platform.ID("org1"),
|
||||
BucketID: platform.ID("bucket1"),
|
||||
OrganizationID: MustIDFromString(dbrpOrg1ID),
|
||||
BucketID: MustIDFromString(dbrpBucket1ID),
|
||||
}},
|
||||
},
|
||||
args: args{
|
||||
|
|
@ -124,8 +134,8 @@ func CreateDBRPMapping(
|
|||
Database: "database2",
|
||||
RetentionPolicy: "retention_policy2",
|
||||
Default: true,
|
||||
OrganizationID: platform.ID("org2"),
|
||||
BucketID: platform.ID("bucket2"),
|
||||
OrganizationID: MustIDFromString(dbrpOrg2ID),
|
||||
BucketID: MustIDFromString(dbrpBucket2ID),
|
||||
},
|
||||
},
|
||||
wants: wants{
|
||||
|
|
@ -135,16 +145,16 @@ func CreateDBRPMapping(
|
|||
Database: "database1",
|
||||
RetentionPolicy: "retention_policy1",
|
||||
Default: false,
|
||||
OrganizationID: platform.ID("org1"),
|
||||
BucketID: platform.ID("bucket1"),
|
||||
OrganizationID: MustIDFromString(dbrpOrg1ID),
|
||||
BucketID: MustIDFromString(dbrpBucket1ID),
|
||||
},
|
||||
{
|
||||
Cluster: "cluster2",
|
||||
Database: "database2",
|
||||
RetentionPolicy: "retention_policy2",
|
||||
Default: true,
|
||||
OrganizationID: platform.ID("org2"),
|
||||
BucketID: platform.ID("bucket2"),
|
||||
OrganizationID: MustIDFromString(dbrpOrg2ID),
|
||||
BucketID: MustIDFromString(dbrpBucket2ID),
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
@ -157,8 +167,8 @@ func CreateDBRPMapping(
|
|||
Database: "database1",
|
||||
RetentionPolicy: "retention_policy1",
|
||||
Default: false,
|
||||
OrganizationID: platform.ID("org1"),
|
||||
BucketID: platform.ID("bucket1"),
|
||||
OrganizationID: MustIDFromString(dbrpOrg1ID),
|
||||
BucketID: MustIDFromString(dbrpBucket1ID),
|
||||
}},
|
||||
},
|
||||
args: args{
|
||||
|
|
@ -167,8 +177,8 @@ func CreateDBRPMapping(
|
|||
Database: "database1",
|
||||
RetentionPolicy: "retention_policy1",
|
||||
Default: false,
|
||||
OrganizationID: platform.ID("org1"),
|
||||
BucketID: platform.ID("bucket1"),
|
||||
OrganizationID: MustIDFromString(dbrpOrg1ID),
|
||||
BucketID: MustIDFromString(dbrpBucket1ID),
|
||||
},
|
||||
},
|
||||
wants: wants{
|
||||
|
|
@ -178,8 +188,8 @@ func CreateDBRPMapping(
|
|||
Database: "database1",
|
||||
RetentionPolicy: "retention_policy1",
|
||||
Default: false,
|
||||
OrganizationID: platform.ID("org1"),
|
||||
BucketID: platform.ID("bucket1"),
|
||||
OrganizationID: MustIDFromString(dbrpOrg1ID),
|
||||
BucketID: MustIDFromString(dbrpBucket1ID),
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
@ -192,8 +202,8 @@ func CreateDBRPMapping(
|
|||
Database: "database1",
|
||||
RetentionPolicy: "retention_policy1",
|
||||
Default: false,
|
||||
OrganizationID: platform.ID("org1"),
|
||||
BucketID: platform.ID("bucket1"),
|
||||
OrganizationID: MustIDFromString(dbrpOrg1ID),
|
||||
BucketID: MustIDFromString(dbrpBucket1ID),
|
||||
}},
|
||||
},
|
||||
args: args{
|
||||
|
|
@ -202,8 +212,8 @@ func CreateDBRPMapping(
|
|||
Database: "database1",
|
||||
RetentionPolicy: "retention_policy1",
|
||||
Default: true,
|
||||
OrganizationID: platform.ID("org1"),
|
||||
BucketID: platform.ID("bucket1"),
|
||||
OrganizationID: MustIDFromString(dbrpOrg1ID),
|
||||
BucketID: MustIDFromString(dbrpBucket1ID),
|
||||
},
|
||||
},
|
||||
wants: wants{
|
||||
|
|
@ -214,8 +224,8 @@ func CreateDBRPMapping(
|
|||
Database: "database1",
|
||||
RetentionPolicy: "retention_policy1",
|
||||
Default: false,
|
||||
OrganizationID: platform.ID("org1"),
|
||||
BucketID: platform.ID("bucket1"),
|
||||
OrganizationID: MustIDFromString(dbrpOrg1ID),
|
||||
BucketID: MustIDFromString(dbrpBucket1ID),
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
@ -277,16 +287,16 @@ func FindDBRPMappings(
|
|||
Database: "database1",
|
||||
RetentionPolicy: "retention_policy1",
|
||||
Default: false,
|
||||
OrganizationID: platform.ID("org1"),
|
||||
BucketID: platform.ID("bucket1"),
|
||||
OrganizationID: MustIDFromString(dbrpOrg1ID),
|
||||
BucketID: MustIDFromString(dbrpBucket1ID),
|
||||
},
|
||||
{
|
||||
Cluster: "cluster2",
|
||||
Database: "database2",
|
||||
RetentionPolicy: "retention_policy2",
|
||||
Default: true,
|
||||
OrganizationID: platform.ID("org2"),
|
||||
BucketID: platform.ID("bucket2"),
|
||||
OrganizationID: MustIDFromString(dbrpOrg2ID),
|
||||
BucketID: MustIDFromString(dbrpBucket2ID),
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
@ -300,16 +310,16 @@ func FindDBRPMappings(
|
|||
Database: "database1",
|
||||
RetentionPolicy: "retention_policy1",
|
||||
Default: false,
|
||||
OrganizationID: platform.ID("org1"),
|
||||
BucketID: platform.ID("bucket1"),
|
||||
OrganizationID: MustIDFromString(dbrpOrg1ID),
|
||||
BucketID: MustIDFromString(dbrpBucket1ID),
|
||||
},
|
||||
{
|
||||
Cluster: "cluster2",
|
||||
Database: "database2",
|
||||
RetentionPolicy: "retention_policy2",
|
||||
Default: true,
|
||||
OrganizationID: platform.ID("org2"),
|
||||
BucketID: platform.ID("bucket2"),
|
||||
OrganizationID: MustIDFromString(dbrpOrg2ID),
|
||||
BucketID: MustIDFromString(dbrpBucket2ID),
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
@ -323,16 +333,16 @@ func FindDBRPMappings(
|
|||
Database: "database1",
|
||||
RetentionPolicy: "retention_policy1",
|
||||
Default: false,
|
||||
OrganizationID: platform.ID("org1"),
|
||||
BucketID: platform.ID("bucket1"),
|
||||
OrganizationID: MustIDFromString(dbrpOrg1ID),
|
||||
BucketID: MustIDFromString(dbrpBucket1ID),
|
||||
},
|
||||
{
|
||||
Cluster: "cluster2",
|
||||
Database: "database2",
|
||||
RetentionPolicy: "retention_policy2",
|
||||
Default: true,
|
||||
OrganizationID: platform.ID("org2"),
|
||||
BucketID: platform.ID("bucket2"),
|
||||
OrganizationID: MustIDFromString(dbrpOrg2ID),
|
||||
BucketID: MustIDFromString(dbrpBucket2ID),
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
@ -348,8 +358,8 @@ func FindDBRPMappings(
|
|||
Database: "database2",
|
||||
RetentionPolicy: "retention_policy2",
|
||||
Default: true,
|
||||
OrganizationID: platform.ID("org2"),
|
||||
BucketID: platform.ID("bucket2"),
|
||||
OrganizationID: MustIDFromString(dbrpOrg2ID),
|
||||
BucketID: MustIDFromString(dbrpBucket2ID),
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
@ -363,16 +373,16 @@ func FindDBRPMappings(
|
|||
Database: "database",
|
||||
RetentionPolicy: "retention_policyA",
|
||||
Default: false,
|
||||
OrganizationID: platform.ID("org"),
|
||||
BucketID: platform.ID("bucketA"),
|
||||
OrganizationID: MustIDFromString(dbrpOrg3ID),
|
||||
BucketID: MustIDFromString(dbrpBucketAID),
|
||||
},
|
||||
{
|
||||
Cluster: "cluster",
|
||||
Database: "database",
|
||||
RetentionPolicy: "retention_policyB",
|
||||
Default: true,
|
||||
OrganizationID: platform.ID("org"),
|
||||
BucketID: platform.ID("bucketB"),
|
||||
OrganizationID: MustIDFromString(dbrpOrg3ID),
|
||||
BucketID: MustIDFromString(dbrpBucketBID),
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
@ -390,8 +400,8 @@ func FindDBRPMappings(
|
|||
Database: "database",
|
||||
RetentionPolicy: "retention_policyB",
|
||||
Default: true,
|
||||
OrganizationID: platform.ID("org"),
|
||||
BucketID: platform.ID("bucketB"),
|
||||
OrganizationID: MustIDFromString(dbrpOrg3ID),
|
||||
BucketID: MustIDFromString(dbrpBucketBID),
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
@ -453,16 +463,16 @@ func FindDBRPMappingByKey(
|
|||
Database: "database",
|
||||
RetentionPolicy: "retention_policyA",
|
||||
Default: false,
|
||||
OrganizationID: platform.ID("org"),
|
||||
BucketID: platform.ID("bucketA"),
|
||||
OrganizationID: MustIDFromString(dbrpOrg3ID),
|
||||
BucketID: MustIDFromString(dbrpBucketAID),
|
||||
},
|
||||
{
|
||||
Cluster: "cluster",
|
||||
Database: "database",
|
||||
RetentionPolicy: "retention_policyB",
|
||||
Default: false,
|
||||
OrganizationID: platform.ID("org"),
|
||||
BucketID: platform.ID("bucketB"),
|
||||
OrganizationID: MustIDFromString(dbrpOrg3ID),
|
||||
BucketID: MustIDFromString(dbrpBucketBID),
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
@ -477,8 +487,8 @@ func FindDBRPMappingByKey(
|
|||
Database: "database",
|
||||
RetentionPolicy: "retention_policyB",
|
||||
Default: false,
|
||||
OrganizationID: platform.ID("org"),
|
||||
BucketID: platform.ID("bucketB"),
|
||||
OrganizationID: MustIDFromString(dbrpOrg3ID),
|
||||
BucketID: MustIDFromString(dbrpBucketBID),
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
@ -491,8 +501,8 @@ func FindDBRPMappingByKey(
|
|||
Database: "database",
|
||||
RetentionPolicy: "retention_policyA",
|
||||
Default: false,
|
||||
OrganizationID: platform.ID("org"),
|
||||
BucketID: platform.ID("bucketA"),
|
||||
OrganizationID: MustIDFromString(dbrpOrg3ID),
|
||||
BucketID: MustIDFromString(dbrpBucketAID),
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
@ -560,16 +570,16 @@ func FindDBRPMapping(
|
|||
Database: "database",
|
||||
RetentionPolicy: "retention_policyA",
|
||||
Default: false,
|
||||
OrganizationID: platform.ID("org"),
|
||||
BucketID: platform.ID("bucketA"),
|
||||
OrganizationID: MustIDFromString(dbrpOrg3ID),
|
||||
BucketID: MustIDFromString(dbrpBucketAID),
|
||||
},
|
||||
{
|
||||
Cluster: "cluster",
|
||||
Database: "database",
|
||||
RetentionPolicy: "retention_policyB",
|
||||
Default: false,
|
||||
OrganizationID: platform.ID("org"),
|
||||
BucketID: platform.ID("bucketB"),
|
||||
OrganizationID: MustIDFromString(dbrpOrg3ID),
|
||||
BucketID: MustIDFromString(dbrpBucketBID),
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
@ -586,8 +596,8 @@ func FindDBRPMapping(
|
|||
Database: "database",
|
||||
RetentionPolicy: "retention_policyB",
|
||||
Default: false,
|
||||
OrganizationID: platform.ID("org"),
|
||||
BucketID: platform.ID("bucketB"),
|
||||
OrganizationID: MustIDFromString(dbrpOrg3ID),
|
||||
BucketID: MustIDFromString(dbrpBucketBID),
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
@ -600,16 +610,16 @@ func FindDBRPMapping(
|
|||
Database: "database",
|
||||
RetentionPolicy: "retention_policyA",
|
||||
Default: false,
|
||||
OrganizationID: platform.ID("org"),
|
||||
BucketID: platform.ID("bucketA"),
|
||||
OrganizationID: MustIDFromString(dbrpOrg3ID),
|
||||
BucketID: MustIDFromString(dbrpBucketAID),
|
||||
},
|
||||
{
|
||||
Cluster: "cluster",
|
||||
Database: "database",
|
||||
RetentionPolicy: "retention_policyB",
|
||||
Default: true,
|
||||
OrganizationID: platform.ID("org"),
|
||||
BucketID: platform.ID("bucketB"),
|
||||
OrganizationID: MustIDFromString(dbrpOrg3ID),
|
||||
BucketID: MustIDFromString(dbrpBucketBID),
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
@ -626,8 +636,8 @@ func FindDBRPMapping(
|
|||
Database: "database",
|
||||
RetentionPolicy: "retention_policyB",
|
||||
Default: true,
|
||||
OrganizationID: platform.ID("org"),
|
||||
BucketID: platform.ID("bucketB"),
|
||||
OrganizationID: MustIDFromString(dbrpOrg3ID),
|
||||
BucketID: MustIDFromString(dbrpBucketBID),
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
@ -685,16 +695,16 @@ func DeleteDBRPMapping(
|
|||
Database: "database1",
|
||||
RetentionPolicy: "retention_policy1",
|
||||
Default: false,
|
||||
OrganizationID: platform.ID("org1"),
|
||||
BucketID: platform.ID("bucket1"),
|
||||
OrganizationID: MustIDFromString(dbrpOrg1ID),
|
||||
BucketID: MustIDFromString(dbrpBucket1ID),
|
||||
},
|
||||
{
|
||||
Cluster: "cluster2",
|
||||
Database: "database2",
|
||||
RetentionPolicy: "retention_policy2",
|
||||
Default: true,
|
||||
OrganizationID: platform.ID("org2"),
|
||||
BucketID: platform.ID("bucket2"),
|
||||
OrganizationID: MustIDFromString(dbrpOrg2ID),
|
||||
BucketID: MustIDFromString(dbrpBucket2ID),
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
@ -709,8 +719,8 @@ func DeleteDBRPMapping(
|
|||
Database: "database2",
|
||||
RetentionPolicy: "retention_policy2",
|
||||
Default: true,
|
||||
OrganizationID: platform.ID("org2"),
|
||||
BucketID: platform.ID("bucket2"),
|
||||
OrganizationID: MustIDFromString(dbrpOrg2ID),
|
||||
BucketID: MustIDFromString(dbrpBucket2ID),
|
||||
}},
|
||||
},
|
||||
},
|
||||
|
|
@ -723,16 +733,16 @@ func DeleteDBRPMapping(
|
|||
Database: "database1",
|
||||
RetentionPolicy: "retention_policy1",
|
||||
Default: false,
|
||||
OrganizationID: platform.ID("org1"),
|
||||
BucketID: platform.ID("bucket1"),
|
||||
OrganizationID: MustIDFromString(dbrpOrg1ID),
|
||||
BucketID: MustIDFromString(dbrpBucket1ID),
|
||||
},
|
||||
{
|
||||
Cluster: "cluster2",
|
||||
Database: "database2",
|
||||
RetentionPolicy: "retention_policy2",
|
||||
Default: true,
|
||||
OrganizationID: platform.ID("org2"),
|
||||
BucketID: platform.ID("bucket2"),
|
||||
OrganizationID: MustIDFromString(dbrpOrg2ID),
|
||||
BucketID: MustIDFromString(dbrpBucket2ID),
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
@ -748,16 +758,16 @@ func DeleteDBRPMapping(
|
|||
Database: "database1",
|
||||
RetentionPolicy: "retention_policy1",
|
||||
Default: false,
|
||||
OrganizationID: platform.ID("org1"),
|
||||
BucketID: platform.ID("bucket1"),
|
||||
OrganizationID: MustIDFromString(dbrpOrg1ID),
|
||||
BucketID: MustIDFromString(dbrpBucket1ID),
|
||||
},
|
||||
{
|
||||
Cluster: "cluster2",
|
||||
Database: "database2",
|
||||
RetentionPolicy: "retention_policy2",
|
||||
Default: true,
|
||||
OrganizationID: platform.ID("org2"),
|
||||
BucketID: platform.ID("bucket2"),
|
||||
OrganizationID: MustIDFromString(dbrpOrg2ID),
|
||||
BucketID: MustIDFromString(dbrpBucket2ID),
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
|
|||
|
|
@ -111,7 +111,7 @@ func CreateOrganization(
|
|||
organizations: []*platform.Organization{
|
||||
{
|
||||
Name: "name1",
|
||||
ID: idFromString(t, orgOneID),
|
||||
ID: MustIDFromString(orgOneID),
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
@ -122,7 +122,7 @@ func CreateOrganization(
|
|||
IDGenerator: mock.NewIDGenerator(orgTwoID, t),
|
||||
Organizations: []*platform.Organization{
|
||||
{
|
||||
ID: idFromString(t, orgOneID),
|
||||
ID: MustIDFromString(orgOneID),
|
||||
Name: "organization1",
|
||||
},
|
||||
},
|
||||
|
|
@ -135,23 +135,23 @@ func CreateOrganization(
|
|||
wants: wants{
|
||||
organizations: []*platform.Organization{
|
||||
{
|
||||
ID: idFromString(t, orgOneID),
|
||||
ID: MustIDFromString(orgOneID),
|
||||
Name: "organization1",
|
||||
},
|
||||
{
|
||||
ID: idFromString(t, orgTwoID),
|
||||
ID: MustIDFromString(orgTwoID),
|
||||
Name: "organization2",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "names should not be unique",
|
||||
name: "names should be unique",
|
||||
fields: OrganizationFields{
|
||||
IDGenerator: mock.NewIDGenerator(orgTwoID, t),
|
||||
Organizations: []*platform.Organization{
|
||||
{
|
||||
ID: idFromString(t, orgOneID),
|
||||
ID: MustIDFromString(orgOneID),
|
||||
Name: "organization1",
|
||||
},
|
||||
},
|
||||
|
|
@ -164,7 +164,7 @@ func CreateOrganization(
|
|||
wants: wants{
|
||||
organizations: []*platform.Organization{
|
||||
{
|
||||
ID: idFromString(t, orgOneID),
|
||||
ID: MustIDFromString(orgOneID),
|
||||
Name: "organization1",
|
||||
},
|
||||
},
|
||||
|
|
@ -188,7 +188,11 @@ func CreateOrganization(
|
|||
t.Fatalf("expected error messages to match '%v' got '%v'", tt.wants.err, err.Error())
|
||||
}
|
||||
}
|
||||
|
||||
// Delete only newly created organizations
|
||||
// if tt.args.organization.ID != nil {
|
||||
defer s.DeleteOrganization(ctx, tt.args.organization.ID)
|
||||
// }
|
||||
|
||||
organizations, _, err := s.FindOrganizations(ctx, platform.OrganizationFilter{})
|
||||
if err != nil {
|
||||
|
|
@ -225,21 +229,21 @@ func FindOrganizationByID(
|
|||
fields: OrganizationFields{
|
||||
Organizations: []*platform.Organization{
|
||||
{
|
||||
ID: idFromString(t, orgOneID),
|
||||
ID: MustIDFromString(orgOneID),
|
||||
Name: "organization1",
|
||||
},
|
||||
{
|
||||
ID: idFromString(t, orgTwoID),
|
||||
ID: MustIDFromString(orgTwoID),
|
||||
Name: "organization2",
|
||||
},
|
||||
},
|
||||
},
|
||||
args: args{
|
||||
id: idFromString(t, orgTwoID),
|
||||
id: MustIDFromString(orgTwoID),
|
||||
},
|
||||
wants: wants{
|
||||
organization: &platform.Organization{
|
||||
ID: idFromString(t, orgTwoID),
|
||||
ID: MustIDFromString(orgTwoID),
|
||||
Name: "organization2",
|
||||
},
|
||||
},
|
||||
|
|
@ -295,11 +299,11 @@ func FindOrganizations(
|
|||
fields: OrganizationFields{
|
||||
Organizations: []*platform.Organization{
|
||||
{
|
||||
ID: idFromString(t, orgOneID),
|
||||
ID: MustIDFromString(orgOneID),
|
||||
Name: "abc",
|
||||
},
|
||||
{
|
||||
ID: idFromString(t, orgTwoID),
|
||||
ID: MustIDFromString(orgTwoID),
|
||||
Name: "xyz",
|
||||
},
|
||||
},
|
||||
|
|
@ -308,11 +312,11 @@ func FindOrganizations(
|
|||
wants: wants{
|
||||
organizations: []*platform.Organization{
|
||||
{
|
||||
ID: idFromString(t, orgOneID),
|
||||
ID: MustIDFromString(orgOneID),
|
||||
Name: "abc",
|
||||
},
|
||||
{
|
||||
ID: idFromString(t, orgTwoID),
|
||||
ID: MustIDFromString(orgTwoID),
|
||||
Name: "xyz",
|
||||
},
|
||||
},
|
||||
|
|
@ -323,22 +327,22 @@ func FindOrganizations(
|
|||
fields: OrganizationFields{
|
||||
Organizations: []*platform.Organization{
|
||||
{
|
||||
ID: idFromString(t, orgOneID),
|
||||
ID: MustIDFromString(orgOneID),
|
||||
Name: "abc",
|
||||
},
|
||||
{
|
||||
ID: idFromString(t, orgTwoID),
|
||||
ID: MustIDFromString(orgTwoID),
|
||||
Name: "xyz",
|
||||
},
|
||||
},
|
||||
},
|
||||
args: args{
|
||||
ID: idFromString(t, orgTwoID),
|
||||
ID: MustIDFromString(orgTwoID),
|
||||
},
|
||||
wants: wants{
|
||||
organizations: []*platform.Organization{
|
||||
{
|
||||
ID: idFromString(t, orgTwoID),
|
||||
ID: MustIDFromString(orgTwoID),
|
||||
Name: "xyz",
|
||||
},
|
||||
},
|
||||
|
|
@ -349,11 +353,11 @@ func FindOrganizations(
|
|||
fields: OrganizationFields{
|
||||
Organizations: []*platform.Organization{
|
||||
{
|
||||
ID: idFromString(t, orgOneID),
|
||||
ID: MustIDFromString(orgOneID),
|
||||
Name: "abc",
|
||||
},
|
||||
{
|
||||
ID: idFromString(t, orgTwoID),
|
||||
ID: MustIDFromString(orgTwoID),
|
||||
Name: "xyz",
|
||||
},
|
||||
},
|
||||
|
|
@ -364,7 +368,7 @@ func FindOrganizations(
|
|||
wants: wants{
|
||||
organizations: []*platform.Organization{
|
||||
{
|
||||
ID: idFromString(t, orgTwoID),
|
||||
ID: MustIDFromString(orgTwoID),
|
||||
Name: "xyz",
|
||||
},
|
||||
},
|
||||
|
|
@ -379,7 +383,7 @@ func FindOrganizations(
|
|||
ctx := context.TODO()
|
||||
|
||||
filter := platform.OrganizationFilter{}
|
||||
if tt.args.ID != nil {
|
||||
if tt.args.ID.Valid() {
|
||||
filter.ID = &tt.args.ID
|
||||
}
|
||||
if tt.args.name != "" {
|
||||
|
|
@ -429,22 +433,22 @@ func DeleteOrganization(
|
|||
Organizations: []*platform.Organization{
|
||||
{
|
||||
Name: "orgA",
|
||||
ID: platform.ID("abc"),
|
||||
ID: MustIDFromString(orgOneID),
|
||||
},
|
||||
{
|
||||
Name: "orgB",
|
||||
ID: platform.ID("xyz"),
|
||||
ID: MustIDFromString(orgTwoID),
|
||||
},
|
||||
},
|
||||
},
|
||||
args: args{
|
||||
ID: "abc",
|
||||
ID: orgOneID,
|
||||
},
|
||||
wants: wants{
|
||||
organizations: []*platform.Organization{
|
||||
{
|
||||
Name: "orgB",
|
||||
ID: platform.ID("xyz"),
|
||||
ID: MustIDFromString(orgTwoID),
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
@ -455,27 +459,27 @@ func DeleteOrganization(
|
|||
Organizations: []*platform.Organization{
|
||||
{
|
||||
Name: "orgA",
|
||||
ID: platform.ID("abc"),
|
||||
ID: MustIDFromString(orgOneID),
|
||||
},
|
||||
{
|
||||
Name: "orgB",
|
||||
ID: platform.ID("xyz"),
|
||||
ID: MustIDFromString(orgTwoID),
|
||||
},
|
||||
},
|
||||
},
|
||||
args: args{
|
||||
ID: "123",
|
||||
ID: "1234567890654321",
|
||||
},
|
||||
wants: wants{
|
||||
err: fmt.Errorf("organization not found"),
|
||||
organizations: []*platform.Organization{
|
||||
{
|
||||
Name: "orgA",
|
||||
ID: platform.ID("abc"),
|
||||
ID: MustIDFromString(orgOneID),
|
||||
},
|
||||
{
|
||||
Name: "orgB",
|
||||
ID: platform.ID("xyz"),
|
||||
ID: MustIDFromString(orgTwoID),
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
@ -487,7 +491,7 @@ func DeleteOrganization(
|
|||
s, done := init(tt.fields, t)
|
||||
defer done()
|
||||
ctx := context.TODO()
|
||||
err := s.DeleteOrganization(ctx, platform.ID(tt.args.ID))
|
||||
err := s.DeleteOrganization(ctx, MustIDFromString(tt.args.ID))
|
||||
if (err != nil) != (tt.wants.err != nil) {
|
||||
t.Fatalf("expected error '%v' got '%v'", tt.wants.err, err)
|
||||
}
|
||||
|
|
@ -535,11 +539,11 @@ func FindOrganization(
|
|||
fields: OrganizationFields{
|
||||
Organizations: []*platform.Organization{
|
||||
{
|
||||
ID: platform.ID("a"),
|
||||
ID: MustIDFromString(orgOneID),
|
||||
Name: "abc",
|
||||
},
|
||||
{
|
||||
ID: platform.ID("b"),
|
||||
ID: MustIDFromString(orgTwoID),
|
||||
Name: "xyz",
|
||||
},
|
||||
},
|
||||
|
|
@ -549,7 +553,7 @@ func FindOrganization(
|
|||
},
|
||||
wants: wants{
|
||||
organization: &platform.Organization{
|
||||
ID: platform.ID("a"),
|
||||
ID: MustIDFromString(orgOneID),
|
||||
Name: "abc",
|
||||
},
|
||||
},
|
||||
|
|
@ -609,22 +613,22 @@ func UpdateOrganization(
|
|||
fields: OrganizationFields{
|
||||
Organizations: []*platform.Organization{
|
||||
{
|
||||
ID: platform.ID("1"),
|
||||
ID: MustIDFromString(orgOneID),
|
||||
Name: "organization1",
|
||||
},
|
||||
{
|
||||
ID: platform.ID("2"),
|
||||
ID: MustIDFromString(orgTwoID),
|
||||
Name: "organization2",
|
||||
},
|
||||
},
|
||||
},
|
||||
args: args{
|
||||
id: platform.ID("1"),
|
||||
id: MustIDFromString(orgOneID),
|
||||
name: "changed",
|
||||
},
|
||||
wants: wants{
|
||||
organization: &platform.Organization{
|
||||
ID: platform.ID("1"),
|
||||
ID: MustIDFromString(orgOneID),
|
||||
Name: "changed",
|
||||
},
|
||||
},
|
||||
|
|
|
|||
|
|
@ -112,7 +112,7 @@ func CreateUser(
|
|||
users: []*platform.User{
|
||||
{
|
||||
Name: "name1",
|
||||
ID: idFromString(t, userOneID),
|
||||
ID: MustIDFromString(userOneID),
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
@ -123,7 +123,7 @@ func CreateUser(
|
|||
IDGenerator: mock.NewIDGenerator(userTwoID, t),
|
||||
Users: []*platform.User{
|
||||
{
|
||||
ID: idFromString(t, userOneID),
|
||||
ID: MustIDFromString(userOneID),
|
||||
Name: "user1",
|
||||
},
|
||||
},
|
||||
|
|
@ -136,27 +136,27 @@ func CreateUser(
|
|||
wants: wants{
|
||||
users: []*platform.User{
|
||||
{
|
||||
ID: idFromString(t, userOneID),
|
||||
ID: MustIDFromString(userOneID),
|
||||
Name: "user1",
|
||||
},
|
||||
{
|
||||
ID: idFromString(t, userTwoID),
|
||||
ID: MustIDFromString(userTwoID),
|
||||
Name: "user2",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "names should not be unique",
|
||||
name: "names should be unique",
|
||||
fields: UserFields{
|
||||
IDGenerator: &mock.IDGenerator{
|
||||
IDFn: func() platform.ID {
|
||||
return idFromString(t, userOneID)
|
||||
return MustIDFromString(userOneID)
|
||||
},
|
||||
},
|
||||
Users: []*platform.User{
|
||||
{
|
||||
ID: idFromString(t, userOneID),
|
||||
ID: MustIDFromString(userOneID),
|
||||
Name: "user1",
|
||||
},
|
||||
},
|
||||
|
|
@ -169,7 +169,7 @@ func CreateUser(
|
|||
wants: wants{
|
||||
users: []*platform.User{
|
||||
{
|
||||
ID: idFromString(t, userOneID),
|
||||
ID: MustIDFromString(userOneID),
|
||||
Name: "user1",
|
||||
},
|
||||
},
|
||||
|
|
@ -193,7 +193,11 @@ func CreateUser(
|
|||
t.Fatalf("expected error messages to match '%v' got '%v'", tt.wants.err, err.Error())
|
||||
}
|
||||
}
|
||||
defer s.DeleteUser(ctx, tt.args.user.ID)
|
||||
|
||||
// Delete only created users - ie., having a not nil ID
|
||||
if tt.args.user.ID.Valid() {
|
||||
defer s.DeleteUser(ctx, tt.args.user.ID)
|
||||
}
|
||||
|
||||
users, _, err := s.FindUsers(ctx, platform.UserFilter{})
|
||||
if err != nil {
|
||||
|
|
@ -230,21 +234,21 @@ func FindUserByID(
|
|||
fields: UserFields{
|
||||
Users: []*platform.User{
|
||||
{
|
||||
ID: idFromString(t, userOneID),
|
||||
ID: MustIDFromString(userOneID),
|
||||
Name: "user1",
|
||||
},
|
||||
{
|
||||
ID: idFromString(t, userTwoID),
|
||||
ID: MustIDFromString(userTwoID),
|
||||
Name: "user2",
|
||||
},
|
||||
},
|
||||
},
|
||||
args: args{
|
||||
id: idFromString(t, userTwoID),
|
||||
id: MustIDFromString(userTwoID),
|
||||
},
|
||||
wants: wants{
|
||||
user: &platform.User{
|
||||
ID: idFromString(t, userTwoID),
|
||||
ID: MustIDFromString(userTwoID),
|
||||
Name: "user2",
|
||||
},
|
||||
},
|
||||
|
|
@ -300,11 +304,11 @@ func FindUsers(
|
|||
fields: UserFields{
|
||||
Users: []*platform.User{
|
||||
{
|
||||
ID: idFromString(t, userOneID),
|
||||
ID: MustIDFromString(userOneID),
|
||||
Name: "abc",
|
||||
},
|
||||
{
|
||||
ID: idFromString(t, userTwoID),
|
||||
ID: MustIDFromString(userTwoID),
|
||||
Name: "xyz",
|
||||
},
|
||||
},
|
||||
|
|
@ -313,11 +317,11 @@ func FindUsers(
|
|||
wants: wants{
|
||||
users: []*platform.User{
|
||||
{
|
||||
ID: idFromString(t, userOneID),
|
||||
ID: MustIDFromString(userOneID),
|
||||
Name: "abc",
|
||||
},
|
||||
{
|
||||
ID: idFromString(t, userTwoID),
|
||||
ID: MustIDFromString(userTwoID),
|
||||
Name: "xyz",
|
||||
},
|
||||
},
|
||||
|
|
@ -328,22 +332,22 @@ func FindUsers(
|
|||
fields: UserFields{
|
||||
Users: []*platform.User{
|
||||
{
|
||||
ID: idFromString(t, userOneID),
|
||||
ID: MustIDFromString(userOneID),
|
||||
Name: "abc",
|
||||
},
|
||||
{
|
||||
ID: idFromString(t, userTwoID),
|
||||
ID: MustIDFromString(userTwoID),
|
||||
Name: "xyz",
|
||||
},
|
||||
},
|
||||
},
|
||||
args: args{
|
||||
ID: idFromString(t, userTwoID),
|
||||
ID: MustIDFromString(userTwoID),
|
||||
},
|
||||
wants: wants{
|
||||
users: []*platform.User{
|
||||
{
|
||||
ID: idFromString(t, userTwoID),
|
||||
ID: MustIDFromString(userTwoID),
|
||||
Name: "xyz",
|
||||
},
|
||||
},
|
||||
|
|
@ -354,11 +358,11 @@ func FindUsers(
|
|||
fields: UserFields{
|
||||
Users: []*platform.User{
|
||||
{
|
||||
ID: idFromString(t, userOneID),
|
||||
ID: MustIDFromString(userOneID),
|
||||
Name: "abc",
|
||||
},
|
||||
{
|
||||
ID: idFromString(t, userTwoID),
|
||||
ID: MustIDFromString(userTwoID),
|
||||
Name: "xyz",
|
||||
},
|
||||
},
|
||||
|
|
@ -369,7 +373,7 @@ func FindUsers(
|
|||
wants: wants{
|
||||
users: []*platform.User{
|
||||
{
|
||||
ID: idFromString(t, userTwoID),
|
||||
ID: MustIDFromString(userTwoID),
|
||||
Name: "xyz",
|
||||
},
|
||||
},
|
||||
|
|
@ -384,7 +388,7 @@ func FindUsers(
|
|||
ctx := context.TODO()
|
||||
|
||||
filter := platform.UserFilter{}
|
||||
if tt.args.ID != nil {
|
||||
if tt.args.ID.Valid() {
|
||||
filter.ID = &tt.args.ID
|
||||
}
|
||||
if tt.args.name != "" {
|
||||
|
|
@ -434,22 +438,22 @@ func DeleteUser(
|
|||
Users: []*platform.User{
|
||||
{
|
||||
Name: "orgA",
|
||||
ID: idFromString(t, userOneID),
|
||||
ID: MustIDFromString(userOneID),
|
||||
},
|
||||
{
|
||||
Name: "orgB",
|
||||
ID: idFromString(t, userTwoID),
|
||||
ID: MustIDFromString(userTwoID),
|
||||
},
|
||||
},
|
||||
},
|
||||
args: args{
|
||||
ID: idFromString(t, userOneID),
|
||||
ID: MustIDFromString(userOneID),
|
||||
},
|
||||
wants: wants{
|
||||
users: []*platform.User{
|
||||
{
|
||||
Name: "orgB",
|
||||
ID: idFromString(t, userTwoID),
|
||||
ID: MustIDFromString(userTwoID),
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
@ -460,27 +464,27 @@ func DeleteUser(
|
|||
Users: []*platform.User{
|
||||
{
|
||||
Name: "orgA",
|
||||
ID: idFromString(t, userOneID),
|
||||
ID: MustIDFromString(userOneID),
|
||||
},
|
||||
{
|
||||
Name: "orgB",
|
||||
ID: idFromString(t, userTwoID),
|
||||
ID: MustIDFromString(userTwoID),
|
||||
},
|
||||
},
|
||||
},
|
||||
args: args{
|
||||
ID: idFromString(t, userThreeID),
|
||||
ID: MustIDFromString(userThreeID),
|
||||
},
|
||||
wants: wants{
|
||||
err: fmt.Errorf("user not found"),
|
||||
users: []*platform.User{
|
||||
{
|
||||
Name: "orgA",
|
||||
ID: idFromString(t, userOneID),
|
||||
ID: MustIDFromString(userOneID),
|
||||
},
|
||||
{
|
||||
Name: "orgB",
|
||||
ID: idFromString(t, userTwoID),
|
||||
ID: MustIDFromString(userTwoID),
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
@ -540,11 +544,11 @@ func FindUser(
|
|||
fields: UserFields{
|
||||
Users: []*platform.User{
|
||||
{
|
||||
ID: idFromString(t, userOneID),
|
||||
ID: MustIDFromString(userOneID),
|
||||
Name: "abc",
|
||||
},
|
||||
{
|
||||
ID: idFromString(t, userTwoID),
|
||||
ID: MustIDFromString(userTwoID),
|
||||
Name: "xyz",
|
||||
},
|
||||
},
|
||||
|
|
@ -554,7 +558,7 @@ func FindUser(
|
|||
},
|
||||
wants: wants{
|
||||
user: &platform.User{
|
||||
ID: idFromString(t, userOneID),
|
||||
ID: MustIDFromString(userOneID),
|
||||
Name: "abc",
|
||||
},
|
||||
},
|
||||
|
|
@ -614,22 +618,22 @@ func UpdateUser(
|
|||
fields: UserFields{
|
||||
Users: []*platform.User{
|
||||
{
|
||||
ID: idFromString(t, userOneID),
|
||||
ID: MustIDFromString(userOneID),
|
||||
Name: "user1",
|
||||
},
|
||||
{
|
||||
ID: idFromString(t, userTwoID),
|
||||
ID: MustIDFromString(userTwoID),
|
||||
Name: "user2",
|
||||
},
|
||||
},
|
||||
},
|
||||
args: args{
|
||||
id: idFromString(t, userOneID),
|
||||
id: MustIDFromString(userOneID),
|
||||
name: "changed",
|
||||
},
|
||||
wants: wants{
|
||||
user: &platform.User{
|
||||
ID: idFromString(t, userOneID),
|
||||
ID: MustIDFromString(userOneID),
|
||||
Name: "changed",
|
||||
},
|
||||
},
|
||||
|
|
|
|||
|
|
@ -1,15 +1,14 @@
|
|||
package testing
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/influxdata/platform"
|
||||
)
|
||||
|
||||
func idFromString(t *testing.T, s string) platform.ID {
|
||||
// MustIDFromString is an helper to ensure a correct ID is built during testing.
|
||||
func MustIDFromString(s string) platform.ID {
|
||||
id, err := platform.IDFromString(s)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
panic(err)
|
||||
}
|
||||
return *id
|
||||
}
|
||||
|
|
|
|||
2
user.go
2
user.go
|
|
@ -2,7 +2,7 @@ package platform
|
|||
|
||||
import "context"
|
||||
|
||||
// User is a user. 🎉
|
||||
// User is an user. 🎉
|
||||
type User struct {
|
||||
ID ID `json:"id,omitempty"`
|
||||
Name string `json:"name"`
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ import (
|
|||
|
||||
"github.com/google/go-cmp/cmp"
|
||||
"github.com/influxdata/platform"
|
||||
platformtesting "github.com/influxdata/platform/testing"
|
||||
)
|
||||
|
||||
func TestView_MarshalJSON(t *testing.T) {
|
||||
|
|
@ -24,7 +25,7 @@ func TestView_MarshalJSON(t *testing.T) {
|
|||
args: args{
|
||||
view: platform.View{
|
||||
ViewContents: platform.ViewContents{
|
||||
ID: platform.ID("0"),
|
||||
ID: platformtesting.MustIDFromString("f01dab1ef005ba11"),
|
||||
Name: "hello",
|
||||
},
|
||||
Properties: platform.LineViewProperties{
|
||||
|
|
@ -35,7 +36,7 @@ func TestView_MarshalJSON(t *testing.T) {
|
|||
wants: wants{
|
||||
json: `
|
||||
{
|
||||
"id": "30",
|
||||
"id": "f01dab1ef005ba11",
|
||||
"name": "hello",
|
||||
"properties": {
|
||||
"shape": "chronograf-v2",
|
||||
|
|
|
|||
Loading…
Reference in New Issue