mirror of
https://github.com/OliveTin/OliveTin
synced 2025-12-11 16:45:42 +00:00
* feature: Argument values can be null be default. Use RejectNull to change. * feature: Argument values can be null be default. Use RejectNull to change.
98 lines
2.5 KiB
Go
98 lines
2.5 KiB
Go
package executor
|
|
|
|
import (
|
|
config "github.com/OliveTin/OliveTin/internal/config"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"testing"
|
|
)
|
|
|
|
func TestSanitizeUnsafe(t *testing.T) {
|
|
assert.Nil(t, TypeSafetyCheck("", "_zomg_ c:/ haxxor ' bobby tables && rm -rf ", "very_dangerous_raw_string"))
|
|
}
|
|
|
|
func TestSanitizeUnimplemented(t *testing.T) {
|
|
err := TypeSafetyCheck("", "I am a happy little argument", "greeting_type")
|
|
|
|
assert.NotNil(t, err, "Test an argument type that does not exist")
|
|
}
|
|
|
|
func TestArgumentValueNullable(t *testing.T) {
|
|
a1 := config.Action{
|
|
Title: "Release the hounds",
|
|
Shell: "echo 'Releasing {{ count }} hounds'",
|
|
Arguments: []config.ActionArgument{
|
|
{
|
|
Name: "count",
|
|
Type: "int",
|
|
},
|
|
},
|
|
}
|
|
|
|
values := map[string]string{
|
|
"count": "",
|
|
}
|
|
|
|
out, err := parseActionArguments(a1.Shell, values, &a1, a1.Title, "")
|
|
|
|
assert.Equal(t, "echo 'Releasing hounds'", out)
|
|
assert.Nil(t, err)
|
|
|
|
a1.Arguments[0].RejectNull = true
|
|
|
|
_, err = parseActionArguments(a1.Shell, values, &a1, a1.Title, "")
|
|
|
|
assert.NotNil(t, err)
|
|
}
|
|
|
|
func TestArgumentNameNumbers(t *testing.T) {
|
|
a1 := config.Action{
|
|
Title: "Do some tickles",
|
|
Shell: "echo 'Tickling {{ person1name }}'",
|
|
Arguments: []config.ActionArgument{
|
|
{
|
|
Name: "person1name",
|
|
Type: "ascii",
|
|
},
|
|
},
|
|
}
|
|
|
|
values := map[string]string{
|
|
"person1name": "Fred",
|
|
}
|
|
|
|
out, err := parseActionArguments(a1.Shell, values, &a1, a1.Title, "")
|
|
|
|
assert.Equal(t, "echo 'Tickling Fred'", out)
|
|
assert.Nil(t, err)
|
|
}
|
|
|
|
func TestArgumentNotProvided(t *testing.T) {
|
|
a1 := config.Action{
|
|
Title: "Do some tickles",
|
|
Shell: "echo 'Tickling {{ personName }}'",
|
|
Arguments: []config.ActionArgument{
|
|
{
|
|
Name: "person",
|
|
Type: "ascii",
|
|
},
|
|
},
|
|
}
|
|
|
|
values := map[string]string{}
|
|
|
|
out, err := parseActionArguments(a1.Shell, values, &a1, a1.Title, "")
|
|
|
|
assert.Equal(t, "", out)
|
|
assert.Equal(t, err.Error(), "Required arg not provided: personName")
|
|
}
|
|
|
|
func TestTypeSafetyCheckUrl(t *testing.T) {
|
|
assert.Nil(t, TypeSafetyCheck("test1", "http://google.com", "url"), "Test URL: google.com")
|
|
assert.Nil(t, TypeSafetyCheck("test2", "http://technowax.net:80?foo=bar", "url"), "Test URL: technowax.net with query arguments")
|
|
assert.Nil(t, TypeSafetyCheck("test3", "http://localhost:80?foo=bar", "url"), "Test URL: localhost with query arguments")
|
|
assert.NotNil(t, TypeSafetyCheck("test4", "http://lo host:80", "url"), "Test a badly formed URL")
|
|
assert.NotNil(t, TypeSafetyCheck("test5", "12345", "url"), "Test a badly formed URL")
|
|
assert.NotNil(t, TypeSafetyCheck("test6", "_!23;", "url"), "Test a badly formed URL")
|
|
}
|