mirror of
https://github.com/featurebasedb/featurebase.git
synced 2026-08-28 10:54:59 +00:00
Merge branch 'master' of github.com:pilosa/pilosa into improve-test-coverage
This commit is contained in:
commit
bcc71b316a
6 changed files with 100 additions and 9 deletions
13
cmd/root.go
13
cmd/root.go
|
|
@ -109,6 +109,11 @@ func setAllConfig(v *viper.Viper, flags *pflag.FlagSet, envPrefix string) error
|
|||
v.AutomaticEnv()
|
||||
|
||||
c := v.GetString("config")
|
||||
var flagErr error
|
||||
validTags := make(map[string]bool)
|
||||
flags.VisitAll(func(f *pflag.Flag) {
|
||||
validTags[f.Name] = true
|
||||
})
|
||||
|
||||
// add config file to viper
|
||||
if c != "" {
|
||||
|
|
@ -118,10 +123,16 @@ func setAllConfig(v *viper.Viper, flags *pflag.FlagSet, envPrefix string) error
|
|||
if err != nil {
|
||||
return fmt.Errorf("error reading configuration file '%s': %v", c, err)
|
||||
}
|
||||
|
||||
for _, key := range v.AllKeys() {
|
||||
if _, ok := validTags[key]; !ok {
|
||||
return fmt.Errorf("invalid option in configuration file: %v", key)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// set all values from viper
|
||||
var flagErr error
|
||||
flags.VisitAll(func(f *pflag.Flag) {
|
||||
if flagErr != nil {
|
||||
return
|
||||
|
|
|
|||
|
|
@ -171,3 +171,27 @@ func TestRootCommand(t *testing.T) {
|
|||
t.Fatalf("Expected standard usage message from RootCommand, but err: '%v', output: '%s'", err, outStr)
|
||||
}
|
||||
}
|
||||
|
||||
func TestRootCommand_Config(t *testing.T) {
|
||||
file, err := ioutil.TempFile("", "test.conf")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
config := `data-dir = "/tmp/pil5_0"
|
||||
bind = "127.0.0.1:10101"
|
||||
|
||||
[cluster]
|
||||
poll-interval = "2m0s"
|
||||
replicas = 2
|
||||
partitions = 128
|
||||
hosts = [
|
||||
"127.0.0.1:10101",
|
||||
"127.0.0.1:10111",
|
||||
]`
|
||||
file.Write([]byte(config))
|
||||
file.Close()
|
||||
_, err = ExecNewRootCommand(t, "server", "--config", file.Name())
|
||||
if err.Error() != "invalid option in configuration file: cluster.partitions" {
|
||||
t.Fatalf("Expected invalid option in configuration file, but err: '%v'", err)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@ type ExportCommand struct {
|
|||
// Name of the index & frame to export from.
|
||||
Index string
|
||||
Frame string
|
||||
View string
|
||||
View string
|
||||
// Filename to export to.
|
||||
Path string
|
||||
|
||||
|
|
|
|||
11
handler.go
11
handler.go
|
|
@ -844,7 +844,7 @@ func (h *Handler) readProtobufQueryRequest(r *http.Request) (*QueryRequest, erro
|
|||
// readURLQueryRequest parses query parameters from URL parameters from r.
|
||||
func (h *Handler) readURLQueryRequest(r *http.Request) (*QueryRequest, error) {
|
||||
q := r.URL.Query()
|
||||
validQuery := h.getValidURLQuery(r)
|
||||
validQuery := validOptions(QueryRequest{})
|
||||
for key, _ := range q {
|
||||
if _, ok := validQuery[key]; !ok {
|
||||
return nil, errors.New("invalid query params")
|
||||
|
|
@ -882,12 +882,13 @@ func (h *Handler) readURLQueryRequest(r *http.Request) (*QueryRequest, error) {
|
|||
}, nil
|
||||
}
|
||||
|
||||
func (h *Handler) getValidURLQuery(r *http.Request) map[string]bool {
|
||||
// validOptions return all attributes of an interface with lower first character.
|
||||
func validOptions(v interface{}) map[string]bool {
|
||||
validQuery := make(map[string]bool)
|
||||
args := reflect.ValueOf(QueryRequest{})
|
||||
argsType := reflect.ValueOf(v).Type()
|
||||
|
||||
for i := 0; i < args.Type().NumField(); i++ {
|
||||
fieldName := args.Type().Field(i).Name
|
||||
for i := 0; i < argsType.NumField(); i++ {
|
||||
fieldName := argsType.Field(i).Name
|
||||
chars := []rune(fieldName)
|
||||
chars[0] = unicode.ToLower(chars[0])
|
||||
fieldName = string(chars)
|
||||
|
|
|
|||
|
|
@ -49,10 +49,10 @@ var (
|
|||
)
|
||||
|
||||
// Regular expression to validate index and frame names.
|
||||
var nameRegexp = regexp.MustCompile(`^[a-z][a-z0-9_-]{0,64}$`)
|
||||
var nameRegexp = regexp.MustCompile(`^[a-z][a-z0-9_-]{0,63}$`)
|
||||
|
||||
// Regular expression to validate row and column labels.
|
||||
var labelRegexp = regexp.MustCompile(`^[A-Za-z][A-Za-z0-9_-]{0,64}$`)
|
||||
var labelRegexp = regexp.MustCompile(`^[A-Za-z][A-Za-z0-9_-]{0,63}$`)
|
||||
|
||||
// ColumnAttrSet represents a set of attributes for a vertical column in an index.
|
||||
// Can have a set of attributes attached to it.
|
||||
|
|
|
|||
55
pilosa_test.go
Normal file
55
pilosa_test.go
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
package pilosa_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/pilosa/pilosa"
|
||||
)
|
||||
|
||||
func TestValidateName(t *testing.T) {
|
||||
names := []string{
|
||||
"a", "ab", "ab1", "b-c", "d_e",
|
||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||
}
|
||||
for _, name := range names {
|
||||
if pilosa.ValidateName(name) != nil {
|
||||
t.Fatalf("Should be valid index name: %s", name)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestValidateNameInvalid(t *testing.T) {
|
||||
names := []string{
|
||||
"", "'", "^", "/", "\\", "A", "*", "a:b", "valid?no", "yüce", "1", "_", "-",
|
||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1",
|
||||
}
|
||||
for _, name := range names {
|
||||
if pilosa.ValidateName(name) == nil {
|
||||
t.Fatalf("Should be invalid index name: %s", name)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestValidateLabel(t *testing.T) {
|
||||
labels := []string{
|
||||
"a", "ab", "ab1", "d_e", "A", "Bc", "B1", "aB", "b-c",
|
||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||
}
|
||||
for _, label := range labels {
|
||||
if pilosa.ValidateLabel(label) != nil {
|
||||
t.Fatalf("Should be valid label: %s", label)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestValidateLabelInvalid(t *testing.T) {
|
||||
labels := []string{
|
||||
"", "1", "_", "-", "'", "^", "/", "\\", "*", "a:b", "valid?no", "yüce",
|
||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1",
|
||||
}
|
||||
for _, label := range labels {
|
||||
if pilosa.ValidateLabel(label) == nil {
|
||||
t.Fatalf("Should be invalid label: %s", label)
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue