finish ruleset_v2 implementation

This commit is contained in:
Kevin Pham
2023-12-05 14:02:54 -06:00
parent 9d77c63697
commit b2f6cf9f1d
4 changed files with 120 additions and 692 deletions

View File

@@ -1,6 +1,7 @@
package ruleset_v2
import (
"fmt"
"net/url"
"os"
"path/filepath"
@@ -13,38 +14,40 @@ import (
var (
validYAML = `
domains:
- example.com
- www.example.com
responsemodifications:
- name: APIContent
params: []
- name: SetContentSecurityPolicy
params:
- foobar
- name: SetIncomingCookie
params:
- authorization-bearer
- hunter2
requestmodifications:
- name: ForwardRequestHeaders
params: []
rules:
- domains:
- example.com
- www.example.com
responsemodifications:
- name: APIContent
params: []
- name: SetContentSecurityPolicy
params:
- foobar
- name: SetIncomingCookie
params:
- authorization-bearer
- hunter2
requestmodifications:
- name: ForwardRequestHeaders
params: []
`
invalidYAML = `
domains:
- example.com
- www.example.com
responsemodifications:
- name: APIContent
- name: SetContentSecurityPolicy
- name: INVALIDSetIncomingCookie
params:
- authorization-bearer
- hunter2
requestmodifications:
- name: ForwardRequestHeaders
params: []
rules:
domains:
- example.com
- www.example.com
responsemodifications:
- name: APIContent
- name: SetContentSecurityPolicy
- name: INVALIDSetIncomingCookie
params:
- authorization-bearer
- hunter2
requestmodifications:
- name: ForwardRequestHeaders
params: []
`
)
@@ -62,26 +65,6 @@ func TestLoadRulesFromRemoteFile(t *testing.T) {
return nil
})
app.Get("/valid-config.gz", func(c *fiber.Ctx) error {
c.Set("Content-Type", "application/octet-stream")
rs, err := loadRuleFromString(validYAML)
if err != nil {
t.Errorf("failed to load valid yaml from string: %s", err.Error())
}
s, err := rs.GzipYaml()
if err != nil {
t.Errorf("failed to load gzip serialize yaml: %s", err.Error())
}
err = c.SendStream(s)
if err != nil {
t.Errorf("failed to stream gzip serialized yaml: %s", err.Error())
}
return nil
})
// Start the server in a goroutine
go func() {
if err := app.Listen("127.0.0.1:9999"); err != nil {
@@ -102,25 +85,21 @@ func TestLoadRulesFromRemoteFile(t *testing.T) {
assert.True(t, exists, "expected example.com rule to be present")
assert.Equal(t, r.Domains[0], "example.com")
u, _ = url.Parse("http://www.www.example.com")
u, _ = url.Parse("http://www.www.foobar.com")
_, exists = rs.GetRule(u)
assert.False(t, exists, "expected www.www.example.com rule to NOT be present")
rs, err = NewRuleset("http://127.0.0.1:9999/valid-config.gz")
if err != nil {
t.Errorf("failed to load gzipped ruleset from http server: %s", err.Error())
}
assert.False(t, exists, "expected www.www.foobar.com rule to NOT be present")
u, _ = url.Parse("http://example.com")
r, exists = rs.GetRule(u)
assert.Equal(t, r.Domains[0], "example.com")
os.Setenv("RULESET", "http://127.0.0.1:9999/valid-config.gz")
os.Setenv("RULESET", "http://127.0.0.1:9999/valid-config.yml")
rs = NewRulesetFromEnv()
r, exists = rs.GetRule(u)
assert.True(t, exists, "expected example.com rule to be present")
assert.True(t, exists, "expected example.com rule to be present from env")
if !assert.Equal(t, r.Domains[0], "example.com") {
t.Error("expected no errors loading ruleset from gzip url using environment variable, but got one")
t.Error("expected no errors loading ruleset from url using environment variable, but got one")
}
}
@@ -132,7 +111,10 @@ func loadRuleFromString(yaml string) (Ruleset, error) {
tmpFile.WriteString(yaml)
rs := Ruleset{}
rs := Ruleset{
_rulemap: map[string]*Rule{},
Rules: []Rule{},
}
err := rs.loadRulesFromLocalFile(tmpFile.Name())
return rs, err
@@ -189,8 +171,9 @@ func TestLoadRulesFromLocalDir(t *testing.T) {
}
rs := Ruleset{}
fmt.Println(baseDir)
err = rs.loadRulesFromLocalDir(baseDir)
assert.NoError(t, err)
assert.Equal(t, rs.Count(), len(testCases)*3)
assert.Equal(t, len(testCases)*3, rs.Count())
}