Initial test environment implementation

This commit is contained in:
Joe Kralicky 2024-08-22 17:15:20 -04:00
parent dc427a4078
commit f1d2799a9f
No known key found for this signature in database
GPG key ID: 75C4875F34A9FB79
24 changed files with 2917 additions and 20 deletions

View file

@ -0,0 +1,64 @@
package snippets
import (
"bytes"
"context"
"strings"
"text/template"
"github.com/pomerium/pomerium/config"
"github.com/pomerium/pomerium/internal/testenv"
"github.com/pomerium/pomerium/pkg/policy/parser"
)
var SimplePolicyTemplate = PolicyTemplate{
From: "https://from-{{.Idx}}.localhost",
To: "https://to-{{.Idx}}.localhost",
PPL: `{"allow":{"and":["email":{"is":"user-{{.Idx}}@example.com"}]}}`,
}
type PolicyTemplate struct {
From string
To string
PPL string
// Add more fields as needed (be sure to update newPolicyFromTemplate)
}
func TemplateRoutes(n int, tmpl PolicyTemplate) testenv.Modifier {
return testenv.ModifierFunc(func(ctx context.Context, cfg *config.Config) {
for i := range n {
cfg.Options.Policies = append(cfg.Options.Policies, newPolicyFromTemplate(i, tmpl))
}
})
}
func newPolicyFromTemplate(i int, pt PolicyTemplate) config.Policy {
eval := func(in string) string {
t := template.New("policy")
tmpl, err := t.Parse(in)
if err != nil {
panic(err)
}
var out bytes.Buffer
if err := tmpl.Execute(&out, struct{ Idx int }{i}); err != nil {
panic(err)
}
return out.String()
}
pplPolicy, err := parser.ParseYAML(strings.NewReader(eval(pt.PPL)))
if err != nil {
panic(err)
}
to, err := config.ParseWeightedUrls(eval(pt.To))
if err != nil {
panic(err)
}
return config.Policy{
From: eval(pt.From),
To: to,
Policy: &config.PPLPolicy{Policy: pplPolicy},
}
}