Guard against length-0 slice in org_config get and FindOrCreate methods

Added ErrOrganizationConfigNotFound error
Refactored FindOrCreate to use helper get method
Ensure that FindOrCreate creates a new org config if config not found
and returns any other errors

Co-authored-by: Jared Scheib <jared.scheib@gmail.com>
pull/3806/head
Alirie Gray 2018-07-10 11:28:58 -07:00
parent 7023b8d150
commit 251d15672b
4 changed files with 44 additions and 41 deletions

View File

@ -41,6 +41,9 @@ func (s *OrganizationConfigStore) Get(ctx context.Context, orgID string) (*chron
func (s *OrganizationConfigStore) get(ctx context.Context, tx *bolt.Tx, orgID string, cfg *chronograf.OrganizationConfig) error {
v := tx.Bucket(OrganizationConfigBucket).Get([]byte(orgID))
if len(v) == 0 {
return chronograf.ErrOrganizationConfigNotFound
}
return internal.UnmarshalOrganizationConfig(v, cfg)
}
@ -48,12 +51,12 @@ func (s *OrganizationConfigStore) get(ctx context.Context, tx *bolt.Tx, orgID st
func (s *OrganizationConfigStore) FindOrCreate(ctx context.Context, orgID string) (*chronograf.OrganizationConfig, error) {
var cfg chronograf.OrganizationConfig
err := s.client.db.Update(func(tx *bolt.Tx) error {
v := tx.Bucket(OrganizationConfigBucket).Get([]byte(orgID))
if v == nil {
err := s.get(ctx, tx, orgID, &cfg)
if err == chronograf.ErrOrganizationConfigNotFound {
cfg = newOrganizationConfig(orgID)
return s.update(ctx, tx, &cfg)
}
return internal.UnmarshalOrganizationConfig(v, &cfg)
return err
})
if err != nil {

View File

@ -38,7 +38,7 @@ const (
ErrInvalidCellOptionsText = Error("invalid text wrapping option. Valid wrappings are 'truncate', 'wrap', and 'single line'")
ErrInvalidCellOptionsSort = Error("cell options sortby cannot be empty'")
ErrInvalidCellOptionsColumns = Error("cell options columns cannot be empty'")
ErrOrganizationConfigFindOrCreateFailed = Error("failed to find or create organization config")
ErrOrganizationConfigNotFound = Error("could not find organization config")
)
// Error is a domain error encountered while processing chronograf requests

View File

@ -13,7 +13,7 @@ var _ chronograf.OrganizationConfigStore = &OrganizationConfigStore{}
type OrganizationConfigStore struct{}
func (s *OrganizationConfigStore) FindOrCreate(context.Context, string) (*chronograf.OrganizationConfig, error) {
return nil, chronograf.ErrOrganizationConfigFindOrCreateFailed
return nil, chronograf.ErrOrganizationConfigNotFound
}
func (s *OrganizationConfigStore) Update(context.Context, *chronograf.OrganizationConfig) error {

View File

@ -152,7 +152,7 @@ func TestOrganizationConfig(t *testing.T) {
},
}, nil
default:
return nil, chronograf.ErrOrganizationConfigFindOrCreateFailed
return nil, chronograf.ErrOrganizationConfigNotFound
}
},
},
@ -254,7 +254,7 @@ func TestLogViewerOrganizationConfig(t *testing.T) {
},
}, nil
default:
return nil, chronograf.ErrOrganizationConfigFindOrCreateFailed
return nil, chronograf.ErrOrganizationConfigNotFound
}
},
},
@ -353,7 +353,7 @@ func TestReplaceLogViewerOrganizationConfig(t *testing.T) {
},
}, nil
default:
return nil, chronograf.ErrOrganizationConfigFindOrCreateFailed
return nil, chronograf.ErrOrganizationConfigNotFound
}
},
UpdateF: func(ctx context.Context, target *chronograf.OrganizationConfig) error {
@ -445,7 +445,7 @@ func TestReplaceLogViewerOrganizationConfig(t *testing.T) {
},
}, nil
default:
return nil, chronograf.ErrOrganizationConfigFindOrCreateFailed
return nil, chronograf.ErrOrganizationConfigNotFound
}
},
UpdateF: func(ctx context.Context, target *chronograf.OrganizationConfig) error {
@ -489,7 +489,7 @@ func TestReplaceLogViewerOrganizationConfig(t *testing.T) {
},
}, nil
default:
return nil, chronograf.ErrOrganizationConfigFindOrCreateFailed
return nil, chronograf.ErrOrganizationConfigNotFound
}
},
UpdateF: func(ctx context.Context, target *chronograf.OrganizationConfig) error {
@ -554,7 +554,7 @@ func TestReplaceLogViewerOrganizationConfig(t *testing.T) {
},
}, nil
default:
return nil, chronograf.ErrOrganizationConfigFindOrCreateFailed
return nil, chronograf.ErrOrganizationConfigNotFound
}
},
UpdateF: func(ctx context.Context, target *chronograf.OrganizationConfig) error {
@ -624,7 +624,7 @@ func TestReplaceLogViewerOrganizationConfig(t *testing.T) {
},
}, nil
default:
return nil, chronograf.ErrOrganizationConfigFindOrCreateFailed
return nil, chronograf.ErrOrganizationConfigNotFound
}
},
UpdateF: func(ctx context.Context, target *chronograf.OrganizationConfig) error {