diff --git a/go.mod b/go.mod index b2fcba183..5ca3787c5 100644 --- a/go.mod +++ b/go.mod @@ -47,7 +47,6 @@ require ( github.com/oapi-codegen/runtime v1.1.1 github.com/open-policy-agent/opa v0.69.0 github.com/openzipkin/zipkin-go v0.4.3 - github.com/ory/dockertest/v3 v3.11.0 github.com/peterbourgon/ff/v3 v3.4.0 github.com/pomerium/csrf v1.7.0 github.com/pomerium/datasource v0.18.2-0.20221108160055-c6134b5ed524 @@ -63,6 +62,7 @@ require ( github.com/spf13/cobra v1.8.1 github.com/spf13/viper v1.19.0 github.com/stretchr/testify v1.9.0 + github.com/testcontainers/testcontainers-go v0.34.0 github.com/tniswong/go.rfcx v0.0.0-20181019234604-07783c52761f github.com/volatiletech/null/v9 v9.0.0 github.com/yuin/gopher-lua v1.1.1 @@ -105,7 +105,6 @@ require ( github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 // indirect github.com/DataDog/datadog-go v3.5.0+incompatible // indirect github.com/Microsoft/go-winio v0.6.2 // indirect - github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 // indirect github.com/OneOfOne/xxhash v1.2.8 // indirect github.com/agnivade/levenshtein v1.2.0 // indirect github.com/andybalholm/brotli v1.0.5 // indirect @@ -129,10 +128,11 @@ require ( github.com/caddyserver/zerossl v0.1.3 // indirect github.com/census-instrumentation/opencensus-proto v0.4.1 // indirect github.com/cncf/xds/go v0.0.0-20240723142845-024c85f92f20 // indirect - github.com/containerd/continuity v0.4.3 // indirect + github.com/containerd/log v0.1.0 // indirect + github.com/containerd/platforms v0.2.1 // indirect + github.com/cpuguy83/dockercfg v0.3.2 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/distribution/reference v0.6.0 // indirect - github.com/docker/cli v26.1.4+incompatible // indirect github.com/docker/go-connections v0.5.0 // indirect github.com/docker/go-units v0.5.0 // indirect github.com/dustin/go-humanize v1.0.1 // indirect @@ -154,7 +154,6 @@ require ( github.com/google/flatbuffers v23.5.26+incompatible // indirect github.com/google/go-tpm v0.9.0 // indirect github.com/google/s2a-go v0.1.8 // indirect - github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect github.com/googleapis/enterprise-certificate-proxy v0.3.4 // indirect github.com/googleapis/gax-go/v2 v2.13.0 // indirect github.com/gorilla/securecookie v1.1.1 // indirect @@ -175,13 +174,16 @@ require ( github.com/miekg/dns v1.1.59 // indirect github.com/minio/md5-simd v1.1.2 // indirect github.com/moby/docker-image-spec v1.3.1 // indirect + github.com/moby/patternmatcher v0.6.0 // indirect + github.com/moby/sys/sequential v0.5.0 // indirect + github.com/moby/sys/user v0.1.0 // indirect + github.com/moby/sys/userns v0.1.0 // indirect github.com/moby/term v0.5.0 // indirect github.com/morikuni/aec v1.0.0 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/onsi/ginkgo v1.16.5 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect github.com/opencontainers/image-spec v1.1.0 // indirect - github.com/opencontainers/runc v1.1.14 // indirect github.com/pelletier/go-toml/v2 v2.2.2 // indirect github.com/philhofer/fwd v1.1.2 // indirect github.com/pkg/errors v0.9.1 // indirect @@ -210,7 +212,6 @@ require ( github.com/x448/float16 v0.8.4 // indirect github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect - github.com/xeipuuv/gojsonschema v1.2.0 // indirect github.com/yashtewari/glob-intersection v0.2.0 // indirect github.com/yusufpapurcu/wmi v1.2.4 // indirect github.com/zeebo/assert v1.3.1 // indirect diff --git a/go.sum b/go.sum index fb568d27c..93c6e79e6 100644 --- a/go.sum +++ b/go.sum @@ -55,8 +55,8 @@ contrib.go.opencensus.io/exporter/zipkin v0.1.2/go.mod h1:mP5xM3rrgOjpn79MM8fZbj dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk= dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= -filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= +github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 h1:bvDV9vkmnHYOMsOr4WLk+Vo07yKIzd94sVoIqshQ4bU= +github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24/go.mod h1:8o94RPi1/7XTJvwPpRSzSUedZrtlirdB3r9Z20bi2f8= github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25UVaW/CKtUDjefjrs0SPonmDGUVOYP0= github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= @@ -69,8 +69,6 @@ github.com/DataDog/opencensus-go-exporter-datadog v0.0.0-20200406135749-5c268882 github.com/DataDog/opencensus-go-exporter-datadog v0.0.0-20200406135749-5c268882acf0/go.mod h1:/VV3EFO/hTNQZHAqaj+CPGy2+ioFrP4EX3iRwozubhQ= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= -github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw= -github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= github.com/OneOfOne/xxhash v1.2.8 h1:31czK/TI9sNkxIKfaUfGlU47BAxQ0ztGgd9vPyqimf8= github.com/OneOfOne/xxhash v1.2.8/go.mod h1:eZbhyaAYD41SGSSsnmcpxVoRiQ/MPUTjUdIIOT9Um7Q= github.com/RaveNoX/go-jsoncommentstrip v1.0.0/go.mod h1:78ihd09MekBnJnxpICcwzCMzGrKSKYe4AqU6PDYYpjk= @@ -164,13 +162,15 @@ github.com/cloudflare/circl v1.4.0/go.mod h1:PDRU+oXvdD7KCtgKxW95M5Z8BpSCJXQORiZ github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/xds/go v0.0.0-20240723142845-024c85f92f20 h1:N+3sFI5GUjRKBi+i0TxYVST9h4Ie192jJWpHvthBBgg= github.com/cncf/xds/go v0.0.0-20240723142845-024c85f92f20/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8= -github.com/containerd/continuity v0.4.3 h1:6HVkalIp+2u1ZLH1J/pYX2oBVXlJZvh1X1A7bEZ9Su8= -github.com/containerd/continuity v0.4.3/go.mod h1:F6PTNCKepoxEaXLQp3wDAjygEnImnZ/7o4JzpodfroQ= github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I= github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo= +github.com/containerd/platforms v0.2.1 h1:zvwtM3rz2YHPQsF2CHYM8+KtB5dvhISiXh5ZpSBQv6A= +github.com/containerd/platforms v0.2.1/go.mod h1:XHCb+2/hzowdiut9rkudds9bE5yJ7npe7dG/wG+uFPw= github.com/coreos/go-oidc/v3 v3.11.0 h1:Ia3MxdwpSw702YW0xgfmP1GVCMA9aEFWu12XUZ3/OtI= github.com/coreos/go-oidc/v3 v3.11.0/go.mod h1:gE3LgjOgFoHi9a4ce4/tJczr0Ai2/BoDhf0r5lltWI0= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= +github.com/cpuguy83/dockercfg v0.3.2 h1:DlJTyZGBDlXqUZ2Dk2Q3xHs/FtnooJJVaad2S9GKorA= +github.com/cpuguy83/dockercfg v0.3.2/go.mod h1:sugsbF4//dDlL/i+S+rtpIWp+5h0BHJHfjj5/jFyUJc= github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY= github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= @@ -186,8 +186,6 @@ github.com/dgryski/trifles v0.0.0-20230903005119-f50d829f2e54 h1:SG7nF6SRlWhcT7c github.com/dgryski/trifles v0.0.0-20230903005119-f50d829f2e54/go.mod h1:if7Fbed8SFyPtHLHbg49SI7NAdJiC5WIA09pe59rfAA= github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk= github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= -github.com/docker/cli v26.1.4+incompatible h1:I8PHdc0MtxEADqYJZvhBrW9bo8gawKwwenxRM7/rLu8= -github.com/docker/cli v26.1.4+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= github.com/docker/docker v27.3.1+incompatible h1:KttF0XoteNTicmUtBO0L2tP+J7FGRFTjaEF4k6WdhfI= github.com/docker/docker v27.3.1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c= @@ -254,8 +252,6 @@ github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE= github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78= -github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y= -github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= @@ -351,8 +347,6 @@ github.com/google/pprof v0.0.0-20240424215950-a892ee059fd6/go.mod h1:kf6iHlnVGwg github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/s2a-go v0.1.8 h1:zZDs9gcbt9ZPLV0ndSyQk6Kacx2g/X+SKYovpnz3SMM= github.com/google/s2a-go v0.1.8/go.mod h1:6iNWHTpQ+nfNRN5E00MSdfDwVesa8hhS32PhPO8deJA= -github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= -github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -437,8 +431,6 @@ github.com/kralicky/go-adaptive-radix-tree v0.0.0-20240624235931-330eb762e74c h1 github.com/kralicky/go-adaptive-radix-tree v0.0.0-20240624235931-330eb762e74c/go.mod h1:oJwexVSshEat0E3evyKOH6QzN8GFWrhLvEoh8GiJzss= github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= -github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= -github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/libdns/libdns v0.2.2 h1:O6ws7bAfRPaBsgAYt8MDe2HcNBGC29hkZ9MX2eUSX3s= github.com/libdns/libdns v0.2.2/go.mod h1:4Bj9+5CQiNMVGf87wjX4CY3HQJypUHRuLvlsfsZqLWQ= github.com/lufia/plan9stats v0.0.0-20240513124658-fba389f38bae h1:dIZY4ULFcto4tAFlj1FYZl8ztUZ13bdq+PLY+NOfbyI= @@ -469,6 +461,14 @@ github.com/mitchellh/mapstructure v1.5.1-0.20231216201459-8508981c8b6c h1:cqn374 github.com/mitchellh/mapstructure v1.5.1-0.20231216201459-8508981c8b6c/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0= github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo= +github.com/moby/patternmatcher v0.6.0 h1:GmP9lR19aU5GqSSFko+5pRqHi+Ohk1O69aFiKkVGiPk= +github.com/moby/patternmatcher v0.6.0/go.mod h1:hDPoyOpDY7OrrMDLaYoY3hf52gNCR/YOUYxkhApJIxc= +github.com/moby/sys/sequential v0.5.0 h1:OPvI35Lzn9K04PBbCLW0g4LcFAJgHsvXsRyewg5lXtc= +github.com/moby/sys/sequential v0.5.0/go.mod h1:tH2cOOs5V9MlPiXcQzRC+eEyab644PWKGRYaaV5ZZlo= +github.com/moby/sys/user v0.1.0 h1:WmZ93f5Ux6het5iituh9x2zAG7NFY9Aqi49jjE1PaQg= +github.com/moby/sys/user v0.1.0/go.mod h1:fKJhFOnsCN6xZ5gSfbM6zaHGgDJMrqt9/reuj4T7MmU= +github.com/moby/sys/userns v0.1.0 h1:tVLXkFOxVu9A64/yh59slHVv9ahO9UIev4JZusOLG/g= +github.com/moby/sys/userns v0.1.0/go.mod h1:IHUYgu/kao6N8YZlp9Cf444ySSvCmDlmzUcYfDHOl28= github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0= github.com/moby/term v0.5.0/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -507,13 +507,9 @@ github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8 github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.1.0 h1:8SG7/vwALn54lVB/0yZ/MMwhFrPYtpEHQb2IpWsCzug= github.com/opencontainers/image-spec v1.1.0/go.mod h1:W4s4sFTMaBeK1BQLXbG4AdM2szdn85PY75RI83NrTrM= -github.com/opencontainers/runc v1.1.14 h1:rgSuzbmgz5DUJjeSnw337TxDbRuqjs6iqQck/2weR6w= -github.com/opencontainers/runc v1.1.14/go.mod h1:E4C2z+7BxR7GHXp0hAY53mek+x49X1LjPNeMTfRGvOA= github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/openzipkin/zipkin-go v0.4.3 h1:9EGwpqkgnwdEIJ+Od7QVSEIH+ocmm5nPat0G7sjsSdg= github.com/openzipkin/zipkin-go v0.4.3/go.mod h1:M9wCJZFWCo2RiY+o1eBCEMe0Dp2S5LDHcMZmk3RmK7c= -github.com/ory/dockertest/v3 v3.11.0 h1:OiHcxKAvSDUwsEVh2BjxQQc/5EHz9n0va9awCtNGuyA= -github.com/ory/dockertest/v3 v3.11.0/go.mod h1:VIPxS1gwT9NpPOrfD3rACs8Y9Z7yhzO4SB194iUDnUI= github.com/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6Wq+LM= github.com/pelletier/go-toml/v2 v2.2.2/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h4qDAS4n929Rs= github.com/peterbourgon/ff/v3 v3.4.0 h1:QBvM/rizZM1cB0p0lGMdmR7HxZeI/ZrBWB4DqLkMUBc= @@ -651,6 +647,8 @@ github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8 github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= github.com/tchap/go-patricia/v2 v2.3.1 h1:6rQp39lgIYZ+MHmdEq4xzuk1t7OdC35z/xm0BGhTkes= github.com/tchap/go-patricia/v2 v2.3.1/go.mod h1:VZRHKAb53DLaG+nA9EaYYiaEx6YztwDlLElMsnSHD4k= +github.com/testcontainers/testcontainers-go v0.34.0 h1:5fbgF0vIN5u+nD3IWabQwRybuB4GY8G2HHgCkbMzMHo= +github.com/testcontainers/testcontainers-go v0.34.0/go.mod h1:6P/kMkQe8yqPHfPWNulFGdFHTD8HB2vLq/231xY2iPQ= github.com/tinylib/msgp v1.1.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= github.com/tinylib/msgp v1.1.8 h1:FCXC1xanKO4I8plpHGH2P7koL/RzZs12l/+r7vakfm0= github.com/tinylib/msgp v1.1.8/go.mod h1:qkpG+2ldGg4xRFmx+jfTvZPxfGFhi64BcnL9vkCm/Tw= @@ -669,13 +667,10 @@ github.com/volatiletech/null/v9 v9.0.0 h1:JCdlHEiSRVxOi7/MABiEfdsqmuj9oTV20Ao7Vv github.com/volatiletech/null/v9 v9.0.0/go.mod h1:zRFghPVahaiIMRXiUJrc6gsoG83Cm3ZoAfSTw7VHGQc= github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= -github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb h1:zGWFAtiMcyryUHoUjUJX0/lt1H2+i2Ka2n+D3DImSNo= github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0= github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= -github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74= -github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= github.com/yashtewari/glob-intersection v0.2.0 h1:8iuHdN88yYuCzCdjt0gDe+6bAhUwBeEWqThExu54RFg= github.com/yashtewari/glob-intersection v0.2.0/go.mod h1:LK7pIC3piUjovexikBbJ26Yml7g8xa5bsjfx2v1fwok= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= @@ -922,6 +917,8 @@ golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= +golang.org/x/term v0.24.0 h1:Mh5cbb+Zk2hqqXNO7S1iTjEphVL+jb8ZWaqh/g+JWkM= +golang.org/x/term v0.24.0/go.mod h1:lOBK/LVxemqiMij05LGJ0tzNr8xlmwBRJ81PX6wVLH8= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= diff --git a/internal/autocert/storage_test.go b/internal/autocert/storage_test.go index 18206ef10..ca70d1222 100644 --- a/internal/autocert/storage_test.go +++ b/internal/autocert/storage_test.go @@ -14,23 +14,6 @@ import ( "github.com/pomerium/pomerium/internal/testutil" ) -func TestGCSStorage(t *testing.T) { - t.Skip("fakeserver doesn't support multipart uploads") - - ctx, clearTimeout := context.WithTimeout(context.Background(), time.Second*30) - t.Cleanup(clearTimeout) - - require.NoError(t, testutil.WithTestGCS(t, "bucket", func() error { - s, err := GetCertMagicStorage(ctx, "gs://bucket/some/prefix") - if !assert.NoError(t, err) { - return nil - } - - runStorageTests(t, s) - return nil - })) -} - func TestS3Storage(t *testing.T) { if os.Getenv("GITHUB_ACTION") != "" && runtime.GOOS == "darwin" { t.Skip("Github action can not run docker on MacOS") @@ -39,15 +22,11 @@ func TestS3Storage(t *testing.T) { ctx, clearTimeout := context.WithTimeout(context.Background(), time.Second*30) t.Cleanup(clearTimeout) - require.NoError(t, testutil.WithTestMinIO(t, "bucket", func(endpoint string) error { + testutil.WithTestMinIO(t, "bucket", func(endpoint string) { s, err := GetCertMagicStorage(ctx, "s3://"+endpoint+"/bucket/some/prefix") - if !assert.NoError(t, err) { - return nil - } - + require.NoError(t, err) runStorageTests(t, s) - return nil - })) + }) } func runStorageTests(t *testing.T, s certmagic.Storage) { diff --git a/internal/databroker/server_test.go b/internal/databroker/server_test.go index ac7c775b0..aa1c7c5c8 100644 --- a/internal/databroker/server_test.go +++ b/internal/databroker/server_test.go @@ -6,6 +6,8 @@ import ( "fmt" "io" "net" + "os" + "runtime" "sort" "testing" "time" @@ -341,7 +343,13 @@ func TestServerInvalidStorage(t *testing.T) { } func TestServerPostgres(t *testing.T) { - testutil.WithTestPostgres(func(dsn string) error { + t.Parallel() + + if os.Getenv("GITHUB_ACTION") != "" && runtime.GOOS == "darwin" { + t.Skip("Github action can not run docker on MacOS") + } + + testutil.WithTestPostgres(t, func(dsn string) { srv := newServer(&serverConfig{ storageType: "postgres", storageConnectionString: dsn, @@ -400,6 +408,5 @@ func TestServerPostgres(t *testing.T) { return nil }) assert.NoError(t, eg.Wait()) - return nil }) } diff --git a/internal/testutil/context.go b/internal/testutil/context.go new file mode 100644 index 000000000..14ba19fbd --- /dev/null +++ b/internal/testutil/context.go @@ -0,0 +1,24 @@ +package testutil + +import ( + "context" + "testing" + "time" +) + +// GetContext gets a context for a testing.T. +func GetContext(t *testing.T, maxWait time.Duration) context.Context { + t.Helper() + + ctx := context.Background() + ctx, clearTimeout := context.WithTimeout(ctx, maxWait) + t.Cleanup(clearTimeout) + + if deadline, ok := t.Deadline(); ok { + var clearDeadline context.CancelFunc + ctx, clearDeadline = context.WithDeadline(ctx, deadline) + t.Cleanup(clearDeadline) + } + + return ctx +} diff --git a/internal/testutil/gcs.go b/internal/testutil/gcs.go deleted file mode 100644 index 53ebfc896..000000000 --- a/internal/testutil/gcs.go +++ /dev/null @@ -1,63 +0,0 @@ -package testutil - -import ( - "context" - "fmt" - "testing" - - "cloud.google.com/go/storage" - "github.com/ory/dockertest/v3" -) - -// WithTestGCS starts a GCS storage emulator. -func WithTestGCS(t *testing.T, bucket string, handler func() error) error { - t.Helper() - - ctx, clearTimeout := context.WithTimeout(context.Background(), maxWait) - defer clearTimeout() - - // uses a sensible default on windows (tcp/http) and linux/osx (socket) - pool, err := dockertest.NewPool("") - if err != nil { - return err - } - - resource, err := pool.RunWithOptions(&dockertest.RunOptions{ - Repository: "fsouza/fake-gcs-server", - Tag: "1.42.2", - Cmd: []string{"-scheme", "http"}, - }) - if err != nil { - return err - } - _ = resource.Expire(uint(maxWait.Seconds())) - go tailLogs(ctx, t, pool, resource) - - t.Setenv("STORAGE_EMULATOR_HOST", fmt.Sprintf("localhost:%s", resource.GetPort("4443/tcp"))) - if err := pool.Retry(func() error { - client, err := storage.NewClient(ctx) - if err != nil { - t.Logf("gcs: %s", err) - return err - } - - err = client.Bucket(bucket).Create(ctx, "", nil) - if err != nil { - t.Logf("gcs: %s", err) - return err - } - - return nil - }); err != nil { - _ = pool.Purge(resource) - return err - } - - e := handler() - - if err := pool.Purge(resource); err != nil { - return err - } - - return e -} diff --git a/internal/testutil/minio.go b/internal/testutil/minio.go index 5a337dd9f..69ee9828c 100644 --- a/internal/testutil/minio.go +++ b/internal/testutil/minio.go @@ -1,103 +1,64 @@ package testutil import ( - "bufio" - "context" "fmt" - "io" "testing" "github.com/minio/minio-go/v7" "github.com/minio/minio-go/v7/pkg/credentials" - "github.com/ory/dockertest/v3" - "github.com/ory/dockertest/v3/docker" + "github.com/testcontainers/testcontainers-go" + "github.com/testcontainers/testcontainers-go/wait" ) // WithTestMinIO starts a test MinIO server -func WithTestMinIO(t *testing.T, bucket string, handler func(endpoint string) error) error { +func WithTestMinIO(t *testing.T, bucket string, handler func(endpoint string)) { t.Helper() - ctx, clearTimeout := context.WithTimeout(context.Background(), maxWait) - defer clearTimeout() + ctx := GetContext(t, maxWait) - // uses a sensible default on windows (tcp/http) and linux/osx (socket) - pool, err := dockertest.NewPool("") - if err != nil { - return err - } - - resource, err := pool.RunWithOptions(&dockertest.RunOptions{ - Repository: "quay.io/minio/minio", - Tag: "RELEASE.2022-12-02T19-19-22Z", - Env: []string{"MINIO_ROOT_USER=pomerium", "MINIO_ROOT_PASSWORD=pomerium"}, - Cmd: []string{"server", "/data"}, + container, err := testcontainers.GenericContainer(ctx, testcontainers.GenericContainerRequest{ + ContainerRequest: testcontainers.ContainerRequest{ + Name: "pomerium-minio", + Image: "quay.io/minio/minio:RELEASE.2022-12-02T19-19-22Z", + ExposedPorts: []string{"9000/tcp"}, + WaitingFor: wait.ForAll( + wait.ForListeningPort("9000"), + ), + Env: map[string]string{ + "MINIO_ROOT_USER": "pomeriumtest", + "MINIO_ROOT_PASSWORD": "pomeriumtest", + }, + Cmd: []string{"server", "/data"}, + }, + Started: true, + Logger: testcontainers.TestLogger(t), }) if err != nil { - return err - } - _ = resource.Expire(uint(maxWait.Seconds())) - go tailLogs(ctx, t, pool, resource) - - endpoint := fmt.Sprintf("localhost:%s", resource.GetPort("9000/tcp")) - if err := pool.Retry(func() error { - client, err := minio.New(endpoint, &minio.Options{ - Creds: credentials.NewStaticV4("pomerium", "pomerium", ""), - }) - if err != nil { - t.Logf("minio: %s", err) - return err - } - - err = client.MakeBucket(ctx, bucket, minio.MakeBucketOptions{}) - if err != nil { - t.Logf("minio: %s", err) - return err - } - - return nil - }); err != nil { - _ = pool.Purge(resource) - return err + t.Fatalf("testutil/minio: failed to create container: %v", err) } - t.Setenv("MINIO_ROOT_USER", "pomerium") - t.Setenv("MINIO_ROOT_PASSWORD", "pomerium") - t.Setenv("AWS_ACCESS_KEY_ID", "pomerium") - t.Setenv("AWS_SECRET_ACCESS_KEY", "pomerium") - e := handler(endpoint) - - if err := pool.Purge(resource); err != nil { - return err + port, err := container.MappedPort(ctx, "9000") + if err != nil { + t.Fatalf("testutil/minio: failed to get mapped port: %v", err) } - return e -} - -func tailLogs(ctx context.Context, t *testing.T, pool *dockertest.Pool, resource *dockertest.Resource) { - t.Helper() - - pr, pw := io.Pipe() - go func() { - s := bufio.NewScanner(pr) - for s.Scan() { - t.Logf("%s: %s", resource.Container.Config.Image, s.Text()) - } - }() - defer pw.Close() - - opts := docker.LogsOptions{ - Context: ctx, - - Stderr: true, - Stdout: true, - Follow: true, - Timestamps: true, - RawTerminal: true, - - Container: resource.Container.ID, - - OutputStream: pw, - } - - _ = pool.Client.Logs(opts) + endpoint := fmt.Sprintf("localhost:%s", port.Port()) + client, err := minio.New(endpoint, &minio.Options{ + Creds: credentials.NewStaticV4("pomeriumtest", "pomeriumtest", ""), + }) + if err != nil { + t.Fatalf("testutil/minio: failed to create minio client: %v", err) + } + + err = client.MakeBucket(ctx, bucket, minio.MakeBucketOptions{}) + if err != nil { + t.Fatalf("testutil/minio: failed to create minio bucket: %v", err) + } + + t.Setenv("MINIO_ROOT_USER", "pomeriumtest") + t.Setenv("MINIO_ROOT_PASSWORD", "pomeriumtest") + t.Setenv("AWS_ACCESS_KEY_ID", "pomeriumtest") + t.Setenv("AWS_SECRET_ACCESS_KEY", "pomeriumtest") + + handler(endpoint) } diff --git a/internal/testutil/postgres.go b/internal/testutil/postgres.go index 9aed78de9..fedc417e3 100644 --- a/internal/testutil/postgres.go +++ b/internal/testutil/postgres.go @@ -1,55 +1,72 @@ +// Package testutil contains helper functions for tests. package testutil import ( - "context" + "encoding/hex" "fmt" + "testing" + "github.com/google/uuid" "github.com/jackc/pgx/v5" - "github.com/ory/dockertest/v3" - - "github.com/pomerium/pomerium/internal/log" + "github.com/testcontainers/testcontainers-go" + "github.com/testcontainers/testcontainers-go/wait" ) -// WithTestPostgres starts a test DB and runs the given handler with the connection to it. -func WithTestPostgres(handler func(dsn string) error) error { - ctx, clearTimeout := context.WithTimeout(context.Background(), maxWait) - defer clearTimeout() +// WithTestPostgres starts a postgres database. +func WithTestPostgres(t *testing.T, handler func(dsn string)) { + t.Helper() - // uses a sensible default on windows (tcp/http) and linux/osx (socket) - pool, err := dockertest.NewPool("") - if err != nil { - return err - } + ctx := GetContext(t, maxWait) - resource, err := pool.RunWithOptions(&dockertest.RunOptions{ - Repository: "postgres", - Tag: "14", - Env: []string{"POSTGRES_DB=pomeriumtest", "POSTGRES_HOST_AUTH_METHOD=trust"}, + container, err := testcontainers.GenericContainer(ctx, testcontainers.GenericContainerRequest{ + ContainerRequest: testcontainers.ContainerRequest{ + Name: "pomerium-postgres", + Image: "postgres:16", + ExposedPorts: []string{"5432/tcp"}, + WaitingFor: wait.ForAll( + wait.ForLog("database system is ready to accept connections"), + wait.ForListeningPort("5432"), + ), + Env: map[string]string{ + "POSTGRES_DB": "pomeriumtest", + "POSTGRES_PASSWORD": "pomeriumtest", + "POSTGRES_USER": "pomeriumtest", + }, + Cmd: []string{"-c", "max_connections=1000"}, + }, + Started: true, + Logger: testcontainers.TestLogger(t), + Reuse: true, }) if err != nil { - return err - } - _ = resource.Expire(uint(maxWait.Seconds())) - - dsn := fmt.Sprintf("postgresql://postgres@localhost:%s/pomeriumtest?sslmode=disable", resource.GetPort("5432/tcp")) - if err := pool.Retry(func() error { - conn, err := pgx.Connect(ctx, dsn) - if err != nil { - log.Ctx(ctx).Error().Err(err).Send() - return err - } - _ = conn.Close(ctx) - return nil - }); err != nil { - _ = pool.Purge(resource) - return err + t.Fatalf("testutil/postgres: failed to create container: %v", err) } - e := handler(dsn) - - if err := pool.Purge(resource); err != nil { - return err + port, err := container.MappedPort(ctx, "5432") + if err != nil { + t.Fatalf("testutil/postgres: failed to get mapped port: %v", err) } - return e + // create the next database + id := uuid.New() + dbName := fmt.Sprintf("pomeriumtest%s", hex.EncodeToString(id[:])) + t.Logf("postgres: creating %s", dbName) + + // run the test against the new database + db, err := pgx.Connect(ctx, fmt.Sprintf("postgres://pomeriumtest:pomeriumtest@localhost:%s/pomeriumtest?sslmode=disable", port.Port())) + if err != nil { + t.Fatalf("testutil/postgres: failed to connect to postgres: %v", err) + } + + _, err = db.Exec(ctx, `CREATE DATABASE `+dbName) + if err != nil { + t.Fatalf("testutil/postgres: failed to create database: %v", err) + } + + err = db.Close(ctx) + if err != nil { + t.Fatalf("testutil/postgres: failed to close database: %v", err) + } + + handler(fmt.Sprintf("postgres://pomeriumtest:pomeriumtest@localhost:%s/%s?sslmode=disable", port.Port(), dbName)) } diff --git a/pkg/storage/postgres/backend_test.go b/pkg/storage/postgres/backend_test.go index b41b985a4..1677bd33c 100644 --- a/pkg/storage/postgres/backend_test.go +++ b/pkg/storage/postgres/backend_test.go @@ -24,16 +24,16 @@ import ( const maxWait = time.Minute * 10 func TestBackend(t *testing.T) { + t.Parallel() + if os.Getenv("GITHUB_ACTION") != "" && runtime.GOOS == "darwin" { t.Skip("Github action can not run docker on MacOS") } - t.Parallel() - ctx, clearTimeout := context.WithTimeout(context.Background(), maxWait) defer clearTimeout() - require.NoError(t, testutil.WithTestPostgres(func(dsn string) error { + testutil.WithTestPostgres(t, func(dsn string) { backend := New(ctx, dsn) defer backend.Close() @@ -197,9 +197,7 @@ func TestBackend(t *testing.T) { assert.Equal(t, int32(0), backend.pool.Stat().AcquiredConns(), "acquired connections should be released") - - return nil - })) + }) } func TestLookup(t *testing.T) { diff --git a/pkg/storage/postgres/registry_test.go b/pkg/storage/postgres/registry_test.go index bc57bc839..e8f9e9fe3 100644 --- a/pkg/storage/postgres/registry_test.go +++ b/pkg/storage/postgres/registry_test.go @@ -32,16 +32,16 @@ func (m mockRegistryWatchServer) Send(res *registry.ServiceList) error { } func TestRegistry(t *testing.T) { + t.Parallel() + if os.Getenv("GITHUB_ACTION") != "" && runtime.GOOS == "darwin" { t.Skip("Github action can not run docker on MacOS") } - t.Parallel() - ctx, clearTimeout := context.WithTimeout(context.Background(), maxWait) defer clearTimeout() - require.NoError(t, testutil.WithTestPostgres(func(dsn string) error { + testutil.WithTestPostgres(t, func(dsn string) { backend := New(ctx, dsn) defer backend.Close() @@ -109,9 +109,7 @@ func TestRegistry(t *testing.T) { err = nil } assert.NoError(t, err) - - return nil - })) + }) } func TestUnmarshalJSONUnknownFields(t *testing.T) {