package evaluator import ( "bytes" "context" "strings" "testing" "time" "github.com/open-policy-agent/opa/rego" "github.com/rs/zerolog" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) func TestPrintHook(t *testing.T) { t.Parallel() ctx, clearTimeout := context.WithTimeout(context.Background(), time.Second*10) t.Cleanup(clearTimeout) r := rego.New( rego.Module("policy.rego", ` package pomerium.policy import rego.v1 allow if { print("HELLO WORLD") true } `), rego.EnablePrintStatements(true), rego.Query("data.pomerium.policy.allow"), ) q, err := r.PrepareForEval(ctx) require.NoError(t, err) var buf bytes.Buffer logger := zerolog.New(&buf).Level(zerolog.DebugLevel) rs, err := q.Eval(ctx, rego.EvalPrintHook(regoPrintHook{ logger: logger, })) require.NoError(t, err) assert.True(t, rs.Allowed()) assert.Equal(t, `{"level":"debug","location":{"file":"policy.rego","row":7,"col":2},"message":"rego: HELLO WORLD"}`, strings.TrimSpace(buf.String())) }