add CI workflow and coverage-gap validation tests

This commit is contained in:
2026-02-26 19:13:42 +04:00
parent 4b3230bb27
commit 7c246102ff
2 changed files with 141 additions and 0 deletions

117
e2e/coverage_gaps_test.go Normal file
View File

@@ -0,0 +1,117 @@
package e2e
import "testing"
func TestValidation_InvalidTemplateInMethod(t *testing.T) {
t.Parallel()
res := run("-U", "http://example.com", "-r", "1", "-M", "{{ invalid_func }}")
assertExitCode(t, res, 1)
assertContains(t, res.Stderr, "Method[0]")
}
func TestValidation_InvalidTemplateInParamKey(t *testing.T) {
t.Parallel()
res := run("-U", "http://example.com", "-r", "1", "-P", "{{ invalid_func }}=value")
assertExitCode(t, res, 1)
assertContains(t, res.Stderr, "Param[0].Key")
}
func TestValidation_InvalidTemplateInCookieValue(t *testing.T) {
t.Parallel()
res := run("-U", "http://example.com", "-r", "1", "-C", "session={{ invalid_func }}")
assertExitCode(t, res, 1)
assertContains(t, res.Stderr, "Cookie[0].Value[0]")
}
func TestValidation_InvalidTemplateInURLPath(t *testing.T) {
t.Parallel()
res := run("-U", "http://example.com/{{ invalid_func }}", "-r", "1")
assertExitCode(t, res, 1)
assertContains(t, res.Stderr, "URL.Path")
}
func TestValidation_InvalidTemplateInValues(t *testing.T) {
t.Parallel()
res := run("-U", "http://example.com", "-r", "1", "-V", "A={{ invalid_func }}")
assertExitCode(t, res, 1)
assertContains(t, res.Stderr, "Values[0]")
}
func TestValidation_ScriptURLWithoutHost(t *testing.T) {
t.Parallel()
res := run("-U", "http://example.com", "-r", "1", "-lua", "@http://")
assertExitCode(t, res, 1)
assertContains(t, res.Stderr, "host")
}
func TestEnvInvalidURL(t *testing.T) {
t.Parallel()
res := runWithEnv(map[string]string{
"SARIN_URL": "://bad-url",
"SARIN_REQUESTS": "1",
}, "-q")
assertExitCode(t, res, 1)
assertContains(t, res.Stderr, "SARIN_URL")
}
func TestEnvInvalidProxy(t *testing.T) {
t.Parallel()
res := runWithEnv(map[string]string{
"SARIN_URL": "http://example.com",
"SARIN_REQUESTS": "1",
"SARIN_PROXY": "://bad-proxy",
}, "-q")
assertExitCode(t, res, 1)
assertContains(t, res.Stderr, "SARIN_PROXY")
}
func TestConfigFileInvalidURLParse(t *testing.T) {
t.Parallel()
configPath := writeTemp(t, "invalid_url.yaml", `
url: "://bad-url"
requests: 1
`)
res := run("-f", configPath)
assertExitCode(t, res, 1)
assertContains(t, res.Stderr, "Field 'url'")
}
func TestConfigFileInvalidProxyParse(t *testing.T) {
t.Parallel()
configPath := writeTemp(t, "invalid_proxy.yaml", `
url: "http://example.com"
requests: 1
proxy: "://bad-proxy"
`)
res := run("-f", configPath)
assertExitCode(t, res, 1)
assertContains(t, res.Stderr, "proxy[0]")
}
func TestConfigFileInvalidHeadersType(t *testing.T) {
t.Parallel()
configPath := writeTemp(t, "invalid_headers_type.yaml", `
url: "http://example.com"
requests: 1
headers:
- X-Test: value
- 42
`)
res := run("-f", configPath)
assertExitCode(t, res, 1)
assertContains(t, res.Stderr, "Failed to parse config file")
}