diff --git a/.github/workflows/lint.yaml b/.github/workflows/lint.yaml index 1428606..2e3f1cb 100644 --- a/.github/workflows/lint.yaml +++ b/.github/workflows/lint.yaml @@ -23,7 +23,7 @@ jobs: - id: vars run: | - make gha-vars + make $GITHUB_OUTPUT - name: lint uses: golangci/golangci-lint-action@v3 diff --git a/Makefile b/Makefile index 50b21f3..8b689ff 100644 --- a/Makefile +++ b/Makefile @@ -2,7 +2,7 @@ MODULE_NAME=testcontainers-extra VENDOR_DIR = vendor -GOLANGCI_LINT_VERSION ?= v1.48.0 +GOLANGCI_LINT_VERSION ?= v1.50.0 GO ?= go GOLANGCI_LINT ?= $(shell go env GOPATH)/bin/golangci-lint-$(GOLANGCI_LINT_VERSION) @@ -29,10 +29,10 @@ test-unit: # @echo ">> integration test" # @$(GO) test ./features/... -gcflags=-l -coverprofile=features.coverprofile -coverpkg ./... -race --godog -.PHONY: gha-vars -gha-vars: - @echo "::set-output name=MODULE_NAME::$(MODULE_NAME)" - @echo "::set-output name=GOLANGCI_LINT_VERSION::$(GOLANGCI_LINT_VERSION)" +.PHONY: $(GITHUB_OUTPUT) +$(GITHUB_OUTPUT): + @echo "MODULE_NAME=$(MODULE_NAME)" >> "$@" + @echo "GOLANGCI_LINT_VERSION=$(GOLANGCI_LINT_VERSION)" >> "$@" $(GOLANGCI_LINT): @echo "$(OK_COLOR)==> Installing golangci-lint $(GOLANGCI_LINT_VERSION)$(NO_COLOR)"; \ diff --git a/codecov.yml b/codecov.yml index 70917de..5547be5 100644 --- a/codecov.yml +++ b/codecov.yml @@ -1,2 +1,3 @@ ignore: - "features/**/*" + - "mock/**" diff --git a/go.mod b/go.mod index a0e0b4f..a37fda0 100644 --- a/go.mod +++ b/go.mod @@ -12,11 +12,11 @@ require ( require ( github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect - github.com/Microsoft/go-winio v0.5.2 // indirect + github.com/Microsoft/go-winio v0.6.0 // indirect github.com/Microsoft/hcsshim v0.9.4 // indirect github.com/cenkalti/backoff/v4 v4.1.3 // indirect github.com/containerd/cgroups v1.0.4 // indirect - github.com/containerd/containerd v1.6.8 // indirect + github.com/containerd/containerd v1.6.9 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/docker/go-units v0.5.0 // indirect github.com/gogo/protobuf v1.3.2 // indirect @@ -29,17 +29,20 @@ require ( github.com/moby/term v0.0.0-20220808134915-39b0c02b01ae // indirect github.com/morikuni/aec v1.0.0 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect - github.com/opencontainers/image-spec v1.0.3-0.20211202183452-c5a74bcca799 // indirect + github.com/opencontainers/image-spec v1.1.0-rc2 // indirect github.com/opencontainers/runc v1.1.4 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/sirupsen/logrus v1.9.0 // indirect github.com/stretchr/objx v0.5.0 // indirect go.opencensus.io v0.23.0 // indirect - golang.org/x/net v0.0.0-20220909164309-bea034e7d591 // indirect - golang.org/x/sys v0.0.0-20220909162455-aba9fc2a8ff2 // indirect - google.golang.org/genproto v0.0.0-20220909194730-69f6226f97e5 // indirect - google.golang.org/grpc v1.49.0 // indirect + golang.org/x/mod v0.6.0 // indirect + golang.org/x/net v0.1.0 // indirect + golang.org/x/sys v0.1.0 // indirect + golang.org/x/tools v0.2.0 // indirect + google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71 // indirect + google.golang.org/grpc v1.50.1 // indirect google.golang.org/protobuf v1.28.1 // indirect + gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index fc80096..eb5d513 100644 --- a/go.sum +++ b/go.sum @@ -31,34 +31,149 @@ cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2Z cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A= cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU= +cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= +cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw= +cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY= +cloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI= +cloud.google.com/go/analytics v0.12.0/go.mod h1:gkfj9h6XRf9+TS4bmuhPEShsh3hH8PAZzm/41OOhQd4= +cloud.google.com/go/area120 v0.5.0/go.mod h1:DE/n4mp+iqVyvxHN41Vf1CR602GiHQjFPusMFW6bGR4= +cloud.google.com/go/area120 v0.6.0/go.mod h1:39yFJqWVgm0UZqWTOdqkLhjoC7uFfgXRC8g/ZegeAh0= +cloud.google.com/go/artifactregistry v1.6.0/go.mod h1:IYt0oBPSAGYj/kprzsBjZ/4LnG/zOcHyFHjWPCi6SAQ= +cloud.google.com/go/artifactregistry v1.7.0/go.mod h1:mqTOFOnGZx8EtSqK/ZWcsm/4U8B77rbcLP6ruDU2Ixk= cloud.google.com/go/asset v1.5.0/go.mod h1:5mfs8UvcM5wHhqtSv8J1CtxxaQq3AdBxxQi2jGW/K4o= +cloud.google.com/go/asset v1.7.0/go.mod h1:YbENsRK4+xTiL+Ofoj5Ckf+O17kJtgp3Y3nn4uzZz5s= +cloud.google.com/go/asset v1.8.0/go.mod h1:mUNGKhiqIdbr8X7KNayoYvyc4HbbFO9URsjbytpUaW0= +cloud.google.com/go/assuredworkloads v1.5.0/go.mod h1:n8HOZ6pff6re5KYfBXcFvSViQjDwxFkAkmUFffJRbbY= +cloud.google.com/go/assuredworkloads v1.6.0/go.mod h1:yo2YOk37Yc89Rsd5QMVECvjaMKymF9OP+QXWlKXUkXw= +cloud.google.com/go/assuredworkloads v1.7.0/go.mod h1:z/736/oNmtGAyU47reJgGN+KVoYoxeLBoj4XkKYscNI= +cloud.google.com/go/automl v1.5.0/go.mod h1:34EjfoFGMZ5sgJ9EoLsRtdPSNZLcfflJR39VbVNS2M0= +cloud.google.com/go/automl v1.6.0/go.mod h1:ugf8a6Fx+zP0D59WLhqgTDsQI9w07o64uf/Is3Nh5p8= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= +cloud.google.com/go/bigquery v1.42.0/go.mod h1:8dRTJxhtG+vwBKzE5OseQn/hiydoQN3EedCaOdYmxRA= +cloud.google.com/go/billing v1.4.0/go.mod h1:g9IdKBEFlItS8bTtlrZdVLWSSdSyFUZKXNS02zKMOZY= +cloud.google.com/go/billing v1.5.0/go.mod h1:mztb1tBc3QekhjSgmpf/CV4LzWXLzCArwpLmP2Gm88s= +cloud.google.com/go/binaryauthorization v1.1.0/go.mod h1:xwnoWu3Y84jbuHa0zd526MJYmtnVXn0syOjaJgy4+dM= +cloud.google.com/go/binaryauthorization v1.2.0/go.mod h1:86WKkJHtRcv5ViNABtYMhhNWRrD1Vpi//uKEy7aYEfI= +cloud.google.com/go/cloudtasks v1.5.0/go.mod h1:fD92REy1x5woxkKEkLdvavGnPJGEn8Uic9nWuLzqCpY= +cloud.google.com/go/cloudtasks v1.6.0/go.mod h1:C6Io+sxuke9/KNRkbQpihnW93SWDU3uXt92nu85HkYI= cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow= cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM= cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M= cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz/FMzPu0s= cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= +cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I= +cloud.google.com/go/containeranalysis v0.6.0/go.mod h1:HEJoiEIu+lEXM+k7+qLCci0h33lX3ZqoYFdmPcoO7s4= +cloud.google.com/go/datacatalog v1.3.0/go.mod h1:g9svFY6tuR+j+hrTw3J2dNcmI0dzmSiyOzm8kpLq0a0= +cloud.google.com/go/datacatalog v1.5.0/go.mod h1:M7GPLNQeLfWqeIm3iuiruhPzkt65+Bx8dAKvScX8jvs= +cloud.google.com/go/datacatalog v1.6.0/go.mod h1:+aEyF8JKg+uXcIdAmmaMUmZ3q1b/lKLtXCmXdnc0lbc= +cloud.google.com/go/dataflow v0.6.0/go.mod h1:9QwV89cGoxjjSR9/r7eFDqqjtvbKxAK2BaYU6PVk9UM= +cloud.google.com/go/dataflow v0.7.0/go.mod h1:PX526vb4ijFMesO1o202EaUmouZKBpjHsTlCtB4parQ= +cloud.google.com/go/dataform v0.3.0/go.mod h1:cj8uNliRlHpa6L3yVhDOBrUXH+BPAO1+KFMQQNSThKo= +cloud.google.com/go/dataform v0.4.0/go.mod h1:fwV6Y4Ty2yIFL89huYlEkwUPtS7YZinZbzzj5S9FzCE= +cloud.google.com/go/datalabeling v0.5.0/go.mod h1:TGcJ0G2NzcsXSE/97yWjIZO0bXj0KbVlINXMG9ud42I= +cloud.google.com/go/datalabeling v0.6.0/go.mod h1:WqdISuk/+WIGeMkpw/1q7bK/tFEZxsrFJOJdY2bXvTQ= +cloud.google.com/go/dataqna v0.5.0/go.mod h1:90Hyk596ft3zUQ8NkFfvICSIfHFh1Bc7C4cK3vbhkeo= +cloud.google.com/go/dataqna v0.6.0/go.mod h1:1lqNpM7rqNLVgWBJyk5NF6Uen2PHym0jtVJonplVsDA= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= +cloud.google.com/go/datastream v1.2.0/go.mod h1:i/uTP8/fZwgATHS/XFu0TcNUhuA0twZxxQ3EyCUQMwo= +cloud.google.com/go/datastream v1.3.0/go.mod h1:cqlOX8xlyYF/uxhiKn6Hbv6WjwPPuI9W2M9SAXwaLLQ= +cloud.google.com/go/dialogflow v1.15.0/go.mod h1:HbHDWs33WOGJgn6rfzBW1Kv807BE3O1+xGbn59zZWI4= +cloud.google.com/go/dialogflow v1.16.1/go.mod h1:po6LlzGfK+smoSmTBnbkIZY2w8ffjz/RcGSS+sh1el0= +cloud.google.com/go/dialogflow v1.17.0/go.mod h1:YNP09C/kXA1aZdBgC/VtXX74G/TKn7XVCcVumTflA+8= +cloud.google.com/go/documentai v1.7.0/go.mod h1:lJvftZB5NRiFSX4moiye1SMxHx0Bc3x1+p9e/RfXYiU= +cloud.google.com/go/documentai v1.8.0/go.mod h1:xGHNEB7CtsnySCNrCFdCyyMz44RhFEEX2Q7UD0c5IhU= +cloud.google.com/go/domains v0.6.0/go.mod h1:T9Rz3GasrpYk6mEGHh4rymIhjlnIuB4ofT1wTxDeT4Y= +cloud.google.com/go/domains v0.7.0/go.mod h1:PtZeqS1xjnXuRPKE/88Iru/LdfoRyEHYA9nFQf4UKpg= +cloud.google.com/go/edgecontainer v0.1.0/go.mod h1:WgkZ9tp10bFxqO8BLPqv2LlfmQF1X8lZqwW4r1BTajk= +cloud.google.com/go/edgecontainer v0.2.0/go.mod h1:RTmLijy+lGpQ7BXuTDa4C4ssxyXT34NIuHIgKuP4s5w= cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= +cloud.google.com/go/functions v1.6.0/go.mod h1:3H1UA3qiIPRWD7PeZKLvHZ9SaQhR26XIJcC0A5GbvAk= +cloud.google.com/go/functions v1.7.0/go.mod h1:+d+QBcWM+RsrgZfV9xo6KfA1GlzJfxcfZcRPEhDDfzg= +cloud.google.com/go/gaming v1.5.0/go.mod h1:ol7rGcxP/qHTRQE/RO4bxkXq+Fix0j6D4LFPzYTIrDM= +cloud.google.com/go/gaming v1.6.0/go.mod h1:YMU1GEvA39Qt3zWGyAVA9bpYz/yAhTvaQ1t2sK4KPUA= +cloud.google.com/go/gkeconnect v0.5.0/go.mod h1:c5lsNAg5EwAy7fkqX/+goqFsU1Da/jQFqArp+wGNr/o= +cloud.google.com/go/gkeconnect v0.6.0/go.mod h1:Mln67KyU/sHJEBY8kFZ0xTeyPtzbq9StAVvEULYK16A= +cloud.google.com/go/gkehub v0.9.0/go.mod h1:WYHN6WG8w9bXU0hqNxt8rm5uxnk8IH+lPY9J2TV7BK0= +cloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y977wO+hBH0= +cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc= cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= +cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic= +cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI= +cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8= +cloud.google.com/go/lifesciences v0.6.0/go.mod h1:ddj6tSX/7BOnhxCSd3ZcETvtNr8NZ6t/iPhY2Tyfu08= +cloud.google.com/go/mediatranslation v0.5.0/go.mod h1:jGPUhGTybqsPQn91pNXw0xVHfuJ3leR1wj37oU3y1f4= +cloud.google.com/go/mediatranslation v0.6.0/go.mod h1:hHdBCTYNigsBxshbznuIMFNe5QXEowAuNmmC7h8pu5w= +cloud.google.com/go/memcache v1.4.0/go.mod h1:rTOfiGZtJX1AaFUrOgsMHX5kAzaTQ8azHiuDoTPzNsE= +cloud.google.com/go/memcache v1.5.0/go.mod h1:dk3fCK7dVo0cUU2c36jKb4VqKPS22BTkf81Xq617aWM= +cloud.google.com/go/metastore v1.5.0/go.mod h1:2ZNrDcQwghfdtCwJ33nM0+GrBGlVuh8rakL3vdPY3XY= +cloud.google.com/go/metastore v1.6.0/go.mod h1:6cyQTls8CWXzk45G55x57DVQ9gWg7RiH65+YgPsNh9s= +cloud.google.com/go/networkconnectivity v1.4.0/go.mod h1:nOl7YL8odKyAOtzNX73/M5/mGZgqqMeryi6UPZTk/rA= +cloud.google.com/go/networkconnectivity v1.5.0/go.mod h1:3GzqJx7uhtlM3kln0+x5wyFvuVH1pIBJjhCpjzSt75o= +cloud.google.com/go/networksecurity v0.5.0/go.mod h1:xS6fOCoqpVC5zx15Z/MqkfDwH4+m/61A3ODiDV1xmiQ= +cloud.google.com/go/networksecurity v0.6.0/go.mod h1:Q5fjhTr9WMI5mbpRYEbiexTzROf7ZbDzvzCrNl14nyU= +cloud.google.com/go/notebooks v1.2.0/go.mod h1:9+wtppMfVPUeJ8fIWPOq1UnATHISkGXGqTkxeieQ6UY= +cloud.google.com/go/notebooks v1.3.0/go.mod h1:bFR5lj07DtCPC7YAAJ//vHskFBxA5JzYlH68kXVdk34= +cloud.google.com/go/osconfig v1.7.0/go.mod h1:oVHeCeZELfJP7XLxcBGTMBvRO+1nQ5tFG9VQTmYS2Fs= +cloud.google.com/go/osconfig v1.8.0/go.mod h1:EQqZLu5w5XA7eKizepumcvWx+m8mJUhEwiPqWiZeEdg= +cloud.google.com/go/oslogin v1.4.0/go.mod h1:YdgMXWRaElXz/lDk1Na6Fh5orF7gvmJ0FGLIs9LId4E= +cloud.google.com/go/oslogin v1.5.0/go.mod h1:D260Qj11W2qx/HVF29zBg+0fd6YCSjSqLUkY/qEenQU= +cloud.google.com/go/phishingprotection v0.5.0/go.mod h1:Y3HZknsK9bc9dMi+oE8Bim0lczMU6hrX0UpADuMefr0= +cloud.google.com/go/phishingprotection v0.6.0/go.mod h1:9Y3LBLgy0kDTcYET8ZH3bq/7qni15yVUoAxiFxnlSUA= +cloud.google.com/go/privatecatalog v0.5.0/go.mod h1:XgosMUvvPyxDjAVNDYxJ7wBW8//hLDDYmnsNcMGq1K0= +cloud.google.com/go/privatecatalog v0.6.0/go.mod h1:i/fbkZR0hLN29eEWiiwue8Pb+GforiEIBnV9yrRUOKI= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= +cloud.google.com/go/recaptchaenterprise v1.3.1/go.mod h1:OdD+q+y4XGeAlxRaMn1Y7/GveP6zmq76byL6tjPE7d4= +cloud.google.com/go/recaptchaenterprise/v2 v2.1.0/go.mod h1:w9yVqajwroDNTfGuhmOjPDN//rZGySaf6PtFVcSCa7o= +cloud.google.com/go/recaptchaenterprise/v2 v2.2.0/go.mod h1:/Zu5jisWGeERrd5HnlS3EUGb/D335f9k51B/FVil0jk= +cloud.google.com/go/recaptchaenterprise/v2 v2.3.0/go.mod h1:O9LwGCjrhGHBQET5CA7dd5NwwNQUErSgEDit1DLNTdo= +cloud.google.com/go/recommendationengine v0.5.0/go.mod h1:E5756pJcVFeVgaQv3WNpImkFP8a+RptV6dDLGPILjvg= +cloud.google.com/go/recommendationengine v0.6.0/go.mod h1:08mq2umu9oIqc7tDy8sx+MNJdLG0fUi3vaSVbztHgJ4= +cloud.google.com/go/recommender v1.5.0/go.mod h1:jdoeiBIVrJe9gQjwd759ecLJbxCDED4A6p+mqoqDvTg= +cloud.google.com/go/recommender v1.6.0/go.mod h1:+yETpm25mcoiECKh9DEScGzIRyDKpZ0cEhWGo+8bo+c= +cloud.google.com/go/redis v1.7.0/go.mod h1:V3x5Jq1jzUcg+UNsRvdmsfuFnit1cfe3Z/PGyq/lm4Y= +cloud.google.com/go/redis v1.8.0/go.mod h1:Fm2szCDavWzBk2cDKxrkmWBqoCiL1+Ctwq7EyqBCA/A= +cloud.google.com/go/retail v1.8.0/go.mod h1:QblKS8waDmNUhghY2TI9O3JLlFk8jybHeV4BF19FrE4= +cloud.google.com/go/retail v1.9.0/go.mod h1:g6jb6mKuCS1QKnH/dpu7isX253absFl6iE92nHwlBUY= +cloud.google.com/go/scheduler v1.4.0/go.mod h1:drcJBmxF3aqZJRhmkHQ9b3uSSpQoltBPGPxGAWROx6s= +cloud.google.com/go/scheduler v1.5.0/go.mod h1:ri073ym49NW3AfT6DZi21vLZrG07GXr5p3H1KxN5QlI= +cloud.google.com/go/secretmanager v1.6.0/go.mod h1:awVa/OXF6IiyaU1wQ34inzQNc4ISIDIrId8qE5QGgKA= cloud.google.com/go/security v1.5.0/go.mod h1:lgxGdyOKKjHL4YG3/YwIL2zLqMFCKs0UbQwgyZmfJl4= +cloud.google.com/go/security v1.7.0/go.mod h1:mZklORHl6Bg7CNnnjLH//0UlAlaXqiG7Lb9PsPXLfD0= +cloud.google.com/go/security v1.8.0/go.mod h1:hAQOwgmaHhztFhiQ41CjDODdWP0+AE1B3sX4OFlq+GU= +cloud.google.com/go/securitycenter v1.13.0/go.mod h1:cv5qNAqjY84FCN6Y9z28WlkKXyWsgLO832YiWwkCWcU= +cloud.google.com/go/securitycenter v1.14.0/go.mod h1:gZLAhtyKv85n52XYWt6RmeBdydyxfPeTrpToDPw4Auc= +cloud.google.com/go/servicedirectory v1.4.0/go.mod h1:gH1MUaZCgtP7qQiI+F+A+OpeKF/HQWgtAddhTbhL2bs= +cloud.google.com/go/servicedirectory v1.5.0/go.mod h1:QMKFL0NUySbpZJ1UZs3oFAmdvVxhhxB6eJ/Vlp73dfg= +cloud.google.com/go/speech v1.6.0/go.mod h1:79tcr4FHCimOp56lwC01xnt/WPJZc4v3gzyT7FoBkCM= +cloud.google.com/go/speech v1.7.0/go.mod h1:KptqL+BAQIhMsj1kOP2la5DSEEerPDuOP/2mmkhHhZQ= cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y= +cloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeLgDvXzfIXc= +cloud.google.com/go/talent v1.1.0/go.mod h1:Vl4pt9jiHKvOgF9KoZo6Kob9oV4lwd/ZD5Cto54zDRw= +cloud.google.com/go/talent v1.2.0/go.mod h1:MoNF9bhFQbiJ6eFD3uSsg0uBALw4n4gaCaEjBw9zo8g= +cloud.google.com/go/videointelligence v1.6.0/go.mod h1:w0DIDlVRKtwPCn/C4iwZIJdvC69yInhW0cfi+p546uU= +cloud.google.com/go/videointelligence v1.7.0/go.mod h1:k8pI/1wAhjznARtVT9U1llUaFNPh7muw8QyOUpavru4= +cloud.google.com/go/vision v1.2.0/go.mod h1:SmNwgObm5DpFBme2xpyOyasvBc1aPdjvMk2bBk0tKD0= +cloud.google.com/go/vision/v2 v2.2.0/go.mod h1:uCdV4PpN1S0jyCyq8sIM42v2Y6zOLkZs+4R9LrGYwFo= +cloud.google.com/go/vision/v2 v2.3.0/go.mod h1:UO61abBx9QRMFkNBbf1D8B1LXdS2cGiiCRx0vSpZoUo= +cloud.google.com/go/webrisk v1.4.0/go.mod h1:Hn8X6Zr+ziE2aNd8SliSDWpEnSS1u4R9+xXZmFiHmGE= +cloud.google.com/go/webrisk v1.5.0/go.mod h1:iPG6fr52Tv7sGk0H6qUFzmL3HHZev1htXuWDEEsqMTg= +cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1Vwf+KmJENM0= +cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/AdaLogics/go-fuzz-headers v0.0.0-20210715213245-6c3934b029d8/go.mod h1:CzsSbkDixRphAF5hS6wbMKq0eI6ccJRb7/A0M6JBnwg= github.com/Azure/azure-sdk-for-go v16.2.1+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= @@ -90,8 +205,9 @@ github.com/Microsoft/go-winio v0.4.17-0.20210211115548-6eac466e5fa3/go.mod h1:JP github.com/Microsoft/go-winio v0.4.17-0.20210324224401-5516f17a5958/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= github.com/Microsoft/go-winio v0.4.17/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= github.com/Microsoft/go-winio v0.5.1/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= -github.com/Microsoft/go-winio v0.5.2 h1:a9IhgEQBCUEk6QCdml9CiJGhAws+YwffDHEMp1VMrpA= github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= +github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg= +github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2BO69KH/soAE= github.com/Microsoft/hcsshim v0.8.6/go.mod h1:Op3hHsoHPAvb6lceZHDtd9OkTew38wNoXnJs8iY7rUg= github.com/Microsoft/hcsshim v0.8.7-0.20190325164909-8abdbb8205e4/go.mod h1:Op3hHsoHPAvb6lceZHDtd9OkTew38wNoXnJs8iY7rUg= github.com/Microsoft/hcsshim v0.8.7/go.mod h1:OHd7sQqRFrYd3RmSgbgji+ctCwkbq2wbEYNSzOYtcBQ= @@ -225,8 +341,9 @@ github.com/containerd/containerd v1.5.1/go.mod h1:0DOxVqwDy2iZvrZp2JUx/E+hS0UNTV github.com/containerd/containerd v1.5.7/go.mod h1:gyvv6+ugqY25TiXxcZC3L5yOeYgEw0QMhscqVp1AR9c= github.com/containerd/containerd v1.5.8/go.mod h1:YdFSv5bTFLpG2HIYmfqDpSYYTDX+mc5qtSuYx1YUb/s= github.com/containerd/containerd v1.6.1/go.mod h1:1nJz5xCZPusx6jJU8Frfct988y0NpumIq9ODB0kLtoE= -github.com/containerd/containerd v1.6.8 h1:h4dOFDwzHmqFEP754PgfgTeVXFnLiRc6kiqC7tplDJs= github.com/containerd/containerd v1.6.8/go.mod h1:By6p5KqPK0/7/CgO/A6t/Gz+CUYUu2zf1hUaaymVXB0= +github.com/containerd/containerd v1.6.9 h1:IN/r8DUes/B5lEGTNfIiUkfZBtIQJGx2ai703dV6lRA= +github.com/containerd/containerd v1.6.9/go.mod h1:XVicUvkxOrftE2Q1YWUXgZwkkAxwQYNOFzYWvfVfEfQ= github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= github.com/containerd/continuity v0.0.0-20190815185530-f2a389ac0a02/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= github.com/containerd/continuity v0.0.0-20191127005431-f65d91d395eb/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= @@ -534,6 +651,7 @@ github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0 github.com/googleapis/gax-go/v2 v2.2.0/go.mod h1:as02EH8zWkzwUoLbBaFeQ+arQaj/OthfcblKl4IGNaM= github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99EXz9pXxye9YM= github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= +github.com/googleapis/gax-go/v2 v2.5.1/go.mod h1:h6B0KMMFNtI2ddbGJn3T3ZbwkeT6yqEF02fYlzkUCyo= github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg= github.com/googleapis/gnostic v0.5.1/go.mod h1:6U4PtQXGIEt/Z3h5MAT7FNofLnw9vXk2cUuW7uA/OeU= github.com/googleapis/gnostic v0.5.5/go.mod h1:7+EbHbldMins07ALC74bsA81Ovc97DwqyJO1AENw9kA= @@ -618,6 +736,7 @@ github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxv github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= @@ -694,7 +813,6 @@ github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRW github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= github.com/ncw/swift v1.0.47/go.mod h1:23YIA4yWVnGwv2dQlN4bB7egfYX6YLn0Yo/S6zZO/ZM= github.com/networkplumbing/go-nft v0.2.0/go.mod h1:HnnM+tYvlGAsMU7yoYwXEVLLiDW9gdMmb5HoGcwpuQs= -github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= @@ -736,8 +854,9 @@ github.com/opencontainers/image-spec v1.0.0/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zM github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= github.com/opencontainers/image-spec v1.0.2-0.20211117181255-693428a734f5/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= github.com/opencontainers/image-spec v1.0.2/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= -github.com/opencontainers/image-spec v1.0.3-0.20211202183452-c5a74bcca799 h1:rc3tiVYb5z54aKaDfakKn0dDjIyPpTtszkjuMzyt7ec= github.com/opencontainers/image-spec v1.0.3-0.20211202183452-c5a74bcca799/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= +github.com/opencontainers/image-spec v1.1.0-rc2 h1:2zx/Stx4Wc5pIPDvIxHXvXtQFW/7XWJGmnM7r3wg034= +github.com/opencontainers/image-spec v1.1.0-rc2/go.mod h1:3OVijpioIKYWTqjiG0zfF6wvoJ4fAXGbjdZuI2NgsRQ= github.com/opencontainers/runc v0.0.0-20190115041553-12f6a991201f/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= github.com/opencontainers/runc v0.1.1/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= github.com/opencontainers/runc v1.0.0-rc8.0.20190926000215-3e425f80a8c9/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= @@ -813,6 +932,7 @@ github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40T github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/russross/blackfriday v1.6.0/go.mod h1:ti0ldHuxg49ri4ksnFxlkCfN+hvslNlmVHqNRXXJNAY= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/safchain/ethtool v0.0.0-20190326074333-42ed695e3de8/go.mod h1:Z0q5wiBQGYcxhMZ6gUqHn6pYNLypFAvaL3UvgZLR0U4= @@ -905,6 +1025,7 @@ github.com/willf/bitset v1.1.11/go.mod h1:83CECat5yLh5zVOf4P1ErAgKA5UDvKtgyUABdr github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= github.com/xeipuuv/gojsonschema v0.0.0-20180618132009-1d523034197f/go.mod h1:5yf86TLmAcydyeJq5YvxkGPE2fm/u4myDekKRoLuqhs= +github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= @@ -913,6 +1034,7 @@ github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43/go.mod h1:aX5oPXxHm3bOH+xeAttToC8pqch2ScQN/JoXYupl6xs= github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50/go.mod h1:NUSPSUX/bi6SeDMUh6brw0nXpxHnc96TguQh0+r/ssA= github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f/go.mod h1:GlGEuHIJweS1mbCqG+7vt2nvWLzLLnRHbXz5JKd/Qbg= @@ -984,6 +1106,8 @@ golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWP golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20220315160706-3147a52a75dd/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -1020,6 +1144,8 @@ golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.6.0 h1:b9gGHsz9/HhJ3HF5DHQytPpuwocVTChQJK3AvoLRD5I= +golang.org/x/mod v0.6.0/go.mod h1:4mET923SAdbXp2ki8ey+zGs1SLqsuM2Y0uvdZR/fUNI= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1076,6 +1202,7 @@ golang.org/x/net v0.0.0-20210520170846-37e1c6afe023/go.mod h1:9nx3DQGgdP8bBQD5qx golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210825183410-e898025ed96a/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211209124913-491a49abca63/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211216030914-fe4d6282115f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= @@ -1086,8 +1213,10 @@ golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220617184016-355a448f1bc9/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.0.0-20220909164309-bea034e7d591 h1:D0B/7al0LLrVC8aWF4+oxpv/m8bc7ViFfVS8/gXGdqI= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.1.0 h1:hZ/3BUoy5aId7sCpA/Tc5lt8DkFgdVS2onTpJsZ/fl0= +golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -1109,6 +1238,8 @@ golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= +golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -1121,6 +1252,7 @@ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1238,17 +1370,20 @@ golang.org/x/sys v0.0.0-20220502124256-b6088ccd6cba/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220624220833-87e55d714810/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220909162455-aba9fc2a8ff2 h1:wM1k/lXfpc5HdkJJyW9GELpd8ERGdnh8sMGL6Gzq3Ho= -golang.org/x/sys v0.0.0-20220909162455-aba9fc2a8ff2/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.1.0 h1:kunALQeHf1/185U1i0GOB/fy1IPRDDpuoOOqRReG57U= +golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.0.0-20220526004731-065cf7ba2467/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= 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= @@ -1257,8 +1392,9 @@ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.4.0 h1:BrVqGRd7+k1DiOgtnFvAkoQEWQvBc25ouMJM6429SFg= +golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -1335,6 +1471,9 @@ golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.11/go.mod h1:SgwaegtQh8clINPpECJMqnxLv9I09HLqnW3RMqW0CA4= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.2.0 h1:G6AHpWxTMGY1KyEYoAQ5WTtIekUUvDNjan3ugu60JvE= +golang.org/x/tools v0.2.0/go.mod h1:y4OqIKeOV/fWJetJ8bXPU1sEVniLMIyDAZWeHdV+NTA= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -1379,10 +1518,17 @@ google.golang.org/api v0.70.0/go.mod h1:Bs4ZM2HGifEvXwd50TtW70ovgJffJYw2oRCOFU/S google.golang.org/api v0.71.0/go.mod h1:4PyU6e6JogV1f9eA4voyrTY2batOLdgZ5qZ5HOCc4j8= google.golang.org/api v0.74.0/go.mod h1:ZpfMZOVRMywNyvJFeqL9HRWBgAuRfSjJFpe9QtRRyDs= google.golang.org/api v0.75.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= +google.golang.org/api v0.77.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= google.golang.org/api v0.78.0/go.mod h1:1Sg78yoMLOhlQTeF+ARBoytAcH1NNyyl390YMy6rKmw= google.golang.org/api v0.80.0/go.mod h1:xY3nI94gbvBrE0J6NHXhxOmW97HG7Khjkku6AFB3Hyg= google.golang.org/api v0.84.0/go.mod h1:NTsGnUFJMYROtiquksZHBWtHfeMC7iYthki7Eq3pa8o= +google.golang.org/api v0.85.0/go.mod h1:AqZf8Ep9uZ2pyTvgL+x0D3Zt0eoT9b5E8fmzfu6FO2g= +google.golang.org/api v0.90.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= google.golang.org/api v0.93.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= +google.golang.org/api v0.95.0/go.mod h1:eADj+UBuxkh5zlrSntJghuNeg8HwQ1w5lTKkuqaETEI= +google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= +google.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= +google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -1470,6 +1616,7 @@ google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9/go.mod h1:8w6bsBMX google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= google.golang.org/genproto v0.0.0-20220421151946-72621c1f0bd3/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= google.golang.org/genproto v0.0.0-20220429170224-98d788798c3e/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220502173005-c8bf987b8c21/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= google.golang.org/genproto v0.0.0-20220523171625-347a074981d8/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= @@ -1477,9 +1624,25 @@ google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljW google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/genproto v0.0.0-20220617124728-180714bec0ad/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/genproto v0.0.0-20220624142145-8cd45d7dbd1f/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220628213854-d9e0b6570c03/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220722212130-b98a9ff5e252/go.mod h1:GkXuJDJ6aQ7lnJcRF+SJVgFdQhypqgl3LB1C9vabdRE= +google.golang.org/genproto v0.0.0-20220801145646-83ce21fca29f/go.mod h1:iHe1svFLAZg9VWz891+QbRMwUv9O/1Ww+/mngYeThbc= google.golang.org/genproto v0.0.0-20220815135757-37a418bb8959/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= -google.golang.org/genproto v0.0.0-20220909194730-69f6226f97e5 h1:ngtP8S8JkBWfJACT9cmj5eTkS9tIWPQI5leBz/7Bq/c= -google.golang.org/genproto v0.0.0-20220909194730-69f6226f97e5/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220817144833-d7fd3f11b9b1/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220822174746-9e6da59bd2fc/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220829144015-23454907ede3/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220829175752-36a9c930ecbf/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220913154956-18f8339a66a5/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220914142337-ca0e39ece12f/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220915135415-7fd63a7952de/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220916172020-2692e8806bfa/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220919141832-68c03719ef51/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220920201722-2b89144ce006/go.mod h1:ht8XFiar2npT/g4vkk7O0WYS1sHOHbdujxbEp7CJWbw= +google.golang.org/genproto v0.0.0-20220926165614-551eb538f295/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= +google.golang.org/genproto v0.0.0-20220926220553-6981cbe3cfce/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= +google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= +google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71 h1:GEgb2jF5zxsFJpJfg9RoDDWm7tiwc/DDSTE2BtLUkXU= +google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= google.golang.org/grpc v0.0.0-20160317175043-d3ddb4469d5a/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= @@ -1518,8 +1681,10 @@ google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACu google.golang.org/grpc v1.46.2/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= google.golang.org/grpc v1.47.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -google.golang.org/grpc v1.49.0 h1:WTLtQzmQori5FUH25Pq4WT22oCsv8USpQ+F6rqtsmxw= google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= +google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= +google.golang.org/grpc v1.50.1 h1:DS/BukOZWp8s6p4Dt/tOaJaTQyPyOoCcrjroHuCeLzY= +google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= @@ -1543,7 +1708,6 @@ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20141024133853-64131543e789/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= @@ -1615,6 +1779,7 @@ k8s.io/cri-api v0.20.1/go.mod h1:2JRbKt+BFLTjtrILYVqQK5jqhI+XNdF6UiGMgczeBCI= k8s.io/cri-api v0.20.4/go.mod h1:2JRbKt+BFLTjtrILYVqQK5jqhI+XNdF6UiGMgczeBCI= k8s.io/cri-api v0.20.6/go.mod h1:ew44AjNXwyn1s0U4xCKGodU7J1HzBeZ1MpGrpa5r8Yc= k8s.io/cri-api v0.23.1/go.mod h1:REJE3PSU0h/LOV1APBrupxrEJqnoxZC8KWzkBUHwrK4= +k8s.io/cri-api v0.25.0/go.mod h1:J1rAyQkSJ2Q6I+aBMOVgg2/cbbebso6FNa0UagiR0kc= k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/gengo v0.0.0-20200428234225-8167cfdcfc14/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/gengo v0.0.0-20201113003025-83324d819ded/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= diff --git a/mock/container.go b/mock/container.go index 4adf198..dfd004f 100644 --- a/mock/container.go +++ b/mock/container.go @@ -1,260 +1,514 @@ +// Code generated by mockery v2.14.0. DO NOT EDIT. + package mock import ( - "context" - "io" - "testing" - "time" - - "github.com/docker/docker/api/types" - "github.com/docker/go-connections/nat" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/mock" - "github.com/testcontainers/testcontainers-go" -) + context "context" + io "io" + + mock "github.com/stretchr/testify/mock" -// ContainerMocker is Container mocker. -type ContainerMocker func(tb testing.TB) *Container + nat "github.com/docker/go-connections/nat" -// NoMockContainer is no mock Container. -var NoMockContainer = MockContainer() + testcontainers "github.com/testcontainers/testcontainers-go" -var _ testcontainers.Container = (*Container)(nil) + time "time" + + types "github.com/docker/docker/api/types" +) -// Container is a testcontainers.Container. +// Container is an autogenerated mock type for the Container type type Container struct { mock.Mock } -// GetContainerID satisfies testcontainers.Container interface. -func (c *Container) GetContainerID() string { - return c.Called().String(0) +// ContainerIP provides a mock function with given fields: _a0 +func (_m *Container) ContainerIP(_a0 context.Context) (string, error) { + ret := _m.Called(_a0) + + var r0 string + if rf, ok := ret.Get(0).(func(context.Context) string); ok { + r0 = rf(_a0) + } else { + r0 = ret.Get(0).(string) + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context) error); ok { + r1 = rf(_a0) + } else { + r1 = ret.Error(1) + } + + return r0, r1 } -// Endpoint satisfies testcontainers.Container interface. -func (c *Container) Endpoint(ctx context.Context, proto string) (string, error) { - result := c.Called(ctx, proto) +// ContainerIPs provides a mock function with given fields: _a0 +func (_m *Container) ContainerIPs(_a0 context.Context) ([]string, error) { + ret := _m.Called(_a0) + + var r0 []string + if rf, ok := ret.Get(0).(func(context.Context) []string); ok { + r0 = rf(_a0) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]string) + } + } - return result.String(0), result.Error(1) + var r1 error + if rf, ok := ret.Get(1).(func(context.Context) error); ok { + r1 = rf(_a0) + } else { + r1 = ret.Error(1) + } + + return r0, r1 } -// PortEndpoint satisfies testcontainers.Container interface. -func (c *Container) PortEndpoint(ctx context.Context, port nat.Port, proto string) (string, error) { - result := c.Called(ctx, port, proto) +// CopyDirToContainer provides a mock function with given fields: ctx, hostDirPath, containerParentPath, fileMode +func (_m *Container) CopyDirToContainer(ctx context.Context, hostDirPath string, containerParentPath string, fileMode int64) error { + ret := _m.Called(ctx, hostDirPath, containerParentPath, fileMode) - return result.String(0), result.Error(1) + var r0 error + if rf, ok := ret.Get(0).(func(context.Context, string, string, int64) error); ok { + r0 = rf(ctx, hostDirPath, containerParentPath, fileMode) + } else { + r0 = ret.Error(0) + } + + return r0 } -// Host satisfies testcontainers.Container interface. -func (c *Container) Host(ctx context.Context) (string, error) { - result := c.Called(ctx) +// CopyFileFromContainer provides a mock function with given fields: ctx, filePath +func (_m *Container) CopyFileFromContainer(ctx context.Context, filePath string) (io.ReadCloser, error) { + ret := _m.Called(ctx, filePath) + + var r0 io.ReadCloser + if rf, ok := ret.Get(0).(func(context.Context, string) io.ReadCloser); ok { + r0 = rf(ctx, filePath) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(io.ReadCloser) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, string) error); ok { + r1 = rf(ctx, filePath) + } else { + r1 = ret.Error(1) + } - return result.String(0), result.Error(1) + return r0, r1 } -// MappedPort satisfies testcontainers.Container interface. -func (c *Container) MappedPort(ctx context.Context, port nat.Port) (nat.Port, error) { - result := c.Called(ctx, port) +// CopyFileToContainer provides a mock function with given fields: ctx, hostFilePath, containerFilePath, fileMode +func (_m *Container) CopyFileToContainer(ctx context.Context, hostFilePath string, containerFilePath string, fileMode int64) error { + ret := _m.Called(ctx, hostFilePath, containerFilePath, fileMode) - p := result.Get(0) - err := result.Error(1) + var r0 error + if rf, ok := ret.Get(0).(func(context.Context, string, string, int64) error); ok { + r0 = rf(ctx, hostFilePath, containerFilePath, fileMode) + } else { + r0 = ret.Error(0) + } + + return r0 +} - if s, ok := p.(string); ok { - return nat.Port(s), err +// CopyToContainer provides a mock function with given fields: ctx, fileContent, containerFilePath, fileMode +func (_m *Container) CopyToContainer(ctx context.Context, fileContent []byte, containerFilePath string, fileMode int64) error { + ret := _m.Called(ctx, fileContent, containerFilePath, fileMode) + + var r0 error + if rf, ok := ret.Get(0).(func(context.Context, []byte, string, int64) error); ok { + r0 = rf(ctx, fileContent, containerFilePath, fileMode) + } else { + r0 = ret.Error(0) } - return p.(nat.Port), err + return r0 } -// Ports satisfies testcontainers.Container interface. -func (c *Container) Ports(ctx context.Context) (nat.PortMap, error) { - result := c.Called(ctx) +// Endpoint provides a mock function with given fields: _a0, _a1 +func (_m *Container) Endpoint(_a0 context.Context, _a1 string) (string, error) { + ret := _m.Called(_a0, _a1) - m := result.Get(0) - err := result.Error(1) + var r0 string + if rf, ok := ret.Get(0).(func(context.Context, string) string); ok { + r0 = rf(_a0, _a1) + } else { + r0 = ret.Get(0).(string) + } - if m == nil { - return nil, err + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, string) error); ok { + r1 = rf(_a0, _a1) + } else { + r1 = ret.Error(1) } - return m.(nat.PortMap), err + return r0, r1 } -// SessionID satisfies testcontainers.Container interface. -func (c *Container) SessionID() string { - return c.Called().String(0) -} +// Exec provides a mock function with given fields: ctx, cmd +func (_m *Container) Exec(ctx context.Context, cmd []string) (int, io.Reader, error) { + ret := _m.Called(ctx, cmd) + + var r0 int + if rf, ok := ret.Get(0).(func(context.Context, []string) int); ok { + r0 = rf(ctx, cmd) + } else { + r0 = ret.Get(0).(int) + } + + var r1 io.Reader + if rf, ok := ret.Get(1).(func(context.Context, []string) io.Reader); ok { + r1 = rf(ctx, cmd) + } else { + if ret.Get(1) != nil { + r1 = ret.Get(1).(io.Reader) + } + } + + var r2 error + if rf, ok := ret.Get(2).(func(context.Context, []string) error); ok { + r2 = rf(ctx, cmd) + } else { + r2 = ret.Error(2) + } -// Start satisfies testcontainers.Container interface. -func (c *Container) Start(ctx context.Context) error { - return c.Called(ctx).Error(0) + return r0, r1, r2 } -// Stop satisfies testcontainers.Container interface. -func (c *Container) Stop(ctx context.Context, duration *time.Duration) error { - return c.Called(ctx, duration).Error(0) +// FollowOutput provides a mock function with given fields: _a0 +func (_m *Container) FollowOutput(_a0 testcontainers.LogConsumer) { + _m.Called(_a0) } -// Terminate satisfies testcontainers.Container interface. -func (c *Container) Terminate(ctx context.Context) error { - return c.Called(ctx).Error(0) +// GetContainerID provides a mock function with given fields: +func (_m *Container) GetContainerID() string { + ret := _m.Called() + + var r0 string + if rf, ok := ret.Get(0).(func() string); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(string) + } + + return r0 } -// Logs satisfies testcontainers.Container interface. -func (c *Container) Logs(ctx context.Context) (io.ReadCloser, error) { - result := c.Called(ctx) +// Host provides a mock function with given fields: _a0 +func (_m *Container) Host(_a0 context.Context) (string, error) { + ret := _m.Called(_a0) - rc := result.Get(0) - err := result.Error(1) + var r0 string + if rf, ok := ret.Get(0).(func(context.Context) string); ok { + r0 = rf(_a0) + } else { + r0 = ret.Get(0).(string) + } - if rc == nil { - return nil, err + var r1 error + if rf, ok := ret.Get(1).(func(context.Context) error); ok { + r1 = rf(_a0) + } else { + r1 = ret.Error(1) } - return rc.(io.ReadCloser), err + return r0, r1 } -// FollowOutput satisfies testcontainers.Container interface. -func (c *Container) FollowOutput(consumer testcontainers.LogConsumer) { - c.Called(consumer) -} +// IsRunning provides a mock function with given fields: +func (_m *Container) IsRunning() bool { + ret := _m.Called() -// StartLogProducer satisfies testcontainers.Container interface. -func (c *Container) StartLogProducer(ctx context.Context) error { - return c.Called(ctx).Error(0) -} + var r0 bool + if rf, ok := ret.Get(0).(func() bool); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(bool) + } -// StopLogProducer satisfies testcontainers.Container interface. -func (c *Container) StopLogProducer() error { - return c.Called().Error(0) + return r0 } -// Name satisfies testcontainers.Container interface. -func (c *Container) Name(ctx context.Context) (string, error) { - result := c.Called(ctx) +// Logs provides a mock function with given fields: _a0 +func (_m *Container) Logs(_a0 context.Context) (io.ReadCloser, error) { + ret := _m.Called(_a0) + + var r0 io.ReadCloser + if rf, ok := ret.Get(0).(func(context.Context) io.ReadCloser); ok { + r0 = rf(_a0) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(io.ReadCloser) + } + } - return result.String(0), result.Error(1) + var r1 error + if rf, ok := ret.Get(1).(func(context.Context) error); ok { + r1 = rf(_a0) + } else { + r1 = ret.Error(1) + } + + return r0, r1 } -// State satisfies testcontainers.Container interface. -func (c *Container) State(ctx context.Context) (*types.ContainerState, error) { - result := c.Called(ctx) +// MappedPort provides a mock function with given fields: _a0, _a1 +func (_m *Container) MappedPort(_a0 context.Context, _a1 nat.Port) (nat.Port, error) { + ret := _m.Called(_a0, _a1) - state := result.Get(0) - err := result.Error(1) + var r0 nat.Port + if rf, ok := ret.Get(0).(func(context.Context, nat.Port) nat.Port); ok { + r0 = rf(_a0, _a1) + } else { + r0 = ret.Get(0).(nat.Port) + } - if state == nil { - return nil, err + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, nat.Port) error); ok { + r1 = rf(_a0, _a1) + } else { + r1 = ret.Error(1) } - return state.(*types.ContainerState), err + return r0, r1 } -// Networks satisfies testcontainers.Container interface. -func (c *Container) Networks(ctx context.Context) ([]string, error) { - result := c.Called(ctx) +// Name provides a mock function with given fields: _a0 +func (_m *Container) Name(_a0 context.Context) (string, error) { + ret := _m.Called(_a0) - networks := result.Get(0) - err := result.Error(1) + var r0 string + if rf, ok := ret.Get(0).(func(context.Context) string); ok { + r0 = rf(_a0) + } else { + r0 = ret.Get(0).(string) + } - if networks == nil { - return nil, err + var r1 error + if rf, ok := ret.Get(1).(func(context.Context) error); ok { + r1 = rf(_a0) + } else { + r1 = ret.Error(1) } - return networks.([]string), err + return r0, r1 } -// NetworkAliases satisfies testcontainers.Container interface. -func (c *Container) NetworkAliases(ctx context.Context) (map[string][]string, error) { - result := c.Called(ctx) +// NetworkAliases provides a mock function with given fields: _a0 +func (_m *Container) NetworkAliases(_a0 context.Context) (map[string][]string, error) { + ret := _m.Called(_a0) + + var r0 map[string][]string + if rf, ok := ret.Get(0).(func(context.Context) map[string][]string); ok { + r0 = rf(_a0) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(map[string][]string) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context) error); ok { + r1 = rf(_a0) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} - networks := result.Get(0) - err := result.Error(1) +// Networks provides a mock function with given fields: _a0 +func (_m *Container) Networks(_a0 context.Context) ([]string, error) { + ret := _m.Called(_a0) + + var r0 []string + if rf, ok := ret.Get(0).(func(context.Context) []string); ok { + r0 = rf(_a0) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]string) + } + } - if networks == nil { - return nil, err + var r1 error + if rf, ok := ret.Get(1).(func(context.Context) error); ok { + r1 = rf(_a0) + } else { + r1 = ret.Error(1) } - return networks.(map[string][]string), err + return r0, r1 } -// Exec satisfies testcontainers.Container interface. -func (c *Container) Exec(ctx context.Context, cmd []string) (int, io.Reader, error) { - result := c.Called(ctx, cmd) +// PortEndpoint provides a mock function with given fields: _a0, _a1, _a2 +func (_m *Container) PortEndpoint(_a0 context.Context, _a1 nat.Port, _a2 string) (string, error) { + ret := _m.Called(_a0, _a1, _a2) - r1, r2, r3 := result.Int(0), result.Get(1), result.Error(2) + var r0 string + if rf, ok := ret.Get(0).(func(context.Context, nat.Port, string) string); ok { + r0 = rf(_a0, _a1, _a2) + } else { + r0 = ret.Get(0).(string) + } - if r2 == nil { - return r1, nil, r3 + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, nat.Port, string) error); ok { + r1 = rf(_a0, _a1, _a2) + } else { + r1 = ret.Error(1) } - return r1, r2.(io.Reader), r3 + return r0, r1 } -// ContainerIP satisfies testcontainers.Container interface. -func (c *Container) ContainerIP(ctx context.Context) (string, error) { - result := c.Called(ctx) +// Ports provides a mock function with given fields: _a0 +func (_m *Container) Ports(_a0 context.Context) (nat.PortMap, error) { + ret := _m.Called(_a0) + + var r0 nat.PortMap + if rf, ok := ret.Get(0).(func(context.Context) nat.PortMap); ok { + r0 = rf(_a0) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(nat.PortMap) + } + } - return result.String(0), result.Error(1) + var r1 error + if rf, ok := ret.Get(1).(func(context.Context) error); ok { + r1 = rf(_a0) + } else { + r1 = ret.Error(1) + } + + return r0, r1 } -// CopyToContainer satisfies testcontainers.Container interface. -func (c *Container) CopyToContainer(ctx context.Context, fileContent []byte, containerFilePath string, fileMode int64) error { - return c.Called(ctx, fileContent, containerFilePath, fileMode).Error(0) +// SessionID provides a mock function with given fields: +func (_m *Container) SessionID() string { + ret := _m.Called() + + var r0 string + if rf, ok := ret.Get(0).(func() string); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(string) + } + + return r0 } -// CopyFileToContainer satisfies testcontainers.Container interface. -func (c *Container) CopyFileToContainer(ctx context.Context, hostFilePath string, containerFilePath string, fileMode int64) error { - return c.Called(ctx, hostFilePath, containerFilePath, fileMode).Error(0) +// Start provides a mock function with given fields: _a0 +func (_m *Container) Start(_a0 context.Context) error { + ret := _m.Called(_a0) + + var r0 error + if rf, ok := ret.Get(0).(func(context.Context) error); ok { + r0 = rf(_a0) + } else { + r0 = ret.Error(0) + } + + return r0 } -// CopyDirToContainer satisfies testcontainers.Container interface. -func (c *Container) CopyDirToContainer(ctx context.Context, hostDirPath string, containerParentPath string, fileMode int64) error { - return c.Called(ctx, hostDirPath, containerParentPath, fileMode).Error(0) +// StartLogProducer provides a mock function with given fields: _a0 +func (_m *Container) StartLogProducer(_a0 context.Context) error { + ret := _m.Called(_a0) + + var r0 error + if rf, ok := ret.Get(0).(func(context.Context) error); ok { + r0 = rf(_a0) + } else { + r0 = ret.Error(0) + } + + return r0 } -// CopyFileFromContainer satisfies testcontainers.Container interface. -func (c *Container) CopyFileFromContainer(ctx context.Context, filePath string) (io.ReadCloser, error) { - result := c.Called(ctx, filePath) +// State provides a mock function with given fields: _a0 +func (_m *Container) State(_a0 context.Context) (*types.ContainerState, error) { + ret := _m.Called(_a0) + + var r0 *types.ContainerState + if rf, ok := ret.Get(0).(func(context.Context) *types.ContainerState); ok { + r0 = rf(_a0) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*types.ContainerState) + } + } - rc := result.Get(0) - err := result.Error(1) + var r1 error + if rf, ok := ret.Get(1).(func(context.Context) error); ok { + r1 = rf(_a0) + } else { + r1 = ret.Error(1) + } - if rc == nil { - return nil, err + return r0, r1 +} + +// Stop provides a mock function with given fields: _a0, _a1 +func (_m *Container) Stop(_a0 context.Context, _a1 *time.Duration) error { + ret := _m.Called(_a0, _a1) + + var r0 error + if rf, ok := ret.Get(0).(func(context.Context, *time.Duration) error); ok { + r0 = rf(_a0, _a1) + } else { + r0 = ret.Error(0) } - return rc.(io.ReadCloser), err + return r0 } -// IsRunning satisfies testcontainers.Container interface. -func (c *Container) IsRunning() bool { - return c.Called().Bool(0) +// StopLogProducer provides a mock function with given fields: +func (_m *Container) StopLogProducer() error { + ret := _m.Called() + + var r0 error + if rf, ok := ret.Get(0).(func() error); ok { + r0 = rf() + } else { + r0 = ret.Error(0) + } + + return r0 } -// mockContainer mocks testcontainers.Container interface. -func mockContainer(mocks ...func(c *Container)) *Container { - c := &Container{} +// Terminate provides a mock function with given fields: _a0 +func (_m *Container) Terminate(_a0 context.Context) error { + ret := _m.Called(_a0) - for _, m := range mocks { - m(c) + var r0 error + if rf, ok := ret.Get(0).(func(context.Context) error); ok { + r0 = rf(_a0) + } else { + r0 = ret.Error(0) } - return c + return r0 } -// MockContainer creates Container mock with cleanup to ensure all the expectations are met. -// nolint: revive -func MockContainer(mocks ...func(c *Container)) ContainerMocker { - return func(tb testing.TB) *Container { - tb.Helper() +type mockConstructorTestingTNewContainer interface { + mock.TestingT + Cleanup(func()) +} - c := mockContainer(mocks...) +// NewContainer creates a new instance of Container. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +func NewContainer(t mockConstructorTestingTNewContainer) *Container { + mock := &Container{} + mock.Mock.Test(t) - tb.Cleanup(func() { - assert.True(tb, c.Mock.AssertExpectations(tb)) - }) + t.Cleanup(func() { mock.AssertExpectations(t) }) - return c - } + return mock } diff --git a/mock/container_test.go b/mock/container_test.go deleted file mode 100644 index e493250..0000000 --- a/mock/container_test.go +++ /dev/null @@ -1,954 +0,0 @@ -package mock_test - -import ( - "bytes" - "context" - "errors" - "io" - "testing" - "time" - - "github.com/docker/docker/api/types" - "github.com/docker/go-connections/nat" - "github.com/stretchr/testify/assert" - - "go.nhat.io/testcontainers-extra/mock" -) - -func TestContainer_GetContainerID(t *testing.T) { - t.Parallel() - - c := mock.MockContainer(func(c *mock.Container) { - c.On("GetContainerID"). - Return("id") - })(t) - - actual := c.GetContainerID() - expected := "id" - - assert.Equal(t, expected, actual) -} - -func TestContainer_Endpoint(t *testing.T) { - t.Parallel() - - testCases := []struct { - scenario string - mock mock.ContainerMocker - expectedResult string - expectedError error - }{ - { - scenario: "error", - mock: mock.MockContainer(func(c *mock.Container) { - c.On("Endpoint", context.Background(), "proto"). - Return("", errors.New("error")) - }), - expectedError: errors.New("error"), - }, - { - scenario: "no error", - mock: mock.MockContainer(func(c *mock.Container) { - c.On("Endpoint", context.Background(), "proto"). - Return("endpoint", nil) - }), - expectedResult: "endpoint", - }, - } - - for _, tc := range testCases { - tc := tc - t.Run(tc.scenario, func(t *testing.T) { - t.Parallel() - - result, err := tc.mock(t).Endpoint(context.Background(), "proto") - - assert.Equal(t, tc.expectedResult, result) - assert.Equal(t, tc.expectedError, err) - }) - } -} - -func TestContainer_PortEndpoint(t *testing.T) { - t.Parallel() - - testCases := []struct { - scenario string - mock mock.ContainerMocker - expectedResult string - expectedError error - }{ - { - scenario: "error", - mock: mock.MockContainer(func(c *mock.Container) { - c.On("PortEndpoint", context.Background(), nat.Port("8080"), "proto"). - Return("", errors.New("error")) - }), - expectedError: errors.New("error"), - }, - { - scenario: "no error", - mock: mock.MockContainer(func(c *mock.Container) { - c.On("PortEndpoint", context.Background(), nat.Port("8080"), "proto"). - Return("endpoint", nil) - }), - expectedResult: "endpoint", - }, - } - - for _, tc := range testCases { - tc := tc - t.Run(tc.scenario, func(t *testing.T) { - t.Parallel() - - result, err := tc.mock(t).PortEndpoint(context.Background(), "8080", "proto") - - assert.Equal(t, tc.expectedResult, result) - assert.Equal(t, tc.expectedError, err) - }) - } -} - -func TestContainer_Host(t *testing.T) { - t.Parallel() - - testCases := []struct { - scenario string - mock mock.ContainerMocker - expectedResult string - expectedError error - }{ - { - scenario: "error", - mock: mock.MockContainer(func(c *mock.Container) { - c.On("Host", context.Background()). - Return("", errors.New("error")) - }), - expectedError: errors.New("error"), - }, - { - scenario: "no error", - mock: mock.MockContainer(func(c *mock.Container) { - c.On("Host", context.Background()). - Return("localhost", nil) - }), - expectedResult: "localhost", - }, - } - - for _, tc := range testCases { - tc := tc - t.Run(tc.scenario, func(t *testing.T) { - t.Parallel() - - result, err := tc.mock(t).Host(context.Background()) - - assert.Equal(t, tc.expectedResult, result) - assert.Equal(t, tc.expectedError, err) - }) - } -} - -func TestContainer_MappedPort(t *testing.T) { - t.Parallel() - - port := nat.Port("8080") - - testCases := []struct { - scenario string - mock mock.ContainerMocker - expectedResult nat.Port - expectedError error - }{ - { - scenario: "string and error", - mock: mock.MockContainer(func(c *mock.Container) { - c.On("MappedPort", context.Background(), port). - Return("", errors.New("error")) - }), - expectedError: errors.New("error"), - }, - { - scenario: "string and no error", - mock: mock.MockContainer(func(c *mock.Container) { - c.On("MappedPort", context.Background(), port). - Return("8080", nil) - }), - expectedResult: port, - }, - { - scenario: "port and error", - mock: mock.MockContainer(func(c *mock.Container) { - c.On("MappedPort", context.Background(), port). - Return(nat.Port(""), errors.New("error")) - }), - expectedError: errors.New("error"), - }, - { - scenario: "port and no error", - mock: mock.MockContainer(func(c *mock.Container) { - c.On("MappedPort", context.Background(), port). - Return(port, nil) - }), - expectedResult: port, - }, - } - - for _, tc := range testCases { - tc := tc - t.Run(tc.scenario, func(t *testing.T) { - t.Parallel() - - result, err := tc.mock(t).MappedPort(context.Background(), port) - - assert.Equal(t, tc.expectedResult, result) - assert.Equal(t, tc.expectedError, err) - }) - } -} - -func TestContainer_Ports(t *testing.T) { - t.Parallel() - - port := nat.Port("8080") - - testCases := []struct { - scenario string - mock mock.ContainerMocker - expectedResult nat.PortMap - expectedError error - }{ - { - scenario: "error", - mock: mock.MockContainer(func(c *mock.Container) { - c.On("Ports", context.Background()). - Return(nil, errors.New("error")) - }), - expectedError: errors.New("error"), - }, - { - scenario: "no error", - mock: mock.MockContainer(func(c *mock.Container) { - c.On("Ports", context.Background()). - Return(nat.PortMap{port: []nat.PortBinding{}}, nil) - }), - expectedResult: nat.PortMap{port: []nat.PortBinding{}}, - }, - } - - for _, tc := range testCases { - tc := tc - t.Run(tc.scenario, func(t *testing.T) { - t.Parallel() - - result, err := tc.mock(t).Ports(context.Background()) - - assert.Equal(t, tc.expectedResult, result) - assert.Equal(t, tc.expectedError, err) - }) - } -} - -func TestContainer_SessionID(t *testing.T) { - t.Parallel() - - c := mock.MockContainer(func(c *mock.Container) { - c.On("SessionID"). - Return("id") - })(t) - - actual := c.SessionID() - expected := "id" - - assert.Equal(t, expected, actual) -} - -func TestContainer_Start(t *testing.T) { - t.Parallel() - - testCases := []struct { - scenario string - mock mock.ContainerMocker - expectedError error - }{ - { - scenario: "error", - mock: mock.MockContainer(func(c *mock.Container) { - c.On("Start", context.Background()). - Return(errors.New("error")) - }), - expectedError: errors.New("error"), - }, - { - scenario: "no error", - mock: mock.MockContainer(func(c *mock.Container) { - c.On("Start", context.Background()). - Return(nil) - }), - }, - } - - for _, tc := range testCases { - tc := tc - t.Run(tc.scenario, func(t *testing.T) { - t.Parallel() - - err := tc.mock(t).Start(context.Background()) - - assert.Equal(t, tc.expectedError, err) - }) - } -} - -func TestContainer_Stop(t *testing.T) { - t.Parallel() - - duration := time.Second - - testCases := []struct { - scenario string - mock mock.ContainerMocker - expectedError error - }{ - { - scenario: "error", - mock: mock.MockContainer(func(c *mock.Container) { - c.On("Stop", context.Background(), &duration). - Return(errors.New("error")) - }), - expectedError: errors.New("error"), - }, - { - scenario: "no error", - mock: mock.MockContainer(func(c *mock.Container) { - c.On("Stop", context.Background(), &duration). - Return(nil) - }), - }, - } - - for _, tc := range testCases { - tc := tc - t.Run(tc.scenario, func(t *testing.T) { - t.Parallel() - - err := tc.mock(t).Stop(context.Background(), &duration) - - assert.Equal(t, tc.expectedError, err) - }) - } -} - -func TestContainer_Terminate(t *testing.T) { - t.Parallel() - - testCases := []struct { - scenario string - mock mock.ContainerMocker - expectedError error - }{ - { - scenario: "error", - mock: mock.MockContainer(func(c *mock.Container) { - c.On("Terminate", context.Background()). - Return(errors.New("error")) - }), - expectedError: errors.New("error"), - }, - { - scenario: "no error", - mock: mock.MockContainer(func(c *mock.Container) { - c.On("Terminate", context.Background()). - Return(nil) - }), - }, - } - - for _, tc := range testCases { - tc := tc - t.Run(tc.scenario, func(t *testing.T) { - t.Parallel() - - err := tc.mock(t).Terminate(context.Background()) - - assert.Equal(t, tc.expectedError, err) - }) - } -} - -func TestContainer_Logs(t *testing.T) { - t.Parallel() - - rc := io.NopCloser(nil) - - testCases := []struct { - scenario string - mock mock.ContainerMocker - expectedResult io.ReadCloser - expectedError error - }{ - { - scenario: "error", - mock: mock.MockContainer(func(c *mock.Container) { - c.On("Logs", context.Background()). - Return(nil, errors.New("error")) - }), - expectedError: errors.New("error"), - }, - { - scenario: "no error", - mock: mock.MockContainer(func(c *mock.Container) { - c.On("Logs", context.Background()). - Return(rc, nil) - }), - expectedResult: rc, - }, - } - - for _, tc := range testCases { - tc := tc - t.Run(tc.scenario, func(t *testing.T) { - t.Parallel() - - result, err := tc.mock(t).Logs(context.Background()) - - assert.Equal(t, tc.expectedResult, result) - assert.Equal(t, tc.expectedError, err) - }) - } -} - -func TestContainer_FollowOutput(t *testing.T) { - t.Parallel() - - c := mock.MockContainer(func(c *mock.Container) { - c.On("FollowOutput", nil) - })(t) - - c.FollowOutput(nil) -} - -func TestContainer_StartLogProducer(t *testing.T) { - t.Parallel() - - testCases := []struct { - scenario string - mock mock.ContainerMocker - expectedError error - }{ - { - scenario: "error", - mock: mock.MockContainer(func(c *mock.Container) { - c.On("StartLogProducer", context.Background()). - Return(errors.New("error")) - }), - expectedError: errors.New("error"), - }, - { - scenario: "no error", - mock: mock.MockContainer(func(c *mock.Container) { - c.On("StartLogProducer", context.Background()). - Return(nil) - }), - }, - } - - for _, tc := range testCases { - tc := tc - t.Run(tc.scenario, func(t *testing.T) { - t.Parallel() - - err := tc.mock(t).StartLogProducer(context.Background()) - - assert.Equal(t, tc.expectedError, err) - }) - } -} - -func TestContainer_StopLogProducer(t *testing.T) { - t.Parallel() - - testCases := []struct { - scenario string - mock mock.ContainerMocker - expectedError error - }{ - { - scenario: "error", - mock: mock.MockContainer(func(c *mock.Container) { - c.On("StopLogProducer"). - Return(errors.New("error")) - }), - expectedError: errors.New("error"), - }, - { - scenario: "no error", - mock: mock.MockContainer(func(c *mock.Container) { - c.On("StopLogProducer"). - Return(nil) - }), - }, - } - - for _, tc := range testCases { - tc := tc - t.Run(tc.scenario, func(t *testing.T) { - t.Parallel() - - err := tc.mock(t).StopLogProducer() - - assert.Equal(t, tc.expectedError, err) - }) - } -} - -func TestContainer_Name(t *testing.T) { - t.Parallel() - - testCases := []struct { - scenario string - mock mock.ContainerMocker - expectedResult string - expectedError error - }{ - { - scenario: "error", - mock: mock.MockContainer(func(c *mock.Container) { - c.On("Name", context.Background()). - Return("", errors.New("error")) - }), - expectedError: errors.New("error"), - }, - { - scenario: "no error", - mock: mock.MockContainer(func(c *mock.Container) { - c.On("Name", context.Background()). - Return("name", nil) - }), - expectedResult: "name", - }, - } - - for _, tc := range testCases { - tc := tc - t.Run(tc.scenario, func(t *testing.T) { - t.Parallel() - - result, err := tc.mock(t).Name(context.Background()) - - assert.Equal(t, tc.expectedResult, result) - assert.Equal(t, tc.expectedError, err) - }) - } -} - -func TestContainer_State(t *testing.T) { - t.Parallel() - - testCases := []struct { - scenario string - mock mock.ContainerMocker - expectedResult *types.ContainerState - expectedError error - }{ - { - scenario: "error", - mock: mock.MockContainer(func(c *mock.Container) { - c.On("State", context.Background()). - Return(nil, errors.New("error")) - }), - expectedError: errors.New("error"), - }, - { - scenario: "no error", - mock: mock.MockContainer(func(c *mock.Container) { - c.On("State", context.Background()). - Return(&types.ContainerState{ - Status: "running", - Running: true, - }, nil) - }), - expectedResult: &types.ContainerState{ - Status: "running", - Running: true, - }, - }, - } - - for _, tc := range testCases { - tc := tc - t.Run(tc.scenario, func(t *testing.T) { - t.Parallel() - - result, err := tc.mock(t).State(context.Background()) - - assert.Equal(t, tc.expectedResult, result) - assert.Equal(t, tc.expectedError, err) - }) - } -} - -func TestContainer_Networks(t *testing.T) { - t.Parallel() - - testCases := []struct { - scenario string - mock mock.ContainerMocker - expectedResult []string - expectedError error - }{ - { - scenario: "error", - mock: mock.MockContainer(func(c *mock.Container) { - c.On("Networks", context.Background()). - Return(nil, errors.New("error")) - }), - expectedError: errors.New("error"), - }, - { - scenario: "no error", - mock: mock.MockContainer(func(c *mock.Container) { - c.On("Networks", context.Background()). - Return([]string{"network"}, nil) - }), - expectedResult: []string{"network"}, - }, - } - - for _, tc := range testCases { - tc := tc - t.Run(tc.scenario, func(t *testing.T) { - t.Parallel() - - result, err := tc.mock(t).Networks(context.Background()) - - assert.Equal(t, tc.expectedResult, result) - assert.Equal(t, tc.expectedError, err) - }) - } -} - -func TestContainer_NetworkAliases(t *testing.T) { - t.Parallel() - - testCases := []struct { - scenario string - mock mock.ContainerMocker - expectedResult map[string][]string - expectedError error - }{ - { - scenario: "error", - mock: mock.MockContainer(func(c *mock.Container) { - c.On("NetworkAliases", context.Background()). - Return(nil, errors.New("error")) - }), - expectedError: errors.New("error"), - }, - { - scenario: "no error", - mock: mock.MockContainer(func(c *mock.Container) { - c.On("NetworkAliases", context.Background()). - Return(map[string][]string{"net1": {"network"}}, nil) - }), - expectedResult: map[string][]string{"net1": {"network"}}, - }, - } - - for _, tc := range testCases { - tc := tc - t.Run(tc.scenario, func(t *testing.T) { - t.Parallel() - - result, err := tc.mock(t).NetworkAliases(context.Background()) - - assert.Equal(t, tc.expectedResult, result) - assert.Equal(t, tc.expectedError, err) - }) - } -} - -func TestContainer_Exec(t *testing.T) { - t.Parallel() - - rdr := new(bytes.Buffer) - - testCases := []struct { - scenario string - mock mock.ContainerMocker - expectedResult int - expectedReader io.Reader - expectedError error - }{ - { - scenario: "error", - mock: mock.MockContainer(func(c *mock.Container) { - c.On("Exec", context.Background(), []string{"test"}). - Return(1, nil, errors.New("error")) - }), - expectedResult: 1, - expectedError: errors.New("error"), - }, - { - scenario: "no reader", - mock: mock.MockContainer(func(c *mock.Container) { - c.On("Exec", context.Background(), []string{"test"}). - Return(0, nil, nil) - }), - expectedResult: 0, - }, - { - scenario: "has reader", - mock: mock.MockContainer(func(c *mock.Container) { - c.On("Exec", context.Background(), []string{"test"}). - Return(0, rdr, nil) - }), - expectedResult: 0, - expectedReader: rdr, - }, - } - - for _, tc := range testCases { - tc := tc - t.Run(tc.scenario, func(t *testing.T) { - t.Parallel() - - actualResult, actualReader, err := tc.mock(t).Exec(context.Background(), []string{"test"}) - - assert.Equal(t, tc.expectedResult, actualResult) - assert.Equal(t, tc.expectedReader, actualReader) - assert.Equal(t, tc.expectedError, err) - }) - } -} - -func TestContainer_ContainerIP(t *testing.T) { - t.Parallel() - - testCases := []struct { - scenario string - mock mock.ContainerMocker - expectedResult string - expectedError error - }{ - { - scenario: "error", - mock: mock.MockContainer(func(c *mock.Container) { - c.On("ContainerIP", context.Background()). - Return("", errors.New("error")) - }), - expectedError: errors.New("error"), - }, - { - scenario: "no error", - mock: mock.MockContainer(func(c *mock.Container) { - c.On("ContainerIP", context.Background()). - Return("ip", nil) - }), - expectedResult: "ip", - }, - } - - for _, tc := range testCases { - tc := tc - t.Run(tc.scenario, func(t *testing.T) { - t.Parallel() - - result, err := tc.mock(t).ContainerIP(context.Background()) - - assert.Equal(t, tc.expectedResult, result) - assert.Equal(t, tc.expectedError, err) - }) - } -} - -func TestContainer_CopyToContainer(t *testing.T) { - t.Parallel() - - testCases := []struct { - scenario string - mock mock.ContainerMocker - expectedError error - }{ - { - scenario: "error", - mock: mock.MockContainer(func(c *mock.Container) { - c.On("CopyToContainer", context.Background(), []byte(`hello world`), "/tmp/test.csv", int64(0)). - Return(errors.New("error")) - }), - expectedError: errors.New("error"), - }, - { - scenario: "no error", - mock: mock.MockContainer(func(c *mock.Container) { - c.On("CopyToContainer", context.Background(), []byte(`hello world`), "/tmp/test.csv", int64(0)). - Return(nil) - }), - }, - } - - for _, tc := range testCases { - tc := tc - t.Run(tc.scenario, func(t *testing.T) { - t.Parallel() - - err := tc.mock(t).CopyToContainer(context.Background(), []byte(`hello world`), "/tmp/test.csv", 0) - - assert.Equal(t, tc.expectedError, err) - }) - } -} - -func TestContainer_CopyFileToContainer(t *testing.T) { - t.Parallel() - - testCases := []struct { - scenario string - mock mock.ContainerMocker - expectedError error - }{ - { - scenario: "error", - mock: mock.MockContainer(func(c *mock.Container) { - c.On("CopyFileToContainer", context.Background(), "test.csv", "/tmp/test.csv", int64(0)). - Return(errors.New("error")) - }), - expectedError: errors.New("error"), - }, - { - scenario: "no error", - mock: mock.MockContainer(func(c *mock.Container) { - c.On("CopyFileToContainer", context.Background(), "test.csv", "/tmp/test.csv", int64(0)). - Return(nil) - }), - }, - } - - for _, tc := range testCases { - tc := tc - t.Run(tc.scenario, func(t *testing.T) { - t.Parallel() - - err := tc.mock(t).CopyFileToContainer(context.Background(), "test.csv", "/tmp/test.csv", 0) - - assert.Equal(t, tc.expectedError, err) - }) - } -} - -func TestContainer_CopyDirToContainer(t *testing.T) { - t.Parallel() - - testCases := []struct { - scenario string - mock mock.ContainerMocker - expectedError error - }{ - { - scenario: "error", - mock: mock.MockContainer(func(c *mock.Container) { - c.On("CopyDirToContainer", context.Background(), "test", "/tmp", int64(0)). - Return(errors.New("error")) - }), - expectedError: errors.New("error"), - }, - { - scenario: "no error", - mock: mock.MockContainer(func(c *mock.Container) { - c.On("CopyDirToContainer", context.Background(), "test", "/tmp", int64(0)). - Return(nil) - }), - }, - } - - for _, tc := range testCases { - tc := tc - t.Run(tc.scenario, func(t *testing.T) { - t.Parallel() - - err := tc.mock(t).CopyDirToContainer(context.Background(), "test", "/tmp", 0) - - assert.Equal(t, tc.expectedError, err) - }) - } -} - -func TestContainer_CopyFileFromContainer(t *testing.T) { - t.Parallel() - - rc := io.NopCloser(nil) - - testCases := []struct { - scenario string - mock mock.ContainerMocker - expectedResult io.ReadCloser - expectedError error - }{ - { - scenario: "error", - mock: mock.MockContainer(func(c *mock.Container) { - c.On("CopyFileFromContainer", context.Background(), "/tmp/test.csv"). - Return(nil, errors.New("error")) - }), - expectedError: errors.New("error"), - }, - { - scenario: "no error", - mock: mock.MockContainer(func(c *mock.Container) { - c.On("CopyFileFromContainer", context.Background(), "/tmp/test.csv"). - Return(rc, nil) - }), - expectedResult: rc, - }, - } - - for _, tc := range testCases { - tc := tc - t.Run(tc.scenario, func(t *testing.T) { - t.Parallel() - - result, err := tc.mock(t).CopyFileFromContainer(context.Background(), "/tmp/test.csv") - - assert.Equal(t, tc.expectedResult, result) - assert.Equal(t, tc.expectedError, err) - }) - } -} - -func TestContainer_IsRunning(t *testing.T) { - t.Parallel() - - testCases := []struct { - scenario string - mock mock.ContainerMocker - expected bool - }{ - { - scenario: "not running", - mock: mock.MockContainer(func(c *mock.Container) { - c.On("IsRunning"). - Return(false) - }), - expected: false, - }, - { - scenario: "running", - mock: mock.MockContainer(func(c *mock.Container) { - c.On("IsRunning"). - Return(true) - }), - expected: true, - }, - } - - for _, tc := range testCases { - tc := tc - t.Run(tc.scenario, func(t *testing.T) { - t.Parallel() - - actual := tc.mock(t).IsRunning() - - assert.Equal(t, tc.expected, actual) - }) - } -} diff --git a/mock/mock.go b/mock/mock.go new file mode 100644 index 0000000..928a8df --- /dev/null +++ b/mock/mock.go @@ -0,0 +1,33 @@ +package mock + +import ( + "testing" + + "github.com/testcontainers/testcontainers-go" +) + +//go:generate bash -c "mockery --name Container --dir=\"$(go env GOMODCACHE)/github.com/testcontainers/testcontainers-go@$(go list -m -f '{{ .Version }}' github.com/testcontainers/testcontainers-go)\" --output . --outpkg mock --filename container.go" + +// ContainerMocker is Container mocker. +type ContainerMocker func(tb testing.TB) *Container + +// NopContainer is no mock Container. +var NopContainer = MockContainer() + +var _ testcontainers.Container = (*Container)(nil) + +// MockContainer creates Container mock with cleanup to ensure all the expectations are met. +// nolint: revive +func MockContainer(mocks ...func(c *Container)) ContainerMocker { + return func(tb testing.TB) *Container { + tb.Helper() + + c := NewContainer(tb) + + for _, m := range mocks { + m(c) + } + + return c + } +} diff --git a/mock/wait/mock.go b/mock/wait/mock.go new file mode 100644 index 0000000..f561b41 --- /dev/null +++ b/mock/wait/mock.go @@ -0,0 +1,56 @@ +package wait + +import ( + "testing" + + "github.com/testcontainers/testcontainers-go/wait" +) + +//go:generate bash -c "mockery --name Strategy --dir=\"$(go env GOMODCACHE)/github.com/testcontainers/testcontainers-go@$(go list -m -f '{{ .Version }}' github.com/testcontainers/testcontainers-go)/wait\" --output . --outpkg wait --filename strategy.go" +//go:generate bash -c "mockery --name StrategyTarget --dir=\"$(go env GOMODCACHE)/github.com/testcontainers/testcontainers-go@$(go list -m -f '{{ .Version }}' github.com/testcontainers/testcontainers-go)/wait\" --output . --outpkg wait --filename target.go" + +// StrategyMocker is Strategy mocker. +type StrategyMocker func(tb testing.TB) *Strategy + +// NopStrategy is no mock Strategy. +var NopStrategy = MockStrategy() + +var _ wait.Strategy = (*Strategy)(nil) + +// MockStrategy creates Strategy mock with cleanup to ensure all the expectations are met. +func MockStrategy(mocks ...func(s *Strategy)) StrategyMocker { + return func(tb testing.TB) *Strategy { + tb.Helper() + + s := NewStrategy(tb) + + for _, m := range mocks { + m(s) + } + + return s + } +} + +// StrategyTargetMocker is StrategyTarget mocker. +type StrategyTargetMocker func(tb testing.TB) *StrategyTarget + +// NopStrategyTarget is no mock StrategyTarget. +var NopStrategyTarget = MockStrategyTarget() + +var _ wait.StrategyTarget = (*StrategyTarget)(nil) + +// MockStrategyTarget creates StrategyTarget mock with cleanup to ensure all the expectations are met. +func MockStrategyTarget(mocks ...func(t *StrategyTarget)) StrategyTargetMocker { + return func(tb testing.TB) *StrategyTarget { + tb.Helper() + + t := NewStrategyTarget(tb) + + for _, m := range mocks { + m(t) + } + + return t + } +} diff --git a/mock/wait/strategy.go b/mock/wait/strategy.go index 196fb30..a3425a4 100644 --- a/mock/wait/strategy.go +++ b/mock/wait/strategy.go @@ -1,54 +1,44 @@ +// Code generated by mockery v2.14.0. DO NOT EDIT. + package wait import ( - "context" - "testing" + context "context" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/mock" - "github.com/testcontainers/testcontainers-go/wait" + mock "github.com/stretchr/testify/mock" + wait "github.com/testcontainers/testcontainers-go/wait" ) -// StrategyMocker is Strategy mocker. -type StrategyMocker func(tb testing.TB) *Strategy - -// NoMockStrategy is no mock Strategy. -var NoMockStrategy = MockStrategy() - -var _ wait.Strategy = (*Strategy)(nil) - -// Strategy is a wait.Strategy. +// Strategy is an autogenerated mock type for the Strategy type type Strategy struct { mock.Mock } -// WaitUntilReady satisfies wait.Strategy interface. -func (s *Strategy) WaitUntilReady(ctx context.Context, target wait.StrategyTarget) error { - return s.Called(ctx, target).Error(0) -} - -// mockStrategy mocks wait.Strategy interface. -func mockStrategy(mocks ...func(s *Strategy)) *Strategy { - s := &Strategy{} +// WaitUntilReady provides a mock function with given fields: _a0, _a1 +func (_m *Strategy) WaitUntilReady(_a0 context.Context, _a1 wait.StrategyTarget) error { + ret := _m.Called(_a0, _a1) - for _, m := range mocks { - m(s) + var r0 error + if rf, ok := ret.Get(0).(func(context.Context, wait.StrategyTarget) error); ok { + r0 = rf(_a0, _a1) + } else { + r0 = ret.Error(0) } - return s + return r0 } -// MockStrategy creates Strategy mock with cleanup to ensure all the expectations are met. -func MockStrategy(mocks ...func(s *Strategy)) StrategyMocker { - return func(tb testing.TB) *Strategy { - tb.Helper() +type mockConstructorTestingTNewStrategy interface { + mock.TestingT + Cleanup(func()) +} - s := mockStrategy(mocks...) +// NewStrategy creates a new instance of Strategy. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +func NewStrategy(t mockConstructorTestingTNewStrategy) *Strategy { + mock := &Strategy{} + mock.Mock.Test(t) - tb.Cleanup(func() { - assert.True(tb, s.Mock.AssertExpectations(tb)) - }) + t.Cleanup(func() { mock.AssertExpectations(t) }) - return s - } + return mock } diff --git a/mock/wait/strategy_test.go b/mock/wait/strategy_test.go deleted file mode 100644 index 13081d1..0000000 --- a/mock/wait/strategy_test.go +++ /dev/null @@ -1,49 +0,0 @@ -package wait_test - -import ( - "context" - "errors" - "testing" - - "github.com/stretchr/testify/assert" - - "go.nhat.io/testcontainers-extra/mock/wait" -) - -func TestStrategy_WaitUntilReady(t *testing.T) { - t.Parallel() - - testCases := []struct { - scenario string - mock wait.StrategyMocker - expected error - }{ - { - scenario: "error", - mock: wait.MockStrategy(func(s *wait.Strategy) { - s.On("WaitUntilReady", context.Background(), nil). - Return(errors.New("error")) - }), - expected: errors.New("error"), - }, - { - scenario: "no error", - mock: wait.MockStrategy(func(s *wait.Strategy) { - s.On("WaitUntilReady", context.Background(), nil). - Return(nil) - }), - expected: nil, - }, - } - - for _, tc := range testCases { - tc := tc - t.Run(tc.scenario, func(t *testing.T) { - t.Parallel() - - actual := tc.mock(t).WaitUntilReady(context.Background(), nil) - - assert.Equal(t, tc.expected, actual) - }) - } -} diff --git a/mock/wait/target.go b/mock/wait/target.go index 12e8414..893229c 100644 --- a/mock/wait/target.go +++ b/mock/wait/target.go @@ -1,127 +1,175 @@ +// Code generated by mockery v2.14.0. DO NOT EDIT. + package wait import ( - "context" - "io" - "testing" - - "github.com/docker/docker/api/types" - "github.com/docker/go-connections/nat" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/mock" - "github.com/testcontainers/testcontainers-go/wait" -) + context "context" + io "io" -// StrategyTargetMocker is StrategyTarget mocker. -type StrategyTargetMocker func(tb testing.TB) *StrategyTarget + mock "github.com/stretchr/testify/mock" -// NoMockStrategyTarget is no mock StrategyTarget. -var NoMockStrategyTarget = MockStrategyTarget() + nat "github.com/docker/go-connections/nat" -var _ wait.StrategyTarget = (*StrategyTarget)(nil) + types "github.com/docker/docker/api/types" +) -// StrategyTarget is a wait.StrategyTarget. +// StrategyTarget is an autogenerated mock type for the StrategyTarget type type StrategyTarget struct { mock.Mock } -// Host satisfies wait.StrategyTarget interface. -func (s *StrategyTarget) Host(ctx context.Context) (string, error) { - result := s.Called(ctx) - - return result.String(0), result.Error(1) -} +// Exec provides a mock function with given fields: ctx, cmd +func (_m *StrategyTarget) Exec(ctx context.Context, cmd []string) (int, io.Reader, error) { + ret := _m.Called(ctx, cmd) -// MappedPort satisfies wait.StrategyTarget interface. -func (s *StrategyTarget) MappedPort(ctx context.Context, port nat.Port) (nat.Port, error) { - result := s.Called(ctx, port) + var r0 int + if rf, ok := ret.Get(0).(func(context.Context, []string) int); ok { + r0 = rf(ctx, cmd) + } else { + r0 = ret.Get(0).(int) + } - p := result.Get(0) - err := result.Error(1) + var r1 io.Reader + if rf, ok := ret.Get(1).(func(context.Context, []string) io.Reader); ok { + r1 = rf(ctx, cmd) + } else { + if ret.Get(1) != nil { + r1 = ret.Get(1).(io.Reader) + } + } - if s, ok := p.(string); ok { - return nat.Port(s), err + var r2 error + if rf, ok := ret.Get(2).(func(context.Context, []string) error); ok { + r2 = rf(ctx, cmd) + } else { + r2 = ret.Error(2) } - return p.(nat.Port), err + return r0, r1, r2 } -// Logs satisfies wait.StrategyTarget interface. -func (s *StrategyTarget) Logs(ctx context.Context) (io.ReadCloser, error) { - result := s.Called(ctx) +// Host provides a mock function with given fields: _a0 +func (_m *StrategyTarget) Host(_a0 context.Context) (string, error) { + ret := _m.Called(_a0) - rc := result.Get(0) - err := result.Error(1) + var r0 string + if rf, ok := ret.Get(0).(func(context.Context) string); ok { + r0 = rf(_a0) + } else { + r0 = ret.Get(0).(string) + } - if rc == nil { - return nil, err + var r1 error + if rf, ok := ret.Get(1).(func(context.Context) error); ok { + r1 = rf(_a0) + } else { + r1 = ret.Error(1) } - return rc.(io.ReadCloser), err + return r0, r1 } -// Exec satisfies wait.StrategyTarget interface. -func (s *StrategyTarget) Exec(ctx context.Context, cmd []string) (int, io.Reader, error) { - result := s.Called(ctx, cmd) - - r1, r2, r3 := result.Int(0), result.Get(1), result.Error(2) +// Logs provides a mock function with given fields: _a0 +func (_m *StrategyTarget) Logs(_a0 context.Context) (io.ReadCloser, error) { + ret := _m.Called(_a0) + + var r0 io.ReadCloser + if rf, ok := ret.Get(0).(func(context.Context) io.ReadCloser); ok { + r0 = rf(_a0) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(io.ReadCloser) + } + } - if r2 == nil { - return r1, nil, r3 + var r1 error + if rf, ok := ret.Get(1).(func(context.Context) error); ok { + r1 = rf(_a0) + } else { + r1 = ret.Error(1) } - return r1, r2.(io.Reader), r3 + return r0, r1 } -// Ports satisfies wait.StrategyTarget interface. -func (s *StrategyTarget) Ports(ctx context.Context) (nat.PortMap, error) { - result := s.Called(ctx) +// MappedPort provides a mock function with given fields: _a0, _a1 +func (_m *StrategyTarget) MappedPort(_a0 context.Context, _a1 nat.Port) (nat.Port, error) { + ret := _m.Called(_a0, _a1) - r1, r2 := result.Get(0), result.Error(1) + var r0 nat.Port + if rf, ok := ret.Get(0).(func(context.Context, nat.Port) nat.Port); ok { + r0 = rf(_a0, _a1) + } else { + r0 = ret.Get(0).(nat.Port) + } - if r1 == nil { - return nil, r2 + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, nat.Port) error); ok { + r1 = rf(_a0, _a1) + } else { + r1 = ret.Error(1) } - return r1.(nat.PortMap), r2 + return r0, r1 } -// State satisfies wait.StrategyTarget interface. -func (s *StrategyTarget) State(ctx context.Context) (*types.ContainerState, error) { - result := s.Called(ctx) - - state := result.Get(0) - err := result.Error(1) +// Ports provides a mock function with given fields: ctx +func (_m *StrategyTarget) Ports(ctx context.Context) (nat.PortMap, error) { + ret := _m.Called(ctx) + + var r0 nat.PortMap + if rf, ok := ret.Get(0).(func(context.Context) nat.PortMap); ok { + r0 = rf(ctx) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(nat.PortMap) + } + } - if state == nil { - return nil, err + var r1 error + if rf, ok := ret.Get(1).(func(context.Context) error); ok { + r1 = rf(ctx) + } else { + r1 = ret.Error(1) } - return state.(*types.ContainerState), err + return r0, r1 } -// mockStrategyTarget mocks wait.StrategyTarget interface. -func mockStrategyTarget(mocks ...func(t *StrategyTarget)) *StrategyTarget { - t := &StrategyTarget{} +// State provides a mock function with given fields: _a0 +func (_m *StrategyTarget) State(_a0 context.Context) (*types.ContainerState, error) { + ret := _m.Called(_a0) + + var r0 *types.ContainerState + if rf, ok := ret.Get(0).(func(context.Context) *types.ContainerState); ok { + r0 = rf(_a0) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*types.ContainerState) + } + } - for _, m := range mocks { - m(t) + var r1 error + if rf, ok := ret.Get(1).(func(context.Context) error); ok { + r1 = rf(_a0) + } else { + r1 = ret.Error(1) } - return t + return r0, r1 } -// MockStrategyTarget creates StrategyTarget mock with cleanup to ensure all the expectations are met. -func MockStrategyTarget(mocks ...func(t *StrategyTarget)) StrategyTargetMocker { - return func(tb testing.TB) *StrategyTarget { - tb.Helper() +type mockConstructorTestingTNewStrategyTarget interface { + mock.TestingT + Cleanup(func()) +} - t := mockStrategyTarget(mocks...) +// NewStrategyTarget creates a new instance of StrategyTarget. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +func NewStrategyTarget(t mockConstructorTestingTNewStrategyTarget) *StrategyTarget { + mock := &StrategyTarget{} + mock.Mock.Test(t) - tb.Cleanup(func() { - assert.True(tb, t.Mock.AssertExpectations(tb)) - }) + t.Cleanup(func() { mock.AssertExpectations(t) }) - return t - } + return mock } diff --git a/mock/wait/target_test.go b/mock/wait/target_test.go deleted file mode 100644 index 3965ba7..0000000 --- a/mock/wait/target_test.go +++ /dev/null @@ -1,299 +0,0 @@ -package wait_test - -import ( - "bytes" - "context" - "errors" - "io" - "testing" - - "github.com/docker/docker/api/types" - "github.com/docker/go-connections/nat" - "github.com/stretchr/testify/assert" - - "go.nhat.io/testcontainers-extra/mock/wait" -) - -func TestStrategyTarget_Host(t *testing.T) { - t.Parallel() - - testCases := []struct { - scenario string - mock wait.StrategyTargetMocker - expectedResult string - expectedError error - }{ - { - scenario: "error", - mock: wait.MockStrategyTarget(func(t *wait.StrategyTarget) { - t.On("Host", context.Background()). - Return("", errors.New("error")) - }), - expectedError: errors.New("error"), - }, - { - scenario: "error", - mock: wait.MockStrategyTarget(func(t *wait.StrategyTarget) { - t.On("Host", context.Background()). - Return("localhost", nil) - }), - expectedResult: "localhost", - }, - } - - for _, tc := range testCases { - tc := tc - t.Run(tc.scenario, func(t *testing.T) { - t.Parallel() - - result, err := tc.mock(t).Host(context.Background()) - - assert.Equal(t, tc.expectedResult, result) - assert.Equal(t, tc.expectedError, err) - }) - } -} - -func TestStrategyTarget_MappedPort(t *testing.T) { - t.Parallel() - - port := nat.Port("8080") - - testCases := []struct { - scenario string - mock wait.StrategyTargetMocker - expectedResult nat.Port - expectedError error - }{ - { - scenario: "string and error", - mock: wait.MockStrategyTarget(func(t *wait.StrategyTarget) { - t.On("MappedPort", context.Background(), port). - Return("", errors.New("error")) - }), - expectedError: errors.New("error"), - }, - { - scenario: "string and no error", - mock: wait.MockStrategyTarget(func(t *wait.StrategyTarget) { - t.On("MappedPort", context.Background(), port). - Return("8080", nil) - }), - expectedResult: port, - }, - { - scenario: "port and error", - mock: wait.MockStrategyTarget(func(t *wait.StrategyTarget) { - t.On("MappedPort", context.Background(), port). - Return(nat.Port(""), errors.New("error")) - }), - expectedError: errors.New("error"), - }, - { - scenario: "port and no error", - mock: wait.MockStrategyTarget(func(t *wait.StrategyTarget) { - t.On("MappedPort", context.Background(), port). - Return(port, nil) - }), - expectedResult: port, - }, - } - - for _, tc := range testCases { - tc := tc - t.Run(tc.scenario, func(t *testing.T) { - t.Parallel() - - result, err := tc.mock(t).MappedPort(context.Background(), port) - - assert.Equal(t, tc.expectedResult, result) - assert.Equal(t, tc.expectedError, err) - }) - } -} - -func TestStrategyTarget_Logs(t *testing.T) { - t.Parallel() - - rc := io.NopCloser(nil) - - testCases := []struct { - scenario string - mock wait.StrategyTargetMocker - expectedResult io.ReadCloser - expectedError error - }{ - { - scenario: "error", - mock: wait.MockStrategyTarget(func(t *wait.StrategyTarget) { - t.On("Logs", context.Background()). - Return(nil, errors.New("error")) - }), - expectedError: errors.New("error"), - }, - { - scenario: "no error", - mock: wait.MockStrategyTarget(func(t *wait.StrategyTarget) { - t.On("Logs", context.Background()). - Return(rc, nil) - }), - expectedResult: rc, - }, - } - - for _, tc := range testCases { - tc := tc - t.Run(tc.scenario, func(t *testing.T) { - t.Parallel() - - result, err := tc.mock(t).Logs(context.Background()) - - assert.Equal(t, tc.expectedResult, result) - assert.Equal(t, tc.expectedError, err) - }) - } -} - -func TestStrategyTarget_Exec(t *testing.T) { - t.Parallel() - - rdr := new(bytes.Buffer) - - testCases := []struct { - scenario string - mock wait.StrategyTargetMocker - expectedResult int - expectedReader io.Reader - expectedError error - }{ - { - scenario: "error", - mock: wait.MockStrategyTarget(func(t *wait.StrategyTarget) { - t.On("Exec", context.Background(), []string{"test"}). - Return(1, nil, errors.New("error")) - }), - expectedResult: 1, - expectedError: errors.New("error"), - }, - { - scenario: "no reader", - mock: wait.MockStrategyTarget(func(t *wait.StrategyTarget) { - t.On("Exec", context.Background(), []string{"test"}). - Return(0, nil, nil) - }), - expectedResult: 0, - }, - { - scenario: "has reader", - mock: wait.MockStrategyTarget(func(t *wait.StrategyTarget) { - t.On("Exec", context.Background(), []string{"test"}). - Return(0, rdr, nil) - }), - expectedResult: 0, - expectedReader: rdr, - }, - } - - for _, tc := range testCases { - tc := tc - t.Run(tc.scenario, func(t *testing.T) { - t.Parallel() - - actualResult, actualReader, err := tc.mock(t).Exec(context.Background(), []string{"test"}) - - assert.Equal(t, tc.expectedResult, actualResult) - assert.Equal(t, tc.expectedReader, actualReader) - assert.Equal(t, tc.expectedError, err) - }) - } -} - -func TestStrategyTarget_Ports(t *testing.T) { - t.Parallel() - - testCases := []struct { - scenario string - mock wait.StrategyTargetMocker - expectedResult nat.PortMap - expectedError error - }{ - { - scenario: "error", - mock: wait.MockStrategyTarget(func(t *wait.StrategyTarget) { - t.On("Ports", context.Background()). - Return(nil, errors.New("error")) - }), - expectedError: errors.New("error"), - }, - { - scenario: "no error", - mock: wait.MockStrategyTarget(func(t *wait.StrategyTarget) { - t.On("Ports", context.Background()). - Return(nat.PortMap{ - "80/tcp": []nat.PortBinding{}, - }, nil) - }), - expectedResult: nat.PortMap{ - "80/tcp": []nat.PortBinding{}, - }, - }, - } - - for _, tc := range testCases { - tc := tc - t.Run(tc.scenario, func(t *testing.T) { - t.Parallel() - - result, err := tc.mock(t).Ports(context.Background()) - - assert.Equal(t, tc.expectedResult, result) - assert.Equal(t, tc.expectedError, err) - }) - } -} - -func TestStrategyTarget_State(t *testing.T) { - t.Parallel() - - testCases := []struct { - scenario string - mock wait.StrategyTargetMocker - expectedResult *types.ContainerState - expectedError error - }{ - { - scenario: "error", - mock: wait.MockStrategyTarget(func(t *wait.StrategyTarget) { - t.On("State", context.Background()). - Return(nil, errors.New("error")) - }), - expectedError: errors.New("error"), - }, - { - scenario: "no error", - mock: wait.MockStrategyTarget(func(t *wait.StrategyTarget) { - t.On("State", context.Background()). - Return(&types.ContainerState{ - Status: "running", - Running: true, - }, nil) - }), - expectedResult: &types.ContainerState{ - Status: "running", - Running: true, - }, - }, - } - - for _, tc := range testCases { - tc := tc - t.Run(tc.scenario, func(t *testing.T) { - t.Parallel() - - result, err := tc.mock(t).State(context.Background()) - - assert.Equal(t, tc.expectedResult, result) - assert.Equal(t, tc.expectedError, err) - }) - } -}