mirror of
https://github.com/aykhans/sarin.git
synced 2026-02-28 06:49:13 +00:00
169 lines
4.6 KiB
Go
169 lines
4.6 KiB
Go
package e2e
|
|
|
|
import (
|
|
"testing"
|
|
)
|
|
|
|
func TestValidation_MissingURL(t *testing.T) {
|
|
t.Parallel()
|
|
res := run("-r", "1")
|
|
assertExitCode(t, res, 1)
|
|
assertContains(t, res.Stderr, "URL")
|
|
assertContains(t, res.Stderr, "required")
|
|
}
|
|
|
|
func TestValidation_InvalidURLScheme(t *testing.T) {
|
|
t.Parallel()
|
|
res := run("-U", "ftp://example.com", "-r", "1")
|
|
assertExitCode(t, res, 1)
|
|
assertContains(t, res.Stderr, "URL")
|
|
assertContains(t, res.Stderr, "scheme")
|
|
}
|
|
|
|
func TestValidation_URLWithoutHost(t *testing.T) {
|
|
t.Parallel()
|
|
res := run("-U", "http://", "-r", "1")
|
|
assertExitCode(t, res, 1)
|
|
assertContains(t, res.Stderr, "URL")
|
|
}
|
|
|
|
func TestValidation_NoRequestsOrDuration(t *testing.T) {
|
|
t.Parallel()
|
|
res := run("-U", "http://example.com")
|
|
assertExitCode(t, res, 1)
|
|
assertContains(t, res.Stderr, "request count or duration")
|
|
}
|
|
|
|
func TestValidation_ZeroRequests(t *testing.T) {
|
|
t.Parallel()
|
|
res := run("-U", "http://example.com", "-r", "0")
|
|
assertExitCode(t, res, 1)
|
|
assertContains(t, res.Stderr, "Requests")
|
|
}
|
|
|
|
func TestValidation_ZeroDuration(t *testing.T) {
|
|
t.Parallel()
|
|
res := run("-U", "http://example.com", "-d", "0s")
|
|
assertExitCode(t, res, 1)
|
|
assertContains(t, res.Stderr, "Duration")
|
|
}
|
|
|
|
func TestValidation_ZeroRequestsAndZeroDuration(t *testing.T) {
|
|
t.Parallel()
|
|
res := run("-U", "http://example.com", "-r", "0", "-d", "0s")
|
|
assertExitCode(t, res, 1)
|
|
assertContains(t, res.Stderr, "VALIDATION")
|
|
}
|
|
|
|
func TestValidation_ConcurrencyZero(t *testing.T) {
|
|
t.Parallel()
|
|
res := run("-U", "http://example.com", "-r", "1", "-c", "0")
|
|
assertExitCode(t, res, 1)
|
|
assertContains(t, res.Stderr, "concurrency")
|
|
}
|
|
|
|
func TestValidation_TimeoutZero(t *testing.T) {
|
|
t.Parallel()
|
|
// Timeout of 0 is invalid (must be > 0)
|
|
res := run("-U", "http://example.com", "-r", "1", "-T", "0s")
|
|
assertExitCode(t, res, 1)
|
|
assertContains(t, res.Stderr, "timeout")
|
|
}
|
|
|
|
func TestValidation_InvalidOutputFormat(t *testing.T) {
|
|
t.Parallel()
|
|
res := run("-U", "http://example.com", "-r", "1", "-o", "xml")
|
|
assertExitCode(t, res, 1)
|
|
assertContains(t, res.Stderr, "Output")
|
|
}
|
|
|
|
func TestValidation_InvalidProxyScheme(t *testing.T) {
|
|
t.Parallel()
|
|
res := run("-U", "http://example.com", "-r", "1", "-X", "ftp://proxy.example.com:8080")
|
|
assertExitCode(t, res, 1)
|
|
assertContains(t, res.Stderr, "proxy")
|
|
}
|
|
|
|
func TestValidation_EmptyLuaScript(t *testing.T) {
|
|
t.Parallel()
|
|
res := run("-U", "http://example.com", "-r", "1", "-lua", "")
|
|
assertExitCode(t, res, 1)
|
|
}
|
|
|
|
func TestValidation_EmptyJsScript(t *testing.T) {
|
|
t.Parallel()
|
|
res := run("-U", "http://example.com", "-r", "1", "-js", "")
|
|
assertExitCode(t, res, 1)
|
|
}
|
|
|
|
func TestValidation_LuaScriptMissingTransform(t *testing.T) {
|
|
t.Parallel()
|
|
res := run("-U", "http://example.com", "-r", "1",
|
|
"-lua", `print("hello")`)
|
|
assertExitCode(t, res, 1)
|
|
assertContains(t, res.Stderr, "VALIDATION")
|
|
}
|
|
|
|
func TestValidation_JsScriptMissingTransform(t *testing.T) {
|
|
t.Parallel()
|
|
res := run("-U", "http://example.com", "-r", "1",
|
|
"-js", `console.log("hello")`)
|
|
assertExitCode(t, res, 1)
|
|
assertContains(t, res.Stderr, "VALIDATION")
|
|
}
|
|
|
|
func TestValidation_LuaScriptSyntaxError(t *testing.T) {
|
|
t.Parallel()
|
|
res := run("-U", "http://example.com", "-r", "1",
|
|
"-lua", `function transform(req invalid syntax`)
|
|
assertExitCode(t, res, 1)
|
|
assertContains(t, res.Stderr, "VALIDATION")
|
|
}
|
|
|
|
func TestValidation_JsScriptSyntaxError(t *testing.T) {
|
|
t.Parallel()
|
|
res := run("-U", "http://example.com", "-r", "1",
|
|
"-js", `function transform(req { invalid`)
|
|
assertExitCode(t, res, 1)
|
|
assertContains(t, res.Stderr, "VALIDATION")
|
|
}
|
|
|
|
func TestValidation_ScriptEmptyFileRef(t *testing.T) {
|
|
t.Parallel()
|
|
// "@" with nothing after it
|
|
res := run("-U", "http://example.com", "-r", "1", "-lua", "@")
|
|
assertExitCode(t, res, 1)
|
|
}
|
|
|
|
func TestValidation_ScriptNonexistentFile(t *testing.T) {
|
|
t.Parallel()
|
|
res := run("-U", "http://example.com", "-r", "1",
|
|
"-lua", "@/nonexistent/path/script.lua")
|
|
assertExitCode(t, res, 1)
|
|
}
|
|
|
|
func TestValidation_InvalidTemplateInHeader(t *testing.T) {
|
|
t.Parallel()
|
|
res := run("-U", "http://example.com", "-r", "1",
|
|
"-H", "X-Test: {{ invalid_func }}")
|
|
assertExitCode(t, res, 1)
|
|
assertContains(t, res.Stderr, "VALIDATION")
|
|
}
|
|
|
|
func TestValidation_InvalidTemplateInBody(t *testing.T) {
|
|
t.Parallel()
|
|
// Use a template with invalid syntax (unclosed action)
|
|
res := run("-U", "http://example.com", "-r", "1",
|
|
"-B", "{{ invalid_func_xyz }}")
|
|
assertExitCode(t, res, 1)
|
|
assertContains(t, res.Stderr, "VALIDATION")
|
|
}
|
|
|
|
func TestValidation_MultipleErrors(t *testing.T) {
|
|
t.Parallel()
|
|
// No URL, no requests/duration — should report multiple validation errors
|
|
res := run("-c", "1")
|
|
assertExitCode(t, res, 1)
|
|
assertContains(t, res.Stderr, "URL")
|
|
}
|