78 lines
1.7 KiB
Go
78 lines
1.7 KiB
Go
|
package queries
|
||
|
|
||
|
import (
|
||
|
"testing"
|
||
|
|
||
|
"github.com/stretchr/testify/assert"
|
||
|
)
|
||
|
|
||
|
func TestQueryIsPermitted(t *testing.T) {
|
||
|
examples := []struct {
|
||
|
name string
|
||
|
query Query
|
||
|
args []string
|
||
|
expected bool
|
||
|
}{
|
||
|
{
|
||
|
name: "no input provided",
|
||
|
query: makeQuery("localhost", "someuser", "somedb", "default"),
|
||
|
args: makeArgs("", "", "", ""),
|
||
|
expected: false,
|
||
|
},
|
||
|
{
|
||
|
name: "match on host",
|
||
|
query: makeQuery("localhost", "*", "*", "*"),
|
||
|
args: makeArgs("localhost", "user", "db", "default"),
|
||
|
expected: true,
|
||
|
},
|
||
|
{
|
||
|
name: "match on full set",
|
||
|
query: makeQuery("localhost", "user", "database", "mode"),
|
||
|
args: makeArgs("localhost", "someuser", "somedb", "default"),
|
||
|
expected: false,
|
||
|
},
|
||
|
{
|
||
|
name: "match on partial database",
|
||
|
query: makeQuery("localhost", "*", "myapp_*", "*"),
|
||
|
args: makeArgs("localhost", "user", "myapp_development", "default"),
|
||
|
expected: true,
|
||
|
},
|
||
|
{
|
||
|
name: "match on full set but not mode",
|
||
|
query: makeQuery("localhost", "*", "*", "readonly"),
|
||
|
args: makeArgs("localhost", "user", "db", "default"),
|
||
|
expected: false,
|
||
|
},
|
||
|
}
|
||
|
|
||
|
for _, ex := range examples {
|
||
|
t.Run(ex.name, func(t *testing.T) {
|
||
|
result := ex.query.IsPermitted(ex.args[0], ex.args[1], ex.args[2], ex.args[3])
|
||
|
assert.Equal(t, ex.expected, result)
|
||
|
})
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func makeArgs(vals ...string) []string {
|
||
|
return vals
|
||
|
}
|
||
|
|
||
|
func makeQuery(host, user, database, mode string) Query {
|
||
|
mustfield := func(input string) field {
|
||
|
f, err := newField(input)
|
||
|
if err != nil {
|
||
|
panic(err)
|
||
|
}
|
||
|
return f
|
||
|
}
|
||
|
|
||
|
return Query{
|
||
|
Meta: &Metadata{
|
||
|
Host: mustfield(host),
|
||
|
User: mustfield(user),
|
||
|
Database: mustfield(database),
|
||
|
Mode: mustfield(mode),
|
||
|
},
|
||
|
}
|
||
|
}
|