package headertemplate_test import ( "strings" "testing" "github.com/stretchr/testify/assert" "github.com/pomerium/pomerium/internal/headertemplate" ) func TestRender(t *testing.T) { t.Parallel() for _, tc := range []struct { in string expect string }{ {"x $$ y $$ z", "x $ y $ z"}, {`${x.y.z}`, `<x,y,z>`}, {`${ x . y . z }`, `<x,y,z>`}, {`${x["y"].z}`, `<x,y,z>`}, {`${x["`, `${x["`}, {`${`, `${`}, {`${}`, `${}`}, {`${x["\\"]}`, `<x,\>`}, {`${x["\""]}`, `<x,">`}, {`${pomerium.access_token}`, `<pomerium,access_token>`}, {`$pomerium.access_token`, `<pomerium,access_token>`}, {`${pomerium.client_cert_fingerprint}`, `<pomerium,client_cert_fingerprint>`}, {`$pomerium.client_cert_fingerprint`, `<pomerium,client_cert_fingerprint>`}, {`${pomerium.id_token}`, `<pomerium,id_token>`}, {`$pomerium.id_token`, `<pomerium,id_token>`}, {`${pomerium.jwt}`, `<pomerium,jwt>`}, {`$pomerium.jwt`, `<pomerium,jwt>`}, {`${pomerium.request.headers["X-Access-Token"]}`, `<pomerium,request,headers,X-Access-Token>`}, {`$pomerium.request.headers.X-Access-Token`, `<pomerium,request,headers,X-Access-Token>`}, } { actual := headertemplate.Render(tc.in, func(ref []string) string { return "<" + strings.Join(ref, ",") + ">" }) assert.Equal(t, tc.expect, actual) } assert.Equal(t, "x $ y $ z", headertemplate.Render("x $$ y $$ z", func(_ []string) string { return "" })) assert.Equal(t, "before JWT after", headertemplate.Render("before $pomerium.jwt after", func(ref []string) string { assert.Equal(t, []string{"pomerium", "jwt"}, ref) return "JWT" })) assert.Equal(t, "before JWT after", headertemplate.Render("before ${ pomerium . jwt } after", func(ref []string) string { assert.Equal(t, []string{"pomerium", "jwt"}, ref) return "JWT" })) assert.Equal(t, "before JWT after", headertemplate.Render("before ${ pomerium . jwt } after", func(ref []string) string { assert.Equal(t, []string{"pomerium", "jwt"}, ref) return "JWT" })) }