From bed3d69a6f2f59f7f4b7bb87a83ffcc375728c5b Mon Sep 17 00:00:00 2001 From: Lior Nabat Date: Sat, 22 Oct 2022 18:51:11 +0300 Subject: [PATCH 01/87] Add new PubSub component - KubeMQ Kubernetes message broker --- go.mod | 457 ++++---- go.sum | 1374 +++++++++++++++++------ pubsub/kubemq/kubemq.go | 73 ++ pubsub/kubemq/kubemq_events.go | 169 +++ pubsub/kubemq/kubemq_events_test.go | 195 ++++ pubsub/kubemq/kubemq_eventstore.go | 199 ++++ pubsub/kubemq/kubemq_eventstore_test.go | 217 ++++ pubsub/kubemq/kubemq_test.go | 152 +++ pubsub/kubemq/metadata.go | 85 ++ pubsub/kubemq/metadata_test.go | 154 +++ tests/config/pubsub/kubemq/pubsub.yml | 12 + tests/config/pubsub/tests.yml | 30 +- tests/conformance/common.go | 3 + 13 files changed, 2513 insertions(+), 607 deletions(-) create mode 100644 pubsub/kubemq/kubemq.go create mode 100644 pubsub/kubemq/kubemq_events.go create mode 100644 pubsub/kubemq/kubemq_events_test.go create mode 100644 pubsub/kubemq/kubemq_eventstore.go create mode 100644 pubsub/kubemq/kubemq_eventstore_test.go create mode 100644 pubsub/kubemq/kubemq_test.go create mode 100644 pubsub/kubemq/metadata.go create mode 100644 pubsub/kubemq/metadata_test.go create mode 100644 tests/config/pubsub/kubemq/pubsub.yml diff --git a/go.mod b/go.mod index e6ec4ffad..ccfd6e3a7 100644 --- a/go.mod +++ b/go.mod @@ -3,364 +3,377 @@ module github.com/dapr/components-contrib go 1.19 require ( - cloud.google.com/go/datastore v1.8.0 - cloud.google.com/go/pubsub v1.25.1 - cloud.google.com/go/secretmanager v1.7.0 - cloud.google.com/go/storage v1.27.0 - dubbo.apache.org/dubbo-go/v3 v3.0.3-0.20220610080020-48691a404537 + cloud.google.com/go v0.100.2 // indirect + cloud.google.com/go/datastore v1.1.0 + cloud.google.com/go/pubsub v1.12.2 + cloud.google.com/go/storage v1.10.0 github.com/Azure/azure-amqp-common-go/v3 v3.2.3 github.com/Azure/azure-event-hubs-go/v3 v3.3.18 github.com/Azure/azure-sdk-for-go v65.0.0+incompatible - github.com/Azure/azure-sdk-for-go/sdk/azcore v1.1.4 + github.com/Azure/azure-sdk-for-go/sdk/azcore v1.1.3 github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.1.0 - github.com/Azure/azure-sdk-for-go/sdk/data/azappconfig v0.4.1 github.com/Azure/azure-sdk-for-go/sdk/data/azcosmos v0.3.2 github.com/Azure/azure-sdk-for-go/sdk/data/aztables v1.0.1 github.com/Azure/azure-sdk-for-go/sdk/keyvault/azsecrets v0.10.1 - github.com/Azure/azure-sdk-for-go/sdk/messaging/azservicebus v1.1.1 + github.com/Azure/azure-sdk-for-go/sdk/messaging/azservicebus v1.1.0 github.com/Azure/azure-storage-blob-go v0.10.0 github.com/Azure/azure-storage-queue-go v0.0.0-20191125232315-636801874cdd - github.com/Azure/go-amqp v0.17.5 - github.com/Azure/go-autorest/autorest v0.11.28 - github.com/Azure/go-autorest/autorest/adal v0.9.21 + github.com/Azure/go-amqp v0.17.4 + github.com/Azure/go-autorest/autorest v0.11.27 + github.com/Azure/go-autorest/autorest/adal v0.9.18 github.com/Azure/go-autorest/autorest/azure/auth v0.5.11 - github.com/Azure/go-autorest/autorest/to v0.4.0 github.com/DATA-DOG/go-sqlmock v1.5.0 - github.com/Shopify/sarama v1.37.2 - github.com/aerospike/aerospike-client-go v4.5.2+incompatible + github.com/Shopify/sarama v1.30.0 + github.com/StackExchange/wmi v0.0.0-20210224194228-fe8f1750fd46 // indirect + github.com/aerospike/aerospike-client-go v4.5.0+incompatible github.com/agrea/ptr v0.0.0-20180711073057-77a518d99b7b + github.com/ajg/form v1.5.1 // indirect github.com/alibaba/sentinel-golang v1.0.4 - github.com/alibabacloud-go/darabonba-openapi v0.2.1 - github.com/alibabacloud-go/oos-20190601 v1.0.4 - github.com/alibabacloud-go/tea v1.1.19 - github.com/alibabacloud-go/tea-utils v1.4.5 - github.com/alicebob/miniredis/v2 v2.23.0 - github.com/aliyun/aliyun-log-go-sdk v0.1.38 - github.com/aliyun/aliyun-oss-go-sdk v2.2.5+incompatible - github.com/aliyun/aliyun-tablestore-go-sdk v1.7.7 - github.com/apache/dubbo-go-hessian2 v1.11.1 - github.com/apache/pulsar-client-go v0.9.0 + github.com/alicebob/miniredis/v2 v2.13.3 + github.com/aliyun/aliyun-oss-go-sdk v2.0.7+incompatible + github.com/aliyun/aliyun-tablestore-go-sdk v1.6.0 + github.com/andybalholm/brotli v1.0.4 // indirect github.com/apache/rocketmq-client-go/v2 v2.1.1-rc2 - github.com/aws/aws-sdk-go v1.44.119 - github.com/bradfitz/gomemcache v0.0.0-20220106215444-fb4bf637b56d - github.com/camunda/zeebe/clients/go/v8 v8.1.2 + github.com/apache/thrift v0.16.0 // indirect + github.com/aws/aws-sdk-go v1.43.16 + github.com/baiyubin/aliyun-sts-go-sdk v0.0.0-20180326062324-cfa1a18b161f // indirect + github.com/bradfitz/gomemcache v0.0.0-20190913173617-a41fca850d0b + github.com/buger/jsonparser v1.1.1 // indirect + github.com/camunda/zeebe/clients/go/v8 v8.0.4 github.com/cenkalti/backoff/v4 v4.1.3 github.com/cinience/go_rocketmq v0.0.2 - github.com/coreos/go-oidc v2.2.1+incompatible + github.com/coreos/go-oidc v2.1.0+incompatible github.com/cyphar/filepath-securejoin v0.2.3 github.com/dancannon/gorethink v4.0.0+incompatible github.com/dapr/kit v0.0.2 - github.com/denisenkom/go-mssqldb v0.12.3 - github.com/dghubble/go-twitter v0.0.0-20220816163853-8a0df96f1e6d - github.com/dghubble/oauth1 v0.7.1 + github.com/deepmap/oapi-codegen v1.8.1 // indirect + github.com/denisenkom/go-mssqldb v0.0.0-20210411162248-d9abbec934ba + github.com/dghubble/go-twitter v0.0.0-20190719072343-39e5462e111f + github.com/dghubble/oauth1 v0.6.0 github.com/didip/tollbooth v4.0.2+incompatible - github.com/eclipse/paho.mqtt.golang v1.4.2-0.20221018190109-a1800d8df9a4 + github.com/eapache/go-resiliency v1.2.0 // indirect + github.com/eclipse/paho.mqtt.golang v1.3.5 github.com/fasthttp-contrib/sessions v0.0.0-20160905201309-74f6ac73d5d5 + github.com/fatih/color v1.13.0 // indirect + github.com/gavv/httpexpect v2.0.0+incompatible // indirect github.com/ghodss/yaml v1.0.0 + github.com/go-errors/errors v1.4.0 // indirect + github.com/go-logr/logr v1.2.3 // indirect + github.com/go-ole/go-ole v1.2.5 // indirect github.com/go-redis/redis/v8 v8.11.5 github.com/go-sql-driver/mysql v1.6.0 - github.com/gocql/gocql v1.2.1 - github.com/golang-jwt/jwt/v4 v4.4.2 + github.com/gocql/gocql v0.0.0-20210515062232-b7ef815b4556 + github.com/golang-jwt/jwt v3.2.2+incompatible // indirect github.com/golang/mock v1.6.0 + github.com/golang/snappy v0.0.4 // indirect github.com/google/uuid v1.3.0 - github.com/googleapis/gax-go/v2 v2.6.0 + github.com/googleapis/gnostic v0.5.5 // indirect github.com/gorilla/mux v1.8.0 - github.com/grandcat/zeroconf v1.0.0 - github.com/hashicorp/consul/api v1.13.0 + github.com/grandcat/zeroconf v0.0.0-20190424104450-85eadb44205c + github.com/hashicorp/consul/api v1.12.0 github.com/hashicorp/go-multierror v1.1.1 github.com/hashicorp/golang-lru v0.5.4 github.com/hazelcast/hazelcast-go-client v0.0.0-20190530123621-6cf767c2f31a - github.com/huaweicloud/huaweicloud-sdk-go-obs v3.21.12+incompatible - github.com/huaweicloud/huaweicloud-sdk-go-v3 v0.1.5 + github.com/imdario/mergo v0.3.12 // indirect + github.com/imkira/go-interpol v1.1.0 // indirect github.com/influxdata/influxdb-client-go v1.4.0 - github.com/jackc/pgx/v5 v5.0.3 + github.com/influxdata/line-protocol v0.0.0-20210311194329-9aa0e372d097 // indirect + github.com/jcmturner/gofork v1.0.0 // indirect github.com/json-iterator/go v1.1.12 - github.com/labd/commercetools-go-sdk v1.1.0 + github.com/kataras/go-errors v0.0.3 // indirect + github.com/kataras/go-serializer v0.0.4 // indirect github.com/machinebox/graphql v0.2.2 github.com/matoous/go-nanoid/v2 v2.0.0 + github.com/matryer/is v1.4.0 // indirect + github.com/mattn/go-isatty v0.0.14 // indirect + github.com/microcosm-cc/bluemonday v1.0.17 // indirect + github.com/miekg/dns v1.1.50 // indirect github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 - github.com/mrz1836/postmark v1.2.11 - github.com/nacos-group/nacos-sdk-go/v2 v2.1.0 - github.com/nats-io/nats-server/v2 v2.9.3 - github.com/nats-io/nats.go v1.18.0 - github.com/nats-io/nkeys v0.3.0 - github.com/nats-io/stan.go v0.10.3 - github.com/open-policy-agent/opa v0.45.0 - github.com/oracle/oci-go-sdk/v54 v54.0.0 - github.com/pashagolub/pgxmock/v2 v2.1.0 + github.com/moul/http2curl v1.0.0 // indirect + github.com/nats-io/nats-server/v2 v2.7.4 + github.com/nats-io/nats-streaming-server v0.21.2 // indirect + github.com/nats-io/nats.go v1.13.1-0.20220308171302-2f2f6968e98d + github.com/nats-io/stan.go v0.8.3 + github.com/open-policy-agent/opa v0.43.1 github.com/patrickmn/go-cache v2.1.0+incompatible github.com/pkg/errors v0.9.1 - github.com/rabbitmq/amqp091-go v1.5.0 + github.com/pquerna/cachecontrol v0.0.0-20180517163645-1555304b9b35 // indirect github.com/robfig/cron/v3 v3.0.1 - github.com/samuel/go-zookeeper v0.0.0-20201211165307-7117e9ea2414 - github.com/sendgrid/sendgrid-go v3.12.0+incompatible - github.com/sijms/go-ora/v2 v2.5.3 + github.com/russross/blackfriday v2.0.0+incompatible // indirect + github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da + github.com/sendgrid/rest v2.6.9+incompatible // indirect + github.com/sendgrid/sendgrid-go v3.11.1+incompatible + github.com/sergi/go-diff v1.2.0 // indirect github.com/stretchr/testify v1.8.0 - github.com/supplyon/gremcos v0.1.38 - github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.518 - github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssm v1.0.518 - github.com/valyala/fasthttp v1.40.0 + github.com/supplyon/gremcos v0.1.0 + github.com/tidwall/gjson v1.14.0 // indirect + github.com/tidwall/pretty v1.2.0 // indirect + github.com/valyala/fasthttp v1.34.0 github.com/vmware/vmware-go-kcl v1.5.0 - github.com/wapc/wapc-go v0.5.4 - github.com/xdg-go/scram v1.1.1 - go.mongodb.org/mongo-driver v1.10.3 - go.uber.org/atomic v1.10.0 - go.uber.org/ratelimit v0.2.0 - golang.org/x/crypto v0.1.0 - golang.org/x/net v0.1.0 - golang.org/x/oauth2 v0.1.0 - google.golang.org/api v0.100.0 - google.golang.org/genproto v0.0.0-20221018160656-63c7b68cfc55 - google.golang.org/grpc v1.50.1 - gopkg.in/couchbase/gocb.v1 v1.6.7 + github.com/xeipuuv/gojsonschema v1.2.0 // indirect + github.com/yalp/jsonpath v0.0.0-20180802001716-5cc68e5049a0 // indirect + github.com/yudai/gojsondiff v1.0.0 // indirect + github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82 // indirect + github.com/yuin/gopher-lua v0.0.0-20200603152657-dc2b0ca8b37e // indirect + go.mongodb.org/mongo-driver v1.5.1 + go.opencensus.io v0.23.0 // indirect + golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90 + golang.org/x/net v0.0.0-20220630215102-69896b714898 + golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a + google.golang.org/api v0.74.0 + google.golang.org/genproto v0.0.0-20220405205423-9d709892a2bf + google.golang.org/grpc v1.48.0 + gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect + gopkg.in/couchbase/gocbcore.v7 v7.1.18 // indirect + gopkg.in/couchbaselabs/gocbconnstr.v1 v1.0.4 // indirect + gopkg.in/couchbaselabs/gojcbmock.v1 v1.0.4 // indirect gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df + gopkg.in/gorethink/gorethink.v4 v4.1.0 // indirect + gopkg.in/kataras/go-serializer.v0 v0.0.4 // indirect + gopkg.in/square/go-jose.v2 v2.5.1 // indirect gopkg.in/yaml.v3 v3.0.1 - k8s.io/api v0.25.3 - k8s.io/apiextensions-apiserver v0.25.3 - k8s.io/apimachinery v0.25.3 - k8s.io/client-go v0.25.3 - k8s.io/utils v0.0.0-20221012122500-cfd413dd9e85 + k8s.io/api v0.23.0 + k8s.io/apiextensions-apiserver v0.23.0 + k8s.io/apimachinery v0.23.0 + k8s.io/client-go v0.23.0 ) require ( - cloud.google.com/go v0.104.0 // indirect - cloud.google.com/go/compute v1.10.0 // indirect + github.com/alibabacloud-go/darabonba-openapi v0.1.16 + github.com/alibabacloud-go/oos-20190601 v1.0.1 + github.com/alibabacloud-go/tea v1.1.17 + github.com/oracle/oci-go-sdk/v54 v54.0.0 + github.com/sijms/go-ora/v2 v2.2.22 +) + +require ( + github.com/mrz1836/postmark v1.2.9 + github.com/nats-io/nkeys v0.3.0 +) + +require ( + cloud.google.com/go/secretmanager v1.4.0 + dubbo.apache.org/dubbo-go/v3 v3.0.3-0.20220610080020-48691a404537 + github.com/Azure/azure-sdk-for-go/sdk/data/azappconfig v0.4.1 + github.com/aliyun/aliyun-log-go-sdk v0.1.37 + github.com/apache/dubbo-go-hessian2 v1.11.0 + github.com/huaweicloud/huaweicloud-sdk-go-obs v3.21.12+incompatible + github.com/huaweicloud/huaweicloud-sdk-go-v3 v0.0.87 + github.com/jackc/pgx/v5 v5.0.0 + github.com/kubemq-io/kubemq-go v1.7.6 + github.com/labd/commercetools-go-sdk v1.1.0 + github.com/nacos-group/nacos-sdk-go/v2 v2.0.1 + github.com/pashagolub/pgxmock/v2 v2.0.0-beta2 + github.com/rabbitmq/amqp091-go v1.3.4 + github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.476 + github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssm v1.0.476 + github.com/wapc/wapc-go v0.5.2 + go.uber.org/ratelimit v0.2.0 + gopkg.in/couchbase/gocb.v1 v1.6.4 +) + +require gopkg.in/couchbaselabs/jsonx.v1 v1.0.1 // indirect + +require ( + cloud.google.com/go/compute v1.5.0 // indirect cloud.google.com/go/iam v0.3.0 // indirect + cloud.google.com/go/kms v1.4.0 // indirect contrib.go.opencensus.io/exporter/prometheus v0.4.1 // indirect github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect - github.com/99designs/keyring v1.2.1 // indirect + github.com/AzureAD/microsoft-authentication-library-for-go v0.5.1 // indirect + github.com/RoaringBitmap/roaring v1.1.0 // indirect + github.com/Workiva/go-datastructures v1.0.53 // indirect + github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5 // indirect + github.com/agnivade/levenshtein v1.0.1 // indirect + github.com/andres-erbsen/clock v0.0.0-20160526145045-9e14626cd129 // indirect + github.com/apache/dubbo-getty v1.4.9-0.20220610060150-8af010f3f3dc // indirect + github.com/benbjohnson/clock v1.3.0 // indirect + github.com/bits-and-blooms/bitset v1.2.0 // indirect + github.com/creasty/defaults v1.5.2 // indirect + github.com/dubbogo/gost v1.11.25 // indirect + github.com/dubbogo/triple v1.1.8 // indirect + github.com/frankban/quicktest v1.14.3 // indirect + github.com/go-kit/kit v0.10.0 // indirect + github.com/go-kit/log v0.2.0 // indirect + github.com/go-logfmt/logfmt v0.5.1 // indirect + github.com/go-playground/locales v0.14.0 // indirect + github.com/go-playground/universal-translator v0.18.0 // indirect + github.com/go-playground/validator/v10 v10.11.0 // indirect + github.com/go-resty/resty/v2 v2.7.0 // indirect + github.com/hashicorp/go-hclog v1.0.0 // indirect + github.com/jackc/puddle/v2 v2.0.0 // indirect + github.com/jcmturner/aescts/v2 v2.0.0 // indirect + github.com/jcmturner/dnsutils/v2 v2.0.0 // indirect + github.com/jcmturner/gokrb5/v8 v8.4.2 // indirect + github.com/jcmturner/rpc/v2 v2.0.3 // indirect + github.com/jinzhu/copier v0.3.5 // indirect + github.com/k0kubun/pp v3.0.1+incompatible // indirect + github.com/knadh/koanf v1.4.1 // indirect + github.com/kubemq-io/protobuf v1.3.1 // indirect + github.com/kylelemons/godebug v1.1.0 // indirect + github.com/leodido/go-urn v1.2.1 // indirect + github.com/magiconair/properties v1.8.6 // indirect + github.com/mattn/go-colorable v0.1.12 // indirect + github.com/mitchellh/copystructure v1.2.0 // indirect + github.com/mitchellh/go-testing-interface v1.14.0 // indirect + github.com/mitchellh/reflectwalk v1.0.2 // indirect + github.com/mschoch/smat v0.2.0 // indirect + github.com/natefinch/lumberjack v2.0.0+incompatible // indirect + github.com/pelletier/go-toml v1.9.4 // indirect + github.com/prometheus/statsd_exporter v0.21.0 // indirect + github.com/satori/go.uuid v1.2.1-0.20181028125025-b2ce2384e17b // indirect + github.com/shirou/gopsutil v3.20.11+incompatible // indirect + github.com/stathat/consistent v1.0.0 // indirect + github.com/vektah/gqlparser/v2 v2.4.6 // indirect + github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect + github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect + golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect + golang.org/x/tools v0.1.11 // indirect + k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65 // indirect + sigs.k8s.io/json v0.0.0-20211020170558-c049b76a60c6 // indirect +) + +require ( + github.com/99designs/keyring v1.2.0 // indirect github.com/AthenZ/athenz v1.10.39 // indirect - github.com/Azure/azure-pipeline-go v0.2.2 // indirect + github.com/Azure/azure-pipeline-go v0.2.3 // indirect github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.0 // indirect github.com/Azure/azure-sdk-for-go/sdk/keyvault/internal v0.7.0 // indirect github.com/Azure/go-autorest v14.2.0+incompatible // indirect github.com/Azure/go-autorest/autorest/azure/cli v0.4.5 // indirect github.com/Azure/go-autorest/autorest/date v0.3.0 // indirect + github.com/Azure/go-autorest/autorest/to v0.4.0 github.com/Azure/go-autorest/autorest/validation v0.3.1 // indirect github.com/Azure/go-autorest/logger v0.2.1 // indirect github.com/Azure/go-autorest/tracing v0.6.0 // indirect - github.com/AzureAD/microsoft-authentication-library-for-go v0.5.1 // indirect github.com/DataDog/zstd v1.5.0 // indirect github.com/OneOfOne/xxhash v1.2.8 // indirect - github.com/PuerkitoBio/purell v1.1.1 // indirect - github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect - github.com/RoaringBitmap/roaring v1.1.0 // indirect - github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d // indirect - github.com/Workiva/go-datastructures v1.0.53 // indirect - github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5 // indirect - github.com/agnivade/levenshtein v1.1.1 // indirect - github.com/ajg/form v1.5.1 // indirect github.com/alibabacloud-go/alibabacloud-gateway-spi v0.0.4 // indirect github.com/alibabacloud-go/debug v0.0.0-20190504072949-9472017b5c68 // indirect github.com/alibabacloud-go/endpoint-util v1.1.0 // indirect - github.com/alibabacloud-go/openapi-util v0.0.11 // indirect - github.com/alibabacloud-go/tea-xml v1.1.2 // indirect + github.com/alibabacloud-go/openapi-util v0.0.10 // indirect + github.com/alibabacloud-go/tea-utils v1.4.3 github.com/alicebob/gopher-json v0.0.0-20200520072559-a9ecdc9d1d3a // indirect - github.com/aliyun/alibaba-cloud-sdk-go v1.61.1704 // indirect + github.com/aliyun/alibaba-cloud-sdk-go v1.61.18 // indirect github.com/aliyun/credentials-go v1.1.2 // indirect github.com/aliyunmq/mq-http-go-sdk v1.0.3 // indirect - github.com/andres-erbsen/clock v0.0.0-20160526145045-9e14626cd129 // indirect - github.com/andybalholm/brotli v1.0.4 // indirect - github.com/apache/dubbo-getty v1.4.9-0.20220610060150-8af010f3f3dc // indirect + github.com/apache/pulsar-client-go v0.8.1 + github.com/apache/pulsar-client-go/oauth2 v0.0.0-20220120090717-25e59572242e // indirect github.com/apache/rocketmq-client-go v1.2.5 // indirect github.com/ardielle/ardielle-go v1.5.2 // indirect - github.com/armon/go-metrics v0.3.9 // indirect + github.com/armon/go-metrics v0.3.10 // indirect github.com/asaskevich/govalidator v0.0.0-20200108200545-475eaeb16496 // indirect github.com/awslabs/kinesis-aggregation/go v0.0.0-20210630091500-54e17340d32f // indirect github.com/beorn7/perks v1.0.1 // indirect - github.com/bits-and-blooms/bitset v1.2.0 // indirect - github.com/buger/jsonparser v1.1.1 // indirect github.com/cenkalti/backoff v2.2.1+incompatible // indirect github.com/cespare/xxhash/v2 v2.1.2 // indirect - github.com/clbanning/mxj/v2 v2.5.6 // indirect - github.com/creasty/defaults v1.5.2 // indirect github.com/danieljoos/wincred v1.1.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect - github.com/deepmap/oapi-codegen v1.3.6 // indirect github.com/devigned/tab v0.1.1 // indirect - github.com/dghubble/sling v1.4.0 // indirect + github.com/dghubble/sling v1.3.0 // indirect github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect github.com/dimchansky/utfbom v1.1.1 // indirect - github.com/dubbogo/gost v1.11.25 // indirect - github.com/dubbogo/triple v1.1.8 // indirect github.com/dvsekhvalnov/jose2go v1.5.0 // indirect - github.com/eapache/go-resiliency v1.3.0 // indirect github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21 // indirect github.com/eapache/queue v1.1.0 // indirect - github.com/emicklei/go-restful/v3 v3.8.0 // indirect github.com/emirpasic/gods v1.12.0 // indirect - github.com/fatih/color v1.9.0 // indirect - github.com/gavv/httpexpect v2.0.0+incompatible // indirect - github.com/go-kit/kit v0.10.0 // indirect - github.com/go-kit/log v0.2.0 // indirect - github.com/go-logfmt/logfmt v0.5.1 // indirect - github.com/go-logr/logr v1.2.3 // indirect - github.com/go-ole/go-ole v1.2.4 // indirect - github.com/go-openapi/jsonpointer v0.19.5 // indirect - github.com/go-openapi/jsonreference v0.19.5 // indirect - github.com/go-openapi/swag v0.19.14 // indirect github.com/go-ozzo/ozzo-validation/v4 v4.3.0 // indirect - github.com/go-playground/locales v0.14.0 // indirect - github.com/go-playground/universal-translator v0.18.0 // indirect - github.com/go-playground/validator/v10 v10.11.0 // indirect + github.com/go-stack/stack v1.8.0 // indirect github.com/gobwas/glob v0.2.3 // indirect github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect - github.com/gofrs/uuid v3.3.0+incompatible // indirect + github.com/gofrs/uuid v4.0.0+incompatible // indirect github.com/gogap/errors v0.0.0-20200228125012-531a6449b28c // indirect github.com/gogap/stack v0.0.0-20150131034635-fef68dddd4f8 // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/golang-jwt/jwt v3.2.2+incompatible // indirect + github.com/golang-jwt/jwt/v4 v4.2.0 github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe // indirect - github.com/golang-sql/sqlexp v0.1.0 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.2 // indirect - github.com/golang/snappy v0.0.4 // indirect - github.com/google/flatbuffers v1.12.1 // indirect - github.com/google/gnostic v0.5.7-v3refs // indirect - github.com/google/go-cmp v0.5.9 // indirect - github.com/google/go-querystring v1.1.0 // indirect - github.com/google/gofuzz v1.1.0 // indirect - github.com/googleapis/enterprise-certificate-proxy v0.2.0 // indirect - github.com/gorilla/websocket v1.4.2 // indirect + github.com/google/go-cmp v0.5.8 // indirect + github.com/google/go-querystring v1.0.0 // indirect + github.com/google/gofuzz v1.2.0 // indirect + github.com/googleapis/gax-go/v2 v2.2.0 + github.com/gorilla/websocket v1.5.0 // indirect github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed // indirect github.com/hashicorp/errwrap v1.1.0 // indirect - github.com/hashicorp/go-cleanhttp v0.5.1 // indirect - github.com/hashicorp/go-hclog v1.1.0 // indirect + github.com/hashicorp/go-cleanhttp v0.5.2 // indirect github.com/hashicorp/go-immutable-radix v1.3.1 // indirect github.com/hashicorp/go-rootcerts v1.0.2 // indirect - github.com/hashicorp/go-uuid v1.0.3 // indirect + github.com/hashicorp/go-uuid v1.0.2 // indirect github.com/hashicorp/serf v0.9.6 // indirect - github.com/imdario/mergo v0.3.6 // indirect - github.com/imkira/go-interpol v1.1.0 // indirect - github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839 // indirect github.com/jackc/pgpassfile v1.0.0 // indirect github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b // indirect - github.com/jackc/puddle/v2 v2.0.0 // indirect - github.com/jcmturner/aescts/v2 v2.0.0 // indirect - github.com/jcmturner/dnsutils/v2 v2.0.0 // indirect - github.com/jcmturner/gofork v1.7.6 // indirect - github.com/jcmturner/gokrb5/v8 v8.4.3 // indirect - github.com/jcmturner/rpc/v2 v2.0.3 // indirect - github.com/jinzhu/copier v0.3.5 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect - github.com/josharian/intern v1.0.0 // indirect github.com/jpillora/backoff v1.0.0 // indirect - github.com/k0kubun/pp v3.0.1+incompatible // indirect - github.com/kataras/go-errors v0.0.3 // indirect - github.com/kataras/go-serializer v0.0.4 // indirect - github.com/klauspost/compress v1.15.11 // indirect - github.com/knadh/koanf v1.4.1 // indirect - github.com/kylelemons/godebug v1.1.0 // indirect - github.com/labstack/echo/v4 v4.9.0 // indirect - github.com/labstack/gommon v0.3.1 // indirect - github.com/leodido/go-urn v1.2.1 // indirect + github.com/klauspost/compress v1.15.1 // indirect github.com/linkedin/goavro/v2 v2.9.8 // indirect - github.com/magiconair/properties v1.8.6 // indirect - github.com/mailru/easyjson v0.7.6 // indirect - github.com/matryer/is v1.4.0 // indirect - github.com/mattn/go-colorable v0.1.11 // indirect - github.com/mattn/go-ieproxy v0.0.0-20190702010315-6dee0af9227d // indirect - github.com/mattn/go-isatty v0.0.14 // indirect + github.com/mattn/go-ieproxy v0.0.1 // indirect github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 // indirect - github.com/microcosm-cc/bluemonday v1.0.21 // indirect - github.com/miekg/dns v1.1.43 // indirect github.com/minio/highwayhash v1.0.2 // indirect - github.com/mitchellh/copystructure v1.2.0 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect - github.com/mitchellh/reflectwalk v1.0.2 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect - github.com/montanaflynn/stats v0.6.6 // indirect - github.com/moul/http2curl v1.0.0 // indirect - github.com/mschoch/smat v0.2.0 // indirect github.com/mtibben/percent v0.2.1 // indirect - github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect - github.com/natefinch/lumberjack v2.0.0+incompatible // indirect - github.com/nats-io/jwt/v2 v2.3.0 // indirect - github.com/nats-io/nats-streaming-server v0.25.2 // indirect + github.com/nats-io/jwt/v2 v2.2.1-0.20220113022732-58e87895b296 // indirect github.com/nats-io/nuid v1.0.1 // indirect github.com/opentracing/opentracing-go v1.2.0 // indirect - github.com/pelletier/go-toml v1.9.3 // indirect - github.com/pierrec/lz4 v2.6.0+incompatible // indirect - github.com/pierrec/lz4/v4 v4.1.17 // indirect + github.com/pierrec/lz4 v2.6.1+incompatible // indirect github.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021 // indirect - github.com/prometheus/client_golang v1.13.0 // indirect + github.com/prometheus/client_golang v1.12.2 // indirect github.com/prometheus/client_model v0.2.0 // indirect - github.com/prometheus/common v0.37.0 // indirect - github.com/prometheus/procfs v0.8.0 // indirect - github.com/prometheus/statsd_exporter v0.21.0 // indirect + github.com/prometheus/common v0.35.0 // indirect + github.com/prometheus/procfs v0.7.3 // indirect github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect github.com/rs/zerolog v1.25.0 // indirect - github.com/russross/blackfriday v1.6.0 // indirect - github.com/satori/go.uuid v1.2.1-0.20181028125025-b2ce2384e17b // indirect - github.com/sendgrid/rest v2.6.9+incompatible // indirect - github.com/shirou/gopsutil v3.20.11+incompatible // indirect github.com/shirou/gopsutil/v3 v3.21.6 // indirect github.com/sirupsen/logrus v1.9.0 // indirect github.com/sony/gobreaker v0.4.2-0.20210216022020-dd874f9dd33b // indirect github.com/spaolacci/murmur3 v1.1.0 // indirect - github.com/spf13/cast v1.3.1 // indirect + github.com/spf13/cast v1.4.1 // indirect github.com/spf13/pflag v1.0.5 // indirect - github.com/stathat/consistent v1.0.0 // indirect github.com/stretchr/objx v0.4.0 // indirect - github.com/tchap/go-patricia/v2 v2.3.1 // indirect - github.com/tetratelabs/wazero v1.0.0-pre.2 // indirect - github.com/tidwall/gjson v1.9.3 // indirect + github.com/tetratelabs/wazero v1.0.0-pre.1 // indirect github.com/tidwall/match v1.1.1 // indirect - github.com/tidwall/pretty v1.2.0 // indirect github.com/tjfoc/gmsm v1.3.2 // indirect github.com/tklauser/go-sysconf v0.3.6 // indirect github.com/tklauser/numcpus v0.2.2 // indirect github.com/valyala/bytebufferpool v1.0.0 // indirect - github.com/valyala/fasttemplate v1.2.1 // indirect github.com/xdg-go/pbkdf2 v1.0.0 // indirect - github.com/xdg-go/stringprep v1.0.3 // indirect - github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect - github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect - github.com/xeipuuv/gojsonschema v1.2.0 // indirect - github.com/yalp/jsonpath v0.0.0-20180802001716-5cc68e5049a0 // indirect + github.com/xdg-go/scram v1.0.2 + github.com/xdg-go/stringprep v1.0.2 // indirect github.com/yashtewari/glob-intersection v0.1.0 // indirect github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d // indirect - github.com/yudai/gojsondiff v1.0.0 // indirect - github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82 // indirect - github.com/yuin/gopher-lua v0.0.0-20210529063254-f4c35e4016d9 // indirect - go.opencensus.io v0.23.0 // indirect - go.uber.org/multierr v1.7.0 // indirect + go.uber.org/atomic v1.9.0 + go.uber.org/multierr v1.8.0 // indirect go.uber.org/zap v1.21.0 // indirect - golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0 // indirect - golang.org/x/sys v0.1.0 // indirect - golang.org/x/term v0.1.0 // indirect - golang.org/x/text v0.4.0 // indirect - golang.org/x/time v0.0.0-20220922220347-f3bd1da661af // indirect - golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect + golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f // indirect + golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 // indirect + golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 // indirect + golang.org/x/text v0.3.7 // indirect + golang.org/x/time v0.0.0-20211116232009-f0f3c7e86c11 // indirect + golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f // indirect google.golang.org/appengine v1.6.7 // indirect - google.golang.org/protobuf v1.28.1 // indirect - gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect - gopkg.in/couchbase/gocbcore.v7 v7.1.18 // indirect - gopkg.in/couchbaselabs/gocbconnstr.v1 v1.0.4 // indirect - gopkg.in/couchbaselabs/gojcbmock.v1 v1.0.4 // indirect - gopkg.in/couchbaselabs/jsonx.v1 v1.0.1 // indirect + google.golang.org/protobuf v1.28.0 // indirect gopkg.in/fatih/pool.v2 v2.0.0 // indirect - gopkg.in/gorethink/gorethink.v4 v4.1.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect - gopkg.in/ini.v1 v1.66.6 // indirect - gopkg.in/kataras/go-serializer.v0 v0.0.4 // indirect + gopkg.in/ini.v1 v1.66.2 // indirect gopkg.in/natefinch/lumberjack.v2 v2.0.0 // indirect - gopkg.in/square/go-jose.v2 v2.4.1 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect - k8s.io/klog/v2 v2.80.1 // indirect - k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1 // indirect - sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 // indirect - sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect - sigs.k8s.io/yaml v1.2.0 // indirect + k8s.io/klog/v2 v2.30.0 // indirect + k8s.io/utils v0.0.0-20210930125809-cb0fa318a74b + nhooyr.io/websocket v1.8.7 // indirect + sigs.k8s.io/structured-merge-diff/v4 v4.2.0 // indirect + sigs.k8s.io/yaml v1.3.0 // indirect ) +replace k8s.io/client => github.com/kubernetes-client/go v0.0.0-20190928040339-c757968c4c36 + +replace github.com/eclipse/paho.mqtt.golang => github.com/shivamkm07/paho.mqtt.golang v1.3.6-0.20220106130409-e28a1db639f8 + replace github.com/gobwas/pool => github.com/gobwas/pool v0.2.1 -replace github.com/toolkits/concurrent => github.com/niean/gotools v0.0.0-20151221085310-ff3f51fc5c60 +replace go.opencensus.io => go.opencensus.io v0.23.0 -// this is a fork which addresses a performance issues due to go routines -replace dubbo.apache.org/dubbo-go/v3 => dubbo.apache.org/dubbo-go/v3 v3.0.3-0.20220610080020-48691a404537 +replace github.com/toolkits/concurrent => github.com/niean/gotools v0.0.0-20151221085310-ff3f51fc5c60 diff --git a/go.sum b/go.sum index a28741789..53d33851c 100644 --- a/go.sum +++ b/go.sum @@ -1,3 +1,5 @@ +bazil.org/fuse v0.0.0-20160811212531-371fbbdaa898/go.mod h1:Xbm+BRKSBEpa4q4hTSxohYNQpsxXPbPry4JJWOB3LB8= +bazil.org/fuse v0.0.0-20200407214033-5883e5a4b512/go.mod h1:FbcW6z/2VytnFDhZfumh8Ss8zxHE6qpMP5sHTRe0EaM= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= @@ -20,16 +22,16 @@ cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= cloud.google.com/go v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY= cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM= +cloud.google.com/go v0.86.0/go.mod h1:YG2MRW8zzPSZaztnTZtxbMPK2VYaHg4NTDYZMG+5ZqQ= cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY= cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ= cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= +cloud.google.com/go v0.100.1/go.mod h1:fs4QogzfH5n2pBXBP9vRiU+eCny7lD2vmFZy79Iuw1U= +cloud.google.com/go v0.100.2 h1:t9Iw5QH5v4XtlEQaCtUY7x6sCABps8sW0acw7e2WQ6Y= cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A= -cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU= -cloud.google.com/go v0.104.0 h1:gSmWO7DY1vOm0MVU6DNXM11BWHHsTUmsC5cv1fuW5X8= -cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= 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= @@ -38,35 +40,32 @@ cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4g cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= 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 h1:b1zWmYuuHz7gO9kDcM/EpHGr06UgsYNRpNJzI2kFiLM= 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.10.0 h1:aoLIYaA1fX3ywihqpBk2APQKOo20nXsp1GEZQbx5Jk4= -cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= +cloud.google.com/go/datastore v1.1.0 h1:/May9ojXjRkPBNVrq+oWLqmWCkr4OU5uRY29bu0mRyQ= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= -cloud.google.com/go/datastore v1.8.0 h1:2qo2G7hABSeqswa+5Ga3+QB8/ZwKOJmDsCISM9scmsU= -cloud.google.com/go/datastore v1.8.0/go.mod h1:q1CpHVByTlXppdqTcu4LIhCsTn3fhtZ5R7+TajciO+M= cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= +cloud.google.com/go/firestore v1.6.1/go.mod h1:asNXNOzBdyVQmEU+ggO8UPodTkEVFW5Qx+rwHnAz+EY= +cloud.google.com/go/iam v0.1.0/go.mod h1:vcUNEa0pEm0qRVpmWepWaFMIAI8/hjB9mO8rNCJtF6c= cloud.google.com/go/iam v0.3.0 h1:exkAomrVUuzx9kWFI1wm3KI0uoDeUFPB4kKGzx6x+Gc= cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= cloud.google.com/go/kms v1.4.0 h1:iElbfoE61VeLhnZcGOltqL8HIly8Nhbe5t6JlH9GXjo= +cloud.google.com/go/kms v1.4.0/go.mod h1:fajBHndQ+6ubNw6Ss2sSd+SWvjL26RNo/dr7uxsnnOA= 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/pubsub v1.25.1 h1:l0wCNZKuEp2Q54wAy8283EV9O57+7biWOXnnU2/Tq/A= -cloud.google.com/go/pubsub v1.25.1/go.mod h1:bY6l7rF8kCcwz6V3RaQ6kK4p5g7qc7PqjRoE9wDOqOU= -cloud.google.com/go/secretmanager v1.7.0 h1:EAPaaxMs1gtdyxK5UN8KfD5tnDBZiFoSroRfjV3EgQU= -cloud.google.com/go/secretmanager v1.7.0/go.mod h1:20dYAPbj+H4+pXdBRN2z77yugQJJ30UF2kL9OWPs+L0= +cloud.google.com/go/pubsub v1.12.2 h1:KM5Lwh+3zUj7j/gK7DyW5wubJuI9OtzlxewndRFN/LI= +cloud.google.com/go/pubsub v1.12.2/go.mod h1:BmI/dqa6eXfm8WTp+JIN6d6vtVGq+vcsnglFKn/aVkY= +cloud.google.com/go/secretmanager v1.4.0 h1:Cl+kDYvKHjPQ1l2DZDr2FG/cXUzNGCZkh05BARgddo8= +cloud.google.com/go/secretmanager v1.4.0/go.mod h1:h2VZz7Svt1W9/YVl7mfcX9LddvS6SOLOvMoOXBhYT1k= 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 h1:STgFzyU5/8miMl0//zKh2aQeTyeaUH3WN9bSUiJ09bA= 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.27.0 h1:YOO045NZI9RKfCj1c5A/ZtuuENUc8OAW+gHdGnDgyMQ= -cloud.google.com/go/storage v1.27.0/go.mod h1:x9DOL8TK/ygDUMieqwfhdpQryTeEkhGKMi80i/iqR2s= contrib.go.opencensus.io/exporter/prometheus v0.4.1 h1:oObVeKo2NxpdF/fIfrPsNj6K0Prg0R0mHM+uANlYMiM= contrib.go.opencensus.io/exporter/prometheus v0.4.1/go.mod h1:t9wvfitlUjGXG2IXAZsuFq26mDGid/JwCEXp+gTG/9U= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= @@ -74,8 +73,10 @@ dubbo.apache.org/dubbo-go/v3 v3.0.3-0.20220610080020-48691a404537 h1:NblXw7tbHBF dubbo.apache.org/dubbo-go/v3 v3.0.3-0.20220610080020-48691a404537/go.mod h1:O7eTHAilCWlqBjEkG2MW9khZFImiARb/tSOE8PJas+g= github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 h1:/vQbFIOMbk2FiG/kXiLl8BRyzTWDw7gX/Hz7Dd5eDMs= github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4/go.mod h1:hN7oaIRCjzsZ2dE+yG5k+rsdt3qcwykqK6HVGcKwsw4= -github.com/99designs/keyring v1.2.1 h1:tYLp1ULvO7i3fI5vE21ReQuj99QFSs7lGm0xWyJo87o= -github.com/99designs/keyring v1.2.1/go.mod h1:fc+wB5KTk9wQ9sDx0kFXB3A0MaeGHM9AwRStKOQ5vOA= +github.com/99designs/keyring v1.1.6/go.mod h1:16e0ds7LGQQcT59QqkTg72Hh5ShM51Byv5PEmW6uoRU= +github.com/99designs/keyring v1.2.0 h1:MbMWdfhzVw1DfC7ak+PGnWiu1b1oUkiQANyfAEMVaPA= +github.com/99designs/keyring v1.2.0/go.mod h1:ETJn2A9cfvJKq1Q4FeOc+eetK52Ik0kUGog7Uy+xvX8= +github.com/AdaLogics/go-fuzz-headers v0.0.0-20210715213245-6c3934b029d8/go.mod h1:CzsSbkDixRphAF5hS6wbMKq0eI6ccJRb7/A0M6JBnwg= github.com/AthenZ/athenz v1.10.39 h1:mtwHTF/v62ewY2Z5KWhuZgVXftBej1/Tn80zx4DcawY= github.com/AthenZ/athenz v1.10.39/go.mod h1:3Tg8HLsiQZp81BJY58JBeU2BR6B/H4/0MQGfCwhHNEA= github.com/Azure/azure-amqp-common-go/v3 v3.2.3 h1:uDF62mbd9bypXWi19V1bN5NZEO84JqgmI5G73ibAmrk= @@ -84,15 +85,16 @@ github.com/Azure/azure-event-hubs-go/v3 v3.3.18 h1:jgWDk2qmknA0UsfyzjHiW5yciOw3a github.com/Azure/azure-event-hubs-go/v3 v3.3.18/go.mod h1:R5H325+EzgxcBDkUerEwtor7ZQg77G7HiOTwpcuIVXY= github.com/Azure/azure-pipeline-go v0.1.8/go.mod h1:XA1kFWRVhSK+KNFiOhfv83Fv8L9achrP7OxIzeTn1Yg= github.com/Azure/azure-pipeline-go v0.1.9/go.mod h1:XA1kFWRVhSK+KNFiOhfv83Fv8L9achrP7OxIzeTn1Yg= -github.com/Azure/azure-pipeline-go v0.2.2 h1:6oiIS9yaG6XCCzhgAgKFfIWyo4LLCiDhZot6ltoThhY= github.com/Azure/azure-pipeline-go v0.2.2/go.mod h1:4rQ/NZncSvGqNkkOsNpOU1tgoNuIlp9AfUH5G1tvCHc= +github.com/Azure/azure-pipeline-go v0.2.3 h1:7U9HBg1JFK3jHl5qmo4CTZKFTVgMwdFHMVtCdfBE21U= +github.com/Azure/azure-pipeline-go v0.2.3/go.mod h1:x841ezTBIMG6O3lAcl8ATHnsOPVl2bqk7S3ta6S6u4k= +github.com/Azure/azure-sdk-for-go v16.2.1+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= github.com/Azure/azure-sdk-for-go v51.1.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= +github.com/Azure/azure-sdk-for-go v56.3.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= github.com/Azure/azure-sdk-for-go v65.0.0+incompatible h1:HzKLt3kIwMm4KeJYTdx9EbjRYTySD/t8i1Ee/W5EGXw= github.com/Azure/azure-sdk-for-go v65.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= -github.com/Azure/azure-sdk-for-go/sdk/azcore v0.19.0/go.mod h1:h6H6c8enJmmocHUbLiiGY6sx7f9i+X3m1CHdd5c6Rdw= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.1.4 h1:pqrAR74b6EoR4kcxF7L7Wg2B8Jgil9UUZtMvxhEFqWo= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.1.4/go.mod h1:uGG2W01BaETf0Ozp+QxxKJdMBNRWPdstHG0Fmdwn1/U= -github.com/Azure/azure-sdk-for-go/sdk/azidentity v0.11.0/go.mod h1:HcM1YX14R7CJcghJGOYCgdezslRSVzqwLf/q+4Y2r/0= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.1.3 h1:8LoU8N2lIUzkmstvwXvVfniMZlFbesfT2AmA1aqvRr8= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.1.3/go.mod h1:uGG2W01BaETf0Ozp+QxxKJdMBNRWPdstHG0Fmdwn1/U= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.1.0 h1:QkAcEIAKbNL4KoFr4SathZPhDhF4mVwpBMFlYjyAqy8= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.1.0/go.mod h1:bhXu1AjYL+wutSL/kpSq6s7733q2Rb0yuot9Zgfqa/0= github.com/Azure/azure-sdk-for-go/sdk/data/azappconfig v0.4.1 h1:tuDqyaz/iP/1vkmu4aWwhKDe2nSuMMpVm0FERxwMC60= @@ -101,39 +103,44 @@ github.com/Azure/azure-sdk-for-go/sdk/data/azcosmos v0.3.2 h1:yJegJqjhrMJ3Oe5s43 github.com/Azure/azure-sdk-for-go/sdk/data/azcosmos v0.3.2/go.mod h1:Fy3bbChFm4cZn6oIxYYqKB2FG3rBDxk3NZDLDJCHl+Q= github.com/Azure/azure-sdk-for-go/sdk/data/aztables v1.0.1 h1:bFa9IcjvrCber6gGgDAUZ+I2bO8J7s8JxXmu9fhi2ss= github.com/Azure/azure-sdk-for-go/sdk/data/aztables v1.0.1/go.mod h1:l3wvZkG9oW07GLBW5Cd0WwG5asOfJ8aqE8raUvNzLpk= -github.com/Azure/azure-sdk-for-go/sdk/internal v0.7.0/go.mod h1:yqy467j36fJxcRV2TzfVZ1pCb5vxm4BtZPUdYWe/Xo8= github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.0 h1:jp0dGvZ7ZK0mgqnTSClMxa5xuRL7NZgHameVYF6BurY= github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.0/go.mod h1:eWRD7oawr1Mu1sLCawqVc0CUiF43ia3qQMxLscsKQ9w= github.com/Azure/azure-sdk-for-go/sdk/keyvault/azsecrets v0.10.1 h1:AhZnZn4kUKz36bHJ8AK/FH2tH/q3CAkG+Gme+2ibuak= github.com/Azure/azure-sdk-for-go/sdk/keyvault/azsecrets v0.10.1/go.mod h1:S78i9yTr4o/nXlH76bKjGUye9Z2wSxO5Tz7GoDr4vfI= github.com/Azure/azure-sdk-for-go/sdk/keyvault/internal v0.7.0 h1:Lg6BW0VPmCwcMlvOviL3ruHFO+H9tZNqscK0AeuFjGM= github.com/Azure/azure-sdk-for-go/sdk/keyvault/internal v0.7.0/go.mod h1:9V2j0jn9jDEkCkv8w/bKTNppX/d0FVA1ud77xCIP4KA= -github.com/Azure/azure-sdk-for-go/sdk/messaging/azservicebus v1.1.1 h1:Zm7A6yKHT3evC/0lquPWJ9hrkRGVIeZOmIvHPv6xV9Q= -github.com/Azure/azure-sdk-for-go/sdk/messaging/azservicebus v1.1.1/go.mod h1:LH9XQnMr2ZYxQdVdCrzLO9mxeDyrDFa6wbSI3x5zCZk= +github.com/Azure/azure-sdk-for-go/sdk/messaging/azservicebus v1.1.0 h1:ebO2jmZyctLSMBTvjsxZv/Ml3rGsvnJHUImVWotBl7I= +github.com/Azure/azure-sdk-for-go/sdk/messaging/azservicebus v1.1.0/go.mod h1:LH9XQnMr2ZYxQdVdCrzLO9mxeDyrDFa6wbSI3x5zCZk= github.com/Azure/azure-storage-blob-go v0.6.0/go.mod h1:oGfmITT1V6x//CswqY2gtAHND+xIP64/qL7a5QJix0Y= github.com/Azure/azure-storage-blob-go v0.10.0 h1:evCwGreYo3XLeBV4vSxLbLiYb6e0SzsJiXQVRGsRXxs= github.com/Azure/azure-storage-blob-go v0.10.0/go.mod h1:ep1edmW+kNQx4UfWM9heESNmQdijykocJ0YOxmMX8SE= github.com/Azure/azure-storage-queue-go v0.0.0-20191125232315-636801874cdd h1:b3wyxBl3vvr15tUAziPBPK354y+LSdfPCpex5oBttHo= github.com/Azure/azure-storage-queue-go v0.0.0-20191125232315-636801874cdd/go.mod h1:K6am8mT+5iFXgingS9LUc7TmbsW6XBw3nxaRyaMyWc8= github.com/Azure/go-amqp v0.17.0/go.mod h1:9YJ3RhxRT1gquYnzpZO1vcYMMpAdJT+QEg6fwmw9Zlg= -github.com/Azure/go-amqp v0.17.5 h1:7Lsi9H9ijCAfqOaMiNmQ4c+GL9bdrpCjebNKhV/eQ+c= -github.com/Azure/go-amqp v0.17.5/go.mod h1:9YJ3RhxRT1gquYnzpZO1vcYMMpAdJT+QEg6fwmw9Zlg= +github.com/Azure/go-amqp v0.17.4 h1:6t9wEiwA4uXMRoUj3Cd3K2gmH8cW8ylizmBnSeF0bzM= +github.com/Azure/go-amqp v0.17.4/go.mod h1:9YJ3RhxRT1gquYnzpZO1vcYMMpAdJT+QEg6fwmw9Zlg= +github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= +github.com/Azure/go-ansiterm v0.0.0-20210608223527-2377c96fe795/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= +github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= +github.com/Azure/go-autorest v10.8.1+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= github.com/Azure/go-autorest v14.2.0+incompatible h1:V5VMDjClD3GiElqLWO7mz2MxNAK/vTfRHdAubSIPRgs= github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= github.com/Azure/go-autorest/autorest v0.9.3/go.mod h1:GsRuLYvwzLjjjRoWEIyMUaYq8GNUx2nRB378IPt/1p0= +github.com/Azure/go-autorest/autorest v0.11.1/go.mod h1:JFgpikqFJ/MleTTxwepExTKnFUKKszPS8UavbQYUMuw= github.com/Azure/go-autorest/autorest v0.11.18/go.mod h1:dSiJPy22c3u0OtOKDNttNgqpNFY/GeWa7GH/Pz56QRA= github.com/Azure/go-autorest/autorest v0.11.24/go.mod h1:G6kyRlFnTuSbEYkQGawPfsCswgme4iYf6rfSKUDzbCc= -github.com/Azure/go-autorest/autorest v0.11.28 h1:ndAExarwr5Y+GaHE6VCaY1kyS/HwwGGyuimVhWsHOEM= -github.com/Azure/go-autorest/autorest v0.11.28/go.mod h1:MrkzG3Y3AH668QyF9KRk5neJnGgmhQ6krbhR8Q5eMvA= +github.com/Azure/go-autorest/autorest v0.11.27 h1:F3R3q42aWytozkV8ihzcgMO4OA4cuqr3bNlsEuF6//A= +github.com/Azure/go-autorest/autorest v0.11.27/go.mod h1:7l8ybrIdUmGqZMTD0sRtAr8NvbHjfofbf8RSP2q7w7U= github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0= github.com/Azure/go-autorest/autorest/adal v0.8.0/go.mod h1:Z6vX6WXXuyieHAXwMj0S6HY6e6wcHn37qQMBQlvY3lc= github.com/Azure/go-autorest/autorest/adal v0.8.1/go.mod h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q= github.com/Azure/go-autorest/autorest/adal v0.8.3/go.mod h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q= +github.com/Azure/go-autorest/autorest/adal v0.9.0/go.mod h1:/c022QCutn2P7uY+/oQWWNcK9YU+MH96NgK+jErpbcg= +github.com/Azure/go-autorest/autorest/adal v0.9.5/go.mod h1:B7KF7jKIeC9Mct5spmyCB/A8CG/sEz1vwIRGv/bbw7A= github.com/Azure/go-autorest/autorest/adal v0.9.13/go.mod h1:W/MM4U6nLxnIskrw4UwWzlHfGjwUS50aOsc/I3yuU8M= +github.com/Azure/go-autorest/autorest/adal v0.9.18 h1:kLnPsRjzZZUF3K5REu/Kc+qMQrvuza2bwSnNdhmzLfQ= github.com/Azure/go-autorest/autorest/adal v0.9.18/go.mod h1:XVVeme+LZwABT8K5Lc3hA4nAe8LDBVle26gTrguhhPQ= -github.com/Azure/go-autorest/autorest/adal v0.9.21 h1:jjQnVFXPfekaqb8vIsv2G1lxshoW+oGv4MDlhRtnYZk= -github.com/Azure/go-autorest/autorest/adal v0.9.21/go.mod h1:zua7mBUaCc5YnSLKYgGJR/w5ePdMDA6H56upLsHzA9U= github.com/Azure/go-autorest/autorest/azure/auth v0.4.2/go.mod h1:90gmfKdlmKgfjUpnCEpOJzsUEjrWDSLwHIG73tSXddM= github.com/Azure/go-autorest/autorest/azure/auth v0.5.11 h1:P6bYXFoao05z5uhOQzbC3Qd8JqF3jUoocoTeIxkp2cA= github.com/Azure/go-autorest/autorest/azure/auth v0.5.11/go.mod h1:84w/uV8E37feW2NCJ08uT9VBfjfUHpgLVnG2InYD6cg= @@ -147,6 +154,7 @@ github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSY github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN3SVSiiO77gL2j2ronKKP0syM= +github.com/Azure/go-autorest/autorest/mocks v0.4.0/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= github.com/Azure/go-autorest/autorest/mocks v0.4.2 h1:PGN4EDXnuQbojHbU0UWoNvmu9AGVwYHG9/fkDYhtAfw= github.com/Azure/go-autorest/autorest/mocks v0.4.2/go.mod h1:Vy7OitM9Kei0i1Oj+LvyAWMXJHeKH1MVlzFugfVrmyU= @@ -155,6 +163,7 @@ github.com/Azure/go-autorest/autorest/to v0.4.0/go.mod h1:fE8iZBn7LQR7zH/9XU2NcP github.com/Azure/go-autorest/autorest/validation v0.3.1 h1:AgyqjAd94fwNAoTjl/WQXg4VvFeRFpO+UhNyRXqF1ac= github.com/Azure/go-autorest/autorest/validation v0.3.1/go.mod h1:yhLgjC0Wda5DYXl6JAsWyUe4KVNffhoDhG0zVzUMo3E= github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= +github.com/Azure/go-autorest/logger v0.2.0/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= github.com/Azure/go-autorest/logger v0.2.1 h1:IG7i4p/mDa2Ce4TRyAO8IHnVhAVF3RFU+ZtXWSmf4Tg= github.com/Azure/go-autorest/logger v0.2.1/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= @@ -173,34 +182,62 @@ github.com/DataDog/zstd v1.5.0 h1:+K/VEwIAaPcHiMtQvpLD4lqW7f0Gk3xdYZmI1hD+CXo= github.com/DataDog/zstd v1.5.0/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= github.com/HdrHistogram/hdrhistogram-go v1.1.2/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= +github.com/Microsoft/go-winio v0.4.11/go.mod h1:VhR8bwka0BXejwEJY73c50VrPtXAaKcyvVC4A4RozmA= +github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= +github.com/Microsoft/go-winio v0.4.15-0.20190919025122-fc70bd9a86b5/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw= +github.com/Microsoft/go-winio v0.4.16-0.20201130162521-d1ffc52c7331/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0= +github.com/Microsoft/go-winio v0.4.16/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0= +github.com/Microsoft/go-winio v0.4.17-0.20210211115548-6eac466e5fa3/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= +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/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= +github.com/Microsoft/hcsshim v0.8.9/go.mod h1:5692vkUqntj1idxauYlpoINNKeqCiG6Sg38RRsjT5y8= +github.com/Microsoft/hcsshim v0.8.14/go.mod h1:NtVKoYxQuTLx6gEq0L96c9Ju4JbRJ4nY2ow3VK6a9Lg= +github.com/Microsoft/hcsshim v0.8.15/go.mod h1:x38A4YbHbdxJtc0sF6oIz+RG0npwSCAvn69iY6URG00= +github.com/Microsoft/hcsshim v0.8.16/go.mod h1:o5/SZqmR7x9JNKsW3pu+nqHm0MF8vbA+VxGOoXdC600= +github.com/Microsoft/hcsshim v0.8.20/go.mod h1:+w2gRZ5ReXQhFOrvSQeNfhrYB/dg3oDwTOcER2fw4I4= +github.com/Microsoft/hcsshim v0.8.21/go.mod h1:+w2gRZ5ReXQhFOrvSQeNfhrYB/dg3oDwTOcER2fw4I4= +github.com/Microsoft/hcsshim v0.8.23/go.mod h1:4zegtUJth7lAvFyc6cH2gGQ5B3OFQim01nnU2M8jKDg= +github.com/Microsoft/hcsshim v0.9.2/go.mod h1:7pLA8lDk46WKDWlVsENo92gC0XFa8rbKfyFRBqxEbCc= +github.com/Microsoft/hcsshim v0.9.3/go.mod h1:7pLA8lDk46WKDWlVsENo92gC0XFa8rbKfyFRBqxEbCc= +github.com/Microsoft/hcsshim/test v0.0.0-20201218223536-d3e5debf77da/go.mod h1:5hlzMzRKMLyo42nCZ9oml8AdTlq/0cvIaBv6tK1RehU= +github.com/Microsoft/hcsshim/test v0.0.0-20210227013316-43a75bb4edd3/go.mod h1:mw7qgWloBUl75W/gVH3cQszUg1+gUITj7D6NY7ywVnY= +github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= +github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/OneOfOne/xxhash v1.2.8 h1:31czK/TI9sNkxIKfaUfGlU47BAxQ0ztGgd9vPyqimf8= github.com/OneOfOne/xxhash v1.2.8/go.mod h1:eZbhyaAYD41SGSSsnmcpxVoRiQ/MPUTjUdIIOT9Um7Q= -github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI= +github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= -github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M= +github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/RoaringBitmap/roaring v1.1.0 h1:b10lZrZXaY6Q6EKIRrmOF519FIyQQ5anPgGr3niw2yY= github.com/RoaringBitmap/roaring v1.1.0/go.mod h1:icnadbWcNyfEHlYdr+tDlOTih1Bf/h+rzPpv4sbomAA= +github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d/go.mod h1:HI8ITrYtUY+O+ZhtlqUnD8+KwNPOyugEhfP9fdUIaEQ= github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= -github.com/Shopify/sarama v1.37.2 h1:LoBbU0yJPte0cE5TZCGdlzZRmMgMtZU/XgnUKZg9Cv4= -github.com/Shopify/sarama v1.37.2/go.mod h1:Nxye/E+YPru//Bpaorfhc3JsSGYwCaDDj+R4bK52U5o= +github.com/Shopify/sarama v1.30.0 h1:TOZL6r37xJBDEMLx4yjB77jxbZYXPaDow08TSK6vIL0= +github.com/Shopify/sarama v1.30.0/go.mod h1:zujlQQx1kzHsh4jfV1USnptCQrHAEZ2Hk8fTKCulPVs= github.com/Shopify/toxiproxy v2.1.4+incompatible h1:TKdv8HiTLgE5wdJuEML90aBgNWsokNbMijUGhmcoBJc= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= -github.com/Shopify/toxiproxy/v2 v2.5.0 h1:i4LPT+qrSlKNtQf5QliVjdP08GyAH8+BUIc9gT0eahc= -github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d h1:G0m3OIz70MZUWq3EgK3CesDbo8upS2Vm9/P3FtgI+Jk= +github.com/Shopify/toxiproxy/v2 v2.1.6-0.20210914104332-15ea381dcdae h1:ePgznFqEG1v3AjMklnK8H7BSc++FDSo7xfK9K7Af+0Y= +github.com/Shopify/toxiproxy/v2 v2.1.6-0.20210914104332-15ea381dcdae/go.mod h1:/cvHQkZ1fst0EmZnA5dFtiQdWCNCFYzb+uE2vqVgvx0= github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= +github.com/StackExchange/wmi v0.0.0-20210224194228-fe8f1750fd46 h1:5sXbqlSomvdjlRbWyNqkPsJ3Fg+tQZCbgeX1VGljbQY= +github.com/StackExchange/wmi v0.0.0-20210224194228-fe8f1750fd46/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= github.com/Workiva/go-datastructures v1.0.52/go.mod h1:Z+F2Rca0qCsVYDS8z7bAGm8f3UkzuWYS/oBZz5a7VVA= github.com/Workiva/go-datastructures v1.0.53 h1:J6Y/52yX10Xc5JjXmGtWoSSxs3mZnGSaq37xZZh7Yig= github.com/Workiva/go-datastructures v1.0.53/go.mod h1:1yZL+zfsztete+ePzZz/Zb1/t5BnDuE2Ya2MMGhzP6A= -github.com/aerospike/aerospike-client-go v4.5.2+incompatible h1:G7cGT9bbOEJwPR8sKrXNP/PotN25Y5pfd8QrLbg3eTY= -github.com/aerospike/aerospike-client-go v4.5.2+incompatible/go.mod h1:zj8LBEnWBDOVEIJt8LvaRvDG5ARAoa5dBeHaB472NRc= +github.com/aerospike/aerospike-client-go v4.5.0+incompatible h1:6ALev/Ge4jW5avSLoqgvPYTh+FLeeDD9xDhzoMCNgOo= +github.com/aerospike/aerospike-client-go v4.5.0+incompatible/go.mod h1:zj8LBEnWBDOVEIJt8LvaRvDG5ARAoa5dBeHaB472NRc= github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5 h1:rFw4nCn9iMW+Vajsk51NtYIcwSTkXr+JGrMd36kTDJw= github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= github.com/agiledragon/gomonkey v2.0.2+incompatible/go.mod h1:2NGfXu1a80LLr2cmWXGBDaHEjb1idR6+FVlX5T3D9hw= -github.com/agnivade/levenshtein v1.1.1 h1:QY8M92nrzkmr798gCo3kmMyqXFzdQVpxLlGPRBij0P8= -github.com/agnivade/levenshtein v1.1.1/go.mod h1:veldBMzWxcCG2ZvUTKD2kJNRdCk5hVbJomOvKkmgYbo= +github.com/agnivade/levenshtein v1.0.1 h1:3oJU7J3FGFmyhn8KHjmVaZCN5hxTr7GxgRue+sxIXdQ= +github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM= github.com/agrea/ptr v0.0.0-20180711073057-77a518d99b7b h1:WMhlIaJkDgEQSVJQM06YV+cYUl1r5OY5//ijMXJNqtA= github.com/agrea/ptr v0.0.0-20180711073057-77a518d99b7b/go.mod h1:Tie46d3UWzXpj+Fh9+DQTyaUxEpFBPOLXrnx7nxlKRo= github.com/ajg/form v1.5.1 h1:t9c7v8JUKu/XxOGBU0yjNpaMloxGEJhUkqFRq0ibGeU= @@ -211,97 +248,104 @@ github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuy github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= +github.com/alexflint/go-filemutex v0.0.0-20171022225611-72bdc8eae2ae/go.mod h1:CgnQgUtFrFz9mxFNtED3jI5tLDjKlOM+oUF/sTk6ps0= +github.com/alexflint/go-filemutex v1.1.0/go.mod h1:7P4iRhttt/nUvUOrYIhcpMzv2G6CY9UnI16Z+UJqRyk= github.com/alibaba/sentinel-golang v1.0.4 h1:i0wtMvNVdy7vM4DdzYrlC4r/Mpk1OKUUBurKKkWhEo8= github.com/alibaba/sentinel-golang v1.0.4/go.mod h1:Lag5rIYyJiPOylK8Kku2P+a23gdKMMqzQS7wTnjWEpk= github.com/alibabacloud-go/alibabacloud-gateway-spi v0.0.4 h1:iC9YFYKDGEy3n/FtqJnOkZsene9olVspKmkX5A2YBEo= github.com/alibabacloud-go/alibabacloud-gateway-spi v0.0.4/go.mod h1:sCavSAvdzOjul4cEqeVtvlSaSScfNsTQ+46HwlTL1hc= -github.com/alibabacloud-go/darabonba-openapi v0.1.18/go.mod h1:PB4HffMhJVmAgNKNq3wYbTUlFvPgxJpTzd1F5pTuUsc= -github.com/alibabacloud-go/darabonba-openapi v0.2.1 h1:WyzxxKvhdVDlwpAMOHgAiCJ+NXa6g5ZWPFEzaK/ewwY= -github.com/alibabacloud-go/darabonba-openapi v0.2.1/go.mod h1:zXOqLbpIqq543oioL9IuuZYOQgHQ5B8/n5OPrnko8aY= +github.com/alibabacloud-go/darabonba-openapi v0.1.4/go.mod h1:j03z4XUkIC9aBj/w5Bt7H0cygmPNt5sug8NXle68+Og= +github.com/alibabacloud-go/darabonba-openapi v0.1.16 h1:f6ZspWKTBurQzyLpZKMVxO51HAePY8aedicwuX3+E20= +github.com/alibabacloud-go/darabonba-openapi v0.1.16/go.mod h1:ZjyqRbbZOaUBSh7keeH8VQN/BzCPvxCQwMuJGDdbmXQ= github.com/alibabacloud-go/darabonba-string v1.0.0/go.mod h1:93cTfV3vuPhhEwGGpKKqhVW4jLe7tDpo3LUM0i0g6mA= github.com/alibabacloud-go/debug v0.0.0-20190504072949-9472017b5c68 h1:NqugFkGxx1TXSh/pBcU00Y6bljgDPaFdh5MUSeJ7e50= github.com/alibabacloud-go/debug v0.0.0-20190504072949-9472017b5c68/go.mod h1:6pb/Qy8c+lqua8cFpEy7g39NRRqOWc3rOwAy8m5Y2BY= github.com/alibabacloud-go/endpoint-util v1.1.0 h1:r/4D3VSw888XGaeNpP994zDUaxdgTSHBbVfZlzf6b5Q= github.com/alibabacloud-go/endpoint-util v1.1.0/go.mod h1:O5FuCALmCKs2Ff7JFJMudHs0I5EBgecXXxZRyswlEjE= -github.com/alibabacloud-go/oos-20190601 v1.0.4 h1:IhydPmon5M+ZywO9swx8TTOxy9M5qJewZjUvREcMkgw= -github.com/alibabacloud-go/oos-20190601 v1.0.4/go.mod h1:4wmBcZmYoJMFc6LcBvGiAiUs6G+ty7F/eob/r2dOvFg= -github.com/alibabacloud-go/openapi-util v0.0.11 h1:iYnqOPR5hyEEnNZmebGyRMkkEJRWUEjDiiaOHZ5aNhA= -github.com/alibabacloud-go/openapi-util v0.0.11/go.mod h1:sQuElr4ywwFRlCCberQwKRFhRzIyG4QTP/P4y1CJ6Ws= +github.com/alibabacloud-go/oos-20190601 v1.0.1 h1:Rx/ITYWxNKZ0YloLclBmS99ii6EpvhL0mlCZ5mBgtPM= +github.com/alibabacloud-go/oos-20190601 v1.0.1/go.mod h1:t7g1ubvGwLe0cP+uLSrTza2S6xthOFZw43h9Zajt+Kw= +github.com/alibabacloud-go/openapi-util v0.0.7/go.mod h1:sQuElr4ywwFRlCCberQwKRFhRzIyG4QTP/P4y1CJ6Ws= +github.com/alibabacloud-go/openapi-util v0.0.10 h1:wzTQc6ZSHhCI1FybUITHE26451zLgQAmYdTaMOUmoqE= +github.com/alibabacloud-go/openapi-util v0.0.10/go.mod h1:sQuElr4ywwFRlCCberQwKRFhRzIyG4QTP/P4y1CJ6Ws= github.com/alibabacloud-go/tea v1.1.0/go.mod h1:IkGyUSX4Ba1V+k4pCtJUc6jDpZLFph9QMy2VUPTwukg= github.com/alibabacloud-go/tea v1.1.7/go.mod h1:/tmnEaQMyb4Ky1/5D+SE1BAsa5zj/KeGOFfwYm3N/p4= github.com/alibabacloud-go/tea v1.1.8/go.mod h1:/tmnEaQMyb4Ky1/5D+SE1BAsa5zj/KeGOFfwYm3N/p4= github.com/alibabacloud-go/tea v1.1.11/go.mod h1:/tmnEaQMyb4Ky1/5D+SE1BAsa5zj/KeGOFfwYm3N/p4= +github.com/alibabacloud-go/tea v1.1.15/go.mod h1:nXxjm6CIFkBhwW4FQkNrolwbfon8Svy6cujmKFUq98A= +github.com/alibabacloud-go/tea v1.1.17 h1:05R5DnaJXe9sCNIe8KUgWHC/z6w/VZIwczgUwzRnul8= github.com/alibabacloud-go/tea v1.1.17/go.mod h1:nXxjm6CIFkBhwW4FQkNrolwbfon8Svy6cujmKFUq98A= -github.com/alibabacloud-go/tea v1.1.19 h1:Xroq0M+pr0mC834Djj3Fl4ZA8+GGoA0i7aWse1vmgf4= -github.com/alibabacloud-go/tea v1.1.19/go.mod h1:nXxjm6CIFkBhwW4FQkNrolwbfon8Svy6cujmKFUq98A= github.com/alibabacloud-go/tea-utils v1.3.1/go.mod h1:EI/o33aBfj3hETm4RLiAxF/ThQdSngxrpF8rKUDJjPE= +github.com/alibabacloud-go/tea-utils v1.3.9/go.mod h1:EI/o33aBfj3hETm4RLiAxF/ThQdSngxrpF8rKUDJjPE= +github.com/alibabacloud-go/tea-utils v1.4.3 h1:8SzwmmRrOnQ09Hf5a9GyfJc0d7Sjv6fmsZoF4UDbFjo= github.com/alibabacloud-go/tea-utils v1.4.3/go.mod h1:KNcT0oXlZZxOXINnZBs6YvgOd5aYp9U67G+E3R8fcQw= -github.com/alibabacloud-go/tea-utils v1.4.5 h1:h0/6Xd2f3bPE4XHTvkpjwxowIwRCJAJOqY6Eq8f3zfA= -github.com/alibabacloud-go/tea-utils v1.4.5/go.mod h1:KNcT0oXlZZxOXINnZBs6YvgOd5aYp9U67G+E3R8fcQw= -github.com/alibabacloud-go/tea-xml v1.1.2 h1:oLxa7JUXm2EDFzMg+7oRsYc+kutgCVwm+bZlhhmvW5M= -github.com/alibabacloud-go/tea-xml v1.1.2/go.mod h1:Rq08vgCcCAjHyRi/M7xlHKUykZCEtyBy9+DPF6GgEu8= github.com/alicebob/gopher-json v0.0.0-20200520072559-a9ecdc9d1d3a h1:HbKu58rmZpUGpz5+4FfNmIU+FmZg2P3Xaj2v2bfNWmk= github.com/alicebob/gopher-json v0.0.0-20200520072559-a9ecdc9d1d3a/go.mod h1:SGnFV6hVsYE877CKEZ6tDNTjaSXYUk6QqoIK6PrAtcc= -github.com/alicebob/miniredis/v2 v2.23.0 h1:+lwAJYjvvdIVg6doFHuotFjueJ/7KY10xo/vm3X3Scw= -github.com/alicebob/miniredis/v2 v2.23.0/go.mod h1:XNqvJdQJv5mSuVMc0ynneafpnL/zv52acZ6kqeS0t88= +github.com/alicebob/miniredis/v2 v2.13.3 h1:kohgdtN58KW/r9ZDVmMJE3MrfbumwsDQStd0LPAGmmw= +github.com/alicebob/miniredis/v2 v2.13.3/go.mod h1:uS970Sw5Gs9/iK3yBg0l9Uj9s25wXxSpQUE9EaJ/Blg= +github.com/aliyun/alibaba-cloud-sdk-go v1.61.18 h1:zOVTBdCKFd9JbCKz9/nt+FovbjPFmb7mUnp8nH9fQBA= github.com/aliyun/alibaba-cloud-sdk-go v1.61.18/go.mod h1:v8ESoHo4SyHmuB4b1tJqDHxfTGEciD+yhvOU/5s1Rfk= -github.com/aliyun/alibaba-cloud-sdk-go v1.61.1704 h1:PpfENOj/vPfhhy9N2OFRjpue0hjM5XqAp2thFmkXXIk= -github.com/aliyun/alibaba-cloud-sdk-go v1.61.1704/go.mod h1:RcDobYh8k5VP6TNybz9m++gL3ijVI5wueVr0EM10VsU= -github.com/aliyun/aliyun-log-go-sdk v0.1.38 h1:u20nIZWQnmxOgGdHfMfdmD3h9CaQYANd18Q12pNo1KY= -github.com/aliyun/aliyun-log-go-sdk v0.1.38/go.mod h1:1QQ59pEJiVVXqKgbHcU6FWIgxT5RKBt+CT8AiQ2bEts= -github.com/aliyun/aliyun-oss-go-sdk v2.2.5+incompatible h1:QoRMR0TCctLDqBCMyOu1eXdZyMw3F7uGA9qPn2J4+R8= -github.com/aliyun/aliyun-oss-go-sdk v2.2.5+incompatible/go.mod h1:T/Aws4fEfogEE9v+HPhhw+CntffsBHJ8nXQCwKr0/g8= -github.com/aliyun/aliyun-tablestore-go-sdk v1.7.7 h1:+d/mcgaxx1jaWtFN2WrBHy4XeM9IK5gmZvbbpVkhqHE= -github.com/aliyun/aliyun-tablestore-go-sdk v1.7.7/go.mod h1:mZCxM44kLKLY5ci+0j6bJb0DG8PNQ5Mn40Y0bbYOhpE= +github.com/aliyun/aliyun-log-go-sdk v0.1.37 h1:GvswbgLqVOHNeMWssQ9zA+R7YVDP6arLUP92bKyGZNw= +github.com/aliyun/aliyun-log-go-sdk v0.1.37/go.mod h1:1QQ59pEJiVVXqKgbHcU6FWIgxT5RKBt+CT8AiQ2bEts= +github.com/aliyun/aliyun-oss-go-sdk v2.0.7+incompatible h1:HXvOJsZw8JT/ldxjX74Aq4H2IY4ojV/mXMDPWFitpv8= +github.com/aliyun/aliyun-oss-go-sdk v2.0.7+incompatible/go.mod h1:T/Aws4fEfogEE9v+HPhhw+CntffsBHJ8nXQCwKr0/g8= +github.com/aliyun/aliyun-tablestore-go-sdk v1.6.0 h1:Vug1AcQD1bOW1AMrr+61oTCP/NWhGDYzN2FuMXT78yQ= +github.com/aliyun/aliyun-tablestore-go-sdk v1.6.0/go.mod h1:jixoiNNRR/4ziq0yub1fTlxmDcQwlpkaujpaWIATQWM= github.com/aliyun/credentials-go v1.1.2 h1:qU1vwGIBb3UJ8BwunHDRFtAhS6jnQLnde/yk0+Ih2GY= github.com/aliyun/credentials-go v1.1.2/go.mod h1:ozcZaMR5kLM7pwtCMEpVmQ242suV6qTJya2bDq4X1Tw= github.com/aliyunmq/mq-http-go-sdk v1.0.3 h1:/uhH7DUoaw9XTtsPgDp7zdPUyG5FBKj2GmJJph9z+6o= github.com/aliyunmq/mq-http-go-sdk v1.0.3/go.mod h1:JYfRMQoPexERvnNNBcal0ZQ2TVQ5ialDiW9ScjaadEM= github.com/andres-erbsen/clock v0.0.0-20160526145045-9e14626cd129 h1:MzBOUgng9orim59UnfUTLRjMpd09C5uEVQ6RPGeCaVI= github.com/andres-erbsen/clock v0.0.0-20160526145045-9e14626cd129/go.mod h1:rFgpPQZYZ8vdbc+48xibu8ALc3yeyd64IhHS+PU6Yyg= +github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883 h1:bvNMNQO63//z+xNgfBlViaCIJKLlCJ6/fmUseuG0wVQ= +github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= github.com/andybalholm/brotli v1.0.0/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y= github.com/andybalholm/brotli v1.0.4 h1:V7DdXeJtZscaqfNuAdSRuRFzuiKlHSC/Zh3zl9qY3JY= github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= +github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20210826220005-b48c857c3a0e/go.mod h1:F7bn7fEU90QkQ3tnmaTx3LTKLEDqnwWODIYppRQ5hnY= github.com/apache/dubbo-getty v1.4.9-0.20220610060150-8af010f3f3dc h1:NZRon3MDqT4vddR3UIRBnwbbhEerghAimCSBsiESs3g= github.com/apache/dubbo-getty v1.4.9-0.20220610060150-8af010f3f3dc/go.mod h1:cPJlbcHUTNTpiboMQjMHhE9XBni11LiBiG8FdrDuVzk= github.com/apache/dubbo-go-hessian2 v1.9.1/go.mod h1:xQUjE7F8PX49nm80kChFvepA/AvqAZ0oh/UaB6+6pBE= github.com/apache/dubbo-go-hessian2 v1.9.3/go.mod h1:xQUjE7F8PX49nm80kChFvepA/AvqAZ0oh/UaB6+6pBE= +github.com/apache/dubbo-go-hessian2 v1.11.0 h1:VTdT6NStuEqNmyT3AdSN2DLDBqhXvAAyAAAoh9hLavk= github.com/apache/dubbo-go-hessian2 v1.11.0/go.mod h1:7rEw9guWABQa6Aqb8HeZcsYPHsOS7XT1qtJvkmI6c5w= -github.com/apache/dubbo-go-hessian2 v1.11.1 h1:03xs4QCAZHY/gHCOWgOmIUW6Yc842FCLz4R0hxCzPr8= -github.com/apache/dubbo-go-hessian2 v1.11.1/go.mod h1:7rEw9guWABQa6Aqb8HeZcsYPHsOS7XT1qtJvkmI6c5w= -github.com/apache/pulsar-client-go v0.9.0 h1:L5jvGFXJm0JNA/PgUiJctTVHHttCe4wIEFDv4vojiQM= -github.com/apache/pulsar-client-go v0.9.0/go.mod h1:fSAcBipgz4KQ/VgwZEJtQ71cCXMKm8ezznstrozrngw= +github.com/apache/pulsar-client-go v0.8.1 h1:UZINLbH3I5YtNzqkju7g9vrl4CKrEgYSx2rbpvGufrE= +github.com/apache/pulsar-client-go v0.8.1/go.mod h1:yJNcvn/IurarFDxwmoZvb2Ieylg630ifxeO/iXpk27I= +github.com/apache/pulsar-client-go/oauth2 v0.0.0-20220120090717-25e59572242e h1:EqiJ0Xil8NmcXyupNqXV9oYDBeWntEIegxLahrTr8DY= +github.com/apache/pulsar-client-go/oauth2 v0.0.0-20220120090717-25e59572242e/go.mod h1:Xee4tgYLFpYcPMcTfBYWE1uKRzeciodGTSEDMzsR6i8= github.com/apache/rocketmq-client-go v1.2.5 h1:2hPoLHpMJy1a57HDNmx7PZKgvlgVYO1Alz925oeqphQ= github.com/apache/rocketmq-client-go v1.2.5/go.mod h1:Kap8oXIVLlHF50BGUbN9z97QUp1GaK1nOoCfsZnR2bw= github.com/apache/rocketmq-client-go/v2 v2.1.0/go.mod h1:oEZKFDvS7sz/RWU0839+dQBupazyBV7WX5cP6nrio0Q= github.com/apache/rocketmq-client-go/v2 v2.1.1-rc2 h1:UQHWhwyw3tSLRhp0lVn/r/uNUzDnBZcDekGSzaXfz0M= github.com/apache/rocketmq-client-go/v2 v2.1.1-rc2/go.mod h1:DDYjQ9wxYmJLjgNK4+RqyFE8/13gLK/Bugz4U6zD5MI= -github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= -github.com/apache/thrift v0.13.0 h1:5hryIiq9gtn+MiLVn0wP37kb/uTeRZgN08WoCsAhIhI= github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= +github.com/apache/thrift v0.16.0 h1:qEy6UW60iVOlUy+b9ZR0d5WzUWYGOo4HfopoyBaNmoY= +github.com/apache/thrift v0.16.0/go.mod h1:PHK3hniurgQaNMZYaCLEqXKsYK8upmhPbmdP2FXSqgU= github.com/appscode/go-querystring v0.0.0-20170504095604-0126cfb3f1dc/go.mod h1:w648aMHEgFYS6xb0KVMMtZ2uMeemhiKCuD2vj6gY52A= -github.com/arbovm/levenshtein v0.0.0-20160628152529-48b4e1c0c4d0 h1:jfIu9sQUG6Ig+0+Ap1h4unLjW6YQJpKZVmUzxsD4E/Q= -github.com/arbovm/levenshtein v0.0.0-20160628152529-48b4e1c0c4d0/go.mod h1:t2tdKJDJF9BV14lnkjHmOQgcvEKgtqs5a1N3LNdJhGE= github.com/ardielle/ardielle-go v1.5.2 h1:TilHTpHIQJ27R1Tl/iITBzMwiUGSlVfiVhwDNGM3Zj4= github.com/ardielle/ardielle-go v1.5.2/go.mod h1:I4hy1n795cUhaVt/ojz83SNVCYIGsAFAONtv2Dr7HUI= github.com/ardielle/ardielle-tools v1.5.4/go.mod h1:oZN+JRMnqGiIhrzkRN9l26Cej9dEx4jeNG6A+AdkShk= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= +github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= github.com/armon/go-metrics v0.0.0-20190430140413-ec5e00d3c878/go.mod h1:3AMJUQhVx52RsWOnlkpikZr01T/yAVN2gn0861vByNg= -github.com/armon/go-metrics v0.3.9 h1:O2sNqxBdvq8Eq5xmzljcYzAORli6RWCvEym4cJf9m18= github.com/armon/go-metrics v0.3.9/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= +github.com/armon/go-metrics v0.3.10 h1:FR+drcQStOe+32sYyJYyZ7FIdgoGGBnwLl+flodp8Uo= +github.com/armon/go-metrics v0.3.10/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= +github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= github.com/asaskevich/govalidator v0.0.0-20200108200545-475eaeb16496 h1:zV3ejI06GQ59hwDQAvmK1qxOQGB3WuVTRoY0okPTAv0= github.com/asaskevich/govalidator v0.0.0-20200108200545-475eaeb16496/go.mod h1:oGkLhpf+kjZl6xBf758TQhh5XrAeiJv/7FRz/2spLIg= github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= +github.com/aws/aws-sdk-go v1.15.11/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZoCYDt7FT0= github.com/aws/aws-sdk-go v1.19.48/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.32.6/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0= -github.com/aws/aws-sdk-go v1.44.119 h1:TPkpDsanBMcZaF5wHwpKhjkapRV/b7d2qdC+a+IPbmY= -github.com/aws/aws-sdk-go v1.44.119/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= +github.com/aws/aws-sdk-go v1.34.28/go.mod h1:H7NKnBqNVzoTJpGfLrQkkD+ytBA93eiDYi/+8rV9s48= +github.com/aws/aws-sdk-go v1.43.16 h1:Y7wBby44f+tINqJjw5fLH3vA+gFq4uMITIKqditwM14= +github.com/aws/aws-sdk-go v1.43.16/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= github.com/aws/aws-sdk-go-v2 v1.9.2/go.mod h1:cK/D0BBs0b/oWPIcX/Z/obahJK1TT7IPVjy53i/mX/4= github.com/aws/aws-sdk-go-v2/config v1.8.3/go.mod h1:4AEiLtAb8kLs7vgw2ZV3p2VZ1+hBavOc84hqxVNpCyw= @@ -316,8 +360,15 @@ github.com/aws/smithy-go v1.8.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAm github.com/awslabs/kinesis-aggregation/go v0.0.0-20210630091500-54e17340d32f h1:Pf0BjJDga7C98f0vhw+Ip5EaiE07S3lTKpIYPNS0nMo= github.com/awslabs/kinesis-aggregation/go v0.0.0-20210630091500-54e17340d32f/go.mod h1:SghidfnxvX7ribW6nHI7T+IBbc9puZ9kk5Tx/88h8P4= github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuPk= -github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= +github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd30/FjWUq4= +github.com/baiyubin/aliyun-sts-go-sdk v0.0.0-20180326062324-cfa1a18b161f h1:ZNv7On9kyUzm7fvRZumSyy/IUiSC7AzL0I1jKKtwooA= +github.com/baiyubin/aliyun-sts-go-sdk v0.0.0-20180326062324-cfa1a18b161f/go.mod h1:AuiFmCCPBSrqvVMvuqFuk0qogytodnVFVSN5CeJB8Gc= +github.com/beefsack/go-rate v0.0.0-20220214233405-116f4ca011a0/go.mod h1:6YNgTHLutezwnBvyneBbwvB8C82y3dcoOj5EQJIdGXA= +github.com/benbjohnson/clock v1.0.3/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= +github.com/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A= +github.com/benbjohnson/clock v1.3.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= +github.com/beorn7/perks v0.0.0-20160804104726-4c0e84591b9a/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= @@ -325,44 +376,66 @@ github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6r github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bitly/go-hostpool v0.0.0-20171023180738-a3a6125de932 h1:mXoPYz/Ul5HYEDvkta6I8/rnYM5gSdSV2tJ6XbZuEtY= github.com/bitly/go-hostpool v0.0.0-20171023180738-a3a6125de932/go.mod h1:NOuUCSz6Q9T7+igc/hlvDOUdtWKryOrtFyIVABv/p7k= +github.com/bitly/go-simplejson v0.5.0/go.mod h1:cXHtHw4XUPsvGaxgjIAn8PhEWG9NfngEKAMDJEczWVA= github.com/bits-and-blooms/bitset v1.2.0 h1:Kn4yilvwNtMACtf1eYDlG8H77R07mZSPbMjLyS07ChA= github.com/bits-and-blooms/bitset v1.2.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM= +github.com/blang/semver v3.1.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= +github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 h1:DDGfHa7BWjL4YnC6+E63dPcxHo2sUxDIu8g3QgEJdRY= github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4= github.com/bmizerany/perks v0.0.0-20141205001514-d9a9656a3a4b/go.mod h1:ac9efd0D1fsDb3EJvhqgXRbFx7bs2wqZ10HQPeU8U/Q= -github.com/bradfitz/gomemcache v0.0.0-20220106215444-fb4bf637b56d h1:pVrfxiGfwelyab6n21ZBkbkmbevaf+WvMIiR7sr97hw= -github.com/bradfitz/gomemcache v0.0.0-20220106215444-fb4bf637b56d/go.mod h1:H0wQNHz2YrLsuXOZozoeDmnHXkNCRmMW0gwFWDfEZDA= +github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= +github.com/bradfitz/gomemcache v0.0.0-20190913173617-a41fca850d0b h1:L/QXpzIa3pOvUGt1D1lA5KjYhPBAN/3iWdP7xeFS9F0= +github.com/bradfitz/gomemcache v0.0.0-20190913173617-a41fca850d0b/go.mod h1:H0wQNHz2YrLsuXOZozoeDmnHXkNCRmMW0gwFWDfEZDA= +github.com/bshuster-repo/logrus-logstash-hook v0.4.1/go.mod h1:zsTqEiSzDgAa/8GZR7E1qaXrhYNDKBYy5/dWPTIflbk= +github.com/bshuster-repo/logrus-logstash-hook v1.0.0/go.mod h1:zsTqEiSzDgAa/8GZR7E1qaXrhYNDKBYy5/dWPTIflbk= +github.com/buger/jsonparser v0.0.0-20180808090653-f4dd9f5a6b44/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s= github.com/buger/jsonparser v0.0.0-20181115193947-bf1c66bbce23/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s= github.com/buger/jsonparser v1.1.1 h1:2PnMjfWD7wBILjqQbt530v576A/cAbQvEW9gGIpYMUs= github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0= -github.com/bytecodealliance/wasmtime-go v1.0.0 h1:9u9gqaUiaJeN5IoD1L7egD8atOnTGyJcNp8BhkL9cUU= -github.com/camunda/zeebe/clients/go/v8 v8.1.2 h1:qQhsgGoJIUEncTQYmu+uAtueYFCzfVKFd5YHij0oCsw= -github.com/camunda/zeebe/clients/go/v8 v8.1.2/go.mod h1:HZ7hlFKAfCkdLeLds0nqEO48FDRl8LCBaAtDu9GxaAI= +github.com/bugsnag/bugsnag-go v0.0.0-20141110184014-b1d153021fcd/go.mod h1:2oa8nejYd4cQ/b0hMIopN0lCRxU0bueqREvZLWFrtK8= +github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b/go.mod h1:obH5gd0BsqsP2LwDJ9aOkm/6J86V6lyAXCoQWGw3K50= +github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0/go.mod h1:D/8v3kj0zr8ZAKg1AQ6crr+5VwKN5eIywRkfhyM/+dE= +github.com/bytecodealliance/wasmtime-go v0.36.0/go.mod h1:q320gUxqyI8yB+ZqRuaJOEnGkAnHh6WtJjMaT2CW4wI= +github.com/bytecodealliance/wasmtime-go v0.39.0 h1:35AXy5+py5ZXRSpfoxqh+dWJ7nJnIrW1avjDfaJinxU= +github.com/camunda/zeebe/clients/go/v8 v8.0.4 h1:8r2InKZDn0jTj8OPtBbKR2CSLgJD8Hgqw/rp3jiLhX8= +github.com/camunda/zeebe/clients/go/v8 v8.0.4/go.mod h1:vqeNO1EphExqC15spP56PNXQ6SB8sMjhEfO16bfFRPo= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= github.com/cenkalti/backoff v2.0.0+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= +github.com/cenkalti/backoff v2.1.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= +github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/cenkalti/backoff/v4 v4.1.2/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/certifi/gocertifi v0.0.0-20191021191039-0944d244cd40/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA= +github.com/certifi/gocertifi v0.0.0-20200922220541-2c3bb06c6054/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA= github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/checkpoint-restore/go-criu/v4 v4.1.0/go.mod h1:xUQBLp4RLc5zJtWY++yjOoMoB5lihDt7fai+75m+rGw= +github.com/checkpoint-restore/go-criu/v5 v5.0.0/go.mod h1:cfwC0EG7HMUenopBsUf9d89JlCLQIfgVcNsNN0t6T2M= +github.com/checkpoint-restore/go-criu/v5 v5.3.0/go.mod h1:E/eQpaFtUKGOOSEBZgmKAcn+zUUwWxqcaKZlF54wK8E= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/cilium/ebpf v0.0.0-20200110133405-4032b1d8aae3/go.mod h1:MA5e5Lr8slmEg9bt0VpxxWqJlO4iwu3FBdHUzV7wQVg= +github.com/cilium/ebpf v0.0.0-20200702112145-1c8d4c9ef775/go.mod h1:7cR51M8ViRLIdUjrmSXlK9pkrsDlLHbO8jiB8X8JnOc= +github.com/cilium/ebpf v0.2.0/go.mod h1:To2CFviqOWL/M0gIMsvSMlqe7em/l1ALkX1PyjrX2Qs= +github.com/cilium/ebpf v0.4.0/go.mod h1:4tRaxcgiL706VnOzHOdBlY8IEAIdxINsQBcU4xJJXRs= +github.com/cilium/ebpf v0.6.2/go.mod h1:4tRaxcgiL706VnOzHOdBlY8IEAIdxINsQBcU4xJJXRs= +github.com/cilium/ebpf v0.7.0/go.mod h1:/oI2+1shJiTGAMgl6/RgJr36Eo1jzrRcAWbcXO2usCA= github.com/cinience/go_rocketmq v0.0.2 h1:HZkcQ2wfwZeigkpUs71Gojp/WRiBzkz2uezrOFquh08= github.com/cinience/go_rocketmq v0.0.2/go.mod h1:2YNY7emT546dcFpMEWLesmAEi4ndW7+tX5VfNf1Zsgs= github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= -github.com/clbanning/mxj/v2 v2.5.5/go.mod h1:hNiWqW14h+kc+MdF9C6/YoRfjEJoR3ou6tn/Qo+ve2s= -github.com/clbanning/mxj/v2 v2.5.6 h1:Jm4VaCI/+Ug5Q57IzEoZbwx4iQFA6wkXv72juUSeK+g= -github.com/clbanning/mxj/v2 v2.5.6/go.mod h1:hNiWqW14h+kc+MdF9C6/YoRfjEJoR3ou6tn/Qo+ve2s= github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cloudflare/golz4 v0.0.0-20150217214814-ef862a3cdc58 h1:F1EaeKL/ta07PY/k9Os/UFtwERei2/XzGemhpGnBKNg= @@ -376,35 +449,155 @@ github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20211130200136-a8f946100490/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= github.com/cockroachdb/datadriven v0.0.0-20200714090401-bf6692d28da5/go.mod h1:h6jFvWxBdQXxjopDMZyH2UVceIRfR84bdzbkoKrsWNo= github.com/cockroachdb/errors v1.2.4/go.mod h1:rQD95gz6FARkaKkQXUksEje/d9a6wBJoCr5oaCLELYA= github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f/go.mod h1:i/u985jwjWRlyHXQbwatDASoW0RMlZ/3i9yJHE2xLkI= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= +github.com/containerd/aufs v0.0.0-20200908144142-dab0cbea06f4/go.mod h1:nukgQABAEopAHvB6j7cnP5zJ+/3aVcE7hCYqvIwAHyE= +github.com/containerd/aufs v0.0.0-20201003224125-76a6863f2989/go.mod h1:AkGGQs9NM2vtYHaUen+NljV0/baGCAPELGm2q9ZXpWU= +github.com/containerd/aufs v0.0.0-20210316121734-20793ff83c97/go.mod h1:kL5kd6KM5TzQjR79jljyi4olc1Vrx6XBlcyj3gNv2PU= +github.com/containerd/aufs v1.0.0/go.mod h1:kL5kd6KM5TzQjR79jljyi4olc1Vrx6XBlcyj3gNv2PU= +github.com/containerd/btrfs v0.0.0-20201111183144-404b9149801e/go.mod h1:jg2QkJcsabfHugurUvvPhS3E08Oxiuh5W/g1ybB4e0E= +github.com/containerd/btrfs v0.0.0-20210316141732-918d888fb676/go.mod h1:zMcX3qkXTAi9GI50+0HOeuV8LU2ryCE/V2vG/ZBiTss= +github.com/containerd/btrfs v1.0.0/go.mod h1:zMcX3qkXTAi9GI50+0HOeuV8LU2ryCE/V2vG/ZBiTss= +github.com/containerd/cgroups v0.0.0-20190717030353-c4b9ac5c7601/go.mod h1:X9rLEHIqSf/wfK8NsPqxJmeZgW4pcfzdXITDrUSJ6uI= +github.com/containerd/cgroups v0.0.0-20190919134610-bf292b21730f/go.mod h1:OApqhQ4XNSNC13gXIwDjhOQxjWa/NxkwZXJ1EvqT0ko= +github.com/containerd/cgroups v0.0.0-20200531161412-0dbf7f05ba59/go.mod h1:pA0z1pT8KYB3TCXK/ocprsh7MAkoW8bZVzPdih9snmM= +github.com/containerd/cgroups v0.0.0-20200710171044-318312a37340/go.mod h1:s5q4SojHctfxANBDvMeIaIovkq29IP48TKAxnhYRxvo= +github.com/containerd/cgroups v0.0.0-20200824123100-0b889c03f102/go.mod h1:s5q4SojHctfxANBDvMeIaIovkq29IP48TKAxnhYRxvo= +github.com/containerd/cgroups v0.0.0-20210114181951-8a68de567b68/go.mod h1:ZJeTFisyysqgcCdecO57Dj79RfL0LNeGiFUqLYQRYLE= +github.com/containerd/cgroups v1.0.1/go.mod h1:0SJrPIenamHDcZhEcJMNBB85rHcUsw4f25ZfBiPYRkU= +github.com/containerd/cgroups v1.0.3/go.mod h1:/ofk34relqNjSGyqPrmEULrO4Sc8LJhvJmWbUCUKqj8= +github.com/containerd/console v0.0.0-20180822173158-c12b1e7919c1/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw= +github.com/containerd/console v0.0.0-20181022165439-0650fd9eeb50/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw= +github.com/containerd/console v0.0.0-20191206165004-02ecf6a7291e/go.mod h1:8Pf4gM6VEbTNRIT26AyyU7hxdQU3MvAvxVI0sc00XBE= +github.com/containerd/console v1.0.1/go.mod h1:XUsP6YE/mKtz6bxc+I8UiKKTP04qjQL4qcS3XoQ5xkw= +github.com/containerd/console v1.0.2/go.mod h1:ytZPjGgY2oeTkAONYafi2kSj0aYggsf8acV1PGKCbzQ= +github.com/containerd/console v1.0.3/go.mod h1:7LqA/THxQ86k76b8c/EMSiaJ3h1eZkMkXar0TQ1gf3U= +github.com/containerd/containerd v1.2.10/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/containerd v1.3.0-beta.2.0.20190828155532-0293cbd26c69/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/containerd v1.3.0/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/containerd v1.3.1-0.20191213020239-082f7e3aed57/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/containerd v1.3.2/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/containerd v1.4.0-beta.2.0.20200729163537-40b22ef07410/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/containerd v1.4.1/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/containerd v1.4.3/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/containerd v1.4.9/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/containerd v1.5.0-beta.1/go.mod h1:5HfvG1V2FsKesEGQ17k5/T7V960Tmcumvqn8Mc+pCYQ= +github.com/containerd/containerd v1.5.0-beta.3/go.mod h1:/wr9AVtEM7x9c+n0+stptlo/uBBoBORwEx6ardVcmKU= +github.com/containerd/containerd v1.5.0-beta.4/go.mod h1:GmdgZd2zA2GYIBZ0w09ZvgqEq8EfBp/m3lcVZIvPHhI= +github.com/containerd/containerd v1.5.0-rc.0/go.mod h1:V/IXoMqNGgBlabz3tHD2TWDoTJseu1FGOKuoA4nNb2s= +github.com/containerd/containerd v1.5.1/go.mod h1:0DOxVqwDy2iZvrZp2JUx/E+hS0UNTVn7dJnIOwtYR4g= +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.6/go.mod h1:ZoP1geJldzCVY3Tonoz7b1IXk8rIX0Nltt5QE4OMNk0= +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= +github.com/containerd/continuity v0.0.0-20200710164510-efbc4488d8fe/go.mod h1:cECdGN1O8G9bgKTlLhuPJimka6Xb/Gg7vYzCTNVxhvo= +github.com/containerd/continuity v0.0.0-20201208142359-180525291bb7/go.mod h1:kR3BEg7bDFaEddKm54WSmrol1fKWDU1nKYkgrcgZT7Y= +github.com/containerd/continuity v0.0.0-20210208174643-50096c924a4e/go.mod h1:EXlVlkqNba9rJe3j7w3Xa924itAMLgZH4UD/Q4PExuQ= +github.com/containerd/continuity v0.1.0/go.mod h1:ICJu0PwR54nI0yPEnJ6jcS+J7CZAUXrLh8lPo2knzsM= +github.com/containerd/continuity v0.2.2/go.mod h1:pWygW9u7LtS1o4N/Tn0FoCFDIXZ7rxcMX7HX1Dmibvk= +github.com/containerd/fifo v0.0.0-20180307165137-3d5202aec260/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI= +github.com/containerd/fifo v0.0.0-20190226154929-a9fb20d87448/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI= +github.com/containerd/fifo v0.0.0-20200410184934-f15a3290365b/go.mod h1:jPQ2IAeZRCYxpS/Cm1495vGFww6ecHmMk1YJH2Q5ln0= +github.com/containerd/fifo v0.0.0-20201026212402-0724c46b320c/go.mod h1:jPQ2IAeZRCYxpS/Cm1495vGFww6ecHmMk1YJH2Q5ln0= +github.com/containerd/fifo v0.0.0-20210316144830-115abcc95a1d/go.mod h1:ocF/ME1SX5b1AOlWi9r677YJmCPSwwWnQ9O123vzpE4= +github.com/containerd/fifo v1.0.0/go.mod h1:ocF/ME1SX5b1AOlWi9r677YJmCPSwwWnQ9O123vzpE4= +github.com/containerd/go-cni v1.0.1/go.mod h1:+vUpYxKvAF72G9i1WoDOiPGRtQpqsNW/ZHtSlv++smU= +github.com/containerd/go-cni v1.0.2/go.mod h1:nrNABBHzu0ZwCug9Ije8hL2xBCYh/pjfMb1aZGrrohk= +github.com/containerd/go-cni v1.1.0/go.mod h1:Rflh2EJ/++BA2/vY5ao3K6WJRR/bZKsX123aPk+kUtA= +github.com/containerd/go-cni v1.1.3/go.mod h1:Rflh2EJ/++BA2/vY5ao3K6WJRR/bZKsX123aPk+kUtA= +github.com/containerd/go-cni v1.1.6/go.mod h1:BWtoWl5ghVymxu6MBjg79W9NZrCRyHIdUtk4cauMe34= +github.com/containerd/go-runc v0.0.0-20180907222934-5a6d9f37cfa3/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0= +github.com/containerd/go-runc v0.0.0-20190911050354-e029b79d8cda/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0= +github.com/containerd/go-runc v0.0.0-20200220073739-7016d3ce2328/go.mod h1:PpyHrqVs8FTi9vpyHwPwiNEGaACDxT/N/pLcvMSRA9g= +github.com/containerd/go-runc v0.0.0-20201020171139-16b287bc67d0/go.mod h1:cNU0ZbCgCQVZK4lgG3P+9tn9/PaJNmoDXPpoJhDR+Ok= +github.com/containerd/go-runc v1.0.0/go.mod h1:cNU0ZbCgCQVZK4lgG3P+9tn9/PaJNmoDXPpoJhDR+Ok= +github.com/containerd/imgcrypt v1.0.1/go.mod h1:mdd8cEPW7TPgNG4FpuP3sGBiQ7Yi/zak9TYCG3juvb0= +github.com/containerd/imgcrypt v1.0.4-0.20210301171431-0ae5c75f59ba/go.mod h1:6TNsg0ctmizkrOgXRNQjAPFWpMYRWuiB6dSF4Pfa5SA= +github.com/containerd/imgcrypt v1.1.1-0.20210312161619-7ed62a527887/go.mod h1:5AZJNI6sLHJljKuI9IHnw1pWqo/F0nGDOuR9zgTs7ow= +github.com/containerd/imgcrypt v1.1.1/go.mod h1:xpLnwiQmEUJPvQoAapeb2SNCxz7Xr6PJrXQb0Dpc4ms= +github.com/containerd/imgcrypt v1.1.3/go.mod h1:/TPA1GIDXMzbj01yd8pIbQiLdQxed5ue1wb8bP7PQu4= +github.com/containerd/imgcrypt v1.1.4/go.mod h1:LorQnPtzL/T0IyCeftcsMEO7AqxUDbdO8j/tSUpgxvo= +github.com/containerd/nri v0.0.0-20201007170849-eb1350a75164/go.mod h1:+2wGSDGFYfE5+So4M5syatU0N0f0LbWpuqyMi4/BE8c= +github.com/containerd/nri v0.0.0-20210316161719-dbaa18c31c14/go.mod h1:lmxnXF6oMkbqs39FiCt1s0R2HSMhcLel9vNL3m4AaeY= +github.com/containerd/nri v0.1.0/go.mod h1:lmxnXF6oMkbqs39FiCt1s0R2HSMhcLel9vNL3m4AaeY= +github.com/containerd/stargz-snapshotter/estargz v0.4.1/go.mod h1:x7Q9dg9QYb4+ELgxmo4gBUeJB0tl5dqH1Sdz0nJU1QM= +github.com/containerd/ttrpc v0.0.0-20190828154514-0e0f228740de/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o= +github.com/containerd/ttrpc v0.0.0-20190828172938-92c8520ef9f8/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o= +github.com/containerd/ttrpc v0.0.0-20191028202541-4f1b8fe65a5c/go.mod h1:LPm1u0xBw8r8NOKoOdNMeVHSawSsltak+Ihv+etqsE8= +github.com/containerd/ttrpc v1.0.1/go.mod h1:UAxOpgT9ziI0gJrmKvgcZivgxOp8iFPSk8httJEt98Y= +github.com/containerd/ttrpc v1.0.2/go.mod h1:UAxOpgT9ziI0gJrmKvgcZivgxOp8iFPSk8httJEt98Y= +github.com/containerd/ttrpc v1.1.0/go.mod h1:XX4ZTnoOId4HklF4edwc4DcqskFZuvXB1Evzy5KFQpQ= +github.com/containerd/typeurl v0.0.0-20180627222232-a93fcdb778cd/go.mod h1:Cm3kwCdlkCfMSHURc+r6fwoGH6/F1hH3S4sg0rLFWPc= +github.com/containerd/typeurl v0.0.0-20190911142611-5eb25027c9fd/go.mod h1:GeKYzf2pQcqv7tJ0AoCuuhtnqhva5LNU3U+OyKxxJpk= +github.com/containerd/typeurl v1.0.1/go.mod h1:TB1hUtrpaiO88KEK56ijojHS1+NeF0izUACaJW2mdXg= +github.com/containerd/typeurl v1.0.2/go.mod h1:9trJWW2sRlGub4wZJRTW83VtbOLS6hwcDZXTn6oPz9s= +github.com/containerd/zfs v0.0.0-20200918131355-0a33824f23a2/go.mod h1:8IgZOBdv8fAgXddBT4dBXJPtxyRsejFIpXoklgxgEjw= +github.com/containerd/zfs v0.0.0-20210301145711-11e8f1707f62/go.mod h1:A9zfAbMlQwE+/is6hi0Xw8ktpL+6glmqZYtevJgaB8Y= +github.com/containerd/zfs v0.0.0-20210315114300-dde8f0fda960/go.mod h1:m+m51S1DvAP6r3FcmYCp54bQ34pyOwTieQDNRIRHsFY= +github.com/containerd/zfs v0.0.0-20210324211415-d5c4544f0433/go.mod h1:m+m51S1DvAP6r3FcmYCp54bQ34pyOwTieQDNRIRHsFY= +github.com/containerd/zfs v1.0.0/go.mod h1:m+m51S1DvAP6r3FcmYCp54bQ34pyOwTieQDNRIRHsFY= +github.com/containernetworking/cni v0.7.1/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= +github.com/containernetworking/cni v0.8.0/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= +github.com/containernetworking/cni v0.8.1/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= +github.com/containernetworking/cni v1.0.1/go.mod h1:AKuhXbN5EzmD4yTNtfSsX3tPcmtrBI6QcRV0NiNt15Y= +github.com/containernetworking/cni v1.1.1/go.mod h1:sDpYKmGVENF3s6uvMvGgldDWeG8dMxakj/u+i9ht9vw= +github.com/containernetworking/plugins v0.8.6/go.mod h1:qnw5mN19D8fIwkqW7oHHYDHVlzhJpcY6TQxn/fUyDDM= +github.com/containernetworking/plugins v0.9.1/go.mod h1:xP/idU2ldlzN6m4p5LmGiwRDjeJr6FLK6vuiUwoH7P8= +github.com/containernetworking/plugins v1.0.1/go.mod h1:QHCfGpaTwYTbbH+nZXKVTxNBDZcxSOplJT5ico8/FLE= +github.com/containernetworking/plugins v1.1.1/go.mod h1:Sr5TH/eBsGLXK/h71HeLfX19sZPp3ry5uHSkI4LPxV8= +github.com/containers/ocicrypt v1.0.1/go.mod h1:MeJDzk1RJHv89LjsH0Sp5KTY3ZYkjXO/C+bKAeWFIrc= +github.com/containers/ocicrypt v1.1.0/go.mod h1:b8AOe0YR67uU8OqfVNcznfFpAzu3rdgUV4GP9qXPfu4= +github.com/containers/ocicrypt v1.1.1/go.mod h1:Dm55fwWm1YZAjYRaJ94z2mfZikIyIN4B0oB3dj3jFxY= +github.com/containers/ocicrypt v1.1.2/go.mod h1:Dm55fwWm1YZAjYRaJ94z2mfZikIyIN4B0oB3dj3jFxY= +github.com/containers/ocicrypt v1.1.3/go.mod h1:xpdkbVAuaH3WzbEabUd5yDsl9SwJA5pABH85425Es2g= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= +github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/go-oidc v2.2.1+incompatible h1:mh48q/BqXqgjVHpy2ZY7WnWAbenxRjsz9N1i1YxjHAk= -github.com/coreos/go-oidc v2.2.1+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc= +github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= +github.com/coreos/go-iptables v0.4.5/go.mod h1:/mVI274lEDI2ns62jHCDnCyBF9Iwsmekav8Dbxlm1MU= +github.com/coreos/go-iptables v0.5.0/go.mod h1:/mVI274lEDI2ns62jHCDnCyBF9Iwsmekav8Dbxlm1MU= +github.com/coreos/go-iptables v0.6.0/go.mod h1:Qe8Bv2Xik5FyTXwgIbLAnv2sWSBmvWdFETJConOQ//Q= +github.com/coreos/go-oidc v2.1.0+incompatible h1:sdJrfw8akMnCuUlaZU3tE/uYXFgfqom8DBE9so9EBsM= +github.com/coreos/go-oidc v2.1.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-systemd v0.0.0-20161114122254-48702e0da86b/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd/v22 v22.0.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= github.com/coreos/go-systemd/v22 v22.1.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/creasty/defaults v1.5.2 h1:/VfB6uxpyp6h0fr7SPp7n8WJBoV8jfxQXPCnkVSjyls= github.com/creasty/defaults v1.5.2/go.mod h1:FPZ+Y0WNrbqOVw+c6av63eyHUAl6pMHZwqLPvXUZGfY= github.com/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV+0YP4qX0UQ7r2MoYZ+AvYDp12OF5yg4q8rGnyNh4= +github.com/cyphar/filepath-securejoin v0.2.2/go.mod h1:FpkQEhXnPnOthhzymB7CGsFk2G9VLXONKD9G7QGMM+4= github.com/cyphar/filepath-securejoin v0.2.3 h1:YX6ebbZCZP7VkM3scTTokDgBL2TY741X51MTk3ycuNI= github.com/cyphar/filepath-securejoin v0.2.3/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= +github.com/d2g/dhcp4 v0.0.0-20170904100407-a1d1b6c41b1c/go.mod h1:Ct2BUK8SB0YC1SMSibvLzxjeJLnrYEVLULFNiHY9YfQ= +github.com/d2g/dhcp4client v1.0.0/go.mod h1:j0hNfjhrt2SxUOw55nL0ATM/z4Yt3t2Kd1mW34z5W5s= +github.com/d2g/dhcp4server v0.0.0-20181031114812-7d4a0a7f59a5/go.mod h1:Eo87+Kg/IX2hfWJfwxMzLyuSZyxSoAug2nGa1G2QAi8= +github.com/d2g/hardwareaddr v0.0.0-20190221164911-e7d9fbe030e4/go.mod h1:bMl4RjIciD2oAxI7DmWRx6gbeqrkoLqv3MV0vzNad+I= github.com/dancannon/gorethink v4.0.0+incompatible h1:KFV7Gha3AuqT+gr0B/eKvGhbjmUv0qGF43aKCIKVE9A= github.com/dancannon/gorethink v4.0.0+incompatible/go.mod h1:BLvkat9KmZc1efyYwhz3WnybhRZtgF1K929FD8z1avU= +github.com/danieljoos/wincred v1.0.2/go.mod h1:SnuYRW9lp1oJrZX/dXJqr0cPK5gYXqx3EJbmjhLdK9U= +github.com/danieljoos/wincred v1.1.0/go.mod h1:XYlo+eRTsVA9aHGp7NGjFkPla4m+DCL7hqDjlFjiygg= github.com/danieljoos/wincred v1.1.2 h1:QLdCxFs1/Yl4zduvBdcHB8goaYk9RARS2SgLLRuAyr0= github.com/danieljoos/wincred v1.1.2/go.mod h1:GijpziifJoIBfYh+S7BbkdUTU4LfM+QnGqR5Vl2tAx0= github.com/dapr/kit v0.0.2 h1:VNg6RWrBMOdtY0/ZLztyAa/RjyFLaskdO9wt2HIREwk= @@ -413,26 +606,31 @@ github.com/dave/jennifer v1.4.0/go.mod h1:fIb+770HOpJ2fmN9EPPKOqm1vMGhB+TwXKMZhr github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/deepmap/oapi-codegen v1.3.6 h1:Wj44p9A0V0PJ+AUg0BWdyGcsS1LY18U+0rCuPQgK0+o= github.com/deepmap/oapi-codegen v1.3.6/go.mod h1:aBozjEveG+33xPiP55Iw/XbVkhtZHEGLq3nxlX0+hfU= -github.com/denisenkom/go-mssqldb v0.12.3 h1:pBSGx9Tq67pBOTLmxNuirNTeB8Vjmf886Kx+8Y+8shw= -github.com/denisenkom/go-mssqldb v0.12.3/go.mod h1:k0mtMFOnU+AihqFxPMiF05rtiDrorD1Vrm1KEz5hxDo= +github.com/deepmap/oapi-codegen v1.8.1 h1:gSKgzu1DvWfRctnr0UVwieWkg1LEecP0C2htZyBwDTA= +github.com/deepmap/oapi-codegen v1.8.1/go.mod h1:YLgSKSDv/bZQB7N4ws6luhozi3cEdRktEqrX88CvjIw= +github.com/denisenkom/go-mssqldb v0.0.0-20210411162248-d9abbec934ba h1:HuzamveGKQH9cN1TrsZgEoG0sHvTa5j3LKquWaHR3sY= +github.com/denisenkom/go-mssqldb v0.0.0-20210411162248-d9abbec934ba/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU= +github.com/denverdino/aliyungo v0.0.0-20190125010748-a747050bb1ba/go.mod h1:dV8lFg6daOBZbT6/BDGIz6Y3WFGn8juu6G+CQ6LHtl0= github.com/devigned/tab v0.1.1 h1:3mD6Kb1mUOYeLpJvTVSDwSg5ZsfSxfvxGRTxRsJsITA= github.com/devigned/tab v0.1.1/go.mod h1:XG9mPq0dFghrYvoBF3xdRrJzSTX1b7IQrvaL9mzjeJY= -github.com/dghubble/go-twitter v0.0.0-20220816163853-8a0df96f1e6d h1:qiUGPQxwkgoeDXtYaBEioXLEHffmBsRkM/9eum0vLS4= -github.com/dghubble/go-twitter v0.0.0-20220816163853-8a0df96f1e6d/go.mod h1:q7VYuSasPO79IE/QBNAMYVNlzZNy4Zr7vay6is50u5I= -github.com/dghubble/oauth1 v0.7.1 h1:JjbOVSVVkms9A4h/sTQy5Jb2nFuAAVb2qVYgenJPyrE= -github.com/dghubble/oauth1 v0.7.1/go.mod h1:0eEzON0UY/OLACQrmnjgJjmvCGXzjBCsZqL1kWDXtF0= -github.com/dghubble/sling v1.4.0 h1:/n8MRosVTthvMbwlNZgLx579OGVjUOy3GNEv5BIqAWY= -github.com/dghubble/sling v1.4.0/go.mod h1:0r40aNsU9EdDUVBNhfCstAtFgutjgJGYbO1oNzkMoM8= +github.com/dghubble/go-twitter v0.0.0-20190719072343-39e5462e111f h1:M2wB039zeS1/LZtN/3A7tWyfctiOBL4ty5PURBmDdWU= +github.com/dghubble/go-twitter v0.0.0-20190719072343-39e5462e111f/go.mod h1:xfg4uS5LEzOj8PgZV7SQYRHbG7jPUnelEiaAVJxmhJE= +github.com/dghubble/oauth1 v0.6.0 h1:m1yC01Ohc/eF38jwZ8JUjL1a+XHHXtGQgK+MxQbmSx0= +github.com/dghubble/oauth1 v0.6.0/go.mod h1:8pFdfPkv/jr8mkChVbNVuJ0suiHe278BtWI4Tk1ujxk= +github.com/dghubble/sling v1.3.0 h1:pZHjCJq4zJvc6qVQ5wN1jo5oNZlNE0+8T/h0XeXBUKU= +github.com/dghubble/sling v1.3.0/go.mod h1:XXShWaBWKzNLhu2OxikSNFrlsvowtz4kyRuXUG7oQKY= github.com/dgraph-io/badger/v3 v3.2103.2 h1:dpyM5eCJAtQCBcMCZcT4UBZchuTJgCywerHHgmxfxM8= +github.com/dgraph-io/badger/v3 v3.2103.2/go.mod h1:RHo4/GmYcKKh5Lxu63wLEMHJ70Pac2JqZRYGhlyAo2M= github.com/dgraph-io/ristretto v0.1.0 h1:Jv3CGQHp9OjuMBSne1485aDpUkTKEcUqF+jm/LuerPI= +github.com/dgraph-io/ristretto v0.1.0/go.mod h1:fux0lOrBhrVCJd3lcTHsIJhq1T2rokOu6v9Vcb3Q9ug= +github.com/dgrijalva/jwt-go v0.0.0-20170104182250-a601269ab70c/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= +github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= -github.com/dgryski/trifles v0.0.0-20200323201526-dd97f9abfb48 h1:fRzb/w+pyskVMQ+UbP35JkH8yB7MYb4q/qhBarqZE6g= -github.com/dgryski/trifles v0.0.0-20200323201526-dd97f9abfb48/go.mod h1:if7Fbed8SFyPtHLHbg49SI7NAdJiC5WIA09pe59rfAA= github.com/didip/tollbooth v4.0.2+incompatible h1:fVSa33JzSz0hoh2NxpwZtksAzAgd7zjmGO20HCZtF4M= github.com/didip/tollbooth v4.0.2+incompatible/go.mod h1:A9b0665CE6l1KmzpDws2++elm/CsuWBMa5Jv4WY0PEY= github.com/dimchansky/utfbom v1.1.0/go.mod h1:rO41eb7gLfo8SF1jd9F8HplJm1Fewwi4mQvIirEdv+8= @@ -440,8 +638,26 @@ github.com/dimchansky/utfbom v1.1.1 h1:vV6w1AhK4VMnhBno/TPVCoK9U/LP0PkLCS9tbxHdi github.com/dimchansky/utfbom v1.1.1/go.mod h1:SxdoEBH5qIqFocHMyGOXVAybYJdr71b1Q/j0mACtrfE= github.com/dimfeld/httptreemux v5.0.1+incompatible h1:Qj3gVcDNoOthBAqftuD596rm4wg/adLLz5xh5CmpiCA= github.com/dimfeld/httptreemux v5.0.1+incompatible/go.mod h1:rbUlSV+CCpv/SuqUTP/8Bk2O3LyUV436/yaRGkhP6Z0= -github.com/dnaeon/go-vcr v1.2.0 h1:zHCHvJYTMh1N7xnV7zf1m1GPBF9Ad0Jk/whtQ1663qI= -github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ= +github.com/distribution/distribution/v3 v3.0.0-20220526142353-ffbd94cbe269/go.mod h1:28YO/VJk9/64+sTGNuYaBjWxrXTPrj0C0XmgTIOjxX4= +github.com/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E= +github.com/dnaeon/go-vcr v1.1.0 h1:ReYa/UBrRyQdant9B4fNHGoCNKw6qh6P0fsdGmZpR7c= +github.com/docker/cli v0.0.0-20191017083524-a8ff7f821017/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/docker/cli v20.10.17+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/docker/distribution v0.0.0-20190905152932-14b96e55d84c/go.mod h1:0+TTO4EOBfRPhZXAeF1Vu+W3hHZ8eLp8PgKVZlcvtFY= +github.com/docker/distribution v2.7.1-0.20190205005809-0d3efadf0154+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/docker v1.4.2-0.20190924003213-a8608b5b67c7/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v20.10.17+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker-credential-helpers v0.6.3/go.mod h1:WRaJzqw3CTB9bk10avuGsjVBZsD05qeibJ1/TYlvc0Y= +github.com/docker/docker-credential-helpers v0.6.4/go.mod h1:ofX3UI0Gz1TteYBjtgs07O36Pyasyp66D2uKT7H8W1c= +github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= +github.com/docker/go-events v0.0.0-20170721190031-9461782956ad/go.mod h1:Uw6UezgYA44ePAFQYUehOuCzmy5zmg/+nl2ZfMWGkpA= +github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c/go.mod h1:Uw6UezgYA44ePAFQYUehOuCzmy5zmg/+nl2ZfMWGkpA= +github.com/docker/go-metrics v0.0.0-20180209012529-399ea8c73916/go.mod h1:/u0gXw0Gay3ceNrsHubL3BtdOL2fHf93USgMTe0W5dI= +github.com/docker/go-metrics v0.0.1/go.mod h1:cG1hvH2utMXtqgqqYE9plW6lDxS3/5ayHzueweSI3Vw= +github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1/go.mod h1:cyGadeNEkKy96OOhEzfZl+yxihPEzKnqJwvfuSUqbZE= +github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= github.com/dubbogo/go-zookeeper v1.0.3/go.mod h1:fn6n2CAEer3novYgk9ULLwAjuV8/g4DdC2ENwRb6E+c= github.com/dubbogo/go-zookeeper v1.0.4-0.20211212162352-f9d2183d89d5/go.mod h1:fn6n2CAEer3novYgk9ULLwAjuV8/g4DdC2ENwRb6E+c= @@ -459,19 +675,20 @@ github.com/dubbogo/triple v1.1.8/go.mod h1:9pgEahtmsY/avYJp3dzUQE8CMMVe1NtGBmUhf github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/dvsekhvalnov/jose2go v0.0.0-20200901110807-248326c1351b/go.mod h1:7BvyPhdbLxMXIYTFPLsyJRFMsKmOZnQmzh6Gb+uquuM= github.com/dvsekhvalnov/jose2go v1.5.0 h1:3j8ya4Z4kMCwT5nXIKFSV84YS+HdqSSO0VsTQxaLAeM= github.com/dvsekhvalnov/jose2go v1.5.0/go.mod h1:QsHjhyTlD/lAVqn/NSbVZmSCGeDehTB/mPZadG+mhXU= github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= -github.com/eapache/go-resiliency v1.3.0 h1:RRL0nge+cWGlxXbUzJ7yMcq6w2XBEr19dCN6HECGaT0= -github.com/eapache/go-resiliency v1.3.0/go.mod h1:5yPzW0MIvSe0JDsv0v+DvcjEv2FyD6iZYSs1ZI+iQho= +github.com/eapache/go-resiliency v1.2.0 h1:v7g92e/KSN71Rq7vSThKaWIq68fL4YHvWyiUKorFR1Q= +github.com/eapache/go-resiliency v1.2.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21 h1:YEetp8/yCZMuEPMUDHG0CW/brkkEp8mzqk2+ODEitlw= github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= github.com/eapache/queue v1.1.0 h1:YOEu7KNc61ntiQlcEeUIoDTJ2o8mQznoNvUhiigpIqc= github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= -github.com/eclipse/paho.mqtt.golang v1.4.2-0.20221018190109-a1800d8df9a4 h1:yJj84YKRTY+zu/s9peWf0kuSq38zKT4KJUaFcJ1uRJM= -github.com/eclipse/paho.mqtt.golang v1.4.2-0.20221018190109-a1800d8df9a4/go.mod h1:JGt0RsEwEX+Xa/agj90YJ9d9DH2b7upDZMK9HRbFvCA= github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= -github.com/emicklei/go-restful/v3 v3.8.0 h1:eCZ8ulSerjdAiaNpF7GxXIE7ZCMo1moN1qX+S609eVw= +github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= +github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= +github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= github.com/emicklei/go-restful/v3 v3.8.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= github.com/emirpasic/gods v1.12.0 h1:QAUIPSaCu4G+POclxeqb3F+WPpdKqFGlw36+yOzGlrg= github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= @@ -485,8 +702,13 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.m github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= github.com/envoyproxy/go-control-plane v0.10.0/go.mod h1:AY7fTTXNdv/aJ2O5jwpxAPOWUZ7hQAEvzN5Pf27BkQQ= +github.com/envoyproxy/go-control-plane v0.10.1/go.mod h1:AY7fTTXNdv/aJ2O5jwpxAPOWUZ7hQAEvzN5Pf27BkQQ= github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/envoyproxy/protoc-gen-validate v0.6.2/go.mod h1:2t7qjJNvHPx8IjnBOzl9E9/baC+qXE/TeeyBRzgJDws= +github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/evanphx/json-patch v4.11.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch/v5 v5.5.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= github.com/facebookgo/stack v0.0.0-20160209184415-751773369052 h1:JWuenKqqX8nojtoVVWjGfOF9635RETekkoH6Cc9SX0A= github.com/facebookgo/stack v0.0.0-20160209184415-751773369052/go.mod h1:UbMTZqLaRiH3MsBH8va0n7s1pQYcu3uTb8G4tygF4Zg= @@ -495,37 +717,57 @@ github.com/fasthttp-contrib/sessions v0.0.0-20160905201309-74f6ac73d5d5/go.mod h github.com/fastly/go-utils v0.0.0-20180712184237-d95a45783239/go.mod h1:Gdwt2ce0yfBxPvZrHkprdPPTTS3N5rwmLE8T22KBXlw= github.com/fatih/camelcase v1.0.0/go.mod h1:yN2Sb0lFhZJUdVvtELVWefmrXpuZESvPmqwoZc+/fpc= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/fatih/color v1.9.0 h1:8xPHl4/q1VyqGIPif1F+1V3Y3lSmrq01EabUW3CoW5s= github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= +github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= +github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= github.com/fatih/structs v1.1.0 h1:Q7juDM0QtcnhCpeyLGQKyg4TOIghuNXrkL32pHAUMxo= github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= +github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +github.com/felixge/httpsnoop v1.0.2/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= +github.com/form3tech-oss/jwt-go v3.2.3+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/foxcpp/go-mockdns v0.0.0-20210729171921-fb145fc6f897 h1:E52jfcE64UG42SwLmrW0QByONfGynWuzBvm86BoB9z8= +github.com/foxcpp/go-mockdns v0.0.0-20210729171921-fb145fc6f897/go.mod h1:lgRN6+KxQBawyIghpnl5CezHFGS9VLzvtVlwxvzXTQ4= github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= github.com/frankban/quicktest v1.10.0/go.mod h1:ui7WezCLWMWxVWr1GETZY3smRy0G4KWq9vcPtJmFl7Y= -github.com/frankban/quicktest v1.10.2 h1:19ARM85nVi4xH7xPXuc5eM/udya5ieh7b/Sv+d844Tk= github.com/frankban/quicktest v1.10.2/go.mod h1:K+q6oSqb0W0Ininfk863uOk1lMy69l/P6txr3mVT54s= +github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k= +github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE= +github.com/frankban/quicktest v1.14.3/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU= github.com/fsnotify/fsnotify v1.5.4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwVZI= github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= +github.com/fullsailor/pkcs7 v0.0.0-20190404230743-d7302db945fa/go.mod h1:KnogPXtdwXqoenmZCw6S+25EAm2MkxbG0deNDu4cbSA= +github.com/garyburd/redigo v0.0.0-20150301180006-535138d7bcd7/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY= github.com/gavv/httpexpect v2.0.0+incompatible h1:1X9kcRshkSKEjNJJxX9Y9mQ5BRfbxU5kORdjhlA1yX8= github.com/gavv/httpexpect v2.0.0+incompatible/go.mod h1:x+9tiU1YnrOvnB725RkpoLv1M62hOWzwo5OXotisrKc= github.com/getkin/kin-openapi v0.2.0/go.mod h1:V1z9xl9oF5Wt7v32ne4FmiF1alpS4dM6mNzoywPOXlk= +github.com/getkin/kin-openapi v0.61.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= +github.com/getkin/kin-openapi v0.76.0/go.mod h1:660oXbgy5JFMKreazJaQTw7o+X00qeSyhcnluiMv+Xg= github.com/getsentry/raven-go v0.2.0/go.mod h1:KungGk8q33+aIAZUIVWZDr2OfAEBsO49PX4NzFV5kcQ= +github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= +github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= github.com/go-asn1-ber/asn1-ber v1.3.1/go.mod h1:hEBeB/ic+5LoWskz+yKT7vGhhPYkProFKoKdwZRWMe0= github.com/go-chi/chi v4.0.2+incompatible/go.mod h1:eB3wogJHnLi3x/kFX2A+IbTBlXxmMeXJVKy9tTv1XzQ= +github.com/go-chi/chi/v5 v5.0.0/go.mod h1:BBug9lr0cqtdAhsu6R4AAdvufI0/XBzAQSsUqJpoZOs= github.com/go-co-op/gocron v1.9.0/go.mod h1:DbJm9kdgr1sEvWpHCA7dFFs/PGHPMil9/97EXCRPr4k= github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= +github.com/go-errors/errors v1.4.0 h1:2OA7MFw38+e9na72T1xgkomPb6GzZzzxvJ5U630FoRM= +github.com/go-errors/errors v1.4.0/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-ini/ini v1.25.4/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= +github.com/go-ini/ini v1.66.6/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.10.0 h1:dXFJfIHVvUcpSgDOV+Ne6t7jXri8Tfv2uOLHUZ2XNuo= @@ -540,33 +782,50 @@ github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA= github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= +github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= +github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= +github.com/go-logr/logr v0.4.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.2.1/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/stdr v1.2.0/go.mod h1:YkVgnZu1ZjjL7xTxrfm/LLZBfkhTqSR1ydtm6jTKKwI= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= -github.com/go-ole/go-ole v1.2.4 h1:nNBDSCOigTSiarFpYE9J/KtEA1IOW4CNeqT9TQDqCxI= +github.com/go-logr/zapr v1.2.0/go.mod h1:Qa4Bsj2Vb+FAVeAKsLD8RLQ+YRJB8YDmOAKxaBQf7Ro= github.com/go-ole/go-ole v1.2.4/go.mod h1:XCwSNxSkXRo4vlyPy93sltvi/qJq0jqQhjqQNIwKuxM= +github.com/go-ole/go-ole v1.2.5 h1:t4MGB5xEDZvXI+0rMjjsfBsD7yAgp/s9ZDkL1JndXwY= +github.com/go-ole/go-ole v1.2.5/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= +github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= +github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg= github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY= github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/jsonreference v0.19.5 h1:1WJP/wi4OjB4iV8KVbH73rQaoialJrqv8gitZLxGLtM= +github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg= +github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc= +github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8= github.com/go-openapi/jsonreference v0.19.5/go.mod h1:RdybgQwPxbL4UEjuAruzK1x3nE69AqPYEJeo/TWfEeg= +github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc= +github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo= +github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I= +github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= -github.com/go-openapi/swag v0.19.14 h1:gm3vOOXfiuw5i9p5N9xJvfjvuofpyvLA9Wr6QfK5Fng= github.com/go-openapi/swag v0.19.14/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= github.com/go-ozzo/ozzo-validation/v4 v4.3.0 h1:byhDUpfEwjsVQb1vBunvIjh2BHQ9ead57VkAEY4V+Es= github.com/go-ozzo/ozzo-validation/v4 v4.3.0/go.mod h1:2NKgrcHl3z6cJs+3Oo940FPRiTzuqKbvfrL2RxCj6Ew= github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= +github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= github.com/go-playground/locales v0.14.0 h1:u50s323jtVGugKlcYeyzC0etD1HifMjqmJqb8WugfUU= github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs= +github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho= github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA= +github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= github.com/go-playground/validator/v10 v10.11.0 h1:0W+xRM511GY47Yy3bZUbJVitCNg2BOGlCyvTqsp/xIw= github.com/go-playground/validator/v10 v10.11.0/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU= github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI= github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo= +github.com/go-resty/resty/v2 v2.7.0 h1:me+K9p3uhSmXtrBZ4k9jcEAfJmuC8IivWHwaLZwPrFY= github.com/go-resty/resty/v2 v2.7.0/go.mod h1:9PWDzw47qPphMRFfhsyk0NnSgvluHcljSMVIq3w7q0I= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= @@ -577,25 +836,60 @@ github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/me github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= github.com/go-test/deep v1.0.2-0.20181118220953-042da051cf31/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= github.com/go-test/deep v1.0.2/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= +github.com/gobuffalo/attrs v0.0.0-20190224210810-a9411de4debd/go.mod h1:4duuawTqi2wkkpB4ePgWMaai6/Kc6WEz83bhFwpHzj0= +github.com/gobuffalo/depgen v0.0.0-20190329151759-d478694a28d3/go.mod h1:3STtPUQYuzV0gBVOY3vy6CfMm/ljR4pABfrTeHNLHUY= +github.com/gobuffalo/depgen v0.1.0/go.mod h1:+ifsuy7fhi15RWncXQQKjWS9JPkdah5sZvtHc2RXGlg= +github.com/gobuffalo/envy v1.6.15/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI= +github.com/gobuffalo/envy v1.7.0/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI= +github.com/gobuffalo/flect v0.1.0/go.mod h1:d2ehjJqGOH/Kjqcoz+F7jHTBbmDb38yXA598Hb50EGs= +github.com/gobuffalo/flect v0.1.1/go.mod h1:8JCgGVbRjJhVgD6399mQr4fx5rRfGKVzFjbj6RE/9UI= +github.com/gobuffalo/flect v0.1.3/go.mod h1:8JCgGVbRjJhVgD6399mQr4fx5rRfGKVzFjbj6RE/9UI= +github.com/gobuffalo/genny v0.0.0-20190329151137-27723ad26ef9/go.mod h1:rWs4Z12d1Zbf19rlsn0nurr75KqhYp52EAGGxTbBhNk= +github.com/gobuffalo/genny v0.0.0-20190403191548-3ca520ef0d9e/go.mod h1:80lIj3kVJWwOrXWWMRzzdhW3DsrdjILVil/SFKBzF28= +github.com/gobuffalo/genny v0.1.0/go.mod h1:XidbUqzak3lHdS//TPu2OgiFB+51Ur5f7CSnXZ/JDvo= +github.com/gobuffalo/genny v0.1.1/go.mod h1:5TExbEyY48pfunL4QSXxlDOmdsD44RRq4mVZ0Ex28Xk= +github.com/gobuffalo/gitgen v0.0.0-20190315122116-cc086187d211/go.mod h1:vEHJk/E9DmhejeLeNt7UVvlSGv3ziL+djtTr3yyzcOw= +github.com/gobuffalo/gogen v0.0.0-20190315121717-8f38393713f5/go.mod h1:V9QVDIxsgKNZs6L2IYiGR8datgMhB577vzTDqypH360= +github.com/gobuffalo/gogen v0.1.0/go.mod h1:8NTelM5qd8RZ15VjQTFkAW6qOMx5wBbW4dSCS3BY8gg= +github.com/gobuffalo/gogen v0.1.1/go.mod h1:y8iBtmHmGc4qa3urIyo1shvOD8JftTtfcKi+71xfDNE= +github.com/gobuffalo/logger v0.0.0-20190315122211-86e12af44bc2/go.mod h1:QdxcLw541hSGtBnhUc4gaNIXRjiDppFGaDqzbrBd3v8= +github.com/gobuffalo/mapi v1.0.1/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc= +github.com/gobuffalo/mapi v1.0.2/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc= +github.com/gobuffalo/packd v0.0.0-20190315124812-a385830c7fc0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWeG2RIxq4= +github.com/gobuffalo/packd v0.1.0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWeG2RIxq4= +github.com/gobuffalo/packr/v2 v2.0.9/go.mod h1:emmyGweYTm6Kdper+iywB6YK5YzuKchGtJQZ0Odn4pQ= +github.com/gobuffalo/packr/v2 v2.2.0/go.mod h1:CaAwI0GPIAv+5wKLtv8Afwl+Cm78K/I/VCm/3ptBN+0= +github.com/gobuffalo/syncx v0.0.0-20190224160051-33c29581e754/go.mod h1:HhnNqWY95UYwwW3uSASeV7vtgYkT2t16hJgV3AEPUpw= github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= -github.com/gocql/gocql v1.2.1 h1:G/STxUzD6pGvRHzG0Fi7S04SXejMKBbRZb7pwre1edU= -github.com/gocql/gocql v1.2.1/go.mod h1:3gM2c4D3AnkISwBxGnMMsS8Oy4y2lhbPRsH4xnJrHG8= +github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo= +github.com/gobwas/pool v0.2.1/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= +github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= +github.com/gocql/gocql v0.0.0-20210515062232-b7ef815b4556 h1:N/MD/sr6o61X+iZBAT2qEUF023s4KbA8RWfKzl0L6MQ= +github.com/gocql/gocql v0.0.0-20210515062232-b7ef815b4556/go.mod h1:DL0ekTmBSTdlNF25Orwt/JMzqIq3EJ4MVa/J/uK64OY= +github.com/godbus/dbus v0.0.0-20151105175453-c7fdd8b5cd55/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= +github.com/godbus/dbus v0.0.0-20180201030542-885f9cc04c9c/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= +github.com/godbus/dbus v0.0.0-20190422162347-ade71ed3457e/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+Hoeu/iUR3ruzNvZ+yQfO03a0= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/godbus/dbus/v5 v5.0.6/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= -github.com/gofrs/uuid v3.3.0+incompatible h1:8K4tyRfvU1CYPgJsveYFQMhpFd/wXNM7iK6rR7UHz84= -github.com/gofrs/uuid v3.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= +github.com/gofrs/uuid v4.0.0+incompatible h1:1SD/1F5pU8p29ybwgQSwpQk+mwdRrXCYuPhW6m+TnJw= +github.com/gofrs/uuid v4.0.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gogap/errors v0.0.0-20200228125012-531a6449b28c h1:dM8T2g87Kj9PBQjpstkQ20ZQjzrpZJwMwueX8mllrDI= github.com/gogap/errors v0.0.0-20200228125012-531a6449b28c/go.mod h1:tbRYYYC7g/H7QlCeX0Z2zaThWKowF4QQCFIsGgAsqRo= github.com/gogap/stack v0.0.0-20150131034635-fef68dddd4f8 h1:AuxION6c7in+AsPmFjQTUKT6/o1suT8XEEpfU0pWsHA= github.com/gogap/stack v0.0.0-20150131034635-fef68dddd4f8/go.mod h1:6q1WEv2BiAO4FSdwLQTJbWQYAn1/qDNJHUGJNXCj9kM= github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= +github.com/gogo/googleapis v1.2.0/go.mod h1:Njal3psf3qN6dwBtQfUmBZh2ybovJ0tlu3o/AC7HYjU= +github.com/gogo/googleapis v1.4.0/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= +github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +github.com/gogo/protobuf v1.3.0/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= @@ -604,20 +898,16 @@ github.com/golang-jwt/jwt v3.2.1+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzq github.com/golang-jwt/jwt v3.2.2+incompatible h1:IfV12K8xAKAnZqdXVzCZ+TOjboZ2keLg81eXfW3O+oY= github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= +github.com/golang-jwt/jwt/v4 v4.2.0 h1:besgBTC8w8HjP6NzQdxwKH9Z5oQMZ24ThTrHp3cZ8eU= github.com/golang-jwt/jwt/v4 v4.2.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= -github.com/golang-jwt/jwt/v4 v4.4.2 h1:rcc4lwaZgFMCZ5jxF9ABolDcIHdBytAFgqFPbSJQAYs= -github.com/golang-jwt/jwt/v4 v4.4.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe h1:lXe2qZdvpiX5WZkZR4hgp4KJVfY3nMkvmwbVkpv1rVY= github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= -github.com/golang-sql/sqlexp v0.1.0 h1:ZCD6MBpcuOVfGVqsEmY5/4FtYiKz6tSyUv9LPEDei6A= -github.com/golang-sql/sqlexp v0.1.0/go.mod h1:J4ad9Vo8ZCWQ2GMrC4UCQy1JpCbwU9m3EOqtpKwwwHI= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/glog v1.0.0 h1:nfP3RFugxnNRyKgeWd4oI1nYvXpxrx8ck8ZrcizshdQ= github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= @@ -650,12 +940,14 @@ github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaS github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/snappy v0.0.0-20170215233205-553a64147049/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golangci/lint-1 v0.0.0-20181222135242-d2cdd8c08219/go.mod h1:/X8TswGSh1pIozq4ZwCfxS0WA5JGXguxk94ar/4c87Y= +github.com/gomodule/redigo v1.8.2/go.mod h1:P9dn9mFrCBvWhGE1wpxx6fgq7BAeLBk+UUUzlpkBYO0= github.com/gonum/blas v0.0.0-20181208220705-f22b278b28ac/go.mod h1:P32wAyui1PQ58Oce/KYkOqQv8cVw1zAapXOl+dRFGbc= github.com/gonum/floats v0.0.0-20181209220543-c233463c7e82/go.mod h1:PxC8OnwL11+aosOB5+iEPoV3picfs8tUpkVd0pDo+Kg= github.com/gonum/integrate v0.0.0-20181209220457-a422b5c0fdf2/go.mod h1:pDgmNM6seYpwvPos3q+zxlXMsbve6mOIPucUnUOrI7Y= @@ -666,11 +958,11 @@ github.com/gonum/stat v0.0.0-20181125101827-41a0da705a5b/go.mod h1:Z4GIJBJO3Wa4g github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4= -github.com/google/flatbuffers v1.11.0/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= +github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA= +github.com/google/cel-go v0.9.0/go.mod h1:U7ayypeSkw23szu4GaQTPJGx66c20mx8JklMSxrmI1w= +github.com/google/cel-spec v0.6.0/go.mod h1:Nwjgxy5CbjlPrtCWjeDjUyKMl8w41YBYGjsyDdqk0xA= github.com/google/flatbuffers v1.12.1 h1:MVlul7pQNoDzWRLTw5imwYsl+usrS1TXG2H4jg6ImGw= github.com/google/flatbuffers v1.12.1/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= -github.com/google/gnostic v0.5.7-v3refs h1:FhTMOKj2VhjpouxvWJAV1TL304uMlb9zcDqkl6cEI54= -github.com/google/gnostic v0.5.7-v3refs/go.mod h1:73MKFl6jIHelAJNaBGFzt3SPtZULs9dYrGFt8OiIsHQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -684,14 +976,15 @@ github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= +github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg= github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= -github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= -github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= +github.com/google/go-containerregistry v0.5.1/go.mod h1:Ct15B4yir3PLOP5jsy0GNeYVaIZs/MK/Jz5any1wFW0= +github.com/google/go-querystring v1.0.0 h1:Xkwi/a1rcvNg1PPYe5vI8GbeBY/jrVuDX5ASuANWTrk= +github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/gofuzz v1.1.0 h1:Hsa8mG0dQ46ij8Sl2AYJDUv1oA9/d6Vk+3LG99Oe02g= github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= +github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= @@ -717,28 +1010,30 @@ github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm4 github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= -github.com/googleapis/enterprise-certificate-proxy v0.2.0 h1:y8Yozv7SZtlU//QXbezB6QkpuE6jMD2/gfzk4AftXjs= -github.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= +github.com/googleapis/gax-go/v2 v2.2.0 h1:s7jOdKSaksJVOxE0Y/S32otcfiP+UQ0cL8/GTKaONwE= 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.6.0 h1:SXk3ABtQYDT/OH8jAyvEOQ58mgawq5C4o/4/89qN2ZU= -github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMdcIDwU/6+DDoY= -github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= +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 h1:9fHAtK0uDfpveeqqo1hkEZJcFvYXAiCN3UutL8F9xHw= +github.com/googleapis/gnostic v0.5.5/go.mod h1:7+EbHbldMins07ALC74bsA81Ovc97DwqyJO1AENw9kA= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gopherjs/gopherjs v0.0.0-20190910122728-9d188e94fb99/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00 h1:l5lAOZEym3oK3SQ2HBHWsJUfbNBiTXJDeW2QDxw9AQ0= github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= github.com/gorilla/css v1.0.0 h1:BQqNyPTi50JCFMTw/b67hByjMVXZRwGha6wxVGkeihY= +github.com/gorilla/css v1.0.0/go.mod h1:Dn721qIggHpt4+EFCcTLTU/vk5ySda2ReITrtgBl60c= +github.com/gorilla/handlers v0.0.0-20150720190736-60c7bfde3e33/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ= +github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/gorilla/mux v1.7.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/mux v1.7.4/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= @@ -746,19 +1041,24 @@ github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB7 github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4= github.com/gorilla/sessions v1.2.1/go.mod h1:dk2InVEVJ0sfLlnXv9EAgkf6ecYs/i80K/zI+bUmuGM= github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= +github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/grandcat/zeroconf v1.0.0 h1:uHhahLBKqwWBV6WZUDAT71044vwOTL+McW0mBJvo6kE= -github.com/grandcat/zeroconf v1.0.0/go.mod h1:lTKmG1zh86XyCoUeIHSA4FJMBwCJiQmGfcP2PdzytEs= +github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= +github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/grandcat/zeroconf v0.0.0-20190424104450-85eadb44205c h1:svzQzfVE9t7Y1CGULS5PsMWs4/H4Au/ZTJzU/0CKgqc= +github.com/grandcat/zeroconf v0.0.0-20190424104450-85eadb44205c/go.mod h1:YjKB0WsLXlMkO9p+wGTCoPIDGRJH0mz7E526PxkQVxI= +github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.2.2/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI= +github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.14.6/go.mod h1:zdiPV4Yse/1gnckTHtghG4GkDEdKCRJduHpTxT3/jcw= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0/go.mod h1:hgWBS7lorOAVIJEQMi4ZsPv9hVvWI6+ch50m39Pf2Ks= github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645/go.mod h1:6iZfnjpejD4L/4DwD7NryNaJyCQdzwWwH2MWhCA90Kw= github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c h1:6rhixN/i8ZofjG1Y75iExal34USq5p+wiN1tpie8IrU= github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c/go.mod h1:NMPJylDgVpX0MLRlPy15sqSwOFv/U1GZ2m21JhFfek0= @@ -766,26 +1066,28 @@ github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed h1:5upAirOpQc github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed/go.mod h1:tMWxXQ9wFIaZeTI9F+hmhFiGpFmhOHzyShyFUhRm0H4= github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= -github.com/hashicorp/consul/api v1.13.0 h1:2hnLQ0GjQvw7f3O61jMO8gbasZviZTrt9R8WzgiirHc= -github.com/hashicorp/consul/api v1.13.0/go.mod h1:ZlVrynguJKcYr54zGaDbaL3fOvKC9m72FhPvA8T35KQ= +github.com/hashicorp/consul/api v1.12.0 h1:k3y1FYv6nuKyNTqj6w9gXOx5r5CfLj/k/euUeBXj1OY= +github.com/hashicorp/consul/api v1.12.0/go.mod h1:6pVBMo0ebnYdt2S3H87XhekM/HHrUoTD2XXb/VrZVy0= github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/consul/sdk v0.8.0 h1:OJtKBtEjboEZvG6AOUdh4Z1Zbyu0WcxQ0qatRrZHTVU= github.com/hashicorp/consul/sdk v0.8.0/go.mod h1:GBvyrGALthsZObzUGsfgHZQDXjg4lOjagTIwIR1vPms= +github.com/hashicorp/errwrap v0.0.0-20141028054710-7554cd9344ce/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= -github.com/hashicorp/go-cleanhttp v0.5.1 h1:dH3aiDG9Jvb5r5+bYHsikaOUIpcM0xvgMXVoDkXMzJM= github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= +github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= +github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= github.com/hashicorp/go-hclog v0.0.0-20180709165350-ff2cf002a8dd/go.mod h1:9bjs9uLqI8l75knNv3lV1kA55veR+WUPSiKIWcQHudI= github.com/hashicorp/go-hclog v0.8.0/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= github.com/hashicorp/go-hclog v0.9.1/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-hclog v0.14.1/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-hclog v0.16.2/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= -github.com/hashicorp/go-hclog v1.1.0 h1:QsGcniKx5/LuX2eYoeL+Np3UKYPNaN7YKpTh29h8rbw= -github.com/hashicorp/go-hclog v1.1.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= +github.com/hashicorp/go-hclog v1.0.0 h1:bkKf0BeBXcSYa7f5Fyi9gMuQ8gNsxeiNpZjR6VxNZeo= +github.com/hashicorp/go-hclog v1.0.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJFeZnpfm2KLowc= github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= @@ -794,6 +1096,7 @@ github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iP github.com/hashicorp/go-msgpack v0.5.5/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= github.com/hashicorp/go-msgpack v1.1.5 h1:9byZdVjKTe5mce63pRVNP1L7UAmdHOTEMGehn6KvJWs= github.com/hashicorp/go-msgpack v1.1.5/go.mod h1:gWVc3sv/wbDmR3rQsj1CAktEZzoz1YNK9NfGLXJ69/4= +github.com/hashicorp/go-multierror v0.0.0-20161216184304-ed905158d874/go.mod h1:JMRHfdO9jKNzS/+BTlxCjKNQHg/jZAft8U7LloJvN7I= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= @@ -818,9 +1121,8 @@ github.com/hashicorp/go-sockaddr v1.0.2/go.mod h1:rB4wwRAUzs07qva3c5SdrY/NEtAUjG github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.2 h1:cfejS+Tpcp13yd5nYHWDI6qVCny6wyX2Mt5SGur2IGE= github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-uuid v1.0.3 h1:2gKiV6YVmrJ1i2CKKa9obLvRieoRGviZFL26PcT/Co8= -github.com/hashicorp/go-uuid v1.0.3/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-version v1.1.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= @@ -836,8 +1138,9 @@ github.com/hashicorp/mdns v1.0.4/go.mod h1:mtBihi+LeNXGtG8L9dX59gAEa12BDtBQSp4v/ github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= github.com/hashicorp/memberlist v0.3.0 h1:8+567mCcFDnS5ADl7lrpxPMWiFCElyUEeW0gtj34fMA= github.com/hashicorp/memberlist v0.3.0/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= -github.com/hashicorp/raft v1.3.11 h1:p3v6gf6l3S797NnK5av3HcczOC1T5CLoaRvg0g9ys4A= -github.com/hashicorp/raft v1.3.11/go.mod h1:J8naEwc6XaaCfts7+28whSeRvCqTd6e20BlCU3LtEO4= +github.com/hashicorp/raft v1.2.0 h1:mHzHIrF0S91d3A7RPBvuqkgB4d/7oFJZyvf1Q4m7GA0= +github.com/hashicorp/raft v1.2.0/go.mod h1:vPAJM8Asw6u8LxC3eJCUZmRP/E4QmUGE1R7g7k8sG/8= +github.com/hashicorp/raft-boltdb v0.0.0-20171010151810-6e5ba93211ea/go.mod h1:pNv7Wc3ycL6F5oOWn+tPGo2gWD4a5X+yp/ntwdKLjRk= github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= github.com/hashicorp/serf v0.9.6 h1:uuEX1kLR6aoda1TBttmJQKDLZE1Ob7KN0NPdE7EtCDc= github.com/hashicorp/serf v0.9.6/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= @@ -851,28 +1154,37 @@ github.com/hazelcast/hazelcast-go-client v0.0.0-20190530123621-6cf767c2f31a/go.m github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/huaweicloud/huaweicloud-sdk-go-obs v3.21.12+incompatible h1:tANYIteuFrosKbRYUk1Yo/OGJjbt4x3OVg211Qc60M0= github.com/huaweicloud/huaweicloud-sdk-go-obs v3.21.12+incompatible/go.mod h1:l7VUhRbTKCzdOacdT4oWCwATKyvZqUOlOqr0Ous3k4s= -github.com/huaweicloud/huaweicloud-sdk-go-v3 v0.1.5 h1:la7+RTtSOGd7vl0u0mFueglKw98P1Q4Z45oTUxdJIf4= -github.com/huaweicloud/huaweicloud-sdk-go-v3 v0.1.5/go.mod h1:QpZ96CRqyqd5fEODVmnzDNp3IWi5W95BFmWz1nfkq+s= +github.com/huaweicloud/huaweicloud-sdk-go-v3 v0.0.87 h1:+7mrZ+YXKTILEBXOXl5fNhXLx9HqBq/OdUEI/603B34= +github.com/huaweicloud/huaweicloud-sdk-go-v3 v0.0.87/go.mod h1:IvF+Pe06JMUivVgN6B4wcsPEoFvVa40IYaOPZyUt5HE= github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= github.com/iancoleman/strcase v0.0.0-20191112232945-16388991a334/go.mod h1:SK73tn/9oHe+/Y0h39VT4UCxmurVJkR5NA7kMEAOgSE= +github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/imdario/mergo v0.3.6 h1:xTNEAn+kxVO7dTZGu0CegyqKZmoWFI0rF8UxjlB2d28= -github.com/imdario/mergo v0.3.6/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/imdario/mergo v0.3.10/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= +github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= +github.com/imdario/mergo v0.3.12 h1:b6R2BslTbIEToALKP7LxUvijTsNI9TAe80pLWN2g/HU= +github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/imkira/go-interpol v1.1.0 h1:KIiKr0VSG2CUW1hl1jpiyuzuJeKUUpC8iM1AIE7N1Vk= github.com/imkira/go-interpol v1.1.0/go.mod h1:z0h2/2T3XF8kyEPpRgJ3kmNv+C43p+I/CoI+jC3w2iA= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/influxdata/influxdb-client-go v1.4.0 h1:+KavOkwhLClHFfYcJMHHnTL5CZQhXJzOm5IKHI9BqJk= github.com/influxdata/influxdb-client-go v1.4.0/go.mod h1:S+oZsPivqbcP1S9ur+T+QqXvrYS3NCZeMQtBoH4D1dw= github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= -github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839 h1:W9WBk7wlPfJLvMCdtV4zPulc4uCPrlywQOmbFOhgQNU= github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo= +github.com/influxdata/line-protocol v0.0.0-20210311194329-9aa0e372d097 h1:vilfsDSy7TDxedi9gyBkMvAirat/oRcL0lFdJBf6tdM= +github.com/influxdata/line-protocol v0.0.0-20210311194329-9aa0e372d097/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo= +github.com/intel/goresctrl v0.2.0/go.mod h1:+CZdzouYFn5EsxgqAQTEzMfwKwuc0fVdMrT9FCCAVRQ= +github.com/j-keck/arping v0.0.0-20160618110441-2cf9dc699c56/go.mod h1:ymszkNOg6tORTn+6F6j+Jc8TOr5osrynvN6ivFWZ2GA= +github.com/j-keck/arping v1.0.2/go.mod h1:aJbELhR92bSk7tp79AWM/ftfc90EfEi2bQJrbBFOsPw= github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM= github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b h1:C8S2+VttkHFdOOCXJe+YGfa4vHYwlt4Zx+IVXQ97jYg= github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b/go.mod h1:vsD4gTJCa9TptPL8sPkXrLZ+hDuNrZCnj29CQpr4X1E= -github.com/jackc/pgx/v5 v5.0.3 h1:4flM5ecR/555F0EcnjdaZa6MhBU+nr0QbZIo5vaKjuM= -github.com/jackc/pgx/v5 v5.0.3/go.mod h1:JBbvW3Hdw77jKl9uJrEDATUZIFM2VFPzRq4RWIhkF4o= +github.com/jackc/pgx/v5 v5.0.0 h1:3UdmB3yUeTnJtZ+nDv3Mxzd4GHHvHkl9XN3oboIbOrY= +github.com/jackc/pgx/v5 v5.0.0/go.mod h1:JBbvW3Hdw77jKl9uJrEDATUZIFM2VFPzRq4RWIhkF4o= github.com/jackc/puddle/v2 v2.0.0 h1:Kwk/AlLigcnZsDssc3Zun1dk1tAtQNPaBBxBHWn0Mjc= github.com/jackc/puddle/v2 v2.0.0/go.mod h1:itE7ZJY8xnoo0JqJEpSMprN0f+NQkMCuEV/N9j8h0oc= github.com/jawher/mow.cli v1.0.4/go.mod h1:5hQj2V8g+qYmLUVWqu4Wuja1pI57M83EChYLVZ0sMKk= @@ -881,12 +1193,12 @@ github.com/jcmturner/aescts/v2 v2.0.0 h1:9YKLH6ey7H4eDBXW8khjYslgyqG2xZikXP0EQFK github.com/jcmturner/aescts/v2 v2.0.0/go.mod h1:AiaICIRyfYg35RUkr8yESTqvSy7csK90qZ5xfvvsoNs= github.com/jcmturner/dnsutils/v2 v2.0.0 h1:lltnkeZGL0wILNvrNiVCR6Ro5PGU/SeBvVO/8c/iPbo= github.com/jcmturner/dnsutils/v2 v2.0.0/go.mod h1:b0TnjGOvI/n42bZa+hmXL+kFJZsFT7G4t3HTlQ184QM= -github.com/jcmturner/gofork v1.7.6 h1:QH0l3hzAU1tfT3rZCnW5zXl+orbkNMMRGJfdJjHVETg= -github.com/jcmturner/gofork v1.7.6/go.mod h1:1622LH6i/EZqLloHfE7IeZ0uEJwMSUyQ/nDd82IeqRo= +github.com/jcmturner/gofork v1.0.0 h1:J7uCkflzTEhUZ64xqKnkDxq3kzc96ajM1Gli5ktUem8= +github.com/jcmturner/gofork v1.0.0/go.mod h1:MK8+TM0La+2rjBD4jE12Kj1pCCxK7d2LK/UM3ncEo0o= github.com/jcmturner/goidentity/v6 v6.0.1 h1:VKnZd2oEIMorCTsFBnJWbExfNN7yZr3EhJAxwOkZg6o= github.com/jcmturner/goidentity/v6 v6.0.1/go.mod h1:X1YW3bgtvwAXju7V3LCIMpY0Gbxyjn/mY9zx4tFonSg= -github.com/jcmturner/gokrb5/v8 v8.4.3 h1:iTonLeSJOn7MVUtyMT+arAn5AKAPrkilzhGw8wE/Tq8= -github.com/jcmturner/gokrb5/v8 v8.4.3/go.mod h1:dqRwJGXznQrzw6cWmyo6kH+E7jksEQG/CyVWsJEsJO0= +github.com/jcmturner/gokrb5/v8 v8.4.2 h1:6ZIM6b/JJN0X8UM43ZOM6Z4SJzla+a/u7scXFJzodkA= +github.com/jcmturner/gokrb5/v8 v8.4.2/go.mod h1:sb+Xq/fTY5yktf/VxLsE3wlfPqQjp0aWNYyvBVK62bc= github.com/jcmturner/rpc/v2 v2.0.3 h1:7FXXj8Ti1IaVFpSAziCZWNzbNuZmnvw/i6CqLNdWfZY= github.com/jcmturner/rpc/v2 v2.0.3/go.mod h1:VUJYCIDm3PVOEHw8sgt091/20OJjskO/YJki3ELg/Hc= github.com/jehiah/go-strftime v0.0.0-20171201141054-1d33003b3869/go.mod h1:cJ6Cj7dQo+O6GJNiMx+Pa94qKj+TG8ONdKHgMNIyyag= @@ -894,17 +1206,19 @@ github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJS github.com/jhump/protoreflect v1.6.0/go.mod h1:eaTn3RZAmMBcV0fifFvlm6VHNz3wSkYyXYWUh7ymB74= github.com/jinzhu/copier v0.3.5 h1:GlvfUwHk62RokgqVNvYsku0TATCF7bAHVwEXoBh3iJg= github.com/jinzhu/copier v0.3.5/go.mod h1:DfbEm0FYsaqBcKcFuvmOZb218JkPGtvSHsKg8S8hyyg= +github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= +github.com/jmespath/go-jmespath v0.0.0-20160803190731-bd40a432e4c7/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.3.0/go.mod h1:9QtRXoHjLGCJ5IBSaohpXITPlowMeeYCZ7fLUTSywik= github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= +github.com/joefitzgerald/rainbow-reporter v0.1.0/go.mod h1:481CNgqmVHQZzdIbN52CupLJyoVwB10FQ/IQlF1pdL8= github.com/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc= github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= github.com/jonboulle/clockwork v0.2.2/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8= -github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/jpillora/backoff v0.0.0-20180909062703-3050d21c67d7/go.mod h1:2iMrUgbbvHEiQClaW2NsSzMyGHqN+rDFqY705q49KG0= github.com/jpillora/backoff v1.0.0 h1:uvFg412JmmHBHw7iwprIxkPMI+sGQ4kzOWsMeHnm2EA= @@ -929,24 +1243,33 @@ github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88 h1:uC1QfSlInpQ github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k= github.com/k0kubun/pp v3.0.1+incompatible h1:3tqvf7QgUnZ5tXO6pNAZlrvHgl6DvifjDrd9g2S9Z40= github.com/k0kubun/pp v3.0.1+incompatible/go.mod h1:GWse8YhT0p8pT4ir3ZgBbfZild3tgzSScAn6HmfYukg= +github.com/karrick/godirwalk v1.8.0/go.mod h1:H5KPZjojv4lE+QYImBI8xVtrBRgYrIVsaRPx4tDPEn4= +github.com/karrick/godirwalk v1.10.3/go.mod h1:RoGL9dQei4vP9ilrpETWE8CLOZ1kiN0LhBygSwrAsHA= github.com/kataras/go-errors v0.0.3 h1:RQSGEb5AHjsGbwhNW8mFC7a9JrgoCLHC8CBQ4keXJYU= github.com/kataras/go-errors v0.0.3/go.mod h1:K3ncz8UzwI3bpuksXt5tQLmrRlgxfv+52ARvAu1+I+o= github.com/kataras/go-serializer v0.0.4 h1:isugggrY3DSac67duzQ/tn31mGAUtYqNpE2ob6Xt/SY= github.com/kataras/go-serializer v0.0.4/go.mod h1:/EyLBhXKQOJ12dZwpUZZje3lGy+3wnvG7QKaVJtm/no= +github.com/keybase/go-keychain v0.0.0-20190712205309-48d3d31d256d/go.mod h1:JJNrCn9otv/2QP4D7SMJBgaleKpOf66PnW6F5WGNRIc= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/compress v1.9.5/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= +github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.10.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= +github.com/klauspost/compress v1.10.8/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= +github.com/klauspost/compress v1.11.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= +github.com/klauspost/compress v1.11.13/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= +github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -github.com/klauspost/compress v1.14.4/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= github.com/klauspost/compress v1.15.0/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -github.com/klauspost/compress v1.15.11 h1:Lcadnb3RKGin4FYM/orgq0qde+nc15E5Cbqg4B9Sx9c= -github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= +github.com/klauspost/compress v1.15.1 h1:y9FcTHGyrebwfP0ZZqFiaxTaiDnUrGkJkI+f583BL1A= +github.com/klauspost/compress v1.15.1/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= github.com/knadh/koanf v1.4.1 h1:Z0VGW/uo8NJmjd+L1Dc3S5frq6c62w5xQ9Yf4Mg3wFQ= github.com/knadh/koanf v1.4.1/go.mod h1:1cfH5223ZeZUOs8FU2UdTmaNfHpqgtjV0+NHjRO43gs= github.com/koding/multiconfig v0.0.0-20171124222453-69c27309b2d7/go.mod h1:Y2SaZf2Rzd0pXkLVhLlCiAXFCLSXAIbTKDivVgff/AM= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= @@ -956,40 +1279,50 @@ github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfn github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/kubemq-io/kubemq-go v1.7.6 h1:AKQb6jbWzJRiNub/9wLHdkUnsBPtc8TImtiSNlKxug8= +github.com/kubemq-io/kubemq-go v1.7.6/go.mod h1:oJVQFu794S9Df5AoEbaeM7s0knMjbKJs66PTLZzvk4g= +github.com/kubemq-io/protobuf v1.3.1 h1:b4QcnpujV8U3go8pa2+FTESl6ygU6hY8APYibRtyemo= +github.com/kubemq-io/protobuf v1.3.1/go.mod h1:mzbGBI05R+GhFLD520xweEIvDM+m4nI7ruJDhgEncas= github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= github.com/labd/commercetools-go-sdk v1.1.0 h1:iX0JDkfAsZPXs0FUioYoFZ3Gm/GG9dEOqkv8vz439MM= github.com/labd/commercetools-go-sdk v1.1.0/go.mod h1:I+KKNALlg6PcSertsVA7E442koO99GT7gldWqwZlUGo= github.com/labstack/echo/v4 v4.1.11/go.mod h1:i541M3Fj6f76NZtHSj7TXnyM8n2gaodfvfxNnFqi74g= -github.com/labstack/echo/v4 v4.9.0 h1:wPOF1CE6gvt/kmbMR4dGzWvHMPT+sAEUJOwOTtvITVY= -github.com/labstack/echo/v4 v4.9.0/go.mod h1:xkCDAdFCIf8jsFQ5NnbK7oqaF/yU1A1X20Ltm0OvSks= +github.com/labstack/echo/v4 v4.2.1/go.mod h1:AA49e0DZ8kk5jTOOCKNuPR6oTnBS0dYiM4FW1e6jwpg= github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k= -github.com/labstack/gommon v0.3.1 h1:OomWaJXm7xR6L1HmEtGyQf26TEn7V6X88mktX9kee9o= -github.com/labstack/gommon v0.3.1/go.mod h1:uW6kP17uPlLJsD3ijUYn3/M5bAxtlZhMI6m3MFxTMTM= +github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w= github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= github.com/lestrrat/go-envload v0.0.0-20180220120943-6ed08b54a570/go.mod h1:BLt8L9ld7wVsvEWQbuLrUZnCMnUmLZ+CGDzKtclrTlE= github.com/lestrrat/go-file-rotatelogs v0.0.0-20180223000712-d3151e2a480f/go.mod h1:UGmTpUd3rjbtfIpwAPrcfmGf/Z1HS95TATB+m57TPB8= github.com/lestrrat/go-strftime v0.0.0-20180220042222-ba3bf9c1d042/go.mod h1:TPpsiPUEh0zFL1Snz4crhMlBe60PYxRHr5oFF3rRYg0= -github.com/lib/pq v1.10.4/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/lib/pq v1.9.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= github.com/linkedin/goavro/v2 v2.9.8 h1:jN50elxBsGBDGVDEKqUlDuU1cFwJ11K/yrJCBMe/7Wg= github.com/linkedin/goavro/v2 v2.9.8/go.mod h1:UgQUb2N/pmueQYH9bfqFioWxzYCZXSfF8Jw03O5sjqA= +github.com/linuxkit/virtsock v0.0.0-20201010232012-f8cee7dfc7a3/go.mod h1:3r6x7q95whyfWQpmGZTu3gk3v2YkMi05HEzl7Tf7YEo= +github.com/lyft/protoc-gen-star v0.5.3/go.mod h1:V0xaHgaf5oCCqmcxYcWiDfTiKsZsRc87/1qhoTACD8w= github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= github.com/machinebox/graphql v0.2.2 h1:dWKpJligYKhYKO5A2gvNhkJdQMNZeChZYyBbrZkBZfo= github.com/machinebox/graphql v0.2.2/go.mod h1:F+kbVMHuwrQ5tYgU9JXlnskM8nOaFxCAEolaQybkjWA= +github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= github.com/magiconair/properties v1.8.6 h1:5ibWZ6iY0NctNGWo87LalDlEZ6R41TqbbDamhfG/Qzo= github.com/magiconair/properties v1.8.6/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= +github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.7.6 h1:8yTIVnZgCoiM1TgqoeTl+LfU5Jg6/xL3QhGQnimLYnA= +github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/markbates/oncer v0.0.0-20181203154359-bf2de49a0be2/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE= +github.com/markbates/safe v1.0.1/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0= +github.com/marstr/guid v1.1.0/go.mod h1:74gB1z2wpxxInTG6yaqA7KrtM0NZ+RbrcqDvYHefzho= github.com/matoous/go-nanoid v1.5.0/go.mod h1:zyD2a71IubI24efhpvkJz+ZwfwagzgSO6UNiFsZKN7U= github.com/matoous/go-nanoid/v2 v2.0.0 h1:d19kur2QuLeHmJBkvYkFdhFBzLoo1XVm2GgTpL+9Tj0= github.com/matoous/go-nanoid/v2 v2.0.0/go.mod h1:FtS4aGPVfEkxKxhdWPAspZpZSh1cOjtM7Ej/So3hR0g= @@ -1001,10 +1334,13 @@ github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVc github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-colorable v0.1.11 h1:nQ+aFkoE2TMGc0b68U2OKSexC+eq46+XwZzWXHRmPYs= -github.com/mattn/go-colorable v0.1.11/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= -github.com/mattn/go-ieproxy v0.0.0-20190702010315-6dee0af9227d h1:oNAwILwmgWKFpuU+dXvI6dl9jG2mAWAZLX3r9s0PPiw= +github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.12 h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZbaA40= +github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= github.com/mattn/go-ieproxy v0.0.0-20190702010315-6dee0af9227d/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= +github.com/mattn/go-ieproxy v0.0.1 h1:qiyop7gCflfhwCzGyeT0gro3sF9AIg9HU98JORTkqfI= +github.com/mattn/go-ieproxy v0.0.1/go.mod h1:pYabZ6IHcRpFh7vIaLfK7rdcWgFEb3SFJ6/gNWuh88E= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= @@ -1015,19 +1351,28 @@ github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Ky github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= +github.com/mattn/go-shellwords v1.0.3/go.mod h1:3xCvwCdWdlDJUrvuMn7Wuy9eWs4pE8vqg+NOMyg4B2o= +github.com/mattn/go-shellwords v1.0.6/go.mod h1:3xCvwCdWdlDJUrvuMn7Wuy9eWs4pE8vqg+NOMyg4B2o= +github.com/mattn/go-shellwords v1.0.12/go.mod h1:EZzvwXDESEeg03EKmM+RmDnNOPKG4lLtQsUlTZDWQ8Y= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI= github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= -github.com/microcosm-cc/bluemonday v1.0.21 h1:dNH3e4PSyE4vNX+KlRGHT5KrSvjeUkoNPwEORjffHJg= -github.com/microcosm-cc/bluemonday v1.0.21/go.mod h1:ytNkv4RrDrLJ2pqlsSI46O6IVXmZOBBD4SaJyDwwTkM= +github.com/maxbrunsfeld/counterfeiter/v6 v6.2.2/go.mod h1:eD9eIE7cdwcMi9rYluz88Jz2VyhSmden33/aXg4oVIY= +github.com/microcosm-cc/bluemonday v1.0.17 h1:Z1a//hgsQ4yjC+8zEkV8IWySkXnsxmdSY642CTFQb5Y= +github.com/microcosm-cc/bluemonday v1.0.17/go.mod h1:Z0r70sCuXHig8YpBzCc5eGHAap2K7e/u082ZUpDRRqM= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/miekg/dns v1.1.25/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= -github.com/miekg/dns v1.1.27/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM= github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= -github.com/miekg/dns v1.1.43 h1:JKfpVSCB84vrAmHzyrsxB5NAr5kLoMXZArPSw7Qlgyg= github.com/miekg/dns v1.1.43/go.mod h1:+evo5L0630/F6ca/Z9+GAqzhjGyn8/c+TBaOyfEl0V4= +github.com/miekg/dns v1.1.50 h1:DQUfb9uc6smULcREF09Uc+/Gd46YWqJd5DbpPE9xkcA= +github.com/miekg/dns v1.1.50/go.mod h1:e3IlAVfNqAllflbibAZEWOXOQ+Ynzk/dDozDxY7XnME= +github.com/miekg/pkcs11 v1.0.3/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= +github.com/miekg/pkcs11 v1.1.1/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= github.com/minio/highwayhash v1.0.2 h1:Aak5U0nElisjDCfPSG79Tgzkn2gl66NxOMspRrKnA/g= github.com/minio/highwayhash v1.0.2/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= +github.com/mistifyio/go-zfs v2.1.2-0.20190413222219-f784269be439+incompatible/go.mod h1:8AuVvqP/mXw1px98n46wfvcGfQ4ci2FwoAjKYxuo3Z4= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI= github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= @@ -1037,8 +1382,9 @@ github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrk github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-testing-interface v0.0.0-20171004221916-a61a99592b77/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= -github.com/mitchellh/go-testing-interface v1.0.0 h1:fzU/JVNcaqHQEcVFAKeR41fkiLdIPrefOvVG1VZ96U0= github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= +github.com/mitchellh/go-testing-interface v1.14.0 h1:/x0XQ6h+3U3nAyk1yx+bHPURrKa9sVVvYbuqZ7pIAtI= +github.com/mitchellh/go-testing-interface v1.14.0/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8= github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= @@ -1047,12 +1393,24 @@ github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh github.com/mitchellh/mapstructure v1.3.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.4.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/mapstructure v1.4.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 h1:BpfhmLKZf+SjVanKKhCgf3bg+511DmU9eDQTen7LLbY= github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/osext v0.0.0-20151018003038-5e2d6d41470f/go.mod h1:OkQIRizQZAeMln+1tSwduZz7+Af5oFlKirV/MSYes2A= github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ= github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= +github.com/moby/locker v1.0.1/go.mod h1:S7SDdo5zpBK84bzzVlKr2V0hz+7x9hWbYC/kq7oQppc= +github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c= +github.com/moby/sys/mountinfo v0.4.0/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A= +github.com/moby/sys/mountinfo v0.4.1/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A= +github.com/moby/sys/mountinfo v0.5.0/go.mod h1:3bMD3Rg+zkqx8MRYPi7Pyb0Ie97QEBmdxbhnCLlSvSU= +github.com/moby/sys/signal v0.6.0/go.mod h1:GQ6ObYZfqacOwTtlXvcmh9A26dVRul/hbOZn88Kg8Tg= +github.com/moby/sys/symlink v0.1.0/go.mod h1:GGDODQmbFOjFsXvfLVn3+ZRxkch54RkSiGqsZeMYowQ= +github.com/moby/sys/symlink v0.2.0/go.mod h1:7uZVF2dqJjG/NsClqul95CqKOBRQyYSNnJ6BMgR/gFs= +github.com/moby/term v0.0.0-20200312100748-672ec06f55cd/go.mod h1:DdlQx2hp0Ss5/fLikoLlEeIYiATotOjgB//nb973jeo= +github.com/moby/term v0.0.0-20210610120745-9d4ed1856297/go.mod h1:vgPCkQMyxTZ7IDy8SXRufE172gr8+K/JE/7hHFxHW3A= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -1060,50 +1418,55 @@ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lN github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= -github.com/modocache/gover v0.0.0-20171022184752-b58185e213c5/go.mod h1:caMODM3PzxT8aQXRPkAt8xlV/e7d7w8GM5g0fa5F0D8= github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= -github.com/montanaflynn/stats v0.6.6 h1:Duep6KMIDpY4Yo11iFsvyqJDyfzLF9+sndUKT+v64GQ= github.com/montanaflynn/stats v0.6.6/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow= +github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= github.com/moul/http2curl v1.0.0 h1:dRMWoAtb+ePxMlLkrCbAqh4TlPHXvoGUSQ323/9Zahs= github.com/moul/http2curl v1.0.0/go.mod h1:8UbvGypXm98wA/IqH45anm5Y2Z6ep6O31QGOAZ3H0fQ= -github.com/mrz1836/postmark v1.2.11 h1:uzNJLnQTToXF8ua0hGRls58XOzM7fivBaUqBAsMt6vM= -github.com/mrz1836/postmark v1.2.11/go.mod h1:xNRms8jgTfqBneqg0+PzvBrhuojefqXIWc6Np0nHiEM= +github.com/mrunalp/fileutils v0.5.0/go.mod h1:M1WthSahJixYnrXQl/DFQuteStB1weuxD2QJNHXfbSQ= +github.com/mrz1836/postmark v1.2.9 h1:gAqtnsyB2WKy+F0Iy3ebrATvSN60qW2yXTnoCdNANdA= +github.com/mrz1836/postmark v1.2.9/go.mod h1:xNRms8jgTfqBneqg0+PzvBrhuojefqXIWc6Np0nHiEM= github.com/mschoch/smat v0.2.0 h1:8imxQsjDm8yFEAVBe7azKmKSgzSkZXDuKkSq9374khM= github.com/mschoch/smat v0.2.0/go.mod h1:kc9mz7DoBKqDyiRL7VZN8KvXQMWeTaVnttLRXOlotKw= github.com/mtibben/percent v0.2.1 h1:5gssi8Nqo8QU/r2pynCm+hBQHpkB/uNK7BJCFogWdzs= github.com/mtibben/percent v0.2.1/go.mod h1:KG9uO+SZkUp+VkRHsCdYQV3XSZrrSpR3O9ibNBTZrns= -github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= +github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= github.com/nacos-group/nacos-sdk-go v1.0.8/go.mod h1:hlAPn3UdzlxIlSILAyOXKxjFSvDJ9oLzTJ9hLAK1KzA= github.com/nacos-group/nacos-sdk-go v1.1.1/go.mod h1:UHOtQNQY/qpk2dhg6gDq8u5+/CEIc3+lWmrmxEzX0/g= -github.com/nacos-group/nacos-sdk-go/v2 v2.1.0 h1:PxRwOzHhnK6eGGvioEGkn8s6XRXmUVuXu91i2yQcdDs= -github.com/nacos-group/nacos-sdk-go/v2 v2.1.0/go.mod h1:ys/1adWeKXXzbNWfRNbaFlX/t6HVLWdpsNDvmoWTw0g= +github.com/nacos-group/nacos-sdk-go/v2 v2.0.1 h1:jEZjqdCDSt6ZFtl628UUwON21GxwJ+lEN/PDamQOzgU= +github.com/nacos-group/nacos-sdk-go/v2 v2.0.1/go.mod h1:SlhyCAv961LcZ198XpKfPEQqlJWt2HkL1fDLas0uy/w= github.com/natefinch/lumberjack v2.0.0+incompatible h1:4QJd3OLAMgj7ph+yZTuX13Ld4UpgHp07nNdFX7mqFfM= github.com/natefinch/lumberjack v2.0.0+incompatible/go.mod h1:Wi9p2TTF5DG5oU+6YfsmYQpsTIOm0B1VNzQg9Mw6nPk= github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU= -github.com/nats-io/jwt/v2 v2.3.0 h1:z2mA1a7tIf5ShggOFlR1oBPgd6hGqcDYsISxZByUzdI= -github.com/nats-io/jwt/v2 v2.3.0/go.mod h1:0tqz9Hlu6bCBFLWAASKhE5vUA4c24L9KPUUgvwumE/k= +github.com/nats-io/jwt v1.1.0/go.mod h1:n3cvmLfBfnpV4JJRN7lRYCyZnw48ksGsbThGXEk4w9M= +github.com/nats-io/jwt/v2 v2.2.1-0.20220113022732-58e87895b296 h1:vU9tpM3apjYlLLeY23zRWJ9Zktr5jp+mloR942LEOpY= +github.com/nats-io/jwt/v2 v2.2.1-0.20220113022732-58e87895b296/go.mod h1:0tqz9Hlu6bCBFLWAASKhE5vUA4c24L9KPUUgvwumE/k= github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k= -github.com/nats-io/nats-server/v2 v2.9.3 h1:HrfzA7G9LNetKkm1z+jU/e9kuAe+E6uaBuuq9EB5sQQ= -github.com/nats-io/nats-server/v2 v2.9.3/go.mod h1:4sq8wvrpbvSzL1n3ZfEYnH4qeUuIl5W990j3kw13rRk= -github.com/nats-io/nats-streaming-server v0.25.2 h1:cWjytvYksYPgnXnSocqnRWVrSgLclusnPGBNHQR4SqI= -github.com/nats-io/nats-streaming-server v0.25.2/go.mod h1:bRbgx+iCG6EZEXpqVMroRDuCGwR1iW+ta84aEGBaMhI= +github.com/nats-io/nats-server/v2 v2.1.9/go.mod h1:9qVyoewoYXzG1ME9ox0HwkkzyYvnlBDugfR4Gg/8uHU= +github.com/nats-io/nats-server/v2 v2.7.4 h1:c+BZJ3rGzUKCBIM4IXO8uNT2u1vajGbD1kPA6wqCEaM= +github.com/nats-io/nats-server/v2 v2.7.4/go.mod h1:1vZ2Nijh8tcyNe8BDVyTviCd9NYzRbubQYiEHsvOQWc= +github.com/nats-io/nats-streaming-server v0.21.2 h1:chyaVdWlPdBcSbLq3cpyCYcuXA+7bVXJmM4yWrdqL/8= +github.com/nats-io/nats-streaming-server v0.21.2/go.mod h1:2W8QfNVOtcFpmf0bRiwuLtRb0/hkX4NuOxPOFNOThVQ= github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= -github.com/nats-io/nats.go v1.16.0/go.mod h1:BPko4oXsySz4aSWeFgOHLZs3G4Jq4ZAyE6/zMCxRT6w= -github.com/nats-io/nats.go v1.17.0/go.mod h1:BPko4oXsySz4aSWeFgOHLZs3G4Jq4ZAyE6/zMCxRT6w= -github.com/nats-io/nats.go v1.18.0 h1:o480Ao6kuSSFyJO75rGTXCEPj7LGkY84C1Ye+Uhm4c0= -github.com/nats-io/nats.go v1.18.0/go.mod h1:BPko4oXsySz4aSWeFgOHLZs3G4Jq4ZAyE6/zMCxRT6w= +github.com/nats-io/nats.go v1.10.0/go.mod h1:AjGArbfyR50+afOUotNX2Xs5SYHf+CoOa5HH1eEl2HE= +github.com/nats-io/nats.go v1.13.1-0.20220308171302-2f2f6968e98d h1:zJf4l8Kp67RIZhoVeniSLZs69SHNgjLHz0aNsqPPlx8= +github.com/nats-io/nats.go v1.13.1-0.20220308171302-2f2f6968e98d/go.mod h1:BPko4oXsySz4aSWeFgOHLZs3G4Jq4ZAyE6/zMCxRT6w= github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= +github.com/nats-io/nkeys v0.1.4/go.mod h1:XdZpAbhgyyODYqjTawOnIOI7VlbKSarI9Gfy1tqEu/s= github.com/nats-io/nkeys v0.3.0 h1:cgM5tL53EvYRU+2YLXIK0G2mJtK12Ft9oeooSZMA2G8= github.com/nats-io/nkeys v0.3.0/go.mod h1:gvUNGjVcM2IPr5rCsRsC6Wb3Hr2CQAm08dsxtV6A5y4= github.com/nats-io/nuid v1.0.1 h1:5iA8DT8V7q8WK2EScv2padNa/rTESc1KdnPw4TC2paw= github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= -github.com/nats-io/stan.go v0.10.3 h1:8DOyQJ0+nza3zSVJZ19/cpikkrWA4rSKB3YvckIGOTI= -github.com/nats-io/stan.go v0.10.3/go.mod h1:Cgf5zk6kKpOCqqUIJeuBz6ZDz9osT791VhS6m28sSQQ= +github.com/nats-io/stan.go v0.8.3 h1:XyemjL9vAeGHooHn5RQy+ngljd8AVSM2l65Jdnpv4rI= +github.com/nats-io/stan.go v0.8.3/go.mod h1:Ejm8bbHnMTSptU6uNMAVuxeapMJYBB/Ml3ej6z4GoSY= +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/niean/gotools v0.0.0-20151221085310-ff3f51fc5c60/go.mod h1:gH2bvE9/eX49hWK7CwwL/+/y+dodduyxs5cTpBzF5v0= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/npillmayer/nestext v0.1.3/go.mod h1:h2lrijH8jpicr25dFY+oAJLyzlya6jhnuG+zWp9L0Uk= @@ -1114,23 +1477,67 @@ github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtb github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= +github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= +github.com/onsi/ginkgo v0.0.0-20151202141238-7f8ab55aaf3b/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.12.0/go.mod h1:oUhWkIvk5aDxtKvDDuw8gItl8pKl42LzjC9KZE0HfGg= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= +github.com/onsi/ginkgo v1.13.0/go.mod h1:+REjRxOmWfHCjfv9TTWB1jD1Frx4XydAD3zm1lskyM0= +github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= -github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= github.com/onsi/ginkgo/v2 v2.1.3/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= -github.com/onsi/ginkgo/v2 v2.1.6 h1:Fx2POJZfKRQcM1pH49qSZiYeu319wji004qX+GDovrU= +github.com/onsi/gomega v0.0.0-20151007035656-2152b45fa28a/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= +github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= +github.com/onsi/gomega v1.9.0/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= +github.com/onsi/gomega v1.10.3/go.mod h1:V9xEwhxec5O8UDM77eCW8vLymOMltsqPVYWrpDsH8xc= +github.com/onsi/gomega v1.15.0/go.mod h1:cIuvLEne0aoVhAgh/O6ac0Op8WWw9H6eYCriF+tEHG0= github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= -github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro= -github.com/onsi/gomega v1.20.1 h1:PA/3qinGoukvymdIDV8pii6tiZgC8kbmJO6Z5+b002Q= +github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= -github.com/open-policy-agent/opa v0.45.0 h1:P5nuhVRtR+e58fk3CMMbiqr6ZFyWQPNOC3otsorGsFs= -github.com/open-policy-agent/opa v0.45.0/go.mod h1:/OnsYljNEWJ6DXeFOOnoGn8CvwZGMUS4iRqzYdJvmBI= +github.com/open-policy-agent/opa v0.43.1 h1:GAtUd6aO5lObFP6rRpteXDVffKa4vGUF4I6qVLdhUng= +github.com/open-policy-agent/opa v0.43.1/go.mod h1:xfTsKQEMvy7CxxgsCFoYuzT9jA/8C4JWLignCkN4Dzw= +github.com/opencontainers/go-digest v0.0.0-20170106003457-a6d0ee40d420/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= +github.com/opencontainers/go-digest v0.0.0-20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= +github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= +github.com/opencontainers/go-digest v1.0.0-rc1.0.20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= +github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= +github.com/opencontainers/image-spec v1.0.0/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= +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/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= +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= +github.com/opencontainers/runc v1.0.0-rc9/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= +github.com/opencontainers/runc v1.0.0-rc93/go.mod h1:3NOsor4w32B2tC0Zbl8Knk4Wg84SM2ImC1fxBuqJ/H0= +github.com/opencontainers/runc v1.0.2/go.mod h1:aTaHFFwQXuA71CiyxOdFFIorAoemI04suvGRQFzWTD0= +github.com/opencontainers/runc v1.1.0/go.mod h1:Tj1hFw6eFWp/o33uxGf5yF2BX5yz2Z6iptFpuvbbKqc= +github.com/opencontainers/runc v1.1.2/go.mod h1:Tj1hFw6eFWp/o33uxGf5yF2BX5yz2Z6iptFpuvbbKqc= +github.com/opencontainers/runtime-spec v0.1.2-0.20190507144316-5b71a03e2700/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/runtime-spec v1.0.1/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/runtime-spec v1.0.2-0.20190207185410-29686dbc5559/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/runtime-spec v1.0.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/runtime-spec v1.0.3-0.20200929063507-e6143ca7d51d/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/runtime-tools v0.0.0-20181011054405-1d69bd0f9c39/go.mod h1:r3f7wjNzSs2extwzU3Y+6pKfobzPh+kKFJ3ofN+3nfs= +github.com/opencontainers/selinux v1.6.0/go.mod h1:VVGKuOLlE7v4PJyT6h7mNWvq1rzqiriPsEqVhc+svHE= +github.com/opencontainers/selinux v1.8.0/go.mod h1:RScLhm78qiWa2gbVCcGkC7tCGdgk3ogry1nUQF8Evvo= +github.com/opencontainers/selinux v1.8.2/go.mod h1:MUIHuUEvKB1wtJjQdOyYRgOnLD2xAPP8dBsCoU0KuF8= +github.com/opencontainers/selinux v1.10.0/go.mod h1:2i0OySw99QjzBBQByd1Gr9gSjvuho1lHsJxIJ3gGbJI= +github.com/opencontainers/selinux v1.10.1/go.mod h1:2i0OySw99QjzBBQByd1Gr9gSjvuho1lHsJxIJ3gGbJI= github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= @@ -1138,7 +1545,6 @@ github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFSt github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA= -github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/oracle/oci-go-sdk/v54 v54.0.0 h1:CDLjeSejv2aDpElAJrhKpi6zvT/zhZCZuXchUUZ+LS4= @@ -1147,29 +1553,33 @@ github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIw github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pashagolub/pgxmock/v2 v2.1.0 h1:mazMb0ssME7dN6RSTLH+9xWciG2UaU0aDs3GCHjL0ww= -github.com/pashagolub/pgxmock/v2 v2.1.0/go.mod h1:CgP/Cz1kOnSK7JT7w9DIWO0MZDbxdbTMXpZmwtaqqHo= +github.com/pashagolub/pgxmock/v2 v2.0.0-beta2 h1:rE2t+DWZMsYK5mWo9HHGiW6bT5UNqzYSufeZoqKVZgw= +github.com/pashagolub/pgxmock/v2 v2.0.0-beta2/go.mod h1:EtBHVYgdXScsC19CLlUFk/IZA1rjY8UaRPKE1XxyM6w= github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc= github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ= github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/pelletier/go-toml v1.7.0/go.mod h1:vwGMzjaWMwyfHwgIBhI2YUM4fB6nL6lVAvS1LBMMhTE= -github.com/pelletier/go-toml v1.9.3 h1:zeC5b1GviRUyKYd6OJPvBU/mcVDVoL1OhT17FCt5dSQ= +github.com/pelletier/go-toml v1.8.1/go.mod h1:T2/BmBdy8dvIRq1a/8aqjN41wvWlN4lrapLU/GW4pbc= github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= +github.com/pelletier/go-toml v1.9.4 h1:tjENF6MfZAg8e4ZmZTeWaWiT2vXtsoO6+iuOjFhECwM= +github.com/pelletier/go-toml v1.9.4/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= +github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= +github.com/peterh/liner v0.0.0-20170211195444-bf27d3ba8e1d/go.mod h1:xIteQHvHuaLYG9IFj6mSxM0fCKrs34IrEQUhOYuGPHc= +github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE= github.com/philhofer/fwd v1.1.1/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pierrec/lz4 v2.5.2+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= -github.com/pierrec/lz4 v2.6.0+incompatible h1:Ix9yFKn1nSPBLFl/yZknTp8TU5G4Ps0JDmguYK6iH1A= github.com/pierrec/lz4 v2.6.0+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= -github.com/pierrec/lz4/v4 v4.1.17 h1:kV4Ip+/hUBC+8T6+2EgburRtkE9ef4nbY3f4dFhGjMc= -github.com/pierrec/lz4/v4 v4.1.17/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= -github.com/pkg/browser v0.0.0-20180916011732-0a3d74bf9ce4/go.mod h1:4OwLy04Bl9Ef3GJJCoec+30X3LQs/0/m4HFRt/2LUSA= +github.com/pierrec/lz4 v2.6.1+incompatible h1:9UY3+iC23yxF0UfGaYrGplQ+79Rg+h/q9FV9ix19jjM= +github.com/pierrec/lz4 v2.6.1+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4 h1:Qj1ukM4GlMWXNdMBuXcXfz/Kw9s1qm0CLY32QxuSImI= github.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4/go.mod h1:N6UoU20jOqggOuDwUaBQpluzLNDqif3kq9z2wpdYEfQ= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.8.1-0.20171018195549-f15c970de5b7/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -1180,65 +1590,71 @@ github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZN github.com/polarismesh/polaris-go v1.1.0/go.mod h1:tquawfjEKp1W3ffNJQSzhfditjjoZ7tvhOCElN7Efzs= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= -github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021 h1:0XM1XL/OFFJjXsYXlG30spTkV/E9+gmd5GD1w2HE8xM= github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA= +github.com/pquerna/cachecontrol v0.0.0-20180517163645-1555304b9b35 h1:J9b7z+QKAmPf4YLrFg6oQUotqHQeUNWwkvo7jZp1GLU= +github.com/pquerna/cachecontrol v0.0.0-20180517163645-1555304b9b35/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA= github.com/prashantv/gostub v1.1.0/go.mod h1:A5zLQHz7ieHGG7is6LLXLz7I8+3LZzsrV0P1IAHhP5U= +github.com/prometheus/client_golang v0.0.0-20180209125602-c332b6f63c06/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.2/go.mod h1:OsXs2jCmiKlQ1lTBmv21f2mNfw4xf/QclQDMrYNZzcM= -github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= +github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g= github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= +github.com/prometheus/client_golang v1.4.1/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= github.com/prometheus/client_golang v1.5.1/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= github.com/prometheus/client_golang v1.9.0/go.mod h1:FqZLKOZnGdFAhOK4nqGHa7D66IdsO+O441Eve7ptJDU= github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= github.com/prometheus/client_golang v1.11.1/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= -github.com/prometheus/client_golang v1.12.0/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= +github.com/prometheus/client_golang v1.12.2 h1:51L9cDoUHVrXx4zWYlcLQIZ+d+VXHgqnYKkIuq4g/34= github.com/prometheus/client_golang v1.12.2/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= -github.com/prometheus/client_golang v1.13.0 h1:b71QUfeo5M8gq2+evJdTPfZhYMAU0uKPkyPJ7TPsloU= -github.com/prometheus/client_golang v1.13.0/go.mod h1:vTeo+zgvILHsnnj/39Ou/1fPN5nJFOEMgftOUOmlvYQ= +github.com/prometheus/client_model v0.0.0-20171117100541-99fa1f4be8e5/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M= github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/common v0.0.0-20180110214958-89604d197083/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.0.0-20181126121408-4724e9255275/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc= github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= github.com/prometheus/common v0.28.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= +github.com/prometheus/common v0.30.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= -github.com/prometheus/common v0.37.0 h1:ccBbHCgIiT9uSoFY0vX8H3zsNR5eLt17/RQLUvn8pXE= -github.com/prometheus/common v0.37.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= +github.com/prometheus/common v0.35.0 h1:Eyr+Pw2VymWejHqCugNaQXkAi6KayVNxaHeu6khmFBE= +github.com/prometheus/common v0.35.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= +github.com/prometheus/procfs v0.0.0-20180125133057-cb4147076ac7/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20181204211112-1dc9a6cbc91a/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.0.0-20190522114515-bc1a522cf7b1/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= +github.com/prometheus/procfs v0.0.5/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= +github.com/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0VU= github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.8.0 h1:ODq8ZFEaYeCaZOJlZZdJA2AbQR98dSHSM1KW/You5mo= -github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4= github.com/prometheus/statsd_exporter v0.21.0 h1:hA05Q5RFeIjgwKIYEdFd59xu5Wwaznf33yKI+pyX6T8= github.com/prometheus/statsd_exporter v0.21.0/go.mod h1:rbT83sZq2V+p73lHhPZfMc3MLCHmSHelCh9hSGYNLTQ= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= -github.com/rabbitmq/amqp091-go v1.5.0 h1:VouyHPBu1CrKyJVfteGknGOGCzmOz0zcv/tONLkb7rg= -github.com/rabbitmq/amqp091-go v1.5.0/go.mod h1:JsV0ofX5f1nwOGafb8L5rBItt9GyhfQfcJj+oyz0dGg= +github.com/rabbitmq/amqp091-go v1.3.4 h1:tXuIslN1nhDqs2t6Jrz3BAoqvt4qIZzxvdbdcxWtHYU= +github.com/rabbitmq/amqp091-go v1.3.4/go.mod h1:ogQDLSOACsLPsIq0NpbtiifNZi2YOz0VTJ0kHRghqbM= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= +github.com/rcrowley/go-metrics v0.0.0-20200313005456-10cdbea86bc0/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rhnvrm/simples3 v0.6.1/go.mod h1:Y+3vYm2V7Y4VijFoJHHTrja6OgPrJ2cBti8dPGkC3sA= @@ -1246,6 +1662,8 @@ github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs= github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= 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.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.2.2/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/rogpeppe/go-internal v1.8.0 h1:FCbCCtXNOY3UtUuHUYaghJg4y7Fd14rXifAYUAtL9R8= @@ -1255,38 +1673,55 @@ github.com/rs/xid v1.3.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= github.com/rs/zerolog v1.18.0/go.mod h1:9nvC1axdVrAHcu/s9taAVfBuIdTZLVQmKQyvrUjF5+I= github.com/rs/zerolog v1.25.0 h1:Rj7XygbUHKUlDPcVdoLyR91fJBsduXj5fRxyqIQj/II= github.com/rs/zerolog v1.25.0/go.mod h1:7KHcEGe0QZPOm2IE4Kpb5rTh6n1h2hIgS5OOnu1rUaI= -github.com/russross/blackfriday v1.6.0 h1:KqfZb0pUVN2lYqZUYRddxF4OR8ZMURnJIG5Y3VRLtww= -github.com/russross/blackfriday v1.6.0/go.mod h1:ti0ldHuxg49ri4ksnFxlkCfN+hvslNlmVHqNRXXJNAY= +github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= +github.com/russross/blackfriday v2.0.0+incompatible h1:cBXrhZNUf9C+La9/YpS+UHpUT8YD6Td9ZMSU9APFcsk= +github.com/russross/blackfriday v2.0.0+incompatible/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/ryanuber/go-glob v1.0.0/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIHxIXzX/Yc= +github.com/safchain/ethtool v0.0.0-20190326074333-42ed695e3de8/go.mod h1:Z0q5wiBQGYcxhMZ6gUqHn6pYNLypFAvaL3UvgZLR0U4= +github.com/safchain/ethtool v0.0.0-20210803160452-9aa261dae9b1/go.mod h1:Z0q5wiBQGYcxhMZ6gUqHn6pYNLypFAvaL3UvgZLR0U4= +github.com/sagikazarmark/crypt v0.4.0/go.mod h1:ALv2SRj7GxYV4HO9elxH9nS6M9gW+xDNxqmyJ6RfDFM= +github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da h1:p3Vo3i64TCLY7gIfzeQaUJ+kppEO5WQG3cL8iE8tGHU= github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= -github.com/samuel/go-zookeeper v0.0.0-20201211165307-7117e9ea2414 h1:AJNDS0kP60X8wwWFvbLPwDuojxubj9pbfK7pjHw0vKg= -github.com/samuel/go-zookeeper v0.0.0-20201211165307-7117e9ea2414/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= github.com/satori/go.uuid v1.2.1-0.20181028125025-b2ce2384e17b h1:gQZ0qzfKHQIybLANtM3mBXNUtOfsCFXeTsnBqCsx1KM= github.com/satori/go.uuid v1.2.1-0.20181028125025-b2ce2384e17b/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= +github.com/sclevine/agouti v3.0.0+incompatible/go.mod h1:b4WX9W9L1sfQKXeJf1mUTLZKJ48R1S7H23Ji7oFO5Bw= +github.com/sclevine/spec v1.2.0/go.mod h1:W4J29eT/Kzv7/b9IWLB055Z+qvVC9vt0Arko24q7p+U= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= +github.com/seccomp/libseccomp-golang v0.9.1/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvWlF4P2Ca7zGrPiEpWo= +github.com/seccomp/libseccomp-golang v0.9.2-0.20210429002308-3879420cc921/go.mod h1:JA8cRccbGaA1s33RQf7Y1+q9gHmZX1yB/z9WDN1C6fg= github.com/sendgrid/rest v2.6.9+incompatible h1:1EyIcsNdn9KIisLW50MKwmSRSK+ekueiEMJ7NEoxJo0= github.com/sendgrid/rest v2.6.9+incompatible/go.mod h1:kXX7q3jZtJXK5c5qK83bSGMdV6tsOE70KbHoqJls4lE= -github.com/sendgrid/sendgrid-go v3.12.0+incompatible h1:/N2vx18Fg1KmQOh6zESc5FJB8pYwt5QFBDflYPh1KVg= -github.com/sendgrid/sendgrid-go v3.12.0+incompatible/go.mod h1:QRQt+LX/NmgVEvmdRw0VT/QgUn499+iza2FnDca9fg8= -github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0= +github.com/sendgrid/sendgrid-go v3.11.1+incompatible h1:ai0+woZ3r/+tKLQExznak5XerOFoD6S7ePO0lMV8WXo= +github.com/sendgrid/sendgrid-go v3.11.1+incompatible/go.mod h1:QRQt+LX/NmgVEvmdRw0VT/QgUn499+iza2FnDca9fg8= +github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= +github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ= +github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/shirou/gopsutil v3.20.11+incompatible h1:LJr4ZQK4mPpIV5gOa4jCOKOGb4ty4DZO54I4FGqIpto= github.com/shirou/gopsutil v3.20.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/shirou/gopsutil/v3 v3.21.6 h1:vU7jrp1Ic/2sHB7w6UNs7MIkn7ebVtTb5D9j45o9VYE= github.com/shirou/gopsutil/v3 v3.21.6/go.mod h1:JfVbDpIBLVzT8oKbvMg9P3wEIMDDpVn+LwHTKj0ST88= +github.com/shivamkm07/paho.mqtt.golang v1.3.6-0.20220106130409-e28a1db639f8 h1:BXKXQzeHuVnSrHAKjvq9ICrgPC27tJ/hXWLMQo36c5s= +github.com/shivamkm07/paho.mqtt.golang v1.3.6-0.20220106130409-e28a1db639f8/go.mod h1:JGt0RsEwEX+Xa/agj90YJ9d9DH2b7upDZMK9HRbFvCA= +github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= +github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/sijms/go-ora/v2 v2.5.3 h1:klGKmhqRONVTtIzTdfYTvrW94kdJkdmZl93u2A3vchI= -github.com/sijms/go-ora/v2 v2.5.3/go.mod h1:EHxlY6x7y9HAsdfumurRfTd+v8NrEOTR3Xl4FWlH6xk= +github.com/sijms/go-ora/v2 v2.2.22 h1:XmJAEwgokgLfe43QZtYWi6+ziYKz4yHmqKQlbdNVFmA= +github.com/sijms/go-ora/v2 v2.2.22/go.mod h1:jzfAFD+4CXHE+LjGWFl6cPrtiIpQVxakI2gvrMF2w6Y= +github.com/sirupsen/logrus v1.0.4-0.20170822132746-89742aefa4b2/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= github.com/sirupsen/logrus v1.0.6/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.4.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= +github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= @@ -1298,6 +1733,7 @@ github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIK github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= github.com/soheilhy/cmux v0.1.5-0.20210205191134-5ec6847320e5/go.mod h1:T7TcVDs9LWfQgPlPsdngu6I6QIoyIFZDDC6sNE1GqG0= +github.com/soheilhy/cmux v0.1.5/go.mod h1:T7TcVDs9LWfQgPlPsdngu6I6QIoyIFZDDC6sNE1GqG0= github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= github.com/sony/gobreaker v0.4.2-0.20210216022020-dd874f9dd33b h1:br+bPNZsJWKicw/5rALEo67QHs5weyD5tf8WST+4sJ0= github.com/sony/gobreaker v0.4.2-0.20210216022020-dd874f9dd33b/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= @@ -1306,37 +1742,52 @@ github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0b github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= +github.com/spf13/afero v1.3.3/go.mod h1:5KUK8ByomD5Ti5Artl0RtHeI5pTF7MIDuXL3yY520V4= github.com/spf13/afero v1.6.0 h1:xoax2sJ2DT8S8xA2paPFjDCScCNeWsg75VG0DLRreiY= github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cast v1.3.1 h1:nFm6S0SMdyzrzcmThSipiEubIDy8WEXKNZ0UOgiRpng= github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cast v1.4.1 h1:s0hze+J0196ZfEMTs80N7UlFt0BDuQ7Q+JDnHiMWKdA= +github.com/spf13/cast v1.4.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cobra v0.0.2-0.20171109065643-2da4a54c5cee/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= +github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= +github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= github.com/spf13/cobra v1.1.1/go.mod h1:WnodtKOvamDL/PwE2M4iKs8aMDBZ5Q5klgD3qfVJQMI= +github.com/spf13/cobra v1.1.3/go.mod h1:pGADOWyqRD/YMrPZigI/zbliZ2wVD/23d+is3pSWzOo= github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk= +github.com/spf13/cobra v1.4.0/go.mod h1:Wo4iy3BUC+X2Fybo0PDqwJIv3dNRiZLHQymsfxlB84g= +github.com/spf13/cobra v1.5.0/go.mod h1:dWXEIy2H428czQCjInthrTRUg7yKbok+2Qi/yBIJoUM= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= +github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.1-0.20171106142849-4c012f6dcd95/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= +github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= github.com/spf13/viper v1.7.1/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= -github.com/spf13/viper v1.8.1 h1:Kq1fyeebqsBfbjZj4EL7gj2IO0mMaiyjYUWcUsl2O44= github.com/spf13/viper v1.8.1/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns= +github.com/spf13/viper v1.10.1 h1:nuJZuYpG7gTj/XqiUwg8bA0cp1+M2mC3J4g5luUYBKk= +github.com/spf13/viper v1.10.1/go.mod h1:IGlFPqhNAPKRxohIzWpI5QEy4kuI7tcl5WvR+8qy1rU= github.com/stathat/consistent v1.0.0 h1:ZFJ1QTRn8npNBKW065raSZ8xfOqhpb8vLOkfp4CcL/U= github.com/stathat/consistent v1.0.0/go.mod h1:uajTPbgSygZBJ+V+0mY7meZ8i0XAcZs7AQ6V121XSxw= +github.com/stefanberger/go-pkcs11uri v0.0.0-20201008174630-78d3cae3a980/go.mod h1:AO3tvPzVZ/ayst6UlUKUv6rcPQInYe3IknH3jYhAKu8= github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= +github.com/stretchr/objx v0.0.0-20180129172003-8a3f7159479f/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= -github.com/stretchr/objx v0.3.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/objx v0.4.0 h1:M2gUjqZET1qApGOWNSnZ49BAIMX4F/1plDv3+l31EJ4= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/testify v0.0.0-20180303142811-b89eecf5ca5d/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= @@ -1349,22 +1800,24 @@ github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PK github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= -github.com/supplyon/gremcos v0.1.38 h1:TSv2NTtPLmpVliTDEnPmkvjoZ+kAZcTOTcCurSLAIik= -github.com/supplyon/gremcos v0.1.38/go.mod h1:bNLIt63atqB9stCOaPBjQKT2ozVORkXYSNfchkjHS0w= -github.com/tchap/go-patricia/v2 v2.3.1 h1:6rQp39lgIYZ+MHmdEq4xzuk1t7OdC35z/xm0BGhTkes= -github.com/tchap/go-patricia/v2 v2.3.1/go.mod h1:VZRHKAb53DLaG+nA9EaYYiaEx6YztwDlLElMsnSHD4k= +github.com/supplyon/gremcos v0.1.0 h1:kZdC3P6m8dkfBO4ZLB2XmzHrPu/Z5enwgz6/x8MTIhc= +github.com/supplyon/gremcos v0.1.0/go.mod h1:ZnXsXGVbGCYDFU5GLPX9HZLWfD+ZWkiPo30KUjNoOtw= +github.com/syndtr/gocapability v0.0.0-20170704070218-db04d3cc01c8/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= +github.com/syndtr/gocapability v0.0.0-20180916011248-d98352740cb2/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= +github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= +github.com/tchap/go-patricia v2.2.6+incompatible/go.mod h1:bmLyhP68RS6kStMGxByiQ23RP/odRBOTVjwp2cDyi6I= github.com/tebeka/strftime v0.1.3/go.mod h1:7wJm3dZlpr4l/oVK0t1HYIc4rMzQ2XJlOMIUJUJH6XQ= -github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.518 h1:RI2cRKuBTPNsa7KZs1Z0j0I4B1ugseh4gu0TYIPseew= -github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.518/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y= -github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssm v1.0.518 h1:MEZvfnKbVDaWyp64mZNB7uh2mahWKqP4enMtvTI7txs= -github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssm v1.0.518/go.mod h1:mS8mOX0acvUXqlEoYz7Wr+lNQFwxoqLc8z4o7ptvriQ= -github.com/tetratelabs/wazero v1.0.0-pre.2 h1:sHYi8DKUL7s7c4sKz6lw0pNqky5EogYK0Iq4pSIsDog= -github.com/tetratelabs/wazero v1.0.0-pre.2/go.mod h1:M8UDNECGm/HVjOfq0EOe4QfCY9Les1eq54IChMLETbc= +github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.476 h1:2VOnCo8XYky0o8dEmBUyjyC6pnXM2Xu0hgvVfOQspv8= +github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.476/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y= +github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssm v1.0.476 h1:KjkP84yJW8tweRzJlUnJdeAncxdcaajrFkUgVEmnN4k= +github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssm v1.0.476/go.mod h1:huGvjX9BMaK26Pbfk+0g89VrFxWxokvC3OFrHpZbkWs= +github.com/tetratelabs/wazero v1.0.0-pre.1 h1:bUZ4vf21c36RmgA3enNOlLgPElEVDYoRJJ9+McRGF6Q= +github.com/tetratelabs/wazero v1.0.0-pre.1/go.mod h1:M8UDNECGm/HVjOfq0EOe4QfCY9Les1eq54IChMLETbc= github.com/tevid/gohamcrest v1.1.1/go.mod h1:3UvtWlqm8j5JbwYZh80D/PVBt0mJ1eJiYgZMibh0H/k= github.com/tidwall/gjson v1.2.1/go.mod h1:c/nTNbUr0E0OrXEhq1pwa8iEgc2DOt4ZZqAt1HtCkPA= github.com/tidwall/gjson v1.8.1/go.mod h1:5/xDoumyyDNerp2U36lyolv46b3uF/9Bu6OfyQ9GImk= -github.com/tidwall/gjson v1.9.3 h1:hqzS9wAHMO+KVBBkLxYdkEeeFHuqr95GfClRLKlgK0E= -github.com/tidwall/gjson v1.9.3/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= +github.com/tidwall/gjson v1.14.0 h1:6aeJ0bzojgWLa82gDQHcx3S0Lr/O51I9bJ5nv6JFx5w= +github.com/tidwall/gjson v1.14.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= github.com/tidwall/match v1.0.1/go.mod h1:LujAq0jyVjBy028G1WhWfIzbpQfMO8bBZ6Tyb0+pL9E= github.com/tidwall/match v1.0.3/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA= @@ -1387,42 +1840,63 @@ github.com/tmc/grpc-websocket-proxy v0.0.0-20200427203606-3cfed13b9966/go.mod h1 github.com/tmc/grpc-websocket-proxy v0.0.0-20201229170055-e5319fda7802/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/ttacon/chalk v0.0.0-20160626202418-22c06c80ed31/go.mod h1:onvgF043R+lC5RZ8IT9rBXDaEDnpnw/Cl+HFiw+v/7Q= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= +github.com/tv42/httpunix v0.0.0-20191220191345-2ba4b9c3382c/go.mod h1:hzIxponao9Kjc7aWznkXaL4U4TWaDSs8zcsY4Ka08nM= github.com/uber/jaeger-client-go v2.29.1+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= github.com/uber/jaeger-lib v2.4.1+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= +github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= +github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= github.com/ugorji/go v1.2.6/go.mod h1:anCg0y61KIhDlPZmnH+so+RQbysYVyDko0IMgJv0Nn0= +github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= +github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= github.com/ugorji/go/codec v1.2.6/go.mod h1:V6TCNZ4PHqoHGFZuSG1W8nrCzzdgA2DozYxWFFpvxTw= +github.com/urfave/cli v0.0.0-20171014202726-7bc6a0acffa5/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= github.com/valyala/fasthttp v1.21.0/go.mod h1:jjraHZVbKOXftJfsOYoAjaeygpj5hr8ermTRJNroD7A= -github.com/valyala/fasthttp v1.40.0 h1:CRq/00MfruPGFLTQKY8b+8SfdK60TxNztjRMnH0t1Yc= -github.com/valyala/fasthttp v1.40.0/go.mod h1:t/G+3rLek+CyY9bnIE+YlMRddxVAAGjhxndDB4i4C0I= +github.com/valyala/fasthttp v1.34.0 h1:d3AAQJ2DRcxJYHm7OXNXtXt2as1vMDfxeIcFvhmGGm4= +github.com/valyala/fasthttp v1.34.0/go.mod h1:epZA5N+7pY6ZaEKRmstzOuYJx9HI8DI1oaCGZpdH4h0= github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= github.com/valyala/fasttemplate v1.1.0/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= -github.com/valyala/fasttemplate v1.2.1 h1:TVEnxayobAdVkhQfrfes2IzOB6o+z4roRkPF52WA1u4= github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio= github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7FwZEA7Ioqkc= +github.com/vektah/gqlparser/v2 v2.4.6 h1:Yjzp66g6oVq93Jihbi0qhGnf/6zIWjcm8H6gA27zstE= +github.com/vektah/gqlparser/v2 v2.4.6/go.mod h1:flJWIR04IMQPGz+BXLrORkrARBxv/rtyIAFvd/MceW0= +github.com/vishvananda/netlink v0.0.0-20181108222139-023a6dafdcdf/go.mod h1:+SR5DhBJrl6ZM7CoCKvpw5BKroDKQ+PJqOg65H/2ktk= +github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE= +github.com/vishvananda/netlink v1.1.1-0.20201029203352-d40f9887b852/go.mod h1:twkDnbuQxJYemMlGd4JFIcuhgX83tXhKS2B/PRMpOho= +github.com/vishvananda/netlink v1.1.1-0.20210330154013-f5de75959ad5/go.mod h1:twkDnbuQxJYemMlGd4JFIcuhgX83tXhKS2B/PRMpOho= +github.com/vishvananda/netns v0.0.0-20180720170159-13995c7128cc/go.mod h1:ZjcWmFBXmLKZu9Nxj3WKYEafiSqer2rnvPr0en9UNpI= +github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU= +github.com/vishvananda/netns v0.0.0-20200728191858-db3c7e526aae/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0= +github.com/vishvananda/netns v0.0.0-20210104183010-2eb08e3e575f/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0= github.com/vmware/vmware-go-kcl v1.5.0 h1:lTptJptznhVOHS7CSuhd/2yDJa7deTBRHaj3zAvhJt8= github.com/vmware/vmware-go-kcl v1.5.0/go.mod h1:P92YfaWfQyudNf62BNx+E2rJn9pd165MhHsRt8ajkpM= -github.com/wapc/wapc-go v0.5.4 h1:56vh+reZRH52BSfM1pUzFuL177KKDeRxloucAKtrtJk= -github.com/wapc/wapc-go v0.5.4/go.mod h1:1EWTDM1d2GbJx2Po0HP8t4xCilgKo+K60xigwHVmzRA= +github.com/wapc/wapc-go v0.5.2 h1:gVwi7FrUVFGBPRDjgAoYhjIW6UtjsJPYf4Ek8PL0UfY= +github.com/wapc/wapc-go v0.5.2/go.mod h1:2eo+ri+PdoOPPb5jGsLeV4MfUaQKioYH5FH/nmXG+1g= github.com/wasmerio/wasmer-go v1.0.4 h1:MnqHoOGfiQ8MMq2RF6wyCeebKOe84G88h5yv+vmxJgs= +github.com/willf/bitset v1.1.11-0.20200630133818-d5bec3311243/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= +github.com/willf/bitset v1.1.11/go.mod h1:83CECat5yLh5zVOf4P1ErAgKA5UDvKtgyUABdr3+MjI= github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c= github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= -github.com/xdg-go/scram v1.1.1 h1:VOMT+81stJgXW3CpHyqHN3AXDYIMsx56mEFrB37Mb/E= -github.com/xdg-go/scram v1.1.1/go.mod h1:RaEWvsqvNKKvBPvcKeFjrG2cJqOkHTiyTpzz23ni57g= -github.com/xdg-go/stringprep v1.0.3 h1:kdwGpVNwPFtjs98xCGkHjQtGKh86rDcRZN17QEMCOIs= -github.com/xdg-go/stringprep v1.0.3/go.mod h1:W3f5j4i+9rC0kuIEJL0ky1VpHXQU3ocBgklLGvcBnW8= +github.com/xdg-go/scram v1.0.2 h1:akYIkZ28e6A96dkWNJQu3nmCzH3YfwMPQExUYDaRv7w= +github.com/xdg-go/scram v1.0.2/go.mod h1:1WAq6h33pAW+iRreB34OORO2Nf7qel3VV3fjBj+hCSs= +github.com/xdg-go/stringprep v1.0.2 h1:6iq84/ryjjeRmMJwxutI51F2GIPlP5BfTvXHeYjyhBc= +github.com/xdg-go/stringprep v1.0.2/go.mod h1:8F9zXuvzgwmyT5DUm4GUfZGDdT3W+LCvS6+da4O5kxM= github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb h1:zGWFAtiMcyryUHoUjUJX0/lt1H2+i2Ka2n+D3DImSNo= github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0= github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= +github.com/xeipuuv/gojsonschema v0.0.0-20180618132009-1d523034197f/go.mod h1:5yf86TLmAcydyeJq5YvxkGPE2fm/u4myDekKRoLuqhs= github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74= github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= github.com/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/yalp/jsonpath v0.0.0-20180802001716-5cc68e5049a0 h1:6fRhSjgLCkTD3JnJxvaJ4Sj+TYblw757bqYgZaOq5ZY= github.com/yalp/jsonpath v0.0.0-20180802001716-5cc68e5049a0/go.mod h1:/LWChgwKmvncFJFHJ7Gvn9wZArjbV5/FppcK2fKk/tI= github.com/yashtewari/glob-intersection v0.1.0 h1:6gJvMYQlTDOL3dMsPF6J0+26vwX9MB8/1q3uAdhmTrg= @@ -1439,8 +1913,14 @@ github.com/yuin/goldmark v1.1.30/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= 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/gopher-lua v0.0.0-20210529063254-f4c35e4016d9 h1:k/gmLsJDWwWqbLCur2yWnJzwQEKRcAHXo6seXGuSwWw= -github.com/yuin/gopher-lua v0.0.0-20210529063254-f4c35e4016d9/go.mod h1:E1AXubJBdNmFERAOucpDIxNzeGfLzg0mYh+UfMWdChA= +github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/gopher-lua v0.0.0-20191220021717-ab39c6098bdb/go.mod h1:gqRgreBUhTSL0GeU64rtZ3Uq3wtjOa/TB2YfrtkCbVQ= +github.com/yuin/gopher-lua v0.0.0-20200603152657-dc2b0ca8b37e h1:oIpIX9VKxSCFrfjsKpluGbNPBGq9iNnT9crH781j9wY= +github.com/yuin/gopher-lua v0.0.0-20200603152657-dc2b0ca8b37e/go.mod h1:gqRgreBUhTSL0GeU64rtZ3Uq3wtjOa/TB2YfrtkCbVQ= +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= github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q= github.com/zouyx/agollo/v3 v3.4.5 h1:7YCxzY9ZYaH9TuVUBvmI6Tk0mwMggikah+cfbYogcHQ= github.com/zouyx/agollo/v3 v3.4.5/go.mod h1:LJr3kDmm23QSW+F1Ol4TMHDa7HvJvscMdVxJ2IpUTVc= @@ -1450,42 +1930,69 @@ go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= go.etcd.io/bbolt v1.3.6 h1:/ecaJf0sk1l4l6V4awd65v2C3ILy7MSj+s/x1ADCIMU= go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= +go.etcd.io/etcd v0.5.0-alpha.5.0.20200910180754-dd1b699fc489/go.mod h1:yVHk9ub3CSBatqGNg7GRmsnfLWtoW60w4eDYfh7vHDg= go.etcd.io/etcd/api/v3 v3.5.0-alpha.0/go.mod h1:mPcW6aZJukV6Aa81LSKpBjQXTWlXB5r74ymPoSWa3Sw= go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= +go.etcd.io/etcd/api/v3 v3.5.1/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= go.etcd.io/etcd/api/v3 v3.5.4/go.mod h1:5GB2vv4A4AOn3yk7MftYGHkUfGtDHnEraIjym4dYz5A= go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= +go.etcd.io/etcd/client/pkg/v3 v3.5.1/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= go.etcd.io/etcd/client/pkg/v3 v3.5.4/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= go.etcd.io/etcd/client/v2 v2.305.0-alpha.0/go.mod h1:kdV+xzCJ3luEBSIeQyB/OEKkWKd8Zkux4sbDeANrosU= go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ= +go.etcd.io/etcd/client/v2 v2.305.1/go.mod h1:pMEacxZW7o8pg4CrFE7pquyCJJzZvkvdD2RibOCCCGs= go.etcd.io/etcd/client/v3 v3.5.0-alpha.0/go.mod h1:wKt7jgDgf/OfKiYmCq5WFGxOFAkVMLxiiXgLDFhECr8= +go.etcd.io/etcd/client/v3 v3.5.0/go.mod h1:AIKXXVX/DQXtfTEqBryiLTUXwON+GuvO6Z7lLS/oTh0= go.etcd.io/etcd/client/v3 v3.5.4/go.mod h1:ZaRkVgBZC+L+dLCjTcF1hRXpgZXQPOvnA/Ak/gq3kiY= go.etcd.io/etcd/pkg/v3 v3.5.0-alpha.0/go.mod h1:tV31atvwzcybuqejDoY3oaNRTtlD2l/Ot78Pc9w7DMY= +go.etcd.io/etcd/pkg/v3 v3.5.0/go.mod h1:UzJGatBQ1lXChBkQF0AuAtkRQMYnHubxAEYIrC3MSsE= go.etcd.io/etcd/raft/v3 v3.5.0-alpha.0/go.mod h1:FAwse6Zlm5v4tEWZaTjmNhe17Int4Oxbu7+2r0DiD3w= +go.etcd.io/etcd/raft/v3 v3.5.0/go.mod h1:UFOHSIvO/nKwd4lhkwabrTD3cqW5yVyYYf/KlD00Szc= go.etcd.io/etcd/server/v3 v3.5.0-alpha.0/go.mod h1:tsKetYpt980ZTpzl/gb+UOJj9RkIyCb1u4wjzMg90BQ= -go.mongodb.org/mongo-driver v1.10.3 h1:XDQEvmh6z1EUsXuIkXE9TaVeqHw6SwS1uf93jFs0HBA= -go.mongodb.org/mongo-driver v1.10.3/go.mod h1:z4XpeoU6w+9Vht+jAFyLgVrD+jGSQQe0+CBWFHNiHt8= -go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= -go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= -go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= -go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= -go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= +go.etcd.io/etcd/server/v3 v3.5.0/go.mod h1:3Ah5ruV+M+7RZr0+Y/5mNLwC+eQlni+mQmOVdCRJoS4= +go.mongodb.org/mongo-driver v1.5.1 h1:9nOVLGDfOaZ9R0tBumx/BcuqkbFpyTCU2r/Po7A2azI= +go.mongodb.org/mongo-driver v1.5.1/go.mod h1:gRXCHX4Jo7J0IJ1oDQyUxF7jfy19UfxniMS4xxMmUqw= +go.mozilla.org/pkcs7 v0.0.0-20200128120323-432b2356ecb1/go.mod h1:SNgMg+EgDFwmvSmLRTNKC5fegJjB7v23qTQ0XLGUNHk= go.opencensus.io v0.23.0 h1:gqCw0LfLxScz8irSi8exQc7fyQ0fKQU/qnC/X8+V/1M= go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= +go.opentelemetry.io/contrib v0.20.0/go.mod h1:G/EtFaa6qaN7+LxqfIAT3GiZa7Wv5DTBUzl5H4LY0Kc= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.20.0/go.mod h1:oVGt1LRbBOBq1A5BQLlUg9UaU/54aiHw8cgjV3aWZ/E= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.28.0/go.mod h1:vEhqr0m4eTc+DWxfsXoXue2GBgV2uUwVznkGIHW/e5w= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.20.0/go.mod h1:2AboqHi0CiIZU0qwhtUfCYD1GeUzvvIXWNkhDt7ZMG4= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.32.0/go.mod h1:5eCOqeGphOyz6TsY3ZDNjE33SM/TFAK3RGuCL2naTgY= +go.opentelemetry.io/otel v0.20.0/go.mod h1:Y3ugLH2oa81t5QO+Lty+zXf8zC9L26ax4Nzoxm/dooo= +go.opentelemetry.io/otel v1.3.0/go.mod h1:PWIKzi6JCp7sM0k9yZ43VX+T345uNbAkDKwHVjb2PTs= go.opentelemetry.io/otel v1.7.0/go.mod h1:5BdUoMIz5WEs0vt0CUEMtSSaTSHBBVwrhnz7+nrD5xk= +go.opentelemetry.io/otel/exporters/otlp v0.20.0/go.mod h1:YIieizyaN77rtLJra0buKiNBOm9XQfkPEKBeuhoMwAM= +go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.3.0/go.mod h1:VpP4/RMn8bv8gNo9uK7/IMY4mtWLELsS+JIP0inH0h4= +go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.7.0/go.mod h1:M1hVZHNxcbkAlcvrOMlpQ4YOO3Awf+4N2dxkZL3xm04= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.3.0/go.mod h1:hO1KLR7jcKaDDKDkvI9dP/FIhpmna5lkqPUQdEjFAM8= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.7.0/go.mod h1:ceUgdyfNv4h4gLxHR0WNfDiiVmZFodZhZSbOLhpxqXE= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.3.0/go.mod h1:keUU7UfnwWTWpJ+FWnyqmogPa82nuU5VUANFq49hlMY= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.7.0/go.mod h1:E+/KKhwOSw8yoPxSSuUHG6vKppkvhN+S1Jc7Nib3k3o= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.3.0/go.mod h1:QNX1aly8ehqqX1LEa6YniTU7VY9I6R3X/oPxhGdTceE= +go.opentelemetry.io/otel/metric v0.20.0/go.mod h1:598I5tYlH1vzBjn+BTuhzTCSb/9debfNp6R3s7Pr1eU= +go.opentelemetry.io/otel/metric v0.30.0/go.mod h1:/ShZ7+TS4dHzDFmfi1kSXMhMVubNoP0oIaBp70J6UXU= +go.opentelemetry.io/otel/oteltest v0.20.0/go.mod h1:L7bgKf9ZB7qCwT9Up7i9/pn0PWIa9FqQ2IQ8LoxiGnw= +go.opentelemetry.io/otel/sdk v0.20.0/go.mod h1:g/IcepuwNsoiX5Byy2nNV0ySUF1em498m7hBWC279Yc= +go.opentelemetry.io/otel/sdk v1.3.0/go.mod h1:rIo4suHNhQwBIPg9axF8V9CA72Wz2mKF1teNrup8yzs= +go.opentelemetry.io/otel/sdk v1.7.0/go.mod h1:uTEOTwaqIVuTGiJN7ii13Ibp75wJmYUDe374q6cZwUU= +go.opentelemetry.io/otel/sdk/export/metric v0.20.0/go.mod h1:h7RBNMsDJ5pmI1zExLi+bJK+Dr8NQCh0qGhm1KDnNlE= +go.opentelemetry.io/otel/sdk/metric v0.20.0/go.mod h1:knxiS8Xd4E/N+ZqKmUPf3gTTZ4/0TjTXukfxjzSTpHE= +go.opentelemetry.io/otel/trace v0.20.0/go.mod h1:6GjCW8zgDjwGHGa6GkyeB8+/5vjT16gUEi0Nf1iBdgw= +go.opentelemetry.io/otel/trace v1.3.0/go.mod h1:c/VDhno8888bvQYmbYLqe41/Ldmr/KKunbvWM4/fEjk= go.opentelemetry.io/otel/trace v1.7.0/go.mod h1:fzLSB9nqR2eXzxPXb2JW9IKE+ScyXA48yyE4TNvoHqU= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= +go.opentelemetry.io/proto/otlp v0.11.0/go.mod h1:QpEjXPrNQzrFDZgoTo49dgHR9RYRSrg3NAKnUGl9YpQ= +go.opentelemetry.io/proto/otlp v0.16.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.5.1/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE= go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= -go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= go.uber.org/automaxprocs v1.5.1/go.mod h1:BF4eumQw0P9GtnuxxovUd06vwm1o18oMzFtK66vU6XU= go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= @@ -1496,8 +2003,8 @@ go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/ go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/multierr v1.7.0 h1:zaiO/rmgFjbmCXdSYJWQcdvOCsthmdaHfr3Gm2Kx4Ec= -go.uber.org/multierr v1.7.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= +go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8= +go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= go.uber.org/ratelimit v0.2.0 h1:UQE2Bgi7p2B85uP5dC2bbRtig0C+OeNRnNEafLjsLPA= go.uber.org/ratelimit v0.2.0/go.mod h1:YYBV4e4naJvhpitQrWJu1vCpgB7CboMe0qhltKt6mUg= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= @@ -1512,12 +2019,18 @@ go.uber.org/zap v1.21.0 h1:WefMeulhovoZ2sYXz7st6K0sLj7bBhpiFaud4r4zST8= go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw= goji.io v2.0.2+incompatible h1:uIssv/elbKRLznFUy3Xj4+2Mz/qKhek/9aZQDUMae7c= goji.io v2.0.2+incompatible/go.mod h1:sbqFwrtqZACxLBTQcdgVjFh54yGVCvwq8+w49MVMMIk= +golang.org/x/crypto v0.0.0-20171113213409-9f005a07e0d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180820150726-614d502a4dac/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181009213950-7c1a557ab941/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190422162423-af44ce270edf/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= @@ -1525,22 +2038,27 @@ golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20191112222119-e1110fd1c708/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20191219195013-becbf705a915/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200323165209-0ec3e9974c59/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20201112155050-0c6587e931a9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= +golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/crypto v0.0.0-20210314154223-e6e6c4f2bb5b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20210920023735-84f357641f63/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-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220926161630-eccd6366d1be/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20221010152910-d6f0a8c073c2/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.1.0 h1:MDRAIl0xIo9Io2xV565hzXHw3zVseKrJKodhohM5CjU= -golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= +golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90 h1:Y/gsMcFOcR+6S6f3YeMKl5g+dZMEWqcz5Czj/GWYbkM= +golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -1581,23 +2099,28 @@ golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= 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.5.0/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= +golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/net v0.0.0-20180530234432-1e491301e022/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= 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= +golang.org/x/net v0.0.0-20181011144130-49bb7cea24b1/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190619014844-b5b0513f8c1b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -1605,6 +2128,7 @@ golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191112182307-2180aed22343/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -1623,12 +2147,14 @@ golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/ golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20201006153459-a7d1128ccaa0/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201016165138-7b1cca2348c0/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= @@ -1636,22 +2162,25 @@ golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96b golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8= golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210520170846-37e1c6afe023/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210610132358-84b48f89b13b/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210726213435-c6fcb2dbf985/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210825183410-e898025ed96a/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210917221730-978cfadd31cf/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211029224645-99673261e6eb/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211105192438-b53810dc28af/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= golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.0.0-20220725212005-46097bf591d3/go.mod h1:AaygXjzTFtRAg2ttMY5RMuhpJ3cNnI0XpyFJD1iQRSM= -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/net v0.0.0-20220630215102-69896b714898 h1:K7wO6V1IrczY9QOQ2WkVpw4JQSwCd52UsxVEirZUfiw= +golang.org/x/net v0.0.0-20220630215102-69896b714898/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= 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= @@ -1668,17 +2197,16 @@ golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20211005180243-6b3c2da341f1/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a h1:qfl7ob3DIEs3Ml9oLuPwY2N04gymzAW04WsUQHIClgM= golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= -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.1.0 h1:isLCZuhj4v+tYv7eskaN4v/TM+A1begWWgyVJDdl1+Y= -golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A= 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= golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190412183630-56d357773e84/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -1686,10 +2214,8 @@ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 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 h1:Ax0t5p6N38Ga0dThY21weqDEyz2oklo4IvDkpigvkD8= 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/sync v0.0.0-20220929204114-8fcdb60fdcc0 h1:cu5kTvlzcw1Q5S9f5ip1/cpiB4nXvw1XYzFPGgzLUOY= -golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0/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-20180828065106-d99a578cf41b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1698,7 +2224,7 @@ golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190129075346-302c3dd5f1cc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190130150945-aca44879d564/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190204203706-41f3e6584952/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1707,33 +2233,50 @@ golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190419153524-e8e3143a4f4a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190514135907-3a4b5fb9f71f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190522044717-8097e1b27ff5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190523142557-0e01d883c5c5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190531175056-4c3a928424d2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190602015325-4c4f7f33c9ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190606203320-7fc4e5ec1444/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190712062909-fae7ac547cb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190812073006-9eafafc0a87e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191022100944-742c48ecaeb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191112214154-59a1497f0cea/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191115151921-52ab43148777/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191210023423-ac6580df4449/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200120151820-655fe14d7479/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200217220822-9197077df867/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1743,16 +2286,28 @@ golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200509044756-6aff5f38e54f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200622214017-ed371f2e16b4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200728102440-3e129f6d46b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200817155316-9781c653f443/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200826173525-f9321e4c35a6/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200831180312-196b9ba8737a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200909081042-eff7692f9009/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200916030750-2334cc1a136f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200922070232-aee5d888a860/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200923182605-d9f96fdee20d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201009025420-dfb3f7c4e634/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201112073958-5cba982894dd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201117170446-d9b008d0a637/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201202213521-69691e467435/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201214210602-f9fddec55a1e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201223074533-0d417f636930/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1760,14 +2315,18 @@ golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210316164454-77fc1eacc6aa/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210426230700-d19ff857e887/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1776,36 +2335,38 @@ golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210819135213-f52c844e1c1c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210831042530-f4d43177bf5e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210903071746-97244b99971b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210906170528-6f6e22806c34/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211103235746-7861aae1554b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211106132015-ebca88c72f68/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211116061358-0a5406a5449c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211117180635-dee7805ff2e1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220204135822-1c1b9b1eba6a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220502124256-b6088ccd6cba/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-20220715151400-c0bba94af5f8 h1:0A+M6Uqn+Eje4kHMK80dtF3JCXC4ykBgQG4Fe06QRhQ= 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-20220928140112-f11e5e49a4ec/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20221010170243-090e33056c14/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 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.1.0 h1:g6Z6vPFA9dYBAF7DWcH6sCcOntplXsDKcliusYijMlw= -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= @@ -1815,22 +2376,24 @@ 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= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20220722155302-e5dcc9cfc0b9/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20220922220347-f3bd1da661af h1:Yx9k8YCG3dvF87UAn2tu2HQLf2dt/eR1bXxpLMWeH+Y= -golang.org/x/time v0.0.0-20220922220347-f3bd1da661af/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20210611083556-38a9dc6acbc6/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20211116232009-f0f3c7e86c11 h1:GZokNIeuVkl3aZHJchRrr13WCsols02MLUcz1U9is6M= +golang.org/x/time v0.0.0-20211116232009-f0f3c7e86c11/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -1839,13 +2402,20 @@ golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3 golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190329151228-23e29df326fe/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190416151739-9c9e1878f421/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190420181800-aa740d480789/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190424220101-1e8e1cfdf96b/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190531172133-b3315ee88b7d/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190706070813-72ffa07ba3db/go.mod h1:jcCCGcm9btYwXyDqrUWc6MKQKKGJCWEQ3AfLSRIbEuI= golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190828213141-aed303cbaa74/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -1860,7 +2430,6 @@ golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191216052735-49a3e744a425/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= @@ -1876,15 +2445,18 @@ golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjs golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200505023115-26f46d2f7ef8/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200509030707-2212a7e161a5/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200616133436-c1934b75d054/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= +golang.org/x/tools v0.0.0-20200916195026-c9a70fc28ce3/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= golang.org/x/tools v0.0.0-20201014170642-d1624618ad65/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= golang.org/x/tools v0.0.0-20201022035929-9cf592e881e9/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= @@ -1899,19 +2471,22 @@ golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= 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.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.6-0.20210820212750-d4cc65f0b2ff/go.mod h1:YD9qOF0M9xpSpdWTBbzEl5e/RnCefISl8E5Noe10jFM= +golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= +golang.org/x/tools v0.1.11 h1:loJ25fNOEhSXfHrpoGj91eCUThwdNX6u24rO1xnNteY= +golang.org/x/tools v0.1.11/go.mod h1:SgwaegtQh8clINPpECJMqnxLv9I09HLqnW3RMqW0CA4= 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= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f h1:uF6paiQQebLeSXkrTqHqz0MXhXXS1KgF41eUdBNvxK0= golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= -golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk= -golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0= gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= -google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= +google.golang.org/api v0.0.0-20160322025152-9bf6e6e569ff/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= @@ -1942,17 +2517,14 @@ google.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6 google.golang.org/api v0.55.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= google.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdrMgI= +google.golang.org/api v0.59.0/go.mod h1:sT2boj7M9YJxZzgeZqXogmhfmRWDtPzT31xkieUbuZU= google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I= google.golang.org/api v0.63.0/go.mod h1:gs4ij2ffTRXwuzzgJl/56BdwJaA194ijkfn++9tDuPo= google.golang.org/api v0.67.0/go.mod h1:ShHKP8E60yPsKNw/w8w+VYaj9H6buA5UqDp8dhbQZ6g= google.golang.org/api v0.70.0/go.mod h1:Bs4ZM2HGifEvXwd50TtW70ovgJffJYw2oRCOFU/SkfA= google.golang.org/api v0.71.0/go.mod h1:4PyU6e6JogV1f9eA4voyrTY2batOLdgZ5qZ5HOCc4j8= +google.golang.org/api v0.74.0 h1:ExR2D+5TYIrMphWgs5JCgwRhEDlPDXXrLwHHMgPHTXE= 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.78.0/go.mod h1:1Sg78yoMLOhlQTeF+ARBoytAcH1NNyyl390YMy6rKmw= -google.golang.org/api v0.84.0/go.mod h1:NTsGnUFJMYROtiquksZHBWtHfeMC7iYthki7Eq3pa8o= -google.golang.org/api v0.100.0 h1:LGUYIrbW9pzYQQ8NWXlaIVkgnfubVBZbMFb9P8TK374= -google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -1962,13 +2534,14 @@ google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCID google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/cloud v0.0.0-20151119220103-975617b05ea8/go.mod h1:0H1ncTHf11KCFhTc/+EFRbzSCOZx+VUbRMk55Yv5MYk= google.golang.org/genproto v0.0.0-20170818010345-ee236bd376b0/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190404172233-64821d5d2107/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190522204451-c2c4e71fbf69/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= @@ -1978,6 +2551,7 @@ google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvx google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200117163144-32f20d992d24/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= @@ -1992,6 +2566,7 @@ google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfG google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20200527145253-8367513e4ece/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= @@ -1999,7 +2574,9 @@ google.golang.org/genproto v0.0.0-20200806141610-86f49bd18e98/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201019141844-1ed22bb0c154/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201102152239-715cce707fb0/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201110150050-8816d57aaa9a/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= @@ -2008,13 +2585,14 @@ google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210329143202-679c6ae281ee/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= +google.golang.org/genproto v0.0.0-20210701133433-6b8dcf568a95/go.mod h1:yiaVoXHpRzHGyxV3o4DktVWY4mSUErTKaeEOq6C3t3U= +google.golang.org/genproto v0.0.0-20210707164411-8c882eb9abba/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= google.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= google.golang.org/genproto v0.0.0-20210728212813-7823e685a01f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= @@ -2026,11 +2604,14 @@ google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEc google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= google.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211008145708-270636b82663/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211028162531-8db9c33dc351/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211104193956-4c6863e31247/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220107163113-42d7afdf6368/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20220207164111-0872dc986b00/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20220218161850-94dd64e39d7c/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= @@ -2038,20 +2619,11 @@ google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf/go.mod h1:kGP+zUP2 google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= -google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -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-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-20220608133413-ed9918b62aac/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-20221018160656-63c7b68cfc55 h1:U1u4KB2kx6KR/aJDjQ97hZ15wQs8ZPvDcGcRynBhkvg= -google.golang.org/genproto v0.0.0-20221018160656-63c7b68cfc55/go.mod h1:45EK0dUbEZ2NHjCeAd2LXmyjAgGUGrpGROgjhC3ADck= +google.golang.org/genproto v0.0.0-20220405205423-9d709892a2bf h1:JTjwKJX9erVpsw17w+OIPP7iAgEkN/r8urhWSunEDTs= +google.golang.org/genproto v0.0.0-20220405205423-9d709892a2bf/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/grpc v0.0.0-20160317175043-d3ddb4469d5a/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.8.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= -google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= @@ -2061,6 +2633,7 @@ google.golang.org/grpc v1.22.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyac google.golang.org/grpc v1.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.24.0/go.mod h1:XDChyiUovWa60DnaeDeZmSW86xtLtjtZbwvSiRnRtcA= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= @@ -2086,13 +2659,13 @@ google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9K google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= google.golang.org/grpc v1.41.0/go.mod h1:U3l9uK9J0sini8mHphKoXyaqDA/8VyGnDee1zzIUK6k= google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= +google.golang.org/grpc v1.43.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= google.golang.org/grpc v1.47.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.48.0 h1:rQOsyJ/8+ufEDJd/Gdsz7HG220Mh9HAhFHRGnIjda0w= google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -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= @@ -2107,14 +2680,15 @@ google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlba google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw= google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= -google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc h1:2gGKlE2+asNV9m7xrywl36YYNnBG5ZQ0r/BOOxqPpmk= gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc/go.mod h1:m7x9LTH6d71AHyAX77c9yqWCCa3UKHcVEj9y7hAtKDk= gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d/go.mod h1:cuepJuh7vyXfUyUwEgHQXw849cJrilpS5NeIjOWESAw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20141024133853-64131543e789/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20161208181325-20d25e280405/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= @@ -2123,8 +2697,8 @@ gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8 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= gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= -gopkg.in/couchbase/gocb.v1 v1.6.7 h1:Za2KhMBdo00+CKg4C09QetVziU8/N4YmQNwaPQqZWPg= -gopkg.in/couchbase/gocb.v1 v1.6.7/go.mod h1:Ri5Qok4ZKiwmPr75YxZ0uELQy45XJgUSzeUnK806gTY= +gopkg.in/couchbase/gocb.v1 v1.6.4 h1:vAworfH5ZKDbonmayrwbGiD9jkAMroWmHXDf1GAIqMM= +gopkg.in/couchbase/gocb.v1 v1.6.4/go.mod h1:Ri5Qok4ZKiwmPr75YxZ0uELQy45XJgUSzeUnK806gTY= gopkg.in/couchbase/gocbcore.v7 v7.1.18 h1:d4yfIXWdf/ZmyuJjwRVVlGT/yqx8ICy6fcT/ViaMZsI= gopkg.in/couchbase/gocbcore.v7 v7.1.18/go.mod h1:48d2Be0MxRtsyuvn+mWzqmoGUG9uA00ghopzOs148/E= gopkg.in/couchbaselabs/gocbconnstr.v1 v1.0.4 h1:VVVoIV/nSw1w9ZnTEOjmkeJVcAzaCyxEujKglarxz7U= @@ -2138,6 +2712,7 @@ gopkg.in/fatih/pool.v2 v2.0.0 h1:xIFeWtxifuQJGk/IEPKsTduEKcKvPmhoiVDGpC40nKg= gopkg.in/fatih/pool.v2 v2.0.0/go.mod h1:8xVGeu1/2jr2wm5V9SPuMht2H5AEmf5aFMGSQixtjTY= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= +gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2/go.mod h1:Xk6kEKp8OKb+X14hQBKWaSkCsqBpgog8nAV2xsGOxlo= gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df h1:n7WqCuqOuCbNr617RXOY0AWRXxgwEyPp2z+p0+hgMuE= gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df/go.mod h1:LRQQ+SO6ZHR7tOkpBDuZnXENFzX8qRjMDMyPD6BRkCw= gopkg.in/gorethink/gorethink.v4 v4.1.0 h1:xoE9qJ9Ae9KdKEsiQGCF44u2JdnjyohrMBRDtts3Gjw= @@ -2148,17 +2723,18 @@ gopkg.in/ini.v1 v1.42.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.56.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/ini.v1 v1.66.2 h1:XfR1dOYubytKy4Shzc2LHrrGhU0lDCfDGG1yLPmpgsI= gopkg.in/ini.v1 v1.66.2/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/ini.v1 v1.66.6 h1:LATuAqN/shcYAOkv3wl2L4rkaKqkcgTBQjOyYDvcPKI= -gopkg.in/ini.v1 v1.66.6/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/kataras/go-serializer.v0 v0.0.4 h1:mVy3gjU4zZZBe+8JbZDRTMPJdrB0lzBNsLLREBcKGgU= gopkg.in/kataras/go-serializer.v0 v0.0.4/go.mod h1:v2jHg/3Wp7uncDNzenTsX75PRDxhzlxoo/qDvM4ZGxk= gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8= gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= +gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= gopkg.in/square/go-jose.v2 v2.3.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= -gopkg.in/square/go-jose.v2 v2.4.1 h1:H0TmLt7/KmzlrDOpa1F+zr0Tk90PbJYBfsVUmRLrf9Y= gopkg.in/square/go-jose.v2 v2.4.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= +gopkg.in/square/go-jose.v2 v2.5.1 h1:7odma5RETjNHWJnR32wx8t+Io4djHE1PqxCFx3iiZ2w= +gopkg.in/square/go-jose.v2 v2.5.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= @@ -2178,7 +2754,8 @@ gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= -honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= +gotest.tools/v3 v3.0.3/go.mod h1:Z7Lb0S5l+klDB31fvDQX8ss/FlKDxtlFlw3Oa8Ymbl8= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -2186,32 +2763,89 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -k8s.io/api v0.25.3 h1:Q1v5UFfYe87vi5H7NU0p4RXC26PPMT8KOpr1TLQbCMQ= -k8s.io/api v0.25.3/go.mod h1:o42gKscFrEVjHdQnyRenACrMtbuJsVdP+WVjqejfzmI= -k8s.io/apiextensions-apiserver v0.25.3 h1:bfI4KS31w2f9WM1KLGwnwuVlW3RSRPuIsfNF/3HzR0k= -k8s.io/apiextensions-apiserver v0.25.3/go.mod h1:ZJqwpCkxIx9itilmZek7JgfUAM0dnTsA48I4krPqRmo= -k8s.io/apimachinery v0.25.3 h1:7o9ium4uyUOM76t6aunP0nZuex7gDf8VGwkR5RcJnQc= -k8s.io/apimachinery v0.25.3/go.mod h1:jaF9C/iPNM1FuLl7Zuy5b9v+n35HGSh6AQ4HYRkCqwo= -k8s.io/client-go v0.25.3 h1:oB4Dyl8d6UbfDHD8Bv8evKylzs3BXzzufLiO27xuPs0= -k8s.io/client-go v0.25.3/go.mod h1:t39LPczAIMwycjcXkVc+CB+PZV69jQuNx4um5ORDjQA= -k8s.io/klog/v2 v2.80.1 h1:atnLQ121W371wYYFawwYx1aEY2eUfs4l3J72wtgAwV4= -k8s.io/klog/v2 v2.80.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= -k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1 h1:MQ8BAZPZlWk3S9K4a9NCkIFQtZShWqoha7snGixVgEA= -k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1/go.mod h1:C/N6wCaBHeBHkHUesQOQy2/MZqGgMAFPqGsGQLdbZBU= -k8s.io/utils v0.0.0-20221012122500-cfd413dd9e85 h1:cTdVh7LYu82xeClmfzGtgyspNh6UxpwLWGi8R4sspNo= -k8s.io/utils v0.0.0-20221012122500-cfd413dd9e85/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= -nhooyr.io/websocket v1.8.6 h1:s+C3xAMLwGmlI31Nyn/eAehUlZPwfYZu2JXM621Q5/k= +k8s.io/api v0.20.1/go.mod h1:KqwcCVogGxQY3nBlRpwt+wpAMF/KjaCc7RpywacvqUo= +k8s.io/api v0.20.4/go.mod h1:++lNL1AJMkDymriNniQsWRkMDzRaX2Y/POTUi8yvqYQ= +k8s.io/api v0.20.6/go.mod h1:X9e8Qag6JV/bL5G6bU8sdVRltWKmdHsFUGS3eVndqE8= +k8s.io/api v0.22.5/go.mod h1:mEhXyLaSD1qTOf40rRiKXkc+2iCem09rWLlFwhCEiAs= +k8s.io/api v0.23.0 h1:WrL1gb73VSC8obi8cuYETJGXEoFNEh3LU0Pt+Sokgro= +k8s.io/api v0.23.0/go.mod h1:8wmDdLBHBNxtOIytwLstXt5E9PddnZb0GaMcqsvDBpg= +k8s.io/apiextensions-apiserver v0.23.0 h1:uii8BYmHYiT2ZTAJxmvc3X8UhNYMxl2A0z0Xq3Pm+WY= +k8s.io/apiextensions-apiserver v0.23.0/go.mod h1:xIFAEEDlAZgpVBl/1VSjGDmLoXAWRG40+GsWhKhAxY4= +k8s.io/apimachinery v0.20.1/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU= +k8s.io/apimachinery v0.20.4/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU= +k8s.io/apimachinery v0.20.6/go.mod h1:ejZXtW1Ra6V1O5H8xPBGz+T3+4gfkTCeExAHKU57MAc= +k8s.io/apimachinery v0.22.1/go.mod h1:O3oNtNadZdeOMxHFVxOreoznohCpy0z6mocxbZr7oJ0= +k8s.io/apimachinery v0.22.5/go.mod h1:xziclGKwuuJ2RM5/rSFQSYAj0zdbci3DH8kj+WvyN0U= +k8s.io/apimachinery v0.23.0 h1:mIfWRMjBuMdolAWJ3Fd+aPTMv3X9z+waiARMpvvb0HQ= +k8s.io/apimachinery v0.23.0/go.mod h1:fFCTTBKvKcwTPFzjlcxp91uPFZr+JA0FubU4fLzzFYc= +k8s.io/apiserver v0.20.1/go.mod h1:ro5QHeQkgMS7ZGpvf4tSMx6bBOgPfE+f52KwvXfScaU= +k8s.io/apiserver v0.20.4/go.mod h1:Mc80thBKOyy7tbvFtB4kJv1kbdD0eIH8k8vianJcbFM= +k8s.io/apiserver v0.20.6/go.mod h1:QIJXNt6i6JB+0YQRNcS0hdRHJlMhflFmsBDeSgT1r8Q= +k8s.io/apiserver v0.22.5/go.mod h1:s2WbtgZAkTKt679sYtSudEQrTGWUSQAPe6MupLnlmaQ= +k8s.io/apiserver v0.23.0/go.mod h1:Cec35u/9zAepDPPFyT+UMrgqOCjgJ5qtfVJDxjZYmt4= +k8s.io/client-go v0.20.1/go.mod h1:/zcHdt1TeWSd5HoUe6elJmHSQ6uLLgp4bIJHVEuy+/Y= +k8s.io/client-go v0.20.4/go.mod h1:LiMv25ND1gLUdBeYxBIwKpkSC5IsozMMmOOeSJboP+k= +k8s.io/client-go v0.20.6/go.mod h1:nNQMnOvEUEsOzRRFIIkdmYOjAZrC8bgq0ExboWSU1I0= +k8s.io/client-go v0.22.5/go.mod h1:cs6yf/61q2T1SdQL5Rdcjg9J1ElXSwbjSrW2vFImM4Y= +k8s.io/client-go v0.23.0 h1:vcsOqyPq7XV3QmQRCBH/t9BICJM9Q1M18qahjv+rebY= +k8s.io/client-go v0.23.0/go.mod h1:hrDnpnK1mSr65lHHcUuIZIXDgEbzc7/683c6hyG4jTA= +k8s.io/code-generator v0.19.7/go.mod h1:lwEq3YnLYb/7uVXLorOJfxg+cUu2oihFhHZ0n9NIla0= +k8s.io/code-generator v0.23.0/go.mod h1:vQvOhDXhuzqiVfM/YHp+dmg10WDZCchJVObc9MvowsE= +k8s.io/component-base v0.20.1/go.mod h1:guxkoJnNoh8LNrbtiQOlyp2Y2XFCZQmrcg2n/DeYNLk= +k8s.io/component-base v0.20.4/go.mod h1:t4p9EdiagbVCJKrQ1RsA5/V4rFQNDfRlevJajlGwgjI= +k8s.io/component-base v0.20.6/go.mod h1:6f1MPBAeI+mvuts3sIdtpjljHWBQ2cIy38oBIWMYnrM= +k8s.io/component-base v0.22.5/go.mod h1:VK3I+TjuF9eaa+Ln67dKxhGar5ynVbwnGrUiNF4MqCI= +k8s.io/component-base v0.23.0/go.mod h1:DHH5uiFvLC1edCpvcTDV++NKULdYYU6pR9Tt3HIKMKI= +k8s.io/cri-api v0.17.3/go.mod h1:X1sbHmuXhwaHs9xxYffLqJogVsnI+f6cPRcgPel7ywM= +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/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= +k8s.io/gengo v0.0.0-20210813121822-485abfe95c7c/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= +k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= +k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= +k8s.io/klog/v2 v2.4.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= +k8s.io/klog/v2 v2.9.0/go.mod h1:hy9LJ/NvuK+iVyP4Ehqva4HxZG/oXyIS3n3Jmire4Ec= +k8s.io/klog/v2 v2.30.0 h1:bUO6drIvCIsvZ/XFgfxoGFQU/a4Qkh0iAlvUR7vlHJw= +k8s.io/klog/v2 v2.30.0/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= +k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6/go.mod h1:UuqjUnNftUyPE5H64/qeyjQoUZhGpeFDVdxjTeEVN2o= +k8s.io/kube-openapi v0.0.0-20201113171705-d219536bb9fd/go.mod h1:WOJ3KddDSol4tAGcJo0Tvi+dK12EcqSLqcWsryKMpfM= +k8s.io/kube-openapi v0.0.0-20210421082810-95288971da7e/go.mod h1:vHXdDvt9+2spS2Rx9ql3I8tycm3H9FDfdUoIuKCefvw= +k8s.io/kube-openapi v0.0.0-20211109043538-20434351676c/go.mod h1:vHXdDvt9+2spS2Rx9ql3I8tycm3H9FDfdUoIuKCefvw= +k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65 h1:E3J9oCLlaobFUqsjG9DfKbP2BmgwBL2p7pn0A3dG9W4= +k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65/go.mod h1:sX9MT8g7NVZM5lVL/j8QyCCJe8YSMW30QvGZWaCIDIk= +k8s.io/kubernetes v1.13.0/go.mod h1:ocZa8+6APFNC2tX1DZASIbocyYT5jHzqFVsY5aoB7Jk= +k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +k8s.io/utils v0.0.0-20210802155522-efc7438f0176/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +k8s.io/utils v0.0.0-20210819203725-bdf08cb9a70a/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +k8s.io/utils v0.0.0-20210930125809-cb0fa318a74b h1:wxEMGetGMur3J1xuGLQY7GEQYg9bZxKn3tKo5k/eYcs= +k8s.io/utils v0.0.0-20210930125809-cb0fa318a74b/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +nhooyr.io/websocket v1.8.7 h1:usjR2uOr/zjjkVMy0lW+PPohFok7PCow5sDjLgX4P4g= +nhooyr.io/websocket v1.8.7/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= +oras.land/oras-go v1.2.0/go.mod h1:pFNs7oHp2dYsYMSS82HaX5l4mpnGO7hbpPN6EWH2ltc= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= -sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 h1:iXTIw73aPyC+oRdyqqvVJuloN1p0AC/kzH07hu3NE+k= -sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= -sigs.k8s.io/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE= -sigs.k8s.io/structured-merge-diff/v4 v4.2.3/go.mod h1:qjx8mGObPmV2aSZepjQjbmb2ihdVs8cGKBraizNC69E= +sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.14/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg= +sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.15/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg= +sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.22/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg= +sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.25/go.mod h1:Mlj9PNLmG9bZ6BHFwFKDo5afkpWyUISkb9Me0GnK66I= +sigs.k8s.io/json v0.0.0-20211020170558-c049b76a60c6 h1:fD1pz4yfdADVNfFmcP2aBEtudwUQ1AlLnRBALr33v3s= +sigs.k8s.io/json v0.0.0-20211020170558-c049b76a60c6/go.mod h1:p4QtZmO4uMYipTQNzagwnNoseA6OxSUutVw05NhYDRs= +sigs.k8s.io/structured-merge-diff/v4 v4.0.1/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= +sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= +sigs.k8s.io/structured-merge-diff/v4 v4.0.3/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= +sigs.k8s.io/structured-merge-diff/v4 v4.1.2/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZawJtm+Yrr7PPRQ0Vg4= +sigs.k8s.io/structured-merge-diff/v4 v4.2.0 h1:kDvPBbnPk+qYmkHmSo8vKGp438IASWofnbbUKDE/bv0= +sigs.k8s.io/structured-merge-diff/v4 v4.2.0/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZawJtm+Yrr7PPRQ0Vg4= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= -sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q= sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= +sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= +sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= stathat.com/c/consistent v1.0.0 h1:ezyc51EGcRPJUxfHGSgJjWzJdj3NiMU9pNfLNGiXV0c= stathat.com/c/consistent v1.0.0/go.mod h1:QkzMWzcbB+yQBL2AttO6sgsQS/JSTapcDISJalmCDS0= diff --git a/pubsub/kubemq/kubemq.go b/pubsub/kubemq/kubemq.go new file mode 100644 index 000000000..7c422d3f9 --- /dev/null +++ b/pubsub/kubemq/kubemq.go @@ -0,0 +1,73 @@ +package kubemq + +import ( + "context" + "github.com/dapr/components-contrib/pubsub" + "github.com/dapr/kit/logger" +) + +type kubeMQ struct { + metadata *metadata + logger logger.Logger + ctx context.Context + ctxCancel context.CancelFunc + eventsClient *kubeMQEvents + eventStoreClient *kubeMQEventStore +} + +func NewKubeMQ(logger logger.Logger) pubsub.PubSub { + return &kubeMQ{ + metadata: nil, + logger: logger, + ctx: nil, + ctxCancel: nil, + eventsClient: nil, + eventStoreClient: nil, + } +} + +func (k *kubeMQ) Init(metadata pubsub.Metadata) error { + meta, err := createMetadata(metadata) + if err != nil { + k.logger.Errorf("error init kubemq client error: %s", err.Error()) + return err + } + k.metadata = meta + k.ctx, k.ctxCancel = context.WithCancel(context.Background()) + if meta.isStore { + k.eventStoreClient = newKubeMQEventsStore(k.logger) + _ = k.eventStoreClient.Init(meta) + } else { + k.eventsClient = newkubeMQEvents(k.logger) + _ = k.eventsClient.Init(meta) + } + return nil +} + +func (k *kubeMQ) Features() []pubsub.Feature { + return nil +} + +func (k *kubeMQ) Publish(req *pubsub.PublishRequest) error { + if k.metadata.isStore { + return k.eventStoreClient.Publish(req) + } else { + return k.eventsClient.Publish(req) + } +} + +func (k *kubeMQ) Subscribe(ctx context.Context, req pubsub.SubscribeRequest, handler pubsub.Handler) error { + if k.metadata.isStore { + return k.eventStoreClient.Subscribe(ctx, req, handler) + } else { + return k.eventsClient.Subscribe(ctx, req, handler) + } +} + +func (k *kubeMQ) Close() error { + if k.metadata.isStore { + return k.eventStoreClient.Close() + } else { + return k.eventsClient.Close() + } +} diff --git a/pubsub/kubemq/kubemq_events.go b/pubsub/kubemq/kubemq_events.go new file mode 100644 index 000000000..3205b6de9 --- /dev/null +++ b/pubsub/kubemq/kubemq_events.go @@ -0,0 +1,169 @@ +package kubemq + +import ( + "context" + "github.com/dapr/components-contrib/pubsub" + "github.com/dapr/kit/logger" + "github.com/kubemq-io/kubemq-go" + "github.com/kubemq-io/kubemq-go/pkg/uuid" + "time" +) + +type kubemqEventsClient interface { + Stream(ctx context.Context, onError func(err error)) (func(msg *kubemq.Event) error, error) + Subscribe(ctx context.Context, request *kubemq.EventsSubscription, onEvent func(msg *kubemq.Event, err error)) error + Close() error +} + +type kubeMQEvents struct { + client kubemqEventsClient + metadata *metadata + logger logger.Logger + publishFunc func(event *kubemq.Event) error + resultChan chan error + waitForResultTimeout time.Duration + ctx context.Context + ctxCancel context.CancelFunc + isInitialized bool +} + +func newkubeMQEvents(logger logger.Logger) *kubeMQEvents { + return &kubeMQEvents{ + client: nil, + metadata: nil, + logger: logger, + publishFunc: nil, + resultChan: make(chan error, 1), + waitForResultTimeout: 60 * time.Second, + ctx: nil, + ctxCancel: nil, + } +} +func (k *kubeMQEvents) init() error { + k.ctx, k.ctxCancel = context.WithCancel(context.Background()) + if k.metadata.useMock { + k.isInitialized = true + return nil + } + clientID := k.metadata.clientID + if clientID == "" { + clientID = uuid.New() + } + client, err := kubemq.NewEventsClient(k.ctx, + kubemq.WithAddress(k.metadata.host, k.metadata.port), + kubemq.WithClientId(clientID), + kubemq.WithTransportType(kubemq.TransportTypeGRPC), + kubemq.WithCheckConnection(true), + kubemq.WithAuthToken(k.metadata.authToken), + kubemq.WithAutoReconnect(true), + kubemq.WithReconnectInterval(time.Second)) + if err != nil { + k.logger.Errorf("error init kubemq client error: %s", err.Error()) + return err + } + k.ctx, k.ctxCancel = context.WithCancel(context.Background()) + k.client = client + if err := k.setPublishStream(); err != nil { + k.logger.Errorf("error init kubemq client error: %w", err.Error()) + return err + } + k.isInitialized = true + return nil +} +func (k *kubeMQEvents) Init(meta *metadata) error { + k.metadata = meta + _ = k.init() + return nil +} +func (k *kubeMQEvents) setPublishStream() error { + var err error + k.publishFunc, err = k.client.Stream(k.ctx, func(err error) { + select { + case k.resultChan <- err: + default: + } + }) + return err +} +func (k *kubeMQEvents) Publish(req *pubsub.PublishRequest) error { + if !k.isInitialized { + if err := k.init(); err != nil { + return err + } + } + k.logger.Debugf("kubemq pub/sub: publishing message to %s", req.Topic) + event := &kubemq.Event{ + Id: "", + Channel: req.Topic, + Metadata: "", + Body: req.Data, + ClientId: k.metadata.clientID, + Tags: map[string]string{}, + } + if err := k.publishFunc(event); err != nil { + k.logger.Errorf("kubemq pub/sub error: publishing to %s failed with error: %s", req.Topic, err.Error()) + return err + } + return nil +} +func (k *kubeMQEvents) Features() []pubsub.Feature { + return nil +} + +func (k *kubeMQEvents) Subscribe(ctx context.Context, req pubsub.SubscribeRequest, handler pubsub.Handler) error { + if !k.isInitialized { + if err := k.init(); err != nil { + return err + } + } + clientID := k.metadata.clientID + if clientID == "" { + clientID = uuid.New() + } + k.logger.Debugf("kubemq pub/sub: subscribing to %s", req.Topic) + err := k.client.Subscribe(ctx, &kubemq.EventsSubscription{ + Channel: req.Topic, + Group: k.metadata.group, + ClientId: clientID, + }, func(event *kubemq.Event, err error) { + if err != nil { + k.logger.Errorf("kubemq pub/sub error: subscribing to %s failed with error: %s", req.Topic, err.Error()) + return + } + if ctx.Err() != nil { + return + } + msg := &pubsub.NewMessage{ + Data: event.Body, + Topic: req.Topic, + } + + if err := handler(k.ctx, msg); err != nil { + k.logger.Errorf("kubemq events pub/sub error: error handling message from topic '%s', %s", req.Topic, err.Error()) + if k.metadata.disableReDelivery { + return + } + if err := k.Publish(&pubsub.PublishRequest{ + Data: msg.Data, + Topic: msg.Topic, + }); err != nil { + k.logger.Errorf("kubemq pub/sub error: error resending message from topic '%s', %s", req.Topic, err.Error()) + } + } + + }) + if err != nil { + k.logger.Errorf("kubemq events pub/sub error: error subscribing to topic '%s', %s", req.Topic, err.Error()) + return err + } + time.Sleep(1 * time.Second) + k.logger.Debugf("kubemq pub/sub: subscribed to %s completed", req.Topic) + return nil +} + +func (k *kubeMQEvents) Close() error { + if k.ctxCancel != nil { + k.ctxCancel() + } + return k.client.Close() +} diff --git a/pubsub/kubemq/kubemq_events_test.go b/pubsub/kubemq/kubemq_events_test.go new file mode 100644 index 000000000..2fefcd635 --- /dev/null +++ b/pubsub/kubemq/kubemq_events_test.go @@ -0,0 +1,195 @@ +package kubemq + +import ( + "context" + "fmt" + "github.com/dapr/components-contrib/pubsub" + "github.com/dapr/kit/logger" + "github.com/kubemq-io/kubemq-go" + "github.com/stretchr/testify/assert" + "testing" + "time" +) + +type kubemqEventsMock struct { + resultError error + subscribeErr error + resultCh chan error + publishError error + publishTimeout time.Duration +} + +func (k *kubemqEventsMock) publish(msg *kubemq.Event) error { + if k.publishError != nil { + return k.publishError + } + go func() { + if k.publishTimeout > 0 { + time.Sleep(k.publishTimeout) + } + k.resultCh <- k.resultError + }() + + return nil +} +func (k *kubemqEventsMock) Stream(ctx context.Context, onError func(err error)) (func(msg *kubemq.Event) error, error) { + go func() { + for { + select { + case <-ctx.Done(): + return + case result := <-k.resultCh: + onError(result) + } + + } + }() + return k.publish, nil +} +func (k *kubemqEventsMock) Subscribe(ctx context.Context, request *kubemq.EventsSubscription, onEvent func(msg *kubemq.Event, err error)) error { + return k.subscribeErr +} +func (k *kubemqEventsMock) Close() error { + return nil +} +func (k *kubemqEventsMock) setResultError(err error) *kubemqEventsMock { + k.resultError = err + return k +} +func (k *kubemqEventsMock) setSubscribeError(err error) *kubemqEventsMock { + k.subscribeErr = err + return k +} +func (k *kubemqEventsMock) setPublishTimeout(timeout time.Duration) *kubemqEventsMock { + k.publishTimeout = timeout + return k +} +func (k *kubemqEventsMock) setPublishError(err error) *kubemqEventsMock { + k.publishError = err + return k +} +func newKubemqEventsMock() *kubemqEventsMock { + return &kubemqEventsMock{ + resultError: nil, + subscribeErr: nil, + resultCh: make(chan error, 1), + } +} + +func Test_kubeMQEvents_Publish(t *testing.T) { + tests := []struct { + name string + req *pubsub.PublishRequest + timeout time.Duration + publishErr error + resultError error + wantErr bool + }{ + { + name: "publish with no error", + req: &pubsub.PublishRequest{ + Data: []byte("data"), + Topic: "some-topic", + }, + resultError: nil, + + wantErr: false, + }, + { + name: "publish with publish error", + req: &pubsub.PublishRequest{ + Data: []byte("data"), + Topic: "some-topic", + }, + resultError: nil, + publishErr: fmt.Errorf("some error"), + wantErr: true, + }, + } + for _, tt := range tests { + k := newkubeMQEvents(logger.NewLogger("kubemq-test")) + k.ctx, k.ctxCancel = context.WithCancel(context.Background()) + client := newKubemqEventsMock(). + setResultError(tt.resultError). + setPublishError(tt.publishErr) + k.isInitialized = true + k.metadata = &metadata{ + host: "", + port: 0, + clientID: "some-client-id", + authToken: "", + group: "", + isStore: false, + } + if tt.timeout > 0 { + k.waitForResultTimeout = tt.timeout - 1*time.Second + client.setPublishTimeout(tt.timeout) + } + k.client = client + _ = k.setPublishStream() + err := k.Publish(tt.req) + if tt.wantErr { + assert.Error(t, err) + } else { + assert.NoError(t, err) + } + _ = k.Features() + _ = k.Close() + } +} +func Test_kubeMQEvents_Subscribe(t *testing.T) { + tests := []struct { + name string + reqMsg *pubsub.NewMessage + subscribeError error + subscribeHandler pubsub.Handler + wantErr bool + }{ + { + name: "subscribe with no error", + reqMsg: &pubsub.NewMessage{ + Data: []byte("data"), + Topic: "some-topic", + }, + subscribeHandler: func(ctx context.Context, msg *pubsub.NewMessage) error { + return nil + }, + subscribeError: nil, + wantErr: false, + }, { + name: "subscribe with error", + reqMsg: &pubsub.NewMessage{ + Data: []byte("data"), + Topic: "some-topic", + }, + subscribeHandler: func(ctx context.Context, msg *pubsub.NewMessage) error { + return nil + }, + subscribeError: fmt.Errorf("some error"), + wantErr: true, + }, + } + for _, tt := range tests { + k := newkubeMQEvents(logger.NewLogger("kubemq-test")) + k.ctx, k.ctxCancel = context.WithCancel(context.Background()) + k.client = newKubemqEventsMock(). + setSubscribeError(tt.subscribeError) + k.isInitialized = true + k.metadata = &metadata{ + host: "", + port: 0, + clientID: "some-client-id", + authToken: "", + group: "", + isStore: false, + } + err := k.Subscribe(k.ctx, pubsub.SubscribeRequest{Topic: "some-topic"}, tt.subscribeHandler) + if tt.wantErr { + assert.Error(t, err) + } else { + assert.NoError(t, err) + } + _ = k.Features() + _ = k.Close() + } +} diff --git a/pubsub/kubemq/kubemq_eventstore.go b/pubsub/kubemq/kubemq_eventstore.go new file mode 100644 index 000000000..afd468c92 --- /dev/null +++ b/pubsub/kubemq/kubemq_eventstore.go @@ -0,0 +1,199 @@ +package kubemq + +import ( + "context" + "fmt" + "github.com/dapr/components-contrib/pubsub" + "github.com/dapr/kit/logger" + "github.com/kubemq-io/kubemq-go" + "github.com/kubemq-io/kubemq-go/pkg/uuid" + "time" +) + +// interface used to allow unit testing. +type kubemqEventsStoreClient interface { + Stream(ctx context.Context, onResult func(result *kubemq.EventStoreResult, err error)) (func(msg *kubemq.EventStore) error, error) + Subscribe(ctx context.Context, request *kubemq.EventsStoreSubscription, onEvent func(msg *kubemq.EventStoreReceive, err error)) error + Close() error +} + +type kubeMQEventStore struct { + client kubemqEventsStoreClient + metadata *metadata + logger logger.Logger + publishFunc func(msg *kubemq.EventStore) error + resultChan chan *kubemq.EventStoreResult + waitForResultTimeout time.Duration + ctx context.Context + ctxCancel context.CancelFunc + isInitialized bool +} + +func newKubeMQEventsStore(logger logger.Logger) *kubeMQEventStore { + return &kubeMQEventStore{ + client: nil, + metadata: nil, + logger: logger, + publishFunc: nil, + resultChan: make(chan *kubemq.EventStoreResult, 1), + waitForResultTimeout: 60 * time.Second, + ctx: nil, + ctxCancel: nil, + } +} +func (k *kubeMQEventStore) init() error { + k.ctx, k.ctxCancel = context.WithCancel(context.Background()) + if k.metadata.useMock { + k.isInitialized = true + return nil + } + clientID := k.metadata.clientID + if clientID == "" { + clientID = uuid.New() + } + client, err := kubemq.NewEventsStoreClient(k.ctx, + kubemq.WithAddress(k.metadata.host, k.metadata.port), + kubemq.WithClientId(clientID), + kubemq.WithTransportType(kubemq.TransportTypeGRPC), + kubemq.WithCheckConnection(true), + kubemq.WithAuthToken(k.metadata.authToken), + kubemq.WithAutoReconnect(true), + kubemq.WithReconnectInterval(time.Second)) + if err != nil { + k.logger.Errorf("error init kubemq client error: %s", err.Error()) + return err + } + k.ctx, k.ctxCancel = context.WithCancel(context.Background()) + k.client = client + if err := k.setPublishStream(); err != nil { + k.logger.Errorf("error init kubemq client error: %w", err.Error()) + return err + } + k.isInitialized = true + return nil +} +func (k *kubeMQEventStore) getSubscriberClient(clientID string) (kubemqEventsStoreClient, error) { + client, err := kubemq.NewEventsStoreClient(k.ctx, + kubemq.WithAddress(k.metadata.host, k.metadata.port), + kubemq.WithClientId(clientID), + kubemq.WithTransportType(kubemq.TransportTypeGRPC), + kubemq.WithCheckConnection(true), + kubemq.WithAuthToken(k.metadata.authToken), + kubemq.WithAutoReconnect(true), + kubemq.WithReconnectInterval(time.Second)) + if err != nil { + k.logger.Errorf("error init kubemq client error: %s", err.Error()) + return nil, err + } + return client, nil +} + +func (k *kubeMQEventStore) Init(meta *metadata) error { + k.metadata = meta + _ = k.init() + return nil +} +func (k *kubeMQEventStore) setPublishStream() error { + var err error + k.publishFunc, err = k.client.Stream(k.ctx, func(result *kubemq.EventStoreResult, err error) { + select { + case k.resultChan <- result: + default: + } + }) + if err != nil { + return err + } + return nil +} +func (k *kubeMQEventStore) Publish(req *pubsub.PublishRequest) error { + if !k.isInitialized { + if err := k.init(); err != nil { + return err + } + } + k.logger.Debugf("kubemq pub/sub: publishing message to %s", req.Topic) + event := &kubemq.EventStore{ + Id: "", + Channel: req.Topic, + Metadata: "", + Body: req.Data, + ClientId: k.metadata.clientID, + Tags: map[string]string{}, + } + if err := k.publishFunc(event); err != nil { + k.logger.Errorf("kubemq pub/sub error: publishing to %s failed with error: %s", req.Topic, err.Error()) + return err + } + select { + case res := <-k.resultChan: + if res.Err != nil { + return res.Err + } + case <-time.After(k.waitForResultTimeout): + return fmt.Errorf("kubemq pub/sub error: timeout waiting for response") + } + return nil +} +func (k *kubeMQEventStore) Features() []pubsub.Feature { + return nil +} + +func (k *kubeMQEventStore) Subscribe(ctx context.Context, req pubsub.SubscribeRequest, handler pubsub.Handler) error { + if k.metadata.useMock { + return nil + } + clientID := k.metadata.clientID + if clientID == "" { + clientID = uuid.New() + } + k.logger.Debugf("kubemq pub/sub: subscribing to %s", req.Topic) + err := k.client.Subscribe(ctx, &kubemq.EventsStoreSubscription{ + Channel: req.Topic, + Group: k.metadata.group, + ClientId: clientID, + SubscriptionType: kubemq.StartFromNewEvents(), + }, func(event *kubemq.EventStoreReceive, err error) { + if err != nil { + k.logger.Errorf("kubemq pub/sub error: subscribing to %s failed with error: %s", req.Topic, err.Error()) + return + } + if ctx.Err() != nil { + return + } + msg := &pubsub.NewMessage{ + Data: event.Body, + Topic: req.Topic, + Metadata: nil, + ContentType: nil, + } + + if err := handler(ctx, msg); err != nil { + k.logger.Errorf("kubemq pub/sub error: error handling message from topic '%s', %s, resending...", req.Topic, err.Error()) + if k.metadata.disableReDelivery { + return + } + if err := k.Publish(&pubsub.PublishRequest{ + Data: msg.Data, + Topic: msg.Topic, + }); err != nil { + k.logger.Errorf("kubemq pub/sub error: error resending message from topic '%s', %s", req.Topic, err.Error()) + } + } + + }) + if err != nil { + k.logger.Errorf("kubemq pub/sub error: error subscribing to topic '%s', %s", req.Topic, err.Error()) + return err + } + time.Sleep(1 * time.Second) + k.logger.Debugf("kubemq pub/sub: subscribed to %s completed", req.Topic) + return nil +} + +func (k *kubeMQEventStore) Close() error { + if k.ctxCancel != nil { + k.ctxCancel() + } + return k.client.Close() +} diff --git a/pubsub/kubemq/kubemq_eventstore_test.go b/pubsub/kubemq/kubemq_eventstore_test.go new file mode 100644 index 000000000..4c3f5cd14 --- /dev/null +++ b/pubsub/kubemq/kubemq_eventstore_test.go @@ -0,0 +1,217 @@ +package kubemq + +import ( + "context" + "fmt" + "github.com/dapr/components-contrib/pubsub" + "github.com/dapr/kit/logger" + "github.com/kubemq-io/kubemq-go" + "github.com/stretchr/testify/assert" + "testing" + "time" +) + +type kubemqEventsStoreMock struct { + resultError error + subscribeErr error + resultCh chan error + publishError error + publishTimeout time.Duration +} + +func (k *kubemqEventsStoreMock) publish(msg *kubemq.EventStore) error { + if k.publishError != nil { + return k.publishError + } + go func() { + if k.publishTimeout > 0 { + time.Sleep(k.publishTimeout) + } + k.resultCh <- k.resultError + }() + + return nil +} +func (k *kubemqEventsStoreMock) Stream(ctx context.Context, onResult func(result *kubemq.EventStoreResult, err error)) (func(msg *kubemq.EventStore) error, error) { + go func() { + for { + select { + case <-ctx.Done(): + return + case result := <-k.resultCh: + onResult(&kubemq.EventStoreResult{ + Id: "", + Sent: false, + Err: result, + }, nil) + } + + } + }() + return k.publish, nil +} +func (k *kubemqEventsStoreMock) Subscribe(ctx context.Context, request *kubemq.EventsStoreSubscription, onEvent func(msg *kubemq.EventStoreReceive, err error)) error { + return k.subscribeErr +} +func (k *kubemqEventsStoreMock) Close() error { + return nil +} +func (k *kubemqEventsStoreMock) setResultError(err error) *kubemqEventsStoreMock { + k.resultError = err + return k +} +func (k *kubemqEventsStoreMock) setSubscribeError(err error) *kubemqEventsStoreMock { + k.subscribeErr = err + return k +} +func (k *kubemqEventsStoreMock) setPublishTimeout(timeout time.Duration) *kubemqEventsStoreMock { + k.publishTimeout = timeout + return k +} +func (k *kubemqEventsStoreMock) setPublishError(err error) *kubemqEventsStoreMock { + k.publishError = err + return k +} +func newKubemqEventsStoreMock() *kubemqEventsStoreMock { + return &kubemqEventsStoreMock{ + resultError: nil, + subscribeErr: nil, + resultCh: make(chan error, 1), + } +} + +func Test_kubeMQEventsStore_Publish(t *testing.T) { + tests := []struct { + name string + req *pubsub.PublishRequest + timeout time.Duration + publishErr error + resultError error + wantErr bool + }{ + { + name: "publish with no error", + req: &pubsub.PublishRequest{ + Data: []byte("data"), + Topic: "some-topic", + }, + resultError: nil, + + wantErr: false, + }, { + name: "publish with error", + req: &pubsub.PublishRequest{ + Data: []byte("data"), + Topic: "some-topic", + }, + resultError: fmt.Errorf("some error"), + wantErr: true, + }, + { + name: "publish with timeout error", + req: &pubsub.PublishRequest{ + Data: []byte("data"), + Topic: "some-topic", + }, + resultError: nil, + timeout: 3 * time.Second, + wantErr: true, + }, + { + name: "publish with publish error", + req: &pubsub.PublishRequest{ + Data: []byte("data"), + Topic: "some-topic", + }, + resultError: nil, + publishErr: fmt.Errorf("some error"), + wantErr: true, + }, + } + for _, tt := range tests { + k := newKubeMQEventsStore(logger.NewLogger("kubemq-test")) + k.ctx, k.ctxCancel = context.WithCancel(context.Background()) + client := newKubemqEventsStoreMock(). + setResultError(tt.resultError). + setPublishError(tt.publishErr) + k.isInitialized = true + k.metadata = &metadata{ + host: "", + port: 0, + clientID: "some-client-id", + authToken: "", + group: "", + isStore: true, + } + if tt.timeout > 0 { + k.waitForResultTimeout = tt.timeout - 1*time.Second + client.setPublishTimeout(tt.timeout) + } + k.client = client + _ = k.setPublishStream() + err := k.Publish(tt.req) + if tt.wantErr { + assert.Error(t, err) + } else { + assert.NoError(t, err) + } + _ = k.Features() + _ = k.Close() + } +} +func Test_kubeMQkubeMQEventsStore_Subscribe(t *testing.T) { + tests := []struct { + name string + reqMsg *pubsub.NewMessage + subscribeError error + subscribeHandler pubsub.Handler + wantErr bool + }{ + { + name: "subscribe with no error", + reqMsg: &pubsub.NewMessage{ + Data: []byte("data"), + Topic: "some-topic", + }, + subscribeHandler: func(ctx context.Context, msg *pubsub.NewMessage) error { + return nil + }, + subscribeError: nil, + wantErr: false, + }, { + name: "subscribe with error", + reqMsg: &pubsub.NewMessage{ + Data: []byte("data"), + Topic: "some-topic", + }, + subscribeHandler: func(ctx context.Context, msg *pubsub.NewMessage) error { + return nil + }, + subscribeError: fmt.Errorf("some error"), + wantErr: true, + }, + } + for _, tt := range tests { + k := newKubeMQEventsStore(logger.NewLogger("kubemq-test")) + k.ctx, k.ctxCancel = context.WithCancel(context.Background()) + k.client = newKubemqEventsStoreMock(). + setSubscribeError(tt.subscribeError) + k.isInitialized = true + k.metadata = &metadata{ + host: "", + port: 0, + clientID: "some-client-id", + authToken: "", + group: "", + isStore: true, + } + err := k.Subscribe(k.ctx, pubsub.SubscribeRequest{Topic: "some-topic"}, tt.subscribeHandler) + if tt.wantErr { + assert.Error(t, err) + } else { + assert.NoError(t, err) + } + _ = k.Features() + _ = k.Close() + } +} diff --git a/pubsub/kubemq/kubemq_test.go b/pubsub/kubemq/kubemq_test.go new file mode 100644 index 000000000..eefd83612 --- /dev/null +++ b/pubsub/kubemq/kubemq_test.go @@ -0,0 +1,152 @@ +package kubemq + +import ( + "context" + "fmt" + mdata "github.com/dapr/components-contrib/metadata" + "github.com/dapr/components-contrib/pubsub" + "github.com/dapr/kit/logger" + "github.com/stretchr/testify/assert" + "testing" +) + +func getMockEventsClient() *kubeMQEvents { + return &kubeMQEvents{ + client: newKubemqEventsMock(), + metadata: nil, + logger: nil, + publishFunc: nil, + resultChan: nil, + waitForResultTimeout: 0, + ctx: nil, + ctxCancel: nil, + isInitialized: true, + } +} +func getMockEventsStoreClient() *kubeMQEventStore { + return &kubeMQEventStore{ + client: newKubemqEventsStoreMock(), + metadata: nil, + logger: nil, + publishFunc: nil, + resultChan: nil, + waitForResultTimeout: 0, + ctx: nil, + ctxCancel: nil, + isInitialized: true, + } +} +func Test_kubeMQ_Init(t *testing.T) { + tests := []struct { + name string + meta pubsub.Metadata + eventsClient *kubeMQEvents + eventStoreClient *kubeMQEventStore + wantErr bool + }{ + { + name: "init events store client", + meta: pubsub.Metadata{Base: mdata.Base{ + Properties: map[string]string{ + "address": "localhost:50000", + "channel": "test", + "clientID": "clientID", + "authToken": "authToken", + "group": "group", + "store": "true", + "useMock": "true", + }}, + }, + eventsClient: nil, + eventStoreClient: getMockEventsStoreClient(), + wantErr: false, + }, + { + name: "init events client", + meta: pubsub.Metadata{Base: mdata.Base{ + Properties: map[string]string{ + "address": "localhost:50000", + "channel": "test", + "clientID": "clientID", + "authToken": "authToken", + "group": "group", + "store": "false", + "useMock": "true", + }}, + }, + eventsClient: getMockEventsClient(), + eventStoreClient: nil, + wantErr: false, + }, + { + name: "init error", + meta: pubsub.Metadata{Base: mdata.Base{ + Properties: map[string]string{ + "address": "badaddress", + }}, + }, + eventsClient: nil, + eventStoreClient: nil, + wantErr: true, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + k := NewKubeMQ(logger.NewLogger("test")) + err := k.Init(tt.meta) + assert.Equal(t, tt.wantErr, err != nil) + }) + } +} + +func Test_kubeMQ_Close(t *testing.T) { + type fields struct { + metadata *metadata + logger logger.Logger + ctx context.Context + ctxCancel context.CancelFunc + eventsClient *kubeMQEvents + eventStoreClient *kubeMQEventStore + } + tests := []struct { + name string + fields fields + wantErr assert.ErrorAssertionFunc + }{ + { + name: "close events client", + fields: fields{ + metadata: &metadata{ + isStore: false, + }, + eventsClient: getMockEventsClient(), + eventStoreClient: nil, + }, + wantErr: assert.NoError, + }, + { + name: "close events store client", + fields: fields{ + metadata: &metadata{ + isStore: true, + }, + eventsClient: nil, + eventStoreClient: getMockEventsStoreClient(), + }, + wantErr: assert.NoError, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + k := &kubeMQ{ + metadata: tt.fields.metadata, + logger: tt.fields.logger, + ctx: tt.fields.ctx, + ctxCancel: tt.fields.ctxCancel, + eventsClient: tt.fields.eventsClient, + eventStoreClient: tt.fields.eventStoreClient, + } + tt.wantErr(t, k.Close(), fmt.Sprintf("Close()")) + }) + } +} diff --git a/pubsub/kubemq/metadata.go b/pubsub/kubemq/metadata.go new file mode 100644 index 000000000..123d57108 --- /dev/null +++ b/pubsub/kubemq/metadata.go @@ -0,0 +1,85 @@ +package kubemq + +import ( + "fmt" + "github.com/dapr/components-contrib/pubsub" + "strconv" + "strings" +) + +type metadata struct { + host string + port int + clientID string + authToken string + group string + isStore bool + useMock bool + disableReDelivery bool +} + +func parseAddress(address string) (string, int, error) { + var host string + var port int + var err error + hostPort := strings.Split(address, ":") + if len(hostPort) != 2 { + return "", 0, fmt.Errorf("invalid kubeMQ address, address format is invalid") + } + host = hostPort[0] + if len(host) == 0 { + return "", 0, fmt.Errorf("invalid kubeMQ address, host is empty") + } + port, err = strconv.Atoi(hostPort[1]) + if err != nil { + return "", 0, fmt.Errorf("invalid kubeMQ address, port is invalid") + } + return host, port, nil +} + +// createMetadata creates a new instance from the pubsub metadata +func createMetadata(pubSubMetadata pubsub.Metadata) (*metadata, error) { + result := &metadata{} + if val, found := pubSubMetadata.Properties["address"]; found && val != "" { + var err error + result.host, result.port, err = parseAddress(val) + if err != nil { + return nil, err + } + } else { + return nil, fmt.Errorf("invalid kubeMQ address, address is empty") + } + if val, found := pubSubMetadata.Properties["clientID"]; found && val != "" { + result.clientID = val + } + + if val, found := pubSubMetadata.Properties["authToken"]; found && val != "" { + result.authToken = val + } + + if val, found := pubSubMetadata.Properties["group"]; found && val != "" { + result.group = val + } + result.isStore = true + if val, found := pubSubMetadata.Properties["store"]; found && val != "" { + switch val { + case "false": + result.isStore = false + case "true": + result.isStore = true + default: + return nil, fmt.Errorf("invalid kubeMQ store value, store can be true or false") + } + } + if val, found := pubSubMetadata.Properties["useMock"]; found && val != "" { + if val == "true" { + result.useMock = true + } + } + if val, found := pubSubMetadata.Properties["disableReDelivery"]; found && val != "" { + if val == "true" { + result.disableReDelivery = true + } + } + return result, nil +} diff --git a/pubsub/kubemq/metadata_test.go b/pubsub/kubemq/metadata_test.go new file mode 100644 index 000000000..63ee30d5b --- /dev/null +++ b/pubsub/kubemq/metadata_test.go @@ -0,0 +1,154 @@ +package kubemq + +import ( + mdata "github.com/dapr/components-contrib/metadata" + "github.com/dapr/components-contrib/pubsub" + "github.com/stretchr/testify/assert" + "testing" +) + +func Test_createMetadata(t *testing.T) { + tests := []struct { + name string + meta pubsub.Metadata + want *metadata + wantErr bool + }{ + { + name: "create valid metadata", + meta: pubsub.Metadata{Base: mdata.Base{ + Properties: map[string]string{ + "address": "localhost:50000", + "channel": "test", + "clientID": "clientID", + "authToken": "authToken", + "group": "group", + "store": "true", + "useMock": "true", + "disableReDelivery": "true", + }}, + }, + want: &metadata{ + host: "localhost", + port: 50000, + clientID: "clientID", + authToken: "authToken", + group: "group", + isStore: true, + useMock: true, + disableReDelivery: true, + }, + wantErr: false, + }, + { + name: "create valid metadata with empty group", + meta: pubsub.Metadata{Base: mdata.Base{ + Properties: map[string]string{ + "address": "localhost:50000", + "clientID": "clientID", + "authToken": "authToken", + "store": "false", + }}, + }, + want: &metadata{ + host: "localhost", + port: 50000, + clientID: "clientID", + authToken: "authToken", + group: "", + isStore: false, + }, + wantErr: false, + }, + { + name: "create valid metadata with empty authToken", + meta: pubsub.Metadata{Base: mdata.Base{ + Properties: map[string]string{ + "address": "localhost:50000", + "channel": "test", + "clientID": "clientID", + "group": "group", + "store": "true", + }}, + }, + want: &metadata{ + host: "localhost", + port: 50000, + clientID: "clientID", + authToken: "", + group: "group", + isStore: true, + }, + wantErr: false, + }, + { + name: "create invalid metadata with bad host", + meta: pubsub.Metadata{Base: mdata.Base{ + Properties: map[string]string{ + "address": ":50000", + "clientID": "clientID", + }}, + }, + want: nil, + wantErr: true, + }, + { + name: "create invalid metadata with bad port", + meta: pubsub.Metadata{Base: mdata.Base{ + Properties: map[string]string{ + "address": "localhost:badport", + "clientID": "clientID", + }}, + }, + want: nil, + wantErr: true, + }, + { + name: "create invalid metadata with empty address", + meta: pubsub.Metadata{Base: mdata.Base{ + Properties: map[string]string{ + "address": "", + "clientID": "clientID", + }}, + }, + want: nil, + wantErr: true, + }, + { + name: "create invalid metadata with bad address format", + meta: pubsub.Metadata{Base: mdata.Base{ + Properties: map[string]string{ + "address": "localhost:50000:badport", + "clientID": "clientID", + }}, + }, + want: nil, + wantErr: true, + }, + { + name: "create invalid metadata with bad store info", + meta: pubsub.Metadata{Base: mdata.Base{ + Properties: map[string]string{ + "address": "localhost:50000", + "clientID": "clientID", + "store": "bad", + }}, + }, + want: nil, + wantErr: true, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got, err := createMetadata(tt.meta) + if tt.wantErr { + assert.Error(t, err) + + } else { + assert.NoError(t, err) + assert.Equal(t, tt.want, got) + } + }) + } +} diff --git a/tests/config/pubsub/kubemq/pubsub.yml b/tests/config/pubsub/kubemq/pubsub.yml new file mode 100644 index 000000000..18ede65ff --- /dev/null +++ b/tests/config/pubsub/kubemq/pubsub.yml @@ -0,0 +1,12 @@ +apiVersion: dapr.io/v1alpha1 +kind: Component +metadata: + name: messages +spec: + type: pubsub.kubemq + version: v1 + metadata: + - name: address + value: localhost:50000 + - name: store + value: false diff --git a/tests/config/pubsub/tests.yml b/tests/config/pubsub/tests.yml index eadaa5795..090b8e411 100644 --- a/tests/config/pubsub/tests.yml +++ b/tests/config/pubsub/tests.yml @@ -1,6 +1,4 @@ -# Supported operation: publish, subscribe, multiplehandlers, bulkpublish, bulksubscribe -# bulkpublish should only be run for components that implement pubsub.BulkPublisher interface -# bulksubscribe should only be run for components that implement pubsub.BulkSubscriber interface +# Supported operation: publish, subscribe # Config map: ## pubsubName : name of the pubsub ## testTopicName: name of the test topic to use @@ -12,7 +10,7 @@ componentType: pubsub components: - component: azure.eventhubs - operations: ["publish", "subscribe", "multiplehandlers", "bulkpublish"] + allOperations: true config: pubsubName: azure-eventhubs testTopicName: eventhubs-pubsub-topic @@ -30,13 +28,13 @@ components: testTopicName: dapr-conf-test checkInOrderProcessing: false - component: redis - operations: ["publish", "subscribe", "multiplehandlers"] + allOperations: true config: checkInOrderProcessing: false - component: natsstreaming - operations: ["publish", "subscribe", "multiplehandlers"] + allOperations: true - component: jetstream - operations: ["publish", "subscribe", "multiplehandlers"] + allOperations: true - component: kafka allOperations: true - component: kafka @@ -46,25 +44,27 @@ components: profile: confluent allOperations: true - component: pulsar - operations: ["publish", "subscribe", "multiplehandlers"] + allOperations: true - component: mqtt profile: mosquitto - operations: ["publish", "subscribe", "multiplehandlers"] + allOperations: true - component: mqtt profile: emqx - operations: ["publish", "subscribe", "multiplehandlers"] + allOperations: true - component: mqtt profile: vernemq - operations: ["publish", "subscribe", "multiplehandlers"] + allOperations: true - component: hazelcast - operations: ["publish", "subscribe", "multiplehandlers"] + allOperations: true + - component: kubemq + allOperations: true - component: rabbitmq - operations: ["publish", "subscribe", "multiplehandlers"] + allOperations: true config: checkInOrderProcessing: false - component: in-memory - operations: ["publish", "subscribe", "multiplehandlers"] + allOperations: true - component: aws.snssqs - operations: ["publish", "subscribe", "multiplehandlers"] + allOperations: true config: checkInOrderProcessing: false diff --git a/tests/conformance/common.go b/tests/conformance/common.go index 94b260891..6fd5f5fe4 100644 --- a/tests/conformance/common.go +++ b/tests/conformance/common.go @@ -55,6 +55,7 @@ import ( p_inmemory "github.com/dapr/components-contrib/pubsub/in-memory" p_jetstream "github.com/dapr/components-contrib/pubsub/jetstream" p_kafka "github.com/dapr/components-contrib/pubsub/kafka" + p_kubemq "github.com/dapr/components-contrib/pubsub/kubemq" p_mqtt "github.com/dapr/components-contrib/pubsub/mqtt" p_natsstreaming "github.com/dapr/components-contrib/pubsub/natsstreaming" p_pulsar "github.com/dapr/components-contrib/pubsub/pulsar" @@ -381,6 +382,8 @@ func loadPubSub(tc TestComponent) pubsub.PubSub { pubsub = p_inmemory.New(testLogger) case "aws.snssqs": pubsub = p_snssqs.NewSnsSqs(testLogger) + case "kubemq": + pubsub = p_kubemq.NewKubeMQ(testLogger) default: return nil } From 04f4f697fd8bd6c2a6f8b2bc1904cc058085b832 Mon Sep 17 00:00:00 2001 From: "lior.nabat@kubemq.io" Date: Sat, 22 Oct 2022 22:30:16 +0300 Subject: [PATCH 02/87] Add new PubSub component - KubeMQ Kubernetes message broker Signed-off-by: Lior Nabat --- go.mod | 468 ++++++++++++++--------------- pubsub/kubemq/kubemq.go | 18 +- pubsub/kubemq/kubemq_events.go | 17 +- pubsub/kubemq/kubemq_eventstore.go | 16 +- 4 files changed, 259 insertions(+), 260 deletions(-) diff --git a/go.mod b/go.mod index ccfd6e3a7..9f03b50c9 100644 --- a/go.mod +++ b/go.mod @@ -3,377 +3,367 @@ module github.com/dapr/components-contrib go 1.19 require ( - cloud.google.com/go v0.100.2 // indirect - cloud.google.com/go/datastore v1.1.0 - cloud.google.com/go/pubsub v1.12.2 - cloud.google.com/go/storage v1.10.0 + cloud.google.com/go/datastore v1.8.0 + cloud.google.com/go/pubsub v1.25.1 + cloud.google.com/go/secretmanager v1.7.0 + cloud.google.com/go/storage v1.27.0 + dubbo.apache.org/dubbo-go/v3 v3.0.3-0.20220610080020-48691a404537 github.com/Azure/azure-amqp-common-go/v3 v3.2.3 github.com/Azure/azure-event-hubs-go/v3 v3.3.18 github.com/Azure/azure-sdk-for-go v65.0.0+incompatible - github.com/Azure/azure-sdk-for-go/sdk/azcore v1.1.3 + github.com/Azure/azure-sdk-for-go/sdk/azcore v1.1.4 github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.1.0 + github.com/Azure/azure-sdk-for-go/sdk/data/azappconfig v0.4.1 github.com/Azure/azure-sdk-for-go/sdk/data/azcosmos v0.3.2 github.com/Azure/azure-sdk-for-go/sdk/data/aztables v1.0.1 github.com/Azure/azure-sdk-for-go/sdk/keyvault/azsecrets v0.10.1 - github.com/Azure/azure-sdk-for-go/sdk/messaging/azservicebus v1.1.0 + github.com/Azure/azure-sdk-for-go/sdk/messaging/azservicebus v1.1.1 github.com/Azure/azure-storage-blob-go v0.10.0 github.com/Azure/azure-storage-queue-go v0.0.0-20191125232315-636801874cdd - github.com/Azure/go-amqp v0.17.4 - github.com/Azure/go-autorest/autorest v0.11.27 - github.com/Azure/go-autorest/autorest/adal v0.9.18 + github.com/Azure/go-amqp v0.17.5 + github.com/Azure/go-autorest/autorest v0.11.28 + github.com/Azure/go-autorest/autorest/adal v0.9.21 github.com/Azure/go-autorest/autorest/azure/auth v0.5.11 + github.com/Azure/go-autorest/autorest/to v0.4.0 github.com/DATA-DOG/go-sqlmock v1.5.0 - github.com/Shopify/sarama v1.30.0 - github.com/StackExchange/wmi v0.0.0-20210224194228-fe8f1750fd46 // indirect - github.com/aerospike/aerospike-client-go v4.5.0+incompatible + github.com/Shopify/sarama v1.37.2 + github.com/aerospike/aerospike-client-go v4.5.2+incompatible github.com/agrea/ptr v0.0.0-20180711073057-77a518d99b7b - github.com/ajg/form v1.5.1 // indirect github.com/alibaba/sentinel-golang v1.0.4 - github.com/alicebob/miniredis/v2 v2.13.3 - github.com/aliyun/aliyun-oss-go-sdk v2.0.7+incompatible - github.com/aliyun/aliyun-tablestore-go-sdk v1.6.0 - github.com/andybalholm/brotli v1.0.4 // indirect + github.com/alibabacloud-go/darabonba-openapi v0.2.1 + github.com/alibabacloud-go/oos-20190601 v1.0.4 + github.com/alibabacloud-go/tea v1.1.19 + github.com/alibabacloud-go/tea-utils v1.4.5 + github.com/alicebob/miniredis/v2 v2.23.0 + github.com/aliyun/aliyun-log-go-sdk v0.1.38 + github.com/aliyun/aliyun-oss-go-sdk v2.2.5+incompatible + github.com/aliyun/aliyun-tablestore-go-sdk v1.7.7 + github.com/apache/dubbo-go-hessian2 v1.11.1 + github.com/apache/pulsar-client-go v0.9.0 github.com/apache/rocketmq-client-go/v2 v2.1.1-rc2 - github.com/apache/thrift v0.16.0 // indirect - github.com/aws/aws-sdk-go v1.43.16 - github.com/baiyubin/aliyun-sts-go-sdk v0.0.0-20180326062324-cfa1a18b161f // indirect - github.com/bradfitz/gomemcache v0.0.0-20190913173617-a41fca850d0b - github.com/buger/jsonparser v1.1.1 // indirect - github.com/camunda/zeebe/clients/go/v8 v8.0.4 + github.com/aws/aws-sdk-go v1.44.119 + github.com/bradfitz/gomemcache v0.0.0-20220106215444-fb4bf637b56d + github.com/camunda/zeebe/clients/go/v8 v8.1.2 github.com/cenkalti/backoff/v4 v4.1.3 github.com/cinience/go_rocketmq v0.0.2 - github.com/coreos/go-oidc v2.1.0+incompatible + github.com/coreos/go-oidc v2.2.1+incompatible github.com/cyphar/filepath-securejoin v0.2.3 github.com/dancannon/gorethink v4.0.0+incompatible github.com/dapr/kit v0.0.2 - github.com/deepmap/oapi-codegen v1.8.1 // indirect - github.com/denisenkom/go-mssqldb v0.0.0-20210411162248-d9abbec934ba - github.com/dghubble/go-twitter v0.0.0-20190719072343-39e5462e111f - github.com/dghubble/oauth1 v0.6.0 + github.com/denisenkom/go-mssqldb v0.12.3 + github.com/dghubble/go-twitter v0.0.0-20220816163853-8a0df96f1e6d + github.com/dghubble/oauth1 v0.7.1 github.com/didip/tollbooth v4.0.2+incompatible - github.com/eapache/go-resiliency v1.2.0 // indirect - github.com/eclipse/paho.mqtt.golang v1.3.5 + github.com/eclipse/paho.mqtt.golang v1.4.2-0.20221018190109-a1800d8df9a4 github.com/fasthttp-contrib/sessions v0.0.0-20160905201309-74f6ac73d5d5 - github.com/fatih/color v1.13.0 // indirect - github.com/gavv/httpexpect v2.0.0+incompatible // indirect github.com/ghodss/yaml v1.0.0 - github.com/go-errors/errors v1.4.0 // indirect - github.com/go-logr/logr v1.2.3 // indirect - github.com/go-ole/go-ole v1.2.5 // indirect github.com/go-redis/redis/v8 v8.11.5 github.com/go-sql-driver/mysql v1.6.0 - github.com/gocql/gocql v0.0.0-20210515062232-b7ef815b4556 - github.com/golang-jwt/jwt v3.2.2+incompatible // indirect + github.com/gocql/gocql v1.2.1 + github.com/golang-jwt/jwt/v4 v4.4.2 github.com/golang/mock v1.6.0 - github.com/golang/snappy v0.0.4 // indirect github.com/google/uuid v1.3.0 - github.com/googleapis/gnostic v0.5.5 // indirect + github.com/googleapis/gax-go/v2 v2.6.0 github.com/gorilla/mux v1.8.0 - github.com/grandcat/zeroconf v0.0.0-20190424104450-85eadb44205c - github.com/hashicorp/consul/api v1.12.0 + github.com/grandcat/zeroconf v1.0.0 + github.com/hashicorp/consul/api v1.13.0 github.com/hashicorp/go-multierror v1.1.1 github.com/hashicorp/golang-lru v0.5.4 github.com/hazelcast/hazelcast-go-client v0.0.0-20190530123621-6cf767c2f31a - github.com/imdario/mergo v0.3.12 // indirect - github.com/imkira/go-interpol v1.1.0 // indirect - github.com/influxdata/influxdb-client-go v1.4.0 - github.com/influxdata/line-protocol v0.0.0-20210311194329-9aa0e372d097 // indirect - github.com/jcmturner/gofork v1.0.0 // indirect - github.com/json-iterator/go v1.1.12 - github.com/kataras/go-errors v0.0.3 // indirect - github.com/kataras/go-serializer v0.0.4 // indirect - github.com/machinebox/graphql v0.2.2 - github.com/matoous/go-nanoid/v2 v2.0.0 - github.com/matryer/is v1.4.0 // indirect - github.com/mattn/go-isatty v0.0.14 // indirect - github.com/microcosm-cc/bluemonday v1.0.17 // indirect - github.com/miekg/dns v1.1.50 // indirect - github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 - github.com/moul/http2curl v1.0.0 // indirect - github.com/nats-io/nats-server/v2 v2.7.4 - github.com/nats-io/nats-streaming-server v0.21.2 // indirect - github.com/nats-io/nats.go v1.13.1-0.20220308171302-2f2f6968e98d - github.com/nats-io/stan.go v0.8.3 - github.com/open-policy-agent/opa v0.43.1 - github.com/patrickmn/go-cache v2.1.0+incompatible - github.com/pkg/errors v0.9.1 - github.com/pquerna/cachecontrol v0.0.0-20180517163645-1555304b9b35 // indirect - github.com/robfig/cron/v3 v3.0.1 - github.com/russross/blackfriday v2.0.0+incompatible // indirect - github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da - github.com/sendgrid/rest v2.6.9+incompatible // indirect - github.com/sendgrid/sendgrid-go v3.11.1+incompatible - github.com/sergi/go-diff v1.2.0 // indirect - github.com/stretchr/testify v1.8.0 - github.com/supplyon/gremcos v0.1.0 - github.com/tidwall/gjson v1.14.0 // indirect - github.com/tidwall/pretty v1.2.0 // indirect - github.com/valyala/fasthttp v1.34.0 - github.com/vmware/vmware-go-kcl v1.5.0 - github.com/xeipuuv/gojsonschema v1.2.0 // indirect - github.com/yalp/jsonpath v0.0.0-20180802001716-5cc68e5049a0 // indirect - github.com/yudai/gojsondiff v1.0.0 // indirect - github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82 // indirect - github.com/yuin/gopher-lua v0.0.0-20200603152657-dc2b0ca8b37e // indirect - go.mongodb.org/mongo-driver v1.5.1 - go.opencensus.io v0.23.0 // indirect - golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90 - golang.org/x/net v0.0.0-20220630215102-69896b714898 - golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a - google.golang.org/api v0.74.0 - google.golang.org/genproto v0.0.0-20220405205423-9d709892a2bf - google.golang.org/grpc v1.48.0 - gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect - gopkg.in/couchbase/gocbcore.v7 v7.1.18 // indirect - gopkg.in/couchbaselabs/gocbconnstr.v1 v1.0.4 // indirect - gopkg.in/couchbaselabs/gojcbmock.v1 v1.0.4 // indirect - gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df - gopkg.in/gorethink/gorethink.v4 v4.1.0 // indirect - gopkg.in/kataras/go-serializer.v0 v0.0.4 // indirect - gopkg.in/square/go-jose.v2 v2.5.1 // indirect - gopkg.in/yaml.v3 v3.0.1 - k8s.io/api v0.23.0 - k8s.io/apiextensions-apiserver v0.23.0 - k8s.io/apimachinery v0.23.0 - k8s.io/client-go v0.23.0 -) - -require ( - github.com/alibabacloud-go/darabonba-openapi v0.1.16 - github.com/alibabacloud-go/oos-20190601 v1.0.1 - github.com/alibabacloud-go/tea v1.1.17 - github.com/oracle/oci-go-sdk/v54 v54.0.0 - github.com/sijms/go-ora/v2 v2.2.22 -) - -require ( - github.com/mrz1836/postmark v1.2.9 - github.com/nats-io/nkeys v0.3.0 -) - -require ( - cloud.google.com/go/secretmanager v1.4.0 - dubbo.apache.org/dubbo-go/v3 v3.0.3-0.20220610080020-48691a404537 - github.com/Azure/azure-sdk-for-go/sdk/data/azappconfig v0.4.1 - github.com/aliyun/aliyun-log-go-sdk v0.1.37 - github.com/apache/dubbo-go-hessian2 v1.11.0 github.com/huaweicloud/huaweicloud-sdk-go-obs v3.21.12+incompatible - github.com/huaweicloud/huaweicloud-sdk-go-v3 v0.0.87 - github.com/jackc/pgx/v5 v5.0.0 + github.com/huaweicloud/huaweicloud-sdk-go-v3 v0.1.5 + github.com/influxdata/influxdb-client-go v1.4.0 + github.com/jackc/pgx/v5 v5.0.3 + github.com/json-iterator/go v1.1.12 github.com/kubemq-io/kubemq-go v1.7.6 github.com/labd/commercetools-go-sdk v1.1.0 - github.com/nacos-group/nacos-sdk-go/v2 v2.0.1 - github.com/pashagolub/pgxmock/v2 v2.0.0-beta2 - github.com/rabbitmq/amqp091-go v1.3.4 - github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.476 - github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssm v1.0.476 - github.com/wapc/wapc-go v0.5.2 + github.com/machinebox/graphql v0.2.2 + github.com/matoous/go-nanoid/v2 v2.0.0 + github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 + github.com/mrz1836/postmark v1.2.11 + github.com/nacos-group/nacos-sdk-go/v2 v2.1.0 + github.com/nats-io/nats-server/v2 v2.9.3 + github.com/nats-io/nats.go v1.18.0 + github.com/nats-io/nkeys v0.3.0 + github.com/nats-io/stan.go v0.10.3 + github.com/open-policy-agent/opa v0.45.0 + github.com/oracle/oci-go-sdk/v54 v54.0.0 + github.com/pashagolub/pgxmock/v2 v2.1.0 + github.com/patrickmn/go-cache v2.1.0+incompatible + github.com/pkg/errors v0.9.1 + github.com/rabbitmq/amqp091-go v1.5.0 + github.com/robfig/cron/v3 v3.0.1 + github.com/samuel/go-zookeeper v0.0.0-20201211165307-7117e9ea2414 + github.com/sendgrid/sendgrid-go v3.12.0+incompatible + github.com/sijms/go-ora/v2 v2.5.3 + github.com/stretchr/testify v1.8.0 + github.com/supplyon/gremcos v0.1.38 + github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.518 + github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssm v1.0.518 + github.com/valyala/fasthttp v1.40.0 + github.com/vmware/vmware-go-kcl v1.5.0 + github.com/wapc/wapc-go v0.5.4 + github.com/xdg-go/scram v1.1.1 + go.mongodb.org/mongo-driver v1.10.3 + go.uber.org/atomic v1.10.0 go.uber.org/ratelimit v0.2.0 - gopkg.in/couchbase/gocb.v1 v1.6.4 + golang.org/x/crypto v0.1.0 + golang.org/x/net v0.1.0 + golang.org/x/oauth2 v0.1.0 + google.golang.org/api v0.100.0 + google.golang.org/genproto v0.0.0-20221018160656-63c7b68cfc55 + google.golang.org/grpc v1.50.1 + gopkg.in/couchbase/gocb.v1 v1.6.7 + gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df + gopkg.in/yaml.v3 v3.0.1 + k8s.io/api v0.25.3 + k8s.io/apiextensions-apiserver v0.25.3 + k8s.io/apimachinery v0.25.3 + k8s.io/client-go v0.25.3 + k8s.io/utils v0.0.0-20221012122500-cfd413dd9e85 ) -require gopkg.in/couchbaselabs/jsonx.v1 v1.0.1 // indirect - require ( - cloud.google.com/go/compute v1.5.0 // indirect + cloud.google.com/go v0.104.0 // indirect + cloud.google.com/go/compute v1.10.0 // indirect cloud.google.com/go/iam v0.3.0 // indirect - cloud.google.com/go/kms v1.4.0 // indirect contrib.go.opencensus.io/exporter/prometheus v0.4.1 // indirect github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect - github.com/AzureAD/microsoft-authentication-library-for-go v0.5.1 // indirect - github.com/RoaringBitmap/roaring v1.1.0 // indirect - github.com/Workiva/go-datastructures v1.0.53 // indirect - github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5 // indirect - github.com/agnivade/levenshtein v1.0.1 // indirect - github.com/andres-erbsen/clock v0.0.0-20160526145045-9e14626cd129 // indirect - github.com/apache/dubbo-getty v1.4.9-0.20220610060150-8af010f3f3dc // indirect - github.com/benbjohnson/clock v1.3.0 // indirect - github.com/bits-and-blooms/bitset v1.2.0 // indirect - github.com/creasty/defaults v1.5.2 // indirect - github.com/dubbogo/gost v1.11.25 // indirect - github.com/dubbogo/triple v1.1.8 // indirect - github.com/frankban/quicktest v1.14.3 // indirect - github.com/go-kit/kit v0.10.0 // indirect - github.com/go-kit/log v0.2.0 // indirect - github.com/go-logfmt/logfmt v0.5.1 // indirect - github.com/go-playground/locales v0.14.0 // indirect - github.com/go-playground/universal-translator v0.18.0 // indirect - github.com/go-playground/validator/v10 v10.11.0 // indirect - github.com/go-resty/resty/v2 v2.7.0 // indirect - github.com/hashicorp/go-hclog v1.0.0 // indirect - github.com/jackc/puddle/v2 v2.0.0 // indirect - github.com/jcmturner/aescts/v2 v2.0.0 // indirect - github.com/jcmturner/dnsutils/v2 v2.0.0 // indirect - github.com/jcmturner/gokrb5/v8 v8.4.2 // indirect - github.com/jcmturner/rpc/v2 v2.0.3 // indirect - github.com/jinzhu/copier v0.3.5 // indirect - github.com/k0kubun/pp v3.0.1+incompatible // indirect - github.com/knadh/koanf v1.4.1 // indirect - github.com/kubemq-io/protobuf v1.3.1 // indirect - github.com/kylelemons/godebug v1.1.0 // indirect - github.com/leodido/go-urn v1.2.1 // indirect - github.com/magiconair/properties v1.8.6 // indirect - github.com/mattn/go-colorable v0.1.12 // indirect - github.com/mitchellh/copystructure v1.2.0 // indirect - github.com/mitchellh/go-testing-interface v1.14.0 // indirect - github.com/mitchellh/reflectwalk v1.0.2 // indirect - github.com/mschoch/smat v0.2.0 // indirect - github.com/natefinch/lumberjack v2.0.0+incompatible // indirect - github.com/pelletier/go-toml v1.9.4 // indirect - github.com/prometheus/statsd_exporter v0.21.0 // indirect - github.com/satori/go.uuid v1.2.1-0.20181028125025-b2ce2384e17b // indirect - github.com/shirou/gopsutil v3.20.11+incompatible // indirect - github.com/stathat/consistent v1.0.0 // indirect - github.com/vektah/gqlparser/v2 v2.4.6 // indirect - github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect - github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect - golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect - golang.org/x/tools v0.1.11 // indirect - k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65 // indirect - sigs.k8s.io/json v0.0.0-20211020170558-c049b76a60c6 // indirect -) - -require ( - github.com/99designs/keyring v1.2.0 // indirect + github.com/99designs/keyring v1.2.1 // indirect github.com/AthenZ/athenz v1.10.39 // indirect - github.com/Azure/azure-pipeline-go v0.2.3 // indirect + github.com/Azure/azure-pipeline-go v0.2.2 // indirect github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.0 // indirect github.com/Azure/azure-sdk-for-go/sdk/keyvault/internal v0.7.0 // indirect github.com/Azure/go-autorest v14.2.0+incompatible // indirect github.com/Azure/go-autorest/autorest/azure/cli v0.4.5 // indirect github.com/Azure/go-autorest/autorest/date v0.3.0 // indirect - github.com/Azure/go-autorest/autorest/to v0.4.0 github.com/Azure/go-autorest/autorest/validation v0.3.1 // indirect github.com/Azure/go-autorest/logger v0.2.1 // indirect github.com/Azure/go-autorest/tracing v0.6.0 // indirect + github.com/AzureAD/microsoft-authentication-library-for-go v0.5.1 // indirect github.com/DataDog/zstd v1.5.0 // indirect github.com/OneOfOne/xxhash v1.2.8 // indirect + github.com/PuerkitoBio/purell v1.1.1 // indirect + github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect + github.com/RoaringBitmap/roaring v1.1.0 // indirect + github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d // indirect + github.com/Workiva/go-datastructures v1.0.53 // indirect + github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5 // indirect + github.com/agnivade/levenshtein v1.1.1 // indirect + github.com/ajg/form v1.5.1 // indirect github.com/alibabacloud-go/alibabacloud-gateway-spi v0.0.4 // indirect github.com/alibabacloud-go/debug v0.0.0-20190504072949-9472017b5c68 // indirect github.com/alibabacloud-go/endpoint-util v1.1.0 // indirect - github.com/alibabacloud-go/openapi-util v0.0.10 // indirect - github.com/alibabacloud-go/tea-utils v1.4.3 + github.com/alibabacloud-go/openapi-util v0.0.11 // indirect + github.com/alibabacloud-go/tea-xml v1.1.2 // indirect github.com/alicebob/gopher-json v0.0.0-20200520072559-a9ecdc9d1d3a // indirect - github.com/aliyun/alibaba-cloud-sdk-go v1.61.18 // indirect + github.com/aliyun/alibaba-cloud-sdk-go v1.61.1704 // indirect github.com/aliyun/credentials-go v1.1.2 // indirect github.com/aliyunmq/mq-http-go-sdk v1.0.3 // indirect - github.com/apache/pulsar-client-go v0.8.1 - github.com/apache/pulsar-client-go/oauth2 v0.0.0-20220120090717-25e59572242e // indirect + github.com/andres-erbsen/clock v0.0.0-20160526145045-9e14626cd129 // indirect + github.com/andybalholm/brotli v1.0.4 // indirect + github.com/apache/dubbo-getty v1.4.9-0.20220610060150-8af010f3f3dc // indirect github.com/apache/rocketmq-client-go v1.2.5 // indirect github.com/ardielle/ardielle-go v1.5.2 // indirect github.com/armon/go-metrics v0.3.10 // indirect github.com/asaskevich/govalidator v0.0.0-20200108200545-475eaeb16496 // indirect github.com/awslabs/kinesis-aggregation/go v0.0.0-20210630091500-54e17340d32f // indirect github.com/beorn7/perks v1.0.1 // indirect + github.com/bits-and-blooms/bitset v1.2.0 // indirect + github.com/buger/jsonparser v1.1.1 // indirect github.com/cenkalti/backoff v2.2.1+incompatible // indirect github.com/cespare/xxhash/v2 v2.1.2 // indirect + github.com/clbanning/mxj/v2 v2.5.6 // indirect + github.com/creasty/defaults v1.5.2 // indirect github.com/danieljoos/wincred v1.1.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect + github.com/deepmap/oapi-codegen v1.3.6 // indirect github.com/devigned/tab v0.1.1 // indirect - github.com/dghubble/sling v1.3.0 // indirect + github.com/dghubble/sling v1.4.0 // indirect github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect github.com/dimchansky/utfbom v1.1.1 // indirect + github.com/dubbogo/gost v1.11.25 // indirect + github.com/dubbogo/triple v1.1.8 // indirect github.com/dvsekhvalnov/jose2go v1.5.0 // indirect + github.com/eapache/go-resiliency v1.3.0 // indirect github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21 // indirect github.com/eapache/queue v1.1.0 // indirect + github.com/emicklei/go-restful/v3 v3.8.0 // indirect github.com/emirpasic/gods v1.12.0 // indirect + github.com/fatih/color v1.13.0 // indirect + github.com/gavv/httpexpect v2.0.0+incompatible // indirect + github.com/go-kit/kit v0.10.0 // indirect + github.com/go-kit/log v0.2.0 // indirect + github.com/go-logfmt/logfmt v0.5.1 // indirect + github.com/go-logr/logr v1.2.3 // indirect + github.com/go-ole/go-ole v1.2.4 // indirect + github.com/go-openapi/jsonpointer v0.19.5 // indirect + github.com/go-openapi/jsonreference v0.19.5 // indirect + github.com/go-openapi/swag v0.19.14 // indirect github.com/go-ozzo/ozzo-validation/v4 v4.3.0 // indirect - github.com/go-stack/stack v1.8.0 // indirect + github.com/go-playground/locales v0.14.0 // indirect + github.com/go-playground/universal-translator v0.18.0 // indirect + github.com/go-playground/validator/v10 v10.11.0 // indirect + github.com/go-resty/resty/v2 v2.7.0 // indirect github.com/gobwas/glob v0.2.3 // indirect github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect - github.com/gofrs/uuid v4.0.0+incompatible // indirect + github.com/gofrs/uuid v3.3.0+incompatible // indirect github.com/gogap/errors v0.0.0-20200228125012-531a6449b28c // indirect github.com/gogap/stack v0.0.0-20150131034635-fef68dddd4f8 // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/golang-jwt/jwt/v4 v4.2.0 + github.com/golang-jwt/jwt v3.2.2+incompatible // indirect github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe // indirect + github.com/golang-sql/sqlexp v0.1.0 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.2 // indirect - github.com/google/go-cmp v0.5.8 // indirect - github.com/google/go-querystring v1.0.0 // indirect - github.com/google/gofuzz v1.2.0 // indirect - github.com/googleapis/gax-go/v2 v2.2.0 + github.com/golang/snappy v0.0.4 // indirect + github.com/google/flatbuffers v1.12.1 // indirect + github.com/google/gnostic v0.5.7-v3refs // indirect + github.com/google/go-cmp v0.5.9 // indirect + github.com/google/go-querystring v1.1.0 // indirect + github.com/google/gofuzz v1.1.0 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.2.0 // indirect github.com/gorilla/websocket v1.5.0 // indirect github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed // indirect github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect + github.com/hashicorp/go-hclog v1.1.0 // indirect github.com/hashicorp/go-immutable-radix v1.3.1 // indirect github.com/hashicorp/go-rootcerts v1.0.2 // indirect - github.com/hashicorp/go-uuid v1.0.2 // indirect + github.com/hashicorp/go-uuid v1.0.3 // indirect github.com/hashicorp/serf v0.9.6 // indirect + github.com/imdario/mergo v0.3.6 // indirect + github.com/imkira/go-interpol v1.1.0 // indirect + github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839 // indirect github.com/jackc/pgpassfile v1.0.0 // indirect github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b // indirect + github.com/jackc/puddle/v2 v2.0.0 // indirect + github.com/jcmturner/aescts/v2 v2.0.0 // indirect + github.com/jcmturner/dnsutils/v2 v2.0.0 // indirect + github.com/jcmturner/gofork v1.7.6 // indirect + github.com/jcmturner/gokrb5/v8 v8.4.3 // indirect + github.com/jcmturner/rpc/v2 v2.0.3 // indirect + github.com/jinzhu/copier v0.3.5 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect + github.com/josharian/intern v1.0.0 // indirect github.com/jpillora/backoff v1.0.0 // indirect - github.com/klauspost/compress v1.15.1 // indirect + github.com/k0kubun/pp v3.0.1+incompatible // indirect + github.com/kataras/go-errors v0.0.3 // indirect + github.com/kataras/go-serializer v0.0.4 // indirect + github.com/klauspost/compress v1.15.11 // indirect + github.com/knadh/koanf v1.4.1 // indirect + github.com/kubemq-io/protobuf v1.3.1 // indirect + github.com/kylelemons/godebug v1.1.0 // indirect + github.com/labstack/echo/v4 v4.9.0 // indirect + github.com/labstack/gommon v0.3.1 // indirect + github.com/leodido/go-urn v1.2.1 // indirect github.com/linkedin/goavro/v2 v2.9.8 // indirect - github.com/mattn/go-ieproxy v0.0.1 // indirect + github.com/magiconair/properties v1.8.6 // indirect + github.com/mailru/easyjson v0.7.6 // indirect + github.com/matryer/is v1.4.0 // indirect + github.com/mattn/go-colorable v0.1.12 // indirect + github.com/mattn/go-ieproxy v0.0.0-20190702010315-6dee0af9227d // indirect + github.com/mattn/go-isatty v0.0.14 // indirect github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 // indirect + github.com/microcosm-cc/bluemonday v1.0.21 // indirect + github.com/miekg/dns v1.1.43 // indirect github.com/minio/highwayhash v1.0.2 // indirect + github.com/mitchellh/copystructure v1.2.0 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect + github.com/mitchellh/reflectwalk v1.0.2 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect + github.com/montanaflynn/stats v0.6.6 // indirect + github.com/moul/http2curl v1.0.0 // indirect + github.com/mschoch/smat v0.2.0 // indirect github.com/mtibben/percent v0.2.1 // indirect - github.com/nats-io/jwt/v2 v2.2.1-0.20220113022732-58e87895b296 // indirect + github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect + github.com/natefinch/lumberjack v2.0.0+incompatible // indirect + github.com/nats-io/jwt/v2 v2.3.0 // indirect + github.com/nats-io/nats-streaming-server v0.25.2 // indirect github.com/nats-io/nuid v1.0.1 // indirect github.com/opentracing/opentracing-go v1.2.0 // indirect - github.com/pierrec/lz4 v2.6.1+incompatible // indirect + github.com/pelletier/go-toml v1.9.4 // indirect + github.com/pierrec/lz4 v2.6.0+incompatible // indirect + github.com/pierrec/lz4/v4 v4.1.17 // indirect github.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/prometheus/client_golang v1.12.2 // indirect + github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021 // indirect + github.com/prometheus/client_golang v1.13.0 // indirect github.com/prometheus/client_model v0.2.0 // indirect - github.com/prometheus/common v0.35.0 // indirect - github.com/prometheus/procfs v0.7.3 // indirect + github.com/prometheus/common v0.37.0 // indirect + github.com/prometheus/procfs v0.8.0 // indirect + github.com/prometheus/statsd_exporter v0.21.0 // indirect github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect github.com/rs/zerolog v1.25.0 // indirect + github.com/russross/blackfriday v1.6.0 // indirect + github.com/satori/go.uuid v1.2.1-0.20181028125025-b2ce2384e17b // indirect + github.com/sendgrid/rest v2.6.9+incompatible // indirect + github.com/shirou/gopsutil v3.20.11+incompatible // indirect github.com/shirou/gopsutil/v3 v3.21.6 // indirect github.com/sirupsen/logrus v1.9.0 // indirect github.com/sony/gobreaker v0.4.2-0.20210216022020-dd874f9dd33b // indirect github.com/spaolacci/murmur3 v1.1.0 // indirect github.com/spf13/cast v1.4.1 // indirect github.com/spf13/pflag v1.0.5 // indirect + github.com/stathat/consistent v1.0.0 // indirect github.com/stretchr/objx v0.4.0 // indirect - github.com/tetratelabs/wazero v1.0.0-pre.1 // indirect + github.com/tchap/go-patricia/v2 v2.3.1 // indirect + github.com/tetratelabs/wazero v1.0.0-pre.2 // indirect + github.com/tidwall/gjson v1.9.3 // indirect github.com/tidwall/match v1.1.1 // indirect + github.com/tidwall/pretty v1.2.0 // indirect github.com/tjfoc/gmsm v1.3.2 // indirect github.com/tklauser/go-sysconf v0.3.6 // indirect github.com/tklauser/numcpus v0.2.2 // indirect github.com/valyala/bytebufferpool v1.0.0 // indirect + github.com/valyala/fasttemplate v1.2.1 // indirect github.com/xdg-go/pbkdf2 v1.0.0 // indirect - github.com/xdg-go/scram v1.0.2 - github.com/xdg-go/stringprep v1.0.2 // indirect + github.com/xdg-go/stringprep v1.0.3 // indirect + github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect + github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect + github.com/xeipuuv/gojsonschema v1.2.0 // indirect + github.com/yalp/jsonpath v0.0.0-20180802001716-5cc68e5049a0 // indirect github.com/yashtewari/glob-intersection v0.1.0 // indirect github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d // indirect - go.uber.org/atomic v1.9.0 - go.uber.org/multierr v1.8.0 // indirect + github.com/yudai/gojsondiff v1.0.0 // indirect + github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82 // indirect + github.com/yuin/gopher-lua v0.0.0-20210529063254-f4c35e4016d9 // indirect + go.opencensus.io v0.23.0 // indirect + go.uber.org/multierr v1.7.0 // indirect go.uber.org/zap v1.21.0 // indirect - golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f // indirect - golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 // indirect - golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 // indirect - golang.org/x/text v0.3.7 // indirect - golang.org/x/time v0.0.0-20211116232009-f0f3c7e86c11 // indirect - golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f // indirect + golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0 // indirect + golang.org/x/sys v0.1.0 // indirect + golang.org/x/term v0.1.0 // indirect + golang.org/x/text v0.4.0 // indirect + golang.org/x/time v0.0.0-20220922220347-f3bd1da661af // indirect + golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect google.golang.org/appengine v1.6.7 // indirect - google.golang.org/protobuf v1.28.0 // indirect + google.golang.org/protobuf v1.28.1 // indirect + gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect + gopkg.in/couchbase/gocbcore.v7 v7.1.18 // indirect + gopkg.in/couchbaselabs/gocbconnstr.v1 v1.0.4 // indirect + gopkg.in/couchbaselabs/gojcbmock.v1 v1.0.4 // indirect + gopkg.in/couchbaselabs/jsonx.v1 v1.0.1 // indirect gopkg.in/fatih/pool.v2 v2.0.0 // indirect + gopkg.in/gorethink/gorethink.v4 v4.1.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect - gopkg.in/ini.v1 v1.66.2 // indirect + gopkg.in/ini.v1 v1.66.6 // indirect + gopkg.in/kataras/go-serializer.v0 v0.0.4 // indirect gopkg.in/natefinch/lumberjack.v2 v2.0.0 // indirect + gopkg.in/square/go-jose.v2 v2.4.1 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect - k8s.io/klog/v2 v2.30.0 // indirect - k8s.io/utils v0.0.0-20210930125809-cb0fa318a74b - nhooyr.io/websocket v1.8.7 // indirect - sigs.k8s.io/structured-merge-diff/v4 v4.2.0 // indirect - sigs.k8s.io/yaml v1.3.0 // indirect + k8s.io/klog/v2 v2.80.1 // indirect + k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1 // indirect + sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 // indirect + sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect + sigs.k8s.io/yaml v1.2.0 // indirect ) -replace k8s.io/client => github.com/kubernetes-client/go v0.0.0-20190928040339-c757968c4c36 - -replace github.com/eclipse/paho.mqtt.golang => github.com/shivamkm07/paho.mqtt.golang v1.3.6-0.20220106130409-e28a1db639f8 - replace github.com/gobwas/pool => github.com/gobwas/pool v0.2.1 -replace go.opencensus.io => go.opencensus.io v0.23.0 - replace github.com/toolkits/concurrent => github.com/niean/gotools v0.0.0-20151221085310-ff3f51fc5c60 + +// this is a fork which addresses a performance issues due to go routines +replace dubbo.apache.org/dubbo-go/v3 => dubbo.apache.org/dubbo-go/v3 v3.0.3-0.20220610080020-48691a404537 diff --git a/pubsub/kubemq/kubemq.go b/pubsub/kubemq/kubemq.go index 7c422d3f9..4296a3519 100644 --- a/pubsub/kubemq/kubemq.go +++ b/pubsub/kubemq/kubemq.go @@ -2,8 +2,11 @@ package kubemq import ( "context" + "fmt" "github.com/dapr/components-contrib/pubsub" "github.com/dapr/kit/logger" + "github.com/google/uuid" + "time" ) type kubeMQ struct { @@ -17,12 +20,7 @@ type kubeMQ struct { func NewKubeMQ(logger logger.Logger) pubsub.PubSub { return &kubeMQ{ - metadata: nil, - logger: logger, - ctx: nil, - ctxCancel: nil, - eventsClient: nil, - eventStoreClient: nil, + logger: logger, } } @@ -71,3 +69,11 @@ func (k *kubeMQ) Close() error { return k.eventsClient.Close() } } + +func getRandomID() string { + randomUuid, err := uuid.NewRandom() + if err != nil { + return fmt.Sprintf("%d", time.Now().UnixNano()) + } + return randomUuid.String() +} diff --git a/pubsub/kubemq/kubemq_events.go b/pubsub/kubemq/kubemq_events.go index 3205b6de9..cf1a3bbf7 100644 --- a/pubsub/kubemq/kubemq_events.go +++ b/pubsub/kubemq/kubemq_events.go @@ -5,7 +5,7 @@ import ( "github.com/dapr/components-contrib/pubsub" "github.com/dapr/kit/logger" "github.com/kubemq-io/kubemq-go" - "github.com/kubemq-io/kubemq-go/pkg/uuid" + "go.uber.org/atomic" "time" ) @@ -24,7 +24,7 @@ type kubeMQEvents struct { waitForResultTimeout time.Duration ctx context.Context ctxCancel context.CancelFunc - isInitialized bool + isInitialized *atomic.Bool } func newkubeMQEvents(logger logger.Logger) *kubeMQEvents { @@ -37,17 +37,18 @@ func newkubeMQEvents(logger logger.Logger) *kubeMQEvents { waitForResultTimeout: 60 * time.Second, ctx: nil, ctxCancel: nil, + isInitialized: atomic.NewBool(false), } } func (k *kubeMQEvents) init() error { k.ctx, k.ctxCancel = context.WithCancel(context.Background()) if k.metadata.useMock { - k.isInitialized = true + k.isInitialized.Store(true) return nil } clientID := k.metadata.clientID if clientID == "" { - clientID = uuid.New() + clientID = getRandomID() } client, err := kubemq.NewEventsClient(k.ctx, kubemq.WithAddress(k.metadata.host, k.metadata.port), @@ -67,7 +68,7 @@ func (k *kubeMQEvents) init() error { k.logger.Errorf("error init kubemq client error: %w", err.Error()) return err } - k.isInitialized = true + k.isInitialized.Store(true) return nil } func (k *kubeMQEvents) Init(meta *metadata) error { @@ -86,7 +87,7 @@ func (k *kubeMQEvents) setPublishStream() error { return err } func (k *kubeMQEvents) Publish(req *pubsub.PublishRequest) error { - if !k.isInitialized { + if !k.isInitialized.Load() { if err := k.init(); err != nil { return err } @@ -111,14 +112,14 @@ func (k *kubeMQEvents) Features() []pubsub.Feature { } func (k *kubeMQEvents) Subscribe(ctx context.Context, req pubsub.SubscribeRequest, handler pubsub.Handler) error { - if !k.isInitialized { + if !k.isInitialized.Load() { if err := k.init(); err != nil { return err } } clientID := k.metadata.clientID if clientID == "" { - clientID = uuid.New() + clientID = getRandomID() } k.logger.Debugf("kubemq pub/sub: subscribing to %s", req.Topic) err := k.client.Subscribe(ctx, &kubemq.EventsSubscription{ diff --git a/pubsub/kubemq/kubemq_eventstore.go b/pubsub/kubemq/kubemq_eventstore.go index afd468c92..e2eec5447 100644 --- a/pubsub/kubemq/kubemq_eventstore.go +++ b/pubsub/kubemq/kubemq_eventstore.go @@ -6,7 +6,7 @@ import ( "github.com/dapr/components-contrib/pubsub" "github.com/dapr/kit/logger" "github.com/kubemq-io/kubemq-go" - "github.com/kubemq-io/kubemq-go/pkg/uuid" + "go.uber.org/atomic" "time" ) @@ -26,7 +26,7 @@ type kubeMQEventStore struct { waitForResultTimeout time.Duration ctx context.Context ctxCancel context.CancelFunc - isInitialized bool + isInitialized *atomic.Bool } func newKubeMQEventsStore(logger logger.Logger) *kubeMQEventStore { @@ -39,17 +39,18 @@ func newKubeMQEventsStore(logger logger.Logger) *kubeMQEventStore { waitForResultTimeout: 60 * time.Second, ctx: nil, ctxCancel: nil, + isInitialized: atomic.NewBool(false), } } func (k *kubeMQEventStore) init() error { k.ctx, k.ctxCancel = context.WithCancel(context.Background()) if k.metadata.useMock { - k.isInitialized = true + k.isInitialized.Store(true) return nil } clientID := k.metadata.clientID if clientID == "" { - clientID = uuid.New() + clientID = getRandomID() } client, err := kubemq.NewEventsStoreClient(k.ctx, kubemq.WithAddress(k.metadata.host, k.metadata.port), @@ -69,7 +70,7 @@ func (k *kubeMQEventStore) init() error { k.logger.Errorf("error init kubemq client error: %w", err.Error()) return err } - k.isInitialized = true + k.isInitialized.Store(true) return nil } func (k *kubeMQEventStore) getSubscriberClient(clientID string) (kubemqEventsStoreClient, error) { @@ -107,7 +108,7 @@ func (k *kubeMQEventStore) setPublishStream() error { return nil } func (k *kubeMQEventStore) Publish(req *pubsub.PublishRequest) error { - if !k.isInitialized { + if !k.isInitialized.Load() { if err := k.init(); err != nil { return err } @@ -145,8 +146,9 @@ func (k *kubeMQEventStore) Subscribe(ctx context.Context, req pubsub.SubscribeRe } clientID := k.metadata.clientID if clientID == "" { - clientID = uuid.New() + clientID = getRandomID() } + k.logger.Debugf("kubemq pub/sub: subscribing to %s", req.Topic) err := k.client.Subscribe(ctx, &kubemq.EventsStoreSubscription{ Channel: req.Topic, From 2e3a46e04d5d8ba55bb77625477f246bdfb2719e Mon Sep 17 00:00:00 2001 From: Lior Nabat Date: Sun, 23 Oct 2022 08:21:08 +0300 Subject: [PATCH 03/87] Update - Add new PubSub component - KubeMQ Kubernetes message broker Signed-off-by: Lior Nabat --- pubsub/kubemq/kubemq.go | 7 +++-- pubsub/kubemq/kubemq_events.go | 35 ++++++++++----------- pubsub/kubemq/kubemq_eventstore.go | 49 +++++++++++------------------- pubsub/kubemq/metadata.go | 6 ---- pubsub/kubemq/metadata_test.go | 1 - 5 files changed, 40 insertions(+), 58 deletions(-) diff --git a/pubsub/kubemq/kubemq.go b/pubsub/kubemq/kubemq.go index 4296a3519..7d998a602 100644 --- a/pubsub/kubemq/kubemq.go +++ b/pubsub/kubemq/kubemq.go @@ -3,10 +3,11 @@ package kubemq import ( "context" "fmt" + "time" + "github.com/dapr/components-contrib/pubsub" "github.com/dapr/kit/logger" "github.com/google/uuid" - "time" ) type kubeMQ struct { @@ -71,9 +72,9 @@ func (k *kubeMQ) Close() error { } func getRandomID() string { - randomUuid, err := uuid.NewRandom() + randomUUID, err := uuid.NewRandom() if err != nil { return fmt.Sprintf("%d", time.Now().UnixNano()) } - return randomUuid.String() + return randomUUID.String() } diff --git a/pubsub/kubemq/kubemq_events.go b/pubsub/kubemq/kubemq_events.go index cf1a3bbf7..aa47bbc06 100644 --- a/pubsub/kubemq/kubemq_events.go +++ b/pubsub/kubemq/kubemq_events.go @@ -2,11 +2,12 @@ package kubemq import ( "context" + "sync" + "time" + "github.com/dapr/components-contrib/pubsub" "github.com/dapr/kit/logger" "github.com/kubemq-io/kubemq-go" - "go.uber.org/atomic" - "time" ) type kubemqEventsClient interface { @@ -16,6 +17,7 @@ type kubemqEventsClient interface { } type kubeMQEvents struct { + lock sync.RWMutex client kubemqEventsClient metadata *metadata logger logger.Logger @@ -24,7 +26,7 @@ type kubeMQEvents struct { waitForResultTimeout time.Duration ctx context.Context ctxCancel context.CancelFunc - isInitialized *atomic.Bool + isInitialized bool } func newkubeMQEvents(logger logger.Logger) *kubeMQEvents { @@ -37,15 +39,19 @@ func newkubeMQEvents(logger logger.Logger) *kubeMQEvents { waitForResultTimeout: 60 * time.Second, ctx: nil, ctxCancel: nil, - isInitialized: atomic.NewBool(false), + isInitialized: false, } } func (k *kubeMQEvents) init() error { - k.ctx, k.ctxCancel = context.WithCancel(context.Background()) - if k.metadata.useMock { - k.isInitialized.Store(true) + k.lock.RLock() + isInit := k.isInitialized + k.lock.RUnlock() + if isInit { return nil } + k.lock.Lock() + defer k.lock.Unlock() + k.ctx, k.ctxCancel = context.WithCancel(context.Background()) clientID := k.metadata.clientID if clientID == "" { clientID = getRandomID() @@ -68,7 +74,7 @@ func (k *kubeMQEvents) init() error { k.logger.Errorf("error init kubemq client error: %w", err.Error()) return err } - k.isInitialized.Store(true) + k.isInitialized = true return nil } func (k *kubeMQEvents) Init(meta *metadata) error { @@ -87,10 +93,8 @@ func (k *kubeMQEvents) setPublishStream() error { return err } func (k *kubeMQEvents) Publish(req *pubsub.PublishRequest) error { - if !k.isInitialized.Load() { - if err := k.init(); err != nil { - return err - } + if err := k.init(); err != nil { + return err } k.logger.Debugf("kubemq pub/sub: publishing message to %s", req.Topic) event := &kubemq.Event{ @@ -112,10 +116,8 @@ func (k *kubeMQEvents) Features() []pubsub.Feature { } func (k *kubeMQEvents) Subscribe(ctx context.Context, req pubsub.SubscribeRequest, handler pubsub.Handler) error { - if !k.isInitialized.Load() { - if err := k.init(); err != nil { - return err - } + if err := k.init(); err != nil { + return err } clientID := k.metadata.clientID if clientID == "" { @@ -151,7 +153,6 @@ func (k *kubeMQEvents) Subscribe(ctx context.Context, req pubsub.SubscribeReques k.logger.Errorf("kubemq pub/sub error: error resending message from topic '%s', %s", req.Topic, err.Error()) } } - }) if err != nil { k.logger.Errorf("kubemq events pub/sub error: error subscribing to topic '%s', %s", req.Topic, err.Error()) diff --git a/pubsub/kubemq/kubemq_eventstore.go b/pubsub/kubemq/kubemq_eventstore.go index e2eec5447..093c64586 100644 --- a/pubsub/kubemq/kubemq_eventstore.go +++ b/pubsub/kubemq/kubemq_eventstore.go @@ -3,11 +3,12 @@ package kubemq import ( "context" "fmt" + "sync" + "time" + "github.com/dapr/components-contrib/pubsub" "github.com/dapr/kit/logger" "github.com/kubemq-io/kubemq-go" - "go.uber.org/atomic" - "time" ) // interface used to allow unit testing. @@ -18,6 +19,7 @@ type kubemqEventsStoreClient interface { } type kubeMQEventStore struct { + lock sync.RWMutex client kubemqEventsStoreClient metadata *metadata logger logger.Logger @@ -26,7 +28,7 @@ type kubeMQEventStore struct { waitForResultTimeout time.Duration ctx context.Context ctxCancel context.CancelFunc - isInitialized *atomic.Bool + isInitialized bool } func newKubeMQEventsStore(logger logger.Logger) *kubeMQEventStore { @@ -39,15 +41,19 @@ func newKubeMQEventsStore(logger logger.Logger) *kubeMQEventStore { waitForResultTimeout: 60 * time.Second, ctx: nil, ctxCancel: nil, - isInitialized: atomic.NewBool(false), + isInitialized: false, } } func (k *kubeMQEventStore) init() error { - k.ctx, k.ctxCancel = context.WithCancel(context.Background()) - if k.metadata.useMock { - k.isInitialized.Store(true) + k.lock.RLock() + isInit := k.isInitialized + k.lock.RUnlock() + if isInit { return nil } + k.lock.Lock() + defer k.lock.Unlock() + k.ctx, k.ctxCancel = context.WithCancel(context.Background()) clientID := k.metadata.clientID if clientID == "" { clientID = getRandomID() @@ -70,25 +76,9 @@ func (k *kubeMQEventStore) init() error { k.logger.Errorf("error init kubemq client error: %w", err.Error()) return err } - k.isInitialized.Store(true) + k.isInitialized = true return nil } -func (k *kubeMQEventStore) getSubscriberClient(clientID string) (kubemqEventsStoreClient, error) { - client, err := kubemq.NewEventsStoreClient(k.ctx, - kubemq.WithAddress(k.metadata.host, k.metadata.port), - kubemq.WithClientId(clientID), - kubemq.WithTransportType(kubemq.TransportTypeGRPC), - kubemq.WithCheckConnection(true), - kubemq.WithAuthToken(k.metadata.authToken), - kubemq.WithAutoReconnect(true), - kubemq.WithReconnectInterval(time.Second)) - if err != nil { - k.logger.Errorf("error init kubemq client error: %s", err.Error()) - return nil, err - } - return client, nil -} - func (k *kubeMQEventStore) Init(meta *metadata) error { k.metadata = meta _ = k.init() @@ -108,10 +98,8 @@ func (k *kubeMQEventStore) setPublishStream() error { return nil } func (k *kubeMQEventStore) Publish(req *pubsub.PublishRequest) error { - if !k.isInitialized.Load() { - if err := k.init(); err != nil { - return err - } + if err := k.init(); err != nil { + return err } k.logger.Debugf("kubemq pub/sub: publishing message to %s", req.Topic) event := &kubemq.EventStore{ @@ -141,8 +129,8 @@ func (k *kubeMQEventStore) Features() []pubsub.Feature { } func (k *kubeMQEventStore) Subscribe(ctx context.Context, req pubsub.SubscribeRequest, handler pubsub.Handler) error { - if k.metadata.useMock { - return nil + if err := k.init(); err != nil { + return err } clientID := k.metadata.clientID if clientID == "" { @@ -182,7 +170,6 @@ func (k *kubeMQEventStore) Subscribe(ctx context.Context, req pubsub.SubscribeRe k.logger.Errorf("kubemq pub/sub error: error resending message from topic '%s', %s", req.Topic, err.Error()) } } - }) if err != nil { k.logger.Errorf("kubemq pub/sub error: error subscribing to topic '%s', %s", req.Topic, err.Error()) diff --git a/pubsub/kubemq/metadata.go b/pubsub/kubemq/metadata.go index 123d57108..5fdc4d676 100644 --- a/pubsub/kubemq/metadata.go +++ b/pubsub/kubemq/metadata.go @@ -14,7 +14,6 @@ type metadata struct { authToken string group string isStore bool - useMock bool disableReDelivery bool } @@ -71,11 +70,6 @@ func createMetadata(pubSubMetadata pubsub.Metadata) (*metadata, error) { return nil, fmt.Errorf("invalid kubeMQ store value, store can be true or false") } } - if val, found := pubSubMetadata.Properties["useMock"]; found && val != "" { - if val == "true" { - result.useMock = true - } - } if val, found := pubSubMetadata.Properties["disableReDelivery"]; found && val != "" { if val == "true" { result.disableReDelivery = true diff --git a/pubsub/kubemq/metadata_test.go b/pubsub/kubemq/metadata_test.go index 63ee30d5b..a5a81bb19 100644 --- a/pubsub/kubemq/metadata_test.go +++ b/pubsub/kubemq/metadata_test.go @@ -35,7 +35,6 @@ func Test_createMetadata(t *testing.T) { authToken: "authToken", group: "group", isStore: true, - useMock: true, disableReDelivery: true, }, wantErr: false, From efe706a41de12d959ecf5c344890df4abd18a052 Mon Sep 17 00:00:00 2001 From: Tomasz Pietrek Date: Mon, 31 Oct 2022 12:52:38 +0100 Subject: [PATCH 04/87] wip on binding by name --- pubsub/jetstream/jetstream.go | 36 +++++++++++++++++++++++++++++++++++ pubsub/jetstream/metadata.go | 3 +++ 2 files changed, 39 insertions(+) diff --git a/pubsub/jetstream/jetstream.go b/pubsub/jetstream/jetstream.go index 970329ac8..2e20a523d 100644 --- a/pubsub/jetstream/jetstream.go +++ b/pubsub/jetstream/jetstream.go @@ -15,6 +15,7 @@ package jetstream import ( "context" + "fmt" "github.com/nats-io/nats.go" "github.com/nats-io/nkeys" @@ -95,49 +96,67 @@ func (js *jetstreamPubSub) Publish(req *pubsub.PublishRequest) error { } func (js *jetstreamPubSub) Subscribe(ctx context.Context, req pubsub.SubscribeRequest, handler pubsub.Handler) error { + + js.l.Debug("STARTING SUbSCRIBE") + var opts []nats.SubOpt + var consumerConfig nats.ConsumerConfig if v := js.meta.durableName; v != "" { opts = append(opts, nats.Durable(v)) + consumerConfig.Durable = v } if v := js.meta.startTime; !v.IsZero() { opts = append(opts, nats.StartTime(v)) + consumerConfig.OptStartTime = &v } else if v := js.meta.startSequence; v > 0 { opts = append(opts, nats.StartSequence(v)) + consumerConfig.OptStartSeq = v } else if js.meta.deliverAll { opts = append(opts, nats.DeliverAll()) + consumerConfig.DeliverPolicy = nats.DeliverAllPolicy } else { opts = append(opts, nats.DeliverLast()) + consumerConfig.DeliverPolicy = nats.DeliverLastPolicy } if js.meta.flowControl { opts = append(opts, nats.EnableFlowControl()) + consumerConfig.FlowControl = true } if js.meta.ackWait != 0 { opts = append(opts, nats.AckWait(js.meta.ackWait)) + consumerConfig.AckWait = js.meta.ackWait } if js.meta.maxDeliver != 0 { opts = append(opts, nats.MaxDeliver(js.meta.maxDeliver)) + consumerConfig.MaxDeliver = js.meta.maxDeliver } if len(js.meta.backOff) != 0 { opts = append(opts, nats.BackOff(js.meta.backOff)) + consumerConfig.BackOff = js.meta.backOff } if js.meta.maxAckPending != 0 { opts = append(opts, nats.MaxAckPending(js.meta.maxAckPending)) + consumerConfig.MaxAckPending = js.meta.maxAckPending } if js.meta.replicas != 0 { opts = append(opts, nats.ConsumerReplicas(js.meta.replicas)) + consumerConfig.Replicas = js.meta.replicas } if js.meta.memoryStorage { opts = append(opts, nats.ConsumerMemoryStorage()) + consumerConfig.MemoryStorage = true } if js.meta.rateLimit != 0 { opts = append(opts, nats.RateLimit(js.meta.rateLimit)) + consumerConfig.RateLimit = js.meta.rateLimit } if js.meta.hearbeat != 0 { opts = append(opts, nats.IdleHeartbeat(js.meta.hearbeat)) + consumerConfig.Heartbeat = js.meta.hearbeat } natsHandler := func(m *nats.Msg) { @@ -177,6 +196,23 @@ func (js *jetstreamPubSub) Subscribe(ctx context.Context, req pubsub.SubscribeRe var err error var subscription *nats.Subscription + if js.meta.streamName != "" { + js.l.Debug("STREAM NAME IS EMPTY") + fmt.Println("STREAM NAME IS NOT EMPTY") + + info, err := js.jsc.StreamInfo(js.meta.streamName) + if err != nil { + return err + } + + consumerInfo, err := js.jsc.AddConsumer(info.Config.Name, &consumerConfig) + if err != nil { + return err + } + opts = append(opts, nats.Bind(info.Config.Name, consumerInfo.Name)) + } + fmt.Println("OPTS: ", opts) + if queue := js.meta.queueGroupName; queue != "" { js.l.Debugf("nats: subscribed to subject %s with queue group %s", req.Topic, js.meta.queueGroupName) diff --git a/pubsub/jetstream/metadata.go b/pubsub/jetstream/metadata.go index 8bc1f737c..1a158e66c 100644 --- a/pubsub/jetstream/metadata.go +++ b/pubsub/jetstream/metadata.go @@ -32,6 +32,7 @@ type metadata struct { tlsClientKey string name string + streamName string durableName string queueGroupName string startSequence uint64 @@ -137,5 +138,7 @@ func parseMetadata(psm pubsub.Metadata) (metadata, error) { m.hearbeat = v } + m.streamName = psm.Properties["streamName"] + return m, nil } From e04a44895f5b9c6df6ed1eadf5f4e163276f39e2 Mon Sep 17 00:00:00 2001 From: Tomasz Pietrek Date: Mon, 31 Oct 2022 16:43:38 +0100 Subject: [PATCH 05/87] Cleanup debugs --- pubsub/jetstream/jetstream.go | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/pubsub/jetstream/jetstream.go b/pubsub/jetstream/jetstream.go index 2e20a523d..fc3756e6c 100644 --- a/pubsub/jetstream/jetstream.go +++ b/pubsub/jetstream/jetstream.go @@ -15,7 +15,6 @@ package jetstream import ( "context" - "fmt" "github.com/nats-io/nats.go" "github.com/nats-io/nkeys" @@ -97,8 +96,6 @@ func (js *jetstreamPubSub) Publish(req *pubsub.PublishRequest) error { func (js *jetstreamPubSub) Subscribe(ctx context.Context, req pubsub.SubscribeRequest, handler pubsub.Handler) error { - js.l.Debug("STARTING SUbSCRIBE") - var opts []nats.SubOpt var consumerConfig nats.ConsumerConfig @@ -197,8 +194,7 @@ func (js *jetstreamPubSub) Subscribe(ctx context.Context, req pubsub.SubscribeRe var err error var subscription *nats.Subscription if js.meta.streamName != "" { - js.l.Debug("STREAM NAME IS EMPTY") - fmt.Println("STREAM NAME IS NOT EMPTY") + js.l.Debug("Stream name provided. Explicitly creating Consumer") info, err := js.jsc.StreamInfo(js.meta.streamName) if err != nil { @@ -211,7 +207,6 @@ func (js *jetstreamPubSub) Subscribe(ctx context.Context, req pubsub.SubscribeRe } opts = append(opts, nats.Bind(info.Config.Name, consumerInfo.Name)) } - fmt.Println("OPTS: ", opts) if queue := js.meta.queueGroupName; queue != "" { js.l.Debugf("nats: subscribed to subject %s with queue group %s", From 83d7d09ab802b8eb1aa78f771df95e37edd052f3 Mon Sep 17 00:00:00 2001 From: Tomasz Pietrek Date: Mon, 31 Oct 2022 20:11:17 +0100 Subject: [PATCH 06/87] Explicitly use AddConsumer Signed-off-by: Tomasz Pietrek --- pubsub/jetstream/jetstream.go | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/pubsub/jetstream/jetstream.go b/pubsub/jetstream/jetstream.go index fc3756e6c..cd16d7efe 100644 --- a/pubsub/jetstream/jetstream.go +++ b/pubsub/jetstream/jetstream.go @@ -99,6 +99,8 @@ func (js *jetstreamPubSub) Subscribe(ctx context.Context, req pubsub.SubscribeRe var opts []nats.SubOpt var consumerConfig nats.ConsumerConfig + consumerConfig.DeliverSubject = nats.NewInbox() + if v := js.meta.durableName; v != "" { opts = append(opts, nats.Durable(v)) consumerConfig.Durable = v @@ -192,21 +194,20 @@ func (js *jetstreamPubSub) Subscribe(ctx context.Context, req pubsub.SubscribeRe } var err error - var subscription *nats.Subscription - if js.meta.streamName != "" { - js.l.Debug("Stream name provided. Explicitly creating Consumer") - - info, err := js.jsc.StreamInfo(js.meta.streamName) + streamName := js.meta.streamName + if streamName == "" { + streamName, err = js.jsc.StreamNameBySubject(req.Topic) if err != nil { return err } - - consumerInfo, err := js.jsc.AddConsumer(info.Config.Name, &consumerConfig) - if err != nil { - return err - } - opts = append(opts, nats.Bind(info.Config.Name, consumerInfo.Name)) } + var subscription *nats.Subscription + + consumerInfo, err := js.jsc.AddConsumer(streamName, &consumerConfig) + if err != nil { + return err + } + opts = append(opts, nats.Bind(streamName, consumerInfo.Name)) if queue := js.meta.queueGroupName; queue != "" { js.l.Debugf("nats: subscribed to subject %s with queue group %s", From 90bf32280ddb0b635809decbf6177e446ca5de11 Mon Sep 17 00:00:00 2001 From: Tomasz Pietrek Date: Mon, 31 Oct 2022 20:11:39 +0100 Subject: [PATCH 07/87] Update nats client Signed-off-by: Tomasz Pietrek --- go.mod | 2 +- go.sum | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index ca6888ffc..592b05d22 100644 --- a/go.mod +++ b/go.mod @@ -81,7 +81,7 @@ require ( github.com/mrz1836/postmark v1.2.11 github.com/nacos-group/nacos-sdk-go/v2 v2.1.0 github.com/nats-io/nats-server/v2 v2.9.3 - github.com/nats-io/nats.go v1.18.0 + github.com/nats-io/nats.go v1.19.1-0.20221031153055-7ac1087d8c10 github.com/nats-io/nkeys v0.3.0 github.com/nats-io/stan.go v0.10.3 github.com/open-policy-agent/opa v0.45.0 diff --git a/go.sum b/go.sum index 8fcbfbbb0..217e3f6c6 100644 --- a/go.sum +++ b/go.sum @@ -1090,6 +1090,8 @@ github.com/nats-io/nats.go v1.16.0/go.mod h1:BPko4oXsySz4aSWeFgOHLZs3G4Jq4ZAyE6/ github.com/nats-io/nats.go v1.17.0/go.mod h1:BPko4oXsySz4aSWeFgOHLZs3G4Jq4ZAyE6/zMCxRT6w= github.com/nats-io/nats.go v1.18.0 h1:o480Ao6kuSSFyJO75rGTXCEPj7LGkY84C1Ye+Uhm4c0= github.com/nats-io/nats.go v1.18.0/go.mod h1:BPko4oXsySz4aSWeFgOHLZs3G4Jq4ZAyE6/zMCxRT6w= +github.com/nats-io/nats.go v1.19.1-0.20221031153055-7ac1087d8c10 h1:tEeZe9AeM2fb/ntXlrhx7IYGrKEfbmSTrzwsh++wE14= +github.com/nats-io/nats.go v1.19.1-0.20221031153055-7ac1087d8c10/go.mod h1:tLqubohF7t4z3du1QDPYJIQQyhb4wl6DhjxEajSI7UA= github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nkeys v0.3.0 h1:cgM5tL53EvYRU+2YLXIK0G2mJtK12Ft9oeooSZMA2G8= From 54cb93c786777a79ba0f75400f22b1c0120fd148 Mon Sep 17 00:00:00 2001 From: Tomasz Pietrek Date: Mon, 31 Oct 2022 21:07:36 +0100 Subject: [PATCH 08/87] Cleanup the opts Signed-off-by: Tomasz Pietrek --- pubsub/jetstream/jetstream.go | 20 ++------------------ 1 file changed, 2 insertions(+), 18 deletions(-) diff --git a/pubsub/jetstream/jetstream.go b/pubsub/jetstream/jetstream.go index cd16d7efe..b1473e4de 100644 --- a/pubsub/jetstream/jetstream.go +++ b/pubsub/jetstream/jetstream.go @@ -96,65 +96,50 @@ func (js *jetstreamPubSub) Publish(req *pubsub.PublishRequest) error { func (js *jetstreamPubSub) Subscribe(ctx context.Context, req pubsub.SubscribeRequest, handler pubsub.Handler) error { - var opts []nats.SubOpt var consumerConfig nats.ConsumerConfig consumerConfig.DeliverSubject = nats.NewInbox() if v := js.meta.durableName; v != "" { - opts = append(opts, nats.Durable(v)) consumerConfig.Durable = v } if v := js.meta.startTime; !v.IsZero() { - opts = append(opts, nats.StartTime(v)) consumerConfig.OptStartTime = &v } else if v := js.meta.startSequence; v > 0 { - opts = append(opts, nats.StartSequence(v)) consumerConfig.OptStartSeq = v } else if js.meta.deliverAll { - opts = append(opts, nats.DeliverAll()) consumerConfig.DeliverPolicy = nats.DeliverAllPolicy } else { - opts = append(opts, nats.DeliverLast()) consumerConfig.DeliverPolicy = nats.DeliverLastPolicy } if js.meta.flowControl { - opts = append(opts, nats.EnableFlowControl()) consumerConfig.FlowControl = true } if js.meta.ackWait != 0 { - opts = append(opts, nats.AckWait(js.meta.ackWait)) consumerConfig.AckWait = js.meta.ackWait } if js.meta.maxDeliver != 0 { - opts = append(opts, nats.MaxDeliver(js.meta.maxDeliver)) consumerConfig.MaxDeliver = js.meta.maxDeliver } if len(js.meta.backOff) != 0 { - opts = append(opts, nats.BackOff(js.meta.backOff)) consumerConfig.BackOff = js.meta.backOff } if js.meta.maxAckPending != 0 { - opts = append(opts, nats.MaxAckPending(js.meta.maxAckPending)) consumerConfig.MaxAckPending = js.meta.maxAckPending } if js.meta.replicas != 0 { - opts = append(opts, nats.ConsumerReplicas(js.meta.replicas)) consumerConfig.Replicas = js.meta.replicas } if js.meta.memoryStorage { - opts = append(opts, nats.ConsumerMemoryStorage()) consumerConfig.MemoryStorage = true } if js.meta.rateLimit != 0 { - opts = append(opts, nats.RateLimit(js.meta.rateLimit)) consumerConfig.RateLimit = js.meta.rateLimit } if js.meta.hearbeat != 0 { - opts = append(opts, nats.IdleHeartbeat(js.meta.hearbeat)) consumerConfig.Heartbeat = js.meta.hearbeat } @@ -207,15 +192,14 @@ func (js *jetstreamPubSub) Subscribe(ctx context.Context, req pubsub.SubscribeRe if err != nil { return err } - opts = append(opts, nats.Bind(streamName, consumerInfo.Name)) if queue := js.meta.queueGroupName; queue != "" { js.l.Debugf("nats: subscribed to subject %s with queue group %s", req.Topic, js.meta.queueGroupName) - subscription, err = js.jsc.QueueSubscribe(req.Topic, queue, natsHandler, opts...) + subscription, err = js.jsc.QueueSubscribe(req.Topic, queue, natsHandler, nats.Bind(streamName, consumerInfo.Name)) } else { js.l.Debugf("nats: subscribed to subject %s", req.Topic) - subscription, err = js.jsc.Subscribe(req.Topic, natsHandler, opts...) + subscription, err = js.jsc.Subscribe(req.Topic, natsHandler, nats.Bind(streamName, consumerInfo.Name)) } if err != nil { return err From 6df7f09927d251ea7771ca7e3bcd14d0573bcf2b Mon Sep 17 00:00:00 2001 From: Bernd Verst <4535280+berndverst@users.noreply.github.com> Date: Wed, 2 Nov 2022 15:15:45 -0700 Subject: [PATCH 09/87] Fix linter issues, update test config, rebase upstream Signed-off-by: Bernd Verst <4535280+berndverst@users.noreply.github.com> --- go.mod | 123 +- go.sum | 1257 ++++++----------- pubsub/kubemq/kubemq.go | 3 +- pubsub/kubemq/kubemq_events.go | 8 +- pubsub/kubemq/kubemq_events_test.go | 20 +- pubsub/kubemq/kubemq_eventstore.go | 8 +- pubsub/kubemq/kubemq_eventstore_test.go | 23 +- pubsub/kubemq/kubemq_test.go | 62 +- pubsub/kubemq/metadata.go | 3 +- pubsub/kubemq/metadata_test.go | 127 +- .../bindings/alicloud/dubbo/go.sum | 2 +- tests/config/pubsub/tests.yml | 32 +- 12 files changed, 642 insertions(+), 1026 deletions(-) diff --git a/go.mod b/go.mod index 9f03b50c9..a8b693d85 100644 --- a/go.mod +++ b/go.mod @@ -4,8 +4,8 @@ go 1.19 require ( cloud.google.com/go/datastore v1.8.0 - cloud.google.com/go/pubsub v1.25.1 - cloud.google.com/go/secretmanager v1.7.0 + cloud.google.com/go/pubsub v1.26.0 + cloud.google.com/go/secretmanager v1.8.0 cloud.google.com/go/storage v1.27.0 dubbo.apache.org/dubbo-go/v3 v3.0.3-0.20220610080020-48691a404537 github.com/Azure/azure-amqp-common-go/v3 v3.2.3 @@ -13,7 +13,7 @@ require ( github.com/Azure/azure-sdk-for-go v65.0.0+incompatible github.com/Azure/azure-sdk-for-go/sdk/azcore v1.1.4 github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.1.0 - github.com/Azure/azure-sdk-for-go/sdk/data/azappconfig v0.4.1 + github.com/Azure/azure-sdk-for-go/sdk/data/azappconfig v0.4.3 github.com/Azure/azure-sdk-for-go/sdk/data/azcosmos v0.3.2 github.com/Azure/azure-sdk-for-go/sdk/data/aztables v1.0.1 github.com/Azure/azure-sdk-for-go/sdk/keyvault/azsecrets v0.10.1 @@ -32,18 +32,18 @@ require ( github.com/alibaba/sentinel-golang v1.0.4 github.com/alibabacloud-go/darabonba-openapi v0.2.1 github.com/alibabacloud-go/oos-20190601 v1.0.4 - github.com/alibabacloud-go/tea v1.1.19 + github.com/alibabacloud-go/tea v1.1.20 github.com/alibabacloud-go/tea-utils v1.4.5 github.com/alicebob/miniredis/v2 v2.23.0 - github.com/aliyun/aliyun-log-go-sdk v0.1.38 + github.com/aliyun/aliyun-log-go-sdk v0.1.39 github.com/aliyun/aliyun-oss-go-sdk v2.2.5+incompatible github.com/aliyun/aliyun-tablestore-go-sdk v1.7.7 - github.com/apache/dubbo-go-hessian2 v1.11.1 + github.com/apache/dubbo-go-hessian2 v1.11.3 github.com/apache/pulsar-client-go v0.9.0 github.com/apache/rocketmq-client-go/v2 v2.1.1-rc2 - github.com/aws/aws-sdk-go v1.44.119 - github.com/bradfitz/gomemcache v0.0.0-20220106215444-fb4bf637b56d - github.com/camunda/zeebe/clients/go/v8 v8.1.2 + github.com/aws/aws-sdk-go v1.44.128 + github.com/bradfitz/gomemcache v0.0.0-20221031212613-62deef7fc822 + github.com/camunda/zeebe/clients/go/v8 v8.1.3 github.com/cenkalti/backoff/v4 v4.1.3 github.com/cinience/go_rocketmq v0.0.2 github.com/coreos/go-oidc v2.2.1+incompatible @@ -51,10 +51,10 @@ require ( github.com/dancannon/gorethink v4.0.0+incompatible github.com/dapr/kit v0.0.2 github.com/denisenkom/go-mssqldb v0.12.3 - github.com/dghubble/go-twitter v0.0.0-20220816163853-8a0df96f1e6d + github.com/dghubble/go-twitter v0.0.0-20221024160433-0cc1e72ed6d8 github.com/dghubble/oauth1 v0.7.1 github.com/didip/tollbooth v4.0.2+incompatible - github.com/eclipse/paho.mqtt.golang v1.4.2-0.20221018190109-a1800d8df9a4 + github.com/eclipse/paho.mqtt.golang v1.4.2 github.com/fasthttp-contrib/sessions v0.0.0-20160905201309-74f6ac73d5d5 github.com/ghodss/yaml v1.0.0 github.com/go-redis/redis/v8 v8.11.5 @@ -71,19 +71,23 @@ require ( github.com/hashicorp/golang-lru v0.5.4 github.com/hazelcast/hazelcast-go-client v0.0.0-20190530123621-6cf767c2f31a github.com/huaweicloud/huaweicloud-sdk-go-obs v3.21.12+incompatible - github.com/huaweicloud/huaweicloud-sdk-go-v3 v0.1.5 + github.com/huaweicloud/huaweicloud-sdk-go-v3 v0.1.6 github.com/influxdata/influxdb-client-go v1.4.0 - github.com/jackc/pgx/v5 v5.0.3 + github.com/jackc/pgx/v5 v5.0.4 github.com/json-iterator/go v1.1.12 - github.com/kubemq-io/kubemq-go v1.7.6 - github.com/labd/commercetools-go-sdk v1.1.0 + github.com/kataras/go-errors v0.0.3 // indirect + github.com/kataras/go-serializer v0.0.4 // indirect github.com/machinebox/graphql v0.2.2 github.com/matoous/go-nanoid/v2 v2.0.0 + github.com/matryer/is v1.4.0 // indirect + github.com/mattn/go-isatty v0.0.14 // indirect + github.com/microcosm-cc/bluemonday v1.0.21 // indirect + github.com/miekg/dns v1.1.50 // indirect github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 - github.com/mrz1836/postmark v1.2.11 - github.com/nacos-group/nacos-sdk-go/v2 v2.1.0 - github.com/nats-io/nats-server/v2 v2.9.3 - github.com/nats-io/nats.go v1.18.0 + github.com/mrz1836/postmark v1.3.0 + github.com/nacos-group/nacos-sdk-go/v2 v2.1.2 + github.com/nats-io/nats-server/v2 v2.9.4 + github.com/nats-io/nats.go v1.19.0 github.com/nats-io/nkeys v0.3.0 github.com/nats-io/stan.go v0.10.3 github.com/open-policy-agent/opa v0.45.0 @@ -91,42 +95,52 @@ require ( github.com/pashagolub/pgxmock/v2 v2.1.0 github.com/patrickmn/go-cache v2.1.0+incompatible github.com/pkg/errors v0.9.1 - github.com/rabbitmq/amqp091-go v1.5.0 + github.com/pquerna/cachecontrol v0.0.0-20180517163645-1555304b9b35 // indirect github.com/robfig/cron/v3 v3.0.1 github.com/samuel/go-zookeeper v0.0.0-20201211165307-7117e9ea2414 github.com/sendgrid/sendgrid-go v3.12.0+incompatible github.com/sijms/go-ora/v2 v2.5.3 - github.com/stretchr/testify v1.8.0 + github.com/stretchr/testify v1.8.1 github.com/supplyon/gremcos v0.1.38 - github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.518 - github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssm v1.0.518 - github.com/valyala/fasthttp v1.40.0 + github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.527 + github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssm v1.0.527 + github.com/valyala/fasthttp v1.41.0 github.com/vmware/vmware-go-kcl v1.5.0 - github.com/wapc/wapc-go v0.5.4 + github.com/wapc/wapc-go v0.5.5 github.com/xdg-go/scram v1.1.1 go.mongodb.org/mongo-driver v1.10.3 + go.temporal.io/api v1.12.0 + go.temporal.io/sdk v1.17.0 go.uber.org/atomic v1.10.0 go.uber.org/ratelimit v0.2.0 golang.org/x/crypto v0.1.0 golang.org/x/net v0.1.0 golang.org/x/oauth2 v0.1.0 - google.golang.org/api v0.100.0 - google.golang.org/genproto v0.0.0-20221018160656-63c7b68cfc55 + google.golang.org/api v0.101.0 google.golang.org/grpc v1.50.1 gopkg.in/couchbase/gocb.v1 v1.6.7 gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df + gopkg.in/gorethink/gorethink.v4 v4.1.0 // indirect + gopkg.in/kataras/go-serializer.v0 v0.0.4 // indirect + gopkg.in/square/go-jose.v2 v2.5.1 // indirect gopkg.in/yaml.v3 v3.0.1 - k8s.io/api v0.25.3 - k8s.io/apiextensions-apiserver v0.25.3 - k8s.io/apimachinery v0.25.3 - k8s.io/client-go v0.25.3 - k8s.io/utils v0.0.0-20221012122500-cfd413dd9e85 + k8s.io/api v0.23.0 + k8s.io/apiextensions-apiserver v0.23.0 + k8s.io/apimachinery v0.23.0 + k8s.io/client-go v0.23.0 ) require ( - cloud.google.com/go v0.104.0 // indirect + github.com/kubemq-io/kubemq-go v1.7.6 + github.com/labd/commercetools-go-sdk v1.1.0 + github.com/rabbitmq/amqp091-go v1.5.0 + k8s.io/utils v0.0.0-20210930125809-cb0fa318a74b +) + +require ( + cloud.google.com/go v0.105.0 // indirect cloud.google.com/go/compute v1.10.0 // indirect - cloud.google.com/go/iam v0.3.0 // indirect + cloud.google.com/go/iam v0.6.0 // indirect contrib.go.opencensus.io/exporter/prometheus v0.4.1 // indirect github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect github.com/99designs/keyring v1.2.1 // indirect @@ -143,8 +157,6 @@ require ( github.com/AzureAD/microsoft-authentication-library-for-go v0.5.1 // indirect github.com/DataDog/zstd v1.5.0 // indirect github.com/OneOfOne/xxhash v1.2.8 // indirect - github.com/PuerkitoBio/purell v1.1.1 // indirect - github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect github.com/RoaringBitmap/roaring v1.1.0 // indirect github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d // indirect github.com/Workiva/go-datastructures v1.0.53 // indirect @@ -188,8 +200,8 @@ require ( github.com/eapache/go-resiliency v1.3.0 // indirect github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21 // indirect github.com/eapache/queue v1.1.0 // indirect - github.com/emicklei/go-restful/v3 v3.8.0 // indirect github.com/emirpasic/gods v1.12.0 // indirect + github.com/facebookgo/clock v0.0.0-20150410010913-600d898af40a // indirect github.com/fatih/color v1.13.0 // indirect github.com/gavv/httpexpect v2.0.0+incompatible // indirect github.com/go-kit/kit v0.10.0 // indirect @@ -197,9 +209,6 @@ require ( github.com/go-logfmt/logfmt v0.5.1 // indirect github.com/go-logr/logr v1.2.3 // indirect github.com/go-ole/go-ole v1.2.4 // indirect - github.com/go-openapi/jsonpointer v0.19.5 // indirect - github.com/go-openapi/jsonreference v0.19.5 // indirect - github.com/go-openapi/swag v0.19.14 // indirect github.com/go-ozzo/ozzo-validation/v4 v4.3.0 // indirect github.com/go-playground/locales v0.14.0 // indirect github.com/go-playground/universal-translator v0.18.0 // indirect @@ -210,7 +219,9 @@ require ( github.com/gofrs/uuid v3.3.0+incompatible // indirect github.com/gogap/errors v0.0.0-20200228125012-531a6449b28c // indirect github.com/gogap/stack v0.0.0-20150131034635-fef68dddd4f8 // indirect + github.com/gogo/googleapis v1.4.1 // indirect github.com/gogo/protobuf v1.3.2 // indirect + github.com/gogo/status v1.1.1 // indirect github.com/golang-jwt/jwt v3.2.2+incompatible // indirect github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe // indirect github.com/golang-sql/sqlexp v0.1.0 // indirect @@ -223,7 +234,9 @@ require ( github.com/google/go-querystring v1.1.0 // indirect github.com/google/gofuzz v1.1.0 // indirect github.com/googleapis/enterprise-certificate-proxy v0.2.0 // indirect + github.com/googleapis/gnostic v0.5.5 // indirect github.com/gorilla/websocket v1.5.0 // indirect + github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 // indirect github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed // indirect github.com/hashicorp/errwrap v1.1.0 // indirect @@ -232,7 +245,7 @@ require ( github.com/hashicorp/go-immutable-radix v1.3.1 // indirect github.com/hashicorp/go-rootcerts v1.0.2 // indirect github.com/hashicorp/go-uuid v1.0.3 // indirect - github.com/hashicorp/serf v0.9.6 // indirect + github.com/hashicorp/serf v0.9.7 // indirect github.com/imdario/mergo v0.3.6 // indirect github.com/imkira/go-interpol v1.1.0 // indirect github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839 // indirect @@ -246,11 +259,8 @@ require ( github.com/jcmturner/rpc/v2 v2.0.3 // indirect github.com/jinzhu/copier v0.3.5 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect - github.com/josharian/intern v1.0.0 // indirect github.com/jpillora/backoff v1.0.0 // indirect github.com/k0kubun/pp v3.0.1+incompatible // indirect - github.com/kataras/go-errors v0.0.3 // indirect - github.com/kataras/go-serializer v0.0.4 // indirect github.com/klauspost/compress v1.15.11 // indirect github.com/knadh/koanf v1.4.1 // indirect github.com/kubemq-io/protobuf v1.3.1 // indirect @@ -260,14 +270,9 @@ require ( github.com/leodido/go-urn v1.2.1 // indirect github.com/linkedin/goavro/v2 v2.9.8 // indirect github.com/magiconair/properties v1.8.6 // indirect - github.com/mailru/easyjson v0.7.6 // indirect - github.com/matryer/is v1.4.0 // indirect github.com/mattn/go-colorable v0.1.12 // indirect - github.com/mattn/go-ieproxy v0.0.0-20190702010315-6dee0af9227d // indirect - github.com/mattn/go-isatty v0.0.14 // indirect + github.com/mattn/go-ieproxy v0.0.1 // indirect github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 // indirect - github.com/microcosm-cc/bluemonday v1.0.21 // indirect - github.com/miekg/dns v1.1.43 // indirect github.com/minio/highwayhash v1.0.2 // indirect github.com/mitchellh/copystructure v1.2.0 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect @@ -278,24 +283,24 @@ require ( github.com/moul/http2curl v1.0.0 // indirect github.com/mschoch/smat v0.2.0 // indirect github.com/mtibben/percent v0.2.1 // indirect - github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/natefinch/lumberjack v2.0.0+incompatible // indirect github.com/nats-io/jwt/v2 v2.3.0 // indirect github.com/nats-io/nats-streaming-server v0.25.2 // indirect github.com/nats-io/nuid v1.0.1 // indirect github.com/opentracing/opentracing-go v1.2.0 // indirect + github.com/pborman/uuid v1.2.1 // indirect github.com/pelletier/go-toml v1.9.4 // indirect github.com/pierrec/lz4 v2.6.0+incompatible // indirect github.com/pierrec/lz4/v4 v4.1.17 // indirect github.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021 // indirect github.com/prometheus/client_golang v1.13.0 // indirect github.com/prometheus/client_model v0.2.0 // indirect github.com/prometheus/common v0.37.0 // indirect github.com/prometheus/procfs v0.8.0 // indirect github.com/prometheus/statsd_exporter v0.21.0 // indirect github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect + github.com/robfig/cron v1.2.0 // indirect github.com/rs/zerolog v1.25.0 // indirect github.com/russross/blackfriday v1.6.0 // indirect github.com/satori/go.uuid v1.2.1-0.20181028125025-b2ce2384e17b // indirect @@ -308,10 +313,10 @@ require ( github.com/spf13/cast v1.4.1 // indirect github.com/spf13/pflag v1.0.5 // indirect github.com/stathat/consistent v1.0.0 // indirect - github.com/stretchr/objx v0.4.0 // indirect + github.com/stretchr/objx v0.5.0 // indirect github.com/tchap/go-patricia/v2 v2.3.1 // indirect - github.com/tetratelabs/wazero v1.0.0-pre.2 // indirect - github.com/tidwall/gjson v1.9.3 // indirect + github.com/tetratelabs/wazero v1.0.0-pre.3 // indirect + github.com/tidwall/gjson v1.13.0 // indirect github.com/tidwall/match v1.1.1 // indirect github.com/tidwall/pretty v1.2.0 // indirect github.com/tjfoc/gmsm v1.3.2 // indirect @@ -333,13 +338,16 @@ require ( go.opencensus.io v0.23.0 // indirect go.uber.org/multierr v1.7.0 // indirect go.uber.org/zap v1.21.0 // indirect - golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0 // indirect + golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect + golang.org/x/sync v0.1.0 // indirect golang.org/x/sys v0.1.0 // indirect golang.org/x/term v0.1.0 // indirect golang.org/x/text v0.4.0 // indirect golang.org/x/time v0.0.0-20220922220347-f3bd1da661af // indirect + golang.org/x/tools v0.1.12 // indirect golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect google.golang.org/appengine v1.6.7 // indirect + google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c // indirect google.golang.org/protobuf v1.28.1 // indirect gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect gopkg.in/couchbase/gocbcore.v7 v7.1.18 // indirect @@ -347,12 +355,9 @@ require ( gopkg.in/couchbaselabs/gojcbmock.v1 v1.0.4 // indirect gopkg.in/couchbaselabs/jsonx.v1 v1.0.1 // indirect gopkg.in/fatih/pool.v2 v2.0.0 // indirect - gopkg.in/gorethink/gorethink.v4 v4.1.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/ini.v1 v1.66.6 // indirect - gopkg.in/kataras/go-serializer.v0 v0.0.4 // indirect gopkg.in/natefinch/lumberjack.v2 v2.0.0 // indirect - gopkg.in/square/go-jose.v2 v2.4.1 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect k8s.io/klog/v2 v2.80.1 // indirect k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1 // indirect diff --git a/go.sum b/go.sum index 53d33851c..865afc28b 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,3 @@ -bazil.org/fuse v0.0.0-20160811212531-371fbbdaa898/go.mod h1:Xbm+BRKSBEpa4q4hTSxohYNQpsxXPbPry4JJWOB3LB8= -bazil.org/fuse v0.0.0-20200407214033-5883e5a4b512/go.mod h1:FbcW6z/2VytnFDhZfumh8Ss8zxHE6qpMP5sHTRe0EaM= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= @@ -22,16 +20,18 @@ cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= cloud.google.com/go v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY= cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM= -cloud.google.com/go v0.86.0/go.mod h1:YG2MRW8zzPSZaztnTZtxbMPK2VYaHg4NTDYZMG+5ZqQ= cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY= cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ= cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= -cloud.google.com/go v0.100.1/go.mod h1:fs4QogzfH5n2pBXBP9vRiU+eCny7lD2vmFZy79Iuw1U= -cloud.google.com/go v0.100.2 h1:t9Iw5QH5v4XtlEQaCtUY7x6sCABps8sW0acw7e2WQ6Y= 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.105.0 h1:DNtEKRBAAzeS4KyIory52wWHuClNaXJ5x1F7xa4q+5Y= +cloud.google.com/go v0.105.0/go.mod h1:PrLgOJNe5nfE9UMxKxgXj4mD3voiP+YQ6gdt6KMFOKM= +cloud.google.com/go/asset v1.5.0/go.mod h1:5mfs8UvcM5wHhqtSv8J1CtxxaQq3AdBxxQi2jGW/K4o= 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= @@ -40,32 +40,40 @@ cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4g cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= 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 h1:b1zWmYuuHz7gO9kDcM/EpHGr06UgsYNRpNJzI2kFiLM= 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/compute v1.10.0 h1:aoLIYaA1fX3ywihqpBk2APQKOo20nXsp1GEZQbx5Jk4= +cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= -cloud.google.com/go/datastore v1.1.0 h1:/May9ojXjRkPBNVrq+oWLqmWCkr4OU5uRY29bu0mRyQ= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= +cloud.google.com/go/datastore v1.8.0 h1:2qo2G7hABSeqswa+5Ga3+QB8/ZwKOJmDsCISM9scmsU= +cloud.google.com/go/datastore v1.8.0/go.mod h1:q1CpHVByTlXppdqTcu4LIhCsTn3fhtZ5R7+TajciO+M= cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= cloud.google.com/go/firestore v1.6.1/go.mod h1:asNXNOzBdyVQmEU+ggO8UPodTkEVFW5Qx+rwHnAz+EY= -cloud.google.com/go/iam v0.1.0/go.mod h1:vcUNEa0pEm0qRVpmWepWaFMIAI8/hjB9mO8rNCJtF6c= -cloud.google.com/go/iam v0.3.0 h1:exkAomrVUuzx9kWFI1wm3KI0uoDeUFPB4kKGzx6x+Gc= cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= -cloud.google.com/go/kms v1.4.0 h1:iElbfoE61VeLhnZcGOltqL8HIly8Nhbe5t6JlH9GXjo= -cloud.google.com/go/kms v1.4.0/go.mod h1:fajBHndQ+6ubNw6Ss2sSd+SWvjL26RNo/dr7uxsnnOA= +cloud.google.com/go/iam v0.6.0 h1:nsqQC88kT5Iwlm4MeNGTpfMWddp6NB/UOLFTH6m1QfQ= +cloud.google.com/go/iam v0.6.0/go.mod h1:+1AH33ueBne5MzYccyMHtEKqLE4/kJOibtffMHDMFMc= +cloud.google.com/go/kms v1.5.0 h1:uc58n3b/n/F2yDMJzHMbXORkJSh3fzO4/+jju6eR7Zg= +cloud.google.com/go/longrunning v0.1.1 h1:y50CXG4j0+qvEukslYFBCrzaXX0qpFbBzc3PchSu/LE= 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/pubsub v1.12.2 h1:KM5Lwh+3zUj7j/gK7DyW5wubJuI9OtzlxewndRFN/LI= -cloud.google.com/go/pubsub v1.12.2/go.mod h1:BmI/dqa6eXfm8WTp+JIN6d6vtVGq+vcsnglFKn/aVkY= -cloud.google.com/go/secretmanager v1.4.0 h1:Cl+kDYvKHjPQ1l2DZDr2FG/cXUzNGCZkh05BARgddo8= -cloud.google.com/go/secretmanager v1.4.0/go.mod h1:h2VZz7Svt1W9/YVl7mfcX9LddvS6SOLOvMoOXBhYT1k= +cloud.google.com/go/pubsub v1.26.0 h1:Y/HcMxVXgkUV2pYeLMUkclMg0ue6U0jVyI5xEARQ4zA= +cloud.google.com/go/pubsub v1.26.0/go.mod h1:QgBH3U/jdJy/ftjPhTkyXNj543Tin1pRYcdcPRnFIRI= +cloud.google.com/go/secretmanager v1.8.0 h1:4wYWL2t10q+xUtFFS0QuWlqwQguMrwC6FDpjtMM6cUI= +cloud.google.com/go/secretmanager v1.8.0/go.mod h1:hnVgi/bN5MYHd3Gt0SPuTPPp5ENina1/LxM+2W9U9J4= +cloud.google.com/go/security v1.5.0/go.mod h1:lgxGdyOKKjHL4YG3/YwIL2zLqMFCKs0UbQwgyZmfJl4= 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 h1:STgFzyU5/8miMl0//zKh2aQeTyeaUH3WN9bSUiJ09bA= 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.27.0 h1:YOO045NZI9RKfCj1c5A/ZtuuENUc8OAW+gHdGnDgyMQ= +cloud.google.com/go/storage v1.27.0/go.mod h1:x9DOL8TK/ygDUMieqwfhdpQryTeEkhGKMi80i/iqR2s= contrib.go.opencensus.io/exporter/prometheus v0.4.1 h1:oObVeKo2NxpdF/fIfrPsNj6K0Prg0R0mHM+uANlYMiM= contrib.go.opencensus.io/exporter/prometheus v0.4.1/go.mod h1:t9wvfitlUjGXG2IXAZsuFq26mDGid/JwCEXp+gTG/9U= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= @@ -73,10 +81,8 @@ dubbo.apache.org/dubbo-go/v3 v3.0.3-0.20220610080020-48691a404537 h1:NblXw7tbHBF dubbo.apache.org/dubbo-go/v3 v3.0.3-0.20220610080020-48691a404537/go.mod h1:O7eTHAilCWlqBjEkG2MW9khZFImiARb/tSOE8PJas+g= github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 h1:/vQbFIOMbk2FiG/kXiLl8BRyzTWDw7gX/Hz7Dd5eDMs= github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4/go.mod h1:hN7oaIRCjzsZ2dE+yG5k+rsdt3qcwykqK6HVGcKwsw4= -github.com/99designs/keyring v1.1.6/go.mod h1:16e0ds7LGQQcT59QqkTg72Hh5ShM51Byv5PEmW6uoRU= -github.com/99designs/keyring v1.2.0 h1:MbMWdfhzVw1DfC7ak+PGnWiu1b1oUkiQANyfAEMVaPA= -github.com/99designs/keyring v1.2.0/go.mod h1:ETJn2A9cfvJKq1Q4FeOc+eetK52Ik0kUGog7Uy+xvX8= -github.com/AdaLogics/go-fuzz-headers v0.0.0-20210715213245-6c3934b029d8/go.mod h1:CzsSbkDixRphAF5hS6wbMKq0eI6ccJRb7/A0M6JBnwg= +github.com/99designs/keyring v1.2.1 h1:tYLp1ULvO7i3fI5vE21ReQuj99QFSs7lGm0xWyJo87o= +github.com/99designs/keyring v1.2.1/go.mod h1:fc+wB5KTk9wQ9sDx0kFXB3A0MaeGHM9AwRStKOQ5vOA= github.com/AthenZ/athenz v1.10.39 h1:mtwHTF/v62ewY2Z5KWhuZgVXftBej1/Tn80zx4DcawY= github.com/AthenZ/athenz v1.10.39/go.mod h1:3Tg8HLsiQZp81BJY58JBeU2BR6B/H4/0MQGfCwhHNEA= github.com/Azure/azure-amqp-common-go/v3 v3.2.3 h1:uDF62mbd9bypXWi19V1bN5NZEO84JqgmI5G73ibAmrk= @@ -85,62 +91,58 @@ github.com/Azure/azure-event-hubs-go/v3 v3.3.18 h1:jgWDk2qmknA0UsfyzjHiW5yciOw3a github.com/Azure/azure-event-hubs-go/v3 v3.3.18/go.mod h1:R5H325+EzgxcBDkUerEwtor7ZQg77G7HiOTwpcuIVXY= github.com/Azure/azure-pipeline-go v0.1.8/go.mod h1:XA1kFWRVhSK+KNFiOhfv83Fv8L9achrP7OxIzeTn1Yg= github.com/Azure/azure-pipeline-go v0.1.9/go.mod h1:XA1kFWRVhSK+KNFiOhfv83Fv8L9achrP7OxIzeTn1Yg= +github.com/Azure/azure-pipeline-go v0.2.2 h1:6oiIS9yaG6XCCzhgAgKFfIWyo4LLCiDhZot6ltoThhY= github.com/Azure/azure-pipeline-go v0.2.2/go.mod h1:4rQ/NZncSvGqNkkOsNpOU1tgoNuIlp9AfUH5G1tvCHc= -github.com/Azure/azure-pipeline-go v0.2.3 h1:7U9HBg1JFK3jHl5qmo4CTZKFTVgMwdFHMVtCdfBE21U= -github.com/Azure/azure-pipeline-go v0.2.3/go.mod h1:x841ezTBIMG6O3lAcl8ATHnsOPVl2bqk7S3ta6S6u4k= -github.com/Azure/azure-sdk-for-go v16.2.1+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= github.com/Azure/azure-sdk-for-go v51.1.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= -github.com/Azure/azure-sdk-for-go v56.3.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= github.com/Azure/azure-sdk-for-go v65.0.0+incompatible h1:HzKLt3kIwMm4KeJYTdx9EbjRYTySD/t8i1Ee/W5EGXw= github.com/Azure/azure-sdk-for-go v65.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.1.3 h1:8LoU8N2lIUzkmstvwXvVfniMZlFbesfT2AmA1aqvRr8= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.1.3/go.mod h1:uGG2W01BaETf0Ozp+QxxKJdMBNRWPdstHG0Fmdwn1/U= +github.com/Azure/azure-sdk-for-go/sdk/azcore v0.19.0/go.mod h1:h6H6c8enJmmocHUbLiiGY6sx7f9i+X3m1CHdd5c6Rdw= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.1.4 h1:pqrAR74b6EoR4kcxF7L7Wg2B8Jgil9UUZtMvxhEFqWo= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.1.4/go.mod h1:uGG2W01BaETf0Ozp+QxxKJdMBNRWPdstHG0Fmdwn1/U= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v0.11.0/go.mod h1:HcM1YX14R7CJcghJGOYCgdezslRSVzqwLf/q+4Y2r/0= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.1.0 h1:QkAcEIAKbNL4KoFr4SathZPhDhF4mVwpBMFlYjyAqy8= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.1.0/go.mod h1:bhXu1AjYL+wutSL/kpSq6s7733q2Rb0yuot9Zgfqa/0= -github.com/Azure/azure-sdk-for-go/sdk/data/azappconfig v0.4.1 h1:tuDqyaz/iP/1vkmu4aWwhKDe2nSuMMpVm0FERxwMC60= -github.com/Azure/azure-sdk-for-go/sdk/data/azappconfig v0.4.1/go.mod h1:p74+tP95m8830ypJk53L93+BEsjTKY4SKQ75J2NmS5U= +github.com/Azure/azure-sdk-for-go/sdk/data/azappconfig v0.4.3 h1:QzjiMJn/pBxOq1xA3F6ODUvO1agmt7+mI+DZEx6dPtc= +github.com/Azure/azure-sdk-for-go/sdk/data/azappconfig v0.4.3/go.mod h1:p74+tP95m8830ypJk53L93+BEsjTKY4SKQ75J2NmS5U= github.com/Azure/azure-sdk-for-go/sdk/data/azcosmos v0.3.2 h1:yJegJqjhrMJ3Oe5s43jOTGL2AsE7pJyx+7Yqls/65tw= github.com/Azure/azure-sdk-for-go/sdk/data/azcosmos v0.3.2/go.mod h1:Fy3bbChFm4cZn6oIxYYqKB2FG3rBDxk3NZDLDJCHl+Q= github.com/Azure/azure-sdk-for-go/sdk/data/aztables v1.0.1 h1:bFa9IcjvrCber6gGgDAUZ+I2bO8J7s8JxXmu9fhi2ss= github.com/Azure/azure-sdk-for-go/sdk/data/aztables v1.0.1/go.mod h1:l3wvZkG9oW07GLBW5Cd0WwG5asOfJ8aqE8raUvNzLpk= +github.com/Azure/azure-sdk-for-go/sdk/internal v0.7.0/go.mod h1:yqy467j36fJxcRV2TzfVZ1pCb5vxm4BtZPUdYWe/Xo8= github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.0 h1:jp0dGvZ7ZK0mgqnTSClMxa5xuRL7NZgHameVYF6BurY= github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.0/go.mod h1:eWRD7oawr1Mu1sLCawqVc0CUiF43ia3qQMxLscsKQ9w= github.com/Azure/azure-sdk-for-go/sdk/keyvault/azsecrets v0.10.1 h1:AhZnZn4kUKz36bHJ8AK/FH2tH/q3CAkG+Gme+2ibuak= github.com/Azure/azure-sdk-for-go/sdk/keyvault/azsecrets v0.10.1/go.mod h1:S78i9yTr4o/nXlH76bKjGUye9Z2wSxO5Tz7GoDr4vfI= github.com/Azure/azure-sdk-for-go/sdk/keyvault/internal v0.7.0 h1:Lg6BW0VPmCwcMlvOviL3ruHFO+H9tZNqscK0AeuFjGM= github.com/Azure/azure-sdk-for-go/sdk/keyvault/internal v0.7.0/go.mod h1:9V2j0jn9jDEkCkv8w/bKTNppX/d0FVA1ud77xCIP4KA= -github.com/Azure/azure-sdk-for-go/sdk/messaging/azservicebus v1.1.0 h1:ebO2jmZyctLSMBTvjsxZv/Ml3rGsvnJHUImVWotBl7I= -github.com/Azure/azure-sdk-for-go/sdk/messaging/azservicebus v1.1.0/go.mod h1:LH9XQnMr2ZYxQdVdCrzLO9mxeDyrDFa6wbSI3x5zCZk= +github.com/Azure/azure-sdk-for-go/sdk/messaging/azservicebus v1.1.1 h1:Zm7A6yKHT3evC/0lquPWJ9hrkRGVIeZOmIvHPv6xV9Q= +github.com/Azure/azure-sdk-for-go/sdk/messaging/azservicebus v1.1.1/go.mod h1:LH9XQnMr2ZYxQdVdCrzLO9mxeDyrDFa6wbSI3x5zCZk= github.com/Azure/azure-storage-blob-go v0.6.0/go.mod h1:oGfmITT1V6x//CswqY2gtAHND+xIP64/qL7a5QJix0Y= github.com/Azure/azure-storage-blob-go v0.10.0 h1:evCwGreYo3XLeBV4vSxLbLiYb6e0SzsJiXQVRGsRXxs= github.com/Azure/azure-storage-blob-go v0.10.0/go.mod h1:ep1edmW+kNQx4UfWM9heESNmQdijykocJ0YOxmMX8SE= github.com/Azure/azure-storage-queue-go v0.0.0-20191125232315-636801874cdd h1:b3wyxBl3vvr15tUAziPBPK354y+LSdfPCpex5oBttHo= github.com/Azure/azure-storage-queue-go v0.0.0-20191125232315-636801874cdd/go.mod h1:K6am8mT+5iFXgingS9LUc7TmbsW6XBw3nxaRyaMyWc8= github.com/Azure/go-amqp v0.17.0/go.mod h1:9YJ3RhxRT1gquYnzpZO1vcYMMpAdJT+QEg6fwmw9Zlg= -github.com/Azure/go-amqp v0.17.4 h1:6t9wEiwA4uXMRoUj3Cd3K2gmH8cW8ylizmBnSeF0bzM= -github.com/Azure/go-amqp v0.17.4/go.mod h1:9YJ3RhxRT1gquYnzpZO1vcYMMpAdJT+QEg6fwmw9Zlg= -github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= +github.com/Azure/go-amqp v0.17.5 h1:7Lsi9H9ijCAfqOaMiNmQ4c+GL9bdrpCjebNKhV/eQ+c= +github.com/Azure/go-amqp v0.17.5/go.mod h1:9YJ3RhxRT1gquYnzpZO1vcYMMpAdJT+QEg6fwmw9Zlg= github.com/Azure/go-ansiterm v0.0.0-20210608223527-2377c96fe795/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= -github.com/Azure/go-autorest v10.8.1+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= github.com/Azure/go-autorest v14.2.0+incompatible h1:V5VMDjClD3GiElqLWO7mz2MxNAK/vTfRHdAubSIPRgs= github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= github.com/Azure/go-autorest/autorest v0.9.3/go.mod h1:GsRuLYvwzLjjjRoWEIyMUaYq8GNUx2nRB378IPt/1p0= -github.com/Azure/go-autorest/autorest v0.11.1/go.mod h1:JFgpikqFJ/MleTTxwepExTKnFUKKszPS8UavbQYUMuw= github.com/Azure/go-autorest/autorest v0.11.18/go.mod h1:dSiJPy22c3u0OtOKDNttNgqpNFY/GeWa7GH/Pz56QRA= github.com/Azure/go-autorest/autorest v0.11.24/go.mod h1:G6kyRlFnTuSbEYkQGawPfsCswgme4iYf6rfSKUDzbCc= -github.com/Azure/go-autorest/autorest v0.11.27 h1:F3R3q42aWytozkV8ihzcgMO4OA4cuqr3bNlsEuF6//A= -github.com/Azure/go-autorest/autorest v0.11.27/go.mod h1:7l8ybrIdUmGqZMTD0sRtAr8NvbHjfofbf8RSP2q7w7U= +github.com/Azure/go-autorest/autorest v0.11.28 h1:ndAExarwr5Y+GaHE6VCaY1kyS/HwwGGyuimVhWsHOEM= +github.com/Azure/go-autorest/autorest v0.11.28/go.mod h1:MrkzG3Y3AH668QyF9KRk5neJnGgmhQ6krbhR8Q5eMvA= github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0= github.com/Azure/go-autorest/autorest/adal v0.8.0/go.mod h1:Z6vX6WXXuyieHAXwMj0S6HY6e6wcHn37qQMBQlvY3lc= github.com/Azure/go-autorest/autorest/adal v0.8.1/go.mod h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q= github.com/Azure/go-autorest/autorest/adal v0.8.3/go.mod h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q= -github.com/Azure/go-autorest/autorest/adal v0.9.0/go.mod h1:/c022QCutn2P7uY+/oQWWNcK9YU+MH96NgK+jErpbcg= -github.com/Azure/go-autorest/autorest/adal v0.9.5/go.mod h1:B7KF7jKIeC9Mct5spmyCB/A8CG/sEz1vwIRGv/bbw7A= github.com/Azure/go-autorest/autorest/adal v0.9.13/go.mod h1:W/MM4U6nLxnIskrw4UwWzlHfGjwUS50aOsc/I3yuU8M= -github.com/Azure/go-autorest/autorest/adal v0.9.18 h1:kLnPsRjzZZUF3K5REu/Kc+qMQrvuza2bwSnNdhmzLfQ= github.com/Azure/go-autorest/autorest/adal v0.9.18/go.mod h1:XVVeme+LZwABT8K5Lc3hA4nAe8LDBVle26gTrguhhPQ= +github.com/Azure/go-autorest/autorest/adal v0.9.21 h1:jjQnVFXPfekaqb8vIsv2G1lxshoW+oGv4MDlhRtnYZk= +github.com/Azure/go-autorest/autorest/adal v0.9.21/go.mod h1:zua7mBUaCc5YnSLKYgGJR/w5ePdMDA6H56upLsHzA9U= github.com/Azure/go-autorest/autorest/azure/auth v0.4.2/go.mod h1:90gmfKdlmKgfjUpnCEpOJzsUEjrWDSLwHIG73tSXddM= github.com/Azure/go-autorest/autorest/azure/auth v0.5.11 h1:P6bYXFoao05z5uhOQzbC3Qd8JqF3jUoocoTeIxkp2cA= github.com/Azure/go-autorest/autorest/azure/auth v0.5.11/go.mod h1:84w/uV8E37feW2NCJ08uT9VBfjfUHpgLVnG2InYD6cg= @@ -154,7 +156,6 @@ github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSY github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN3SVSiiO77gL2j2ronKKP0syM= -github.com/Azure/go-autorest/autorest/mocks v0.4.0/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= github.com/Azure/go-autorest/autorest/mocks v0.4.2 h1:PGN4EDXnuQbojHbU0UWoNvmu9AGVwYHG9/fkDYhtAfw= github.com/Azure/go-autorest/autorest/mocks v0.4.2/go.mod h1:Vy7OitM9Kei0i1Oj+LvyAWMXJHeKH1MVlzFugfVrmyU= @@ -163,7 +164,6 @@ github.com/Azure/go-autorest/autorest/to v0.4.0/go.mod h1:fE8iZBn7LQR7zH/9XU2NcP github.com/Azure/go-autorest/autorest/validation v0.3.1 h1:AgyqjAd94fwNAoTjl/WQXg4VvFeRFpO+UhNyRXqF1ac= github.com/Azure/go-autorest/autorest/validation v0.3.1/go.mod h1:yhLgjC0Wda5DYXl6JAsWyUe4KVNffhoDhG0zVzUMo3E= github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= -github.com/Azure/go-autorest/logger v0.2.0/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= github.com/Azure/go-autorest/logger v0.2.1 h1:IG7i4p/mDa2Ce4TRyAO8IHnVhAVF3RFU+ZtXWSmf4Tg= github.com/Azure/go-autorest/logger v0.2.1/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= @@ -182,62 +182,34 @@ github.com/DataDog/zstd v1.5.0 h1:+K/VEwIAaPcHiMtQvpLD4lqW7f0Gk3xdYZmI1hD+CXo= github.com/DataDog/zstd v1.5.0/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= github.com/HdrHistogram/hdrhistogram-go v1.1.2/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= -github.com/Microsoft/go-winio v0.4.11/go.mod h1:VhR8bwka0BXejwEJY73c50VrPtXAaKcyvVC4A4RozmA= -github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= -github.com/Microsoft/go-winio v0.4.15-0.20190919025122-fc70bd9a86b5/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw= -github.com/Microsoft/go-winio v0.4.16-0.20201130162521-d1ffc52c7331/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0= -github.com/Microsoft/go-winio v0.4.16/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0= -github.com/Microsoft/go-winio v0.4.17-0.20210211115548-6eac466e5fa3/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= -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/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= -github.com/Microsoft/hcsshim v0.8.9/go.mod h1:5692vkUqntj1idxauYlpoINNKeqCiG6Sg38RRsjT5y8= -github.com/Microsoft/hcsshim v0.8.14/go.mod h1:NtVKoYxQuTLx6gEq0L96c9Ju4JbRJ4nY2ow3VK6a9Lg= -github.com/Microsoft/hcsshim v0.8.15/go.mod h1:x38A4YbHbdxJtc0sF6oIz+RG0npwSCAvn69iY6URG00= -github.com/Microsoft/hcsshim v0.8.16/go.mod h1:o5/SZqmR7x9JNKsW3pu+nqHm0MF8vbA+VxGOoXdC600= -github.com/Microsoft/hcsshim v0.8.20/go.mod h1:+w2gRZ5ReXQhFOrvSQeNfhrYB/dg3oDwTOcER2fw4I4= -github.com/Microsoft/hcsshim v0.8.21/go.mod h1:+w2gRZ5ReXQhFOrvSQeNfhrYB/dg3oDwTOcER2fw4I4= -github.com/Microsoft/hcsshim v0.8.23/go.mod h1:4zegtUJth7lAvFyc6cH2gGQ5B3OFQim01nnU2M8jKDg= -github.com/Microsoft/hcsshim v0.9.2/go.mod h1:7pLA8lDk46WKDWlVsENo92gC0XFa8rbKfyFRBqxEbCc= -github.com/Microsoft/hcsshim v0.9.3/go.mod h1:7pLA8lDk46WKDWlVsENo92gC0XFa8rbKfyFRBqxEbCc= -github.com/Microsoft/hcsshim/test v0.0.0-20201218223536-d3e5debf77da/go.mod h1:5hlzMzRKMLyo42nCZ9oml8AdTlq/0cvIaBv6tK1RehU= -github.com/Microsoft/hcsshim/test v0.0.0-20210227013316-43a75bb4edd3/go.mod h1:mw7qgWloBUl75W/gVH3cQszUg1+gUITj7D6NY7ywVnY= github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/OneOfOne/xxhash v1.2.8 h1:31czK/TI9sNkxIKfaUfGlU47BAxQ0ztGgd9vPyqimf8= github.com/OneOfOne/xxhash v1.2.8/go.mod h1:eZbhyaAYD41SGSSsnmcpxVoRiQ/MPUTjUdIIOT9Um7Q= -github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= -github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/RoaringBitmap/roaring v1.1.0 h1:b10lZrZXaY6Q6EKIRrmOF519FIyQQ5anPgGr3niw2yY= github.com/RoaringBitmap/roaring v1.1.0/go.mod h1:icnadbWcNyfEHlYdr+tDlOTih1Bf/h+rzPpv4sbomAA= -github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d/go.mod h1:HI8ITrYtUY+O+ZhtlqUnD8+KwNPOyugEhfP9fdUIaEQ= github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= -github.com/Shopify/sarama v1.30.0 h1:TOZL6r37xJBDEMLx4yjB77jxbZYXPaDow08TSK6vIL0= -github.com/Shopify/sarama v1.30.0/go.mod h1:zujlQQx1kzHsh4jfV1USnptCQrHAEZ2Hk8fTKCulPVs= +github.com/Shopify/sarama v1.37.2 h1:LoBbU0yJPte0cE5TZCGdlzZRmMgMtZU/XgnUKZg9Cv4= +github.com/Shopify/sarama v1.37.2/go.mod h1:Nxye/E+YPru//Bpaorfhc3JsSGYwCaDDj+R4bK52U5o= github.com/Shopify/toxiproxy v2.1.4+incompatible h1:TKdv8HiTLgE5wdJuEML90aBgNWsokNbMijUGhmcoBJc= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= -github.com/Shopify/toxiproxy/v2 v2.1.6-0.20210914104332-15ea381dcdae h1:ePgznFqEG1v3AjMklnK8H7BSc++FDSo7xfK9K7Af+0Y= -github.com/Shopify/toxiproxy/v2 v2.1.6-0.20210914104332-15ea381dcdae/go.mod h1:/cvHQkZ1fst0EmZnA5dFtiQdWCNCFYzb+uE2vqVgvx0= +github.com/Shopify/toxiproxy/v2 v2.5.0 h1:i4LPT+qrSlKNtQf5QliVjdP08GyAH8+BUIc9gT0eahc= +github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d h1:G0m3OIz70MZUWq3EgK3CesDbo8upS2Vm9/P3FtgI+Jk= github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= -github.com/StackExchange/wmi v0.0.0-20210224194228-fe8f1750fd46 h1:5sXbqlSomvdjlRbWyNqkPsJ3Fg+tQZCbgeX1VGljbQY= -github.com/StackExchange/wmi v0.0.0-20210224194228-fe8f1750fd46/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= github.com/Workiva/go-datastructures v1.0.52/go.mod h1:Z+F2Rca0qCsVYDS8z7bAGm8f3UkzuWYS/oBZz5a7VVA= github.com/Workiva/go-datastructures v1.0.53 h1:J6Y/52yX10Xc5JjXmGtWoSSxs3mZnGSaq37xZZh7Yig= github.com/Workiva/go-datastructures v1.0.53/go.mod h1:1yZL+zfsztete+ePzZz/Zb1/t5BnDuE2Ya2MMGhzP6A= -github.com/aerospike/aerospike-client-go v4.5.0+incompatible h1:6ALev/Ge4jW5avSLoqgvPYTh+FLeeDD9xDhzoMCNgOo= -github.com/aerospike/aerospike-client-go v4.5.0+incompatible/go.mod h1:zj8LBEnWBDOVEIJt8LvaRvDG5ARAoa5dBeHaB472NRc= +github.com/aerospike/aerospike-client-go v4.5.2+incompatible h1:G7cGT9bbOEJwPR8sKrXNP/PotN25Y5pfd8QrLbg3eTY= +github.com/aerospike/aerospike-client-go v4.5.2+incompatible/go.mod h1:zj8LBEnWBDOVEIJt8LvaRvDG5ARAoa5dBeHaB472NRc= github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5 h1:rFw4nCn9iMW+Vajsk51NtYIcwSTkXr+JGrMd36kTDJw= github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= github.com/agiledragon/gomonkey v2.0.2+incompatible/go.mod h1:2NGfXu1a80LLr2cmWXGBDaHEjb1idR6+FVlX5T3D9hw= -github.com/agnivade/levenshtein v1.0.1 h1:3oJU7J3FGFmyhn8KHjmVaZCN5hxTr7GxgRue+sxIXdQ= -github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM= +github.com/agnivade/levenshtein v1.1.1 h1:QY8M92nrzkmr798gCo3kmMyqXFzdQVpxLlGPRBij0P8= +github.com/agnivade/levenshtein v1.1.1/go.mod h1:veldBMzWxcCG2ZvUTKD2kJNRdCk5hVbJomOvKkmgYbo= github.com/agrea/ptr v0.0.0-20180711073057-77a518d99b7b h1:WMhlIaJkDgEQSVJQM06YV+cYUl1r5OY5//ijMXJNqtA= github.com/agrea/ptr v0.0.0-20180711073057-77a518d99b7b/go.mod h1:Tie46d3UWzXpj+Fh9+DQTyaUxEpFBPOLXrnx7nxlKRo= github.com/ajg/form v1.5.1 h1:t9c7v8JUKu/XxOGBU0yjNpaMloxGEJhUkqFRq0ibGeU= @@ -248,56 +220,55 @@ github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuy github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= -github.com/alexflint/go-filemutex v0.0.0-20171022225611-72bdc8eae2ae/go.mod h1:CgnQgUtFrFz9mxFNtED3jI5tLDjKlOM+oUF/sTk6ps0= -github.com/alexflint/go-filemutex v1.1.0/go.mod h1:7P4iRhttt/nUvUOrYIhcpMzv2G6CY9UnI16Z+UJqRyk= github.com/alibaba/sentinel-golang v1.0.4 h1:i0wtMvNVdy7vM4DdzYrlC4r/Mpk1OKUUBurKKkWhEo8= github.com/alibaba/sentinel-golang v1.0.4/go.mod h1:Lag5rIYyJiPOylK8Kku2P+a23gdKMMqzQS7wTnjWEpk= github.com/alibabacloud-go/alibabacloud-gateway-spi v0.0.4 h1:iC9YFYKDGEy3n/FtqJnOkZsene9olVspKmkX5A2YBEo= github.com/alibabacloud-go/alibabacloud-gateway-spi v0.0.4/go.mod h1:sCavSAvdzOjul4cEqeVtvlSaSScfNsTQ+46HwlTL1hc= -github.com/alibabacloud-go/darabonba-openapi v0.1.4/go.mod h1:j03z4XUkIC9aBj/w5Bt7H0cygmPNt5sug8NXle68+Og= -github.com/alibabacloud-go/darabonba-openapi v0.1.16 h1:f6ZspWKTBurQzyLpZKMVxO51HAePY8aedicwuX3+E20= -github.com/alibabacloud-go/darabonba-openapi v0.1.16/go.mod h1:ZjyqRbbZOaUBSh7keeH8VQN/BzCPvxCQwMuJGDdbmXQ= +github.com/alibabacloud-go/darabonba-openapi v0.1.18/go.mod h1:PB4HffMhJVmAgNKNq3wYbTUlFvPgxJpTzd1F5pTuUsc= +github.com/alibabacloud-go/darabonba-openapi v0.2.1 h1:WyzxxKvhdVDlwpAMOHgAiCJ+NXa6g5ZWPFEzaK/ewwY= +github.com/alibabacloud-go/darabonba-openapi v0.2.1/go.mod h1:zXOqLbpIqq543oioL9IuuZYOQgHQ5B8/n5OPrnko8aY= github.com/alibabacloud-go/darabonba-string v1.0.0/go.mod h1:93cTfV3vuPhhEwGGpKKqhVW4jLe7tDpo3LUM0i0g6mA= github.com/alibabacloud-go/debug v0.0.0-20190504072949-9472017b5c68 h1:NqugFkGxx1TXSh/pBcU00Y6bljgDPaFdh5MUSeJ7e50= github.com/alibabacloud-go/debug v0.0.0-20190504072949-9472017b5c68/go.mod h1:6pb/Qy8c+lqua8cFpEy7g39NRRqOWc3rOwAy8m5Y2BY= github.com/alibabacloud-go/endpoint-util v1.1.0 h1:r/4D3VSw888XGaeNpP994zDUaxdgTSHBbVfZlzf6b5Q= github.com/alibabacloud-go/endpoint-util v1.1.0/go.mod h1:O5FuCALmCKs2Ff7JFJMudHs0I5EBgecXXxZRyswlEjE= -github.com/alibabacloud-go/oos-20190601 v1.0.1 h1:Rx/ITYWxNKZ0YloLclBmS99ii6EpvhL0mlCZ5mBgtPM= -github.com/alibabacloud-go/oos-20190601 v1.0.1/go.mod h1:t7g1ubvGwLe0cP+uLSrTza2S6xthOFZw43h9Zajt+Kw= -github.com/alibabacloud-go/openapi-util v0.0.7/go.mod h1:sQuElr4ywwFRlCCberQwKRFhRzIyG4QTP/P4y1CJ6Ws= -github.com/alibabacloud-go/openapi-util v0.0.10 h1:wzTQc6ZSHhCI1FybUITHE26451zLgQAmYdTaMOUmoqE= -github.com/alibabacloud-go/openapi-util v0.0.10/go.mod h1:sQuElr4ywwFRlCCberQwKRFhRzIyG4QTP/P4y1CJ6Ws= +github.com/alibabacloud-go/oos-20190601 v1.0.4 h1:IhydPmon5M+ZywO9swx8TTOxy9M5qJewZjUvREcMkgw= +github.com/alibabacloud-go/oos-20190601 v1.0.4/go.mod h1:4wmBcZmYoJMFc6LcBvGiAiUs6G+ty7F/eob/r2dOvFg= +github.com/alibabacloud-go/openapi-util v0.0.11 h1:iYnqOPR5hyEEnNZmebGyRMkkEJRWUEjDiiaOHZ5aNhA= +github.com/alibabacloud-go/openapi-util v0.0.11/go.mod h1:sQuElr4ywwFRlCCberQwKRFhRzIyG4QTP/P4y1CJ6Ws= github.com/alibabacloud-go/tea v1.1.0/go.mod h1:IkGyUSX4Ba1V+k4pCtJUc6jDpZLFph9QMy2VUPTwukg= github.com/alibabacloud-go/tea v1.1.7/go.mod h1:/tmnEaQMyb4Ky1/5D+SE1BAsa5zj/KeGOFfwYm3N/p4= github.com/alibabacloud-go/tea v1.1.8/go.mod h1:/tmnEaQMyb4Ky1/5D+SE1BAsa5zj/KeGOFfwYm3N/p4= github.com/alibabacloud-go/tea v1.1.11/go.mod h1:/tmnEaQMyb4Ky1/5D+SE1BAsa5zj/KeGOFfwYm3N/p4= -github.com/alibabacloud-go/tea v1.1.15/go.mod h1:nXxjm6CIFkBhwW4FQkNrolwbfon8Svy6cujmKFUq98A= -github.com/alibabacloud-go/tea v1.1.17 h1:05R5DnaJXe9sCNIe8KUgWHC/z6w/VZIwczgUwzRnul8= github.com/alibabacloud-go/tea v1.1.17/go.mod h1:nXxjm6CIFkBhwW4FQkNrolwbfon8Svy6cujmKFUq98A= +github.com/alibabacloud-go/tea v1.1.19/go.mod h1:nXxjm6CIFkBhwW4FQkNrolwbfon8Svy6cujmKFUq98A= +github.com/alibabacloud-go/tea v1.1.20 h1:wFK4xEbvGYMtzTyHhIju9D7ecWxvSUdoLO6y4vDLFik= +github.com/alibabacloud-go/tea v1.1.20/go.mod h1:nXxjm6CIFkBhwW4FQkNrolwbfon8Svy6cujmKFUq98A= github.com/alibabacloud-go/tea-utils v1.3.1/go.mod h1:EI/o33aBfj3hETm4RLiAxF/ThQdSngxrpF8rKUDJjPE= -github.com/alibabacloud-go/tea-utils v1.3.9/go.mod h1:EI/o33aBfj3hETm4RLiAxF/ThQdSngxrpF8rKUDJjPE= -github.com/alibabacloud-go/tea-utils v1.4.3 h1:8SzwmmRrOnQ09Hf5a9GyfJc0d7Sjv6fmsZoF4UDbFjo= github.com/alibabacloud-go/tea-utils v1.4.3/go.mod h1:KNcT0oXlZZxOXINnZBs6YvgOd5aYp9U67G+E3R8fcQw= +github.com/alibabacloud-go/tea-utils v1.4.5 h1:h0/6Xd2f3bPE4XHTvkpjwxowIwRCJAJOqY6Eq8f3zfA= +github.com/alibabacloud-go/tea-utils v1.4.5/go.mod h1:KNcT0oXlZZxOXINnZBs6YvgOd5aYp9U67G+E3R8fcQw= +github.com/alibabacloud-go/tea-xml v1.1.2 h1:oLxa7JUXm2EDFzMg+7oRsYc+kutgCVwm+bZlhhmvW5M= +github.com/alibabacloud-go/tea-xml v1.1.2/go.mod h1:Rq08vgCcCAjHyRi/M7xlHKUykZCEtyBy9+DPF6GgEu8= github.com/alicebob/gopher-json v0.0.0-20200520072559-a9ecdc9d1d3a h1:HbKu58rmZpUGpz5+4FfNmIU+FmZg2P3Xaj2v2bfNWmk= github.com/alicebob/gopher-json v0.0.0-20200520072559-a9ecdc9d1d3a/go.mod h1:SGnFV6hVsYE877CKEZ6tDNTjaSXYUk6QqoIK6PrAtcc= -github.com/alicebob/miniredis/v2 v2.13.3 h1:kohgdtN58KW/r9ZDVmMJE3MrfbumwsDQStd0LPAGmmw= -github.com/alicebob/miniredis/v2 v2.13.3/go.mod h1:uS970Sw5Gs9/iK3yBg0l9Uj9s25wXxSpQUE9EaJ/Blg= -github.com/aliyun/alibaba-cloud-sdk-go v1.61.18 h1:zOVTBdCKFd9JbCKz9/nt+FovbjPFmb7mUnp8nH9fQBA= +github.com/alicebob/miniredis/v2 v2.23.0 h1:+lwAJYjvvdIVg6doFHuotFjueJ/7KY10xo/vm3X3Scw= +github.com/alicebob/miniredis/v2 v2.23.0/go.mod h1:XNqvJdQJv5mSuVMc0ynneafpnL/zv52acZ6kqeS0t88= github.com/aliyun/alibaba-cloud-sdk-go v1.61.18/go.mod h1:v8ESoHo4SyHmuB4b1tJqDHxfTGEciD+yhvOU/5s1Rfk= -github.com/aliyun/aliyun-log-go-sdk v0.1.37 h1:GvswbgLqVOHNeMWssQ9zA+R7YVDP6arLUP92bKyGZNw= -github.com/aliyun/aliyun-log-go-sdk v0.1.37/go.mod h1:1QQ59pEJiVVXqKgbHcU6FWIgxT5RKBt+CT8AiQ2bEts= -github.com/aliyun/aliyun-oss-go-sdk v2.0.7+incompatible h1:HXvOJsZw8JT/ldxjX74Aq4H2IY4ojV/mXMDPWFitpv8= -github.com/aliyun/aliyun-oss-go-sdk v2.0.7+incompatible/go.mod h1:T/Aws4fEfogEE9v+HPhhw+CntffsBHJ8nXQCwKr0/g8= -github.com/aliyun/aliyun-tablestore-go-sdk v1.6.0 h1:Vug1AcQD1bOW1AMrr+61oTCP/NWhGDYzN2FuMXT78yQ= -github.com/aliyun/aliyun-tablestore-go-sdk v1.6.0/go.mod h1:jixoiNNRR/4ziq0yub1fTlxmDcQwlpkaujpaWIATQWM= +github.com/aliyun/alibaba-cloud-sdk-go v1.61.1704 h1:PpfENOj/vPfhhy9N2OFRjpue0hjM5XqAp2thFmkXXIk= +github.com/aliyun/alibaba-cloud-sdk-go v1.61.1704/go.mod h1:RcDobYh8k5VP6TNybz9m++gL3ijVI5wueVr0EM10VsU= +github.com/aliyun/aliyun-log-go-sdk v0.1.39 h1:oVLVcRbtOhE4a1D4HhO3OYPR6wMADl3ldcbVeFrRL8Y= +github.com/aliyun/aliyun-log-go-sdk v0.1.39/go.mod h1:1QQ59pEJiVVXqKgbHcU6FWIgxT5RKBt+CT8AiQ2bEts= +github.com/aliyun/aliyun-oss-go-sdk v2.2.5+incompatible h1:QoRMR0TCctLDqBCMyOu1eXdZyMw3F7uGA9qPn2J4+R8= +github.com/aliyun/aliyun-oss-go-sdk v2.2.5+incompatible/go.mod h1:T/Aws4fEfogEE9v+HPhhw+CntffsBHJ8nXQCwKr0/g8= +github.com/aliyun/aliyun-tablestore-go-sdk v1.7.7 h1:+d/mcgaxx1jaWtFN2WrBHy4XeM9IK5gmZvbbpVkhqHE= +github.com/aliyun/aliyun-tablestore-go-sdk v1.7.7/go.mod h1:mZCxM44kLKLY5ci+0j6bJb0DG8PNQ5Mn40Y0bbYOhpE= github.com/aliyun/credentials-go v1.1.2 h1:qU1vwGIBb3UJ8BwunHDRFtAhS6jnQLnde/yk0+Ih2GY= github.com/aliyun/credentials-go v1.1.2/go.mod h1:ozcZaMR5kLM7pwtCMEpVmQ242suV6qTJya2bDq4X1Tw= github.com/aliyunmq/mq-http-go-sdk v1.0.3 h1:/uhH7DUoaw9XTtsPgDp7zdPUyG5FBKj2GmJJph9z+6o= github.com/aliyunmq/mq-http-go-sdk v1.0.3/go.mod h1:JYfRMQoPexERvnNNBcal0ZQ2TVQ5ialDiW9ScjaadEM= github.com/andres-erbsen/clock v0.0.0-20160526145045-9e14626cd129 h1:MzBOUgng9orim59UnfUTLRjMpd09C5uEVQ6RPGeCaVI= github.com/andres-erbsen/clock v0.0.0-20160526145045-9e14626cd129/go.mod h1:rFgpPQZYZ8vdbc+48xibu8ALc3yeyd64IhHS+PU6Yyg= -github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883 h1:bvNMNQO63//z+xNgfBlViaCIJKLlCJ6/fmUseuG0wVQ= -github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= github.com/andybalholm/brotli v1.0.0/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y= github.com/andybalholm/brotli v1.0.4 h1:V7DdXeJtZscaqfNuAdSRuRFzuiKlHSC/Zh3zl9qY3JY= github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= @@ -307,26 +278,26 @@ github.com/apache/dubbo-getty v1.4.9-0.20220610060150-8af010f3f3dc h1:NZRon3MDqT github.com/apache/dubbo-getty v1.4.9-0.20220610060150-8af010f3f3dc/go.mod h1:cPJlbcHUTNTpiboMQjMHhE9XBni11LiBiG8FdrDuVzk= github.com/apache/dubbo-go-hessian2 v1.9.1/go.mod h1:xQUjE7F8PX49nm80kChFvepA/AvqAZ0oh/UaB6+6pBE= github.com/apache/dubbo-go-hessian2 v1.9.3/go.mod h1:xQUjE7F8PX49nm80kChFvepA/AvqAZ0oh/UaB6+6pBE= -github.com/apache/dubbo-go-hessian2 v1.11.0 h1:VTdT6NStuEqNmyT3AdSN2DLDBqhXvAAyAAAoh9hLavk= github.com/apache/dubbo-go-hessian2 v1.11.0/go.mod h1:7rEw9guWABQa6Aqb8HeZcsYPHsOS7XT1qtJvkmI6c5w= -github.com/apache/pulsar-client-go v0.8.1 h1:UZINLbH3I5YtNzqkju7g9vrl4CKrEgYSx2rbpvGufrE= -github.com/apache/pulsar-client-go v0.8.1/go.mod h1:yJNcvn/IurarFDxwmoZvb2Ieylg630ifxeO/iXpk27I= -github.com/apache/pulsar-client-go/oauth2 v0.0.0-20220120090717-25e59572242e h1:EqiJ0Xil8NmcXyupNqXV9oYDBeWntEIegxLahrTr8DY= -github.com/apache/pulsar-client-go/oauth2 v0.0.0-20220120090717-25e59572242e/go.mod h1:Xee4tgYLFpYcPMcTfBYWE1uKRzeciodGTSEDMzsR6i8= +github.com/apache/dubbo-go-hessian2 v1.11.3 h1:QSJhGLHBtnvb2kKrZ4uxpXxHGgGHqQkXXLI8rcQmEpg= +github.com/apache/dubbo-go-hessian2 v1.11.3/go.mod h1:7rEw9guWABQa6Aqb8HeZcsYPHsOS7XT1qtJvkmI6c5w= +github.com/apache/pulsar-client-go v0.9.0 h1:L5jvGFXJm0JNA/PgUiJctTVHHttCe4wIEFDv4vojiQM= +github.com/apache/pulsar-client-go v0.9.0/go.mod h1:fSAcBipgz4KQ/VgwZEJtQ71cCXMKm8ezznstrozrngw= github.com/apache/rocketmq-client-go v1.2.5 h1:2hPoLHpMJy1a57HDNmx7PZKgvlgVYO1Alz925oeqphQ= github.com/apache/rocketmq-client-go v1.2.5/go.mod h1:Kap8oXIVLlHF50BGUbN9z97QUp1GaK1nOoCfsZnR2bw= github.com/apache/rocketmq-client-go/v2 v2.1.0/go.mod h1:oEZKFDvS7sz/RWU0839+dQBupazyBV7WX5cP6nrio0Q= github.com/apache/rocketmq-client-go/v2 v2.1.1-rc2 h1:UQHWhwyw3tSLRhp0lVn/r/uNUzDnBZcDekGSzaXfz0M= github.com/apache/rocketmq-client-go/v2 v2.1.1-rc2/go.mod h1:DDYjQ9wxYmJLjgNK4+RqyFE8/13gLK/Bugz4U6zD5MI= +github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= +github.com/apache/thrift v0.13.0 h1:5hryIiq9gtn+MiLVn0wP37kb/uTeRZgN08WoCsAhIhI= github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= -github.com/apache/thrift v0.16.0 h1:qEy6UW60iVOlUy+b9ZR0d5WzUWYGOo4HfopoyBaNmoY= -github.com/apache/thrift v0.16.0/go.mod h1:PHK3hniurgQaNMZYaCLEqXKsYK8upmhPbmdP2FXSqgU= github.com/appscode/go-querystring v0.0.0-20170504095604-0126cfb3f1dc/go.mod h1:w648aMHEgFYS6xb0KVMMtZ2uMeemhiKCuD2vj6gY52A= +github.com/arbovm/levenshtein v0.0.0-20160628152529-48b4e1c0c4d0 h1:jfIu9sQUG6Ig+0+Ap1h4unLjW6YQJpKZVmUzxsD4E/Q= +github.com/arbovm/levenshtein v0.0.0-20160628152529-48b4e1c0c4d0/go.mod h1:t2tdKJDJF9BV14lnkjHmOQgcvEKgtqs5a1N3LNdJhGE= github.com/ardielle/ardielle-go v1.5.2 h1:TilHTpHIQJ27R1Tl/iITBzMwiUGSlVfiVhwDNGM3Zj4= github.com/ardielle/ardielle-go v1.5.2/go.mod h1:I4hy1n795cUhaVt/ojz83SNVCYIGsAFAONtv2Dr7HUI= github.com/ardielle/ardielle-tools v1.5.4/go.mod h1:oZN+JRMnqGiIhrzkRN9l26Cej9dEx4jeNG6A+AdkShk= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= -github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= github.com/armon/go-metrics v0.0.0-20190430140413-ec5e00d3c878/go.mod h1:3AMJUQhVx52RsWOnlkpikZr01T/yAVN2gn0861vByNg= github.com/armon/go-metrics v0.3.9/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= @@ -339,13 +310,11 @@ github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:l github.com/asaskevich/govalidator v0.0.0-20200108200545-475eaeb16496 h1:zV3ejI06GQ59hwDQAvmK1qxOQGB3WuVTRoY0okPTAv0= github.com/asaskevich/govalidator v0.0.0-20200108200545-475eaeb16496/go.mod h1:oGkLhpf+kjZl6xBf758TQhh5XrAeiJv/7FRz/2spLIg= github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= -github.com/aws/aws-sdk-go v1.15.11/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZoCYDt7FT0= github.com/aws/aws-sdk-go v1.19.48/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.32.6/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0= -github.com/aws/aws-sdk-go v1.34.28/go.mod h1:H7NKnBqNVzoTJpGfLrQkkD+ytBA93eiDYi/+8rV9s48= -github.com/aws/aws-sdk-go v1.43.16 h1:Y7wBby44f+tINqJjw5fLH3vA+gFq4uMITIKqditwM14= -github.com/aws/aws-sdk-go v1.43.16/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= +github.com/aws/aws-sdk-go v1.44.128 h1:X34pX5t0LIZXjBY11yf9JKMP3c1aZgirh+5PjtaZyJ4= +github.com/aws/aws-sdk-go v1.44.128/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= github.com/aws/aws-sdk-go-v2 v1.9.2/go.mod h1:cK/D0BBs0b/oWPIcX/Z/obahJK1TT7IPVjy53i/mX/4= github.com/aws/aws-sdk-go-v2/config v1.8.3/go.mod h1:4AEiLtAb8kLs7vgw2ZV3p2VZ1+hBavOc84hqxVNpCyw= @@ -360,15 +329,9 @@ github.com/aws/smithy-go v1.8.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAm github.com/awslabs/kinesis-aggregation/go v0.0.0-20210630091500-54e17340d32f h1:Pf0BjJDga7C98f0vhw+Ip5EaiE07S3lTKpIYPNS0nMo= github.com/awslabs/kinesis-aggregation/go v0.0.0-20210630091500-54e17340d32f/go.mod h1:SghidfnxvX7ribW6nHI7T+IBbc9puZ9kk5Tx/88h8P4= github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuPk= -github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd30/FjWUq4= -github.com/baiyubin/aliyun-sts-go-sdk v0.0.0-20180326062324-cfa1a18b161f h1:ZNv7On9kyUzm7fvRZumSyy/IUiSC7AzL0I1jKKtwooA= -github.com/baiyubin/aliyun-sts-go-sdk v0.0.0-20180326062324-cfa1a18b161f/go.mod h1:AuiFmCCPBSrqvVMvuqFuk0qogytodnVFVSN5CeJB8Gc= -github.com/beefsack/go-rate v0.0.0-20220214233405-116f4ca011a0/go.mod h1:6YNgTHLutezwnBvyneBbwvB8C82y3dcoOj5EQJIdGXA= github.com/benbjohnson/clock v1.0.3/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM= +github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= -github.com/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A= -github.com/benbjohnson/clock v1.3.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= -github.com/beorn7/perks v0.0.0-20160804104726-4c0e84591b9a/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= @@ -376,39 +339,26 @@ github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6r github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bitly/go-hostpool v0.0.0-20171023180738-a3a6125de932 h1:mXoPYz/Ul5HYEDvkta6I8/rnYM5gSdSV2tJ6XbZuEtY= github.com/bitly/go-hostpool v0.0.0-20171023180738-a3a6125de932/go.mod h1:NOuUCSz6Q9T7+igc/hlvDOUdtWKryOrtFyIVABv/p7k= -github.com/bitly/go-simplejson v0.5.0/go.mod h1:cXHtHw4XUPsvGaxgjIAn8PhEWG9NfngEKAMDJEczWVA= github.com/bits-and-blooms/bitset v1.2.0 h1:Kn4yilvwNtMACtf1eYDlG8H77R07mZSPbMjLyS07ChA= github.com/bits-and-blooms/bitset v1.2.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM= -github.com/blang/semver v3.1.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 h1:DDGfHa7BWjL4YnC6+E63dPcxHo2sUxDIu8g3QgEJdRY= github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4= github.com/bmizerany/perks v0.0.0-20141205001514-d9a9656a3a4b/go.mod h1:ac9efd0D1fsDb3EJvhqgXRbFx7bs2wqZ10HQPeU8U/Q= -github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= -github.com/bradfitz/gomemcache v0.0.0-20190913173617-a41fca850d0b h1:L/QXpzIa3pOvUGt1D1lA5KjYhPBAN/3iWdP7xeFS9F0= -github.com/bradfitz/gomemcache v0.0.0-20190913173617-a41fca850d0b/go.mod h1:H0wQNHz2YrLsuXOZozoeDmnHXkNCRmMW0gwFWDfEZDA= -github.com/bshuster-repo/logrus-logstash-hook v0.4.1/go.mod h1:zsTqEiSzDgAa/8GZR7E1qaXrhYNDKBYy5/dWPTIflbk= -github.com/bshuster-repo/logrus-logstash-hook v1.0.0/go.mod h1:zsTqEiSzDgAa/8GZR7E1qaXrhYNDKBYy5/dWPTIflbk= -github.com/buger/jsonparser v0.0.0-20180808090653-f4dd9f5a6b44/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s= +github.com/bradfitz/gomemcache v0.0.0-20221031212613-62deef7fc822 h1:hjXJeBcAMS1WGENGqDpzvmgS43oECTx8UXq31UBu0Jw= +github.com/bradfitz/gomemcache v0.0.0-20221031212613-62deef7fc822/go.mod h1:H0wQNHz2YrLsuXOZozoeDmnHXkNCRmMW0gwFWDfEZDA= github.com/buger/jsonparser v0.0.0-20181115193947-bf1c66bbce23/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s= github.com/buger/jsonparser v1.1.1 h1:2PnMjfWD7wBILjqQbt530v576A/cAbQvEW9gGIpYMUs= github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0= -github.com/bugsnag/bugsnag-go v0.0.0-20141110184014-b1d153021fcd/go.mod h1:2oa8nejYd4cQ/b0hMIopN0lCRxU0bueqREvZLWFrtK8= -github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b/go.mod h1:obH5gd0BsqsP2LwDJ9aOkm/6J86V6lyAXCoQWGw3K50= -github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0/go.mod h1:D/8v3kj0zr8ZAKg1AQ6crr+5VwKN5eIywRkfhyM/+dE= -github.com/bytecodealliance/wasmtime-go v0.36.0/go.mod h1:q320gUxqyI8yB+ZqRuaJOEnGkAnHh6WtJjMaT2CW4wI= -github.com/bytecodealliance/wasmtime-go v0.39.0 h1:35AXy5+py5ZXRSpfoxqh+dWJ7nJnIrW1avjDfaJinxU= -github.com/camunda/zeebe/clients/go/v8 v8.0.4 h1:8r2InKZDn0jTj8OPtBbKR2CSLgJD8Hgqw/rp3jiLhX8= -github.com/camunda/zeebe/clients/go/v8 v8.0.4/go.mod h1:vqeNO1EphExqC15spP56PNXQ6SB8sMjhEfO16bfFRPo= +github.com/bytecodealliance/wasmtime-go v1.0.0 h1:9u9gqaUiaJeN5IoD1L7egD8atOnTGyJcNp8BhkL9cUU= +github.com/camunda/zeebe/clients/go/v8 v8.1.3 h1:fuJD2DGByGCpfbrggWnz2onUr7ATNgkC4aOHBs7QxMw= +github.com/camunda/zeebe/clients/go/v8 v8.1.3/go.mod h1:HZ7hlFKAfCkdLeLds0nqEO48FDRl8LCBaAtDu9GxaAI= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= github.com/cenkalti/backoff v2.0.0+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= -github.com/cenkalti/backoff v2.1.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= -github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= -github.com/cenkalti/backoff/v4 v4.1.2/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= @@ -420,22 +370,16 @@ github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghf github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/checkpoint-restore/go-criu/v4 v4.1.0/go.mod h1:xUQBLp4RLc5zJtWY++yjOoMoB5lihDt7fai+75m+rGw= -github.com/checkpoint-restore/go-criu/v5 v5.0.0/go.mod h1:cfwC0EG7HMUenopBsUf9d89JlCLQIfgVcNsNN0t6T2M= -github.com/checkpoint-restore/go-criu/v5 v5.3.0/go.mod h1:E/eQpaFtUKGOOSEBZgmKAcn+zUUwWxqcaKZlF54wK8E= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/cilium/ebpf v0.0.0-20200110133405-4032b1d8aae3/go.mod h1:MA5e5Lr8slmEg9bt0VpxxWqJlO4iwu3FBdHUzV7wQVg= -github.com/cilium/ebpf v0.0.0-20200702112145-1c8d4c9ef775/go.mod h1:7cR51M8ViRLIdUjrmSXlK9pkrsDlLHbO8jiB8X8JnOc= -github.com/cilium/ebpf v0.2.0/go.mod h1:To2CFviqOWL/M0gIMsvSMlqe7em/l1ALkX1PyjrX2Qs= -github.com/cilium/ebpf v0.4.0/go.mod h1:4tRaxcgiL706VnOzHOdBlY8IEAIdxINsQBcU4xJJXRs= -github.com/cilium/ebpf v0.6.2/go.mod h1:4tRaxcgiL706VnOzHOdBlY8IEAIdxINsQBcU4xJJXRs= -github.com/cilium/ebpf v0.7.0/go.mod h1:/oI2+1shJiTGAMgl6/RgJr36Eo1jzrRcAWbcXO2usCA= github.com/cinience/go_rocketmq v0.0.2 h1:HZkcQ2wfwZeigkpUs71Gojp/WRiBzkz2uezrOFquh08= github.com/cinience/go_rocketmq v0.0.2/go.mod h1:2YNY7emT546dcFpMEWLesmAEi4ndW7+tX5VfNf1Zsgs= github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= +github.com/clbanning/mxj/v2 v2.5.5/go.mod h1:hNiWqW14h+kc+MdF9C6/YoRfjEJoR3ou6tn/Qo+ve2s= +github.com/clbanning/mxj/v2 v2.5.6 h1:Jm4VaCI/+Ug5Q57IzEoZbwx4iQFA6wkXv72juUSeK+g= +github.com/clbanning/mxj/v2 v2.5.6/go.mod h1:hNiWqW14h+kc+MdF9C6/YoRfjEJoR3ou6tn/Qo+ve2s= github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cloudflare/golz4 v0.0.0-20150217214814-ef862a3cdc58 h1:F1EaeKL/ta07PY/k9Os/UFtwERei2/XzGemhpGnBKNg= @@ -455,149 +399,31 @@ github.com/cockroachdb/datadriven v0.0.0-20200714090401-bf6692d28da5/go.mod h1:h github.com/cockroachdb/errors v1.2.4/go.mod h1:rQD95gz6FARkaKkQXUksEje/d9a6wBJoCr5oaCLELYA= github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f/go.mod h1:i/u985jwjWRlyHXQbwatDASoW0RMlZ/3i9yJHE2xLkI= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= -github.com/containerd/aufs v0.0.0-20200908144142-dab0cbea06f4/go.mod h1:nukgQABAEopAHvB6j7cnP5zJ+/3aVcE7hCYqvIwAHyE= -github.com/containerd/aufs v0.0.0-20201003224125-76a6863f2989/go.mod h1:AkGGQs9NM2vtYHaUen+NljV0/baGCAPELGm2q9ZXpWU= -github.com/containerd/aufs v0.0.0-20210316121734-20793ff83c97/go.mod h1:kL5kd6KM5TzQjR79jljyi4olc1Vrx6XBlcyj3gNv2PU= -github.com/containerd/aufs v1.0.0/go.mod h1:kL5kd6KM5TzQjR79jljyi4olc1Vrx6XBlcyj3gNv2PU= -github.com/containerd/btrfs v0.0.0-20201111183144-404b9149801e/go.mod h1:jg2QkJcsabfHugurUvvPhS3E08Oxiuh5W/g1ybB4e0E= -github.com/containerd/btrfs v0.0.0-20210316141732-918d888fb676/go.mod h1:zMcX3qkXTAi9GI50+0HOeuV8LU2ryCE/V2vG/ZBiTss= -github.com/containerd/btrfs v1.0.0/go.mod h1:zMcX3qkXTAi9GI50+0HOeuV8LU2ryCE/V2vG/ZBiTss= -github.com/containerd/cgroups v0.0.0-20190717030353-c4b9ac5c7601/go.mod h1:X9rLEHIqSf/wfK8NsPqxJmeZgW4pcfzdXITDrUSJ6uI= -github.com/containerd/cgroups v0.0.0-20190919134610-bf292b21730f/go.mod h1:OApqhQ4XNSNC13gXIwDjhOQxjWa/NxkwZXJ1EvqT0ko= -github.com/containerd/cgroups v0.0.0-20200531161412-0dbf7f05ba59/go.mod h1:pA0z1pT8KYB3TCXK/ocprsh7MAkoW8bZVzPdih9snmM= -github.com/containerd/cgroups v0.0.0-20200710171044-318312a37340/go.mod h1:s5q4SojHctfxANBDvMeIaIovkq29IP48TKAxnhYRxvo= -github.com/containerd/cgroups v0.0.0-20200824123100-0b889c03f102/go.mod h1:s5q4SojHctfxANBDvMeIaIovkq29IP48TKAxnhYRxvo= -github.com/containerd/cgroups v0.0.0-20210114181951-8a68de567b68/go.mod h1:ZJeTFisyysqgcCdecO57Dj79RfL0LNeGiFUqLYQRYLE= -github.com/containerd/cgroups v1.0.1/go.mod h1:0SJrPIenamHDcZhEcJMNBB85rHcUsw4f25ZfBiPYRkU= -github.com/containerd/cgroups v1.0.3/go.mod h1:/ofk34relqNjSGyqPrmEULrO4Sc8LJhvJmWbUCUKqj8= -github.com/containerd/console v0.0.0-20180822173158-c12b1e7919c1/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw= -github.com/containerd/console v0.0.0-20181022165439-0650fd9eeb50/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw= -github.com/containerd/console v0.0.0-20191206165004-02ecf6a7291e/go.mod h1:8Pf4gM6VEbTNRIT26AyyU7hxdQU3MvAvxVI0sc00XBE= -github.com/containerd/console v1.0.1/go.mod h1:XUsP6YE/mKtz6bxc+I8UiKKTP04qjQL4qcS3XoQ5xkw= -github.com/containerd/console v1.0.2/go.mod h1:ytZPjGgY2oeTkAONYafi2kSj0aYggsf8acV1PGKCbzQ= -github.com/containerd/console v1.0.3/go.mod h1:7LqA/THxQ86k76b8c/EMSiaJ3h1eZkMkXar0TQ1gf3U= -github.com/containerd/containerd v1.2.10/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.3.0-beta.2.0.20190828155532-0293cbd26c69/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.3.0/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.3.1-0.20191213020239-082f7e3aed57/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.3.2/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.4.0-beta.2.0.20200729163537-40b22ef07410/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.4.1/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.4.3/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.4.9/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.5.0-beta.1/go.mod h1:5HfvG1V2FsKesEGQ17k5/T7V960Tmcumvqn8Mc+pCYQ= -github.com/containerd/containerd v1.5.0-beta.3/go.mod h1:/wr9AVtEM7x9c+n0+stptlo/uBBoBORwEx6ardVcmKU= -github.com/containerd/containerd v1.5.0-beta.4/go.mod h1:GmdgZd2zA2GYIBZ0w09ZvgqEq8EfBp/m3lcVZIvPHhI= -github.com/containerd/containerd v1.5.0-rc.0/go.mod h1:V/IXoMqNGgBlabz3tHD2TWDoTJseu1FGOKuoA4nNb2s= -github.com/containerd/containerd v1.5.1/go.mod h1:0DOxVqwDy2iZvrZp2JUx/E+hS0UNTVn7dJnIOwtYR4g= -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.6/go.mod h1:ZoP1geJldzCVY3Tonoz7b1IXk8rIX0Nltt5QE4OMNk0= -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= -github.com/containerd/continuity v0.0.0-20200710164510-efbc4488d8fe/go.mod h1:cECdGN1O8G9bgKTlLhuPJimka6Xb/Gg7vYzCTNVxhvo= -github.com/containerd/continuity v0.0.0-20201208142359-180525291bb7/go.mod h1:kR3BEg7bDFaEddKm54WSmrol1fKWDU1nKYkgrcgZT7Y= -github.com/containerd/continuity v0.0.0-20210208174643-50096c924a4e/go.mod h1:EXlVlkqNba9rJe3j7w3Xa924itAMLgZH4UD/Q4PExuQ= -github.com/containerd/continuity v0.1.0/go.mod h1:ICJu0PwR54nI0yPEnJ6jcS+J7CZAUXrLh8lPo2knzsM= -github.com/containerd/continuity v0.2.2/go.mod h1:pWygW9u7LtS1o4N/Tn0FoCFDIXZ7rxcMX7HX1Dmibvk= -github.com/containerd/fifo v0.0.0-20180307165137-3d5202aec260/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI= -github.com/containerd/fifo v0.0.0-20190226154929-a9fb20d87448/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI= -github.com/containerd/fifo v0.0.0-20200410184934-f15a3290365b/go.mod h1:jPQ2IAeZRCYxpS/Cm1495vGFww6ecHmMk1YJH2Q5ln0= -github.com/containerd/fifo v0.0.0-20201026212402-0724c46b320c/go.mod h1:jPQ2IAeZRCYxpS/Cm1495vGFww6ecHmMk1YJH2Q5ln0= -github.com/containerd/fifo v0.0.0-20210316144830-115abcc95a1d/go.mod h1:ocF/ME1SX5b1AOlWi9r677YJmCPSwwWnQ9O123vzpE4= -github.com/containerd/fifo v1.0.0/go.mod h1:ocF/ME1SX5b1AOlWi9r677YJmCPSwwWnQ9O123vzpE4= -github.com/containerd/go-cni v1.0.1/go.mod h1:+vUpYxKvAF72G9i1WoDOiPGRtQpqsNW/ZHtSlv++smU= -github.com/containerd/go-cni v1.0.2/go.mod h1:nrNABBHzu0ZwCug9Ije8hL2xBCYh/pjfMb1aZGrrohk= -github.com/containerd/go-cni v1.1.0/go.mod h1:Rflh2EJ/++BA2/vY5ao3K6WJRR/bZKsX123aPk+kUtA= -github.com/containerd/go-cni v1.1.3/go.mod h1:Rflh2EJ/++BA2/vY5ao3K6WJRR/bZKsX123aPk+kUtA= -github.com/containerd/go-cni v1.1.6/go.mod h1:BWtoWl5ghVymxu6MBjg79W9NZrCRyHIdUtk4cauMe34= -github.com/containerd/go-runc v0.0.0-20180907222934-5a6d9f37cfa3/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0= -github.com/containerd/go-runc v0.0.0-20190911050354-e029b79d8cda/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0= -github.com/containerd/go-runc v0.0.0-20200220073739-7016d3ce2328/go.mod h1:PpyHrqVs8FTi9vpyHwPwiNEGaACDxT/N/pLcvMSRA9g= -github.com/containerd/go-runc v0.0.0-20201020171139-16b287bc67d0/go.mod h1:cNU0ZbCgCQVZK4lgG3P+9tn9/PaJNmoDXPpoJhDR+Ok= -github.com/containerd/go-runc v1.0.0/go.mod h1:cNU0ZbCgCQVZK4lgG3P+9tn9/PaJNmoDXPpoJhDR+Ok= -github.com/containerd/imgcrypt v1.0.1/go.mod h1:mdd8cEPW7TPgNG4FpuP3sGBiQ7Yi/zak9TYCG3juvb0= -github.com/containerd/imgcrypt v1.0.4-0.20210301171431-0ae5c75f59ba/go.mod h1:6TNsg0ctmizkrOgXRNQjAPFWpMYRWuiB6dSF4Pfa5SA= -github.com/containerd/imgcrypt v1.1.1-0.20210312161619-7ed62a527887/go.mod h1:5AZJNI6sLHJljKuI9IHnw1pWqo/F0nGDOuR9zgTs7ow= -github.com/containerd/imgcrypt v1.1.1/go.mod h1:xpLnwiQmEUJPvQoAapeb2SNCxz7Xr6PJrXQb0Dpc4ms= -github.com/containerd/imgcrypt v1.1.3/go.mod h1:/TPA1GIDXMzbj01yd8pIbQiLdQxed5ue1wb8bP7PQu4= -github.com/containerd/imgcrypt v1.1.4/go.mod h1:LorQnPtzL/T0IyCeftcsMEO7AqxUDbdO8j/tSUpgxvo= -github.com/containerd/nri v0.0.0-20201007170849-eb1350a75164/go.mod h1:+2wGSDGFYfE5+So4M5syatU0N0f0LbWpuqyMi4/BE8c= -github.com/containerd/nri v0.0.0-20210316161719-dbaa18c31c14/go.mod h1:lmxnXF6oMkbqs39FiCt1s0R2HSMhcLel9vNL3m4AaeY= -github.com/containerd/nri v0.1.0/go.mod h1:lmxnXF6oMkbqs39FiCt1s0R2HSMhcLel9vNL3m4AaeY= -github.com/containerd/stargz-snapshotter/estargz v0.4.1/go.mod h1:x7Q9dg9QYb4+ELgxmo4gBUeJB0tl5dqH1Sdz0nJU1QM= -github.com/containerd/ttrpc v0.0.0-20190828154514-0e0f228740de/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o= -github.com/containerd/ttrpc v0.0.0-20190828172938-92c8520ef9f8/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o= -github.com/containerd/ttrpc v0.0.0-20191028202541-4f1b8fe65a5c/go.mod h1:LPm1u0xBw8r8NOKoOdNMeVHSawSsltak+Ihv+etqsE8= -github.com/containerd/ttrpc v1.0.1/go.mod h1:UAxOpgT9ziI0gJrmKvgcZivgxOp8iFPSk8httJEt98Y= -github.com/containerd/ttrpc v1.0.2/go.mod h1:UAxOpgT9ziI0gJrmKvgcZivgxOp8iFPSk8httJEt98Y= -github.com/containerd/ttrpc v1.1.0/go.mod h1:XX4ZTnoOId4HklF4edwc4DcqskFZuvXB1Evzy5KFQpQ= -github.com/containerd/typeurl v0.0.0-20180627222232-a93fcdb778cd/go.mod h1:Cm3kwCdlkCfMSHURc+r6fwoGH6/F1hH3S4sg0rLFWPc= -github.com/containerd/typeurl v0.0.0-20190911142611-5eb25027c9fd/go.mod h1:GeKYzf2pQcqv7tJ0AoCuuhtnqhva5LNU3U+OyKxxJpk= -github.com/containerd/typeurl v1.0.1/go.mod h1:TB1hUtrpaiO88KEK56ijojHS1+NeF0izUACaJW2mdXg= -github.com/containerd/typeurl v1.0.2/go.mod h1:9trJWW2sRlGub4wZJRTW83VtbOLS6hwcDZXTn6oPz9s= -github.com/containerd/zfs v0.0.0-20200918131355-0a33824f23a2/go.mod h1:8IgZOBdv8fAgXddBT4dBXJPtxyRsejFIpXoklgxgEjw= -github.com/containerd/zfs v0.0.0-20210301145711-11e8f1707f62/go.mod h1:A9zfAbMlQwE+/is6hi0Xw8ktpL+6glmqZYtevJgaB8Y= -github.com/containerd/zfs v0.0.0-20210315114300-dde8f0fda960/go.mod h1:m+m51S1DvAP6r3FcmYCp54bQ34pyOwTieQDNRIRHsFY= -github.com/containerd/zfs v0.0.0-20210324211415-d5c4544f0433/go.mod h1:m+m51S1DvAP6r3FcmYCp54bQ34pyOwTieQDNRIRHsFY= -github.com/containerd/zfs v1.0.0/go.mod h1:m+m51S1DvAP6r3FcmYCp54bQ34pyOwTieQDNRIRHsFY= -github.com/containernetworking/cni v0.7.1/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= -github.com/containernetworking/cni v0.8.0/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= -github.com/containernetworking/cni v0.8.1/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= -github.com/containernetworking/cni v1.0.1/go.mod h1:AKuhXbN5EzmD4yTNtfSsX3tPcmtrBI6QcRV0NiNt15Y= -github.com/containernetworking/cni v1.1.1/go.mod h1:sDpYKmGVENF3s6uvMvGgldDWeG8dMxakj/u+i9ht9vw= -github.com/containernetworking/plugins v0.8.6/go.mod h1:qnw5mN19D8fIwkqW7oHHYDHVlzhJpcY6TQxn/fUyDDM= -github.com/containernetworking/plugins v0.9.1/go.mod h1:xP/idU2ldlzN6m4p5LmGiwRDjeJr6FLK6vuiUwoH7P8= -github.com/containernetworking/plugins v1.0.1/go.mod h1:QHCfGpaTwYTbbH+nZXKVTxNBDZcxSOplJT5ico8/FLE= -github.com/containernetworking/plugins v1.1.1/go.mod h1:Sr5TH/eBsGLXK/h71HeLfX19sZPp3ry5uHSkI4LPxV8= -github.com/containers/ocicrypt v1.0.1/go.mod h1:MeJDzk1RJHv89LjsH0Sp5KTY3ZYkjXO/C+bKAeWFIrc= -github.com/containers/ocicrypt v1.1.0/go.mod h1:b8AOe0YR67uU8OqfVNcznfFpAzu3rdgUV4GP9qXPfu4= -github.com/containers/ocicrypt v1.1.1/go.mod h1:Dm55fwWm1YZAjYRaJ94z2mfZikIyIN4B0oB3dj3jFxY= -github.com/containers/ocicrypt v1.1.2/go.mod h1:Dm55fwWm1YZAjYRaJ94z2mfZikIyIN4B0oB3dj3jFxY= -github.com/containers/ocicrypt v1.1.3/go.mod h1:xpdkbVAuaH3WzbEabUd5yDsl9SwJA5pABH85425Es2g= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= -github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= -github.com/coreos/go-iptables v0.4.5/go.mod h1:/mVI274lEDI2ns62jHCDnCyBF9Iwsmekav8Dbxlm1MU= -github.com/coreos/go-iptables v0.5.0/go.mod h1:/mVI274lEDI2ns62jHCDnCyBF9Iwsmekav8Dbxlm1MU= -github.com/coreos/go-iptables v0.6.0/go.mod h1:Qe8Bv2Xik5FyTXwgIbLAnv2sWSBmvWdFETJConOQ//Q= -github.com/coreos/go-oidc v2.1.0+incompatible h1:sdJrfw8akMnCuUlaZU3tE/uYXFgfqom8DBE9so9EBsM= github.com/coreos/go-oidc v2.1.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc= +github.com/coreos/go-oidc v2.2.1+incompatible h1:mh48q/BqXqgjVHpy2ZY7WnWAbenxRjsz9N1i1YxjHAk= +github.com/coreos/go-oidc v2.2.1+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-systemd v0.0.0-20161114122254-48702e0da86b/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd/v22 v22.0.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= github.com/coreos/go-systemd/v22 v22.1.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/creasty/defaults v1.5.2 h1:/VfB6uxpyp6h0fr7SPp7n8WJBoV8jfxQXPCnkVSjyls= github.com/creasty/defaults v1.5.2/go.mod h1:FPZ+Y0WNrbqOVw+c6av63eyHUAl6pMHZwqLPvXUZGfY= github.com/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV+0YP4qX0UQ7r2MoYZ+AvYDp12OF5yg4q8rGnyNh4= -github.com/cyphar/filepath-securejoin v0.2.2/go.mod h1:FpkQEhXnPnOthhzymB7CGsFk2G9VLXONKD9G7QGMM+4= github.com/cyphar/filepath-securejoin v0.2.3 h1:YX6ebbZCZP7VkM3scTTokDgBL2TY741X51MTk3ycuNI= github.com/cyphar/filepath-securejoin v0.2.3/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= -github.com/d2g/dhcp4 v0.0.0-20170904100407-a1d1b6c41b1c/go.mod h1:Ct2BUK8SB0YC1SMSibvLzxjeJLnrYEVLULFNiHY9YfQ= -github.com/d2g/dhcp4client v1.0.0/go.mod h1:j0hNfjhrt2SxUOw55nL0ATM/z4Yt3t2Kd1mW34z5W5s= -github.com/d2g/dhcp4server v0.0.0-20181031114812-7d4a0a7f59a5/go.mod h1:Eo87+Kg/IX2hfWJfwxMzLyuSZyxSoAug2nGa1G2QAi8= -github.com/d2g/hardwareaddr v0.0.0-20190221164911-e7d9fbe030e4/go.mod h1:bMl4RjIciD2oAxI7DmWRx6gbeqrkoLqv3MV0vzNad+I= github.com/dancannon/gorethink v4.0.0+incompatible h1:KFV7Gha3AuqT+gr0B/eKvGhbjmUv0qGF43aKCIKVE9A= github.com/dancannon/gorethink v4.0.0+incompatible/go.mod h1:BLvkat9KmZc1efyYwhz3WnybhRZtgF1K929FD8z1avU= -github.com/danieljoos/wincred v1.0.2/go.mod h1:SnuYRW9lp1oJrZX/dXJqr0cPK5gYXqx3EJbmjhLdK9U= -github.com/danieljoos/wincred v1.1.0/go.mod h1:XYlo+eRTsVA9aHGp7NGjFkPla4m+DCL7hqDjlFjiygg= github.com/danieljoos/wincred v1.1.2 h1:QLdCxFs1/Yl4zduvBdcHB8goaYk9RARS2SgLLRuAyr0= github.com/danieljoos/wincred v1.1.2/go.mod h1:GijpziifJoIBfYh+S7BbkdUTU4LfM+QnGqR5Vl2tAx0= github.com/dapr/kit v0.0.2 h1:VNg6RWrBMOdtY0/ZLztyAa/RjyFLaskdO9wt2HIREwk= @@ -606,31 +432,26 @@ github.com/dave/jennifer v1.4.0/go.mod h1:fIb+770HOpJ2fmN9EPPKOqm1vMGhB+TwXKMZhr github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/deepmap/oapi-codegen v1.3.6 h1:Wj44p9A0V0PJ+AUg0BWdyGcsS1LY18U+0rCuPQgK0+o= github.com/deepmap/oapi-codegen v1.3.6/go.mod h1:aBozjEveG+33xPiP55Iw/XbVkhtZHEGLq3nxlX0+hfU= -github.com/deepmap/oapi-codegen v1.8.1 h1:gSKgzu1DvWfRctnr0UVwieWkg1LEecP0C2htZyBwDTA= -github.com/deepmap/oapi-codegen v1.8.1/go.mod h1:YLgSKSDv/bZQB7N4ws6luhozi3cEdRktEqrX88CvjIw= -github.com/denisenkom/go-mssqldb v0.0.0-20210411162248-d9abbec934ba h1:HuzamveGKQH9cN1TrsZgEoG0sHvTa5j3LKquWaHR3sY= -github.com/denisenkom/go-mssqldb v0.0.0-20210411162248-d9abbec934ba/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU= -github.com/denverdino/aliyungo v0.0.0-20190125010748-a747050bb1ba/go.mod h1:dV8lFg6daOBZbT6/BDGIz6Y3WFGn8juu6G+CQ6LHtl0= +github.com/denisenkom/go-mssqldb v0.12.3 h1:pBSGx9Tq67pBOTLmxNuirNTeB8Vjmf886Kx+8Y+8shw= +github.com/denisenkom/go-mssqldb v0.12.3/go.mod h1:k0mtMFOnU+AihqFxPMiF05rtiDrorD1Vrm1KEz5hxDo= github.com/devigned/tab v0.1.1 h1:3mD6Kb1mUOYeLpJvTVSDwSg5ZsfSxfvxGRTxRsJsITA= github.com/devigned/tab v0.1.1/go.mod h1:XG9mPq0dFghrYvoBF3xdRrJzSTX1b7IQrvaL9mzjeJY= -github.com/dghubble/go-twitter v0.0.0-20190719072343-39e5462e111f h1:M2wB039zeS1/LZtN/3A7tWyfctiOBL4ty5PURBmDdWU= -github.com/dghubble/go-twitter v0.0.0-20190719072343-39e5462e111f/go.mod h1:xfg4uS5LEzOj8PgZV7SQYRHbG7jPUnelEiaAVJxmhJE= -github.com/dghubble/oauth1 v0.6.0 h1:m1yC01Ohc/eF38jwZ8JUjL1a+XHHXtGQgK+MxQbmSx0= -github.com/dghubble/oauth1 v0.6.0/go.mod h1:8pFdfPkv/jr8mkChVbNVuJ0suiHe278BtWI4Tk1ujxk= -github.com/dghubble/sling v1.3.0 h1:pZHjCJq4zJvc6qVQ5wN1jo5oNZlNE0+8T/h0XeXBUKU= -github.com/dghubble/sling v1.3.0/go.mod h1:XXShWaBWKzNLhu2OxikSNFrlsvowtz4kyRuXUG7oQKY= +github.com/dghubble/go-twitter v0.0.0-20221024160433-0cc1e72ed6d8 h1:ZrkR0vW8jXGy3wxfyEc20au8lqNJU8yn6g19I4AdzfQ= +github.com/dghubble/go-twitter v0.0.0-20221024160433-0cc1e72ed6d8/go.mod h1:B0/qdW5XUupJvcsx40hnVbfjzz9He5YpYXx6eVVdiSY= +github.com/dghubble/oauth1 v0.7.1 h1:JjbOVSVVkms9A4h/sTQy5Jb2nFuAAVb2qVYgenJPyrE= +github.com/dghubble/oauth1 v0.7.1/go.mod h1:0eEzON0UY/OLACQrmnjgJjmvCGXzjBCsZqL1kWDXtF0= +github.com/dghubble/sling v1.4.0 h1:/n8MRosVTthvMbwlNZgLx579OGVjUOy3GNEv5BIqAWY= +github.com/dghubble/sling v1.4.0/go.mod h1:0r40aNsU9EdDUVBNhfCstAtFgutjgJGYbO1oNzkMoM8= github.com/dgraph-io/badger/v3 v3.2103.2 h1:dpyM5eCJAtQCBcMCZcT4UBZchuTJgCywerHHgmxfxM8= -github.com/dgraph-io/badger/v3 v3.2103.2/go.mod h1:RHo4/GmYcKKh5Lxu63wLEMHJ70Pac2JqZRYGhlyAo2M= github.com/dgraph-io/ristretto v0.1.0 h1:Jv3CGQHp9OjuMBSne1485aDpUkTKEcUqF+jm/LuerPI= -github.com/dgraph-io/ristretto v0.1.0/go.mod h1:fux0lOrBhrVCJd3lcTHsIJhq1T2rokOu6v9Vcb3Q9ug= -github.com/dgrijalva/jwt-go v0.0.0-20170104182250-a601269ab70c/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= -github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/dgryski/trifles v0.0.0-20200323201526-dd97f9abfb48 h1:fRzb/w+pyskVMQ+UbP35JkH8yB7MYb4q/qhBarqZE6g= +github.com/dgryski/trifles v0.0.0-20200323201526-dd97f9abfb48/go.mod h1:if7Fbed8SFyPtHLHbg49SI7NAdJiC5WIA09pe59rfAA= github.com/didip/tollbooth v4.0.2+incompatible h1:fVSa33JzSz0hoh2NxpwZtksAzAgd7zjmGO20HCZtF4M= github.com/didip/tollbooth v4.0.2+incompatible/go.mod h1:A9b0665CE6l1KmzpDws2++elm/CsuWBMa5Jv4WY0PEY= github.com/dimchansky/utfbom v1.1.0/go.mod h1:rO41eb7gLfo8SF1jd9F8HplJm1Fewwi4mQvIirEdv+8= @@ -638,26 +459,8 @@ github.com/dimchansky/utfbom v1.1.1 h1:vV6w1AhK4VMnhBno/TPVCoK9U/LP0PkLCS9tbxHdi github.com/dimchansky/utfbom v1.1.1/go.mod h1:SxdoEBH5qIqFocHMyGOXVAybYJdr71b1Q/j0mACtrfE= github.com/dimfeld/httptreemux v5.0.1+incompatible h1:Qj3gVcDNoOthBAqftuD596rm4wg/adLLz5xh5CmpiCA= github.com/dimfeld/httptreemux v5.0.1+incompatible/go.mod h1:rbUlSV+CCpv/SuqUTP/8Bk2O3LyUV436/yaRGkhP6Z0= -github.com/distribution/distribution/v3 v3.0.0-20220526142353-ffbd94cbe269/go.mod h1:28YO/VJk9/64+sTGNuYaBjWxrXTPrj0C0XmgTIOjxX4= -github.com/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E= -github.com/dnaeon/go-vcr v1.1.0 h1:ReYa/UBrRyQdant9B4fNHGoCNKw6qh6P0fsdGmZpR7c= -github.com/docker/cli v0.0.0-20191017083524-a8ff7f821017/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= -github.com/docker/cli v20.10.17+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= -github.com/docker/distribution v0.0.0-20190905152932-14b96e55d84c/go.mod h1:0+TTO4EOBfRPhZXAeF1Vu+W3hHZ8eLp8PgKVZlcvtFY= -github.com/docker/distribution v2.7.1-0.20190205005809-0d3efadf0154+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v1.4.2-0.20190924003213-a8608b5b67c7/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker v20.10.17+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker-credential-helpers v0.6.3/go.mod h1:WRaJzqw3CTB9bk10avuGsjVBZsD05qeibJ1/TYlvc0Y= -github.com/docker/docker-credential-helpers v0.6.4/go.mod h1:ofX3UI0Gz1TteYBjtgs07O36Pyasyp66D2uKT7H8W1c= -github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= -github.com/docker/go-events v0.0.0-20170721190031-9461782956ad/go.mod h1:Uw6UezgYA44ePAFQYUehOuCzmy5zmg/+nl2ZfMWGkpA= -github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c/go.mod h1:Uw6UezgYA44ePAFQYUehOuCzmy5zmg/+nl2ZfMWGkpA= -github.com/docker/go-metrics v0.0.0-20180209012529-399ea8c73916/go.mod h1:/u0gXw0Gay3ceNrsHubL3BtdOL2fHf93USgMTe0W5dI= -github.com/docker/go-metrics v0.0.1/go.mod h1:cG1hvH2utMXtqgqqYE9plW6lDxS3/5ayHzueweSI3Vw= -github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= -github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1/go.mod h1:cyGadeNEkKy96OOhEzfZl+yxihPEzKnqJwvfuSUqbZE= -github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= +github.com/dnaeon/go-vcr v1.2.0 h1:zHCHvJYTMh1N7xnV7zf1m1GPBF9Ad0Jk/whtQ1663qI= +github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ= github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= github.com/dubbogo/go-zookeeper v1.0.3/go.mod h1:fn6n2CAEer3novYgk9ULLwAjuV8/g4DdC2ENwRb6E+c= github.com/dubbogo/go-zookeeper v1.0.4-0.20211212162352-f9d2183d89d5/go.mod h1:fn6n2CAEer3novYgk9ULLwAjuV8/g4DdC2ENwRb6E+c= @@ -675,16 +478,17 @@ github.com/dubbogo/triple v1.1.8/go.mod h1:9pgEahtmsY/avYJp3dzUQE8CMMVe1NtGBmUhf github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/dvsekhvalnov/jose2go v0.0.0-20200901110807-248326c1351b/go.mod h1:7BvyPhdbLxMXIYTFPLsyJRFMsKmOZnQmzh6Gb+uquuM= github.com/dvsekhvalnov/jose2go v1.5.0 h1:3j8ya4Z4kMCwT5nXIKFSV84YS+HdqSSO0VsTQxaLAeM= github.com/dvsekhvalnov/jose2go v1.5.0/go.mod h1:QsHjhyTlD/lAVqn/NSbVZmSCGeDehTB/mPZadG+mhXU= github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= -github.com/eapache/go-resiliency v1.2.0 h1:v7g92e/KSN71Rq7vSThKaWIq68fL4YHvWyiUKorFR1Q= -github.com/eapache/go-resiliency v1.2.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= +github.com/eapache/go-resiliency v1.3.0 h1:RRL0nge+cWGlxXbUzJ7yMcq6w2XBEr19dCN6HECGaT0= +github.com/eapache/go-resiliency v1.3.0/go.mod h1:5yPzW0MIvSe0JDsv0v+DvcjEv2FyD6iZYSs1ZI+iQho= github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21 h1:YEetp8/yCZMuEPMUDHG0CW/brkkEp8mzqk2+ODEitlw= github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= github.com/eapache/queue v1.1.0 h1:YOEu7KNc61ntiQlcEeUIoDTJ2o8mQznoNvUhiigpIqc= github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= +github.com/eclipse/paho.mqtt.golang v1.4.2 h1:66wOzfUHSSI1zamx7jR6yMEI5EuHnT1G6rNA5PM12m4= +github.com/eclipse/paho.mqtt.golang v1.4.2/go.mod h1:JGt0RsEwEX+Xa/agj90YJ9d9DH2b7upDZMK9HRbFvCA= github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= @@ -706,10 +510,10 @@ github.com/envoyproxy/go-control-plane v0.10.1/go.mod h1:AY7fTTXNdv/aJ2O5jwpxAPO github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/envoyproxy/protoc-gen-validate v0.6.2/go.mod h1:2t7qjJNvHPx8IjnBOzl9E9/baC+qXE/TeeyBRzgJDws= -github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= -github.com/evanphx/json-patch v4.11.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch/v5 v5.5.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= +github.com/facebookgo/clock v0.0.0-20150410010913-600d898af40a h1:yDWHCSQ40h88yih2JAcL6Ls/kVkSE8GFACTGVnMPruw= +github.com/facebookgo/clock v0.0.0-20150410010913-600d898af40a/go.mod h1:7Ga40egUymuWXxAe151lTNnCv97MddSOVsjpPPkityA= github.com/facebookgo/stack v0.0.0-20160209184415-751773369052 h1:JWuenKqqX8nojtoVVWjGfOF9635RETekkoH6Cc9SX0A= github.com/facebookgo/stack v0.0.0-20160209184415-751773369052/go.mod h1:UbMTZqLaRiH3MsBH8va0n7s1pQYcu3uTb8G4tygF4Zg= github.com/fasthttp-contrib/sessions v0.0.0-20160905201309-74f6ac73d5d5 h1:M4CVMQ5ueVmGZAtkW2bsO+ftesCYpfxl27JTqtzKBzE= @@ -723,51 +527,36 @@ github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYF github.com/fatih/structs v1.1.0 h1:Q7juDM0QtcnhCpeyLGQKyg4TOIghuNXrkL32pHAUMxo= github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/felixge/httpsnoop v1.0.2/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/form3tech-oss/jwt-go v3.2.3+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/foxcpp/go-mockdns v0.0.0-20210729171921-fb145fc6f897 h1:E52jfcE64UG42SwLmrW0QByONfGynWuzBvm86BoB9z8= -github.com/foxcpp/go-mockdns v0.0.0-20210729171921-fb145fc6f897/go.mod h1:lgRN6+KxQBawyIghpnl5CezHFGS9VLzvtVlwxvzXTQ4= github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= github.com/frankban/quicktest v1.10.0/go.mod h1:ui7WezCLWMWxVWr1GETZY3smRy0G4KWq9vcPtJmFl7Y= +github.com/frankban/quicktest v1.10.2 h1:19ARM85nVi4xH7xPXuc5eM/udya5ieh7b/Sv+d844Tk= github.com/frankban/quicktest v1.10.2/go.mod h1:K+q6oSqb0W0Ininfk863uOk1lMy69l/P6txr3mVT54s= -github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k= -github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE= -github.com/frankban/quicktest v1.14.3/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU= github.com/fsnotify/fsnotify v1.5.4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwVZI= github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= -github.com/fullsailor/pkcs7 v0.0.0-20190404230743-d7302db945fa/go.mod h1:KnogPXtdwXqoenmZCw6S+25EAm2MkxbG0deNDu4cbSA= -github.com/garyburd/redigo v0.0.0-20150301180006-535138d7bcd7/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY= github.com/gavv/httpexpect v2.0.0+incompatible h1:1X9kcRshkSKEjNJJxX9Y9mQ5BRfbxU5kORdjhlA1yX8= github.com/gavv/httpexpect v2.0.0+incompatible/go.mod h1:x+9tiU1YnrOvnB725RkpoLv1M62hOWzwo5OXotisrKc= github.com/getkin/kin-openapi v0.2.0/go.mod h1:V1z9xl9oF5Wt7v32ne4FmiF1alpS4dM6mNzoywPOXlk= -github.com/getkin/kin-openapi v0.61.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= github.com/getkin/kin-openapi v0.76.0/go.mod h1:660oXbgy5JFMKreazJaQTw7o+X00qeSyhcnluiMv+Xg= github.com/getsentry/raven-go v0.2.0/go.mod h1:KungGk8q33+aIAZUIVWZDr2OfAEBsO49PX4NzFV5kcQ= -github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= -github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= github.com/go-asn1-ber/asn1-ber v1.3.1/go.mod h1:hEBeB/ic+5LoWskz+yKT7vGhhPYkProFKoKdwZRWMe0= github.com/go-chi/chi v4.0.2+incompatible/go.mod h1:eB3wogJHnLi3x/kFX2A+IbTBlXxmMeXJVKy9tTv1XzQ= -github.com/go-chi/chi/v5 v5.0.0/go.mod h1:BBug9lr0cqtdAhsu6R4AAdvufI0/XBzAQSsUqJpoZOs= github.com/go-co-op/gocron v1.9.0/go.mod h1:DbJm9kdgr1sEvWpHCA7dFFs/PGHPMil9/97EXCRPr4k= github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= -github.com/go-errors/errors v1.4.0 h1:2OA7MFw38+e9na72T1xgkomPb6GzZzzxvJ5U630FoRM= -github.com/go-errors/errors v1.4.0/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-ini/ini v1.25.4/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= -github.com/go-ini/ini v1.66.6/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.10.0 h1:dXFJfIHVvUcpSgDOV+Ne6t7jXri8Tfv2uOLHUZ2XNuo= @@ -784,43 +573,28 @@ github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNV github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= -github.com/go-logr/logr v0.4.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.2.1/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/stdr v1.2.0/go.mod h1:YkVgnZu1ZjjL7xTxrfm/LLZBfkhTqSR1ydtm6jTKKwI= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-logr/zapr v1.2.0/go.mod h1:Qa4Bsj2Vb+FAVeAKsLD8RLQ+YRJB8YDmOAKxaBQf7Ro= +github.com/go-ole/go-ole v1.2.4 h1:nNBDSCOigTSiarFpYE9J/KtEA1IOW4CNeqT9TQDqCxI= github.com/go-ole/go-ole v1.2.4/go.mod h1:XCwSNxSkXRo4vlyPy93sltvi/qJq0jqQhjqQNIwKuxM= -github.com/go-ole/go-ole v1.2.5 h1:t4MGB5xEDZvXI+0rMjjsfBsD7yAgp/s9ZDkL1JndXwY= -github.com/go-ole/go-ole v1.2.5/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= -github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= -github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg= github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg= -github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc= github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8= github.com/go-openapi/jsonreference v0.19.5/go.mod h1:RdybgQwPxbL4UEjuAruzK1x3nE69AqPYEJeo/TWfEeg= -github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc= -github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo= -github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I= -github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-openapi/swag v0.19.14/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= github.com/go-ozzo/ozzo-validation/v4 v4.3.0 h1:byhDUpfEwjsVQb1vBunvIjh2BHQ9ead57VkAEY4V+Es= github.com/go-ozzo/ozzo-validation/v4 v4.3.0/go.mod h1:2NKgrcHl3z6cJs+3Oo940FPRiTzuqKbvfrL2RxCj6Ew= github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= -github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= github.com/go-playground/locales v0.14.0 h1:u50s323jtVGugKlcYeyzC0etD1HifMjqmJqb8WugfUU= github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs= -github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho= github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA= -github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= github.com/go-playground/validator/v10 v10.11.0 h1:0W+xRM511GY47Yy3bZUbJVitCNg2BOGlCyvTqsp/xIw= github.com/go-playground/validator/v10 v10.11.0/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU= github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI= @@ -836,78 +610,52 @@ github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/me github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= github.com/go-test/deep v1.0.2-0.20181118220953-042da051cf31/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= github.com/go-test/deep v1.0.2/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= -github.com/gobuffalo/attrs v0.0.0-20190224210810-a9411de4debd/go.mod h1:4duuawTqi2wkkpB4ePgWMaai6/Kc6WEz83bhFwpHzj0= -github.com/gobuffalo/depgen v0.0.0-20190329151759-d478694a28d3/go.mod h1:3STtPUQYuzV0gBVOY3vy6CfMm/ljR4pABfrTeHNLHUY= -github.com/gobuffalo/depgen v0.1.0/go.mod h1:+ifsuy7fhi15RWncXQQKjWS9JPkdah5sZvtHc2RXGlg= -github.com/gobuffalo/envy v1.6.15/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI= -github.com/gobuffalo/envy v1.7.0/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI= -github.com/gobuffalo/flect v0.1.0/go.mod h1:d2ehjJqGOH/Kjqcoz+F7jHTBbmDb38yXA598Hb50EGs= -github.com/gobuffalo/flect v0.1.1/go.mod h1:8JCgGVbRjJhVgD6399mQr4fx5rRfGKVzFjbj6RE/9UI= -github.com/gobuffalo/flect v0.1.3/go.mod h1:8JCgGVbRjJhVgD6399mQr4fx5rRfGKVzFjbj6RE/9UI= -github.com/gobuffalo/genny v0.0.0-20190329151137-27723ad26ef9/go.mod h1:rWs4Z12d1Zbf19rlsn0nurr75KqhYp52EAGGxTbBhNk= -github.com/gobuffalo/genny v0.0.0-20190403191548-3ca520ef0d9e/go.mod h1:80lIj3kVJWwOrXWWMRzzdhW3DsrdjILVil/SFKBzF28= -github.com/gobuffalo/genny v0.1.0/go.mod h1:XidbUqzak3lHdS//TPu2OgiFB+51Ur5f7CSnXZ/JDvo= -github.com/gobuffalo/genny v0.1.1/go.mod h1:5TExbEyY48pfunL4QSXxlDOmdsD44RRq4mVZ0Ex28Xk= -github.com/gobuffalo/gitgen v0.0.0-20190315122116-cc086187d211/go.mod h1:vEHJk/E9DmhejeLeNt7UVvlSGv3ziL+djtTr3yyzcOw= -github.com/gobuffalo/gogen v0.0.0-20190315121717-8f38393713f5/go.mod h1:V9QVDIxsgKNZs6L2IYiGR8datgMhB577vzTDqypH360= -github.com/gobuffalo/gogen v0.1.0/go.mod h1:8NTelM5qd8RZ15VjQTFkAW6qOMx5wBbW4dSCS3BY8gg= -github.com/gobuffalo/gogen v0.1.1/go.mod h1:y8iBtmHmGc4qa3urIyo1shvOD8JftTtfcKi+71xfDNE= -github.com/gobuffalo/logger v0.0.0-20190315122211-86e12af44bc2/go.mod h1:QdxcLw541hSGtBnhUc4gaNIXRjiDppFGaDqzbrBd3v8= -github.com/gobuffalo/mapi v1.0.1/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc= -github.com/gobuffalo/mapi v1.0.2/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc= -github.com/gobuffalo/packd v0.0.0-20190315124812-a385830c7fc0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWeG2RIxq4= -github.com/gobuffalo/packd v0.1.0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWeG2RIxq4= -github.com/gobuffalo/packr/v2 v2.0.9/go.mod h1:emmyGweYTm6Kdper+iywB6YK5YzuKchGtJQZ0Odn4pQ= -github.com/gobuffalo/packr/v2 v2.2.0/go.mod h1:CaAwI0GPIAv+5wKLtv8Afwl+Cm78K/I/VCm/3ptBN+0= -github.com/gobuffalo/syncx v0.0.0-20190224160051-33c29581e754/go.mod h1:HhnNqWY95UYwwW3uSASeV7vtgYkT2t16hJgV3AEPUpw= github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= -github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo= -github.com/gobwas/pool v0.2.1/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= -github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= -github.com/gocql/gocql v0.0.0-20210515062232-b7ef815b4556 h1:N/MD/sr6o61X+iZBAT2qEUF023s4KbA8RWfKzl0L6MQ= -github.com/gocql/gocql v0.0.0-20210515062232-b7ef815b4556/go.mod h1:DL0ekTmBSTdlNF25Orwt/JMzqIq3EJ4MVa/J/uK64OY= -github.com/godbus/dbus v0.0.0-20151105175453-c7fdd8b5cd55/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= -github.com/godbus/dbus v0.0.0-20180201030542-885f9cc04c9c/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= -github.com/godbus/dbus v0.0.0-20190422162347-ade71ed3457e/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= +github.com/gocql/gocql v1.2.1 h1:G/STxUzD6pGvRHzG0Fi7S04SXejMKBbRZb7pwre1edU= +github.com/gocql/gocql v1.2.1/go.mod h1:3gM2c4D3AnkISwBxGnMMsS8Oy4y2lhbPRsH4xnJrHG8= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+Hoeu/iUR3ruzNvZ+yQfO03a0= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/godbus/dbus/v5 v5.0.6/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= -github.com/gofrs/uuid v4.0.0+incompatible h1:1SD/1F5pU8p29ybwgQSwpQk+mwdRrXCYuPhW6m+TnJw= -github.com/gofrs/uuid v4.0.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= +github.com/gofrs/uuid v3.3.0+incompatible h1:8K4tyRfvU1CYPgJsveYFQMhpFd/wXNM7iK6rR7UHz84= +github.com/gofrs/uuid v3.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gogap/errors v0.0.0-20200228125012-531a6449b28c h1:dM8T2g87Kj9PBQjpstkQ20ZQjzrpZJwMwueX8mllrDI= github.com/gogap/errors v0.0.0-20200228125012-531a6449b28c/go.mod h1:tbRYYYC7g/H7QlCeX0Z2zaThWKowF4QQCFIsGgAsqRo= github.com/gogap/stack v0.0.0-20150131034635-fef68dddd4f8 h1:AuxION6c7in+AsPmFjQTUKT6/o1suT8XEEpfU0pWsHA= github.com/gogap/stack v0.0.0-20150131034635-fef68dddd4f8/go.mod h1:6q1WEv2BiAO4FSdwLQTJbWQYAn1/qDNJHUGJNXCj9kM= +github.com/gogo/googleapis v0.0.0-20180223154316-0cd9801be74a/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= -github.com/gogo/googleapis v1.2.0/go.mod h1:Njal3psf3qN6dwBtQfUmBZh2ybovJ0tlu3o/AC7HYjU= -github.com/gogo/googleapis v1.4.0/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= +github.com/gogo/googleapis v1.4.1 h1:1Yx4Myt7BxzvUr5ldGSbwYiZG6t9wGBZ+8/fX3Wvtq0= +github.com/gogo/googleapis v1.4.1/go.mod h1:2lpHqI5OcWCtVElxXnPt+s8oJvMpySlOyM6xDCrzib4= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= -github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= -github.com/gogo/protobuf v1.3.0/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/gogo/status v1.1.1 h1:DuHXlSFHNKqTQ+/ACf5Vs6r4X/dH2EgIzR9Vr+H65kg= +github.com/gogo/status v1.1.1/go.mod h1:jpG3dM5QPcqu19Hg8lkUhBFBa3TcLs1DG7+2Jqci7oU= github.com/goji/httpauth v0.0.0-20160601135302-2da839ab0f4d/go.mod h1:nnjvkQ9ptGaCkuDUx6wNykzzlUixGxvkme+H/lnzb+A= github.com/golang-jwt/jwt v3.2.1+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= github.com/golang-jwt/jwt v3.2.2+incompatible h1:IfV12K8xAKAnZqdXVzCZ+TOjboZ2keLg81eXfW3O+oY= github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= -github.com/golang-jwt/jwt/v4 v4.2.0 h1:besgBTC8w8HjP6NzQdxwKH9Z5oQMZ24ThTrHp3cZ8eU= github.com/golang-jwt/jwt/v4 v4.2.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= +github.com/golang-jwt/jwt/v4 v4.4.2 h1:rcc4lwaZgFMCZ5jxF9ABolDcIHdBytAFgqFPbSJQAYs= +github.com/golang-jwt/jwt/v4 v4.4.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe h1:lXe2qZdvpiX5WZkZR4hgp4KJVfY3nMkvmwbVkpv1rVY= github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= +github.com/golang-sql/sqlexp v0.1.0 h1:ZCD6MBpcuOVfGVqsEmY5/4FtYiKz6tSyUv9LPEDei6A= +github.com/golang-sql/sqlexp v0.1.0/go.mod h1:J4ad9Vo8ZCWQ2GMrC4UCQy1JpCbwU9m3EOqtpKwwwHI= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/glog v1.0.0 h1:nfP3RFugxnNRyKgeWd4oI1nYvXpxrx8ck8ZrcizshdQ= github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= @@ -940,14 +688,12 @@ github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaS github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/snappy v0.0.0-20170215233205-553a64147049/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golangci/lint-1 v0.0.0-20181222135242-d2cdd8c08219/go.mod h1:/X8TswGSh1pIozq4ZwCfxS0WA5JGXguxk94ar/4c87Y= -github.com/gomodule/redigo v1.8.2/go.mod h1:P9dn9mFrCBvWhGE1wpxx6fgq7BAeLBk+UUUzlpkBYO0= github.com/gonum/blas v0.0.0-20181208220705-f22b278b28ac/go.mod h1:P32wAyui1PQ58Oce/KYkOqQv8cVw1zAapXOl+dRFGbc= github.com/gonum/floats v0.0.0-20181209220543-c233463c7e82/go.mod h1:PxC8OnwL11+aosOB5+iEPoV3picfs8tUpkVd0pDo+Kg= github.com/gonum/integrate v0.0.0-20181209220457-a422b5c0fdf2/go.mod h1:pDgmNM6seYpwvPos3q+zxlXMsbve6mOIPucUnUOrI7Y= @@ -961,8 +707,11 @@ github.com/google/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4= github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA= github.com/google/cel-go v0.9.0/go.mod h1:U7ayypeSkw23szu4GaQTPJGx66c20mx8JklMSxrmI1w= github.com/google/cel-spec v0.6.0/go.mod h1:Nwjgxy5CbjlPrtCWjeDjUyKMl8w41YBYGjsyDdqk0xA= +github.com/google/flatbuffers v1.11.0/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= github.com/google/flatbuffers v1.12.1 h1:MVlul7pQNoDzWRLTw5imwYsl+usrS1TXG2H4jg6ImGw= github.com/google/flatbuffers v1.12.1/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= +github.com/google/gnostic v0.5.7-v3refs h1:FhTMOKj2VhjpouxvWJAV1TL304uMlb9zcDqkl6cEI54= +github.com/google/gnostic v0.5.7-v3refs/go.mod h1:73MKFl6jIHelAJNaBGFzt3SPtZULs9dYrGFt8OiIsHQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -976,15 +725,14 @@ github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= -github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg= github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-containerregistry v0.5.1/go.mod h1:Ct15B4yir3PLOP5jsy0GNeYVaIZs/MK/Jz5any1wFW0= -github.com/google/go-querystring v1.0.0 h1:Xkwi/a1rcvNg1PPYe5vI8GbeBY/jrVuDX5ASuANWTrk= -github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= +github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= +github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/gofuzz v1.1.0 h1:Hsa8mG0dQ46ij8Sl2AYJDUv1oA9/d6Vk+3LG99Oe02g= github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= -github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= @@ -1010,30 +758,32 @@ github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm4 github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= +github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= +github.com/googleapis/enterprise-certificate-proxy v0.2.0 h1:y8Yozv7SZtlU//QXbezB6QkpuE6jMD2/gfzk4AftXjs= +github.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= -github.com/googleapis/gax-go/v2 v2.2.0 h1:s7jOdKSaksJVOxE0Y/S32otcfiP+UQ0cL8/GTKaONwE= github.com/googleapis/gax-go/v2 v2.2.0/go.mod h1:as02EH8zWkzwUoLbBaFeQ+arQaj/OthfcblKl4IGNaM= -github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg= +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.6.0 h1:SXk3ABtQYDT/OH8jAyvEOQ58mgawq5C4o/4/89qN2ZU= +github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMdcIDwU/6+DDoY= github.com/googleapis/gnostic v0.5.1/go.mod h1:6U4PtQXGIEt/Z3h5MAT7FNofLnw9vXk2cUuW7uA/OeU= github.com/googleapis/gnostic v0.5.5 h1:9fHAtK0uDfpveeqqo1hkEZJcFvYXAiCN3UutL8F9xHw= github.com/googleapis/gnostic v0.5.5/go.mod h1:7+EbHbldMins07ALC74bsA81Ovc97DwqyJO1AENw9kA= +github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gopherjs/gopherjs v0.0.0-20190910122728-9d188e94fb99/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00 h1:l5lAOZEym3oK3SQ2HBHWsJUfbNBiTXJDeW2QDxw9AQ0= github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= github.com/gorilla/css v1.0.0 h1:BQqNyPTi50JCFMTw/b67hByjMVXZRwGha6wxVGkeihY= -github.com/gorilla/css v1.0.0/go.mod h1:Dn721qIggHpt4+EFCcTLTU/vk5ySda2ReITrtgBl60c= -github.com/gorilla/handlers v0.0.0-20150720190736-60c7bfde3e33/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ= -github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/mux v1.7.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/mux v1.7.4/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= @@ -1041,24 +791,23 @@ github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB7 github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4= github.com/gorilla/sessions v1.2.1/go.mod h1:dk2InVEVJ0sfLlnXv9EAgkf6ecYs/i80K/zI+bUmuGM= github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= -github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/grandcat/zeroconf v0.0.0-20190424104450-85eadb44205c h1:svzQzfVE9t7Y1CGULS5PsMWs4/H4Au/ZTJzU/0CKgqc= -github.com/grandcat/zeroconf v0.0.0-20190424104450-85eadb44205c/go.mod h1:YjKB0WsLXlMkO9p+wGTCoPIDGRJH0mz7E526PxkQVxI= +github.com/grandcat/zeroconf v1.0.0 h1:uHhahLBKqwWBV6WZUDAT71044vwOTL+McW0mBJvo6kE= +github.com/grandcat/zeroconf v1.0.0/go.mod h1:lTKmG1zh86XyCoUeIHSA4FJMBwCJiQmGfcP2PdzytEs= github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.2.2/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI= +github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 h1:+9834+KizmvFV7pXQGSXQTsaWhq2GjuNUt0aUU0YBYw= github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.14.6/go.mod h1:zdiPV4Yse/1gnckTHtghG4GkDEdKCRJduHpTxT3/jcw= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0/go.mod h1:hgWBS7lorOAVIJEQMi4ZsPv9hVvWI6+ch50m39Pf2Ks= github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645/go.mod h1:6iZfnjpejD4L/4DwD7NryNaJyCQdzwWwH2MWhCA90Kw= github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c h1:6rhixN/i8ZofjG1Y75iExal34USq5p+wiN1tpie8IrU= github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c/go.mod h1:NMPJylDgVpX0MLRlPy15sqSwOFv/U1GZ2m21JhFfek0= @@ -1066,13 +815,13 @@ github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed h1:5upAirOpQc github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed/go.mod h1:tMWxXQ9wFIaZeTI9F+hmhFiGpFmhOHzyShyFUhRm0H4= github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= -github.com/hashicorp/consul/api v1.12.0 h1:k3y1FYv6nuKyNTqj6w9gXOx5r5CfLj/k/euUeBXj1OY= github.com/hashicorp/consul/api v1.12.0/go.mod h1:6pVBMo0ebnYdt2S3H87XhekM/HHrUoTD2XXb/VrZVy0= +github.com/hashicorp/consul/api v1.13.0 h1:2hnLQ0GjQvw7f3O61jMO8gbasZviZTrt9R8WzgiirHc= +github.com/hashicorp/consul/api v1.13.0/go.mod h1:ZlVrynguJKcYr54zGaDbaL3fOvKC9m72FhPvA8T35KQ= github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/consul/sdk v0.8.0 h1:OJtKBtEjboEZvG6AOUdh4Z1Zbyu0WcxQ0qatRrZHTVU= github.com/hashicorp/consul/sdk v0.8.0/go.mod h1:GBvyrGALthsZObzUGsfgHZQDXjg4lOjagTIwIR1vPms= -github.com/hashicorp/errwrap v0.0.0-20141028054710-7554cd9344ce/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= @@ -1086,8 +835,9 @@ github.com/hashicorp/go-hclog v0.9.1/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrj github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-hclog v0.14.1/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-hclog v0.16.2/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= -github.com/hashicorp/go-hclog v1.0.0 h1:bkKf0BeBXcSYa7f5Fyi9gMuQ8gNsxeiNpZjR6VxNZeo= github.com/hashicorp/go-hclog v1.0.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= +github.com/hashicorp/go-hclog v1.1.0 h1:QsGcniKx5/LuX2eYoeL+Np3UKYPNaN7YKpTh29h8rbw= +github.com/hashicorp/go-hclog v1.1.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJFeZnpfm2KLowc= github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= @@ -1096,7 +846,6 @@ github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iP github.com/hashicorp/go-msgpack v0.5.5/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= github.com/hashicorp/go-msgpack v1.1.5 h1:9byZdVjKTe5mce63pRVNP1L7UAmdHOTEMGehn6KvJWs= github.com/hashicorp/go-msgpack v1.1.5/go.mod h1:gWVc3sv/wbDmR3rQsj1CAktEZzoz1YNK9NfGLXJ69/4= -github.com/hashicorp/go-multierror v0.0.0-20161216184304-ed905158d874/go.mod h1:JMRHfdO9jKNzS/+BTlxCjKNQHg/jZAft8U7LloJvN7I= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= @@ -1121,8 +870,9 @@ github.com/hashicorp/go-sockaddr v1.0.2/go.mod h1:rB4wwRAUzs07qva3c5SdrY/NEtAUjG github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-uuid v1.0.2 h1:cfejS+Tpcp13yd5nYHWDI6qVCny6wyX2Mt5SGur2IGE= github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.3 h1:2gKiV6YVmrJ1i2CKKa9obLvRieoRGviZFL26PcT/Co8= +github.com/hashicorp/go-uuid v1.0.3/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-version v1.1.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= @@ -1138,12 +888,12 @@ github.com/hashicorp/mdns v1.0.4/go.mod h1:mtBihi+LeNXGtG8L9dX59gAEa12BDtBQSp4v/ github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= github.com/hashicorp/memberlist v0.3.0 h1:8+567mCcFDnS5ADl7lrpxPMWiFCElyUEeW0gtj34fMA= github.com/hashicorp/memberlist v0.3.0/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= -github.com/hashicorp/raft v1.2.0 h1:mHzHIrF0S91d3A7RPBvuqkgB4d/7oFJZyvf1Q4m7GA0= -github.com/hashicorp/raft v1.2.0/go.mod h1:vPAJM8Asw6u8LxC3eJCUZmRP/E4QmUGE1R7g7k8sG/8= -github.com/hashicorp/raft-boltdb v0.0.0-20171010151810-6e5ba93211ea/go.mod h1:pNv7Wc3ycL6F5oOWn+tPGo2gWD4a5X+yp/ntwdKLjRk= +github.com/hashicorp/raft v1.3.11 h1:p3v6gf6l3S797NnK5av3HcczOC1T5CLoaRvg0g9ys4A= +github.com/hashicorp/raft v1.3.11/go.mod h1:J8naEwc6XaaCfts7+28whSeRvCqTd6e20BlCU3LtEO4= github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= -github.com/hashicorp/serf v0.9.6 h1:uuEX1kLR6aoda1TBttmJQKDLZE1Ob7KN0NPdE7EtCDc= github.com/hashicorp/serf v0.9.6/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= +github.com/hashicorp/serf v0.9.7 h1:hkdgbqizGQHuU5IPqYM1JdSMV8nKfpuOnZYXssk9muY= +github.com/hashicorp/serf v0.9.7/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= github.com/hashicorp/vault/api v1.0.4/go.mod h1:gDcqh3WGcR1cpF5AJz/B1UFheUEneMoIospckxBxk6Q= github.com/hashicorp/vault/sdk v0.1.13/go.mod h1:B+hVj7TpuQY1Y/GPbCpffmgd+tSEwvhkWnjtSYCaS2M= github.com/hashicorp/vault/sdk v0.3.0/go.mod h1:aZ3fNuL5VNydQk8GcLJ2TV8YCRVvyaakYkhZRoVuhj0= @@ -1154,37 +904,30 @@ github.com/hazelcast/hazelcast-go-client v0.0.0-20190530123621-6cf767c2f31a/go.m github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/huaweicloud/huaweicloud-sdk-go-obs v3.21.12+incompatible h1:tANYIteuFrosKbRYUk1Yo/OGJjbt4x3OVg211Qc60M0= github.com/huaweicloud/huaweicloud-sdk-go-obs v3.21.12+incompatible/go.mod h1:l7VUhRbTKCzdOacdT4oWCwATKyvZqUOlOqr0Ous3k4s= -github.com/huaweicloud/huaweicloud-sdk-go-v3 v0.0.87 h1:+7mrZ+YXKTILEBXOXl5fNhXLx9HqBq/OdUEI/603B34= -github.com/huaweicloud/huaweicloud-sdk-go-v3 v0.0.87/go.mod h1:IvF+Pe06JMUivVgN6B4wcsPEoFvVa40IYaOPZyUt5HE= +github.com/huaweicloud/huaweicloud-sdk-go-v3 v0.1.6 h1:18ZrfdnOMi2tx59TioYV5zFuCfD4YzoEz62ktQBOEeU= +github.com/huaweicloud/huaweicloud-sdk-go-v3 v0.1.6/go.mod h1:QpZ96CRqyqd5fEODVmnzDNp3IWi5W95BFmWz1nfkq+s= github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= github.com/iancoleman/strcase v0.0.0-20191112232945-16388991a334/go.mod h1:SK73tn/9oHe+/Y0h39VT4UCxmurVJkR5NA7kMEAOgSE= github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/imdario/mergo v0.3.10/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= -github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= -github.com/imdario/mergo v0.3.12 h1:b6R2BslTbIEToALKP7LxUvijTsNI9TAe80pLWN2g/HU= -github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= +github.com/imdario/mergo v0.3.6 h1:xTNEAn+kxVO7dTZGu0CegyqKZmoWFI0rF8UxjlB2d28= +github.com/imdario/mergo v0.3.6/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/imkira/go-interpol v1.1.0 h1:KIiKr0VSG2CUW1hl1jpiyuzuJeKUUpC8iM1AIE7N1Vk= github.com/imkira/go-interpol v1.1.0/go.mod h1:z0h2/2T3XF8kyEPpRgJ3kmNv+C43p+I/CoI+jC3w2iA= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/influxdata/influxdb-client-go v1.4.0 h1:+KavOkwhLClHFfYcJMHHnTL5CZQhXJzOm5IKHI9BqJk= github.com/influxdata/influxdb-client-go v1.4.0/go.mod h1:S+oZsPivqbcP1S9ur+T+QqXvrYS3NCZeMQtBoH4D1dw= github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= +github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839 h1:W9WBk7wlPfJLvMCdtV4zPulc4uCPrlywQOmbFOhgQNU= github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo= -github.com/influxdata/line-protocol v0.0.0-20210311194329-9aa0e372d097 h1:vilfsDSy7TDxedi9gyBkMvAirat/oRcL0lFdJBf6tdM= -github.com/influxdata/line-protocol v0.0.0-20210311194329-9aa0e372d097/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo= -github.com/intel/goresctrl v0.2.0/go.mod h1:+CZdzouYFn5EsxgqAQTEzMfwKwuc0fVdMrT9FCCAVRQ= -github.com/j-keck/arping v0.0.0-20160618110441-2cf9dc699c56/go.mod h1:ymszkNOg6tORTn+6F6j+Jc8TOr5osrynvN6ivFWZ2GA= -github.com/j-keck/arping v1.0.2/go.mod h1:aJbELhR92bSk7tp79AWM/ftfc90EfEi2bQJrbBFOsPw= github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM= github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b h1:C8S2+VttkHFdOOCXJe+YGfa4vHYwlt4Zx+IVXQ97jYg= github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b/go.mod h1:vsD4gTJCa9TptPL8sPkXrLZ+hDuNrZCnj29CQpr4X1E= -github.com/jackc/pgx/v5 v5.0.0 h1:3UdmB3yUeTnJtZ+nDv3Mxzd4GHHvHkl9XN3oboIbOrY= -github.com/jackc/pgx/v5 v5.0.0/go.mod h1:JBbvW3Hdw77jKl9uJrEDATUZIFM2VFPzRq4RWIhkF4o= +github.com/jackc/pgx/v5 v5.0.4 h1:r5O6y84qHX/z/HZV40JBdx2obsHz7/uRj5b+CcYEdeY= +github.com/jackc/pgx/v5 v5.0.4/go.mod h1:U0ynklHtgg43fue9Ly30w3OCSTDPlXjig9ghrNGaguQ= github.com/jackc/puddle/v2 v2.0.0 h1:Kwk/AlLigcnZsDssc3Zun1dk1tAtQNPaBBxBHWn0Mjc= github.com/jackc/puddle/v2 v2.0.0/go.mod h1:itE7ZJY8xnoo0JqJEpSMprN0f+NQkMCuEV/N9j8h0oc= github.com/jawher/mow.cli v1.0.4/go.mod h1:5hQj2V8g+qYmLUVWqu4Wuja1pI57M83EChYLVZ0sMKk= @@ -1193,12 +936,12 @@ github.com/jcmturner/aescts/v2 v2.0.0 h1:9YKLH6ey7H4eDBXW8khjYslgyqG2xZikXP0EQFK github.com/jcmturner/aescts/v2 v2.0.0/go.mod h1:AiaICIRyfYg35RUkr8yESTqvSy7csK90qZ5xfvvsoNs= github.com/jcmturner/dnsutils/v2 v2.0.0 h1:lltnkeZGL0wILNvrNiVCR6Ro5PGU/SeBvVO/8c/iPbo= github.com/jcmturner/dnsutils/v2 v2.0.0/go.mod h1:b0TnjGOvI/n42bZa+hmXL+kFJZsFT7G4t3HTlQ184QM= -github.com/jcmturner/gofork v1.0.0 h1:J7uCkflzTEhUZ64xqKnkDxq3kzc96ajM1Gli5ktUem8= -github.com/jcmturner/gofork v1.0.0/go.mod h1:MK8+TM0La+2rjBD4jE12Kj1pCCxK7d2LK/UM3ncEo0o= +github.com/jcmturner/gofork v1.7.6 h1:QH0l3hzAU1tfT3rZCnW5zXl+orbkNMMRGJfdJjHVETg= +github.com/jcmturner/gofork v1.7.6/go.mod h1:1622LH6i/EZqLloHfE7IeZ0uEJwMSUyQ/nDd82IeqRo= github.com/jcmturner/goidentity/v6 v6.0.1 h1:VKnZd2oEIMorCTsFBnJWbExfNN7yZr3EhJAxwOkZg6o= github.com/jcmturner/goidentity/v6 v6.0.1/go.mod h1:X1YW3bgtvwAXju7V3LCIMpY0Gbxyjn/mY9zx4tFonSg= -github.com/jcmturner/gokrb5/v8 v8.4.2 h1:6ZIM6b/JJN0X8UM43ZOM6Z4SJzla+a/u7scXFJzodkA= -github.com/jcmturner/gokrb5/v8 v8.4.2/go.mod h1:sb+Xq/fTY5yktf/VxLsE3wlfPqQjp0aWNYyvBVK62bc= +github.com/jcmturner/gokrb5/v8 v8.4.3 h1:iTonLeSJOn7MVUtyMT+arAn5AKAPrkilzhGw8wE/Tq8= +github.com/jcmturner/gokrb5/v8 v8.4.3/go.mod h1:dqRwJGXznQrzw6cWmyo6kH+E7jksEQG/CyVWsJEsJO0= github.com/jcmturner/rpc/v2 v2.0.3 h1:7FXXj8Ti1IaVFpSAziCZWNzbNuZmnvw/i6CqLNdWfZY= github.com/jcmturner/rpc/v2 v2.0.3/go.mod h1:VUJYCIDm3PVOEHw8sgt091/20OJjskO/YJki3ELg/Hc= github.com/jehiah/go-strftime v0.0.0-20171201141054-1d33003b3869/go.mod h1:cJ6Cj7dQo+O6GJNiMx+Pa94qKj+TG8ONdKHgMNIyyag= @@ -1206,15 +949,12 @@ github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJS github.com/jhump/protoreflect v1.6.0/go.mod h1:eaTn3RZAmMBcV0fifFvlm6VHNz3wSkYyXYWUh7ymB74= github.com/jinzhu/copier v0.3.5 h1:GlvfUwHk62RokgqVNvYsku0TATCF7bAHVwEXoBh3iJg= github.com/jinzhu/copier v0.3.5/go.mod h1:DfbEm0FYsaqBcKcFuvmOZb218JkPGtvSHsKg8S8hyyg= -github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= -github.com/jmespath/go-jmespath v0.0.0-20160803190731-bd40a432e4c7/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.3.0/go.mod h1:9QtRXoHjLGCJ5IBSaohpXITPlowMeeYCZ7fLUTSywik= github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= -github.com/joefitzgerald/rainbow-reporter v0.1.0/go.mod h1:481CNgqmVHQZzdIbN52CupLJyoVwB10FQ/IQlF1pdL8= github.com/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc= github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= @@ -1243,33 +983,24 @@ github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88 h1:uC1QfSlInpQ github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k= github.com/k0kubun/pp v3.0.1+incompatible h1:3tqvf7QgUnZ5tXO6pNAZlrvHgl6DvifjDrd9g2S9Z40= github.com/k0kubun/pp v3.0.1+incompatible/go.mod h1:GWse8YhT0p8pT4ir3ZgBbfZild3tgzSScAn6HmfYukg= -github.com/karrick/godirwalk v1.8.0/go.mod h1:H5KPZjojv4lE+QYImBI8xVtrBRgYrIVsaRPx4tDPEn4= -github.com/karrick/godirwalk v1.10.3/go.mod h1:RoGL9dQei4vP9ilrpETWE8CLOZ1kiN0LhBygSwrAsHA= github.com/kataras/go-errors v0.0.3 h1:RQSGEb5AHjsGbwhNW8mFC7a9JrgoCLHC8CBQ4keXJYU= github.com/kataras/go-errors v0.0.3/go.mod h1:K3ncz8UzwI3bpuksXt5tQLmrRlgxfv+52ARvAu1+I+o= github.com/kataras/go-serializer v0.0.4 h1:isugggrY3DSac67duzQ/tn31mGAUtYqNpE2ob6Xt/SY= github.com/kataras/go-serializer v0.0.4/go.mod h1:/EyLBhXKQOJ12dZwpUZZje3lGy+3wnvG7QKaVJtm/no= -github.com/keybase/go-keychain v0.0.0-20190712205309-48d3d31d256d/go.mod h1:JJNrCn9otv/2QP4D7SMJBgaleKpOf66PnW6F5WGNRIc= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/klauspost/compress v1.9.5/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= -github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.10.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= -github.com/klauspost/compress v1.10.8/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= -github.com/klauspost/compress v1.11.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= -github.com/klauspost/compress v1.11.13/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= -github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -github.com/klauspost/compress v1.15.0/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -github.com/klauspost/compress v1.15.1 h1:y9FcTHGyrebwfP0ZZqFiaxTaiDnUrGkJkI+f583BL1A= -github.com/klauspost/compress v1.15.1/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= +github.com/klauspost/compress v1.14.4/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= +github.com/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= +github.com/klauspost/compress v1.15.11 h1:Lcadnb3RKGin4FYM/orgq0qde+nc15E5Cbqg4B9Sx9c= +github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= github.com/knadh/koanf v1.4.1 h1:Z0VGW/uo8NJmjd+L1Dc3S5frq6c62w5xQ9Yf4Mg3wFQ= github.com/knadh/koanf v1.4.1/go.mod h1:1cfH5223ZeZUOs8FU2UdTmaNfHpqgtjV0+NHjRO43gs= github.com/koding/multiconfig v0.0.0-20171124222453-69c27309b2d7/go.mod h1:Y2SaZf2Rzd0pXkLVhLlCiAXFCLSXAIbTKDivVgff/AM= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= @@ -1279,7 +1010,6 @@ github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfn github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= @@ -1292,37 +1022,32 @@ github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+ github.com/labd/commercetools-go-sdk v1.1.0 h1:iX0JDkfAsZPXs0FUioYoFZ3Gm/GG9dEOqkv8vz439MM= github.com/labd/commercetools-go-sdk v1.1.0/go.mod h1:I+KKNALlg6PcSertsVA7E442koO99GT7gldWqwZlUGo= github.com/labstack/echo/v4 v4.1.11/go.mod h1:i541M3Fj6f76NZtHSj7TXnyM8n2gaodfvfxNnFqi74g= -github.com/labstack/echo/v4 v4.2.1/go.mod h1:AA49e0DZ8kk5jTOOCKNuPR6oTnBS0dYiM4FW1e6jwpg= +github.com/labstack/echo/v4 v4.9.0 h1:wPOF1CE6gvt/kmbMR4dGzWvHMPT+sAEUJOwOTtvITVY= +github.com/labstack/echo/v4 v4.9.0/go.mod h1:xkCDAdFCIf8jsFQ5NnbK7oqaF/yU1A1X20Ltm0OvSks= github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k= -github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= +github.com/labstack/gommon v0.3.1 h1:OomWaJXm7xR6L1HmEtGyQf26TEn7V6X88mktX9kee9o= +github.com/labstack/gommon v0.3.1/go.mod h1:uW6kP17uPlLJsD3ijUYn3/M5bAxtlZhMI6m3MFxTMTM= github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w= github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= github.com/lestrrat/go-envload v0.0.0-20180220120943-6ed08b54a570/go.mod h1:BLt8L9ld7wVsvEWQbuLrUZnCMnUmLZ+CGDzKtclrTlE= github.com/lestrrat/go-file-rotatelogs v0.0.0-20180223000712-d3151e2a480f/go.mod h1:UGmTpUd3rjbtfIpwAPrcfmGf/Z1HS95TATB+m57TPB8= github.com/lestrrat/go-strftime v0.0.0-20180220042222-ba3bf9c1d042/go.mod h1:TPpsiPUEh0zFL1Snz4crhMlBe60PYxRHr5oFF3rRYg0= -github.com/lib/pq v1.9.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/lib/pq v1.10.4/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= github.com/linkedin/goavro/v2 v2.9.8 h1:jN50elxBsGBDGVDEKqUlDuU1cFwJ11K/yrJCBMe/7Wg= github.com/linkedin/goavro/v2 v2.9.8/go.mod h1:UgQUb2N/pmueQYH9bfqFioWxzYCZXSfF8Jw03O5sjqA= -github.com/linuxkit/virtsock v0.0.0-20201010232012-f8cee7dfc7a3/go.mod h1:3r6x7q95whyfWQpmGZTu3gk3v2YkMi05HEzl7Tf7YEo= github.com/lyft/protoc-gen-star v0.5.3/go.mod h1:V0xaHgaf5oCCqmcxYcWiDfTiKsZsRc87/1qhoTACD8w= github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= github.com/machinebox/graphql v0.2.2 h1:dWKpJligYKhYKO5A2gvNhkJdQMNZeChZYyBbrZkBZfo= github.com/machinebox/graphql v0.2.2/go.mod h1:F+kbVMHuwrQ5tYgU9JXlnskM8nOaFxCAEolaQybkjWA= -github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= github.com/magiconair/properties v1.8.6 h1:5ibWZ6iY0NctNGWo87LalDlEZ6R41TqbbDamhfG/Qzo= github.com/magiconair/properties v1.8.6/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= -github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= -github.com/markbates/oncer v0.0.0-20181203154359-bf2de49a0be2/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE= -github.com/markbates/safe v1.0.1/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0= -github.com/marstr/guid v1.1.0/go.mod h1:74gB1z2wpxxInTG6yaqA7KrtM0NZ+RbrcqDvYHefzho= github.com/matoous/go-nanoid v1.5.0/go.mod h1:zyD2a71IubI24efhpvkJz+ZwfwagzgSO6UNiFsZKN7U= github.com/matoous/go-nanoid/v2 v2.0.0 h1:d19kur2QuLeHmJBkvYkFdhFBzLoo1XVm2GgTpL+9Tj0= github.com/matoous/go-nanoid/v2 v2.0.0/go.mod h1:FtS4aGPVfEkxKxhdWPAspZpZSh1cOjtM7Ej/So3hR0g= @@ -1334,8 +1059,8 @@ github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVc github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.11/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= github.com/mattn/go-colorable v0.1.12 h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZbaA40= github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= github.com/mattn/go-ieproxy v0.0.0-20190702010315-6dee0af9227d/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= @@ -1351,28 +1076,19 @@ github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Ky github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= -github.com/mattn/go-shellwords v1.0.3/go.mod h1:3xCvwCdWdlDJUrvuMn7Wuy9eWs4pE8vqg+NOMyg4B2o= -github.com/mattn/go-shellwords v1.0.6/go.mod h1:3xCvwCdWdlDJUrvuMn7Wuy9eWs4pE8vqg+NOMyg4B2o= -github.com/mattn/go-shellwords v1.0.12/go.mod h1:EZzvwXDESEeg03EKmM+RmDnNOPKG4lLtQsUlTZDWQ8Y= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI= github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= -github.com/maxbrunsfeld/counterfeiter/v6 v6.2.2/go.mod h1:eD9eIE7cdwcMi9rYluz88Jz2VyhSmden33/aXg4oVIY= -github.com/microcosm-cc/bluemonday v1.0.17 h1:Z1a//hgsQ4yjC+8zEkV8IWySkXnsxmdSY642CTFQb5Y= -github.com/microcosm-cc/bluemonday v1.0.17/go.mod h1:Z0r70sCuXHig8YpBzCc5eGHAap2K7e/u082ZUpDRRqM= +github.com/microcosm-cc/bluemonday v1.0.21 h1:dNH3e4PSyE4vNX+KlRGHT5KrSvjeUkoNPwEORjffHJg= +github.com/microcosm-cc/bluemonday v1.0.21/go.mod h1:ytNkv4RrDrLJ2pqlsSI46O6IVXmZOBBD4SaJyDwwTkM= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= -github.com/miekg/dns v1.1.25/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= +github.com/miekg/dns v1.1.27/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM= github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= -github.com/miekg/dns v1.1.43/go.mod h1:+evo5L0630/F6ca/Z9+GAqzhjGyn8/c+TBaOyfEl0V4= github.com/miekg/dns v1.1.50 h1:DQUfb9uc6smULcREF09Uc+/Gd46YWqJd5DbpPE9xkcA= github.com/miekg/dns v1.1.50/go.mod h1:e3IlAVfNqAllflbibAZEWOXOQ+Ynzk/dDozDxY7XnME= -github.com/miekg/pkcs11 v1.0.3/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= -github.com/miekg/pkcs11 v1.1.1/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= github.com/minio/highwayhash v1.0.2 h1:Aak5U0nElisjDCfPSG79Tgzkn2gl66NxOMspRrKnA/g= github.com/minio/highwayhash v1.0.2/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= -github.com/mistifyio/go-zfs v2.1.2-0.20190413222219-f784269be439+incompatible/go.mod h1:8AuVvqP/mXw1px98n46wfvcGfQ4ci2FwoAjKYxuo3Z4= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI= github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= @@ -1382,9 +1098,8 @@ github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrk github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-testing-interface v0.0.0-20171004221916-a61a99592b77/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= +github.com/mitchellh/go-testing-interface v1.0.0 h1:fzU/JVNcaqHQEcVFAKeR41fkiLdIPrefOvVG1VZ96U0= github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= -github.com/mitchellh/go-testing-interface v1.14.0 h1:/x0XQ6h+3U3nAyk1yx+bHPURrKa9sVVvYbuqZ7pIAtI= -github.com/mitchellh/go-testing-interface v1.14.0/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8= github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= @@ -1397,19 +1112,10 @@ github.com/mitchellh/mapstructure v1.4.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RR github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 h1:BpfhmLKZf+SjVanKKhCgf3bg+511DmU9eDQTen7LLbY= github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/osext v0.0.0-20151018003038-5e2d6d41470f/go.mod h1:OkQIRizQZAeMln+1tSwduZz7+Af5oFlKirV/MSYes2A= github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ= github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= -github.com/moby/locker v1.0.1/go.mod h1:S7SDdo5zpBK84bzzVlKr2V0hz+7x9hWbYC/kq7oQppc= github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c= -github.com/moby/sys/mountinfo v0.4.0/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A= -github.com/moby/sys/mountinfo v0.4.1/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A= -github.com/moby/sys/mountinfo v0.5.0/go.mod h1:3bMD3Rg+zkqx8MRYPi7Pyb0Ie97QEBmdxbhnCLlSvSU= -github.com/moby/sys/signal v0.6.0/go.mod h1:GQ6ObYZfqacOwTtlXvcmh9A26dVRul/hbOZn88Kg8Tg= -github.com/moby/sys/symlink v0.1.0/go.mod h1:GGDODQmbFOjFsXvfLVn3+ZRxkch54RkSiGqsZeMYowQ= -github.com/moby/sys/symlink v0.2.0/go.mod h1:7uZVF2dqJjG/NsClqul95CqKOBRQyYSNnJ6BMgR/gFs= -github.com/moby/term v0.0.0-20200312100748-672ec06f55cd/go.mod h1:DdlQx2hp0Ss5/fLikoLlEeIYiATotOjgB//nb973jeo= github.com/moby/term v0.0.0-20210610120745-9d4ed1856297/go.mod h1:vgPCkQMyxTZ7IDy8SXRufE172gr8+K/JE/7hHFxHW3A= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= @@ -1418,14 +1124,14 @@ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lN github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/modocache/gover v0.0.0-20171022184752-b58185e213c5/go.mod h1:caMODM3PzxT8aQXRPkAt8xlV/e7d7w8GM5g0fa5F0D8= github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= +github.com/montanaflynn/stats v0.6.6 h1:Duep6KMIDpY4Yo11iFsvyqJDyfzLF9+sndUKT+v64GQ= github.com/montanaflynn/stats v0.6.6/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow= -github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= github.com/moul/http2curl v1.0.0 h1:dRMWoAtb+ePxMlLkrCbAqh4TlPHXvoGUSQ323/9Zahs= github.com/moul/http2curl v1.0.0/go.mod h1:8UbvGypXm98wA/IqH45anm5Y2Z6ep6O31QGOAZ3H0fQ= -github.com/mrunalp/fileutils v0.5.0/go.mod h1:M1WthSahJixYnrXQl/DFQuteStB1weuxD2QJNHXfbSQ= -github.com/mrz1836/postmark v1.2.9 h1:gAqtnsyB2WKy+F0Iy3ebrATvSN60qW2yXTnoCdNANdA= -github.com/mrz1836/postmark v1.2.9/go.mod h1:xNRms8jgTfqBneqg0+PzvBrhuojefqXIWc6Np0nHiEM= +github.com/mrz1836/postmark v1.3.0 h1:2tFwxvLmAkh5quMXwCfvUdS6WYNrsr1svo1zDEzYROc= +github.com/mrz1836/postmark v1.3.0/go.mod h1:bgRfHzpUSl+zrQ8e2yh7zhQSJBwcZXywBVWkSa+6PFw= github.com/mschoch/smat v0.2.0 h1:8imxQsjDm8yFEAVBe7azKmKSgzSkZXDuKkSq9374khM= github.com/mschoch/smat v0.2.0/go.mod h1:kc9mz7DoBKqDyiRL7VZN8KvXQMWeTaVnttLRXOlotKw= github.com/mtibben/percent v0.2.1 h1:5gssi8Nqo8QU/r2pynCm+hBQHpkB/uNK7BJCFogWdzs= @@ -1437,36 +1143,33 @@ 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/nacos-group/nacos-sdk-go v1.0.8/go.mod h1:hlAPn3UdzlxIlSILAyOXKxjFSvDJ9oLzTJ9hLAK1KzA= github.com/nacos-group/nacos-sdk-go v1.1.1/go.mod h1:UHOtQNQY/qpk2dhg6gDq8u5+/CEIc3+lWmrmxEzX0/g= -github.com/nacos-group/nacos-sdk-go/v2 v2.0.1 h1:jEZjqdCDSt6ZFtl628UUwON21GxwJ+lEN/PDamQOzgU= -github.com/nacos-group/nacos-sdk-go/v2 v2.0.1/go.mod h1:SlhyCAv961LcZ198XpKfPEQqlJWt2HkL1fDLas0uy/w= +github.com/nacos-group/nacos-sdk-go/v2 v2.1.2 h1:A8GV6j0rw80I6tTKSav/pTpEgNECYXeFvZCsiLBWGnQ= +github.com/nacos-group/nacos-sdk-go/v2 v2.1.2/go.mod h1:ys/1adWeKXXzbNWfRNbaFlX/t6HVLWdpsNDvmoWTw0g= github.com/natefinch/lumberjack v2.0.0+incompatible h1:4QJd3OLAMgj7ph+yZTuX13Ld4UpgHp07nNdFX7mqFfM= github.com/natefinch/lumberjack v2.0.0+incompatible/go.mod h1:Wi9p2TTF5DG5oU+6YfsmYQpsTIOm0B1VNzQg9Mw6nPk= github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU= -github.com/nats-io/jwt v1.1.0/go.mod h1:n3cvmLfBfnpV4JJRN7lRYCyZnw48ksGsbThGXEk4w9M= -github.com/nats-io/jwt/v2 v2.2.1-0.20220113022732-58e87895b296 h1:vU9tpM3apjYlLLeY23zRWJ9Zktr5jp+mloR942LEOpY= -github.com/nats-io/jwt/v2 v2.2.1-0.20220113022732-58e87895b296/go.mod h1:0tqz9Hlu6bCBFLWAASKhE5vUA4c24L9KPUUgvwumE/k= +github.com/nats-io/jwt/v2 v2.3.0 h1:z2mA1a7tIf5ShggOFlR1oBPgd6hGqcDYsISxZByUzdI= +github.com/nats-io/jwt/v2 v2.3.0/go.mod h1:0tqz9Hlu6bCBFLWAASKhE5vUA4c24L9KPUUgvwumE/k= github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k= -github.com/nats-io/nats-server/v2 v2.1.9/go.mod h1:9qVyoewoYXzG1ME9ox0HwkkzyYvnlBDugfR4Gg/8uHU= -github.com/nats-io/nats-server/v2 v2.7.4 h1:c+BZJ3rGzUKCBIM4IXO8uNT2u1vajGbD1kPA6wqCEaM= -github.com/nats-io/nats-server/v2 v2.7.4/go.mod h1:1vZ2Nijh8tcyNe8BDVyTviCd9NYzRbubQYiEHsvOQWc= -github.com/nats-io/nats-streaming-server v0.21.2 h1:chyaVdWlPdBcSbLq3cpyCYcuXA+7bVXJmM4yWrdqL/8= -github.com/nats-io/nats-streaming-server v0.21.2/go.mod h1:2W8QfNVOtcFpmf0bRiwuLtRb0/hkX4NuOxPOFNOThVQ= +github.com/nats-io/nats-server/v2 v2.9.3/go.mod h1:4sq8wvrpbvSzL1n3ZfEYnH4qeUuIl5W990j3kw13rRk= +github.com/nats-io/nats-server/v2 v2.9.4 h1:GvRgv1936J/zYUwMg/cqtYaJ6L+bgeIOIvPslbesdow= +github.com/nats-io/nats-server/v2 v2.9.4/go.mod h1:AB6hAnGZDlYfqb7CTAm66ZKMZy9DpfierY1/PbpvI2g= +github.com/nats-io/nats-streaming-server v0.25.2 h1:cWjytvYksYPgnXnSocqnRWVrSgLclusnPGBNHQR4SqI= +github.com/nats-io/nats-streaming-server v0.25.2/go.mod h1:bRbgx+iCG6EZEXpqVMroRDuCGwR1iW+ta84aEGBaMhI= github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= -github.com/nats-io/nats.go v1.10.0/go.mod h1:AjGArbfyR50+afOUotNX2Xs5SYHf+CoOa5HH1eEl2HE= -github.com/nats-io/nats.go v1.13.1-0.20220308171302-2f2f6968e98d h1:zJf4l8Kp67RIZhoVeniSLZs69SHNgjLHz0aNsqPPlx8= -github.com/nats-io/nats.go v1.13.1-0.20220308171302-2f2f6968e98d/go.mod h1:BPko4oXsySz4aSWeFgOHLZs3G4Jq4ZAyE6/zMCxRT6w= +github.com/nats-io/nats.go v1.16.0/go.mod h1:BPko4oXsySz4aSWeFgOHLZs3G4Jq4ZAyE6/zMCxRT6w= +github.com/nats-io/nats.go v1.17.0/go.mod h1:BPko4oXsySz4aSWeFgOHLZs3G4Jq4ZAyE6/zMCxRT6w= +github.com/nats-io/nats.go v1.19.0 h1:H6j8aBnTQFoVrTGB6Xjd903UMdE7jz6DS4YkmAqgZ9Q= +github.com/nats-io/nats.go v1.19.0/go.mod h1:tLqubohF7t4z3du1QDPYJIQQyhb4wl6DhjxEajSI7UA= github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= -github.com/nats-io/nkeys v0.1.4/go.mod h1:XdZpAbhgyyODYqjTawOnIOI7VlbKSarI9Gfy1tqEu/s= github.com/nats-io/nkeys v0.3.0 h1:cgM5tL53EvYRU+2YLXIK0G2mJtK12Ft9oeooSZMA2G8= github.com/nats-io/nkeys v0.3.0/go.mod h1:gvUNGjVcM2IPr5rCsRsC6Wb3Hr2CQAm08dsxtV6A5y4= github.com/nats-io/nuid v1.0.1 h1:5iA8DT8V7q8WK2EScv2padNa/rTESc1KdnPw4TC2paw= github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= -github.com/nats-io/stan.go v0.8.3 h1:XyemjL9vAeGHooHn5RQy+ngljd8AVSM2l65Jdnpv4rI= -github.com/nats-io/stan.go v0.8.3/go.mod h1:Ejm8bbHnMTSptU6uNMAVuxeapMJYBB/Ml3ej6z4GoSY= -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/nats-io/stan.go v0.10.3 h1:8DOyQJ0+nza3zSVJZ19/cpikkrWA4rSKB3YvckIGOTI= +github.com/nats-io/stan.go v0.10.3/go.mod h1:Cgf5zk6kKpOCqqUIJeuBz6ZDz9osT791VhS6m28sSQQ= github.com/niean/gotools v0.0.0-20151221085310-ff3f51fc5c60/go.mod h1:gH2bvE9/eX49hWK7CwwL/+/y+dodduyxs5cTpBzF5v0= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/npillmayer/nestext v0.1.3/go.mod h1:h2lrijH8jpicr25dFY+oAJLyzlya6jhnuG+zWp9L0Uk= @@ -1477,67 +1180,26 @@ github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtb github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= -github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= -github.com/onsi/ginkgo v0.0.0-20151202141238-7f8ab55aaf3b/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.12.0/go.mod h1:oUhWkIvk5aDxtKvDDuw8gItl8pKl42LzjC9KZE0HfGg= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= -github.com/onsi/ginkgo v1.13.0/go.mod h1:+REjRxOmWfHCjfv9TTWB1jD1Frx4XydAD3zm1lskyM0= github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= +github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= github.com/onsi/ginkgo/v2 v2.1.3/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= -github.com/onsi/gomega v0.0.0-20151007035656-2152b45fa28a/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= +github.com/onsi/ginkgo/v2 v2.1.4 h1:GNapqRSid3zijZ9H77KrgVG4/8KqiyRsxcSxe+7ApXY= github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= -github.com/onsi/gomega v1.9.0/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.10.3/go.mod h1:V9xEwhxec5O8UDM77eCW8vLymOMltsqPVYWrpDsH8xc= -github.com/onsi/gomega v1.15.0/go.mod h1:cIuvLEne0aoVhAgh/O6ac0Op8WWw9H6eYCriF+tEHG0= github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= -github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE= +github.com/onsi/gomega v1.19.0 h1:4ieX6qQjPP/BfC3mpsAtIGGlxTWPeA3Inl/7DtXw1tw= +github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= -github.com/open-policy-agent/opa v0.43.1 h1:GAtUd6aO5lObFP6rRpteXDVffKa4vGUF4I6qVLdhUng= -github.com/open-policy-agent/opa v0.43.1/go.mod h1:xfTsKQEMvy7CxxgsCFoYuzT9jA/8C4JWLignCkN4Dzw= -github.com/opencontainers/go-digest v0.0.0-20170106003457-a6d0ee40d420/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= -github.com/opencontainers/go-digest v0.0.0-20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= -github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= -github.com/opencontainers/go-digest v1.0.0-rc1.0.20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= -github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= -github.com/opencontainers/image-spec v1.0.0/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= -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/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= -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= -github.com/opencontainers/runc v1.0.0-rc9/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= -github.com/opencontainers/runc v1.0.0-rc93/go.mod h1:3NOsor4w32B2tC0Zbl8Knk4Wg84SM2ImC1fxBuqJ/H0= -github.com/opencontainers/runc v1.0.2/go.mod h1:aTaHFFwQXuA71CiyxOdFFIorAoemI04suvGRQFzWTD0= -github.com/opencontainers/runc v1.1.0/go.mod h1:Tj1hFw6eFWp/o33uxGf5yF2BX5yz2Z6iptFpuvbbKqc= -github.com/opencontainers/runc v1.1.2/go.mod h1:Tj1hFw6eFWp/o33uxGf5yF2BX5yz2Z6iptFpuvbbKqc= -github.com/opencontainers/runtime-spec v0.1.2-0.20190507144316-5b71a03e2700/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/runtime-spec v1.0.1/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/runtime-spec v1.0.2-0.20190207185410-29686dbc5559/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/runtime-spec v1.0.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/runtime-spec v1.0.3-0.20200929063507-e6143ca7d51d/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/runtime-tools v0.0.0-20181011054405-1d69bd0f9c39/go.mod h1:r3f7wjNzSs2extwzU3Y+6pKfobzPh+kKFJ3ofN+3nfs= -github.com/opencontainers/selinux v1.6.0/go.mod h1:VVGKuOLlE7v4PJyT6h7mNWvq1rzqiriPsEqVhc+svHE= -github.com/opencontainers/selinux v1.8.0/go.mod h1:RScLhm78qiWa2gbVCcGkC7tCGdgk3ogry1nUQF8Evvo= -github.com/opencontainers/selinux v1.8.2/go.mod h1:MUIHuUEvKB1wtJjQdOyYRgOnLD2xAPP8dBsCoU0KuF8= -github.com/opencontainers/selinux v1.10.0/go.mod h1:2i0OySw99QjzBBQByd1Gr9gSjvuho1lHsJxIJ3gGbJI= -github.com/opencontainers/selinux v1.10.1/go.mod h1:2i0OySw99QjzBBQByd1Gr9gSjvuho1lHsJxIJ3gGbJI= +github.com/open-policy-agent/opa v0.45.0 h1:P5nuhVRtR+e58fk3CMMbiqr6ZFyWQPNOC3otsorGsFs= +github.com/open-policy-agent/opa v0.45.0/go.mod h1:/OnsYljNEWJ6DXeFOOnoGn8CvwZGMUS4iRqzYdJvmBI= github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= @@ -1545,6 +1207,7 @@ github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFSt github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA= +github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/oracle/oci-go-sdk/v54 v54.0.0 h1:CDLjeSejv2aDpElAJrhKpi6zvT/zhZCZuXchUUZ+LS4= @@ -1553,33 +1216,33 @@ github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIw github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pashagolub/pgxmock/v2 v2.0.0-beta2 h1:rE2t+DWZMsYK5mWo9HHGiW6bT5UNqzYSufeZoqKVZgw= -github.com/pashagolub/pgxmock/v2 v2.0.0-beta2/go.mod h1:EtBHVYgdXScsC19CLlUFk/IZA1rjY8UaRPKE1XxyM6w= +github.com/pashagolub/pgxmock/v2 v2.1.0 h1:mazMb0ssME7dN6RSTLH+9xWciG2UaU0aDs3GCHjL0ww= +github.com/pashagolub/pgxmock/v2 v2.1.0/go.mod h1:CgP/Cz1kOnSK7JT7w9DIWO0MZDbxdbTMXpZmwtaqqHo= github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc= github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ= github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= +github.com/pborman/uuid v1.2.1 h1:+ZZIw58t/ozdjRaXh/3awHfmWRbzYxJoAdNJxe/3pvw= +github.com/pborman/uuid v1.2.1/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/pelletier/go-toml v1.7.0/go.mod h1:vwGMzjaWMwyfHwgIBhI2YUM4fB6nL6lVAvS1LBMMhTE= -github.com/pelletier/go-toml v1.8.1/go.mod h1:T2/BmBdy8dvIRq1a/8aqjN41wvWlN4lrapLU/GW4pbc= github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= github.com/pelletier/go-toml v1.9.4 h1:tjENF6MfZAg8e4ZmZTeWaWiT2vXtsoO6+iuOjFhECwM= github.com/pelletier/go-toml v1.9.4/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= -github.com/peterh/liner v0.0.0-20170211195444-bf27d3ba8e1d/go.mod h1:xIteQHvHuaLYG9IFj6mSxM0fCKrs34IrEQUhOYuGPHc= -github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE= github.com/philhofer/fwd v1.1.1/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pierrec/lz4 v2.5.2+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= +github.com/pierrec/lz4 v2.6.0+incompatible h1:Ix9yFKn1nSPBLFl/yZknTp8TU5G4Ps0JDmguYK6iH1A= github.com/pierrec/lz4 v2.6.0+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= -github.com/pierrec/lz4 v2.6.1+incompatible h1:9UY3+iC23yxF0UfGaYrGplQ+79Rg+h/q9FV9ix19jjM= -github.com/pierrec/lz4 v2.6.1+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= +github.com/pierrec/lz4/v4 v4.1.17 h1:kV4Ip+/hUBC+8T6+2EgburRtkE9ef4nbY3f4dFhGjMc= +github.com/pierrec/lz4/v4 v4.1.17/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/pkg/browser v0.0.0-20180916011732-0a3d74bf9ce4/go.mod h1:4OwLy04Bl9Ef3GJJCoec+30X3LQs/0/m4HFRt/2LUSA= github.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4 h1:Qj1ukM4GlMWXNdMBuXcXfz/Kw9s1qm0CLY32QxuSImI= github.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4/go.mod h1:N6UoU20jOqggOuDwUaBQpluzLNDqif3kq9z2wpdYEfQ= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.8.1-0.20171018195549-f15c970de5b7/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -1594,76 +1257,71 @@ github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prY github.com/pquerna/cachecontrol v0.0.0-20180517163645-1555304b9b35 h1:J9b7z+QKAmPf4YLrFg6oQUotqHQeUNWwkvo7jZp1GLU= github.com/pquerna/cachecontrol v0.0.0-20180517163645-1555304b9b35/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA= github.com/prashantv/gostub v1.1.0/go.mod h1:A5zLQHz7ieHGG7is6LLXLz7I8+3LZzsrV0P1IAHhP5U= -github.com/prometheus/client_golang v0.0.0-20180209125602-c332b6f63c06/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.2/go.mod h1:OsXs2jCmiKlQ1lTBmv21f2mNfw4xf/QclQDMrYNZzcM= +github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= -github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g= github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= -github.com/prometheus/client_golang v1.4.1/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= github.com/prometheus/client_golang v1.5.1/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= github.com/prometheus/client_golang v1.9.0/go.mod h1:FqZLKOZnGdFAhOK4nqGHa7D66IdsO+O441Eve7ptJDU= github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= github.com/prometheus/client_golang v1.11.1/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= +github.com/prometheus/client_golang v1.12.0/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= -github.com/prometheus/client_golang v1.12.2 h1:51L9cDoUHVrXx4zWYlcLQIZ+d+VXHgqnYKkIuq4g/34= github.com/prometheus/client_golang v1.12.2/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= -github.com/prometheus/client_model v0.0.0-20171117100541-99fa1f4be8e5/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_golang v1.13.0 h1:b71QUfeo5M8gq2+evJdTPfZhYMAU0uKPkyPJ7TPsloU= +github.com/prometheus/client_golang v1.13.0/go.mod h1:vTeo+zgvILHsnnj/39Ou/1fPN5nJFOEMgftOUOmlvYQ= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M= github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/common v0.0.0-20180110214958-89604d197083/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.0.0-20181126121408-4724e9255275/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= +github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc= github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= github.com/prometheus/common v0.28.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= -github.com/prometheus/common v0.30.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= -github.com/prometheus/common v0.35.0 h1:Eyr+Pw2VymWejHqCugNaQXkAi6KayVNxaHeu6khmFBE= -github.com/prometheus/common v0.35.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= -github.com/prometheus/procfs v0.0.0-20180125133057-cb4147076ac7/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/common v0.37.0 h1:ccBbHCgIiT9uSoFY0vX8H3zsNR5eLt17/RQLUvn8pXE= +github.com/prometheus/common v0.37.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20181204211112-1dc9a6cbc91a/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.0.0-20190522114515-bc1a522cf7b1/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= -github.com/prometheus/procfs v0.0.5/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0VU= github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= +github.com/prometheus/procfs v0.8.0 h1:ODq8ZFEaYeCaZOJlZZdJA2AbQR98dSHSM1KW/You5mo= +github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4= github.com/prometheus/statsd_exporter v0.21.0 h1:hA05Q5RFeIjgwKIYEdFd59xu5Wwaznf33yKI+pyX6T8= github.com/prometheus/statsd_exporter v0.21.0/go.mod h1:rbT83sZq2V+p73lHhPZfMc3MLCHmSHelCh9hSGYNLTQ= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= -github.com/rabbitmq/amqp091-go v1.3.4 h1:tXuIslN1nhDqs2t6Jrz3BAoqvt4qIZzxvdbdcxWtHYU= -github.com/rabbitmq/amqp091-go v1.3.4/go.mod h1:ogQDLSOACsLPsIq0NpbtiifNZi2YOz0VTJ0kHRghqbM= +github.com/rabbitmq/amqp091-go v1.5.0 h1:VouyHPBu1CrKyJVfteGknGOGCzmOz0zcv/tONLkb7rg= +github.com/rabbitmq/amqp091-go v1.5.0/go.mod h1:JsV0ofX5f1nwOGafb8L5rBItt9GyhfQfcJj+oyz0dGg= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= -github.com/rcrowley/go-metrics v0.0.0-20200313005456-10cdbea86bc0/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rhnvrm/simples3 v0.6.1/go.mod h1:Y+3vYm2V7Y4VijFoJHHTrja6OgPrJ2cBti8dPGkC3sA= +github.com/robfig/cron v1.2.0 h1:ZjScXvvxeQ63Dbyxy76Fj3AT3Ut0aKsyd2/tl3DTMuQ= +github.com/robfig/cron v1.2.0/go.mod h1:JGuDeoQd7Z6yL4zQhZ3OPEVHB7fL6Ka6skscFHfmt2k= github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs= github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= 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.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.2.2/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/rogpeppe/go-internal v1.8.0 h1:FCbCCtXNOY3UtUuHUYaghJg4y7Fd14rXifAYUAtL9R8= @@ -1673,50 +1331,35 @@ github.com/rs/xid v1.3.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= github.com/rs/zerolog v1.18.0/go.mod h1:9nvC1axdVrAHcu/s9taAVfBuIdTZLVQmKQyvrUjF5+I= github.com/rs/zerolog v1.25.0 h1:Rj7XygbUHKUlDPcVdoLyR91fJBsduXj5fRxyqIQj/II= github.com/rs/zerolog v1.25.0/go.mod h1:7KHcEGe0QZPOm2IE4Kpb5rTh6n1h2hIgS5OOnu1rUaI= -github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= -github.com/russross/blackfriday v2.0.0+incompatible h1:cBXrhZNUf9C+La9/YpS+UHpUT8YD6Td9ZMSU9APFcsk= -github.com/russross/blackfriday v2.0.0+incompatible/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= +github.com/russross/blackfriday v1.6.0 h1:KqfZb0pUVN2lYqZUYRddxF4OR8ZMURnJIG5Y3VRLtww= +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/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/ryanuber/go-glob v1.0.0/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIHxIXzX/Yc= -github.com/safchain/ethtool v0.0.0-20190326074333-42ed695e3de8/go.mod h1:Z0q5wiBQGYcxhMZ6gUqHn6pYNLypFAvaL3UvgZLR0U4= -github.com/safchain/ethtool v0.0.0-20210803160452-9aa261dae9b1/go.mod h1:Z0q5wiBQGYcxhMZ6gUqHn6pYNLypFAvaL3UvgZLR0U4= github.com/sagikazarmark/crypt v0.4.0/go.mod h1:ALv2SRj7GxYV4HO9elxH9nS6M9gW+xDNxqmyJ6RfDFM= -github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da h1:p3Vo3i64TCLY7gIfzeQaUJ+kppEO5WQG3cL8iE8tGHU= github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= +github.com/samuel/go-zookeeper v0.0.0-20201211165307-7117e9ea2414 h1:AJNDS0kP60X8wwWFvbLPwDuojxubj9pbfK7pjHw0vKg= +github.com/samuel/go-zookeeper v0.0.0-20201211165307-7117e9ea2414/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= github.com/satori/go.uuid v1.2.1-0.20181028125025-b2ce2384e17b h1:gQZ0qzfKHQIybLANtM3mBXNUtOfsCFXeTsnBqCsx1KM= github.com/satori/go.uuid v1.2.1-0.20181028125025-b2ce2384e17b/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= -github.com/sclevine/agouti v3.0.0+incompatible/go.mod h1:b4WX9W9L1sfQKXeJf1mUTLZKJ48R1S7H23Ji7oFO5Bw= -github.com/sclevine/spec v1.2.0/go.mod h1:W4J29eT/Kzv7/b9IWLB055Z+qvVC9vt0Arko24q7p+U= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/seccomp/libseccomp-golang v0.9.1/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvWlF4P2Ca7zGrPiEpWo= -github.com/seccomp/libseccomp-golang v0.9.2-0.20210429002308-3879420cc921/go.mod h1:JA8cRccbGaA1s33RQf7Y1+q9gHmZX1yB/z9WDN1C6fg= github.com/sendgrid/rest v2.6.9+incompatible h1:1EyIcsNdn9KIisLW50MKwmSRSK+ekueiEMJ7NEoxJo0= github.com/sendgrid/rest v2.6.9+incompatible/go.mod h1:kXX7q3jZtJXK5c5qK83bSGMdV6tsOE70KbHoqJls4lE= -github.com/sendgrid/sendgrid-go v3.11.1+incompatible h1:ai0+woZ3r/+tKLQExznak5XerOFoD6S7ePO0lMV8WXo= -github.com/sendgrid/sendgrid-go v3.11.1+incompatible/go.mod h1:QRQt+LX/NmgVEvmdRw0VT/QgUn499+iza2FnDca9fg8= -github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= -github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ= -github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= +github.com/sendgrid/sendgrid-go v3.12.0+incompatible h1:/N2vx18Fg1KmQOh6zESc5FJB8pYwt5QFBDflYPh1KVg= +github.com/sendgrid/sendgrid-go v3.12.0+incompatible/go.mod h1:QRQt+LX/NmgVEvmdRw0VT/QgUn499+iza2FnDca9fg8= +github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0= github.com/shirou/gopsutil v3.20.11+incompatible h1:LJr4ZQK4mPpIV5gOa4jCOKOGb4ty4DZO54I4FGqIpto= github.com/shirou/gopsutil v3.20.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/shirou/gopsutil/v3 v3.21.6 h1:vU7jrp1Ic/2sHB7w6UNs7MIkn7ebVtTb5D9j45o9VYE= github.com/shirou/gopsutil/v3 v3.21.6/go.mod h1:JfVbDpIBLVzT8oKbvMg9P3wEIMDDpVn+LwHTKj0ST88= -github.com/shivamkm07/paho.mqtt.golang v1.3.6-0.20220106130409-e28a1db639f8 h1:BXKXQzeHuVnSrHAKjvq9ICrgPC27tJ/hXWLMQo36c5s= -github.com/shivamkm07/paho.mqtt.golang v1.3.6-0.20220106130409-e28a1db639f8/go.mod h1:JGt0RsEwEX+Xa/agj90YJ9d9DH2b7upDZMK9HRbFvCA= -github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= -github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/sijms/go-ora/v2 v2.2.22 h1:XmJAEwgokgLfe43QZtYWi6+ziYKz4yHmqKQlbdNVFmA= -github.com/sijms/go-ora/v2 v2.2.22/go.mod h1:jzfAFD+4CXHE+LjGWFl6cPrtiIpQVxakI2gvrMF2w6Y= -github.com/sirupsen/logrus v1.0.4-0.20170822132746-89742aefa4b2/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= +github.com/sijms/go-ora/v2 v2.5.3 h1:klGKmhqRONVTtIzTdfYTvrW94kdJkdmZl93u2A3vchI= +github.com/sijms/go-ora/v2 v2.5.3/go.mod h1:EHxlY6x7y9HAsdfumurRfTd+v8NrEOTR3Xl4FWlH6xk= github.com/sirupsen/logrus v1.0.6/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.4.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= @@ -1749,26 +1392,17 @@ github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkU github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cast v1.4.1 h1:s0hze+J0196ZfEMTs80N7UlFt0BDuQ7Q+JDnHiMWKdA= github.com/spf13/cast v1.4.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cobra v0.0.2-0.20171109065643-2da4a54c5cee/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= -github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= -github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= github.com/spf13/cobra v1.1.1/go.mod h1:WnodtKOvamDL/PwE2M4iKs8aMDBZ5Q5klgD3qfVJQMI= github.com/spf13/cobra v1.1.3/go.mod h1:pGADOWyqRD/YMrPZigI/zbliZ2wVD/23d+is3pSWzOo= github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk= -github.com/spf13/cobra v1.4.0/go.mod h1:Wo4iy3BUC+X2Fybo0PDqwJIv3dNRiZLHQymsfxlB84g= -github.com/spf13/cobra v1.5.0/go.mod h1:dWXEIy2H428czQCjInthrTRUg7yKbok+2Qi/yBIJoUM= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= -github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/pflag v1.0.1-0.20171106142849-4c012f6dcd95/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= -github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= github.com/spf13/viper v1.7.1/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= github.com/spf13/viper v1.8.1/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns= @@ -1776,18 +1410,17 @@ github.com/spf13/viper v1.10.1 h1:nuJZuYpG7gTj/XqiUwg8bA0cp1+M2mC3J4g5luUYBKk= github.com/spf13/viper v1.10.1/go.mod h1:IGlFPqhNAPKRxohIzWpI5QEy4kuI7tcl5WvR+8qy1rU= github.com/stathat/consistent v1.0.0 h1:ZFJ1QTRn8npNBKW065raSZ8xfOqhpb8vLOkfp4CcL/U= github.com/stathat/consistent v1.0.0/go.mod h1:uajTPbgSygZBJ+V+0mY7meZ8i0XAcZs7AQ6V121XSxw= -github.com/stefanberger/go-pkcs11uri v0.0.0-20201008174630-78d3cae3a980/go.mod h1:AO3tvPzVZ/ayst6UlUKUv6rcPQInYe3IknH3jYhAKu8= github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= -github.com/stretchr/objx v0.0.0-20180129172003-8a3f7159479f/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= -github.com/stretchr/objx v0.4.0 h1:M2gUjqZET1qApGOWNSnZ49BAIMX4F/1plDv3+l31EJ4= +github.com/stretchr/objx v0.3.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= -github.com/stretchr/testify v0.0.0-20180303142811-b89eecf5ca5d/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= @@ -1796,28 +1429,27 @@ github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= -github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= -github.com/supplyon/gremcos v0.1.0 h1:kZdC3P6m8dkfBO4ZLB2XmzHrPu/Z5enwgz6/x8MTIhc= -github.com/supplyon/gremcos v0.1.0/go.mod h1:ZnXsXGVbGCYDFU5GLPX9HZLWfD+ZWkiPo30KUjNoOtw= -github.com/syndtr/gocapability v0.0.0-20170704070218-db04d3cc01c8/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= -github.com/syndtr/gocapability v0.0.0-20180916011248-d98352740cb2/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= -github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= -github.com/tchap/go-patricia v2.2.6+incompatible/go.mod h1:bmLyhP68RS6kStMGxByiQ23RP/odRBOTVjwp2cDyi6I= +github.com/supplyon/gremcos v0.1.38 h1:TSv2NTtPLmpVliTDEnPmkvjoZ+kAZcTOTcCurSLAIik= +github.com/supplyon/gremcos v0.1.38/go.mod h1:bNLIt63atqB9stCOaPBjQKT2ozVORkXYSNfchkjHS0w= +github.com/tchap/go-patricia/v2 v2.3.1 h1:6rQp39lgIYZ+MHmdEq4xzuk1t7OdC35z/xm0BGhTkes= +github.com/tchap/go-patricia/v2 v2.3.1/go.mod h1:VZRHKAb53DLaG+nA9EaYYiaEx6YztwDlLElMsnSHD4k= github.com/tebeka/strftime v0.1.3/go.mod h1:7wJm3dZlpr4l/oVK0t1HYIc4rMzQ2XJlOMIUJUJH6XQ= -github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.476 h1:2VOnCo8XYky0o8dEmBUyjyC6pnXM2Xu0hgvVfOQspv8= -github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.476/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y= -github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssm v1.0.476 h1:KjkP84yJW8tweRzJlUnJdeAncxdcaajrFkUgVEmnN4k= -github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssm v1.0.476/go.mod h1:huGvjX9BMaK26Pbfk+0g89VrFxWxokvC3OFrHpZbkWs= -github.com/tetratelabs/wazero v1.0.0-pre.1 h1:bUZ4vf21c36RmgA3enNOlLgPElEVDYoRJJ9+McRGF6Q= -github.com/tetratelabs/wazero v1.0.0-pre.1/go.mod h1:M8UDNECGm/HVjOfq0EOe4QfCY9Les1eq54IChMLETbc= +github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.527 h1:hpZMjoYnR+ma5HMWWNaNc5fshpFXXaUPrZMo4OXPxYQ= +github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.527/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y= +github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssm v1.0.527 h1:WdSZURoWsFkpnMPyOZortjaL2z6jjk1erNPVdFB319o= +github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssm v1.0.527/go.mod h1:nzU/d/X/76YkHxzwfQY9+DtH53Wegy2ZZQ52W3nnMZE= +github.com/tetratelabs/wazero v1.0.0-pre.3 h1:Z5fbogMUGcERzaQb9mQU8+yJSy0bVvv2ce3dfR4wcZg= +github.com/tetratelabs/wazero v1.0.0-pre.3/go.mod h1:M8UDNECGm/HVjOfq0EOe4QfCY9Les1eq54IChMLETbc= github.com/tevid/gohamcrest v1.1.1/go.mod h1:3UvtWlqm8j5JbwYZh80D/PVBt0mJ1eJiYgZMibh0H/k= github.com/tidwall/gjson v1.2.1/go.mod h1:c/nTNbUr0E0OrXEhq1pwa8iEgc2DOt4ZZqAt1HtCkPA= github.com/tidwall/gjson v1.8.1/go.mod h1:5/xDoumyyDNerp2U36lyolv46b3uF/9Bu6OfyQ9GImk= -github.com/tidwall/gjson v1.14.0 h1:6aeJ0bzojgWLa82gDQHcx3S0Lr/O51I9bJ5nv6JFx5w= -github.com/tidwall/gjson v1.14.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= +github.com/tidwall/gjson v1.13.0 h1:3TFY9yxOQShrvmjdM76K+jc66zJeT6D3/VFFYCGQf7M= +github.com/tidwall/gjson v1.13.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= github.com/tidwall/match v1.0.1/go.mod h1:LujAq0jyVjBy028G1WhWfIzbpQfMO8bBZ6Tyb0+pL9E= github.com/tidwall/match v1.0.3/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA= @@ -1840,63 +1472,42 @@ github.com/tmc/grpc-websocket-proxy v0.0.0-20200427203606-3cfed13b9966/go.mod h1 github.com/tmc/grpc-websocket-proxy v0.0.0-20201229170055-e5319fda7802/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/ttacon/chalk v0.0.0-20160626202418-22c06c80ed31/go.mod h1:onvgF043R+lC5RZ8IT9rBXDaEDnpnw/Cl+HFiw+v/7Q= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= -github.com/tv42/httpunix v0.0.0-20191220191345-2ba4b9c3382c/go.mod h1:hzIxponao9Kjc7aWznkXaL4U4TWaDSs8zcsY4Ka08nM= github.com/uber/jaeger-client-go v2.29.1+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= github.com/uber/jaeger-lib v2.4.1+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= -github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= -github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= github.com/ugorji/go v1.2.6/go.mod h1:anCg0y61KIhDlPZmnH+so+RQbysYVyDko0IMgJv0Nn0= -github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= -github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= github.com/ugorji/go/codec v1.2.6/go.mod h1:V6TCNZ4PHqoHGFZuSG1W8nrCzzdgA2DozYxWFFpvxTw= -github.com/urfave/cli v0.0.0-20171014202726-7bc6a0acffa5/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= github.com/valyala/fasthttp v1.21.0/go.mod h1:jjraHZVbKOXftJfsOYoAjaeygpj5hr8ermTRJNroD7A= -github.com/valyala/fasthttp v1.34.0 h1:d3AAQJ2DRcxJYHm7OXNXtXt2as1vMDfxeIcFvhmGGm4= -github.com/valyala/fasthttp v1.34.0/go.mod h1:epZA5N+7pY6ZaEKRmstzOuYJx9HI8DI1oaCGZpdH4h0= +github.com/valyala/fasthttp v1.41.0 h1:zeR0Z1my1wDHTRiamBCXVglQdbUwgb9uWG3k1HQz6jY= +github.com/valyala/fasthttp v1.41.0/go.mod h1:f6VbjjoI3z1NDOZOv17o6RvtRSWxC77seBFc2uWtgiY= github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= github.com/valyala/fasttemplate v1.1.0/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= +github.com/valyala/fasttemplate v1.2.1 h1:TVEnxayobAdVkhQfrfes2IzOB6o+z4roRkPF52WA1u4= github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio= github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7FwZEA7Ioqkc= -github.com/vektah/gqlparser/v2 v2.4.6 h1:Yjzp66g6oVq93Jihbi0qhGnf/6zIWjcm8H6gA27zstE= -github.com/vektah/gqlparser/v2 v2.4.6/go.mod h1:flJWIR04IMQPGz+BXLrORkrARBxv/rtyIAFvd/MceW0= -github.com/vishvananda/netlink v0.0.0-20181108222139-023a6dafdcdf/go.mod h1:+SR5DhBJrl6ZM7CoCKvpw5BKroDKQ+PJqOg65H/2ktk= -github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE= -github.com/vishvananda/netlink v1.1.1-0.20201029203352-d40f9887b852/go.mod h1:twkDnbuQxJYemMlGd4JFIcuhgX83tXhKS2B/PRMpOho= -github.com/vishvananda/netlink v1.1.1-0.20210330154013-f5de75959ad5/go.mod h1:twkDnbuQxJYemMlGd4JFIcuhgX83tXhKS2B/PRMpOho= -github.com/vishvananda/netns v0.0.0-20180720170159-13995c7128cc/go.mod h1:ZjcWmFBXmLKZu9Nxj3WKYEafiSqer2rnvPr0en9UNpI= -github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU= -github.com/vishvananda/netns v0.0.0-20200728191858-db3c7e526aae/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0= -github.com/vishvananda/netns v0.0.0-20210104183010-2eb08e3e575f/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0= github.com/vmware/vmware-go-kcl v1.5.0 h1:lTptJptznhVOHS7CSuhd/2yDJa7deTBRHaj3zAvhJt8= github.com/vmware/vmware-go-kcl v1.5.0/go.mod h1:P92YfaWfQyudNf62BNx+E2rJn9pd165MhHsRt8ajkpM= -github.com/wapc/wapc-go v0.5.2 h1:gVwi7FrUVFGBPRDjgAoYhjIW6UtjsJPYf4Ek8PL0UfY= -github.com/wapc/wapc-go v0.5.2/go.mod h1:2eo+ri+PdoOPPb5jGsLeV4MfUaQKioYH5FH/nmXG+1g= +github.com/wapc/wapc-go v0.5.5 h1:FVMcscIUvARubkXS5hU2l7Z6k03cRE1mxc7Vpv56fIQ= +github.com/wapc/wapc-go v0.5.5/go.mod h1:7hCuY3L3Kz0BHzqPzgnkf8tUDRqKP3rfh38jhx5ZI4g= github.com/wasmerio/wasmer-go v1.0.4 h1:MnqHoOGfiQ8MMq2RF6wyCeebKOe84G88h5yv+vmxJgs= -github.com/willf/bitset v1.1.11-0.20200630133818-d5bec3311243/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= -github.com/willf/bitset v1.1.11/go.mod h1:83CECat5yLh5zVOf4P1ErAgKA5UDvKtgyUABdr3+MjI= github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c= github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= -github.com/xdg-go/scram v1.0.2 h1:akYIkZ28e6A96dkWNJQu3nmCzH3YfwMPQExUYDaRv7w= -github.com/xdg-go/scram v1.0.2/go.mod h1:1WAq6h33pAW+iRreB34OORO2Nf7qel3VV3fjBj+hCSs= -github.com/xdg-go/stringprep v1.0.2 h1:6iq84/ryjjeRmMJwxutI51F2GIPlP5BfTvXHeYjyhBc= -github.com/xdg-go/stringprep v1.0.2/go.mod h1:8F9zXuvzgwmyT5DUm4GUfZGDdT3W+LCvS6+da4O5kxM= +github.com/xdg-go/scram v1.1.1 h1:VOMT+81stJgXW3CpHyqHN3AXDYIMsx56mEFrB37Mb/E= +github.com/xdg-go/scram v1.1.1/go.mod h1:RaEWvsqvNKKvBPvcKeFjrG2cJqOkHTiyTpzz23ni57g= +github.com/xdg-go/stringprep v1.0.3 h1:kdwGpVNwPFtjs98xCGkHjQtGKh86rDcRZN17QEMCOIs= +github.com/xdg-go/stringprep v1.0.3/go.mod h1:W3f5j4i+9rC0kuIEJL0ky1VpHXQU3ocBgklLGvcBnW8= github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb h1:zGWFAtiMcyryUHoUjUJX0/lt1H2+i2Ka2n+D3DImSNo= github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0= github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= -github.com/xeipuuv/gojsonschema v0.0.0-20180618132009-1d523034197f/go.mod h1:5yf86TLmAcydyeJq5YvxkGPE2fm/u4myDekKRoLuqhs= github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74= github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= github.com/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/yalp/jsonpath v0.0.0-20180802001716-5cc68e5049a0 h1:6fRhSjgLCkTD3JnJxvaJ4Sj+TYblw757bqYgZaOq5ZY= github.com/yalp/jsonpath v0.0.0-20180802001716-5cc68e5049a0/go.mod h1:/LWChgwKmvncFJFHJ7Gvn9wZArjbV5/FppcK2fKk/tI= github.com/yashtewari/glob-intersection v0.1.0 h1:6gJvMYQlTDOL3dMsPF6J0+26vwX9MB8/1q3uAdhmTrg= @@ -1915,12 +1526,8 @@ github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9dec github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -github.com/yuin/gopher-lua v0.0.0-20191220021717-ab39c6098bdb/go.mod h1:gqRgreBUhTSL0GeU64rtZ3Uq3wtjOa/TB2YfrtkCbVQ= -github.com/yuin/gopher-lua v0.0.0-20200603152657-dc2b0ca8b37e h1:oIpIX9VKxSCFrfjsKpluGbNPBGq9iNnT9crH781j9wY= -github.com/yuin/gopher-lua v0.0.0-20200603152657-dc2b0ca8b37e/go.mod h1:gqRgreBUhTSL0GeU64rtZ3Uq3wtjOa/TB2YfrtkCbVQ= -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= +github.com/yuin/gopher-lua v0.0.0-20210529063254-f4c35e4016d9 h1:k/gmLsJDWwWqbLCur2yWnJzwQEKRcAHXo6seXGuSwWw= +github.com/yuin/gopher-lua v0.0.0-20210529063254-f4c35e4016d9/go.mod h1:E1AXubJBdNmFERAOucpDIxNzeGfLzg0mYh+UfMWdChA= github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q= github.com/zouyx/agollo/v3 v3.4.5 h1:7YCxzY9ZYaH9TuVUBvmI6Tk0mwMggikah+cfbYogcHQ= github.com/zouyx/agollo/v3 v3.4.5/go.mod h1:LJr3kDmm23QSW+F1Ol4TMHDa7HvJvscMdVxJ2IpUTVc= @@ -1930,7 +1537,6 @@ go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= go.etcd.io/bbolt v1.3.6 h1:/ecaJf0sk1l4l6V4awd65v2C3ILy7MSj+s/x1ADCIMU= go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= -go.etcd.io/etcd v0.5.0-alpha.5.0.20200910180754-dd1b699fc489/go.mod h1:yVHk9ub3CSBatqGNg7GRmsnfLWtoW60w4eDYfh7vHDg= go.etcd.io/etcd/api/v3 v3.5.0-alpha.0/go.mod h1:mPcW6aZJukV6Aa81LSKpBjQXTWlXB5r74ymPoSWa3Sw= go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= go.etcd.io/etcd/api/v3 v3.5.1/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= @@ -1950,49 +1556,46 @@ go.etcd.io/etcd/raft/v3 v3.5.0-alpha.0/go.mod h1:FAwse6Zlm5v4tEWZaTjmNhe17Int4Ox go.etcd.io/etcd/raft/v3 v3.5.0/go.mod h1:UFOHSIvO/nKwd4lhkwabrTD3cqW5yVyYYf/KlD00Szc= go.etcd.io/etcd/server/v3 v3.5.0-alpha.0/go.mod h1:tsKetYpt980ZTpzl/gb+UOJj9RkIyCb1u4wjzMg90BQ= go.etcd.io/etcd/server/v3 v3.5.0/go.mod h1:3Ah5ruV+M+7RZr0+Y/5mNLwC+eQlni+mQmOVdCRJoS4= -go.mongodb.org/mongo-driver v1.5.1 h1:9nOVLGDfOaZ9R0tBumx/BcuqkbFpyTCU2r/Po7A2azI= -go.mongodb.org/mongo-driver v1.5.1/go.mod h1:gRXCHX4Jo7J0IJ1oDQyUxF7jfy19UfxniMS4xxMmUqw= -go.mozilla.org/pkcs7 v0.0.0-20200128120323-432b2356ecb1/go.mod h1:SNgMg+EgDFwmvSmLRTNKC5fegJjB7v23qTQ0XLGUNHk= +go.mongodb.org/mongo-driver v1.10.3 h1:XDQEvmh6z1EUsXuIkXE9TaVeqHw6SwS1uf93jFs0HBA= +go.mongodb.org/mongo-driver v1.10.3/go.mod h1:z4XpeoU6w+9Vht+jAFyLgVrD+jGSQQe0+CBWFHNiHt8= +go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= +go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= +go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= +go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= +go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.opencensus.io v0.23.0 h1:gqCw0LfLxScz8irSi8exQc7fyQ0fKQU/qnC/X8+V/1M= go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= go.opentelemetry.io/contrib v0.20.0/go.mod h1:G/EtFaa6qaN7+LxqfIAT3GiZa7Wv5DTBUzl5H4LY0Kc= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.20.0/go.mod h1:oVGt1LRbBOBq1A5BQLlUg9UaU/54aiHw8cgjV3aWZ/E= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.28.0/go.mod h1:vEhqr0m4eTc+DWxfsXoXue2GBgV2uUwVznkGIHW/e5w= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.20.0/go.mod h1:2AboqHi0CiIZU0qwhtUfCYD1GeUzvvIXWNkhDt7ZMG4= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.32.0/go.mod h1:5eCOqeGphOyz6TsY3ZDNjE33SM/TFAK3RGuCL2naTgY= go.opentelemetry.io/otel v0.20.0/go.mod h1:Y3ugLH2oa81t5QO+Lty+zXf8zC9L26ax4Nzoxm/dooo= -go.opentelemetry.io/otel v1.3.0/go.mod h1:PWIKzi6JCp7sM0k9yZ43VX+T345uNbAkDKwHVjb2PTs= go.opentelemetry.io/otel v1.7.0/go.mod h1:5BdUoMIz5WEs0vt0CUEMtSSaTSHBBVwrhnz7+nrD5xk= go.opentelemetry.io/otel/exporters/otlp v0.20.0/go.mod h1:YIieizyaN77rtLJra0buKiNBOm9XQfkPEKBeuhoMwAM= -go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.3.0/go.mod h1:VpP4/RMn8bv8gNo9uK7/IMY4mtWLELsS+JIP0inH0h4= -go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.7.0/go.mod h1:M1hVZHNxcbkAlcvrOMlpQ4YOO3Awf+4N2dxkZL3xm04= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.3.0/go.mod h1:hO1KLR7jcKaDDKDkvI9dP/FIhpmna5lkqPUQdEjFAM8= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.7.0/go.mod h1:ceUgdyfNv4h4gLxHR0WNfDiiVmZFodZhZSbOLhpxqXE= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.3.0/go.mod h1:keUU7UfnwWTWpJ+FWnyqmogPa82nuU5VUANFq49hlMY= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.7.0/go.mod h1:E+/KKhwOSw8yoPxSSuUHG6vKppkvhN+S1Jc7Nib3k3o= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.3.0/go.mod h1:QNX1aly8ehqqX1LEa6YniTU7VY9I6R3X/oPxhGdTceE= go.opentelemetry.io/otel/metric v0.20.0/go.mod h1:598I5tYlH1vzBjn+BTuhzTCSb/9debfNp6R3s7Pr1eU= -go.opentelemetry.io/otel/metric v0.30.0/go.mod h1:/ShZ7+TS4dHzDFmfi1kSXMhMVubNoP0oIaBp70J6UXU= go.opentelemetry.io/otel/oteltest v0.20.0/go.mod h1:L7bgKf9ZB7qCwT9Up7i9/pn0PWIa9FqQ2IQ8LoxiGnw= go.opentelemetry.io/otel/sdk v0.20.0/go.mod h1:g/IcepuwNsoiX5Byy2nNV0ySUF1em498m7hBWC279Yc= -go.opentelemetry.io/otel/sdk v1.3.0/go.mod h1:rIo4suHNhQwBIPg9axF8V9CA72Wz2mKF1teNrup8yzs= -go.opentelemetry.io/otel/sdk v1.7.0/go.mod h1:uTEOTwaqIVuTGiJN7ii13Ibp75wJmYUDe374q6cZwUU= go.opentelemetry.io/otel/sdk/export/metric v0.20.0/go.mod h1:h7RBNMsDJ5pmI1zExLi+bJK+Dr8NQCh0qGhm1KDnNlE= go.opentelemetry.io/otel/sdk/metric v0.20.0/go.mod h1:knxiS8Xd4E/N+ZqKmUPf3gTTZ4/0TjTXukfxjzSTpHE= go.opentelemetry.io/otel/trace v0.20.0/go.mod h1:6GjCW8zgDjwGHGa6GkyeB8+/5vjT16gUEi0Nf1iBdgw= -go.opentelemetry.io/otel/trace v1.3.0/go.mod h1:c/VDhno8888bvQYmbYLqe41/Ldmr/KKunbvWM4/fEjk= go.opentelemetry.io/otel/trace v1.7.0/go.mod h1:fzLSB9nqR2eXzxPXb2JW9IKE+ScyXA48yyE4TNvoHqU= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= -go.opentelemetry.io/proto/otlp v0.11.0/go.mod h1:QpEjXPrNQzrFDZgoTo49dgHR9RYRSrg3NAKnUGl9YpQ= -go.opentelemetry.io/proto/otlp v0.16.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= +go.temporal.io/api v1.11.1-0.20220907050538-6de5285cf463/go.mod h1:yZGA2AVWUri9TUol58DTosjQnQBLEMDnchA4u+v1i6E= +go.temporal.io/api v1.12.0 h1:OV7oTPVhGulhS1LLXnlMj3I8btDjNIzHhE+4eJ9fw04= +go.temporal.io/api v1.12.0/go.mod h1:e4T3PCiXYgZrn9zyco10w6XPKRJ61mVq3MbyBeVKeQ8= +go.temporal.io/sdk v1.17.0 h1:5zF4nBg35R7V+J/m8ke2tIWJNpiqRK2EpWZBQkVQCEc= +go.temporal.io/sdk v1.17.0/go.mod h1:EybaEzZSigK4Pr0wBbP1cb4VrCEf8ZowcigT7LCgsMU= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.5.1/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE= go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= +go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= go.uber.org/automaxprocs v1.5.1/go.mod h1:BF4eumQw0P9GtnuxxovUd06vwm1o18oMzFtK66vU6XU= go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= @@ -2003,8 +1606,8 @@ go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/ go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8= -go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= +go.uber.org/multierr v1.7.0 h1:zaiO/rmgFjbmCXdSYJWQcdvOCsthmdaHfr3Gm2Kx4Ec= +go.uber.org/multierr v1.7.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= go.uber.org/ratelimit v0.2.0 h1:UQE2Bgi7p2B85uP5dC2bbRtig0C+OeNRnNEafLjsLPA= go.uber.org/ratelimit v0.2.0/go.mod h1:YYBV4e4naJvhpitQrWJu1vCpgB7CboMe0qhltKt6mUg= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= @@ -2018,19 +1621,12 @@ go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI= go.uber.org/zap v1.21.0 h1:WefMeulhovoZ2sYXz7st6K0sLj7bBhpiFaud4r4zST8= go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw= goji.io v2.0.2+incompatible h1:uIssv/elbKRLznFUy3Xj4+2Mz/qKhek/9aZQDUMae7c= -goji.io v2.0.2+incompatible/go.mod h1:sbqFwrtqZACxLBTQcdgVjFh54yGVCvwq8+w49MVMMIk= -golang.org/x/crypto v0.0.0-20171113213409-9f005a07e0d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180820150726-614d502a4dac/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181009213950-7c1a557ab941/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190422162423-af44ce270edf/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= @@ -2038,27 +1634,23 @@ golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20191112222119-e1110fd1c708/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20191219195013-becbf705a915/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200323165209-0ec3e9974c59/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20201112155050-0c6587e931a9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= -golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= +golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210314154223-e6e6c4f2bb5b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= -golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20210920023735-84f357641f63/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-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90 h1:Y/gsMcFOcR+6S6f3YeMKl5g+dZMEWqcz5Czj/GWYbkM= -golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220926161630-eccd6366d1be/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20221010152910-d6f0a8c073c2/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.1.0 h1:MDRAIl0xIo9Io2xV565hzXHw3zVseKrJKodhohM5CjU= +golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -2100,27 +1692,26 @@ 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.5.0/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= -golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= +golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/net v0.0.0-20180530234432-1e491301e022/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= 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= -golang.org/x/net v0.0.0-20181011144130-49bb7cea24b1/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190619014844-b5b0513f8c1b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -2128,7 +1719,6 @@ golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191112182307-2180aed22343/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -2147,14 +1737,12 @@ golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/ golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20201006153459-a7d1128ccaa0/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201016165138-7b1cca2348c0/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= @@ -2162,9 +1750,8 @@ golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96b golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8= golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210520170846-37e1c6afe023/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210610132358-84b48f89b13b/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210726213435-c6fcb2dbf985/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= @@ -2174,13 +1761,18 @@ golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qx golang.org/x/net v0.0.0-20211029224645-99673261e6eb/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211105192438-b53810dc28af/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= golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220630215102-69896b714898 h1:K7wO6V1IrczY9QOQ2WkVpw4JQSwCd52UsxVEirZUfiw= -golang.org/x/net v0.0.0-20220630215102-69896b714898/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220607020251-c690dde0001d/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-20220725212005-46097bf591d3/go.mod h1:AaygXjzTFtRAg2ttMY5RMuhpJ3cNnI0XpyFJD1iQRSM= +golang.org/x/net v0.0.0-20220906165146-f3363e06e74c/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +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= @@ -2200,13 +1792,16 @@ golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20211005180243-6b3c2da341f1/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= -golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a h1:qfl7ob3DIEs3Ml9oLuPwY2N04gymzAW04WsUQHIClgM= golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +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.1.0 h1:isLCZuhj4v+tYv7eskaN4v/TM+A1begWWgyVJDdl1+Y= +golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A= 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= golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190412183630-56d357773e84/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -2214,8 +1809,10 @@ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 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 h1:Ax0t5p6N38Ga0dThY21weqDEyz2oklo4IvDkpigvkD8= 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/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= +golang.org/x/sync v0.1.0/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-20180828065106-d99a578cf41b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -2224,7 +1821,7 @@ golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190129075346-302c3dd5f1cc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190130150945-aca44879d564/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190204203706-41f3e6584952/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -2233,50 +1830,34 @@ golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190419153524-e8e3143a4f4a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190514135907-3a4b5fb9f71f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190522044717-8097e1b27ff5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190523142557-0e01d883c5c5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190531175056-4c3a928424d2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190602015325-4c4f7f33c9ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190606203320-7fc4e5ec1444/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190712062909-fae7ac547cb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190812073006-9eafafc0a87e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191022100944-742c48ecaeb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191112214154-59a1497f0cea/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191115151921-52ab43148777/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191210023423-ac6580df4449/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200120151820-655fe14d7479/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200217220822-9197077df867/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -2289,25 +1870,15 @@ golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200622214017-ed371f2e16b4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200728102440-3e129f6d46b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200817155316-9781c653f443/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200826173525-f9321e4c35a6/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200831180312-196b9ba8737a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200909081042-eff7692f9009/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200916030750-2334cc1a136f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200922070232-aee5d888a860/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200923182605-d9f96fdee20d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201009025420-dfb3f7c4e634/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201112073958-5cba982894dd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201117170446-d9b008d0a637/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201202213521-69691e467435/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201214210602-f9fddec55a1e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201223074533-0d417f636930/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -2315,18 +1886,14 @@ golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210316164454-77fc1eacc6aa/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210426230700-d19ff857e887/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -2340,33 +1907,42 @@ golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210819135213-f52c844e1c1c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210831042530-f4d43177bf5e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210903071746-97244b99971b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210906170528-6f6e22806c34/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211103235746-7861aae1554b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211106132015-ebca88c72f68/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211116061358-0a5406a5449c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211117180635-dee7805ff2e1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220204135822-1c1b9b1eba6a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 h1:0A+M6Uqn+Eje4kHMK80dtF3JCXC4ykBgQG4Fe06QRhQ= +golang.org/x/sys v0.0.0-20220502124256-b6088ccd6cba/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +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-20220624220833-87e55d714810/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= +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-20220906165534-d0df966e6959/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220909162455-aba9fc2a8ff2/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220928140112-f11e5e49a4ec/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20221010170243-090e33056c14/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-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 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.1.0 h1:g6Z6vPFA9dYBAF7DWcH6sCcOntplXsDKcliusYijMlw= +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= @@ -2376,24 +1952,24 @@ 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= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20210611083556-38a9dc6acbc6/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20211116232009-f0f3c7e86c11 h1:GZokNIeuVkl3aZHJchRrr13WCsols02MLUcz1U9is6M= -golang.org/x/time v0.0.0-20211116232009-f0f3c7e86c11/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20220722155302-e5dcc9cfc0b9/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20220922220347-f3bd1da661af h1:Yx9k8YCG3dvF87UAn2tu2HQLf2dt/eR1bXxpLMWeH+Y= +golang.org/x/time v0.0.0-20220922220347-f3bd1da661af/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -2402,20 +1978,14 @@ golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3 golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190329151228-23e29df326fe/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190416151739-9c9e1878f421/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190420181800-aa740d480789/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190424220101-1e8e1cfdf96b/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190531172133-b3315ee88b7d/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190706070813-72ffa07ba3db/go.mod h1:jcCCGcm9btYwXyDqrUWc6MKQKKGJCWEQ3AfLSRIbEuI= golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190828213141-aed303cbaa74/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -2430,6 +2000,7 @@ golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191216052735-49a3e744a425/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= @@ -2449,14 +2020,12 @@ golang.org/x/tools v0.0.0-20200505023115-26f46d2f7ef8/go.mod h1:EkVYQZoAsY45+roY golang.org/x/tools v0.0.0-20200509030707-2212a7e161a5/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200616133436-c1934b75d054/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= -golang.org/x/tools v0.0.0-20200916195026-c9a70fc28ce3/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= golang.org/x/tools v0.0.0-20201014170642-d1624618ad65/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= golang.org/x/tools v0.0.0-20201022035929-9cf592e881e9/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= @@ -2473,20 +2042,23 @@ 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.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.6-0.20210820212750-d4cc65f0b2ff/go.mod h1:YD9qOF0M9xpSpdWTBbzEl5e/RnCefISl8E5Noe10jFM= -golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= -golang.org/x/tools v0.1.11 h1:loJ25fNOEhSXfHrpoGj91eCUThwdNX6u24rO1xnNteY= -golang.org/x/tools v0.1.11/go.mod h1:SgwaegtQh8clINPpECJMqnxLv9I09HLqnW3RMqW0CA4= +golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= +golang.org/x/tools v0.1.12 h1:VveCTK38A2rkS8ZqFY25HIDFscX5X9OoEhJd3quQmXU= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= 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= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f h1:uF6paiQQebLeSXkrTqHqz0MXhXXS1KgF41eUdBNvxK0= +golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk= +golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0= gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= -google.golang.org/api v0.0.0-20160322025152-9bf6e6e569ff/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= +google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= @@ -2523,8 +2095,14 @@ google.golang.org/api v0.63.0/go.mod h1:gs4ij2ffTRXwuzzgJl/56BdwJaA194ijkfn++9tD google.golang.org/api v0.67.0/go.mod h1:ShHKP8E60yPsKNw/w8w+VYaj9H6buA5UqDp8dhbQZ6g= google.golang.org/api v0.70.0/go.mod h1:Bs4ZM2HGifEvXwd50TtW70ovgJffJYw2oRCOFU/SkfA= google.golang.org/api v0.71.0/go.mod h1:4PyU6e6JogV1f9eA4voyrTY2batOLdgZ5qZ5HOCc4j8= -google.golang.org/api v0.74.0 h1:ExR2D+5TYIrMphWgs5JCgwRhEDlPDXXrLwHHMgPHTXE= 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.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.93.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= +google.golang.org/api v0.101.0 h1:lJPPeEBIRxGpGLwnBTam1NPEM8Z2BmmXEd3z812pjwM= +google.golang.org/api v0.101.0/go.mod h1:CjxAAWWt3A3VrUE2IGDY2bgK5qhoG/OkyWVlYcP05MY= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -2534,14 +2112,14 @@ google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCID google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/cloud v0.0.0-20151119220103-975617b05ea8/go.mod h1:0H1ncTHf11KCFhTc/+EFRbzSCOZx+VUbRMk55Yv5MYk= google.golang.org/genproto v0.0.0-20170818010345-ee236bd376b0/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20180518175338-11a468237815/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190404172233-64821d5d2107/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190522204451-c2c4e71fbf69/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= @@ -2551,7 +2129,6 @@ google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvx google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200117163144-32f20d992d24/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= @@ -2566,7 +2143,6 @@ google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfG google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20200527145253-8367513e4ece/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= @@ -2576,7 +2152,6 @@ google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20201019141844-1ed22bb0c154/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201102152239-715cce707fb0/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201110150050-8816d57aaa9a/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= @@ -2585,14 +2160,13 @@ google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210329143202-679c6ae281ee/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= -google.golang.org/genproto v0.0.0-20210701133433-6b8dcf568a95/go.mod h1:yiaVoXHpRzHGyxV3o4DktVWY4mSUErTKaeEOq6C3t3U= -google.golang.org/genproto v0.0.0-20210707164411-8c882eb9abba/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= google.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= google.golang.org/genproto v0.0.0-20210728212813-7823e685a01f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= @@ -2611,7 +2185,6 @@ google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ6 google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220107163113-42d7afdf6368/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20220207164111-0872dc986b00/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20220218161850-94dd64e39d7c/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= @@ -2619,11 +2192,27 @@ google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf/go.mod h1:kGP+zUP2 google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= -google.golang.org/genproto v0.0.0-20220405205423-9d709892a2bf h1:JTjwKJX9erVpsw17w+OIPP7iAgEkN/r8urhWSunEDTs= -google.golang.org/genproto v0.0.0-20220405205423-9d709892a2bf/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/grpc v0.0.0-20160317175043-d3ddb4469d5a/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= +google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +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-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= +google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +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-20220815135757-37a418bb8959/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220902135211-223410557253/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220909194730-69f6226f97e5/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c h1:QgY/XxIAIeccR+Ca/rDdKubLIU9rcJ3xfy1DC/Wd2Oo= +google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c/go.mod h1:CGI5F/G+E5bKwmfYo09AXuVN4dD894kIKUFmVbP2/Fo= google.golang.org/grpc v1.8.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= +google.golang.org/grpc v1.12.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= +google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= @@ -2633,7 +2222,6 @@ google.golang.org/grpc v1.22.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyac google.golang.org/grpc v1.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.24.0/go.mod h1:XDChyiUovWa60DnaeDeZmSW86xtLtjtZbwvSiRnRtcA= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= @@ -2663,9 +2251,12 @@ google.golang.org/grpc v1.43.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ5 google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +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 h1:rQOsyJ/8+ufEDJd/Gdsz7HG220Mh9HAhFHRGnIjda0w= google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.49.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= @@ -2680,15 +2271,14 @@ google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlba google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw= google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U= +google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= +google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc h1:2gGKlE2+asNV9m7xrywl36YYNnBG5ZQ0r/BOOxqPpmk= gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc/go.mod h1:m7x9LTH6d71AHyAX77c9yqWCCa3UKHcVEj9y7hAtKDk= gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d/go.mod h1:cuepJuh7vyXfUyUwEgHQXw849cJrilpS5NeIjOWESAw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20141024133853-64131543e789/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20161208181325-20d25e280405/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= @@ -2697,8 +2287,8 @@ gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8 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= gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= -gopkg.in/couchbase/gocb.v1 v1.6.4 h1:vAworfH5ZKDbonmayrwbGiD9jkAMroWmHXDf1GAIqMM= -gopkg.in/couchbase/gocb.v1 v1.6.4/go.mod h1:Ri5Qok4ZKiwmPr75YxZ0uELQy45XJgUSzeUnK806gTY= +gopkg.in/couchbase/gocb.v1 v1.6.7 h1:Za2KhMBdo00+CKg4C09QetVziU8/N4YmQNwaPQqZWPg= +gopkg.in/couchbase/gocb.v1 v1.6.7/go.mod h1:Ri5Qok4ZKiwmPr75YxZ0uELQy45XJgUSzeUnK806gTY= gopkg.in/couchbase/gocbcore.v7 v7.1.18 h1:d4yfIXWdf/ZmyuJjwRVVlGT/yqx8ICy6fcT/ViaMZsI= gopkg.in/couchbase/gocbcore.v7 v7.1.18/go.mod h1:48d2Be0MxRtsyuvn+mWzqmoGUG9uA00ghopzOs148/E= gopkg.in/couchbaselabs/gocbconnstr.v1 v1.0.4 h1:VVVoIV/nSw1w9ZnTEOjmkeJVcAzaCyxEujKglarxz7U= @@ -2712,7 +2302,6 @@ gopkg.in/fatih/pool.v2 v2.0.0 h1:xIFeWtxifuQJGk/IEPKsTduEKcKvPmhoiVDGpC40nKg= gopkg.in/fatih/pool.v2 v2.0.0/go.mod h1:8xVGeu1/2jr2wm5V9SPuMht2H5AEmf5aFMGSQixtjTY= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= -gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2/go.mod h1:Xk6kEKp8OKb+X14hQBKWaSkCsqBpgog8nAV2xsGOxlo= gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df h1:n7WqCuqOuCbNr617RXOY0AWRXxgwEyPp2z+p0+hgMuE= gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df/go.mod h1:LRQQ+SO6ZHR7tOkpBDuZnXENFzX8qRjMDMyPD6BRkCw= gopkg.in/gorethink/gorethink.v4 v4.1.0 h1:xoE9qJ9Ae9KdKEsiQGCF44u2JdnjyohrMBRDtts3Gjw= @@ -2723,8 +2312,9 @@ gopkg.in/ini.v1 v1.42.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.56.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/ini.v1 v1.66.2 h1:XfR1dOYubytKy4Shzc2LHrrGhU0lDCfDGG1yLPmpgsI= gopkg.in/ini.v1 v1.66.2/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/ini.v1 v1.66.6 h1:LATuAqN/shcYAOkv3wl2L4rkaKqkcgTBQjOyYDvcPKI= +gopkg.in/ini.v1 v1.66.6/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/kataras/go-serializer.v0 v0.0.4 h1:mVy3gjU4zZZBe+8JbZDRTMPJdrB0lzBNsLLREBcKGgU= gopkg.in/kataras/go-serializer.v0 v0.0.4/go.mod h1:v2jHg/3Wp7uncDNzenTsX75PRDxhzlxoo/qDvM4ZGxk= gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8= @@ -2756,6 +2346,7 @@ gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= gotest.tools/v3 v3.0.3/go.mod h1:Z7Lb0S5l+klDB31fvDQX8ss/FlKDxtlFlw3Oa8Ymbl8= +honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -2763,89 +2354,45 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -k8s.io/api v0.20.1/go.mod h1:KqwcCVogGxQY3nBlRpwt+wpAMF/KjaCc7RpywacvqUo= -k8s.io/api v0.20.4/go.mod h1:++lNL1AJMkDymriNniQsWRkMDzRaX2Y/POTUi8yvqYQ= -k8s.io/api v0.20.6/go.mod h1:X9e8Qag6JV/bL5G6bU8sdVRltWKmdHsFUGS3eVndqE8= -k8s.io/api v0.22.5/go.mod h1:mEhXyLaSD1qTOf40rRiKXkc+2iCem09rWLlFwhCEiAs= k8s.io/api v0.23.0 h1:WrL1gb73VSC8obi8cuYETJGXEoFNEh3LU0Pt+Sokgro= k8s.io/api v0.23.0/go.mod h1:8wmDdLBHBNxtOIytwLstXt5E9PddnZb0GaMcqsvDBpg= k8s.io/apiextensions-apiserver v0.23.0 h1:uii8BYmHYiT2ZTAJxmvc3X8UhNYMxl2A0z0Xq3Pm+WY= k8s.io/apiextensions-apiserver v0.23.0/go.mod h1:xIFAEEDlAZgpVBl/1VSjGDmLoXAWRG40+GsWhKhAxY4= -k8s.io/apimachinery v0.20.1/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU= -k8s.io/apimachinery v0.20.4/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU= -k8s.io/apimachinery v0.20.6/go.mod h1:ejZXtW1Ra6V1O5H8xPBGz+T3+4gfkTCeExAHKU57MAc= -k8s.io/apimachinery v0.22.1/go.mod h1:O3oNtNadZdeOMxHFVxOreoznohCpy0z6mocxbZr7oJ0= -k8s.io/apimachinery v0.22.5/go.mod h1:xziclGKwuuJ2RM5/rSFQSYAj0zdbci3DH8kj+WvyN0U= k8s.io/apimachinery v0.23.0 h1:mIfWRMjBuMdolAWJ3Fd+aPTMv3X9z+waiARMpvvb0HQ= k8s.io/apimachinery v0.23.0/go.mod h1:fFCTTBKvKcwTPFzjlcxp91uPFZr+JA0FubU4fLzzFYc= -k8s.io/apiserver v0.20.1/go.mod h1:ro5QHeQkgMS7ZGpvf4tSMx6bBOgPfE+f52KwvXfScaU= -k8s.io/apiserver v0.20.4/go.mod h1:Mc80thBKOyy7tbvFtB4kJv1kbdD0eIH8k8vianJcbFM= -k8s.io/apiserver v0.20.6/go.mod h1:QIJXNt6i6JB+0YQRNcS0hdRHJlMhflFmsBDeSgT1r8Q= -k8s.io/apiserver v0.22.5/go.mod h1:s2WbtgZAkTKt679sYtSudEQrTGWUSQAPe6MupLnlmaQ= k8s.io/apiserver v0.23.0/go.mod h1:Cec35u/9zAepDPPFyT+UMrgqOCjgJ5qtfVJDxjZYmt4= -k8s.io/client-go v0.20.1/go.mod h1:/zcHdt1TeWSd5HoUe6elJmHSQ6uLLgp4bIJHVEuy+/Y= -k8s.io/client-go v0.20.4/go.mod h1:LiMv25ND1gLUdBeYxBIwKpkSC5IsozMMmOOeSJboP+k= -k8s.io/client-go v0.20.6/go.mod h1:nNQMnOvEUEsOzRRFIIkdmYOjAZrC8bgq0ExboWSU1I0= -k8s.io/client-go v0.22.5/go.mod h1:cs6yf/61q2T1SdQL5Rdcjg9J1ElXSwbjSrW2vFImM4Y= k8s.io/client-go v0.23.0 h1:vcsOqyPq7XV3QmQRCBH/t9BICJM9Q1M18qahjv+rebY= k8s.io/client-go v0.23.0/go.mod h1:hrDnpnK1mSr65lHHcUuIZIXDgEbzc7/683c6hyG4jTA= -k8s.io/code-generator v0.19.7/go.mod h1:lwEq3YnLYb/7uVXLorOJfxg+cUu2oihFhHZ0n9NIla0= k8s.io/code-generator v0.23.0/go.mod h1:vQvOhDXhuzqiVfM/YHp+dmg10WDZCchJVObc9MvowsE= -k8s.io/component-base v0.20.1/go.mod h1:guxkoJnNoh8LNrbtiQOlyp2Y2XFCZQmrcg2n/DeYNLk= -k8s.io/component-base v0.20.4/go.mod h1:t4p9EdiagbVCJKrQ1RsA5/V4rFQNDfRlevJajlGwgjI= -k8s.io/component-base v0.20.6/go.mod h1:6f1MPBAeI+mvuts3sIdtpjljHWBQ2cIy38oBIWMYnrM= -k8s.io/component-base v0.22.5/go.mod h1:VK3I+TjuF9eaa+Ln67dKxhGar5ynVbwnGrUiNF4MqCI= k8s.io/component-base v0.23.0/go.mod h1:DHH5uiFvLC1edCpvcTDV++NKULdYYU6pR9Tt3HIKMKI= -k8s.io/cri-api v0.17.3/go.mod h1:X1sbHmuXhwaHs9xxYffLqJogVsnI+f6cPRcgPel7ywM= -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/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= k8s.io/gengo v0.0.0-20210813121822-485abfe95c7c/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= -k8s.io/klog/v2 v2.4.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= -k8s.io/klog/v2 v2.9.0/go.mod h1:hy9LJ/NvuK+iVyP4Ehqva4HxZG/oXyIS3n3Jmire4Ec= -k8s.io/klog/v2 v2.30.0 h1:bUO6drIvCIsvZ/XFgfxoGFQU/a4Qkh0iAlvUR7vlHJw= k8s.io/klog/v2 v2.30.0/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= -k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6/go.mod h1:UuqjUnNftUyPE5H64/qeyjQoUZhGpeFDVdxjTeEVN2o= -k8s.io/kube-openapi v0.0.0-20201113171705-d219536bb9fd/go.mod h1:WOJ3KddDSol4tAGcJo0Tvi+dK12EcqSLqcWsryKMpfM= -k8s.io/kube-openapi v0.0.0-20210421082810-95288971da7e/go.mod h1:vHXdDvt9+2spS2Rx9ql3I8tycm3H9FDfdUoIuKCefvw= -k8s.io/kube-openapi v0.0.0-20211109043538-20434351676c/go.mod h1:vHXdDvt9+2spS2Rx9ql3I8tycm3H9FDfdUoIuKCefvw= -k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65 h1:E3J9oCLlaobFUqsjG9DfKbP2BmgwBL2p7pn0A3dG9W4= +k8s.io/klog/v2 v2.80.1 h1:atnLQ121W371wYYFawwYx1aEY2eUfs4l3J72wtgAwV4= +k8s.io/klog/v2 v2.80.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65/go.mod h1:sX9MT8g7NVZM5lVL/j8QyCCJe8YSMW30QvGZWaCIDIk= -k8s.io/kubernetes v1.13.0/go.mod h1:ocZa8+6APFNC2tX1DZASIbocyYT5jHzqFVsY5aoB7Jk= -k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1 h1:MQ8BAZPZlWk3S9K4a9NCkIFQtZShWqoha7snGixVgEA= +k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1/go.mod h1:C/N6wCaBHeBHkHUesQOQy2/MZqGgMAFPqGsGQLdbZBU= k8s.io/utils v0.0.0-20210802155522-efc7438f0176/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= -k8s.io/utils v0.0.0-20210819203725-bdf08cb9a70a/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= k8s.io/utils v0.0.0-20210930125809-cb0fa318a74b h1:wxEMGetGMur3J1xuGLQY7GEQYg9bZxKn3tKo5k/eYcs= k8s.io/utils v0.0.0-20210930125809-cb0fa318a74b/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= -nhooyr.io/websocket v1.8.7 h1:usjR2uOr/zjjkVMy0lW+PPohFok7PCow5sDjLgX4P4g= -nhooyr.io/websocket v1.8.7/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= -oras.land/oras-go v1.2.0/go.mod h1:pFNs7oHp2dYsYMSS82HaX5l4mpnGO7hbpPN6EWH2ltc= +nhooyr.io/websocket v1.8.6 h1:s+C3xAMLwGmlI31Nyn/eAehUlZPwfYZu2JXM621Q5/k= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= -sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.14/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg= -sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.15/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg= -sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.22/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.25/go.mod h1:Mlj9PNLmG9bZ6BHFwFKDo5afkpWyUISkb9Me0GnK66I= -sigs.k8s.io/json v0.0.0-20211020170558-c049b76a60c6 h1:fD1pz4yfdADVNfFmcP2aBEtudwUQ1AlLnRBALr33v3s= sigs.k8s.io/json v0.0.0-20211020170558-c049b76a60c6/go.mod h1:p4QtZmO4uMYipTQNzagwnNoseA6OxSUutVw05NhYDRs= -sigs.k8s.io/structured-merge-diff/v4 v4.0.1/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= +sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 h1:iXTIw73aPyC+oRdyqqvVJuloN1p0AC/kzH07hu3NE+k= +sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= -sigs.k8s.io/structured-merge-diff/v4 v4.0.3/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= sigs.k8s.io/structured-merge-diff/v4 v4.1.2/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZawJtm+Yrr7PPRQ0Vg4= -sigs.k8s.io/structured-merge-diff/v4 v4.2.0 h1:kDvPBbnPk+qYmkHmSo8vKGp438IASWofnbbUKDE/bv0= -sigs.k8s.io/structured-merge-diff/v4 v4.2.0/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZawJtm+Yrr7PPRQ0Vg4= +sigs.k8s.io/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE= +sigs.k8s.io/structured-merge-diff/v4 v4.2.3/go.mod h1:qjx8mGObPmV2aSZepjQjbmb2ihdVs8cGKBraizNC69E= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= +sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q= sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= -sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= -sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= stathat.com/c/consistent v1.0.0 h1:ezyc51EGcRPJUxfHGSgJjWzJdj3NiMU9pNfLNGiXV0c= stathat.com/c/consistent v1.0.0/go.mod h1:QkzMWzcbB+yQBL2AttO6sgsQS/JSTapcDISJalmCDS0= diff --git a/pubsub/kubemq/kubemq.go b/pubsub/kubemq/kubemq.go index 7d998a602..814ad6fee 100644 --- a/pubsub/kubemq/kubemq.go +++ b/pubsub/kubemq/kubemq.go @@ -5,9 +5,10 @@ import ( "fmt" "time" + "github.com/google/uuid" + "github.com/dapr/components-contrib/pubsub" "github.com/dapr/kit/logger" - "github.com/google/uuid" ) type kubeMQ struct { diff --git a/pubsub/kubemq/kubemq_events.go b/pubsub/kubemq/kubemq_events.go index aa47bbc06..19d31b7a4 100644 --- a/pubsub/kubemq/kubemq_events.go +++ b/pubsub/kubemq/kubemq_events.go @@ -5,9 +5,10 @@ import ( "sync" "time" + "github.com/kubemq-io/kubemq-go" + "github.com/dapr/components-contrib/pubsub" "github.com/dapr/kit/logger" - "github.com/kubemq-io/kubemq-go" ) type kubemqEventsClient interface { @@ -42,6 +43,7 @@ func newkubeMQEvents(logger logger.Logger) *kubeMQEvents { isInitialized: false, } } + func (k *kubeMQEvents) init() error { k.lock.RLock() isInit := k.isInitialized @@ -77,11 +79,13 @@ func (k *kubeMQEvents) init() error { k.isInitialized = true return nil } + func (k *kubeMQEvents) Init(meta *metadata) error { k.metadata = meta _ = k.init() return nil } + func (k *kubeMQEvents) setPublishStream() error { var err error k.publishFunc, err = k.client.Stream(k.ctx, func(err error) { @@ -92,6 +96,7 @@ func (k *kubeMQEvents) setPublishStream() error { }) return err } + func (k *kubeMQEvents) Publish(req *pubsub.PublishRequest) error { if err := k.init(); err != nil { return err @@ -111,6 +116,7 @@ func (k *kubeMQEvents) Publish(req *pubsub.PublishRequest) error { } return nil } + func (k *kubeMQEvents) Features() []pubsub.Feature { return nil } diff --git a/pubsub/kubemq/kubemq_events_test.go b/pubsub/kubemq/kubemq_events_test.go index 2fefcd635..11d8eeeac 100644 --- a/pubsub/kubemq/kubemq_events_test.go +++ b/pubsub/kubemq/kubemq_events_test.go @@ -3,12 +3,14 @@ package kubemq import ( "context" "fmt" - "github.com/dapr/components-contrib/pubsub" - "github.com/dapr/kit/logger" - "github.com/kubemq-io/kubemq-go" - "github.com/stretchr/testify/assert" "testing" "time" + + "github.com/kubemq-io/kubemq-go" + "github.com/stretchr/testify/assert" + + "github.com/dapr/components-contrib/pubsub" + "github.com/dapr/kit/logger" ) type kubemqEventsMock struct { @@ -32,6 +34,7 @@ func (k *kubemqEventsMock) publish(msg *kubemq.Event) error { return nil } + func (k *kubemqEventsMock) Stream(ctx context.Context, onError func(err error)) (func(msg *kubemq.Event) error, error) { go func() { for { @@ -41,33 +44,39 @@ func (k *kubemqEventsMock) Stream(ctx context.Context, onError func(err error)) case result := <-k.resultCh: onError(result) } - } }() return k.publish, nil } + func (k *kubemqEventsMock) Subscribe(ctx context.Context, request *kubemq.EventsSubscription, onEvent func(msg *kubemq.Event, err error)) error { return k.subscribeErr } + func (k *kubemqEventsMock) Close() error { return nil } + func (k *kubemqEventsMock) setResultError(err error) *kubemqEventsMock { k.resultError = err return k } + func (k *kubemqEventsMock) setSubscribeError(err error) *kubemqEventsMock { k.subscribeErr = err return k } + func (k *kubemqEventsMock) setPublishTimeout(timeout time.Duration) *kubemqEventsMock { k.publishTimeout = timeout return k } + func (k *kubemqEventsMock) setPublishError(err error) *kubemqEventsMock { k.publishError = err return k } + func newKubemqEventsMock() *kubemqEventsMock { return &kubemqEventsMock{ resultError: nil, @@ -137,6 +146,7 @@ func Test_kubeMQEvents_Publish(t *testing.T) { _ = k.Close() } } + func Test_kubeMQEvents_Subscribe(t *testing.T) { tests := []struct { name string diff --git a/pubsub/kubemq/kubemq_eventstore.go b/pubsub/kubemq/kubemq_eventstore.go index 093c64586..0c7896fdf 100644 --- a/pubsub/kubemq/kubemq_eventstore.go +++ b/pubsub/kubemq/kubemq_eventstore.go @@ -6,9 +6,10 @@ import ( "sync" "time" + "github.com/kubemq-io/kubemq-go" + "github.com/dapr/components-contrib/pubsub" "github.com/dapr/kit/logger" - "github.com/kubemq-io/kubemq-go" ) // interface used to allow unit testing. @@ -44,6 +45,7 @@ func newKubeMQEventsStore(logger logger.Logger) *kubeMQEventStore { isInitialized: false, } } + func (k *kubeMQEventStore) init() error { k.lock.RLock() isInit := k.isInitialized @@ -79,11 +81,13 @@ func (k *kubeMQEventStore) init() error { k.isInitialized = true return nil } + func (k *kubeMQEventStore) Init(meta *metadata) error { k.metadata = meta _ = k.init() return nil } + func (k *kubeMQEventStore) setPublishStream() error { var err error k.publishFunc, err = k.client.Stream(k.ctx, func(result *kubemq.EventStoreResult, err error) { @@ -97,6 +101,7 @@ func (k *kubeMQEventStore) setPublishStream() error { } return nil } + func (k *kubeMQEventStore) Publish(req *pubsub.PublishRequest) error { if err := k.init(); err != nil { return err @@ -124,6 +129,7 @@ func (k *kubeMQEventStore) Publish(req *pubsub.PublishRequest) error { } return nil } + func (k *kubeMQEventStore) Features() []pubsub.Feature { return nil } diff --git a/pubsub/kubemq/kubemq_eventstore_test.go b/pubsub/kubemq/kubemq_eventstore_test.go index 4c3f5cd14..b4d87abd0 100644 --- a/pubsub/kubemq/kubemq_eventstore_test.go +++ b/pubsub/kubemq/kubemq_eventstore_test.go @@ -3,12 +3,14 @@ package kubemq import ( "context" "fmt" - "github.com/dapr/components-contrib/pubsub" - "github.com/dapr/kit/logger" - "github.com/kubemq-io/kubemq-go" - "github.com/stretchr/testify/assert" "testing" "time" + + "github.com/kubemq-io/kubemq-go" + "github.com/stretchr/testify/assert" + + "github.com/dapr/components-contrib/pubsub" + "github.com/dapr/kit/logger" ) type kubemqEventsStoreMock struct { @@ -32,6 +34,7 @@ func (k *kubemqEventsStoreMock) publish(msg *kubemq.EventStore) error { return nil } + func (k *kubemqEventsStoreMock) Stream(ctx context.Context, onResult func(result *kubemq.EventStoreResult, err error)) (func(msg *kubemq.EventStore) error, error) { go func() { for { @@ -45,33 +48,39 @@ func (k *kubemqEventsStoreMock) Stream(ctx context.Context, onResult func(result Err: result, }, nil) } - } }() return k.publish, nil } + func (k *kubemqEventsStoreMock) Subscribe(ctx context.Context, request *kubemq.EventsStoreSubscription, onEvent func(msg *kubemq.EventStoreReceive, err error)) error { return k.subscribeErr } + func (k *kubemqEventsStoreMock) Close() error { return nil } + func (k *kubemqEventsStoreMock) setResultError(err error) *kubemqEventsStoreMock { k.resultError = err return k } + func (k *kubemqEventsStoreMock) setSubscribeError(err error) *kubemqEventsStoreMock { k.subscribeErr = err return k } + func (k *kubemqEventsStoreMock) setPublishTimeout(timeout time.Duration) *kubemqEventsStoreMock { k.publishTimeout = timeout return k } + func (k *kubemqEventsStoreMock) setPublishError(err error) *kubemqEventsStoreMock { k.publishError = err return k } + func newKubemqEventsStoreMock() *kubemqEventsStoreMock { return &kubemqEventsStoreMock{ resultError: nil, @@ -98,7 +107,8 @@ func Test_kubeMQEventsStore_Publish(t *testing.T) { resultError: nil, wantErr: false, - }, { + }, + { name: "publish with error", req: &pubsub.PublishRequest{ Data: []byte("data"), @@ -159,6 +169,7 @@ func Test_kubeMQEventsStore_Publish(t *testing.T) { _ = k.Close() } } + func Test_kubeMQkubeMQEventsStore_Subscribe(t *testing.T) { tests := []struct { name string diff --git a/pubsub/kubemq/kubemq_test.go b/pubsub/kubemq/kubemq_test.go index eefd83612..a46f6e4ca 100644 --- a/pubsub/kubemq/kubemq_test.go +++ b/pubsub/kubemq/kubemq_test.go @@ -3,11 +3,13 @@ package kubemq import ( "context" "fmt" + "testing" + + "github.com/stretchr/testify/assert" + mdata "github.com/dapr/components-contrib/metadata" "github.com/dapr/components-contrib/pubsub" "github.com/dapr/kit/logger" - "github.com/stretchr/testify/assert" - "testing" ) func getMockEventsClient() *kubeMQEvents { @@ -23,6 +25,7 @@ func getMockEventsClient() *kubeMQEvents { isInitialized: true, } } + func getMockEventsStoreClient() *kubeMQEventStore { return &kubeMQEventStore{ client: newKubemqEventsStoreMock(), @@ -36,6 +39,7 @@ func getMockEventsStoreClient() *kubeMQEventStore { isInitialized: true, } } + func Test_kubeMQ_Init(t *testing.T) { tests := []struct { name string @@ -46,16 +50,18 @@ func Test_kubeMQ_Init(t *testing.T) { }{ { name: "init events store client", - meta: pubsub.Metadata{Base: mdata.Base{ - Properties: map[string]string{ - "address": "localhost:50000", - "channel": "test", - "clientID": "clientID", - "authToken": "authToken", - "group": "group", - "store": "true", - "useMock": "true", - }}, + meta: pubsub.Metadata{ + Base: mdata.Base{ + Properties: map[string]string{ + "address": "localhost:50000", + "channel": "test", + "clientID": "clientID", + "authToken": "authToken", + "group": "group", + "store": "true", + "useMock": "true", + }, + }, }, eventsClient: nil, eventStoreClient: getMockEventsStoreClient(), @@ -63,16 +69,18 @@ func Test_kubeMQ_Init(t *testing.T) { }, { name: "init events client", - meta: pubsub.Metadata{Base: mdata.Base{ - Properties: map[string]string{ - "address": "localhost:50000", - "channel": "test", - "clientID": "clientID", - "authToken": "authToken", - "group": "group", - "store": "false", - "useMock": "true", - }}, + meta: pubsub.Metadata{ + Base: mdata.Base{ + Properties: map[string]string{ + "address": "localhost:50000", + "channel": "test", + "clientID": "clientID", + "authToken": "authToken", + "group": "group", + "store": "false", + "useMock": "true", + }, + }, }, eventsClient: getMockEventsClient(), eventStoreClient: nil, @@ -80,10 +88,12 @@ func Test_kubeMQ_Init(t *testing.T) { }, { name: "init error", - meta: pubsub.Metadata{Base: mdata.Base{ - Properties: map[string]string{ - "address": "badaddress", - }}, + meta: pubsub.Metadata{ + Base: mdata.Base{ + Properties: map[string]string{ + "address": "badaddress", + }, + }, }, eventsClient: nil, eventStoreClient: nil, diff --git a/pubsub/kubemq/metadata.go b/pubsub/kubemq/metadata.go index 5fdc4d676..c907836d5 100644 --- a/pubsub/kubemq/metadata.go +++ b/pubsub/kubemq/metadata.go @@ -2,9 +2,10 @@ package kubemq import ( "fmt" - "github.com/dapr/components-contrib/pubsub" "strconv" "strings" + + "github.com/dapr/components-contrib/pubsub" ) type metadata struct { diff --git a/pubsub/kubemq/metadata_test.go b/pubsub/kubemq/metadata_test.go index a5a81bb19..51d24980d 100644 --- a/pubsub/kubemq/metadata_test.go +++ b/pubsub/kubemq/metadata_test.go @@ -1,10 +1,12 @@ package kubemq import ( + "testing" + + "github.com/stretchr/testify/assert" + mdata "github.com/dapr/components-contrib/metadata" "github.com/dapr/components-contrib/pubsub" - "github.com/stretchr/testify/assert" - "testing" ) func Test_createMetadata(t *testing.T) { @@ -16,17 +18,19 @@ func Test_createMetadata(t *testing.T) { }{ { name: "create valid metadata", - meta: pubsub.Metadata{Base: mdata.Base{ - Properties: map[string]string{ - "address": "localhost:50000", - "channel": "test", - "clientID": "clientID", - "authToken": "authToken", - "group": "group", - "store": "true", - "useMock": "true", - "disableReDelivery": "true", - }}, + meta: pubsub.Metadata{ + Base: mdata.Base{ + Properties: map[string]string{ + "address": "localhost:50000", + "channel": "test", + "clientID": "clientID", + "authToken": "authToken", + "group": "group", + "store": "true", + "useMock": "true", + "disableReDelivery": "true", + }, + }, }, want: &metadata{ host: "localhost", @@ -41,13 +45,15 @@ func Test_createMetadata(t *testing.T) { }, { name: "create valid metadata with empty group", - meta: pubsub.Metadata{Base: mdata.Base{ - Properties: map[string]string{ - "address": "localhost:50000", - "clientID": "clientID", - "authToken": "authToken", - "store": "false", - }}, + meta: pubsub.Metadata{ + Base: mdata.Base{ + Properties: map[string]string{ + "address": "localhost:50000", + "clientID": "clientID", + "authToken": "authToken", + "store": "false", + }, + }, }, want: &metadata{ host: "localhost", @@ -61,14 +67,16 @@ func Test_createMetadata(t *testing.T) { }, { name: "create valid metadata with empty authToken", - meta: pubsub.Metadata{Base: mdata.Base{ - Properties: map[string]string{ - "address": "localhost:50000", - "channel": "test", - "clientID": "clientID", - "group": "group", - "store": "true", - }}, + meta: pubsub.Metadata{ + Base: mdata.Base{ + Properties: map[string]string{ + "address": "localhost:50000", + "channel": "test", + "clientID": "clientID", + "group": "group", + "store": "true", + }, + }, }, want: &metadata{ host: "localhost", @@ -82,56 +90,66 @@ func Test_createMetadata(t *testing.T) { }, { name: "create invalid metadata with bad host", - meta: pubsub.Metadata{Base: mdata.Base{ - Properties: map[string]string{ - "address": ":50000", - "clientID": "clientID", - }}, + meta: pubsub.Metadata{ + Base: mdata.Base{ + Properties: map[string]string{ + "address": ":50000", + "clientID": "clientID", + }, + }, }, want: nil, wantErr: true, }, { name: "create invalid metadata with bad port", - meta: pubsub.Metadata{Base: mdata.Base{ - Properties: map[string]string{ - "address": "localhost:badport", - "clientID": "clientID", - }}, + meta: pubsub.Metadata{ + Base: mdata.Base{ + Properties: map[string]string{ + "address": "localhost:badport", + "clientID": "clientID", + }, + }, }, want: nil, wantErr: true, }, { name: "create invalid metadata with empty address", - meta: pubsub.Metadata{Base: mdata.Base{ - Properties: map[string]string{ - "address": "", - "clientID": "clientID", - }}, + meta: pubsub.Metadata{ + Base: mdata.Base{ + Properties: map[string]string{ + "address": "", + "clientID": "clientID", + }, + }, }, want: nil, wantErr: true, }, { name: "create invalid metadata with bad address format", - meta: pubsub.Metadata{Base: mdata.Base{ - Properties: map[string]string{ - "address": "localhost:50000:badport", - "clientID": "clientID", - }}, + meta: pubsub.Metadata{ + Base: mdata.Base{ + Properties: map[string]string{ + "address": "localhost:50000:badport", + "clientID": "clientID", + }, + }, }, want: nil, wantErr: true, }, { name: "create invalid metadata with bad store info", - meta: pubsub.Metadata{Base: mdata.Base{ - Properties: map[string]string{ - "address": "localhost:50000", - "clientID": "clientID", - "store": "bad", - }}, + meta: pubsub.Metadata{ + Base: mdata.Base{ + Properties: map[string]string{ + "address": "localhost:50000", + "clientID": "clientID", + "store": "bad", + }, + }, }, want: nil, wantErr: true, @@ -143,7 +161,6 @@ func Test_createMetadata(t *testing.T) { got, err := createMetadata(tt.meta) if tt.wantErr { assert.Error(t, err) - } else { assert.NoError(t, err) assert.Equal(t, tt.want, got) diff --git a/tests/certification/bindings/alicloud/dubbo/go.sum b/tests/certification/bindings/alicloud/dubbo/go.sum index 99e972e3c..a795b8a05 100644 --- a/tests/certification/bindings/alicloud/dubbo/go.sum +++ b/tests/certification/bindings/alicloud/dubbo/go.sum @@ -811,7 +811,7 @@ github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B github.com/spf13/afero v1.2.2 h1:5jhuqJyZCZf2JRofRvN/nIFgIWNzPa3/Vz8mYylgbWc= github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cast v1.3.1 h1:nFm6S0SMdyzrzcmThSipiEubIDy8WEXKNZ0UOgiRpng= +github.com/spf13/cast v1.4.1 h1:s0hze+J0196ZfEMTs80N7UlFt0BDuQ7Q+JDnHiMWKdA= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v1.1.1/go.mod h1:WnodtKOvamDL/PwE2M4iKs8aMDBZ5Q5klgD3qfVJQMI= github.com/spf13/jwalterweatherman v1.0.0 h1:XHEdyB+EcvlqZamSM4ZOMGlc93t6AcsBEu9Gc1vn7yk= diff --git a/tests/config/pubsub/tests.yml b/tests/config/pubsub/tests.yml index 664624aab..934c2af6d 100644 --- a/tests/config/pubsub/tests.yml +++ b/tests/config/pubsub/tests.yml @@ -1,4 +1,6 @@ -# Supported operation: publish, subscribe +# Supported operation: publish, subscribe, multiplehandlers, bulkpublish, bulksubscribe +# bulkpublish should only be run for components that implement pubsub.BulkPublisher interface +# bulksubscribe should only be run for components that implement pubsub.BulkSubscriber interface # Config map: ## pubsubName : name of the pubsub ## testTopicName: name of the test topic to use @@ -10,7 +12,7 @@ componentType: pubsub components: - component: azure.eventhubs - allOperations: true + operations: ["publish", "subscribe", "multiplehandlers", "bulkpublish"] config: pubsubName: azure-eventhubs testTopicName: eventhubs-pubsub-topic @@ -40,13 +42,13 @@ components: testMultiTopic2Name: dapr-conf-queue-multi2 checkInOrderProcessing: false - component: redis - allOperations: true + operations: ["publish", "subscribe", "multiplehandlers"] config: checkInOrderProcessing: false - component: natsstreaming - allOperations: true + operations: ["publish", "subscribe", "multiplehandlers"] - component: jetstream - allOperations: true + operations: ["publish", "subscribe", "multiplehandlers"] - component: kafka allOperations: true - component: kafka @@ -56,27 +58,27 @@ components: profile: confluent allOperations: true - component: pulsar - allOperations: true + operations: ["publish", "subscribe", "multiplehandlers"] - component: mqtt profile: mosquitto - allOperations: true + operations: ["publish", "subscribe", "multiplehandlers"] - component: mqtt profile: emqx - allOperations: true + operations: ["publish", "subscribe", "multiplehandlers"] - component: mqtt profile: vernemq - allOperations: true + operations: ["publish", "subscribe", "multiplehandlers"] - component: hazelcast - allOperations: true - - component: kubemq - allOperations: true + operations: ["publish", "subscribe", "multiplehandlers"] - component: rabbitmq - allOperations: true + operations: ["publish", "subscribe", "multiplehandlers"] config: checkInOrderProcessing: false - component: in-memory - allOperations: true + operations: ["publish", "subscribe", "multiplehandlers"] - component: aws.snssqs - allOperations: true + operations: ["publish", "subscribe", "multiplehandlers"] config: checkInOrderProcessing: false + - component: kubemq + allOperations: true From f96873428ed545fba4e69f92f0ae1bc6603ce9a1 Mon Sep 17 00:00:00 2001 From: Crypt Keeper <64215+codefromthecrypt@users.noreply.github.com> Date: Fri, 4 Nov 2022 11:03:48 +0800 Subject: [PATCH 10/87] Adds http-wasm middleware to replace basic (#2239) * Adds http-wasm middleware to replace basic Signed-off-by: Adrian Cole * pre-release dapr/kit for logging Signed-off-by: Adrian Cole * Log.IsEnabled Signed-off-by: Adrian Cole Signed-off-by: Adrian Cole --- go.mod | 6 +- go.sum | 12 +- middleware/http/wasm/{basic => }/Makefile | 0 middleware/http/wasm/README.md | 26 ++- middleware/http/wasm/basic/README.md | 37 ---- middleware/http/wasm/basic/basic.go | 198 ------------------ middleware/http/wasm/basic/basic_test.go | 177 ---------------- middleware/http/wasm/basic/example/Makefile | 3 - middleware/http/wasm/basic/example/example.go | 15 -- .../http/wasm/basic/example/example.wasm | Bin 9968 -> 0 bytes middleware/http/wasm/basic/example/go.sum | 2 - .../wasm/basic/internal/e2e-guests/go.sum | 2 - .../internal/e2e-guests/output/main.wasm | Bin 123630 -> 0 bytes .../http/wasm/basic/internal/e2e_test.go | 135 ------------ .../http/wasm/basic/internal/test/logger.go | 81 ------- middleware/http/wasm/benchmark_test.go | 140 +++++++++++++ middleware/http/wasm/example/Makefile | 3 + .../http/wasm/{basic => }/example/go.mod | 2 +- middleware/http/wasm/example/go.sum | 2 + middleware/http/wasm/example/router.go | 27 +++ middleware/http/wasm/example/router.wasm | Bin 0 -> 9256 bytes middleware/http/wasm/httpwasm.go | 169 +++++++++++++++ middleware/http/wasm/httpwasm_test.go | 148 +++++++++++++ .../{basic => }/internal/e2e-guests/Makefile | 0 .../{basic => }/internal/e2e-guests/README.md | 0 .../{basic => }/internal/e2e-guests/go.mod | 2 +- .../http/wasm/internal/e2e-guests/go.sum | 2 + .../internal/e2e-guests/output/main.go | 14 +- .../wasm/internal/e2e-guests/output/main.wasm | Bin 0 -> 124070 bytes .../wasm/internal/e2e-guests/rewrite/main.go | 21 ++ .../internal/e2e-guests/rewrite/main.wasm | Bin 0 -> 8528 bytes middleware/http/wasm/internal/e2e_test.go | 148 +++++++++++++ .../http/wasm/internal/testdata/rewrite.wasm | Bin 0 -> 561 bytes .../http/wasm/internal/testdata/rewrite.wat | 92 ++++++++ .../bindings/alicloud/dubbo/go.mod | 8 +- .../bindings/alicloud/dubbo/go.sum | 16 +- .../bindings/alicloud/nacos/go.mod | 8 +- .../bindings/alicloud/nacos/go.sum | 16 +- .../bindings/azure/blobstorage/go.mod | 8 +- .../bindings/azure/blobstorage/go.sum | 16 +- .../bindings/azure/cosmosdb/go.mod | 8 +- .../bindings/azure/cosmosdb/go.sum | 16 +- .../bindings/azure/eventhubs/go.mod | 8 +- .../bindings/azure/eventhubs/go.sum | 16 +- .../bindings/azure/servicebusqueues/go.mod | 8 +- .../bindings/azure/servicebusqueues/go.sum | 16 +- .../bindings/azure/storagequeues/go.mod | 8 +- .../bindings/azure/storagequeues/go.sum | 16 +- tests/certification/bindings/kafka/go.mod | 8 +- tests/certification/bindings/kafka/go.sum | 16 +- .../bindings/localstorage/go.mod | 8 +- .../bindings/localstorage/go.sum | 16 +- tests/certification/bindings/postgres/go.mod | 8 +- tests/certification/bindings/postgres/go.sum | 16 +- tests/certification/bindings/rabbitmq/go.mod | 8 +- tests/certification/bindings/rabbitmq/go.sum | 16 +- tests/certification/bindings/redis/go.mod | 8 +- tests/certification/bindings/redis/go.sum | 16 +- tests/certification/go.mod | 8 +- tests/certification/go.sum | 16 +- .../pubsub/azure/eventhubs/go.mod | 8 +- .../pubsub/azure/eventhubs/go.sum | 16 +- .../pubsub/azure/servicebus/topics/go.mod | 8 +- .../pubsub/azure/servicebus/topics/go.sum | 16 +- tests/certification/pubsub/kafka/go.mod | 8 +- tests/certification/pubsub/kafka/go.sum | 16 +- tests/certification/pubsub/mqtt/go.mod | 8 +- tests/certification/pubsub/mqtt/go.sum | 16 +- tests/certification/pubsub/rabbitmq/go.mod | 8 +- tests/certification/pubsub/rabbitmq/go.sum | 16 +- .../secretstores/azure/keyvault/go.mod | 8 +- .../secretstores/azure/keyvault/go.sum | 16 +- .../secretstores/hashicorp/vault/go.mod | 8 +- .../secretstores/hashicorp/vault/go.sum | 16 +- .../secretstores/local/env/go.mod | 8 +- .../secretstores/local/env/go.sum | 16 +- .../secretstores/local/file/go.mod | 8 +- .../secretstores/local/file/go.sum | 16 +- .../state/azure/blobstorage/go.mod | 8 +- .../state/azure/blobstorage/go.sum | 16 +- .../certification/state/azure/cosmosdb/go.mod | 8 +- .../certification/state/azure/cosmosdb/go.sum | 16 +- .../state/azure/tablestorage/go.mod | 8 +- .../state/azure/tablestorage/go.sum | 16 +- tests/certification/state/cassandra/go.mod | 8 +- tests/certification/state/cassandra/go.sum | 16 +- tests/certification/state/memcached/go.mod | 8 +- tests/certification/state/memcached/go.sum | 16 +- tests/certification/state/mongodb/go.mod | 8 +- tests/certification/state/mongodb/go.sum | 16 +- tests/certification/state/mysql/go.mod | 8 +- tests/certification/state/mysql/go.sum | 16 +- tests/certification/state/postgresql/go.mod | 8 +- tests/certification/state/postgresql/go.sum | 16 +- tests/certification/state/redis/go.mod | 8 +- tests/certification/state/redis/go.sum | 16 +- tests/certification/state/sqlserver/go.mod | 8 +- tests/certification/state/sqlserver/go.sum | 16 +- tests/e2e/pubsub/jetstream/go.mod | 2 +- tests/e2e/pubsub/jetstream/go.sum | 5 +- 100 files changed, 1181 insertions(+), 1058 deletions(-) rename middleware/http/wasm/{basic => }/Makefile (100%) delete mode 100644 middleware/http/wasm/basic/README.md delete mode 100644 middleware/http/wasm/basic/basic.go delete mode 100644 middleware/http/wasm/basic/basic_test.go delete mode 100644 middleware/http/wasm/basic/example/Makefile delete mode 100644 middleware/http/wasm/basic/example/example.go delete mode 100755 middleware/http/wasm/basic/example/example.wasm delete mode 100644 middleware/http/wasm/basic/example/go.sum delete mode 100644 middleware/http/wasm/basic/internal/e2e-guests/go.sum delete mode 100755 middleware/http/wasm/basic/internal/e2e-guests/output/main.wasm delete mode 100644 middleware/http/wasm/basic/internal/e2e_test.go delete mode 100644 middleware/http/wasm/basic/internal/test/logger.go create mode 100644 middleware/http/wasm/benchmark_test.go create mode 100644 middleware/http/wasm/example/Makefile rename middleware/http/wasm/{basic => }/example/go.mod (56%) create mode 100644 middleware/http/wasm/example/go.sum create mode 100644 middleware/http/wasm/example/router.go create mode 100755 middleware/http/wasm/example/router.wasm create mode 100644 middleware/http/wasm/httpwasm.go create mode 100644 middleware/http/wasm/httpwasm_test.go rename middleware/http/wasm/{basic => }/internal/e2e-guests/Makefile (100%) rename middleware/http/wasm/{basic => }/internal/e2e-guests/README.md (100%) rename middleware/http/wasm/{basic => }/internal/e2e-guests/go.mod (56%) create mode 100644 middleware/http/wasm/internal/e2e-guests/go.sum rename middleware/http/wasm/{basic => }/internal/e2e-guests/output/main.go (53%) create mode 100755 middleware/http/wasm/internal/e2e-guests/output/main.wasm create mode 100644 middleware/http/wasm/internal/e2e-guests/rewrite/main.go create mode 100755 middleware/http/wasm/internal/e2e-guests/rewrite/main.wasm create mode 100644 middleware/http/wasm/internal/e2e_test.go create mode 100644 middleware/http/wasm/internal/testdata/rewrite.wasm create mode 100644 middleware/http/wasm/internal/testdata/rewrite.wat diff --git a/go.mod b/go.mod index 1f8d73844..97b7c970b 100644 --- a/go.mod +++ b/go.mod @@ -49,7 +49,7 @@ require ( github.com/coreos/go-oidc v2.2.1+incompatible github.com/cyphar/filepath-securejoin v0.2.3 github.com/dancannon/gorethink v4.0.0+incompatible - github.com/dapr/kit v0.0.2 + github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f github.com/denisenkom/go-mssqldb v0.12.3 github.com/dghubble/go-twitter v0.0.0-20221024160433-0cc1e72ed6d8 github.com/dghubble/oauth1 v0.7.1 @@ -70,6 +70,7 @@ require ( github.com/hashicorp/go-multierror v1.1.1 github.com/hashicorp/golang-lru v0.5.4 github.com/hazelcast/hazelcast-go-client v0.0.0-20190530123621-6cf767c2f31a + github.com/http-wasm/http-wasm-host-go v0.1.0 github.com/huaweicloud/huaweicloud-sdk-go-obs v3.21.12+incompatible github.com/huaweicloud/huaweicloud-sdk-go-v3 v0.1.6 github.com/influxdata/influxdb-client-go v1.4.0 @@ -99,9 +100,9 @@ require ( github.com/supplyon/gremcos v0.1.38 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.527 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssm v1.0.527 + github.com/tetratelabs/wazero v1.0.0-pre.3 github.com/valyala/fasthttp v1.41.0 github.com/vmware/vmware-go-kcl v1.5.0 - github.com/wapc/wapc-go v0.5.5 github.com/xdg-go/scram v1.1.1 go.mongodb.org/mongo-driver v1.10.3 go.temporal.io/api v1.12.0 @@ -314,7 +315,6 @@ require ( github.com/stathat/consistent v1.0.0 // indirect github.com/stretchr/objx v0.5.0 // indirect github.com/tchap/go-patricia/v2 v2.3.1 // indirect - github.com/tetratelabs/wazero v1.0.0-pre.3 // indirect github.com/tidwall/gjson v1.13.0 // indirect github.com/tidwall/match v1.1.1 // indirect github.com/tidwall/pretty v1.2.0 // indirect diff --git a/go.sum b/go.sum index cda69dc4d..baf8c92ac 100644 --- a/go.sum +++ b/go.sum @@ -416,8 +416,8 @@ github.com/dancannon/gorethink v4.0.0+incompatible h1:KFV7Gha3AuqT+gr0B/eKvGhbjm github.com/dancannon/gorethink v4.0.0+incompatible/go.mod h1:BLvkat9KmZc1efyYwhz3WnybhRZtgF1K929FD8z1avU= github.com/danieljoos/wincred v1.1.2 h1:QLdCxFs1/Yl4zduvBdcHB8goaYk9RARS2SgLLRuAyr0= github.com/danieljoos/wincred v1.1.2/go.mod h1:GijpziifJoIBfYh+S7BbkdUTU4LfM+QnGqR5Vl2tAx0= -github.com/dapr/kit v0.0.2 h1:VNg6RWrBMOdtY0/ZLztyAa/RjyFLaskdO9wt2HIREwk= -github.com/dapr/kit v0.0.2/go.mod h1:Q4TWm9+vcPZFGehaJUZt2hvA805wJm7FIuoArytWJ8o= +github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= +github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f/go.mod h1:i9t09QZw346M2RbuK7oJhssOP0HCAQObz61U4SBNJSU= github.com/dave/jennifer v1.4.0/go.mod h1:fIb+770HOpJ2fmN9EPPKOqm1vMGhB+TwXKMZhrIygKg= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= @@ -522,8 +522,8 @@ github.com/frankban/quicktest v1.10.2 h1:19ARM85nVi4xH7xPXuc5eM/udya5ieh7b/Sv+d8 github.com/frankban/quicktest v1.10.2/go.mod h1:K+q6oSqb0W0Ininfk863uOk1lMy69l/P6txr3mVT54s= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/fsnotify/fsnotify v1.5.4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwVZI= github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= +github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/gavv/httpexpect v2.0.0+incompatible h1:1X9kcRshkSKEjNJJxX9Y9mQ5BRfbxU5kORdjhlA1yX8= github.com/gavv/httpexpect v2.0.0+incompatible/go.mod h1:x+9tiU1YnrOvnB725RkpoLv1M62hOWzwo5OXotisrKc= github.com/getkin/kin-openapi v0.2.0/go.mod h1:V1z9xl9oF5Wt7v32ne4FmiF1alpS4dM6mNzoywPOXlk= @@ -869,6 +869,8 @@ github.com/hashicorp/yamux v0.0.0-20181012175058-2f1d1f20f75d/go.mod h1:+NfK9FKe github.com/hazelcast/hazelcast-go-client v0.0.0-20190530123621-6cf767c2f31a h1:j6SSiw7fWemWfrJL801xiQ6xRT7ZImika50xvmPN+tg= github.com/hazelcast/hazelcast-go-client v0.0.0-20190530123621-6cf767c2f31a/go.mod h1:VhwtcZ7sg3xq7REqGzEy7ylSWGKz4jZd05eCJropNzI= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/http-wasm/http-wasm-host-go v0.1.0 h1:UAFh62U/9s6jyK0SFj1BfuKX9A1uYMKTipuy7CkJpf4= +github.com/http-wasm/http-wasm-host-go v0.1.0/go.mod h1:wzJRRVIN1Xzdlb/aXbShe9MiOO0BKA9jFVH7lSqKFTs= github.com/huaweicloud/huaweicloud-sdk-go-obs v3.21.12+incompatible h1:tANYIteuFrosKbRYUk1Yo/OGJjbt4x3OVg211Qc60M0= github.com/huaweicloud/huaweicloud-sdk-go-obs v3.21.12+incompatible/go.mod h1:l7VUhRbTKCzdOacdT4oWCwATKyvZqUOlOqr0Ous3k4s= github.com/huaweicloud/huaweicloud-sdk-go-v3 v0.1.6 h1:18ZrfdnOMi2tx59TioYV5zFuCfD4YzoEz62ktQBOEeU= @@ -1434,9 +1436,6 @@ github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7FwZEA7Ioqkc= github.com/vmware/vmware-go-kcl v1.5.0 h1:lTptJptznhVOHS7CSuhd/2yDJa7deTBRHaj3zAvhJt8= github.com/vmware/vmware-go-kcl v1.5.0/go.mod h1:P92YfaWfQyudNf62BNx+E2rJn9pd165MhHsRt8ajkpM= -github.com/wapc/wapc-go v0.5.5 h1:FVMcscIUvARubkXS5hU2l7Z6k03cRE1mxc7Vpv56fIQ= -github.com/wapc/wapc-go v0.5.5/go.mod h1:7hCuY3L3Kz0BHzqPzgnkf8tUDRqKP3rfh38jhx5ZI4g= -github.com/wasmerio/wasmer-go v1.0.4 h1:MnqHoOGfiQ8MMq2RF6wyCeebKOe84G88h5yv+vmxJgs= github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c= github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= github.com/xdg-go/scram v1.1.1 h1:VOMT+81stJgXW3CpHyqHN3AXDYIMsx56mEFrB37Mb/E= @@ -1588,6 +1587,7 @@ golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= golang.org/x/exp v0.0.0-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= +golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f h1:Al51T6tzvuh3oiwX11vex3QgJ2XTedFPGmbEVh8cdoc= golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= diff --git a/middleware/http/wasm/basic/Makefile b/middleware/http/wasm/Makefile similarity index 100% rename from middleware/http/wasm/basic/Makefile rename to middleware/http/wasm/Makefile diff --git a/middleware/http/wasm/README.md b/middleware/http/wasm/README.md index 034776157..6786e0078 100644 --- a/middleware/http/wasm/README.md +++ b/middleware/http/wasm/README.md @@ -1,5 +1,23 @@ -# WebAssembly Middleware +## WebAssembly Middleware -Middleware components in this directory load WebAssembly binaries (wasm) to -modify requests and responses. Each middleware describes its features and -constraints such as required function exports. +This component lets you manipulate an incoming request or serve a response with custom logic compiled using the [htp-wasm](https://http-wasm.io/) Application Binary Interface (ABI). The `handle_request` function receives an incoming request and can manipulate it or serve a response as necessary. + +Please see the [documentation](https://github.com/dapr/docs/blob/v1.9/daprdocs/content/en/reference/components-reference/supported-middleware/middleware-wasm.md) for general configuration. + +### Generating Wasm + +To compile your wasm, you must compile source using an SDK such as [http-wasm-guest-tinygo](https://github.com/http-wasm/http-wasm-guest-tinygo). You can also make a copy of [hello.go](./example/example.go) and replace the `handler.HandleFn` function with your custom logic. + +If using TinyGo, compile like so and set the `path` attribute to the output: +```bash +tinygo build -o router.wasm -scheduler=none --no-debug -target=wasi router.go` +``` + +### Notes + +* This is an alpha feature, so configuration is subject to change. +* This module implements the host side of the http-wasm handler protocol. +* This uses [wazero](https://wazero.io) for the WebAssembly runtime as it has no dependencies, + nor relies on CGO. This allows installation without shared libraries. +* Many WebAssembly compilers leave memory unbounded and/or set to 16MB. To + avoid resource exhaustion, assign [concurrency controls](https://docs.dapr.io/operations/configuration/control-concurrency/). diff --git a/middleware/http/wasm/basic/README.md b/middleware/http/wasm/basic/README.md deleted file mode 100644 index 11c0551d9..000000000 --- a/middleware/http/wasm/basic/README.md +++ /dev/null @@ -1,37 +0,0 @@ -## Basic WebAssembly Middleware - -WebAssembly is a way to safely run code compiled in other languages. Runtimes -execute WebAssembly Modules (Wasm), which are most often binaries with a `.wasm` -extension. - -This component allows you to rewrite a request URI with custom logic compiled -to a Wasm using the [waPC protocol][1]. - -Please see the [documentation][2] for general configuration. - -### Generating Wasm - -To compile your wasm, you must compile source using a wapc-go guest SDK such as -[TinyGo][3]. You can also make a copy of [hello.go](./example/example.go) and -replace the function `rewrite` with your custom logic. - -If using TinyGo, compile like so and set the `path` attribute to the output: -```bash -tinygo build -o example.wasm -scheduler=none --no-debug -target=wasi example.go` -``` - -### Notes - -* This is an alpha feature, so configuration is subject to change. -* This module implements the host side of the waPC protocol using [wapc-go][4]. -* This uses [wazero][5] for the WebAssembly runtime as it has no dependencies, - nor relies on CGO. This allows installation without shared libraries. -* Many WebAssembly compilers leave memory unbounded and/or set to 16MB. Do not - set a large pool size without considering memory amplification. - -[1]: https://wapc.io/docs/spec/ -[2]: https://github.com/dapr/docs/blob/v1.8/daprdocs/content/en/reference/components-reference/supported-middleware/middleware-wasm.md -[3]: https://github.com/wapc/wapc-guest-tinygo -[4]: https://github.com/wapc/wapc-go -[5]: https://wazero.io - \ No newline at end of file diff --git a/middleware/http/wasm/basic/basic.go b/middleware/http/wasm/basic/basic.go deleted file mode 100644 index 9f4552e3e..000000000 --- a/middleware/http/wasm/basic/basic.go +++ /dev/null @@ -1,198 +0,0 @@ -package basic - -import ( - "bytes" - "context" - "encoding/json" - "errors" - "fmt" - "net/http" - "os" - "runtime" - "strconv" - "time" - - "github.com/wapc/wapc-go" - "github.com/wapc/wapc-go/engines/wazero" - - "github.com/dapr/components-contrib/internal/httputils" - "github.com/dapr/components-contrib/middleware" - "github.com/dapr/kit/logger" -) - -// ctx substitutes for context propagation until middleware APIs support it. -var ctx = context.Background() - -// middlewareMetadata includes configuration used for the WebAssembly handler. -// Detailed notes are in README.md for visibility. -// -// Note: When changing this, you must update the docs with summary comments per -// field. -// https://github.com/dapr/docs/blob/v1.8/daprdocs/content/en/reference/components-reference/supported-middleware/middleware-wasm.md -type middlewareMetadata struct { - // Path is where to load a `%.wasm` file that implements the guest side of - // the waPC protocol. No default. - Path string `json:"path"` - - // PoolSize determines the amount of modules at the given path to load, per - // request handler. Default: 10 - PoolSize poolSizeJSON `json:"poolSize"` - - // guest is WebAssembly binary implementing the waPC guest, loaded from Path. - guest []byte -} - -// poolSizeJSON is needed because go cannot unmarshal an integer from a string. -type poolSizeJSON uint32 - -// UnmarshalJSON allows decoding of a quoted uint32 -func (s *poolSizeJSON) UnmarshalJSON(b []byte) error { - var n json.Number - if err := json.Unmarshal(b, &n); err != nil { - return fmt.Errorf("invalid poolSize: %w", err) - } - if i, err := strconv.ParseUint(string(n), 10, 32); err != nil { - return fmt.Errorf("invalid poolSize: %w", err) - } else { - *s = poolSizeJSON(i) - return nil - } -} - -// wapcMiddleware is a wasm basic middleware. -type wapcMiddleware struct { - logger logger.Logger -} - -// NewMiddleware returns a new wasm basic middleware. -func NewMiddleware(logger logger.Logger) middleware.Middleware { - return &wapcMiddleware{logger: logger} -} - -// GetHandler returns the HTTP handler provided by wasm basic middleware. -func (m *wapcMiddleware) GetHandler(metadata middleware.Metadata) (func(next http.Handler) http.Handler, error) { - rh, err := m.getHandler(metadata) - if err != nil { - return nil, err - } - runtime.SetFinalizer(rh, (*wapcRequestHandler).Close) - return rh.requestHandler, nil -} - -// getHandler is extracted for unit testing. -func (m *wapcMiddleware) getHandler(metadata middleware.Metadata) (*wapcRequestHandler, error) { - meta, err := m.getMetadata(metadata) - if err != nil { - return nil, fmt.Errorf("wasm basic: failed to parse metadata: %w", err) - } - - var stdout, stderr bytes.Buffer - config := &wapc.ModuleConfig{ - Logger: m.log, // waPC messages go here - Stdout: &stdout, // reset per request - Stderr: &stderr, - } - - // This is a simple case, so the binary does not need any callbacks. - mod, err := wazero.Engine().New(ctx, wapc.NoOpHostCallHandler, meta.guest, config) - if err != nil { - return nil, fmt.Errorf("wasm basic: error compiling wasm at %s: %w", meta.Path, err) - } - - // WebAssembly modules are not goroutine safe (because they have no atomics - // to implement garbage collection safely). Hence, we need a pool. - pool, err := wapc.NewPool(ctx, mod, uint64(meta.PoolSize)) - if err != nil { - return nil, fmt.Errorf("error creating module pool from wasm at %s: %w", meta.Path, err) - } - - return &wapcRequestHandler{mod: mod, logger: m.logger, stdout: &stdout, stderr: &stderr, pool: pool}, nil -} - -// log implements wapc.Logger. -func (m *wapcMiddleware) log(msg string) { - m.logger.Info(msg) -} - -func (m *wapcMiddleware) getMetadata(metadata middleware.Metadata) (*middlewareMetadata, error) { - b, err := json.Marshal(metadata.Properties) - if err != nil { - return nil, err - } - - var data middlewareMetadata - err = json.Unmarshal(b, &data) - if err != nil { - return nil, err - } - - if data.Path == "" { - return nil, errors.New("missing path") - } - - data.guest, err = os.ReadFile(data.Path) - if err != nil { - return nil, fmt.Errorf("error reading path: %w", err) - } - - if data.PoolSize == 0 { - data.PoolSize = 10 // Default - } - - return &data, nil -} - -type wapcRequestHandler struct { - mod wapc.Module - logger logger.Logger - stdout, stderr *bytes.Buffer - pool *wapc.Pool -} - -func (rh *wapcRequestHandler) requestHandler(next http.Handler) http.Handler { - return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - instance, err := rh.pool.Get(1 * time.Second) - if err != nil { - httputils.RespondWithErrorAndMessage(w, http.StatusInternalServerError, "wasm pool busy") - return - } - defer func() { - rh.stdout.Reset() - rh.stderr.Reset() - _ = rh.pool.Return(instance) - }() - - err = rh.handle(r, instance) - if stdout := rh.stdout.String(); len(stdout) > 0 { - rh.logger.Debugf("wasm stdout: %s", stdout) - } - if stderr := rh.stderr.String(); len(stderr) > 0 { - rh.logger.Debugf("wasm stderr: %s", stderr) - } - if err != nil { - httputils.RespondWithErrorAndMessage(w, http.StatusInternalServerError, err.Error()) - } else { - next.ServeHTTP(w, r) - } - }) -} - -// handle is like http.Handler, except it accepts a waPC instance and returns -// an error. -func (rh *wapcRequestHandler) handle(r *http.Request, instance wapc.Instance) error { - if uri, err := instance.Invoke(ctx, "rewrite", []byte(httputils.RequestURI(r))); err != nil { - return err - } else { - return httputils.SetRequestURI(r, string(uri)) - } -} - -// Close implements io.Closer -func (rh *wapcRequestHandler) Close() error { - // TODO: we have to use a finalizer as there's no way in dapr to close middleware, yet. - // See https://github.com/dapr/dapr/pull/3088 - runtime.SetFinalizer(rh, nil) - - rh.pool.Close(ctx) - return rh.mod.Close(ctx) -} diff --git a/middleware/http/wasm/basic/basic_test.go b/middleware/http/wasm/basic/basic_test.go deleted file mode 100644 index ec037a1c1..000000000 --- a/middleware/http/wasm/basic/basic_test.go +++ /dev/null @@ -1,177 +0,0 @@ -package basic - -import ( - "fmt" - "log" - "net/http" - "net/http/httptest" - "os" - "testing" - - "github.com/dapr/components-contrib/internal/httputils" - "github.com/dapr/components-contrib/metadata" - - "github.com/stretchr/testify/require" - - "github.com/dapr/components-contrib/middleware" - "github.com/dapr/components-contrib/middleware/http/wasm/basic/internal/test" - "github.com/dapr/kit/logger" -) - -var exampleWasm []byte - -// TestMain ensures we can read the example wasm prior to running unit tests. -func TestMain(m *testing.M) { - var err error - exampleWasm, err = os.ReadFile("example/example.wasm") - if err != nil { - log.Panicln(err) - } - os.Exit(m.Run()) -} - -func Test_NewMiddleWare(t *testing.T) { - l := test.NewLogger() - require.Equal(t, &wapcMiddleware{logger: l}, NewMiddleware(l)) -} - -func Test_wapcMiddleware_log(t *testing.T) { - l := test.NewLogger() - m := &wapcMiddleware{logger: l} - message := "alert" - m.log(message) - - require.Equal(t, "Info(alert)\n", l.(fmt.Stringer).String()) -} - -func Test_wapcMiddleware_getMetadata(t *testing.T) { - m := &wapcMiddleware{} - - type testCase struct { - name string - metadata metadata.Base - expected *middlewareMetadata - expectedErr string - } - - tests := []testCase{ - { - name: "empty path", - metadata: metadata.Base{Properties: map[string]string{}}, - expectedErr: "missing path", - }, - { - name: "path dir not file", - metadata: metadata.Base{Properties: map[string]string{ - "path": "./example", - }}, - // Below ends in "is a directory" in unix, and "The handle is invalid." in windows. - expectedErr: "error reading path: read ./example: ", - }, - { - name: "poolSize defaults to 10", - metadata: metadata.Base{Properties: map[string]string{ - "path": "./example/example.wasm", - }}, - expected: &middlewareMetadata{Path: "./example/example.wasm", PoolSize: 10, guest: exampleWasm}, - }, - { - name: "poolSize", - metadata: metadata.Base{Properties: map[string]string{ - "path": "./example/example.wasm", - "poolSize": "1", - }}, - expected: &middlewareMetadata{Path: "./example/example.wasm", PoolSize: 1, guest: exampleWasm}, - }, - { - name: "poolSize invalid", - metadata: metadata.Base{Properties: map[string]string{ - "path": "./example/example.wasm", - "poolSize": "-1", - }}, - expectedErr: `invalid poolSize: strconv.ParseUint: parsing "-1": invalid syntax`, - }, - } - - for _, tt := range tests { - tc := tt - t.Run(tc.name, func(t *testing.T) { - md, err := m.getMetadata(middleware.Metadata{Base: tc.metadata}) - if tc.expectedErr == "" { - require.NoError(t, err) - require.Equal(t, tc.expected, md) - } else { - // Use substring match as the error can be different in Windows. - require.Contains(t, err.Error(), tc.expectedErr) - } - }) - } -} - -func Test_wapcMiddleware_getHandler(t *testing.T) { - m := &wapcMiddleware{logger: logger.NewLogger(t.Name())} - - type testCase struct { - name string - metadata metadata.Base - expectedErr string - } - - tests := []testCase{ - // This just tests the error message prefixes properly. Otherwise, it is - // redundant to Test_wapcMiddleware_getMetadata - { - name: "requires path metadata", - metadata: metadata.Base{Properties: map[string]string{}}, - expectedErr: "wasm basic: failed to parse metadata: missing path", - }, - // This is more than Test_wapcMiddleware_getMetadata, as it ensures the - // contents are actually wasm. - { - name: "path not wasm", - metadata: metadata.Base{Properties: map[string]string{ - "path": "./example/example.go", - }}, - expectedErr: "wasm basic: error compiling wasm at ./example/example.go: invalid binary", - }, - { - name: "ok", - metadata: metadata.Base{Properties: map[string]string{ - "path": "./example/example.wasm", - }}, - }, - } - - for _, tt := range tests { - tc := tt - t.Run(tc.name, func(t *testing.T) { - h, err := m.getHandler(middleware.Metadata{Base: tc.metadata}) - if tc.expectedErr == "" { - require.NoError(t, err) - require.NotNil(t, h.mod) - require.NotNil(t, h.pool) - } else { - require.EqualError(t, err, tc.expectedErr) - } - }) - } -} - -func Test_Example(t *testing.T) { - meta := metadata.Base{Properties: map[string]string{ - // example.wasm was compiled via the following: - // tinygo build -o example.wasm -scheduler=none --no-debug -target=wasi hello.go` - "path": "./example/example.wasm", - "poolSize": "2", - }} - l := test.NewLogger() - handlerFn, err := NewMiddleware(l).GetHandler(middleware.Metadata{Base: meta}) - require.NoError(t, err) - handler := handlerFn(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})) - - r := httptest.NewRequest(http.MethodGet, "/v1.0/hi", nil) - w := httptest.NewRecorder() - handler.ServeHTTP(w, r) - require.Equal(t, "/v1.0/hello", httputils.RequestURI(r)) - require.Empty(t, l.(fmt.Stringer).String()) -} diff --git a/middleware/http/wasm/basic/example/Makefile b/middleware/http/wasm/basic/example/Makefile deleted file mode 100644 index 37aa6c9b7..000000000 --- a/middleware/http/wasm/basic/example/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -build: - @echo "Building Example Guest Wasm" - @tinygo build -o example.wasm -scheduler=none --no-debug -target=wasi example.go diff --git a/middleware/http/wasm/basic/example/example.go b/middleware/http/wasm/basic/example/example.go deleted file mode 100644 index 56d7d67af..000000000 --- a/middleware/http/wasm/basic/example/example.go +++ /dev/null @@ -1,15 +0,0 @@ -package main - -import "github.com/wapc/wapc-guest-tinygo" - -func main() { - wapc.RegisterFunctions(wapc.Functions{"rewrite": rewrite}) -} - -// rewrite returns a new URI if necessary. -func rewrite(requestURI []byte) ([]byte, error) { - if string(requestURI) == "/v1.0/hi" { - return []byte("/v1.0/hello"), nil - } - return requestURI, nil -} diff --git a/middleware/http/wasm/basic/example/example.wasm b/middleware/http/wasm/basic/example/example.wasm deleted file mode 100755 index 4454fb1bcf83bdec8d07564ce54ce88c7b128ada..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9968 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 diff --git a/middleware/http/wasm/basic/example/go.sum b/middleware/http/wasm/basic/example/go.sum deleted file mode 100644 index 56b5ac4d3..000000000 --- a/middleware/http/wasm/basic/example/go.sum +++ /dev/null @@ -1,2 +0,0 @@ -github.com/wapc/wapc-guest-tinygo v0.3.3 h1:jLebiwjVSHLGnS+BRabQ6+XOV7oihVWAc05Hf1SbeR0= -github.com/wapc/wapc-guest-tinygo v0.3.3/go.mod h1:mzM3CnsdSYktfPkaBdZ8v88ZlfUDEy5Jh5XBOV3fYcw= diff --git a/middleware/http/wasm/basic/internal/e2e-guests/go.sum b/middleware/http/wasm/basic/internal/e2e-guests/go.sum deleted file mode 100644 index 56b5ac4d3..000000000 --- a/middleware/http/wasm/basic/internal/e2e-guests/go.sum +++ /dev/null @@ -1,2 +0,0 @@ -github.com/wapc/wapc-guest-tinygo v0.3.3 h1:jLebiwjVSHLGnS+BRabQ6+XOV7oihVWAc05Hf1SbeR0= -github.com/wapc/wapc-guest-tinygo v0.3.3/go.mod h1:mzM3CnsdSYktfPkaBdZ8v88ZlfUDEy5Jh5XBOV3fYcw= diff --git a/middleware/http/wasm/basic/internal/e2e-guests/output/main.wasm b/middleware/http/wasm/basic/internal/e2e-guests/output/main.wasm deleted file mode 100755 index 51771c853d085f287000c88e0502bbf8aa1e22c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 123630 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 0 { - poolSize = strconv.Itoa(tc.poolSize) - } - - wasmPath := path.Join(t.TempDir(), "guest.wasm") - require.NoError(t, os.WriteFile(wasmPath, tc.guest, 0o600)) - - meta := metadata.Base{Properties: map[string]string{"path": wasmPath, "poolSize": poolSize}} - l := test.NewLogger() - handlerFn, err := basic.NewMiddleware(l).GetHandler(middleware.Metadata{Base: meta}) - require.NoError(t, err) - tc.test(t, handlerFn(h), l.(fmt.Stringer)) - }) - } -} diff --git a/middleware/http/wasm/basic/internal/test/logger.go b/middleware/http/wasm/basic/internal/test/logger.go deleted file mode 100644 index f0c314110..000000000 --- a/middleware/http/wasm/basic/internal/test/logger.go +++ /dev/null @@ -1,81 +0,0 @@ -package test - -import ( - "bytes" - "fmt" - - "github.com/dapr/kit/logger" -) - -// compile-time check to ensure testLogger implements logger.testLogger. -var _ logger.Logger = &testLogger{} - -func NewLogger() logger.Logger { - var buf bytes.Buffer - return &testLogger{buf: &buf} -} - -type testLogger struct { - buf *bytes.Buffer -} - -func (l *testLogger) String() string { - return l.buf.String() -} - -func (l *testLogger) EnableJSONOutput(enabled bool) { - fmt.Fprintf(l.buf, "EnableJSONOutput(%v)\n", enabled) -} - -func (l *testLogger) SetAppID(id string) { - fmt.Fprintf(l.buf, "SetAppID(%v)\n", id) -} - -func (l *testLogger) SetOutputLevel(outputLevel logger.LogLevel) { - fmt.Fprintf(l.buf, "SetOutputLevel(%v)\n", outputLevel) -} - -func (l *testLogger) WithLogType(logType string) logger.Logger { - fmt.Fprintf(l.buf, "WithLogType(%v)\n", logType) - return l -} - -func (l *testLogger) Info(args ...interface{}) { - fmt.Fprintf(l.buf, "Info(%v)\n", fmt.Sprint(args...)) -} - -func (l *testLogger) Infof(format string, args ...interface{}) { - fmt.Fprintf(l.buf, "Info(%v)\n", fmt.Sprintf(format, args...)) -} - -func (l *testLogger) Debug(args ...interface{}) { - fmt.Fprintf(l.buf, "Debug(%v)\n", fmt.Sprint(args...)) -} - -func (l *testLogger) Debugf(format string, args ...interface{}) { - fmt.Fprintf(l.buf, "Debug(%v)\n", fmt.Sprintf(format, args...)) -} - -func (l *testLogger) Warn(args ...interface{}) { - fmt.Fprintf(l.buf, "Warn(%v)\n", fmt.Sprint(args...)) -} - -func (l *testLogger) Warnf(format string, args ...interface{}) { - fmt.Fprintf(l.buf, "Warn(%v)\n", fmt.Sprintf(format, args...)) -} - -func (l *testLogger) Error(args ...interface{}) { - fmt.Fprintf(l.buf, "Error(%v)\n", fmt.Sprint(args...)) -} - -func (l *testLogger) Errorf(format string, args ...interface{}) { - fmt.Fprintf(l.buf, "Error(%v)\n", fmt.Sprintf(format, args...)) -} - -func (l *testLogger) Fatal(args ...interface{}) { - fmt.Fprintf(l.buf, "Fatal(%v)\n", fmt.Sprint(args...)) -} - -func (l *testLogger) Fatalf(format string, args ...interface{}) { - fmt.Fprintf(l.buf, "Fatal(%v)\n", fmt.Sprintf(format, args...)) -} diff --git a/middleware/http/wasm/benchmark_test.go b/middleware/http/wasm/benchmark_test.go new file mode 100644 index 000000000..aefd01722 --- /dev/null +++ b/middleware/http/wasm/benchmark_test.go @@ -0,0 +1,140 @@ +package wasm + +import ( + "fmt" + "io" + "net/http" + "net/url" + "testing" + + dapr "github.com/dapr/components-contrib/middleware" + "github.com/dapr/kit/logger" + + "github.com/dapr/components-contrib/internal/httputils" + "github.com/dapr/components-contrib/metadata" +) + +const parallel = 10 + +func BenchmarkNative(b *testing.B) { + benchmarkAll(b, func(next http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if httputils.RequestURI(r) == "/v1.0/hi?name=panda" { + httputils.SetRequestURI(r, "/v1.0/hello?name=teddy") + } + next.ServeHTTP(w, r) + }) + }) +} + +func BenchmarkTinygo(b *testing.B) { + path := "./internal/e2e-guests/rewrite/main.wasm" + benchmarkMiddleware(b, path) +} + +// BenchmarkWat gives baseline performance for the same handler by +// writing it directly in WebAssembly Text Format. +func BenchmarkWat(b *testing.B) { + path := "./internal/testdata/rewrite.wasm" + benchmarkMiddleware(b, path) +} + +func benchmarkMiddleware(b *testing.B, path string) { + md := metadata.Base{Properties: map[string]string{"path": path}} + + l := logger.NewLogger(b.Name()) + l.SetOutput(io.Discard) + + handlerFn, err := NewMiddleware(l).GetHandler(dapr.Metadata{Base: md}) + if err != nil { + b.Fatal(err) + } + benchmarkAll(b, handlerFn) +} + +var benches = map[string]struct { + newRequest func() *http.Request + test http.Handler +}{ + "rewrite": { + newRequest: func() *http.Request { + u, err := url.Parse("https://test.io/v1.0/hi?name=panda") + if err != nil { + panic(err) + } + return &http.Request{ + Method: http.MethodGet, + URL: u, + Host: "test.io", + Header: map[string][]string{ + "User-Agent": {"curl/7.79.1"}, + "Accept": {"*/*"}, + }, + } + }, + test: http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if method := r.Method; method != http.MethodGet { + body := fmt.Sprintf("Unexpected request method: %q", method) + httputils.RespondWithErrorAndMessage(w, http.StatusInternalServerError, body) + } + if path := r.URL.Path; path != "/v1.0/hello" { + body := fmt.Sprintf("Expected wasm to rewrite path: %s", path) + httputils.RespondWithErrorAndMessage(w, http.StatusInternalServerError, body) + } + if query := r.URL.RawQuery; query != "name=teddy" { + body := fmt.Sprintf("Expected wasm to retain query: %s", query) + httputils.RespondWithErrorAndMessage(w, http.StatusInternalServerError, body) + } + w.Header().Set("Content-Type", "text/plain") + if _, err := w.Write([]byte("Hello, world!")); err != nil { + panic(err) + } + }), + }, +} + +func benchmarkAll(b *testing.B, mw func(http.Handler) http.Handler) { + for n, s := range benches { + b.Run(n, func(b *testing.B) { + b.SetParallelism(parallel) + benchmark(b, mw, n, s.newRequest, s.test) + }) + } +} + +func benchmark( + b *testing.B, + mw func(http.Handler) http.Handler, + name string, + newRequest func() *http.Request, + test http.Handler, +) { + h := mw(test) + b.Run(name, func(b *testing.B) { + // We don't report allocations because memory allocations for TinyGo are + // in wasm which isn't visible to the Go benchmark. + for i := 0; i < b.N; i++ { + h.ServeHTTP(fakeResponseWriter{}, newRequest()) + } + }) +} + +var _ http.ResponseWriter = fakeResponseWriter{} + +type fakeResponseWriter struct{} + +func (rw fakeResponseWriter) Header() http.Header { + return http.Header{} +} + +func (rw fakeResponseWriter) Write(b []byte) (int, error) { + return len(b), nil +} + +func (rw fakeResponseWriter) WriteHeader(statusCode int) { + // None of our benchmark tests should send failure status. If there's a + // failure, it is likely there's a problem in the test data. + if statusCode != 200 { + panic(statusCode) + } +} diff --git a/middleware/http/wasm/example/Makefile b/middleware/http/wasm/example/Makefile new file mode 100644 index 000000000..9dc8900e7 --- /dev/null +++ b/middleware/http/wasm/example/Makefile @@ -0,0 +1,3 @@ +build: + @echo "Building Example Guest Wasm" + @tinygo build -o router.wasm -scheduler=none --no-debug -target=wasi router.go diff --git a/middleware/http/wasm/basic/example/go.mod b/middleware/http/wasm/example/go.mod similarity index 56% rename from middleware/http/wasm/basic/example/go.mod rename to middleware/http/wasm/example/go.mod index afd8d463c..6b117f794 100644 --- a/middleware/http/wasm/basic/example/go.mod +++ b/middleware/http/wasm/example/go.mod @@ -2,4 +2,4 @@ module github.com/dapr/components-contrib/middleware/wasm/example go 1.19 -require github.com/wapc/wapc-guest-tinygo v0.3.3 +require github.com/http-wasm/http-wasm-guest-tinygo v0.1.0 diff --git a/middleware/http/wasm/example/go.sum b/middleware/http/wasm/example/go.sum new file mode 100644 index 000000000..6a27987f7 --- /dev/null +++ b/middleware/http/wasm/example/go.sum @@ -0,0 +1,2 @@ +github.com/http-wasm/http-wasm-guest-tinygo v0.1.0 h1:vcYHJkbfQ2G0bD/zupIzHe/h1LZQJiVGdn5eZZTJM88= +github.com/http-wasm/http-wasm-guest-tinygo v0.1.0/go.mod h1:/3UO8OXP9nxe7d2qJ5ifTVkqM7KjaXxUZLoqBsDXpy0= diff --git a/middleware/http/wasm/example/router.go b/middleware/http/wasm/example/router.go new file mode 100644 index 000000000..a0d5c5ff8 --- /dev/null +++ b/middleware/http/wasm/example/router.go @@ -0,0 +1,27 @@ +package main + +import ( + "strings" + + "github.com/http-wasm/http-wasm-guest-tinygo/handler" + "github.com/http-wasm/http-wasm-guest-tinygo/handler/api" +) + +func main() { + handler.HandleRequestFn = handleRequest +} + +// handleRequest implements a simple HTTP router. +func handleRequest(req api.Request, resp api.Response) (next bool, reqCtx uint32) { + // If the URI starts with /host, trim it and dispatch to the next handler. + if uri := req.GetURI(); strings.HasPrefix(uri, "/host") { + req.SetURI(uri[5:]) + next = true // proceed to the next handler on the host. + return + } + + // Serve a static response + resp.Headers().Set("Content-Type", "text/plain") + resp.Body().WriteString("hello") + return // skip the next handler, as we wrote a response. +} diff --git a/middleware/http/wasm/example/router.wasm b/middleware/http/wasm/example/router.wasm new file mode 100755 index 0000000000000000000000000000000000000000..212b339da34012bd0a76b802b5e42e858c8fb316 GIT binary patch literal 9256 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 V9u_Wj2bAl>g?{65djWak{{dcN1H=FT literal 0 HcmV?d00001 diff --git a/middleware/http/wasm/httpwasm.go b/middleware/http/wasm/httpwasm.go new file mode 100644 index 000000000..8949bbe45 --- /dev/null +++ b/middleware/http/wasm/httpwasm.go @@ -0,0 +1,169 @@ +package wasm + +import ( + "bytes" + "context" + "crypto/rand" + "encoding/json" + "errors" + "fmt" + "net/http" + "os" + + "github.com/http-wasm/http-wasm-host-go/handler" + + wasmnethttp "github.com/http-wasm/http-wasm-host-go/handler/nethttp" + + "github.com/http-wasm/http-wasm-host-go/api" + "github.com/tetratelabs/wazero" + + dapr "github.com/dapr/components-contrib/middleware" + "github.com/dapr/kit/logger" +) + +// ctx substitutes for context propagation until middleware APIs support it. +var ctx = context.Background() + +// middlewareMetadata includes configuration used for the WebAssembly handler. +// Detailed notes are in README.md for visibility. +// +// Note: When changing this, you must update the docs with summary comments per +// field. +// https://github.com/dapr/docs/blob/v1.9/daprdocs/content/en/reference/components-reference/supported-middleware/middleware-wasm.md +type middlewareMetadata struct { + // Path is where to load a `%.wasm` file that implements the guest side of + // the handler protocol. No default. + Path string `json:"path"` + + // guest is WebAssembly binary implementing the waPC guest, loaded from Path. + guest []byte +} + +type middleware struct { + logger logger.Logger +} + +func NewMiddleware(logger logger.Logger) dapr.Middleware { + return &middleware{logger: logger} +} + +func (m *middleware) GetHandler(metadata dapr.Metadata) (func(next http.Handler) http.Handler, error) { + rh, err := m.getHandler(metadata) + if err != nil { + return nil, err + } + return rh.requestHandler, nil +} + +// getHandler is extracted for unit testing. +func (m *middleware) getHandler(metadata dapr.Metadata) (*requestHandler, error) { + meta, err := m.getMetadata(metadata) + if err != nil { + return nil, fmt.Errorf("wasm basic: failed to parse metadata: %w", err) + } + + var stdout, stderr bytes.Buffer + mw, err := wasmnethttp.NewMiddleware(ctx, meta.guest, + handler.Logger(m), + handler.ModuleConfig(wazero.NewModuleConfig(). + WithStdout(&stdout). // reset per request + WithStderr(&stderr). // reset per request + // The below violate sand-boxing, but allow code to behave as expected. + WithRandSource(rand.Reader). + WithSysNanosleep(). + WithSysWalltime(). + WithSysNanosleep())) + if err != nil { + return nil, err + } + + return &requestHandler{mw: mw, logger: m.logger, stdout: &stdout, stderr: &stderr}, nil +} + +// IsEnabled implements the same method as documented on api.Logger. +func (m *middleware) IsEnabled(level api.LogLevel) bool { + var l logger.LogLevel + switch level { + case api.LogLevelError: + l = logger.ErrorLevel + case api.LogLevelWarn: + l = logger.WarnLevel + case api.LogLevelInfo: + l = logger.InfoLevel + case api.LogLevelDebug: + l = logger.DebugLevel + default: // same as api.LogLevelNone + return false + } + return m.logger.IsOutputLevelEnabled(l) +} + +// Log implements the same method as documented on api.Logger. +func (m *middleware) Log(_ context.Context, level api.LogLevel, message string) { + switch level { + case api.LogLevelError: + m.logger.Error(message) + case api.LogLevelWarn: + m.logger.Warn(message) + case api.LogLevelInfo: + m.logger.Info(message) + case api.LogLevelDebug: + m.logger.Debug(message) + default: // same as api.LogLevelNone + return + } +} + +func (m *middleware) getMetadata(metadata dapr.Metadata) (*middlewareMetadata, error) { + b, err := json.Marshal(metadata.Properties) + if err != nil { + return nil, err + } + + var data middlewareMetadata + err = json.Unmarshal(b, &data) + if err != nil { + return nil, err + } + + if data.Path == "" { + return nil, errors.New("missing path") + } + + data.guest, err = os.ReadFile(data.Path) + if err != nil { + return nil, fmt.Errorf("error reading path: %w", err) + } + + return &data, nil +} + +type requestHandler struct { + mw wasmnethttp.Middleware + logger logger.Logger + stdout, stderr *bytes.Buffer +} + +func (rh *requestHandler) requestHandler(next http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + h := rh.mw.NewHandler(r.Context(), next) + defer func() { + rh.stdout.Reset() + rh.stderr.Reset() + }() + + h.ServeHTTP(w, r) + + if stdout := rh.stdout.String(); len(stdout) > 0 { + rh.logger.Debugf("wasm stdout: %s", stdout) + } + if stderr := rh.stderr.String(); len(stderr) > 0 { + rh.logger.Debugf("wasm stderr: %s", stderr) + } + }) +} + +// Close implements io.Closer +func (rh *requestHandler) Close() error { + return rh.mw.Close(ctx) +} diff --git a/middleware/http/wasm/httpwasm_test.go b/middleware/http/wasm/httpwasm_test.go new file mode 100644 index 000000000..d60e000a1 --- /dev/null +++ b/middleware/http/wasm/httpwasm_test.go @@ -0,0 +1,148 @@ +package wasm + +import ( + "bytes" + _ "embed" + "net/http" + "net/http/httptest" + "testing" + + "github.com/dapr/components-contrib/internal/httputils" + + "github.com/dapr/components-contrib/metadata" + + "github.com/http-wasm/http-wasm-host-go/api" + + "github.com/stretchr/testify/require" + + dapr "github.com/dapr/components-contrib/middleware" + "github.com/dapr/kit/logger" +) + +func Test_NewMiddleWare(t *testing.T) { + l := logger.NewLogger(t.Name()) + require.Equal(t, &middleware{logger: l}, NewMiddleware(l)) +} + +func Test_middleware_log(t *testing.T) { + l := logger.NewLogger(t.Name()) + var buf bytes.Buffer + l.SetOutput(&buf) + + m := &middleware{logger: l} + message := "alert" + m.Log(ctx, api.LogLevelInfo, message) + + require.Contains(t, buf.String(), `level=info msg=alert`) +} + +func Test_middleware_getMetadata(t *testing.T) { + m := &middleware{} + + type testCase struct { + name string + metadata metadata.Base + expected *middlewareMetadata + expectedErr string + } + + tests := []testCase{ + { + name: "empty path", + metadata: metadata.Base{Properties: map[string]string{}}, + expectedErr: "missing path", + }, + { + name: "path dir not file", + metadata: metadata.Base{Properties: map[string]string{ + "path": "./example", + }}, + // Below ends in "is a directory" in unix, and "The handle is invalid." in windows. + expectedErr: "error reading path: read ./example: ", + }, + } + + for _, tt := range tests { + tc := tt + t.Run(tc.name, func(t *testing.T) { + md, err := m.getMetadata(dapr.Metadata{Base: tc.metadata}) + if tc.expectedErr == "" { + require.NoError(t, err) + require.Equal(t, tc.expected, md) + } else { + // Use substring match as the error can be different in Windows. + require.Contains(t, err.Error(), tc.expectedErr) + } + }) + } +} + +func Test_middleware_getHandler(t *testing.T) { + m := &middleware{logger: logger.NewLogger(t.Name())} + + type testCase struct { + name string + metadata metadata.Base + expectedErr string + } + + tests := []testCase{ + // This just tests the error message prefixes properly. Otherwise, it is + // redundant to Test_middleware_getMetadata + { + name: "requires path metadata", + metadata: metadata.Base{Properties: map[string]string{}}, + expectedErr: "wasm basic: failed to parse metadata: missing path", + }, + // This is more than Test_middleware_getMetadata, as it ensures the + // contents are actually wasm. + { + name: "path not wasm", + metadata: metadata.Base{Properties: map[string]string{ + "path": "./example/router.go", + }}, + expectedErr: "wasm: error compiling guest: invalid binary", + }, + { + name: "ok", + metadata: metadata.Base{Properties: map[string]string{ + "path": "./example/router.wasm", + }}, + }, + } + + for _, tt := range tests { + tc := tt + t.Run(tc.name, func(t *testing.T) { + h, err := m.getHandler(dapr.Metadata{Base: tc.metadata}) + if tc.expectedErr == "" { + require.NoError(t, err) + require.NotNil(t, h.mw) + } else { + require.EqualError(t, err, tc.expectedErr) + } + }) + } +} + +func Test_Example(t *testing.T) { + l := logger.NewLogger(t.Name()) + var buf bytes.Buffer + l.SetOutput(&buf) + + meta := metadata.Base{Properties: map[string]string{ + // router.wasm was compiled via the following: + // tinygo build -o router.wasm -scheduler=none --no-debug -target=wasi router.go` + "path": "./example/router.wasm", + }} + handlerFn, err := NewMiddleware(l).GetHandler(dapr.Metadata{Base: meta}) + require.NoError(t, err) + + handler := handlerFn(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})) + + r := httptest.NewRequest(http.MethodGet, "/host/hi?name=panda", nil) + w := httptest.NewRecorder() + handler.ServeHTTP(w, r) + require.Equal(t, "/hi?name=panda", httputils.RequestURI(r)) + require.Empty(t, buf.String()) +} diff --git a/middleware/http/wasm/basic/internal/e2e-guests/Makefile b/middleware/http/wasm/internal/e2e-guests/Makefile similarity index 100% rename from middleware/http/wasm/basic/internal/e2e-guests/Makefile rename to middleware/http/wasm/internal/e2e-guests/Makefile diff --git a/middleware/http/wasm/basic/internal/e2e-guests/README.md b/middleware/http/wasm/internal/e2e-guests/README.md similarity index 100% rename from middleware/http/wasm/basic/internal/e2e-guests/README.md rename to middleware/http/wasm/internal/e2e-guests/README.md diff --git a/middleware/http/wasm/basic/internal/e2e-guests/go.mod b/middleware/http/wasm/internal/e2e-guests/go.mod similarity index 56% rename from middleware/http/wasm/basic/internal/e2e-guests/go.mod rename to middleware/http/wasm/internal/e2e-guests/go.mod index 30547a94d..9d8f47562 100644 --- a/middleware/http/wasm/basic/internal/e2e-guests/go.mod +++ b/middleware/http/wasm/internal/e2e-guests/go.mod @@ -2,4 +2,4 @@ module github.com/dapr/components-contrib/middleware/wasm/internal go 1.19 -require github.com/wapc/wapc-guest-tinygo v0.3.3 +require github.com/http-wasm/http-wasm-guest-tinygo v0.1.0 diff --git a/middleware/http/wasm/internal/e2e-guests/go.sum b/middleware/http/wasm/internal/e2e-guests/go.sum new file mode 100644 index 000000000..6a27987f7 --- /dev/null +++ b/middleware/http/wasm/internal/e2e-guests/go.sum @@ -0,0 +1,2 @@ +github.com/http-wasm/http-wasm-guest-tinygo v0.1.0 h1:vcYHJkbfQ2G0bD/zupIzHe/h1LZQJiVGdn5eZZTJM88= +github.com/http-wasm/http-wasm-guest-tinygo v0.1.0/go.mod h1:/3UO8OXP9nxe7d2qJ5ifTVkqM7KjaXxUZLoqBsDXpy0= diff --git a/middleware/http/wasm/basic/internal/e2e-guests/output/main.go b/middleware/http/wasm/internal/e2e-guests/output/main.go similarity index 53% rename from middleware/http/wasm/basic/internal/e2e-guests/output/main.go rename to middleware/http/wasm/internal/e2e-guests/output/main.go index f1ce44ad0..759dd10c1 100644 --- a/middleware/http/wasm/basic/internal/e2e-guests/output/main.go +++ b/middleware/http/wasm/internal/e2e-guests/output/main.go @@ -6,22 +6,24 @@ import ( "fmt" "os" - "github.com/wapc/wapc-guest-tinygo" + "github.com/http-wasm/http-wasm-guest-tinygo/handler" + "github.com/http-wasm/http-wasm-guest-tinygo/handler/api" ) func main() { fmt.Fprintln(os.Stdout, "main Stdout") fmt.Fprintln(os.Stderr, "main Stderr") - wapc.ConsoleLog("main ConsoleLog") - wapc.RegisterFunctions(wapc.Functions{"rewrite": rewrite}) + handler.Host.Log(api.LogLevelInfo, "main ConsoleLog") + handler.HandleRequestFn = log } var requestCount int -func rewrite(requestURI []byte) ([]byte, error) { +func log(api.Request, api.Response) (next bool, reqCtx uint32) { fmt.Fprintf(os.Stdout, "request[%d] Stdout\n", requestCount) fmt.Fprintf(os.Stderr, "request[%d] Stderr\n", requestCount) - wapc.ConsoleLog(fmt.Sprintf("request[%d] ConsoleLog", requestCount)) + handler.Host.Log(api.LogLevelInfo, fmt.Sprintf("request[%d] ConsoleLog", requestCount)) requestCount++ - return requestURI, nil + next = true + return } diff --git a/middleware/http/wasm/internal/e2e-guests/output/main.wasm b/middleware/http/wasm/internal/e2e-guests/output/main.wasm new file mode 100755 index 0000000000000000000000000000000000000000..28b3e3f0613d7b896f362218416b1ce7cd42358f GIT binary patch literal 124070 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 b?<3H)nQ$#j+q#p`2^>i}bcww*j8y**aiuL3 literal 0 HcmV?d00001 diff --git a/middleware/http/wasm/internal/e2e-guests/rewrite/main.go b/middleware/http/wasm/internal/e2e-guests/rewrite/main.go new file mode 100644 index 000000000..0709daf91 --- /dev/null +++ b/middleware/http/wasm/internal/e2e-guests/rewrite/main.go @@ -0,0 +1,21 @@ +package main + +import ( + "github.com/http-wasm/http-wasm-guest-tinygo/handler" + "github.com/http-wasm/http-wasm-guest-tinygo/handler/api" +) + +func main() { + handler.HandleRequestFn = handleRequest +} + +// handle rewrites the request URI before dispatching to the next handler. +// +// Note: This is not a redirect, rather in-process routing. +func handleRequest(req api.Request, resp api.Response) (next bool, reqCtx uint32) { + if req.GetURI() == "/v1.0/hi?name=panda" { + req.SetURI("/v1.0/hello?name=teddy") + } + next = true + return +} diff --git a/middleware/http/wasm/internal/e2e-guests/rewrite/main.wasm b/middleware/http/wasm/internal/e2e-guests/rewrite/main.wasm new file mode 100755 index 0000000000000000000000000000000000000000..f3bc7e41bf904df726a83392b4a373416ba98225 GIT binary patch literal 8528 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 Y;;*E=r}F>cq;WUVE4wSA)$w!w0i2M8v;Y7A literal 0 HcmV?d00001 diff --git a/middleware/http/wasm/internal/testdata/rewrite.wat b/middleware/http/wasm/internal/testdata/rewrite.wat new file mode 100644 index 000000000..90bd546e4 --- /dev/null +++ b/middleware/http/wasm/internal/testdata/rewrite.wat @@ -0,0 +1,92 @@ +;; This is the same logic as ../e2e-guests/rewrite/main.go, but written in +;; WebAssembly to establish baseline performance. For example, TinyGo should be +;; slower than this, but other languages are unlikley to be faster. +(module $rewrite + ;; get_uri writes the request URI value to memory, if it isn't larger than + ;; the buffer size limit. The result is the actual URI length in bytes. + (import "http_handler" "get_uri" (func $get_uri + (param $buf i32) (param $buf_limit i32) + (result (; uri_len ;) i32))) + + ;; set_uri overwrites the request URI with one read from memory. + (import "http_handler" "set_uri" (func $set_uri + (param $uri i32) (param $uri_len i32))) + + ;; http-wasm guests are required to export "memory", so that imported + ;; functions like "log" can read memory. + (memory (export "memory") 1 (; 1 page==64KB ;)) + + ;; define the URI we expect to rewrite + (global $match_uri i32 (i32.const 0)) + (data (i32.const 0) "/v1.0/hi?name=panda") + (global $match_uri_len i32 (i32.const 19)) + + ;; define the URI we expect to rewrite + (global $new_uri i32 (i32.const 32)) + (data (i32.const 32) "/v1.0/hello?name=teddy") + (global $new_uri_len i32 (i32.const 22)) + + ;; buf is an arbitrary area to write data. + (global $buf i32 (i32.const 1024)) + + ;; clear_buf clears any memory that may have been written. + (func $clear_buf + (memory.fill + (global.get $buf) + (global.get $match_uri_len) + (i32.const 0))) + + ;; handle rewrites the HTTP request URI + (func (export "handle_request") (result (; ctx_next ;) i64) + + (local $uri_len i32) + + ;; First, read the uri into memory if not larger than our limit. + + ;; uri_len = get_uri(uri, match_uri_len) + (local.set $uri_len + (call $get_uri (global.get $buf) (global.get $match_uri_len))) + + ;; Next, if the length read is the same as our match uri, check to see if + ;; the characters are the same. + + ;; if uri_len != match_uri_len { next() } + (if (i32.eq (local.get $uri_len) (global.get $match_uri_len)) + (then (if (call $memeq ;; uri == match_uri + (global.get $buf) + (global.get $match_uri) + (global.get $match_uri_len)) (then + + ;; Call the imported function that sets the HTTP uri. + (call $set_uri ;; uri = new_uri + (global.get $new_uri) + (global.get $new_uri_len)))))) + + ;; dispatch with the possibly rewritten uri. + (call $clear_buf) + (return (i64.const 1))) + + ;; handle_response is no-op as this is a request-only handler. + (func (export "handle_response") (param $reqCtx i32) (param $is_error i32)) + + ;; memeq is like memcmp except it returns 0 (ne) or 1 (eq) + (func $memeq (param $ptr1 i32) (param $ptr2 i32) (param $len i32) (result i32) + (local $i1 i32) + (local $i2 i32) + (local.set $i1 (local.get $ptr1)) ;; i1 := ptr1 + (local.set $i2 (local.get $ptr2)) ;; i2 := ptr1 + + (loop $len_gt_zero + ;; if mem[i1] != mem[i2] + (if (i32.ne (i32.load8_u (local.get $i1)) (i32.load8_u (local.get $i2))) + (then (return (i32.const 0)))) ;; return 0 + + (local.set $i1 (i32.add (local.get $i1) (i32.const 1))) ;; i1++ + (local.set $i2 (i32.add (local.get $i2) (i32.const 1))) ;; i2++ + (local.set $len (i32.sub (local.get $len) (i32.const 1))) ;; $len-- + + ;; if $len > 0 { continue } else { break } + (br_if $len_gt_zero (i32.gt_s (local.get $len) (i32.const 0)))) + + (i32.const 1)) ;; return 1 +) diff --git a/tests/certification/bindings/alicloud/dubbo/go.mod b/tests/certification/bindings/alicloud/dubbo/go.mod index 132c36e9e..005dfa299 100644 --- a/tests/certification/bindings/alicloud/dubbo/go.mod +++ b/tests/certification/bindings/alicloud/dubbo/go.mod @@ -9,7 +9,7 @@ require ( github.com/dapr/components-contrib/tests/certification v0.0.0-20211026011813-36b75e9ae272 github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 - github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5 + github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f github.com/stretchr/testify v1.8.1 ) @@ -138,8 +138,8 @@ require ( go.uber.org/multierr v1.8.0 // indirect go.uber.org/zap v1.21.0 // indirect golang.org/x/crypto v0.1.0 // indirect - golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9 // indirect - golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect + golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f // indirect + golang.org/x/mod v0.6.0 // indirect golang.org/x/net v0.1.0 // indirect golang.org/x/oauth2 v0.1.0 // indirect golang.org/x/sync v0.1.0 // indirect @@ -147,7 +147,7 @@ require ( golang.org/x/term v0.1.0 // indirect golang.org/x/text v0.4.0 // indirect golang.org/x/time v0.0.0-20220922220347-f3bd1da661af // indirect - golang.org/x/tools v0.1.12 // indirect + golang.org/x/tools v0.2.0 // indirect gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c // indirect diff --git a/tests/certification/bindings/alicloud/dubbo/go.sum b/tests/certification/bindings/alicloud/dubbo/go.sum index 99e972e3c..d4a0db797 100644 --- a/tests/certification/bindings/alicloud/dubbo/go.sum +++ b/tests/certification/bindings/alicloud/dubbo/go.sum @@ -174,8 +174,8 @@ github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e h1:Ieid1nWDFssDXrXIdRa github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e/go.mod h1:mGNQLZnlzH8HX7GcQv3u4YNE432gs1CYC8NLbOf65SE= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= -github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5 h1:Jx8u3y/BMjUar0Gp+dzZybBo1Kvbj+18XPbiJ28Xa7A= -github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5/go.mod h1:FR+yc0R0szlKnJooVqJvl7FhWf21wzY4/EzmyFQrESw= +github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= +github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f/go.mod h1:i9t09QZw346M2RbuK7oJhssOP0HCAQObz61U4SBNJSU= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -981,8 +981,8 @@ golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= golang.org/x/exp v0.0.0-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= -golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9 h1:lNtcVz/3bOstm7Vebox+5m3nLh/BYWnhmc3AhXOW6oI= -golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE= +golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f h1:Al51T6tzvuh3oiwX11vex3QgJ2XTedFPGmbEVh8cdoc= +golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= @@ -1006,8 +1006,8 @@ golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/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 h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s= -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-20180530234432-1e491301e022/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= 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= @@ -1254,8 +1254,8 @@ golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.12 h1:VveCTK38A2rkS8ZqFY25HIDFscX5X9OoEhJd3quQmXU= -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= diff --git a/tests/certification/bindings/alicloud/nacos/go.mod b/tests/certification/bindings/alicloud/nacos/go.mod index 817e39556..fd8498119 100644 --- a/tests/certification/bindings/alicloud/nacos/go.mod +++ b/tests/certification/bindings/alicloud/nacos/go.mod @@ -7,7 +7,7 @@ require ( github.com/dapr/components-contrib/tests/certification v0.0.0-20211026011813-36b75e9ae272 github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 - github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5 + github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f github.com/nacos-group/nacos-sdk-go/v2 v2.1.2 github.com/stretchr/testify v1.8.1 ) @@ -107,8 +107,8 @@ require ( go.uber.org/atomic v1.10.0 // indirect go.uber.org/multierr v1.8.0 // indirect go.uber.org/zap v1.21.0 // indirect - golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9 // indirect - golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect + golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f // indirect + golang.org/x/mod v0.6.0 // indirect golang.org/x/net v0.1.0 // indirect golang.org/x/oauth2 v0.1.0 // indirect golang.org/x/sync v0.1.0 // indirect @@ -116,7 +116,7 @@ require ( golang.org/x/term v0.1.0 // indirect golang.org/x/text v0.4.0 // indirect golang.org/x/time v0.0.0-20220922220347-f3bd1da661af // indirect - golang.org/x/tools v0.1.12 // indirect + golang.org/x/tools v0.2.0 // indirect gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c // indirect diff --git a/tests/certification/bindings/alicloud/nacos/go.sum b/tests/certification/bindings/alicloud/nacos/go.sum index cc2da2590..572232ac8 100644 --- a/tests/certification/bindings/alicloud/nacos/go.sum +++ b/tests/certification/bindings/alicloud/nacos/go.sum @@ -101,8 +101,8 @@ github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e h1:Ieid1nWDFssDXrXIdRa github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e/go.mod h1:mGNQLZnlzH8HX7GcQv3u4YNE432gs1CYC8NLbOf65SE= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= -github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5 h1:Jx8u3y/BMjUar0Gp+dzZybBo1Kvbj+18XPbiJ28Xa7A= -github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5/go.mod h1:FR+yc0R0szlKnJooVqJvl7FhWf21wzY4/EzmyFQrESw= +github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= +github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f/go.mod h1:i9t09QZw346M2RbuK7oJhssOP0HCAQObz61U4SBNJSU= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -546,8 +546,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9 h1:lNtcVz/3bOstm7Vebox+5m3nLh/BYWnhmc3AhXOW6oI= -golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE= +golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f h1:Al51T6tzvuh3oiwX11vex3QgJ2XTedFPGmbEVh8cdoc= +golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -569,8 +569,8 @@ golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/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 h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s= -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-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -769,8 +769,8 @@ golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4f golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.12 h1:VveCTK38A2rkS8ZqFY25HIDFscX5X9OoEhJd3quQmXU= -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= diff --git a/tests/certification/bindings/azure/blobstorage/go.mod b/tests/certification/bindings/azure/blobstorage/go.mod index 8a19f4334..0fa980566 100644 --- a/tests/certification/bindings/azure/blobstorage/go.mod +++ b/tests/certification/bindings/azure/blobstorage/go.mod @@ -8,7 +8,7 @@ require ( github.com/dapr/components-contrib/tests/certification v0.0.0-20211130185200-4918900c09e1 github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 - github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5 + github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f github.com/stretchr/testify v1.8.1 ) @@ -125,8 +125,8 @@ require ( go.opentelemetry.io/proto/otlp v0.19.0 // indirect go.uber.org/atomic v1.10.0 // indirect golang.org/x/crypto v0.1.0 // indirect - golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9 // indirect - golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect + golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f // indirect + golang.org/x/mod v0.6.0 // indirect golang.org/x/net v0.1.0 // indirect golang.org/x/oauth2 v0.1.0 // indirect golang.org/x/sync v0.1.0 // indirect @@ -134,7 +134,7 @@ require ( golang.org/x/term v0.1.0 // indirect golang.org/x/text v0.4.0 // indirect golang.org/x/time v0.0.0-20220922220347-f3bd1da661af // indirect - golang.org/x/tools v0.1.12 // indirect + golang.org/x/tools v0.2.0 // indirect gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c // indirect diff --git a/tests/certification/bindings/azure/blobstorage/go.sum b/tests/certification/bindings/azure/blobstorage/go.sum index 2e6393685..5635e0fb2 100644 --- a/tests/certification/bindings/azure/blobstorage/go.sum +++ b/tests/certification/bindings/azure/blobstorage/go.sum @@ -147,8 +147,8 @@ github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e h1:Ieid1nWDFssDXrXIdRa github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e/go.mod h1:mGNQLZnlzH8HX7GcQv3u4YNE432gs1CYC8NLbOf65SE= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= -github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5 h1:Jx8u3y/BMjUar0Gp+dzZybBo1Kvbj+18XPbiJ28Xa7A= -github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5/go.mod h1:FR+yc0R0szlKnJooVqJvl7FhWf21wzY4/EzmyFQrESw= +github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= +github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f/go.mod h1:i9t09QZw346M2RbuK7oJhssOP0HCAQObz61U4SBNJSU= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -607,8 +607,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9 h1:lNtcVz/3bOstm7Vebox+5m3nLh/BYWnhmc3AhXOW6oI= -golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE= +golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f h1:Al51T6tzvuh3oiwX11vex3QgJ2XTedFPGmbEVh8cdoc= +golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -630,8 +630,8 @@ golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/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 h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s= -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-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -828,8 +828,8 @@ golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.12 h1:VveCTK38A2rkS8ZqFY25HIDFscX5X9OoEhJd3quQmXU= -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= diff --git a/tests/certification/bindings/azure/cosmosdb/go.mod b/tests/certification/bindings/azure/cosmosdb/go.mod index 2e433c4d5..649ebcf10 100644 --- a/tests/certification/bindings/azure/cosmosdb/go.mod +++ b/tests/certification/bindings/azure/cosmosdb/go.mod @@ -8,7 +8,7 @@ require ( github.com/dapr/components-contrib/tests/certification v0.0.0-20211130185200-4918900c09e1 github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 - github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5 + github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f github.com/google/uuid v1.3.0 github.com/stretchr/testify v1.8.1 ) @@ -127,8 +127,8 @@ require ( go.opentelemetry.io/proto/otlp v0.19.0 // indirect go.uber.org/atomic v1.10.0 // indirect golang.org/x/crypto v0.1.0 // indirect - golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9 // indirect - golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect + golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f // indirect + golang.org/x/mod v0.6.0 // indirect golang.org/x/net v0.1.0 // indirect golang.org/x/oauth2 v0.1.0 // indirect golang.org/x/sync v0.1.0 // indirect @@ -136,7 +136,7 @@ require ( golang.org/x/term v0.1.0 // indirect golang.org/x/text v0.4.0 // indirect golang.org/x/time v0.0.0-20220922220347-f3bd1da661af // indirect - golang.org/x/tools v0.1.12 // indirect + golang.org/x/tools v0.2.0 // indirect gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c // indirect diff --git a/tests/certification/bindings/azure/cosmosdb/go.sum b/tests/certification/bindings/azure/cosmosdb/go.sum index 29348a96f..76b91daf1 100644 --- a/tests/certification/bindings/azure/cosmosdb/go.sum +++ b/tests/certification/bindings/azure/cosmosdb/go.sum @@ -151,8 +151,8 @@ github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e h1:Ieid1nWDFssDXrXIdRa github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e/go.mod h1:mGNQLZnlzH8HX7GcQv3u4YNE432gs1CYC8NLbOf65SE= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= -github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5 h1:Jx8u3y/BMjUar0Gp+dzZybBo1Kvbj+18XPbiJ28Xa7A= -github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5/go.mod h1:FR+yc0R0szlKnJooVqJvl7FhWf21wzY4/EzmyFQrESw= +github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= +github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f/go.mod h1:i9t09QZw346M2RbuK7oJhssOP0HCAQObz61U4SBNJSU= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -612,8 +612,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9 h1:lNtcVz/3bOstm7Vebox+5m3nLh/BYWnhmc3AhXOW6oI= -golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE= +golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f h1:Al51T6tzvuh3oiwX11vex3QgJ2XTedFPGmbEVh8cdoc= +golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -635,8 +635,8 @@ golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/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 h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s= -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-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -833,8 +833,8 @@ golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.12 h1:VveCTK38A2rkS8ZqFY25HIDFscX5X9OoEhJd3quQmXU= -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= diff --git a/tests/certification/bindings/azure/eventhubs/go.mod b/tests/certification/bindings/azure/eventhubs/go.mod index e67033a12..c0dbc5193 100644 --- a/tests/certification/bindings/azure/eventhubs/go.mod +++ b/tests/certification/bindings/azure/eventhubs/go.mod @@ -7,7 +7,7 @@ require ( github.com/dapr/components-contrib/tests/certification v0.0.0-20211026011813-36b75e9ae272 github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 - github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5 + github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f github.com/google/uuid v1.3.0 github.com/stretchr/testify v1.8.1 go.uber.org/multierr v1.8.0 @@ -134,8 +134,8 @@ require ( go.opentelemetry.io/proto/otlp v0.19.0 // indirect go.uber.org/atomic v1.10.0 // indirect golang.org/x/crypto v0.1.0 // indirect - golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9 // indirect - golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect + golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f // indirect + golang.org/x/mod v0.6.0 // indirect golang.org/x/net v0.1.0 // indirect golang.org/x/oauth2 v0.1.0 // indirect golang.org/x/sync v0.1.0 // indirect @@ -143,7 +143,7 @@ require ( golang.org/x/term v0.1.0 // indirect golang.org/x/text v0.4.0 // indirect golang.org/x/time v0.0.0-20220922220347-f3bd1da661af // indirect - golang.org/x/tools v0.1.12 // indirect + golang.org/x/tools v0.2.0 // indirect gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c // indirect diff --git a/tests/certification/bindings/azure/eventhubs/go.sum b/tests/certification/bindings/azure/eventhubs/go.sum index b7cbfbff3..c9d2c4215 100644 --- a/tests/certification/bindings/azure/eventhubs/go.sum +++ b/tests/certification/bindings/azure/eventhubs/go.sum @@ -163,8 +163,8 @@ github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e h1:Ieid1nWDFssDXrXIdRa github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e/go.mod h1:mGNQLZnlzH8HX7GcQv3u4YNE432gs1CYC8NLbOf65SE= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= -github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5 h1:Jx8u3y/BMjUar0Gp+dzZybBo1Kvbj+18XPbiJ28Xa7A= -github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5/go.mod h1:FR+yc0R0szlKnJooVqJvl7FhWf21wzY4/EzmyFQrESw= +github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= +github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f/go.mod h1:i9t09QZw346M2RbuK7oJhssOP0HCAQObz61U4SBNJSU= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -636,8 +636,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9 h1:lNtcVz/3bOstm7Vebox+5m3nLh/BYWnhmc3AhXOW6oI= -golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE= +golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f h1:Al51T6tzvuh3oiwX11vex3QgJ2XTedFPGmbEVh8cdoc= +golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -659,8 +659,8 @@ golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/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 h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s= -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-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -857,8 +857,8 @@ golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.12 h1:VveCTK38A2rkS8ZqFY25HIDFscX5X9OoEhJd3quQmXU= -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= diff --git a/tests/certification/bindings/azure/servicebusqueues/go.mod b/tests/certification/bindings/azure/servicebusqueues/go.mod index 33432821c..78eaa13e4 100644 --- a/tests/certification/bindings/azure/servicebusqueues/go.mod +++ b/tests/certification/bindings/azure/servicebusqueues/go.mod @@ -7,7 +7,7 @@ require ( github.com/dapr/components-contrib/tests/certification v0.0.0-20211026011813-36b75e9ae272 github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 - github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5 + github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f github.com/stretchr/testify v1.8.1 go.uber.org/multierr v1.8.0 ) @@ -131,8 +131,8 @@ require ( go.uber.org/atomic v1.10.0 // indirect go.uber.org/ratelimit v0.2.0 // indirect golang.org/x/crypto v0.1.0 // indirect - golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9 // indirect - golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect + golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f // indirect + golang.org/x/mod v0.6.0 // indirect golang.org/x/net v0.1.0 // indirect golang.org/x/oauth2 v0.1.0 // indirect golang.org/x/sync v0.1.0 // indirect @@ -140,7 +140,7 @@ require ( golang.org/x/term v0.1.0 // indirect golang.org/x/text v0.4.0 // indirect golang.org/x/time v0.0.0-20220922220347-f3bd1da661af // indirect - golang.org/x/tools v0.1.12 // indirect + golang.org/x/tools v0.2.0 // indirect gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c // indirect diff --git a/tests/certification/bindings/azure/servicebusqueues/go.sum b/tests/certification/bindings/azure/servicebusqueues/go.sum index 4148951ef..cc085fae8 100644 --- a/tests/certification/bindings/azure/servicebusqueues/go.sum +++ b/tests/certification/bindings/azure/servicebusqueues/go.sum @@ -151,8 +151,8 @@ github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e h1:Ieid1nWDFssDXrXIdRa github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e/go.mod h1:mGNQLZnlzH8HX7GcQv3u4YNE432gs1CYC8NLbOf65SE= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= -github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5 h1:Jx8u3y/BMjUar0Gp+dzZybBo1Kvbj+18XPbiJ28Xa7A= -github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5/go.mod h1:FR+yc0R0szlKnJooVqJvl7FhWf21wzY4/EzmyFQrESw= +github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= +github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f/go.mod h1:i9t09QZw346M2RbuK7oJhssOP0HCAQObz61U4SBNJSU= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -621,8 +621,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9 h1:lNtcVz/3bOstm7Vebox+5m3nLh/BYWnhmc3AhXOW6oI= -golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE= +golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f h1:Al51T6tzvuh3oiwX11vex3QgJ2XTedFPGmbEVh8cdoc= +golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -644,8 +644,8 @@ golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/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 h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s= -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-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -842,8 +842,8 @@ golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.12 h1:VveCTK38A2rkS8ZqFY25HIDFscX5X9OoEhJd3quQmXU= -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= diff --git a/tests/certification/bindings/azure/storagequeues/go.mod b/tests/certification/bindings/azure/storagequeues/go.mod index a3031f589..ce96b0fb2 100644 --- a/tests/certification/bindings/azure/storagequeues/go.mod +++ b/tests/certification/bindings/azure/storagequeues/go.mod @@ -7,7 +7,7 @@ require ( github.com/dapr/components-contrib/tests/certification v0.0.0-20211026011813-36b75e9ae272 github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 - github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5 + github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f github.com/stretchr/testify v1.8.1 go.uber.org/multierr v1.8.0 ) @@ -127,8 +127,8 @@ require ( go.opentelemetry.io/proto/otlp v0.19.0 // indirect go.uber.org/atomic v1.10.0 // indirect golang.org/x/crypto v0.1.0 // indirect - golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9 // indirect - golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect + golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f // indirect + golang.org/x/mod v0.6.0 // indirect golang.org/x/net v0.1.0 // indirect golang.org/x/oauth2 v0.1.0 // indirect golang.org/x/sync v0.1.0 // indirect @@ -136,7 +136,7 @@ require ( golang.org/x/term v0.1.0 // indirect golang.org/x/text v0.4.0 // indirect golang.org/x/time v0.0.0-20220922220347-f3bd1da661af // indirect - golang.org/x/tools v0.1.12 // indirect + golang.org/x/tools v0.2.0 // indirect gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c // indirect diff --git a/tests/certification/bindings/azure/storagequeues/go.sum b/tests/certification/bindings/azure/storagequeues/go.sum index a7d45a31d..656b80388 100644 --- a/tests/certification/bindings/azure/storagequeues/go.sum +++ b/tests/certification/bindings/azure/storagequeues/go.sum @@ -145,8 +145,8 @@ github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e h1:Ieid1nWDFssDXrXIdRa github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e/go.mod h1:mGNQLZnlzH8HX7GcQv3u4YNE432gs1CYC8NLbOf65SE= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= -github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5 h1:Jx8u3y/BMjUar0Gp+dzZybBo1Kvbj+18XPbiJ28Xa7A= -github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5/go.mod h1:FR+yc0R0szlKnJooVqJvl7FhWf21wzY4/EzmyFQrESw= +github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= +github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f/go.mod h1:i9t09QZw346M2RbuK7oJhssOP0HCAQObz61U4SBNJSU= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -611,8 +611,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9 h1:lNtcVz/3bOstm7Vebox+5m3nLh/BYWnhmc3AhXOW6oI= -golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE= +golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f h1:Al51T6tzvuh3oiwX11vex3QgJ2XTedFPGmbEVh8cdoc= +golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -634,8 +634,8 @@ golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/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 h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s= -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-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -832,8 +832,8 @@ golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.12 h1:VveCTK38A2rkS8ZqFY25HIDFscX5X9OoEhJd3quQmXU= -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= diff --git a/tests/certification/bindings/kafka/go.mod b/tests/certification/bindings/kafka/go.mod index 8eb214bc8..c596e42cf 100644 --- a/tests/certification/bindings/kafka/go.mod +++ b/tests/certification/bindings/kafka/go.mod @@ -9,7 +9,7 @@ require ( github.com/dapr/components-contrib/tests/certification v0.0.0-20220519061249-c2cb1dad5bb0 github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 - github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5 + github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f github.com/google/uuid v1.3.0 github.com/stretchr/testify v1.8.1 go.uber.org/multierr v1.8.0 @@ -121,8 +121,8 @@ require ( go.opentelemetry.io/proto/otlp v0.19.0 // indirect go.uber.org/atomic v1.10.0 // indirect golang.org/x/crypto v0.1.0 // indirect - golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9 // indirect - golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect + golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f // indirect + golang.org/x/mod v0.6.0 // indirect golang.org/x/net v0.1.0 // indirect golang.org/x/oauth2 v0.1.0 // indirect golang.org/x/sync v0.1.0 // indirect @@ -130,7 +130,7 @@ require ( golang.org/x/term v0.1.0 // indirect golang.org/x/text v0.4.0 // indirect golang.org/x/time v0.0.0-20220922220347-f3bd1da661af // indirect - golang.org/x/tools v0.1.12 // indirect + golang.org/x/tools v0.2.0 // indirect gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c // indirect diff --git a/tests/certification/bindings/kafka/go.sum b/tests/certification/bindings/kafka/go.sum index 32d26119b..77b7fa071 100644 --- a/tests/certification/bindings/kafka/go.sum +++ b/tests/certification/bindings/kafka/go.sum @@ -96,8 +96,8 @@ github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e h1:Ieid1nWDFssDXrXIdRa github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e/go.mod h1:mGNQLZnlzH8HX7GcQv3u4YNE432gs1CYC8NLbOf65SE= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= -github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5 h1:Jx8u3y/BMjUar0Gp+dzZybBo1Kvbj+18XPbiJ28Xa7A= -github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5/go.mod h1:FR+yc0R0szlKnJooVqJvl7FhWf21wzY4/EzmyFQrESw= +github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= +github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f/go.mod h1:i9t09QZw346M2RbuK7oJhssOP0HCAQObz61U4SBNJSU= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -571,8 +571,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9 h1:lNtcVz/3bOstm7Vebox+5m3nLh/BYWnhmc3AhXOW6oI= -golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE= +golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f h1:Al51T6tzvuh3oiwX11vex3QgJ2XTedFPGmbEVh8cdoc= +golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -594,8 +594,8 @@ golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/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 h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s= -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-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -792,8 +792,8 @@ golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.12 h1:VveCTK38A2rkS8ZqFY25HIDFscX5X9OoEhJd3quQmXU= -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= diff --git a/tests/certification/bindings/localstorage/go.mod b/tests/certification/bindings/localstorage/go.mod index e8fb49278..5c34cca99 100644 --- a/tests/certification/bindings/localstorage/go.mod +++ b/tests/certification/bindings/localstorage/go.mod @@ -7,7 +7,7 @@ require ( github.com/dapr/components-contrib/tests/certification v0.0.0-00010101000000-000000000000 github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 - github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5 + github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f github.com/stretchr/testify v1.8.1 ) @@ -102,8 +102,8 @@ require ( go.opentelemetry.io/otel/trace v1.11.1 // indirect go.opentelemetry.io/proto/otlp v0.19.0 // indirect go.uber.org/atomic v1.10.0 // indirect - golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9 // indirect - golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect + golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f // indirect + golang.org/x/mod v0.6.0 // indirect golang.org/x/net v0.1.0 // indirect golang.org/x/oauth2 v0.1.0 // indirect golang.org/x/sync v0.1.0 // indirect @@ -111,7 +111,7 @@ require ( golang.org/x/term v0.1.0 // indirect golang.org/x/text v0.4.0 // indirect golang.org/x/time v0.0.0-20220922220347-f3bd1da661af // indirect - golang.org/x/tools v0.1.12 // indirect + golang.org/x/tools v0.2.0 // indirect gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c // indirect diff --git a/tests/certification/bindings/localstorage/go.sum b/tests/certification/bindings/localstorage/go.sum index d9ffab8ca..0c051efe4 100644 --- a/tests/certification/bindings/localstorage/go.sum +++ b/tests/certification/bindings/localstorage/go.sum @@ -95,8 +95,8 @@ github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e h1:Ieid1nWDFssDXrXIdRa github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e/go.mod h1:mGNQLZnlzH8HX7GcQv3u4YNE432gs1CYC8NLbOf65SE= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= -github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5 h1:Jx8u3y/BMjUar0Gp+dzZybBo1Kvbj+18XPbiJ28Xa7A= -github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5/go.mod h1:FR+yc0R0szlKnJooVqJvl7FhWf21wzY4/EzmyFQrESw= +github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= +github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f/go.mod h1:i9t09QZw346M2RbuK7oJhssOP0HCAQObz61U4SBNJSU= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -525,8 +525,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9 h1:lNtcVz/3bOstm7Vebox+5m3nLh/BYWnhmc3AhXOW6oI= -golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE= +golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f h1:Al51T6tzvuh3oiwX11vex3QgJ2XTedFPGmbEVh8cdoc= +golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -548,8 +548,8 @@ golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/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 h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s= -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-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -744,8 +744,8 @@ golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.12 h1:VveCTK38A2rkS8ZqFY25HIDFscX5X9OoEhJd3quQmXU= -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= diff --git a/tests/certification/bindings/postgres/go.mod b/tests/certification/bindings/postgres/go.mod index e4fa8e71d..a054960ef 100644 --- a/tests/certification/bindings/postgres/go.mod +++ b/tests/certification/bindings/postgres/go.mod @@ -7,7 +7,7 @@ require ( github.com/dapr/components-contrib/tests/certification v0.0.0-20220526162429-d03aeba3e0d6 github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 - github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5 + github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f github.com/lib/pq v1.10.7 github.com/stretchr/testify v1.8.1 ) @@ -108,8 +108,8 @@ require ( go.opentelemetry.io/proto/otlp v0.19.0 // indirect go.uber.org/atomic v1.10.0 // indirect golang.org/x/crypto v0.1.0 // indirect - golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9 // indirect - golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect + golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f // indirect + golang.org/x/mod v0.6.0 // indirect golang.org/x/net v0.1.0 // indirect golang.org/x/oauth2 v0.1.0 // indirect golang.org/x/sync v0.1.0 // indirect @@ -117,7 +117,7 @@ require ( golang.org/x/term v0.1.0 // indirect golang.org/x/text v0.4.0 // indirect golang.org/x/time v0.0.0-20220922220347-f3bd1da661af // indirect - golang.org/x/tools v0.1.12 // indirect + golang.org/x/tools v0.2.0 // indirect gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c // indirect diff --git a/tests/certification/bindings/postgres/go.sum b/tests/certification/bindings/postgres/go.sum index b10512e45..44d5bf22f 100644 --- a/tests/certification/bindings/postgres/go.sum +++ b/tests/certification/bindings/postgres/go.sum @@ -93,8 +93,8 @@ github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e h1:Ieid1nWDFssDXrXIdRa github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e/go.mod h1:mGNQLZnlzH8HX7GcQv3u4YNE432gs1CYC8NLbOf65SE= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= -github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5 h1:Jx8u3y/BMjUar0Gp+dzZybBo1Kvbj+18XPbiJ28Xa7A= -github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5/go.mod h1:FR+yc0R0szlKnJooVqJvl7FhWf21wzY4/EzmyFQrESw= +github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= +github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f/go.mod h1:i9t09QZw346M2RbuK7oJhssOP0HCAQObz61U4SBNJSU= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -538,8 +538,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9 h1:lNtcVz/3bOstm7Vebox+5m3nLh/BYWnhmc3AhXOW6oI= -golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE= +golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f h1:Al51T6tzvuh3oiwX11vex3QgJ2XTedFPGmbEVh8cdoc= +golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -561,8 +561,8 @@ golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/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 h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s= -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-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -757,8 +757,8 @@ golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.12 h1:VveCTK38A2rkS8ZqFY25HIDFscX5X9OoEhJd3quQmXU= -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= diff --git a/tests/certification/bindings/rabbitmq/go.mod b/tests/certification/bindings/rabbitmq/go.mod index 11d87be8d..b1d77eb71 100644 --- a/tests/certification/bindings/rabbitmq/go.mod +++ b/tests/certification/bindings/rabbitmq/go.mod @@ -7,7 +7,7 @@ require ( github.com/dapr/components-contrib/tests/certification v0.0.0-20211130185200-4918900c09e1 github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 - github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5 + github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f github.com/rabbitmq/amqp091-go v1.5.0 github.com/stretchr/testify v1.8.1 go.uber.org/multierr v1.8.0 @@ -105,8 +105,8 @@ require ( go.opentelemetry.io/otel/trace v1.11.1 // indirect go.opentelemetry.io/proto/otlp v0.19.0 // indirect go.uber.org/atomic v1.10.0 // indirect - golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9 // indirect - golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect + golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f // indirect + golang.org/x/mod v0.6.0 // indirect golang.org/x/net v0.1.0 // indirect golang.org/x/oauth2 v0.1.0 // indirect golang.org/x/sync v0.1.0 // indirect @@ -114,7 +114,7 @@ require ( golang.org/x/term v0.1.0 // indirect golang.org/x/text v0.4.0 // indirect golang.org/x/time v0.0.0-20220922220347-f3bd1da661af // indirect - golang.org/x/tools v0.1.12 // indirect + golang.org/x/tools v0.2.0 // indirect gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c // indirect diff --git a/tests/certification/bindings/rabbitmq/go.sum b/tests/certification/bindings/rabbitmq/go.sum index 85707ff1c..1e990bab6 100644 --- a/tests/certification/bindings/rabbitmq/go.sum +++ b/tests/certification/bindings/rabbitmq/go.sum @@ -93,8 +93,8 @@ github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e h1:Ieid1nWDFssDXrXIdRa github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e/go.mod h1:mGNQLZnlzH8HX7GcQv3u4YNE432gs1CYC8NLbOf65SE= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= -github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5 h1:Jx8u3y/BMjUar0Gp+dzZybBo1Kvbj+18XPbiJ28Xa7A= -github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5/go.mod h1:FR+yc0R0szlKnJooVqJvl7FhWf21wzY4/EzmyFQrESw= +github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= +github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f/go.mod h1:i9t09QZw346M2RbuK7oJhssOP0HCAQObz61U4SBNJSU= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -532,8 +532,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9 h1:lNtcVz/3bOstm7Vebox+5m3nLh/BYWnhmc3AhXOW6oI= -golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE= +golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f h1:Al51T6tzvuh3oiwX11vex3QgJ2XTedFPGmbEVh8cdoc= +golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -555,8 +555,8 @@ golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/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 h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s= -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-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -752,8 +752,8 @@ golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4f golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.12 h1:VveCTK38A2rkS8ZqFY25HIDFscX5X9OoEhJd3quQmXU= -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= diff --git a/tests/certification/bindings/redis/go.mod b/tests/certification/bindings/redis/go.mod index b973134df..6d43bfcf5 100644 --- a/tests/certification/bindings/redis/go.mod +++ b/tests/certification/bindings/redis/go.mod @@ -7,7 +7,7 @@ require ( github.com/dapr/components-contrib/tests/certification v0.0.0-20220908221803-2b5650c2faa4 github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 - github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5 + github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f github.com/go-redis/redis/v8 v8.11.5 github.com/stretchr/testify v1.8.1 ) @@ -104,8 +104,8 @@ require ( go.opentelemetry.io/otel/trace v1.11.1 // indirect go.opentelemetry.io/proto/otlp v0.19.0 // indirect go.uber.org/atomic v1.10.0 // indirect - golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9 // indirect - golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect + golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f // indirect + golang.org/x/mod v0.6.0 // indirect golang.org/x/net v0.1.0 // indirect golang.org/x/oauth2 v0.1.0 // indirect golang.org/x/sync v0.1.0 // indirect @@ -113,7 +113,7 @@ require ( golang.org/x/term v0.1.0 // indirect golang.org/x/text v0.4.0 // indirect golang.org/x/time v0.0.0-20220922220347-f3bd1da661af // indirect - golang.org/x/tools v0.1.12 // indirect + golang.org/x/tools v0.2.0 // indirect gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c // indirect diff --git a/tests/certification/bindings/redis/go.sum b/tests/certification/bindings/redis/go.sum index bb2f2ba17..f9e4d82bd 100644 --- a/tests/certification/bindings/redis/go.sum +++ b/tests/certification/bindings/redis/go.sum @@ -95,8 +95,8 @@ github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e h1:Ieid1nWDFssDXrXIdRa github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e/go.mod h1:mGNQLZnlzH8HX7GcQv3u4YNE432gs1CYC8NLbOf65SE= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= -github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5 h1:Jx8u3y/BMjUar0Gp+dzZybBo1Kvbj+18XPbiJ28Xa7A= -github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5/go.mod h1:FR+yc0R0szlKnJooVqJvl7FhWf21wzY4/EzmyFQrESw= +github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= +github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f/go.mod h1:i9t09QZw346M2RbuK7oJhssOP0HCAQObz61U4SBNJSU= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -532,8 +532,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9 h1:lNtcVz/3bOstm7Vebox+5m3nLh/BYWnhmc3AhXOW6oI= -golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE= +golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f h1:Al51T6tzvuh3oiwX11vex3QgJ2XTedFPGmbEVh8cdoc= +golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -555,8 +555,8 @@ golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/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 h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s= -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-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -751,8 +751,8 @@ golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.12 h1:VveCTK38A2rkS8ZqFY25HIDFscX5X9OoEhJd3quQmXU= -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= diff --git a/tests/certification/go.mod b/tests/certification/go.mod index 15acfaeb8..81c12676d 100644 --- a/tests/certification/go.mod +++ b/tests/certification/go.mod @@ -6,7 +6,7 @@ require ( github.com/dapr/components-contrib v1.9.1-0.20221025205611-e38369028650 github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 - github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5 + github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f github.com/google/go-cmp v0.5.9 github.com/pkg/errors v0.9.1 github.com/stretchr/testify v1.8.1 @@ -100,8 +100,8 @@ require ( go.opentelemetry.io/otel/trace v1.11.1 // indirect go.opentelemetry.io/proto/otlp v0.19.0 // indirect go.uber.org/atomic v1.10.0 // indirect - golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9 // indirect - golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect + golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f // indirect + golang.org/x/mod v0.6.0 // indirect golang.org/x/net v0.1.0 // indirect golang.org/x/oauth2 v0.1.0 // indirect golang.org/x/sync v0.1.0 // indirect @@ -109,7 +109,7 @@ require ( golang.org/x/term v0.1.0 // indirect golang.org/x/text v0.4.0 // indirect golang.org/x/time v0.0.0-20220922220347-f3bd1da661af // indirect - golang.org/x/tools v0.1.12 // indirect + golang.org/x/tools v0.2.0 // indirect gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c // indirect diff --git a/tests/certification/go.sum b/tests/certification/go.sum index 39d762af9..db82d340e 100644 --- a/tests/certification/go.sum +++ b/tests/certification/go.sum @@ -93,8 +93,8 @@ github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e h1:Ieid1nWDFssDXrXIdRa github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e/go.mod h1:mGNQLZnlzH8HX7GcQv3u4YNE432gs1CYC8NLbOf65SE= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= -github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5 h1:Jx8u3y/BMjUar0Gp+dzZybBo1Kvbj+18XPbiJ28Xa7A= -github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5/go.mod h1:FR+yc0R0szlKnJooVqJvl7FhWf21wzY4/EzmyFQrESw= +github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= +github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f/go.mod h1:i9t09QZw346M2RbuK7oJhssOP0HCAQObz61U4SBNJSU= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -527,8 +527,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9 h1:lNtcVz/3bOstm7Vebox+5m3nLh/BYWnhmc3AhXOW6oI= -golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE= +golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f h1:Al51T6tzvuh3oiwX11vex3QgJ2XTedFPGmbEVh8cdoc= +golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -550,8 +550,8 @@ golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/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 h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s= -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-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -746,8 +746,8 @@ golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.12 h1:VveCTK38A2rkS8ZqFY25HIDFscX5X9OoEhJd3quQmXU= -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= diff --git a/tests/certification/pubsub/azure/eventhubs/go.mod b/tests/certification/pubsub/azure/eventhubs/go.mod index eaa05c5f9..9043ab619 100644 --- a/tests/certification/pubsub/azure/eventhubs/go.mod +++ b/tests/certification/pubsub/azure/eventhubs/go.mod @@ -7,7 +7,7 @@ require ( github.com/dapr/components-contrib/tests/certification v1.4.0-rc2 github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 - github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5 + github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f github.com/google/uuid v1.3.0 github.com/stretchr/testify v1.8.1 go.uber.org/multierr v1.8.0 @@ -133,8 +133,8 @@ require ( go.opentelemetry.io/proto/otlp v0.19.0 // indirect go.uber.org/atomic v1.10.0 // indirect golang.org/x/crypto v0.1.0 // indirect - golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9 // indirect - golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect + golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f // indirect + golang.org/x/mod v0.6.0 // indirect golang.org/x/net v0.1.0 // indirect golang.org/x/oauth2 v0.1.0 // indirect golang.org/x/sync v0.1.0 // indirect @@ -142,7 +142,7 @@ require ( golang.org/x/term v0.1.0 // indirect golang.org/x/text v0.4.0 // indirect golang.org/x/time v0.0.0-20220922220347-f3bd1da661af // indirect - golang.org/x/tools v0.1.12 // indirect + golang.org/x/tools v0.2.0 // indirect gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c // indirect diff --git a/tests/certification/pubsub/azure/eventhubs/go.sum b/tests/certification/pubsub/azure/eventhubs/go.sum index b6e1491a8..53d72ab43 100644 --- a/tests/certification/pubsub/azure/eventhubs/go.sum +++ b/tests/certification/pubsub/azure/eventhubs/go.sum @@ -163,8 +163,8 @@ github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e h1:Ieid1nWDFssDXrXIdRa github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e/go.mod h1:mGNQLZnlzH8HX7GcQv3u4YNE432gs1CYC8NLbOf65SE= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= -github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5 h1:Jx8u3y/BMjUar0Gp+dzZybBo1Kvbj+18XPbiJ28Xa7A= -github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5/go.mod h1:FR+yc0R0szlKnJooVqJvl7FhWf21wzY4/EzmyFQrESw= +github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= +github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f/go.mod h1:i9t09QZw346M2RbuK7oJhssOP0HCAQObz61U4SBNJSU= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -634,8 +634,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9 h1:lNtcVz/3bOstm7Vebox+5m3nLh/BYWnhmc3AhXOW6oI= -golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE= +golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f h1:Al51T6tzvuh3oiwX11vex3QgJ2XTedFPGmbEVh8cdoc= +golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -657,8 +657,8 @@ golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/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 h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s= -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-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -855,8 +855,8 @@ golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.12 h1:VveCTK38A2rkS8ZqFY25HIDFscX5X9OoEhJd3quQmXU= -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= diff --git a/tests/certification/pubsub/azure/servicebus/topics/go.mod b/tests/certification/pubsub/azure/servicebus/topics/go.mod index 329abe497..7951cab40 100644 --- a/tests/certification/pubsub/azure/servicebus/topics/go.mod +++ b/tests/certification/pubsub/azure/servicebus/topics/go.mod @@ -7,7 +7,7 @@ require ( github.com/dapr/components-contrib/tests/certification v0.0.0-20211026011813-36b75e9ae272 github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 - github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5 + github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f github.com/google/uuid v1.3.0 github.com/stretchr/testify v1.8.1 go.uber.org/multierr v1.8.0 @@ -131,8 +131,8 @@ require ( go.uber.org/atomic v1.10.0 // indirect go.uber.org/ratelimit v0.2.0 // indirect golang.org/x/crypto v0.1.0 // indirect - golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9 // indirect - golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect + golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f // indirect + golang.org/x/mod v0.6.0 // indirect golang.org/x/net v0.1.0 // indirect golang.org/x/oauth2 v0.1.0 // indirect golang.org/x/sync v0.1.0 // indirect @@ -140,7 +140,7 @@ require ( golang.org/x/term v0.1.0 // indirect golang.org/x/text v0.4.0 // indirect golang.org/x/time v0.0.0-20220922220347-f3bd1da661af // indirect - golang.org/x/tools v0.1.12 // indirect + golang.org/x/tools v0.2.0 // indirect gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c // indirect diff --git a/tests/certification/pubsub/azure/servicebus/topics/go.sum b/tests/certification/pubsub/azure/servicebus/topics/go.sum index 4148951ef..cc085fae8 100644 --- a/tests/certification/pubsub/azure/servicebus/topics/go.sum +++ b/tests/certification/pubsub/azure/servicebus/topics/go.sum @@ -151,8 +151,8 @@ github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e h1:Ieid1nWDFssDXrXIdRa github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e/go.mod h1:mGNQLZnlzH8HX7GcQv3u4YNE432gs1CYC8NLbOf65SE= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= -github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5 h1:Jx8u3y/BMjUar0Gp+dzZybBo1Kvbj+18XPbiJ28Xa7A= -github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5/go.mod h1:FR+yc0R0szlKnJooVqJvl7FhWf21wzY4/EzmyFQrESw= +github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= +github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f/go.mod h1:i9t09QZw346M2RbuK7oJhssOP0HCAQObz61U4SBNJSU= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -621,8 +621,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9 h1:lNtcVz/3bOstm7Vebox+5m3nLh/BYWnhmc3AhXOW6oI= -golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE= +golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f h1:Al51T6tzvuh3oiwX11vex3QgJ2XTedFPGmbEVh8cdoc= +golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -644,8 +644,8 @@ golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/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 h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s= -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-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -842,8 +842,8 @@ golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.12 h1:VveCTK38A2rkS8ZqFY25HIDFscX5X9OoEhJd3quQmXU= -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= diff --git a/tests/certification/pubsub/kafka/go.mod b/tests/certification/pubsub/kafka/go.mod index de28dc4e7..3a9b7aac2 100644 --- a/tests/certification/pubsub/kafka/go.mod +++ b/tests/certification/pubsub/kafka/go.mod @@ -9,7 +9,7 @@ require ( github.com/dapr/components-contrib/tests/certification v0.0.0-20220519061249-c2cb1dad5bb0 github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 - github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5 + github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f github.com/google/uuid v1.3.0 github.com/stretchr/testify v1.8.1 go.uber.org/multierr v1.8.0 @@ -121,8 +121,8 @@ require ( go.opentelemetry.io/proto/otlp v0.19.0 // indirect go.uber.org/atomic v1.10.0 // indirect golang.org/x/crypto v0.1.0 // indirect - golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9 // indirect - golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect + golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f // indirect + golang.org/x/mod v0.6.0 // indirect golang.org/x/net v0.1.0 // indirect golang.org/x/oauth2 v0.1.0 // indirect golang.org/x/sync v0.1.0 // indirect @@ -130,7 +130,7 @@ require ( golang.org/x/term v0.1.0 // indirect golang.org/x/text v0.4.0 // indirect golang.org/x/time v0.0.0-20220922220347-f3bd1da661af // indirect - golang.org/x/tools v0.1.12 // indirect + golang.org/x/tools v0.2.0 // indirect gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c // indirect diff --git a/tests/certification/pubsub/kafka/go.sum b/tests/certification/pubsub/kafka/go.sum index 32d26119b..77b7fa071 100644 --- a/tests/certification/pubsub/kafka/go.sum +++ b/tests/certification/pubsub/kafka/go.sum @@ -96,8 +96,8 @@ github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e h1:Ieid1nWDFssDXrXIdRa github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e/go.mod h1:mGNQLZnlzH8HX7GcQv3u4YNE432gs1CYC8NLbOf65SE= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= -github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5 h1:Jx8u3y/BMjUar0Gp+dzZybBo1Kvbj+18XPbiJ28Xa7A= -github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5/go.mod h1:FR+yc0R0szlKnJooVqJvl7FhWf21wzY4/EzmyFQrESw= +github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= +github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f/go.mod h1:i9t09QZw346M2RbuK7oJhssOP0HCAQObz61U4SBNJSU= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -571,8 +571,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9 h1:lNtcVz/3bOstm7Vebox+5m3nLh/BYWnhmc3AhXOW6oI= -golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE= +golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f h1:Al51T6tzvuh3oiwX11vex3QgJ2XTedFPGmbEVh8cdoc= +golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -594,8 +594,8 @@ golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/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 h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s= -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-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -792,8 +792,8 @@ golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.12 h1:VveCTK38A2rkS8ZqFY25HIDFscX5X9OoEhJd3quQmXU= -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= diff --git a/tests/certification/pubsub/mqtt/go.mod b/tests/certification/pubsub/mqtt/go.mod index bef5f6ee7..05e06f359 100644 --- a/tests/certification/pubsub/mqtt/go.mod +++ b/tests/certification/pubsub/mqtt/go.mod @@ -8,7 +8,7 @@ require ( github.com/dapr/components-contrib/tests/certification v1.4.0-rc2 github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 - github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5 + github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f github.com/eclipse/paho.mqtt.golang v1.4.2 github.com/stretchr/testify v1.8.1 go.uber.org/multierr v1.8.0 @@ -108,8 +108,8 @@ require ( go.opentelemetry.io/proto/otlp v0.19.0 // indirect go.uber.org/atomic v1.10.0 // indirect go.uber.org/ratelimit v0.2.0 // indirect - golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9 // indirect - golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect + golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f // indirect + golang.org/x/mod v0.6.0 // indirect golang.org/x/net v0.1.0 // indirect golang.org/x/oauth2 v0.1.0 // indirect golang.org/x/sync v0.1.0 // indirect @@ -117,7 +117,7 @@ require ( golang.org/x/term v0.1.0 // indirect golang.org/x/text v0.4.0 // indirect golang.org/x/time v0.0.0-20220922220347-f3bd1da661af // indirect - golang.org/x/tools v0.1.12 // indirect + golang.org/x/tools v0.2.0 // indirect gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c // indirect diff --git a/tests/certification/pubsub/mqtt/go.sum b/tests/certification/pubsub/mqtt/go.sum index 21db90098..5581f252a 100644 --- a/tests/certification/pubsub/mqtt/go.sum +++ b/tests/certification/pubsub/mqtt/go.sum @@ -95,8 +95,8 @@ github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e h1:Ieid1nWDFssDXrXIdRa github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e/go.mod h1:mGNQLZnlzH8HX7GcQv3u4YNE432gs1CYC8NLbOf65SE= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= -github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5 h1:Jx8u3y/BMjUar0Gp+dzZybBo1Kvbj+18XPbiJ28Xa7A= -github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5/go.mod h1:FR+yc0R0szlKnJooVqJvl7FhWf21wzY4/EzmyFQrESw= +github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= +github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f/go.mod h1:i9t09QZw346M2RbuK7oJhssOP0HCAQObz61U4SBNJSU= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -538,8 +538,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9 h1:lNtcVz/3bOstm7Vebox+5m3nLh/BYWnhmc3AhXOW6oI= -golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE= +golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f h1:Al51T6tzvuh3oiwX11vex3QgJ2XTedFPGmbEVh8cdoc= +golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -561,8 +561,8 @@ golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/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 h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s= -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-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -758,8 +758,8 @@ golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.12 h1:VveCTK38A2rkS8ZqFY25HIDFscX5X9OoEhJd3quQmXU= -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= diff --git a/tests/certification/pubsub/rabbitmq/go.mod b/tests/certification/pubsub/rabbitmq/go.mod index 8278f0189..42947bfca 100644 --- a/tests/certification/pubsub/rabbitmq/go.mod +++ b/tests/certification/pubsub/rabbitmq/go.mod @@ -8,7 +8,7 @@ require ( github.com/dapr/components-contrib/tests/certification v0.0.0-20211130185200-4918900c09e1 github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 - github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5 + github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f github.com/rabbitmq/amqp091-go v1.5.0 github.com/stretchr/testify v1.8.1 go.uber.org/multierr v1.8.0 @@ -105,8 +105,8 @@ require ( go.opentelemetry.io/otel/trace v1.11.1 // indirect go.opentelemetry.io/proto/otlp v0.19.0 // indirect go.uber.org/atomic v1.10.0 // indirect - golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9 // indirect - golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect + golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f // indirect + golang.org/x/mod v0.6.0 // indirect golang.org/x/net v0.1.0 // indirect golang.org/x/oauth2 v0.1.0 // indirect golang.org/x/sync v0.1.0 // indirect @@ -114,7 +114,7 @@ require ( golang.org/x/term v0.1.0 // indirect golang.org/x/text v0.4.0 // indirect golang.org/x/time v0.0.0-20220922220347-f3bd1da661af // indirect - golang.org/x/tools v0.1.12 // indirect + golang.org/x/tools v0.2.0 // indirect gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c // indirect diff --git a/tests/certification/pubsub/rabbitmq/go.sum b/tests/certification/pubsub/rabbitmq/go.sum index 85707ff1c..1e990bab6 100644 --- a/tests/certification/pubsub/rabbitmq/go.sum +++ b/tests/certification/pubsub/rabbitmq/go.sum @@ -93,8 +93,8 @@ github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e h1:Ieid1nWDFssDXrXIdRa github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e/go.mod h1:mGNQLZnlzH8HX7GcQv3u4YNE432gs1CYC8NLbOf65SE= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= -github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5 h1:Jx8u3y/BMjUar0Gp+dzZybBo1Kvbj+18XPbiJ28Xa7A= -github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5/go.mod h1:FR+yc0R0szlKnJooVqJvl7FhWf21wzY4/EzmyFQrESw= +github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= +github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f/go.mod h1:i9t09QZw346M2RbuK7oJhssOP0HCAQObz61U4SBNJSU= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -532,8 +532,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9 h1:lNtcVz/3bOstm7Vebox+5m3nLh/BYWnhmc3AhXOW6oI= -golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE= +golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f h1:Al51T6tzvuh3oiwX11vex3QgJ2XTedFPGmbEVh8cdoc= +golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -555,8 +555,8 @@ golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/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 h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s= -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-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -752,8 +752,8 @@ golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4f golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.12 h1:VveCTK38A2rkS8ZqFY25HIDFscX5X9OoEhJd3quQmXU= -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= diff --git a/tests/certification/secretstores/azure/keyvault/go.mod b/tests/certification/secretstores/azure/keyvault/go.mod index 917b14dc6..9e2fc5ffe 100644 --- a/tests/certification/secretstores/azure/keyvault/go.mod +++ b/tests/certification/secretstores/azure/keyvault/go.mod @@ -7,7 +7,7 @@ require ( github.com/dapr/components-contrib/tests/certification v0.0.0-20211130185200-4918900c09e1 github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 - github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5 + github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f github.com/stretchr/testify v1.8.1 ) @@ -126,8 +126,8 @@ require ( go.opentelemetry.io/proto/otlp v0.19.0 // indirect go.uber.org/atomic v1.10.0 // indirect golang.org/x/crypto v0.1.0 // indirect - golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9 // indirect - golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect + golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f // indirect + golang.org/x/mod v0.6.0 // indirect golang.org/x/net v0.1.0 // indirect golang.org/x/oauth2 v0.1.0 // indirect golang.org/x/sync v0.1.0 // indirect @@ -135,7 +135,7 @@ require ( golang.org/x/term v0.1.0 // indirect golang.org/x/text v0.4.0 // indirect golang.org/x/time v0.0.0-20220922220347-f3bd1da661af // indirect - golang.org/x/tools v0.1.12 // indirect + golang.org/x/tools v0.2.0 // indirect gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c // indirect diff --git a/tests/certification/secretstores/azure/keyvault/go.sum b/tests/certification/secretstores/azure/keyvault/go.sum index c74c8521a..c642d3d73 100644 --- a/tests/certification/secretstores/azure/keyvault/go.sum +++ b/tests/certification/secretstores/azure/keyvault/go.sum @@ -149,8 +149,8 @@ github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e h1:Ieid1nWDFssDXrXIdRa github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e/go.mod h1:mGNQLZnlzH8HX7GcQv3u4YNE432gs1CYC8NLbOf65SE= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= -github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5 h1:Jx8u3y/BMjUar0Gp+dzZybBo1Kvbj+18XPbiJ28Xa7A= -github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5/go.mod h1:FR+yc0R0szlKnJooVqJvl7FhWf21wzY4/EzmyFQrESw= +github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= +github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f/go.mod h1:i9t09QZw346M2RbuK7oJhssOP0HCAQObz61U4SBNJSU= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -609,8 +609,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9 h1:lNtcVz/3bOstm7Vebox+5m3nLh/BYWnhmc3AhXOW6oI= -golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE= +golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f h1:Al51T6tzvuh3oiwX11vex3QgJ2XTedFPGmbEVh8cdoc= +golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -632,8 +632,8 @@ golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/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 h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s= -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-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -830,8 +830,8 @@ golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.12 h1:VveCTK38A2rkS8ZqFY25HIDFscX5X9OoEhJd3quQmXU= -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= diff --git a/tests/certification/secretstores/hashicorp/vault/go.mod b/tests/certification/secretstores/hashicorp/vault/go.mod index 8bfe5afd4..1d72c4125 100644 --- a/tests/certification/secretstores/hashicorp/vault/go.mod +++ b/tests/certification/secretstores/hashicorp/vault/go.mod @@ -7,7 +7,7 @@ require ( github.com/dapr/components-contrib/tests/certification v0.0.0-20220526162429-d03aeba3e0d6 github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e // We require dapr/dapr#5208 merged github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 - github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5 + github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f github.com/golang/protobuf v1.5.2 github.com/stretchr/testify v1.8.1 ) @@ -102,8 +102,8 @@ require ( go.opentelemetry.io/otel/trace v1.11.1 // indirect go.opentelemetry.io/proto/otlp v0.19.0 // indirect go.uber.org/atomic v1.10.0 // indirect - golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9 // indirect - golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect + golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f // indirect + golang.org/x/mod v0.6.0 // indirect golang.org/x/net v0.1.0 // indirect golang.org/x/oauth2 v0.1.0 // indirect golang.org/x/sync v0.1.0 // indirect @@ -111,7 +111,7 @@ require ( golang.org/x/term v0.1.0 // indirect golang.org/x/text v0.4.0 // indirect golang.org/x/time v0.0.0-20220922220347-f3bd1da661af // indirect - golang.org/x/tools v0.1.12 // indirect + golang.org/x/tools v0.2.0 // indirect gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c // indirect diff --git a/tests/certification/secretstores/hashicorp/vault/go.sum b/tests/certification/secretstores/hashicorp/vault/go.sum index 0d609fad1..ae4025442 100644 --- a/tests/certification/secretstores/hashicorp/vault/go.sum +++ b/tests/certification/secretstores/hashicorp/vault/go.sum @@ -93,8 +93,8 @@ github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e h1:Ieid1nWDFssDXrXIdRa github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e/go.mod h1:mGNQLZnlzH8HX7GcQv3u4YNE432gs1CYC8NLbOf65SE= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= -github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5 h1:Jx8u3y/BMjUar0Gp+dzZybBo1Kvbj+18XPbiJ28Xa7A= -github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5/go.mod h1:FR+yc0R0szlKnJooVqJvl7FhWf21wzY4/EzmyFQrESw= +github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= +github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f/go.mod h1:i9t09QZw346M2RbuK7oJhssOP0HCAQObz61U4SBNJSU= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -525,8 +525,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9 h1:lNtcVz/3bOstm7Vebox+5m3nLh/BYWnhmc3AhXOW6oI= -golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE= +golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f h1:Al51T6tzvuh3oiwX11vex3QgJ2XTedFPGmbEVh8cdoc= +golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -548,8 +548,8 @@ golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/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 h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s= -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-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -744,8 +744,8 @@ golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.12 h1:VveCTK38A2rkS8ZqFY25HIDFscX5X9OoEhJd3quQmXU= -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= diff --git a/tests/certification/secretstores/local/env/go.mod b/tests/certification/secretstores/local/env/go.mod index 3ed5556af..c2a1fea2b 100644 --- a/tests/certification/secretstores/local/env/go.mod +++ b/tests/certification/secretstores/local/env/go.mod @@ -7,7 +7,7 @@ require ( github.com/dapr/components-contrib/tests/certification v0.0.0-20211130185200-4918900c09e1 github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 - github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5 + github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f github.com/stretchr/testify v1.8.1 ) @@ -101,8 +101,8 @@ require ( go.opentelemetry.io/otel/trace v1.11.1 // indirect go.opentelemetry.io/proto/otlp v0.19.0 // indirect go.uber.org/atomic v1.10.0 // indirect - golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9 // indirect - golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect + golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f // indirect + golang.org/x/mod v0.6.0 // indirect golang.org/x/net v0.1.0 // indirect golang.org/x/oauth2 v0.1.0 // indirect golang.org/x/sync v0.1.0 // indirect @@ -110,7 +110,7 @@ require ( golang.org/x/term v0.1.0 // indirect golang.org/x/text v0.4.0 // indirect golang.org/x/time v0.0.0-20220922220347-f3bd1da661af // indirect - golang.org/x/tools v0.1.12 // indirect + golang.org/x/tools v0.2.0 // indirect gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c // indirect diff --git a/tests/certification/secretstores/local/env/go.sum b/tests/certification/secretstores/local/env/go.sum index b9b8f0566..0c41a3545 100644 --- a/tests/certification/secretstores/local/env/go.sum +++ b/tests/certification/secretstores/local/env/go.sum @@ -93,8 +93,8 @@ github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e h1:Ieid1nWDFssDXrXIdRa github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e/go.mod h1:mGNQLZnlzH8HX7GcQv3u4YNE432gs1CYC8NLbOf65SE= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= -github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5 h1:Jx8u3y/BMjUar0Gp+dzZybBo1Kvbj+18XPbiJ28Xa7A= -github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5/go.mod h1:FR+yc0R0szlKnJooVqJvl7FhWf21wzY4/EzmyFQrESw= +github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= +github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f/go.mod h1:i9t09QZw346M2RbuK7oJhssOP0HCAQObz61U4SBNJSU= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -523,8 +523,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9 h1:lNtcVz/3bOstm7Vebox+5m3nLh/BYWnhmc3AhXOW6oI= -golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE= +golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f h1:Al51T6tzvuh3oiwX11vex3QgJ2XTedFPGmbEVh8cdoc= +golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -546,8 +546,8 @@ golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/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 h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s= -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-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -742,8 +742,8 @@ golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.12 h1:VveCTK38A2rkS8ZqFY25HIDFscX5X9OoEhJd3quQmXU= -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= diff --git a/tests/certification/secretstores/local/file/go.mod b/tests/certification/secretstores/local/file/go.mod index 5d01239f0..04406b348 100644 --- a/tests/certification/secretstores/local/file/go.mod +++ b/tests/certification/secretstores/local/file/go.mod @@ -7,7 +7,7 @@ require ( github.com/dapr/components-contrib/tests/certification v0.0.0-20211130185200-4918900c09e1 github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 - github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5 + github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f github.com/stretchr/testify v1.8.1 ) @@ -101,8 +101,8 @@ require ( go.opentelemetry.io/otel/trace v1.11.1 // indirect go.opentelemetry.io/proto/otlp v0.19.0 // indirect go.uber.org/atomic v1.10.0 // indirect - golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9 // indirect - golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect + golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f // indirect + golang.org/x/mod v0.6.0 // indirect golang.org/x/net v0.1.0 // indirect golang.org/x/oauth2 v0.1.0 // indirect golang.org/x/sync v0.1.0 // indirect @@ -110,7 +110,7 @@ require ( golang.org/x/term v0.1.0 // indirect golang.org/x/text v0.4.0 // indirect golang.org/x/time v0.0.0-20220922220347-f3bd1da661af // indirect - golang.org/x/tools v0.1.12 // indirect + golang.org/x/tools v0.2.0 // indirect gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c // indirect diff --git a/tests/certification/secretstores/local/file/go.sum b/tests/certification/secretstores/local/file/go.sum index b9b8f0566..0c41a3545 100644 --- a/tests/certification/secretstores/local/file/go.sum +++ b/tests/certification/secretstores/local/file/go.sum @@ -93,8 +93,8 @@ github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e h1:Ieid1nWDFssDXrXIdRa github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e/go.mod h1:mGNQLZnlzH8HX7GcQv3u4YNE432gs1CYC8NLbOf65SE= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= -github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5 h1:Jx8u3y/BMjUar0Gp+dzZybBo1Kvbj+18XPbiJ28Xa7A= -github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5/go.mod h1:FR+yc0R0szlKnJooVqJvl7FhWf21wzY4/EzmyFQrESw= +github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= +github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f/go.mod h1:i9t09QZw346M2RbuK7oJhssOP0HCAQObz61U4SBNJSU= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -523,8 +523,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9 h1:lNtcVz/3bOstm7Vebox+5m3nLh/BYWnhmc3AhXOW6oI= -golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE= +golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f h1:Al51T6tzvuh3oiwX11vex3QgJ2XTedFPGmbEVh8cdoc= +golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -546,8 +546,8 @@ golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/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 h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s= -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-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -742,8 +742,8 @@ golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.12 h1:VveCTK38A2rkS8ZqFY25HIDFscX5X9OoEhJd3quQmXU= -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= diff --git a/tests/certification/state/azure/blobstorage/go.mod b/tests/certification/state/azure/blobstorage/go.mod index f25fcfeba..afd11f81c 100644 --- a/tests/certification/state/azure/blobstorage/go.mod +++ b/tests/certification/state/azure/blobstorage/go.mod @@ -7,7 +7,7 @@ require ( github.com/dapr/components-contrib/tests/certification v0.0.0-20211026011813-36b75e9ae272 github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 - github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5 + github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f github.com/stretchr/testify v1.8.1 ) @@ -125,8 +125,8 @@ require ( go.opentelemetry.io/proto/otlp v0.19.0 // indirect go.uber.org/atomic v1.10.0 // indirect golang.org/x/crypto v0.1.0 // indirect - golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9 // indirect - golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect + golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f // indirect + golang.org/x/mod v0.6.0 // indirect golang.org/x/net v0.1.0 // indirect golang.org/x/oauth2 v0.1.0 // indirect golang.org/x/sync v0.1.0 // indirect @@ -134,7 +134,7 @@ require ( golang.org/x/term v0.1.0 // indirect golang.org/x/text v0.4.0 // indirect golang.org/x/time v0.0.0-20220922220347-f3bd1da661af // indirect - golang.org/x/tools v0.1.12 // indirect + golang.org/x/tools v0.2.0 // indirect gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c // indirect diff --git a/tests/certification/state/azure/blobstorage/go.sum b/tests/certification/state/azure/blobstorage/go.sum index 35ec3b142..bdb59ddd5 100644 --- a/tests/certification/state/azure/blobstorage/go.sum +++ b/tests/certification/state/azure/blobstorage/go.sum @@ -146,8 +146,8 @@ github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e h1:Ieid1nWDFssDXrXIdRa github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e/go.mod h1:mGNQLZnlzH8HX7GcQv3u4YNE432gs1CYC8NLbOf65SE= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= -github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5 h1:Jx8u3y/BMjUar0Gp+dzZybBo1Kvbj+18XPbiJ28Xa7A= -github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5/go.mod h1:FR+yc0R0szlKnJooVqJvl7FhWf21wzY4/EzmyFQrESw= +github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= +github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f/go.mod h1:i9t09QZw346M2RbuK7oJhssOP0HCAQObz61U4SBNJSU= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -606,8 +606,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9 h1:lNtcVz/3bOstm7Vebox+5m3nLh/BYWnhmc3AhXOW6oI= -golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE= +golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f h1:Al51T6tzvuh3oiwX11vex3QgJ2XTedFPGmbEVh8cdoc= +golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -629,8 +629,8 @@ golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/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 h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s= -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-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -827,8 +827,8 @@ golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.12 h1:VveCTK38A2rkS8ZqFY25HIDFscX5X9OoEhJd3quQmXU= -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= diff --git a/tests/certification/state/azure/cosmosdb/go.mod b/tests/certification/state/azure/cosmosdb/go.mod index 925baaa7d..74e17517d 100644 --- a/tests/certification/state/azure/cosmosdb/go.mod +++ b/tests/certification/state/azure/cosmosdb/go.mod @@ -7,7 +7,7 @@ require ( github.com/dapr/components-contrib/tests/certification v0.0.0-20211026011813-36b75e9ae272 github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 - github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5 + github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f github.com/stretchr/testify v1.8.1 ) @@ -126,8 +126,8 @@ require ( go.opentelemetry.io/proto/otlp v0.19.0 // indirect go.uber.org/atomic v1.10.0 // indirect golang.org/x/crypto v0.1.0 // indirect - golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9 // indirect - golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect + golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f // indirect + golang.org/x/mod v0.6.0 // indirect golang.org/x/net v0.1.0 // indirect golang.org/x/oauth2 v0.1.0 // indirect golang.org/x/sync v0.1.0 // indirect @@ -135,7 +135,7 @@ require ( golang.org/x/term v0.1.0 // indirect golang.org/x/text v0.4.0 // indirect golang.org/x/time v0.0.0-20220922220347-f3bd1da661af // indirect - golang.org/x/tools v0.1.12 // indirect + golang.org/x/tools v0.2.0 // indirect gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c // indirect diff --git a/tests/certification/state/azure/cosmosdb/go.sum b/tests/certification/state/azure/cosmosdb/go.sum index 0e24a7bd7..c3653b513 100644 --- a/tests/certification/state/azure/cosmosdb/go.sum +++ b/tests/certification/state/azure/cosmosdb/go.sum @@ -149,8 +149,8 @@ github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e h1:Ieid1nWDFssDXrXIdRa github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e/go.mod h1:mGNQLZnlzH8HX7GcQv3u4YNE432gs1CYC8NLbOf65SE= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= -github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5 h1:Jx8u3y/BMjUar0Gp+dzZybBo1Kvbj+18XPbiJ28Xa7A= -github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5/go.mod h1:FR+yc0R0szlKnJooVqJvl7FhWf21wzY4/EzmyFQrESw= +github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= +github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f/go.mod h1:i9t09QZw346M2RbuK7oJhssOP0HCAQObz61U4SBNJSU= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -609,8 +609,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9 h1:lNtcVz/3bOstm7Vebox+5m3nLh/BYWnhmc3AhXOW6oI= -golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE= +golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f h1:Al51T6tzvuh3oiwX11vex3QgJ2XTedFPGmbEVh8cdoc= +golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -632,8 +632,8 @@ golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/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 h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s= -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-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -830,8 +830,8 @@ golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.12 h1:VveCTK38A2rkS8ZqFY25HIDFscX5X9OoEhJd3quQmXU= -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= diff --git a/tests/certification/state/azure/tablestorage/go.mod b/tests/certification/state/azure/tablestorage/go.mod index 302d6df6a..4b2ed2558 100644 --- a/tests/certification/state/azure/tablestorage/go.mod +++ b/tests/certification/state/azure/tablestorage/go.mod @@ -7,7 +7,7 @@ require ( github.com/dapr/components-contrib/tests/certification v0.0.0-20211026011813-36b75e9ae272 github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 - github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5 + github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f github.com/stretchr/testify v1.8.1 ) @@ -125,8 +125,8 @@ require ( go.opentelemetry.io/proto/otlp v0.19.0 // indirect go.uber.org/atomic v1.10.0 // indirect golang.org/x/crypto v0.1.0 // indirect - golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9 // indirect - golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect + golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f // indirect + golang.org/x/mod v0.6.0 // indirect golang.org/x/net v0.1.0 // indirect golang.org/x/oauth2 v0.1.0 // indirect golang.org/x/sync v0.1.0 // indirect @@ -134,7 +134,7 @@ require ( golang.org/x/term v0.1.0 // indirect golang.org/x/text v0.4.0 // indirect golang.org/x/time v0.0.0-20220922220347-f3bd1da661af // indirect - golang.org/x/tools v0.1.12 // indirect + golang.org/x/tools v0.2.0 // indirect gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c // indirect diff --git a/tests/certification/state/azure/tablestorage/go.sum b/tests/certification/state/azure/tablestorage/go.sum index 51c8dee9b..0d7d87f9d 100644 --- a/tests/certification/state/azure/tablestorage/go.sum +++ b/tests/certification/state/azure/tablestorage/go.sum @@ -147,8 +147,8 @@ github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e h1:Ieid1nWDFssDXrXIdRa github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e/go.mod h1:mGNQLZnlzH8HX7GcQv3u4YNE432gs1CYC8NLbOf65SE= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= -github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5 h1:Jx8u3y/BMjUar0Gp+dzZybBo1Kvbj+18XPbiJ28Xa7A= -github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5/go.mod h1:FR+yc0R0szlKnJooVqJvl7FhWf21wzY4/EzmyFQrESw= +github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= +github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f/go.mod h1:i9t09QZw346M2RbuK7oJhssOP0HCAQObz61U4SBNJSU= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -607,8 +607,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9 h1:lNtcVz/3bOstm7Vebox+5m3nLh/BYWnhmc3AhXOW6oI= -golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE= +golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f h1:Al51T6tzvuh3oiwX11vex3QgJ2XTedFPGmbEVh8cdoc= +golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -630,8 +630,8 @@ golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/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 h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s= -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-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -828,8 +828,8 @@ golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.12 h1:VveCTK38A2rkS8ZqFY25HIDFscX5X9OoEhJd3quQmXU= -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= diff --git a/tests/certification/state/cassandra/go.mod b/tests/certification/state/cassandra/go.mod index f647c47c7..974b66aca 100644 --- a/tests/certification/state/cassandra/go.mod +++ b/tests/certification/state/cassandra/go.mod @@ -7,7 +7,7 @@ require ( github.com/dapr/components-contrib/tests/certification v0.0.0-20211026011813-36b75e9ae272 github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 - github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5 + github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f github.com/stretchr/testify v1.8.1 ) @@ -105,8 +105,8 @@ require ( go.opentelemetry.io/otel/trace v1.11.1 // indirect go.opentelemetry.io/proto/otlp v0.19.0 // indirect go.uber.org/atomic v1.10.0 // indirect - golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9 // indirect - golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect + golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f // indirect + golang.org/x/mod v0.6.0 // indirect golang.org/x/net v0.1.0 // indirect golang.org/x/oauth2 v0.1.0 // indirect golang.org/x/sync v0.1.0 // indirect @@ -114,7 +114,7 @@ require ( golang.org/x/term v0.1.0 // indirect golang.org/x/text v0.4.0 // indirect golang.org/x/time v0.0.0-20220922220347-f3bd1da661af // indirect - golang.org/x/tools v0.1.12 // indirect + golang.org/x/tools v0.2.0 // indirect gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c // indirect diff --git a/tests/certification/state/cassandra/go.sum b/tests/certification/state/cassandra/go.sum index 5f064c973..55f04cfb6 100644 --- a/tests/certification/state/cassandra/go.sum +++ b/tests/certification/state/cassandra/go.sum @@ -97,8 +97,8 @@ github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e h1:Ieid1nWDFssDXrXIdRa github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e/go.mod h1:mGNQLZnlzH8HX7GcQv3u4YNE432gs1CYC8NLbOf65SE= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= -github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5 h1:Jx8u3y/BMjUar0Gp+dzZybBo1Kvbj+18XPbiJ28Xa7A= -github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5/go.mod h1:FR+yc0R0szlKnJooVqJvl7FhWf21wzY4/EzmyFQrESw= +github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= +github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f/go.mod h1:i9t09QZw346M2RbuK7oJhssOP0HCAQObz61U4SBNJSU= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -537,8 +537,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9 h1:lNtcVz/3bOstm7Vebox+5m3nLh/BYWnhmc3AhXOW6oI= -golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE= +golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f h1:Al51T6tzvuh3oiwX11vex3QgJ2XTedFPGmbEVh8cdoc= +golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -560,8 +560,8 @@ golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/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 h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s= -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-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -756,8 +756,8 @@ golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.12 h1:VveCTK38A2rkS8ZqFY25HIDFscX5X9OoEhJd3quQmXU= -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= diff --git a/tests/certification/state/memcached/go.mod b/tests/certification/state/memcached/go.mod index 9ef1e5c23..14d0787e9 100644 --- a/tests/certification/state/memcached/go.mod +++ b/tests/certification/state/memcached/go.mod @@ -7,7 +7,7 @@ require ( github.com/dapr/components-contrib/tests/certification v0.0.0-20220526162429-d03aeba3e0d6 github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 - github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5 + github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f github.com/stretchr/testify v1.8.1 ) @@ -103,8 +103,8 @@ require ( go.opentelemetry.io/otel/trace v1.11.1 // indirect go.opentelemetry.io/proto/otlp v0.19.0 // indirect go.uber.org/atomic v1.10.0 // indirect - golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9 // indirect - golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect + golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f // indirect + golang.org/x/mod v0.6.0 // indirect golang.org/x/net v0.1.0 // indirect golang.org/x/oauth2 v0.1.0 // indirect golang.org/x/sync v0.1.0 // indirect @@ -112,7 +112,7 @@ require ( golang.org/x/term v0.1.0 // indirect golang.org/x/text v0.4.0 // indirect golang.org/x/time v0.0.0-20220922220347-f3bd1da661af // indirect - golang.org/x/tools v0.1.12 // indirect + golang.org/x/tools v0.2.0 // indirect gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c // indirect diff --git a/tests/certification/state/memcached/go.sum b/tests/certification/state/memcached/go.sum index 9af6ee19b..4a0218124 100644 --- a/tests/certification/state/memcached/go.sum +++ b/tests/certification/state/memcached/go.sum @@ -95,8 +95,8 @@ github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e h1:Ieid1nWDFssDXrXIdRa github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e/go.mod h1:mGNQLZnlzH8HX7GcQv3u4YNE432gs1CYC8NLbOf65SE= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= -github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5 h1:Jx8u3y/BMjUar0Gp+dzZybBo1Kvbj+18XPbiJ28Xa7A= -github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5/go.mod h1:FR+yc0R0szlKnJooVqJvl7FhWf21wzY4/EzmyFQrESw= +github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= +github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f/go.mod h1:i9t09QZw346M2RbuK7oJhssOP0HCAQObz61U4SBNJSU= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -527,8 +527,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9 h1:lNtcVz/3bOstm7Vebox+5m3nLh/BYWnhmc3AhXOW6oI= -golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE= +golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f h1:Al51T6tzvuh3oiwX11vex3QgJ2XTedFPGmbEVh8cdoc= +golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -550,8 +550,8 @@ golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/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 h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s= -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-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -746,8 +746,8 @@ golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.12 h1:VveCTK38A2rkS8ZqFY25HIDFscX5X9OoEhJd3quQmXU= -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= diff --git a/tests/certification/state/mongodb/go.mod b/tests/certification/state/mongodb/go.mod index 1395c3fa3..d026b36e1 100644 --- a/tests/certification/state/mongodb/go.mod +++ b/tests/certification/state/mongodb/go.mod @@ -7,7 +7,7 @@ require ( github.com/dapr/components-contrib/tests/certification v0.0.0-20220526162429-d03aeba3e0d6 github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 - github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5 + github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f github.com/stretchr/testify v1.8.1 ) @@ -111,8 +111,8 @@ require ( go.opentelemetry.io/proto/otlp v0.19.0 // indirect go.uber.org/atomic v1.10.0 // indirect golang.org/x/crypto v0.1.0 // indirect - golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9 // indirect - golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect + golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f // indirect + golang.org/x/mod v0.6.0 // indirect golang.org/x/net v0.1.0 // indirect golang.org/x/oauth2 v0.1.0 // indirect golang.org/x/sync v0.1.0 // indirect @@ -120,7 +120,7 @@ require ( golang.org/x/term v0.1.0 // indirect golang.org/x/text v0.4.0 // indirect golang.org/x/time v0.0.0-20220922220347-f3bd1da661af // indirect - golang.org/x/tools v0.1.12 // indirect + golang.org/x/tools v0.2.0 // indirect gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c // indirect diff --git a/tests/certification/state/mongodb/go.sum b/tests/certification/state/mongodb/go.sum index 1f1ce6508..2210233f9 100644 --- a/tests/certification/state/mongodb/go.sum +++ b/tests/certification/state/mongodb/go.sum @@ -94,8 +94,8 @@ github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e h1:Ieid1nWDFssDXrXIdRa github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e/go.mod h1:mGNQLZnlzH8HX7GcQv3u4YNE432gs1CYC8NLbOf65SE= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= -github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5 h1:Jx8u3y/BMjUar0Gp+dzZybBo1Kvbj+18XPbiJ28Xa7A= -github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5/go.mod h1:FR+yc0R0szlKnJooVqJvl7FhWf21wzY4/EzmyFQrESw= +github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= +github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f/go.mod h1:i9t09QZw346M2RbuK7oJhssOP0HCAQObz61U4SBNJSU= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -549,8 +549,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9 h1:lNtcVz/3bOstm7Vebox+5m3nLh/BYWnhmc3AhXOW6oI= -golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE= +golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f h1:Al51T6tzvuh3oiwX11vex3QgJ2XTedFPGmbEVh8cdoc= +golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -572,8 +572,8 @@ golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/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 h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s= -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-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -768,8 +768,8 @@ golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.12 h1:VveCTK38A2rkS8ZqFY25HIDFscX5X9OoEhJd3quQmXU= -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= diff --git a/tests/certification/state/mysql/go.mod b/tests/certification/state/mysql/go.mod index 6bd75cb71..174c14531 100644 --- a/tests/certification/state/mysql/go.mod +++ b/tests/certification/state/mysql/go.mod @@ -7,7 +7,7 @@ require ( github.com/dapr/components-contrib/tests/certification v0.0.0-20220526162429-d03aeba3e0d6 github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 - github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5 + github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f github.com/stretchr/testify v1.8.1 ) @@ -102,8 +102,8 @@ require ( go.opentelemetry.io/otel/trace v1.11.1 // indirect go.opentelemetry.io/proto/otlp v0.19.0 // indirect go.uber.org/atomic v1.10.0 // indirect - golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9 // indirect - golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect + golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f // indirect + golang.org/x/mod v0.6.0 // indirect golang.org/x/net v0.1.0 // indirect golang.org/x/oauth2 v0.1.0 // indirect golang.org/x/sync v0.1.0 // indirect @@ -111,7 +111,7 @@ require ( golang.org/x/term v0.1.0 // indirect golang.org/x/text v0.4.0 // indirect golang.org/x/time v0.0.0-20220922220347-f3bd1da661af // indirect - golang.org/x/tools v0.1.12 // indirect + golang.org/x/tools v0.2.0 // indirect gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c // indirect diff --git a/tests/certification/state/mysql/go.sum b/tests/certification/state/mysql/go.sum index 52ef44dc2..83c83b8c3 100644 --- a/tests/certification/state/mysql/go.sum +++ b/tests/certification/state/mysql/go.sum @@ -94,8 +94,8 @@ github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e h1:Ieid1nWDFssDXrXIdRa github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e/go.mod h1:mGNQLZnlzH8HX7GcQv3u4YNE432gs1CYC8NLbOf65SE= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= -github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5 h1:Jx8u3y/BMjUar0Gp+dzZybBo1Kvbj+18XPbiJ28Xa7A= -github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5/go.mod h1:FR+yc0R0szlKnJooVqJvl7FhWf21wzY4/EzmyFQrESw= +github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= +github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f/go.mod h1:i9t09QZw346M2RbuK7oJhssOP0HCAQObz61U4SBNJSU= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -526,8 +526,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9 h1:lNtcVz/3bOstm7Vebox+5m3nLh/BYWnhmc3AhXOW6oI= -golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE= +golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f h1:Al51T6tzvuh3oiwX11vex3QgJ2XTedFPGmbEVh8cdoc= +golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -549,8 +549,8 @@ golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/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 h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s= -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-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -745,8 +745,8 @@ golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.12 h1:VveCTK38A2rkS8ZqFY25HIDFscX5X9OoEhJd3quQmXU= -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= diff --git a/tests/certification/state/postgresql/go.mod b/tests/certification/state/postgresql/go.mod index 04c498ffb..181bdcf50 100644 --- a/tests/certification/state/postgresql/go.mod +++ b/tests/certification/state/postgresql/go.mod @@ -7,7 +7,7 @@ require ( github.com/dapr/components-contrib/tests/certification v0.0.0-20220526162429-d03aeba3e0d6 github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 - github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5 + github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f github.com/stretchr/testify v1.8.1 ) @@ -106,8 +106,8 @@ require ( go.opentelemetry.io/proto/otlp v0.19.0 // indirect go.uber.org/atomic v1.10.0 // indirect golang.org/x/crypto v0.1.0 // indirect - golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9 // indirect - golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect + golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f // indirect + golang.org/x/mod v0.6.0 // indirect golang.org/x/net v0.1.0 // indirect golang.org/x/oauth2 v0.1.0 // indirect golang.org/x/sync v0.1.0 // indirect @@ -115,7 +115,7 @@ require ( golang.org/x/term v0.1.0 // indirect golang.org/x/text v0.4.0 // indirect golang.org/x/time v0.0.0-20220922220347-f3bd1da661af // indirect - golang.org/x/tools v0.1.12 // indirect + golang.org/x/tools v0.2.0 // indirect gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c // indirect diff --git a/tests/certification/state/postgresql/go.sum b/tests/certification/state/postgresql/go.sum index 58216cd44..896f5f48c 100644 --- a/tests/certification/state/postgresql/go.sum +++ b/tests/certification/state/postgresql/go.sum @@ -95,8 +95,8 @@ github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e h1:Ieid1nWDFssDXrXIdRa github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e/go.mod h1:mGNQLZnlzH8HX7GcQv3u4YNE432gs1CYC8NLbOf65SE= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= -github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5 h1:Jx8u3y/BMjUar0Gp+dzZybBo1Kvbj+18XPbiJ28Xa7A= -github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5/go.mod h1:FR+yc0R0szlKnJooVqJvl7FhWf21wzY4/EzmyFQrESw= +github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= +github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f/go.mod h1:i9t09QZw346M2RbuK7oJhssOP0HCAQObz61U4SBNJSU= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -534,8 +534,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9 h1:lNtcVz/3bOstm7Vebox+5m3nLh/BYWnhmc3AhXOW6oI= -golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE= +golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f h1:Al51T6tzvuh3oiwX11vex3QgJ2XTedFPGmbEVh8cdoc= +golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -557,8 +557,8 @@ golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/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 h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s= -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-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -753,8 +753,8 @@ golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.12 h1:VveCTK38A2rkS8ZqFY25HIDFscX5X9OoEhJd3quQmXU= -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= diff --git a/tests/certification/state/redis/go.mod b/tests/certification/state/redis/go.mod index 55f159fd6..da1120963 100644 --- a/tests/certification/state/redis/go.mod +++ b/tests/certification/state/redis/go.mod @@ -7,7 +7,7 @@ require ( github.com/dapr/components-contrib/tests/certification v0.0.0-20220526162429-d03aeba3e0d6 github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 - github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5 + github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f github.com/stretchr/testify v1.8.1 ) @@ -106,8 +106,8 @@ require ( go.opentelemetry.io/otel/trace v1.11.1 // indirect go.opentelemetry.io/proto/otlp v0.19.0 // indirect go.uber.org/atomic v1.10.0 // indirect - golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9 // indirect - golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect + golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f // indirect + golang.org/x/mod v0.6.0 // indirect golang.org/x/net v0.1.0 // indirect golang.org/x/oauth2 v0.1.0 // indirect golang.org/x/sync v0.1.0 // indirect @@ -115,7 +115,7 @@ require ( golang.org/x/term v0.1.0 // indirect golang.org/x/text v0.4.0 // indirect golang.org/x/time v0.0.0-20220922220347-f3bd1da661af // indirect - golang.org/x/tools v0.1.12 // indirect + golang.org/x/tools v0.2.0 // indirect gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c // indirect diff --git a/tests/certification/state/redis/go.sum b/tests/certification/state/redis/go.sum index 29b6513a5..150473901 100644 --- a/tests/certification/state/redis/go.sum +++ b/tests/certification/state/redis/go.sum @@ -96,8 +96,8 @@ github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e h1:Ieid1nWDFssDXrXIdRa github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e/go.mod h1:mGNQLZnlzH8HX7GcQv3u4YNE432gs1CYC8NLbOf65SE= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= -github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5 h1:Jx8u3y/BMjUar0Gp+dzZybBo1Kvbj+18XPbiJ28Xa7A= -github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5/go.mod h1:FR+yc0R0szlKnJooVqJvl7FhWf21wzY4/EzmyFQrESw= +github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= +github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f/go.mod h1:i9t09QZw346M2RbuK7oJhssOP0HCAQObz61U4SBNJSU= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -533,8 +533,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9 h1:lNtcVz/3bOstm7Vebox+5m3nLh/BYWnhmc3AhXOW6oI= -golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE= +golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f h1:Al51T6tzvuh3oiwX11vex3QgJ2XTedFPGmbEVh8cdoc= +golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -556,8 +556,8 @@ golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/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 h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s= -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-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -752,8 +752,8 @@ golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.12 h1:VveCTK38A2rkS8ZqFY25HIDFscX5X9OoEhJd3quQmXU= -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= diff --git a/tests/certification/state/sqlserver/go.mod b/tests/certification/state/sqlserver/go.mod index f77cc8377..4c7f1513f 100644 --- a/tests/certification/state/sqlserver/go.mod +++ b/tests/certification/state/sqlserver/go.mod @@ -7,7 +7,7 @@ require ( github.com/dapr/components-contrib/tests/certification v0.0.0-20211130185200-4918900c09e1 github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 - github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5 + github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f github.com/stretchr/testify v1.8.1 ) @@ -107,8 +107,8 @@ require ( go.opentelemetry.io/proto/otlp v0.19.0 // indirect go.uber.org/atomic v1.10.0 // indirect golang.org/x/crypto v0.1.0 // indirect - golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9 // indirect - golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect + golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f // indirect + golang.org/x/mod v0.6.0 // indirect golang.org/x/net v0.1.0 // indirect golang.org/x/oauth2 v0.1.0 // indirect golang.org/x/sync v0.1.0 // indirect @@ -116,7 +116,7 @@ require ( golang.org/x/term v0.1.0 // indirect golang.org/x/text v0.4.0 // indirect golang.org/x/time v0.0.0-20220922220347-f3bd1da661af // indirect - golang.org/x/tools v0.1.12 // indirect + golang.org/x/tools v0.2.0 // indirect gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c // indirect diff --git a/tests/certification/state/sqlserver/go.sum b/tests/certification/state/sqlserver/go.sum index a7c74d333..fde5ee6cb 100644 --- a/tests/certification/state/sqlserver/go.sum +++ b/tests/certification/state/sqlserver/go.sum @@ -97,8 +97,8 @@ github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e h1:Ieid1nWDFssDXrXIdRa github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e/go.mod h1:mGNQLZnlzH8HX7GcQv3u4YNE432gs1CYC8NLbOf65SE= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= -github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5 h1:Jx8u3y/BMjUar0Gp+dzZybBo1Kvbj+18XPbiJ28Xa7A= -github.com/dapr/kit v0.0.3-0.20221009070203-ca4d40d89ed5/go.mod h1:FR+yc0R0szlKnJooVqJvl7FhWf21wzY4/EzmyFQrESw= +github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= +github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f/go.mod h1:i9t09QZw346M2RbuK7oJhssOP0HCAQObz61U4SBNJSU= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -542,8 +542,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9 h1:lNtcVz/3bOstm7Vebox+5m3nLh/BYWnhmc3AhXOW6oI= -golang.org/x/exp v0.0.0-20220929160808-de9c53c655b9/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE= +golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f h1:Al51T6tzvuh3oiwX11vex3QgJ2XTedFPGmbEVh8cdoc= +golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -565,8 +565,8 @@ golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/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 h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s= -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-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -762,8 +762,8 @@ golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.12 h1:VveCTK38A2rkS8ZqFY25HIDFscX5X9OoEhJd3quQmXU= -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= diff --git a/tests/e2e/pubsub/jetstream/go.mod b/tests/e2e/pubsub/jetstream/go.mod index a02288522..ecc25faab 100644 --- a/tests/e2e/pubsub/jetstream/go.mod +++ b/tests/e2e/pubsub/jetstream/go.mod @@ -4,7 +4,7 @@ go 1.19 require ( github.com/dapr/components-contrib v1.5.1 - github.com/dapr/kit v0.0.2 + github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f ) require ( diff --git a/tests/e2e/pubsub/jetstream/go.sum b/tests/e2e/pubsub/jetstream/go.sum index 3952483e8..bfa768ffe 100644 --- a/tests/e2e/pubsub/jetstream/go.sum +++ b/tests/e2e/pubsub/jetstream/go.sum @@ -1,7 +1,7 @@ github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= -github.com/dapr/kit v0.0.2 h1:VNg6RWrBMOdtY0/ZLztyAa/RjyFLaskdO9wt2HIREwk= -github.com/dapr/kit v0.0.2/go.mod h1:Q4TWm9+vcPZFGehaJUZt2hvA805wJm7FIuoArytWJ8o= +github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= +github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f/go.mod h1:i9t09QZw346M2RbuK7oJhssOP0HCAQObz61U4SBNJSU= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -32,6 +32,7 @@ github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKs golang.org/x/crypto v0.0.0-20210314154223-e6e6c4f2bb5b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.1.0 h1:MDRAIl0xIo9Io2xV565hzXHw3zVseKrJKodhohM5CjU= golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= +golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f h1:Al51T6tzvuh3oiwX11vex3QgJ2XTedFPGmbEVh8cdoc= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= From 132b22ecf2d17fe981fdc9ba54ca0f57c104c1bb Mon Sep 17 00:00:00 2001 From: Taction Date: Fri, 4 Nov 2022 12:56:07 +0800 Subject: [PATCH 11/87] change GOLANG_PROTOBUF_REGISTRATION_CONFLICT from warn to ignore (#2254) Signed-off-by: zhangchao Signed-off-by: zhangchao --- .github/workflows/certification.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/certification.yml b/.github/workflows/certification.yml index 2ceb16d95..dfa2228dc 100644 --- a/.github/workflows/certification.yml +++ b/.github/workflows/certification.yml @@ -245,7 +245,7 @@ jobs: working-directory: ${{ env.TEST_PATH }} run: | echo "Running certification tests for ${{ matrix.component }} ... " - export GOLANG_PROTOBUF_REGISTRATION_CONFLICT=warn + export GOLANG_PROTOBUF_REGISTRATION_CONFLICT=ignore set +e gotestsum --jsonfile ${{ env.TEST_OUTPUT_FILE_PREFIX }}_certification.json \ --junitfile ${{ env.TEST_OUTPUT_FILE_PREFIX }}_certification.xml --format standard-quiet -- \ From ca3e80b76b5662ee15fe25f40b5dde27c8f43218 Mon Sep 17 00:00:00 2001 From: "Alessandro (Ale) Segala" <43508+ItalyPaleAle@users.noreply.github.com> Date: Thu, 3 Nov 2022 22:19:21 -0700 Subject: [PATCH 12/87] Updated depguard linter config (#2245) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Updated depguard linter config 1. Add older (pre-v4) versions of `github.com/cenkalti/backoff` to the denylist 2. Add `github.com/agrea/ptr` to the denylist (use `github.com/dapr/kit/ptr` instead) 3. Fixed error messages for denied deps Port of dapr/dapr#5438 Signed-off-by: ItalyPaleAle <43508+ItalyPaleAle@users.noreply.github.com> * ⚙️🧹 Signed-off-by: ItalyPaleAle <43508+ItalyPaleAle@users.noreply.github.com> * Remove some github.com/pkg/errors Signed-off-by: ItalyPaleAle <43508+ItalyPaleAle@users.noreply.github.com> * make modtidy-all after rebase Signed-off-by: Bernd Verst <4535280+berndverst@users.noreply.github.com> Signed-off-by: ItalyPaleAle <43508+ItalyPaleAle@users.noreply.github.com> Signed-off-by: Bernd Verst <4535280+berndverst@users.noreply.github.com> Co-authored-by: Bernd Verst <4535280+berndverst@users.noreply.github.com> Co-authored-by: Dapr Bot <56698301+dapr-bot@users.noreply.github.com> --- .golangci.yml | 13 ++++---- bindings/mysql/mysql.go | 32 +++++++++---------- go.mod | 1 - go.sum | 2 -- state/aerospike/aerospike.go | 4 +-- state/alicloud/tablestore/tablestore.go | 4 +-- state/alicloud/tablestore/tablestore_test.go | 6 ++-- state/azure/blobstorage/blobstorage.go | 4 +-- state/cockroachdb/cockroachdb_access.go | 9 +++--- state/cockroachdb/cockroachdb_query.go | 5 ++- state/cockroachdb/cockroachdb_query_test.go | 4 +-- state/couchbase/couchbase.go | 4 +-- state/hashicorp/consul/consul.go | 4 +-- state/in-memory/in_memory_test.go | 6 ++-- state/mongodb/mongodb.go | 4 +-- state/postgresql/postgresdbaccess.go | 10 +++--- state/postgresql/postgresql_query.go | 5 ++- state/redis/redis.go | 4 +-- state/redis/redis_test.go | 10 +++--- state/rethinkdb/rethinkdb.go | 4 +-- state/sqlserver/sqlserver.go | 4 +-- state/zookeeper/zk.go | 4 +-- state/zookeeper/zk_test.go | 4 +-- .../state/azure/blobstorage/go.mod | 1 - .../state/azure/blobstorage/go.sum | 1 - tests/certification/state/mongodb/go.mod | 1 - tests/certification/state/mongodb/go.sum | 1 - tests/certification/state/postgresql/go.mod | 1 - tests/certification/state/postgresql/go.sum | 1 - tests/certification/state/redis/go.mod | 1 - tests/certification/state/redis/go.sum | 1 - tests/certification/state/sqlserver/go.mod | 1 - tests/certification/state/sqlserver/go.sum | 1 - 33 files changed, 69 insertions(+), 88 deletions(-) diff --git a/.golangci.yml b/.golangci.yml index 26ea4cffa..c10f1e9a3 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -116,13 +116,14 @@ linters-settings: # minimal occurrences count to trigger, 3 by default min-occurrences: 5 depguard: - list-type: blacklist + list-type: denylist include-go-root: false - packages: - - github.com/Sirupsen/logrus - packages-with-error-messages: - # specify an error message to output when a blacklisted package is used - github.com/Sirupsen/logrus: "must use github.com/dapr/kit/logger" + packages-with-error-message: + - "github.com/Sirupsen/logrus": "must use github.com/dapr/kit/logger" + - "github.com/agrea/ptr": "must use github.com/dapr/kit/ptr" + - "github.com/cenkalti/backoff": "must use github.com/cenkalti/backoff/v4" + - "github.com/cenkalti/backoff/v2": "must use github.com/cenkalti/backoff/v4" + - "github.com/cenkalti/backoff/v3": "must use github.com/cenkalti/backoff/v4" misspell: # Correct spellings using locale preferences for US or UK. # Default is to use a neutral variety of English. diff --git a/bindings/mysql/mysql.go b/bindings/mysql/mysql.go index 3fb6d9976..9769ee7c6 100644 --- a/bindings/mysql/mysql.go +++ b/bindings/mysql/mysql.go @@ -20,6 +20,7 @@ import ( "database/sql" "database/sql/driver" "encoding/json" + "errors" "fmt" "os" "reflect" @@ -27,7 +28,6 @@ import ( "time" "github.com/go-sql-driver/mysql" - "github.com/pkg/errors" "github.com/dapr/components-contrib/bindings" "github.com/dapr/kit/logger" @@ -117,7 +117,7 @@ func (m *Mysql) Init(metadata bindings.Metadata) error { err = db.Ping() if err != nil { - return errors.Wrap(err, "unable to ping the DB") + return fmt.Errorf("unable to ping the DB: %w", err) } m.db = db @@ -128,7 +128,7 @@ func (m *Mysql) Init(metadata bindings.Metadata) error { // Invoke handles all invoke operations. func (m *Mysql) Invoke(ctx context.Context, req *bindings.InvokeRequest) (*bindings.InvokeResponse, error) { if req == nil { - return nil, errors.Errorf("invoke request required") + return nil, errors.New("invoke request required") } if req.Operation == closeOperation { @@ -136,13 +136,13 @@ func (m *Mysql) Invoke(ctx context.Context, req *bindings.InvokeRequest) (*bindi } if req.Metadata == nil { - return nil, errors.Errorf("metadata required") + return nil, errors.New("metadata required") } m.logger.Debugf("operation: %v", req.Operation) s, ok := req.Metadata[commandSQLKey] if !ok || s == "" { - return nil, errors.Errorf("required metadata not set: %s", commandSQLKey) + return nil, fmt.Errorf("required metadata not set: %s", commandSQLKey) } startTime := time.Now() @@ -171,7 +171,7 @@ func (m *Mysql) Invoke(ctx context.Context, req *bindings.InvokeRequest) (*bindi resp.Data = d default: - return nil, errors.Errorf("invalid operation type: %s. Expected %s, %s, or %s", + return nil, fmt.Errorf("invalid operation type: %s. Expected %s, %s, or %s", req.Operation, execOperation, queryOperation, closeOperation) } @@ -201,11 +201,9 @@ func (m *Mysql) Close() error { } func (m *Mysql) query(ctx context.Context, sql string) ([]byte, error) { - m.logger.Debugf("query: %s", sql) - rows, err := m.db.QueryContext(ctx, sql) if err != nil { - return nil, errors.Wrapf(err, "error executing %s", sql) + return nil, fmt.Errorf("error executing query: %w", err) } defer func() { @@ -215,7 +213,7 @@ func (m *Mysql) query(ctx context.Context, sql string) ([]byte, error) { result, err := m.jsonify(rows) if err != nil { - return nil, errors.Wrapf(err, "error marshalling query result for %s", sql) + return nil, fmt.Errorf("error marshalling query result for query: %w", err) } return result, nil @@ -226,7 +224,7 @@ func (m *Mysql) exec(ctx context.Context, sql string) (int64, error) { res, err := m.db.ExecContext(ctx, sql) if err != nil { - return 0, errors.Wrapf(err, "error executing %s", sql) + return 0, fmt.Errorf("error executing query: %w", err) } return res.RowsAffected() @@ -237,7 +235,7 @@ func propertyToInt(props map[string]string, key string, setter func(int)) error if i, err := strconv.Atoi(v); err == nil { setter(i) } else { - return errors.Wrapf(err, "error converitng %s:%s to int", key, v) + return fmt.Errorf("error converting %s:%s to int: %w", key, v, err) } } @@ -249,7 +247,7 @@ func propertyToDuration(props map[string]string, key string, setter func(time.Du if d, err := time.ParseDuration(v); err == nil { setter(d) } else { - return errors.Wrapf(err, "error converitng %s:%s to time duration", key, v) + return fmt.Errorf("error converting %s:%s to duration: %w", key, v, err) } } @@ -258,14 +256,14 @@ func propertyToDuration(props map[string]string, key string, setter func(time.Du func initDB(url, pemPath string) (*sql.DB, error) { if _, err := mysql.ParseDSN(url); err != nil { - return nil, errors.Wrapf(err, "illegal Data Source Name (DNS) specified by %s", connectionURLKey) + return nil, fmt.Errorf("illegal Data Source Name (DSN) specified by %s", connectionURLKey) } if pemPath != "" { rootCertPool := x509.NewCertPool() pem, err := os.ReadFile(pemPath) if err != nil { - return nil, errors.Wrapf(err, "Error reading PEM file from %s", pemPath) + return nil, fmt.Errorf("error reading PEM file from %s: %w", pemPath, err) } ok := rootCertPool.AppendCertsFromPEM(pem) @@ -275,13 +273,13 @@ func initDB(url, pemPath string) (*sql.DB, error) { err = mysql.RegisterTLSConfig("custom", &tls.Config{RootCAs: rootCertPool, MinVersion: tls.VersionTLS12}) if err != nil { - return nil, errors.Wrap(err, "Error register TLS config") + return nil, fmt.Errorf("error register TLS config: %w", err) } } db, err := sql.Open("mysql", url) if err != nil { - return nil, errors.Wrap(err, "error opening DB connection") + return nil, fmt.Errorf("error opening DB connection: %w", err) } return db, nil diff --git a/go.mod b/go.mod index 97b7c970b..c6268b28b 100644 --- a/go.mod +++ b/go.mod @@ -28,7 +28,6 @@ require ( github.com/DATA-DOG/go-sqlmock v1.5.0 github.com/Shopify/sarama v1.37.2 github.com/aerospike/aerospike-client-go v4.5.2+incompatible - github.com/agrea/ptr v0.0.0-20180711073057-77a518d99b7b github.com/alibaba/sentinel-golang v1.0.4 github.com/alibabacloud-go/darabonba-openapi v0.2.1 github.com/alibabacloud-go/oos-20190601 v1.0.4 diff --git a/go.sum b/go.sum index baf8c92ac..886a0f3b3 100644 --- a/go.sum +++ b/go.sum @@ -208,8 +208,6 @@ github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia github.com/agiledragon/gomonkey v2.0.2+incompatible/go.mod h1:2NGfXu1a80LLr2cmWXGBDaHEjb1idR6+FVlX5T3D9hw= github.com/agnivade/levenshtein v1.1.1 h1:QY8M92nrzkmr798gCo3kmMyqXFzdQVpxLlGPRBij0P8= github.com/agnivade/levenshtein v1.1.1/go.mod h1:veldBMzWxcCG2ZvUTKD2kJNRdCk5hVbJomOvKkmgYbo= -github.com/agrea/ptr v0.0.0-20180711073057-77a518d99b7b h1:WMhlIaJkDgEQSVJQM06YV+cYUl1r5OY5//ijMXJNqtA= -github.com/agrea/ptr v0.0.0-20180711073057-77a518d99b7b/go.mod h1:Tie46d3UWzXpj+Fh9+DQTyaUxEpFBPOLXrnx7nxlKRo= github.com/ajg/form v1.5.1 h1:t9c7v8JUKu/XxOGBU0yjNpaMloxGEJhUkqFRq0ibGeU= github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= diff --git a/state/aerospike/aerospike.go b/state/aerospike/aerospike.go index 68f85654d..64235c344 100644 --- a/state/aerospike/aerospike.go +++ b/state/aerospike/aerospike.go @@ -22,11 +22,11 @@ import ( as "github.com/aerospike/aerospike-client-go" "github.com/aerospike/aerospike-client-go/types" - "github.com/agrea/ptr" jsoniter "github.com/json-iterator/go" "github.com/dapr/components-contrib/state" "github.com/dapr/kit/logger" + "github.com/dapr/kit/ptr" ) // metadata values. @@ -191,7 +191,7 @@ func (aspike *Aerospike) Get(req *state.GetRequest) (*state.GetResponse, error) return &state.GetResponse{ Data: value, - ETag: ptr.String(strconv.FormatUint(uint64(record.Generation), 10)), + ETag: ptr.Of(strconv.FormatUint(uint64(record.Generation), 10)), }, nil } diff --git a/state/alicloud/tablestore/tablestore.go b/state/alicloud/tablestore/tablestore.go index 6d5583d7c..d6a7bf97f 100644 --- a/state/alicloud/tablestore/tablestore.go +++ b/state/alicloud/tablestore/tablestore.go @@ -16,12 +16,12 @@ package tablestore import ( "encoding/json" - "github.com/agrea/ptr" "github.com/aliyun/aliyun-tablestore-go-sdk/tablestore" jsoniter "github.com/json-iterator/go" "github.com/dapr/components-contrib/state" "github.com/dapr/kit/logger" + "github.com/dapr/kit/ptr" ) const ( @@ -96,7 +96,7 @@ func (s *AliCloudTableStore) getResp(columns []*tablestore.AttributeColumn) *sta if column.ColumnName == stateValue { getResp.Data = unmarshal(column.Value) } else if column.ColumnName == sateEtag { - getResp.ETag = ptr.String(column.Value.(string)) + getResp.ETag = ptr.Of(column.Value.(string)) } } diff --git a/state/alicloud/tablestore/tablestore_test.go b/state/alicloud/tablestore/tablestore_test.go index d946a7be2..df3846a12 100644 --- a/state/alicloud/tablestore/tablestore_test.go +++ b/state/alicloud/tablestore/tablestore_test.go @@ -16,12 +16,12 @@ package tablestore import ( "testing" - "github.com/agrea/ptr" "github.com/golang/mock/gomock" "github.com/stretchr/testify/assert" "github.com/dapr/components-contrib/state" "github.com/dapr/kit/logger" + "github.com/dapr/kit/ptr" ) func TestTableStoreMetadata(t *testing.T) { @@ -61,7 +61,7 @@ func TestReadAndWrite(t *testing.T) { setReq := &state.SetRequest{ Key: "theFirstKey", Value: "value of key", - ETag: ptr.String("the etag"), + ETag: ptr.Of("the etag"), } err := store.Set(setReq) assert.Nil(t, err) @@ -81,7 +81,7 @@ func TestReadAndWrite(t *testing.T) { setReq := &state.SetRequest{ Key: "theSecondKey", Value: "1234", - ETag: ptr.String("the etag"), + ETag: ptr.Of("the etag"), } err := store.Set(setReq) assert.Nil(t, err) diff --git a/state/azure/blobstorage/blobstorage.go b/state/azure/blobstorage/blobstorage.go index cb70b95ea..e56e2c709 100644 --- a/state/azure/blobstorage/blobstorage.go +++ b/state/azure/blobstorage/blobstorage.go @@ -45,13 +45,13 @@ import ( "strings" "github.com/Azure/azure-storage-blob-go/azblob" - "github.com/agrea/ptr" jsoniter "github.com/json-iterator/go" azauth "github.com/dapr/components-contrib/internal/authentication/azure" mdutils "github.com/dapr/components-contrib/metadata" "github.com/dapr/components-contrib/state" "github.com/dapr/kit/logger" + "github.com/dapr/kit/ptr" ) const ( @@ -212,7 +212,7 @@ func (r *StateStore) readFile(ctx context.Context, req *state.GetRequest) (*stat return &state.GetResponse{ Data: data, - ETag: ptr.String(string(resp.ETag())), + ETag: ptr.Of(string(resp.ETag())), ContentType: &contentType, }, nil } diff --git a/state/cockroachdb/cockroachdb_access.go b/state/cockroachdb/cockroachdb_access.go index 9d85db381..d033031d3 100644 --- a/state/cockroachdb/cockroachdb_access.go +++ b/state/cockroachdb/cockroachdb_access.go @@ -21,13 +21,12 @@ import ( "fmt" "strconv" - "github.com/agrea/ptr" - "github.com/dapr/components-contrib/metadata" "github.com/dapr/components-contrib/state" "github.com/dapr/components-contrib/state/query" "github.com/dapr/components-contrib/state/utils" "github.com/dapr/kit/logger" + "github.com/dapr/kit/ptr" // Blank import for the underlying PostgreSQL driver. _ "github.com/jackc/pgx/v5/stdlib" @@ -207,7 +206,7 @@ func (p *cockroachDBAccess) Get(req *state.GetRequest) (*state.GetResponse, erro return &state.GetResponse{ Data: data, - ETag: ptr.String(strconv.Itoa(etag)), + ETag: ptr.Of(strconv.Itoa(etag)), Metadata: req.Metadata, ContentType: nil, }, nil @@ -215,7 +214,7 @@ func (p *cockroachDBAccess) Get(req *state.GetRequest) (*state.GetResponse, erro return &state.GetResponse{ Data: []byte(value), - ETag: ptr.String(strconv.Itoa(etag)), + ETag: ptr.Of(strconv.Itoa(etag)), Metadata: req.Metadata, ContentType: nil, }, nil @@ -348,7 +347,7 @@ func (p *cockroachDBAccess) Query(req *state.QueryRequest) (*state.QueryResponse query: "", params: []interface{}{}, limit: 0, - skip: ptr.Int64(0), + skip: ptr.Of[int64](0), } qbuilder := query.NewQueryBuilder(stateQuery) if err := qbuilder.BuildQuery(&req.Query); err != nil { diff --git a/state/cockroachdb/cockroachdb_query.go b/state/cockroachdb/cockroachdb_query.go index 5fffb006a..3631b58ac 100644 --- a/state/cockroachdb/cockroachdb_query.go +++ b/state/cockroachdb/cockroachdb_query.go @@ -19,11 +19,10 @@ import ( "strconv" "strings" - "github.com/agrea/ptr" - "github.com/dapr/components-contrib/state" "github.com/dapr/components-contrib/state/query" "github.com/dapr/kit/logger" + "github.com/dapr/kit/ptr" ) type Query struct { @@ -153,7 +152,7 @@ func (q *Query) execute(logger logger.Logger, db *sql.DB) ([]state.QueryItem, st result := state.QueryItem{ Key: key, Data: data, - ETag: ptr.String(strconv.Itoa(etag)), + ETag: ptr.Of(strconv.Itoa(etag)), Error: "", ContentType: nil, } diff --git a/state/cockroachdb/cockroachdb_query_test.go b/state/cockroachdb/cockroachdb_query_test.go index 34b5c9c94..73e185332 100644 --- a/state/cockroachdb/cockroachdb_query_test.go +++ b/state/cockroachdb/cockroachdb_query_test.go @@ -18,10 +18,10 @@ import ( "os" "testing" - "github.com/agrea/ptr" "github.com/stretchr/testify/assert" "github.com/dapr/components-contrib/state/query" + "github.com/dapr/kit/ptr" ) func TestPostgresqlQueryBuildQuery(t *testing.T) { @@ -67,7 +67,7 @@ func TestPostgresqlQueryBuildQuery(t *testing.T) { query: "", params: nil, limit: 0, - skip: ptr.Int64(0), + skip: ptr.Of[int64](0), } qbuilder := query.NewQueryBuilder(stateQuery) err = qbuilder.BuildQuery(&storeQuery) diff --git a/state/couchbase/couchbase.go b/state/couchbase/couchbase.go index d3e1a14a3..317886515 100644 --- a/state/couchbase/couchbase.go +++ b/state/couchbase/couchbase.go @@ -18,13 +18,13 @@ import ( "fmt" "strconv" - "github.com/agrea/ptr" jsoniter "github.com/json-iterator/go" "gopkg.in/couchbase/gocb.v1" "github.com/dapr/components-contrib/state" "github.com/dapr/components-contrib/state/utils" "github.com/dapr/kit/logger" + "github.com/dapr/kit/ptr" ) const ( @@ -201,7 +201,7 @@ func (cbs *Couchbase) Get(req *state.GetRequest) (*state.GetResponse, error) { return &state.GetResponse{ Data: data.([]byte), - ETag: ptr.String(strconv.FormatUint(uint64(cas), 10)), + ETag: ptr.Of(strconv.FormatUint(uint64(cas), 10)), }, nil } diff --git a/state/hashicorp/consul/consul.go b/state/hashicorp/consul/consul.go index b16e78b2f..5680d15a2 100644 --- a/state/hashicorp/consul/consul.go +++ b/state/hashicorp/consul/consul.go @@ -17,12 +17,12 @@ import ( "encoding/json" "fmt" - "github.com/agrea/ptr" "github.com/hashicorp/consul/api" "github.com/pkg/errors" "github.com/dapr/components-contrib/state" "github.com/dapr/kit/logger" + "github.com/dapr/kit/ptr" ) // Consul is a state store implementation for HashiCorp Consul. @@ -119,7 +119,7 @@ func (c *Consul) Get(req *state.GetRequest) (*state.GetResponse, error) { return &state.GetResponse{ Data: resp.Value, - ETag: ptr.String(queryMeta.LastContentHash), + ETag: ptr.Of(queryMeta.LastContentHash), }, nil } diff --git a/state/in-memory/in_memory_test.go b/state/in-memory/in_memory_test.go index 8a29c31ed..23625279e 100644 --- a/state/in-memory/in_memory_test.go +++ b/state/in-memory/in_memory_test.go @@ -17,11 +17,11 @@ import ( "testing" "time" - "github.com/agrea/ptr" "github.com/golang/mock/gomock" "github.com/stretchr/testify/assert" "github.com/dapr/kit/logger" + "github.com/dapr/kit/ptr" "github.com/dapr/components-contrib/state" ) @@ -41,7 +41,7 @@ func TestReadAndWrite(t *testing.T) { setReq := &state.SetRequest{ Key: keyA, Value: valueA, - ETag: ptr.String("the etag"), + ETag: ptr.Of("the etag"), } err := store.Set(setReq) assert.Nil(t, err) @@ -82,7 +82,7 @@ func TestReadAndWrite(t *testing.T) { setReq := &state.SetRequest{ Key: "theSecondKey", Value: "1234", - ETag: ptr.String("the etag"), + ETag: ptr.Of("the etag"), } err := store.Set(setReq) assert.Nil(t, err) diff --git a/state/mongodb/mongodb.go b/state/mongodb/mongodb.go index f4abc97e5..1a99293e4 100644 --- a/state/mongodb/mongodb.go +++ b/state/mongodb/mongodb.go @@ -23,7 +23,6 @@ import ( "strconv" "time" - "github.com/agrea/ptr" "github.com/google/uuid" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" @@ -35,6 +34,7 @@ import ( "github.com/dapr/components-contrib/state" "github.com/dapr/components-contrib/state/query" "github.com/dapr/kit/logger" + "github.com/dapr/kit/ptr" ) const ( @@ -259,7 +259,7 @@ func (m *MongoDB) Get(req *state.GetRequest) (*state.GetResponse, error) { return &state.GetResponse{ Data: data, - ETag: ptr.String(result.Etag), + ETag: ptr.Of(result.Etag), }, nil } diff --git a/state/postgresql/postgresdbaccess.go b/state/postgresql/postgresdbaccess.go index 16bb36874..9cdca16b7 100644 --- a/state/postgresql/postgresdbaccess.go +++ b/state/postgresql/postgresdbaccess.go @@ -21,13 +21,11 @@ import ( "strconv" "time" - "github.com/agrea/ptr" - "github.com/pkg/errors" - "github.com/dapr/components-contrib/state" "github.com/dapr/components-contrib/state/query" "github.com/dapr/components-contrib/state/utils" "github.com/dapr/kit/logger" + "github.com/dapr/kit/ptr" // Blank import for the underlying PostgreSQL driver. _ "github.com/jackc/pgx/v5/stdlib" @@ -232,14 +230,14 @@ func (p *postgresDBAccess) Get(req *state.GetRequest) (*state.GetResponse, error return &state.GetResponse{ Data: data, - ETag: ptr.String(strconv.Itoa(etag)), + ETag: ptr.Of(strconv.Itoa(etag)), Metadata: req.Metadata, }, nil } return &state.GetResponse{ Data: []byte(value), - ETag: ptr.String(strconv.Itoa(etag)), + ETag: ptr.Of(strconv.Itoa(etag)), Metadata: req.Metadata, }, nil } @@ -458,7 +456,7 @@ func propertyToDuration(props map[string]string, key string, setter func(time.Du if d, err := time.ParseDuration(v); err == nil { setter(d) } else { - return errors.Wrapf(err, "error converitng %s:%s to time duration", key, v) + return fmt.Errorf("error converitng %s:%s to time duration: %w", key, v, err) } } diff --git a/state/postgresql/postgresql_query.go b/state/postgresql/postgresql_query.go index b18866119..833618a6b 100644 --- a/state/postgresql/postgresql_query.go +++ b/state/postgresql/postgresql_query.go @@ -20,11 +20,10 @@ import ( "strconv" "strings" - "github.com/agrea/ptr" - "github.com/dapr/components-contrib/state" "github.com/dapr/components-contrib/state/query" "github.com/dapr/kit/logger" + "github.com/dapr/kit/ptr" ) type Query struct { @@ -159,7 +158,7 @@ func (q *Query) execute(logger logger.Logger, db *sql.DB) ([]state.QueryItem, st result := state.QueryItem{ Key: key, Data: data, - ETag: ptr.String(strconv.Itoa(etag)), + ETag: ptr.Of(strconv.Itoa(etag)), } ret = append(ret, result) } diff --git a/state/redis/redis.go b/state/redis/redis.go index 3ff7c55fe..03c47fc88 100644 --- a/state/redis/redis.go +++ b/state/redis/redis.go @@ -19,7 +19,6 @@ import ( "strconv" "strings" - "github.com/agrea/ptr" "github.com/go-redis/redis/v8" jsoniter "github.com/json-iterator/go" @@ -30,6 +29,7 @@ import ( "github.com/dapr/components-contrib/state/query" "github.com/dapr/components-contrib/state/utils" "github.com/dapr/kit/logger" + "github.com/dapr/kit/ptr" ) const ( @@ -476,7 +476,7 @@ func (r *StateStore) getKeyVersion(vals []interface{}) (data string, version *st seenData = true case "version": versionVal, _ := strconv.Unquote(fmt.Sprintf("%q", vals[i+1])) - version = ptr.String(versionVal) + version = ptr.Of(versionVal) seenVersion = true } } diff --git a/state/redis/redis_test.go b/state/redis/redis_test.go index fc99bd7a4..c90eeca17 100644 --- a/state/redis/redis_test.go +++ b/state/redis/redis_test.go @@ -19,7 +19,6 @@ import ( "testing" "time" - "github.com/agrea/ptr" miniredis "github.com/alicebob/miniredis/v2" redis "github.com/go-redis/redis/v8" jsoniter "github.com/json-iterator/go" @@ -28,6 +27,7 @@ import ( rediscomponent "github.com/dapr/components-contrib/internal/component/redis" "github.com/dapr/components-contrib/state" "github.com/dapr/kit/logger" + "github.com/dapr/kit/ptr" ) func TestGetKeyVersion(t *testing.T) { @@ -36,7 +36,7 @@ func TestGetKeyVersion(t *testing.T) { key, ver, err := store.getKeyVersion([]interface{}{"data", "TEST_KEY", "version", "TEST_VER"}) assert.Equal(t, nil, err, "failed to read all fields") assert.Equal(t, "TEST_KEY", key, "failed to read key") - assert.Equal(t, ptr.String("TEST_VER"), ver, "failed to read version") + assert.Equal(t, ptr.Of("TEST_VER"), ver, "failed to read version") }) t.Run("With missing data", func(t *testing.T) { _, _, err := store.getKeyVersion([]interface{}{"version", "TEST_VER"}) @@ -50,7 +50,7 @@ func TestGetKeyVersion(t *testing.T) { key, ver, err := store.getKeyVersion([]interface{}{"version", "TEST_VER", "dragon", "TEST_DRAGON", "data", "TEST_KEY"}) assert.Equal(t, nil, err, "failed to read all fields") assert.Equal(t, "TEST_KEY", key, "failed to read key") - assert.Equal(t, ptr.String("TEST_VER"), ver, "failed to read version") + assert.Equal(t, ptr.Of("TEST_VER"), ver, "failed to read version") }) t.Run("With no fields", func(t *testing.T) { _, _, err := store.getKeyVersion([]interface{}{}) @@ -245,7 +245,7 @@ func TestTransactionalUpsert(t *testing.T) { vals := res.([]interface{}) data, version, err := ss.getKeyVersion(vals) assert.Equal(t, nil, err) - assert.Equal(t, ptr.String("1"), version) + assert.Equal(t, ptr.Of("1"), version) assert.Equal(t, `"deathstar"`, data) res, err = c.Do(context.Background(), "TTL", "weapon").Result() @@ -394,7 +394,7 @@ func TestRequestsWithGlobalTTL(t *testing.T) { vals := res.([]interface{}) data, version, err := ss.getKeyVersion(vals) assert.Equal(t, nil, err) - assert.Equal(t, ptr.String("1"), version) + assert.Equal(t, ptr.Of("1"), version) assert.Equal(t, `"deathstar"`, data) res, err = c.Do(context.Background(), "TTL", "weapon").Result() diff --git a/state/rethinkdb/rethinkdb.go b/state/rethinkdb/rethinkdb.go index 9a43389b4..6db3044b8 100644 --- a/state/rethinkdb/rethinkdb.go +++ b/state/rethinkdb/rethinkdb.go @@ -20,12 +20,12 @@ import ( "strings" "time" - "github.com/agrea/ptr" r "github.com/dancannon/gorethink" "github.com/pkg/errors" "github.com/dapr/components-contrib/state" "github.com/dapr/kit/logger" + "github.com/dapr/kit/ptr" ) const ( @@ -171,7 +171,7 @@ func (s *RethinkDB) Get(req *state.GetRequest) (*state.GetResponse, error) { return nil, errors.Wrap(err, "error parsing database content") } - resp := &state.GetResponse{ETag: ptr.String(doc.Hash)} + resp := &state.GetResponse{ETag: ptr.Of(doc.Hash)} b, ok := doc.Data.([]byte) if ok { resp.Data = b diff --git a/state/sqlserver/sqlserver.go b/state/sqlserver/sqlserver.go index 7caeff835..1bddd3a8f 100644 --- a/state/sqlserver/sqlserver.go +++ b/state/sqlserver/sqlserver.go @@ -22,12 +22,12 @@ import ( "strconv" "unicode" - "github.com/agrea/ptr" mssql "github.com/denisenkom/go-mssqldb" "github.com/dapr/components-contrib/state" "github.com/dapr/components-contrib/state/utils" "github.com/dapr/kit/logger" + "github.com/dapr/kit/ptr" ) // KeyType defines type of the table identifier. @@ -540,7 +540,7 @@ func (s *SQLServer) Get(req *state.GetRequest) (*state.GetResponse, error) { return &state.GetResponse{ Data: []byte(data), - ETag: ptr.String(etag), + ETag: ptr.Of(etag), }, nil } diff --git a/state/zookeeper/zk.go b/state/zookeeper/zk.go index 3914f0c26..8cb0ebf60 100644 --- a/state/zookeeper/zk.go +++ b/state/zookeeper/zk.go @@ -20,13 +20,13 @@ import ( "strings" "time" - "github.com/agrea/ptr" "github.com/hashicorp/go-multierror" jsoniter "github.com/json-iterator/go" "github.com/samuel/go-zookeeper/zk" "github.com/dapr/components-contrib/state" "github.com/dapr/kit/logger" + "github.com/dapr/kit/ptr" ) const ( @@ -173,7 +173,7 @@ func (s *StateStore) Get(req *state.GetRequest) (*state.GetResponse, error) { return &state.GetResponse{ Data: value, - ETag: ptr.String(strconv.Itoa(int(stat.Version))), + ETag: ptr.Of(strconv.Itoa(int(stat.Version))), }, nil } diff --git a/state/zookeeper/zk_test.go b/state/zookeeper/zk_test.go index d25226db7..1a3077824 100644 --- a/state/zookeeper/zk_test.go +++ b/state/zookeeper/zk_test.go @@ -18,13 +18,13 @@ import ( "testing" "time" - "github.com/agrea/ptr" gomock "github.com/golang/mock/gomock" "github.com/hashicorp/go-multierror" "github.com/samuel/go-zookeeper/zk" "github.com/stretchr/testify/assert" "github.com/dapr/components-contrib/state" + "github.com/dapr/kit/ptr" ) //go:generate mockgen -package zookeeper -source zk.go -destination zk_mock.go @@ -83,7 +83,7 @@ func TestGet(t *testing.T) { res, err := s.Get(&state.GetRequest{Key: "foo"}) assert.NotNil(t, res, "Key must be exists") assert.Equal(t, "bar", string(res.Data), "Value must be equals") - assert.Equal(t, ptr.String("123"), res.ETag, "ETag must be equals") + assert.Equal(t, ptr.Of("123"), res.ETag, "ETag must be equals") assert.NoError(t, err, "Key must be exists") }) diff --git a/tests/certification/state/azure/blobstorage/go.mod b/tests/certification/state/azure/blobstorage/go.mod index afd11f81c..9109348cc 100644 --- a/tests/certification/state/azure/blobstorage/go.mod +++ b/tests/certification/state/azure/blobstorage/go.mod @@ -31,7 +31,6 @@ require ( github.com/Azure/go-autorest/tracing v0.6.0 // indirect github.com/AzureAD/microsoft-authentication-library-for-go v0.5.1 // indirect github.com/PuerkitoBio/purell v1.2.0 // indirect - github.com/agrea/ptr v0.0.0-20180711073057-77a518d99b7b // indirect github.com/andybalholm/brotli v1.0.4 // indirect github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20220418222510-f25a4f6275ed // indirect github.com/armon/go-metrics v0.4.1 // indirect diff --git a/tests/certification/state/azure/blobstorage/go.sum b/tests/certification/state/azure/blobstorage/go.sum index bdb59ddd5..46df2c8f8 100644 --- a/tests/certification/state/azure/blobstorage/go.sum +++ b/tests/certification/state/azure/blobstorage/go.sum @@ -96,7 +96,6 @@ github.com/PuerkitoBio/purell v1.2.0 h1:/Jdm5QfyM8zdlqT6WVZU4cfP23sot6CEHA4CS49E github.com/PuerkitoBio/purell v1.2.0/go.mod h1:OhLRTaaIzhvIyofkJfB24gokC7tM42Px5UhoT32THBk= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/agrea/ptr v0.0.0-20180711073057-77a518d99b7b h1:WMhlIaJkDgEQSVJQM06YV+cYUl1r5OY5//ijMXJNqtA= -github.com/agrea/ptr v0.0.0-20180711073057-77a518d99b7b/go.mod h1:Tie46d3UWzXpj+Fh9+DQTyaUxEpFBPOLXrnx7nxlKRo= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= diff --git a/tests/certification/state/mongodb/go.mod b/tests/certification/state/mongodb/go.mod index d026b36e1..eb2839cf1 100644 --- a/tests/certification/state/mongodb/go.mod +++ b/tests/certification/state/mongodb/go.mod @@ -15,7 +15,6 @@ require ( contrib.go.opencensus.io/exporter/prometheus v0.4.2 // indirect github.com/AdhityaRamadhanus/fasthttpcors v0.0.0-20170121111917-d4c07198763a // indirect github.com/PuerkitoBio/purell v1.2.0 // indirect - github.com/agrea/ptr v0.0.0-20180711073057-77a518d99b7b // indirect github.com/andybalholm/brotli v1.0.4 // indirect github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20220418222510-f25a4f6275ed // indirect github.com/armon/go-metrics v0.4.1 // indirect diff --git a/tests/certification/state/mongodb/go.sum b/tests/certification/state/mongodb/go.sum index 2210233f9..bd26f9a1f 100644 --- a/tests/certification/state/mongodb/go.sum +++ b/tests/certification/state/mongodb/go.sum @@ -44,7 +44,6 @@ github.com/PuerkitoBio/purell v1.2.0 h1:/Jdm5QfyM8zdlqT6WVZU4cfP23sot6CEHA4CS49E github.com/PuerkitoBio/purell v1.2.0/go.mod h1:OhLRTaaIzhvIyofkJfB24gokC7tM42Px5UhoT32THBk= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/agrea/ptr v0.0.0-20180711073057-77a518d99b7b h1:WMhlIaJkDgEQSVJQM06YV+cYUl1r5OY5//ijMXJNqtA= -github.com/agrea/ptr v0.0.0-20180711073057-77a518d99b7b/go.mod h1:Tie46d3UWzXpj+Fh9+DQTyaUxEpFBPOLXrnx7nxlKRo= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= diff --git a/tests/certification/state/postgresql/go.mod b/tests/certification/state/postgresql/go.mod index 181bdcf50..3c5255b8b 100644 --- a/tests/certification/state/postgresql/go.mod +++ b/tests/certification/state/postgresql/go.mod @@ -15,7 +15,6 @@ require ( contrib.go.opencensus.io/exporter/prometheus v0.4.2 // indirect github.com/AdhityaRamadhanus/fasthttpcors v0.0.0-20170121111917-d4c07198763a // indirect github.com/PuerkitoBio/purell v1.2.0 // indirect - github.com/agrea/ptr v0.0.0-20180711073057-77a518d99b7b // indirect github.com/andybalholm/brotli v1.0.4 // indirect github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20220418222510-f25a4f6275ed // indirect github.com/armon/go-metrics v0.4.1 // indirect diff --git a/tests/certification/state/postgresql/go.sum b/tests/certification/state/postgresql/go.sum index 896f5f48c..f30ac73a9 100644 --- a/tests/certification/state/postgresql/go.sum +++ b/tests/certification/state/postgresql/go.sum @@ -45,7 +45,6 @@ github.com/PuerkitoBio/purell v1.2.0 h1:/Jdm5QfyM8zdlqT6WVZU4cfP23sot6CEHA4CS49E github.com/PuerkitoBio/purell v1.2.0/go.mod h1:OhLRTaaIzhvIyofkJfB24gokC7tM42Px5UhoT32THBk= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/agrea/ptr v0.0.0-20180711073057-77a518d99b7b h1:WMhlIaJkDgEQSVJQM06YV+cYUl1r5OY5//ijMXJNqtA= -github.com/agrea/ptr v0.0.0-20180711073057-77a518d99b7b/go.mod h1:Tie46d3UWzXpj+Fh9+DQTyaUxEpFBPOLXrnx7nxlKRo= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= diff --git a/tests/certification/state/redis/go.mod b/tests/certification/state/redis/go.mod index da1120963..1d941ed95 100644 --- a/tests/certification/state/redis/go.mod +++ b/tests/certification/state/redis/go.mod @@ -17,7 +17,6 @@ require ( contrib.go.opencensus.io/exporter/prometheus v0.4.2 // indirect github.com/AdhityaRamadhanus/fasthttpcors v0.0.0-20170121111917-d4c07198763a // indirect github.com/PuerkitoBio/purell v1.2.0 // indirect - github.com/agrea/ptr v0.0.0-20180711073057-77a518d99b7b // indirect github.com/andybalholm/brotli v1.0.4 // indirect github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20220418222510-f25a4f6275ed // indirect github.com/armon/go-metrics v0.4.1 // indirect diff --git a/tests/certification/state/redis/go.sum b/tests/certification/state/redis/go.sum index 150473901..f9e4d82bd 100644 --- a/tests/certification/state/redis/go.sum +++ b/tests/certification/state/redis/go.sum @@ -44,7 +44,6 @@ github.com/PuerkitoBio/purell v1.2.0 h1:/Jdm5QfyM8zdlqT6WVZU4cfP23sot6CEHA4CS49E github.com/PuerkitoBio/purell v1.2.0/go.mod h1:OhLRTaaIzhvIyofkJfB24gokC7tM42Px5UhoT32THBk= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/agrea/ptr v0.0.0-20180711073057-77a518d99b7b h1:WMhlIaJkDgEQSVJQM06YV+cYUl1r5OY5//ijMXJNqtA= -github.com/agrea/ptr v0.0.0-20180711073057-77a518d99b7b/go.mod h1:Tie46d3UWzXpj+Fh9+DQTyaUxEpFBPOLXrnx7nxlKRo= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= diff --git a/tests/certification/state/sqlserver/go.mod b/tests/certification/state/sqlserver/go.mod index 4c7f1513f..7a073440e 100644 --- a/tests/certification/state/sqlserver/go.mod +++ b/tests/certification/state/sqlserver/go.mod @@ -15,7 +15,6 @@ require ( contrib.go.opencensus.io/exporter/prometheus v0.4.2 // indirect github.com/AdhityaRamadhanus/fasthttpcors v0.0.0-20170121111917-d4c07198763a // indirect github.com/PuerkitoBio/purell v1.2.0 // indirect - github.com/agrea/ptr v0.0.0-20180711073057-77a518d99b7b // indirect github.com/andybalholm/brotli v1.0.4 // indirect github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20220418222510-f25a4f6275ed // indirect github.com/armon/go-metrics v0.4.1 // indirect diff --git a/tests/certification/state/sqlserver/go.sum b/tests/certification/state/sqlserver/go.sum index fde5ee6cb..6d2742716 100644 --- a/tests/certification/state/sqlserver/go.sum +++ b/tests/certification/state/sqlserver/go.sum @@ -47,7 +47,6 @@ github.com/PuerkitoBio/purell v1.2.0 h1:/Jdm5QfyM8zdlqT6WVZU4cfP23sot6CEHA4CS49E github.com/PuerkitoBio/purell v1.2.0/go.mod h1:OhLRTaaIzhvIyofkJfB24gokC7tM42Px5UhoT32THBk= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/agrea/ptr v0.0.0-20180711073057-77a518d99b7b h1:WMhlIaJkDgEQSVJQM06YV+cYUl1r5OY5//ijMXJNqtA= -github.com/agrea/ptr v0.0.0-20180711073057-77a518d99b7b/go.mod h1:Tie46d3UWzXpj+Fh9+DQTyaUxEpFBPOLXrnx7nxlKRo= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= From 0e783e593e7174f4517ac087177618627ec29cf4 Mon Sep 17 00:00:00 2001 From: Lior Nabat Date: Fri, 4 Nov 2022 17:42:01 +0200 Subject: [PATCH 13/87] Update - adding conformance tests Signed-off-by: Lior Nabat --- .github/infrastructure/docker-compose-kubemq.yml | 8 ++++++++ .github/workflows/conformance.yml | 11 ++++++++--- tests/config/pubsub/tests.yml | 2 +- 3 files changed, 17 insertions(+), 4 deletions(-) create mode 100644 .github/infrastructure/docker-compose-kubemq.yml diff --git a/.github/infrastructure/docker-compose-kubemq.yml b/.github/infrastructure/docker-compose-kubemq.yml new file mode 100644 index 000000000..8aa740fe7 --- /dev/null +++ b/.github/infrastructure/docker-compose-kubemq.yml @@ -0,0 +1,8 @@ +version: '2' +services: + rabbitmq: + image: kubemq/kubemq-community:latest + ports: + - 8080:8080 + - 9090:9090 + - 50000:50000 diff --git a/.github/workflows/conformance.yml b/.github/workflows/conformance.yml index 6fa698b36..ca08e9dbf 100644 --- a/.github/workflows/conformance.yml +++ b/.github/workflows/conformance.yml @@ -70,6 +70,7 @@ jobs: - pubsub.redis - pubsub.kafka-wurstmeister - pubsub.kafka-confluent + - pubsub.kubemq - secretstores.kubernetes - secretstores.localenv - secretstores.localfile @@ -292,7 +293,7 @@ jobs: - name: Start Eclipse Mosquitto (MQTT) run: docker-compose -f ./.github/infrastructure/docker-compose-mosquitto.yml -p mosquitto up -d if: contains(matrix.component, 'mqtt-mosquitto') - + - name: Start EMQ X (MQTT) run: docker-compose -f ./.github/infrastructure/docker-compose-emqx.yml -p emqx up -d if: contains(matrix.component, 'mqtt-emqx') @@ -348,7 +349,7 @@ jobs: run: | docker-compose -f ./.github/infrastructure/docker-compose-cockroachdb.yml -p cockroachdb up -d if: contains(matrix.component, 'cockroachdb') - + - name: Start vault run: | docker-compose -f ./.github/infrastructure/docker-compose-hashicorp-vault.yml -p vault up -d @@ -359,6 +360,10 @@ jobs: docker-compose -f ./.github/infrastructure/docker-compose-rethinkdb.yml -p rethinkdb up -d if: contains(matrix.component, 'rethinkdb') + - name: Start kubemq + run: docker-compose -f ./.github/infrastructure/docker-compose-kubemq.yml -p kubemq up -d + if: contains(matrix.component, 'kubemq') + - name: Setup KinD test data if: contains(matrix.component, 'kubernetes') run: | @@ -369,7 +374,7 @@ jobs: uses: actions/setup-go@v3 with: go-version: '^1.19' - + - name: Download Go dependencies run: | go mod download diff --git a/tests/config/pubsub/tests.yml b/tests/config/pubsub/tests.yml index 934c2af6d..70ecceff8 100644 --- a/tests/config/pubsub/tests.yml +++ b/tests/config/pubsub/tests.yml @@ -81,4 +81,4 @@ components: config: checkInOrderProcessing: false - component: kubemq - allOperations: true + operations: ["publish", "subscribe", "multiplehandlers"] From ede060959a0a1deb1e7980aac6a4f5199b31e6a2 Mon Sep 17 00:00:00 2001 From: Bernd Verst <4535280+berndverst@users.noreply.github.com> Date: Sat, 5 Nov 2022 15:36:44 -0700 Subject: [PATCH 14/87] Refactors all state store to standardize metadata parsing (#2257) --- configuration/redis/metadata.go | 14 +- configuration/redis/redis.go | 50 +++--- configuration/redis/redis_test.go | 14 +- metadata/utils.go | 78 ++++++++- metadata/utils_test.go | 113 +++++++++++++ state/aerospike/aerospike.go | 51 +++--- state/aerospike/aerospike_test.go | 10 +- state/alicloud/tablestore/tablestore.go | 25 ++- state/aws/dynamodb/dynamodb.go | 27 ++- state/azure/blobstorage/blobstorage.go | 35 ++-- state/azure/blobstorage/blobstorage_test.go | 4 +- state/azure/cosmosdb/cosmosdb.go | 25 +-- state/azure/tablestorage/tablestorage.go | 78 ++++----- state/azure/tablestorage/tablestorage_test.go | 14 +- state/cassandra/cassandra.go | 111 ++++++------- state/cassandra/cassandra_test.go | 36 ++-- state/cockroachdb/cockroachdb.go | 10 ++ state/cockroachdb/cockroachdb_access.go | 36 +++- state/couchbase/couchbase.go | 77 ++++++--- state/couchbase/couchbase_test.go | 20 ++- state/gcp/firestore/firestore.go | 70 ++++---- state/hashicorp/consul/consul.go | 24 +-- state/hazelcast/hazelcast.go | 43 +++-- state/hazelcast/hazelcast_test.go | 9 +- state/in-memory/in_memory.go | 5 + state/jetstream/jetstream.go | 54 +++--- state/memcached/memcached.go | 54 +++--- state/memcached/memcached_test.go | 18 +- state/mongodb/mongodb.go | 116 +++++-------- state/mongodb/mongodb_test.go | 16 +- state/mysql/mysql.go | 61 ++++--- state/oci/objectstorage/objectstorage.go | 157 ++++++++---------- state/oci/objectstorage/objectstorage_test.go | 23 +-- state/oracledatabase/oracledatabase.go | 9 + state/oracledatabase/oracledatabaseaccess.go | 31 +++- state/postgresql/postgresdbaccess.go | 54 +++--- state/postgresql/postgresql.go | 10 ++ .../postgresql/postgresql_integration_test.go | 4 +- state/postgresql/postgresql_query.go | 2 +- state/redis/redis.go | 8 + state/redis/redis_test.go | 17 ++ state/rethinkdb/rethinkdb.go | 100 ++--------- state/rethinkdb/rethinkdb_test.go | 4 +- state/sqlserver/sqlserver.go | 146 ++++++++-------- state/sqlserver/sqlserver_test.go | 5 - state/store.go | 1 + state/store_test.go | 8 + state/zookeeper/zk.go | 22 ++- .../bindings/alicloud/dubbo/go.mod | 2 + .../bindings/alicloud/dubbo/go.sum | 5 +- .../bindings/alicloud/nacos/go.mod | 2 + .../bindings/alicloud/nacos/go.sum | 5 +- .../bindings/azure/blobstorage/go.mod | 2 + .../bindings/azure/blobstorage/go.sum | 5 +- .../bindings/azure/cosmosdb/go.mod | 2 + .../bindings/azure/cosmosdb/go.sum | 5 +- .../bindings/azure/eventhubs/go.mod | 2 + .../bindings/azure/eventhubs/go.sum | 5 +- .../bindings/azure/servicebusqueues/go.mod | 2 + .../bindings/azure/servicebusqueues/go.sum | 5 +- .../bindings/azure/storagequeues/go.mod | 2 + .../bindings/azure/storagequeues/go.sum | 5 +- tests/certification/bindings/kafka/go.mod | 2 + tests/certification/bindings/kafka/go.sum | 5 +- .../bindings/localstorage/go.mod | 2 + .../bindings/localstorage/go.sum | 5 +- tests/certification/bindings/postgres/go.mod | 2 + tests/certification/bindings/postgres/go.sum | 5 +- tests/certification/bindings/rabbitmq/go.mod | 2 + tests/certification/bindings/rabbitmq/go.sum | 5 +- tests/certification/bindings/redis/go.mod | 2 + tests/certification/bindings/redis/go.sum | 5 +- tests/certification/go.mod | 2 + tests/certification/go.sum | 5 +- .../pubsub/azure/eventhubs/go.mod | 2 + .../pubsub/azure/eventhubs/go.sum | 5 +- .../pubsub/azure/servicebus/topics/go.mod | 2 + .../pubsub/azure/servicebus/topics/go.sum | 5 +- tests/certification/pubsub/kafka/go.mod | 2 + tests/certification/pubsub/kafka/go.sum | 5 +- tests/certification/pubsub/mqtt/go.mod | 2 + tests/certification/pubsub/mqtt/go.sum | 5 +- tests/certification/pubsub/rabbitmq/go.mod | 2 + tests/certification/pubsub/rabbitmq/go.sum | 5 +- .../secretstores/azure/keyvault/go.mod | 2 + .../secretstores/azure/keyvault/go.sum | 5 +- .../secretstores/hashicorp/vault/go.mod | 2 + .../secretstores/hashicorp/vault/go.sum | 5 +- .../secretstores/local/env/go.mod | 2 + .../secretstores/local/env/go.sum | 5 +- .../secretstores/local/file/go.mod | 2 + .../secretstores/local/file/go.sum | 5 +- .../state/azure/blobstorage/go.mod | 2 + .../state/azure/blobstorage/go.sum | 5 +- .../certification/state/azure/cosmosdb/go.mod | 2 + .../certification/state/azure/cosmosdb/go.sum | 5 +- .../state/azure/tablestorage/go.mod | 2 + .../state/azure/tablestorage/go.sum | 5 +- tests/certification/state/cassandra/go.mod | 2 + tests/certification/state/cassandra/go.sum | 5 +- tests/certification/state/memcached/go.mod | 2 + tests/certification/state/memcached/go.sum | 5 +- tests/certification/state/mongodb/go.mod | 2 + tests/certification/state/mongodb/go.sum | 5 +- tests/certification/state/mysql/go.mod | 2 + tests/certification/state/mysql/go.sum | 5 +- tests/certification/state/postgresql/go.mod | 2 + tests/certification/state/postgresql/go.sum | 5 +- tests/certification/state/redis/go.mod | 2 + tests/certification/state/redis/go.sum | 5 +- tests/certification/state/sqlserver/go.mod | 2 + tests/certification/state/sqlserver/go.sum | 5 +- 112 files changed, 1217 insertions(+), 906 deletions(-) diff --git a/configuration/redis/metadata.go b/configuration/redis/metadata.go index d7d40a306..70d12036a 100644 --- a/configuration/redis/metadata.go +++ b/configuration/redis/metadata.go @@ -16,11 +16,11 @@ package redis import "time" type metadata struct { - host string - password string - sentinelMasterName string - maxRetries int - maxRetryBackoff time.Duration - enableTLS bool - failover bool + Host string + Password string + SentinelMasterName string + MaxRetries int + MaxRetryBackoff time.Duration + EnableTLS bool + Failover bool } diff --git a/configuration/redis/redis.go b/configuration/redis/redis.go index 53e2c73ed..4bb5e740c 100644 --- a/configuration/redis/redis.go +++ b/configuration/redis/redis.go @@ -78,40 +78,40 @@ func parseRedisMetadata(meta configuration.Metadata) (metadata, error) { m := metadata{} if val, ok := meta.Properties[host]; ok && val != "" { - m.host = val + m.Host = val } else { return m, errors.New("redis store error: missing host address") } if val, ok := meta.Properties[password]; ok && val != "" { - m.password = val + m.Password = val } - m.enableTLS = defaultEnableTLS + m.EnableTLS = defaultEnableTLS if val, ok := meta.Properties[enableTLS]; ok && val != "" { tls, err := strconv.ParseBool(val) if err != nil { return m, fmt.Errorf("redis store error: can't parse enableTLS field: %s", err) } - m.enableTLS = tls + m.EnableTLS = tls } - m.maxRetries = defaultMaxRetries + m.MaxRetries = defaultMaxRetries if val, ok := meta.Properties[maxRetries]; ok && val != "" { parsedVal, err := strconv.ParseInt(val, defaultBase, defaultBitSize) if err != nil { return m, fmt.Errorf("redis store error: can't parse maxRetries field: %s", err) } - m.maxRetries = int(parsedVal) + m.MaxRetries = int(parsedVal) } - m.maxRetryBackoff = defaultMaxRetryBackoff + m.MaxRetryBackoff = defaultMaxRetryBackoff if val, ok := meta.Properties[maxRetryBackoff]; ok && val != "" { parsedVal, err := strconv.ParseInt(val, defaultBase, defaultBitSize) if err != nil { return m, fmt.Errorf("redis store error: can't parse maxRetryBackoff field: %s", err) } - m.maxRetryBackoff = time.Duration(parsedVal) + m.MaxRetryBackoff = time.Duration(parsedVal) } if val, ok := meta.Properties[failover]; ok && val != "" { @@ -119,13 +119,13 @@ func parseRedisMetadata(meta configuration.Metadata) (metadata, error) { if err != nil { return m, fmt.Errorf("redis store error: can't parse failover field: %s", err) } - m.failover = failover + m.Failover = failover } // set the sentinelMasterName only with failover == true. - if m.failover { + if m.Failover { if val, ok := meta.Properties[sentinelMasterName]; ok && val != "" { - m.sentinelMasterName = val + m.SentinelMasterName = val } else { return m, errors.New("redis store error: missing sentinelMasterName") } @@ -142,14 +142,14 @@ func (r *ConfigurationStore) Init(metadata configuration.Metadata) error { } r.metadata = m - if r.metadata.failover { + if r.metadata.Failover { r.client = r.newFailoverClient(m) } else { r.client = r.newClient(m) } if _, err = r.client.Ping(context.TODO()).Result(); err != nil { - return fmt.Errorf("redis store: error connecting to redis at %s: %s", m.host, err) + return fmt.Errorf("redis store: error connecting to redis at %s: %s", m.Host, err) } r.replicas, err = r.getConnectedSlaves() @@ -159,18 +159,18 @@ func (r *ConfigurationStore) Init(metadata configuration.Metadata) error { func (r *ConfigurationStore) newClient(m metadata) *redis.Client { opts := &redis.Options{ - Addr: m.host, - Password: m.password, + Addr: m.Host, + Password: m.Password, DB: defaultDB, - MaxRetries: m.maxRetries, - MaxRetryBackoff: m.maxRetryBackoff, + MaxRetries: m.MaxRetries, + MaxRetryBackoff: m.MaxRetryBackoff, } // tell the linter to skip a check here. /* #nosec */ - if m.enableTLS { + if m.EnableTLS { opts.TLSConfig = &tls.Config{ - InsecureSkipVerify: m.enableTLS, + InsecureSkipVerify: m.EnableTLS, } } @@ -179,17 +179,17 @@ func (r *ConfigurationStore) newClient(m metadata) *redis.Client { func (r *ConfigurationStore) newFailoverClient(m metadata) *redis.Client { opts := &redis.FailoverOptions{ - MasterName: r.metadata.sentinelMasterName, - SentinelAddrs: []string{r.metadata.host}, + MasterName: r.metadata.SentinelMasterName, + SentinelAddrs: []string{r.metadata.Host}, DB: defaultDB, - MaxRetries: m.maxRetries, - MaxRetryBackoff: m.maxRetryBackoff, + MaxRetries: m.MaxRetries, + MaxRetryBackoff: m.MaxRetryBackoff, } /* #nosec */ - if m.enableTLS { + if m.EnableTLS { opts.TLSConfig = &tls.Config{ - InsecureSkipVerify: m.enableTLS, + InsecureSkipVerify: m.EnableTLS, } } diff --git a/configuration/redis/redis_test.go b/configuration/redis/redis_test.go index 10fa775ff..9975cdd66 100644 --- a/configuration/redis/redis_test.go +++ b/configuration/redis/redis_test.go @@ -264,13 +264,13 @@ func Test_parseRedisMetadata(t *testing.T) { }}, }, want: metadata{ - host: "testHost", - password: "testPassword", - enableTLS: true, - maxRetries: 10, - maxRetryBackoff: time.Second, - failover: true, - sentinelMasterName: "tesSentinelMasterName", + Host: "testHost", + Password: "testPassword", + EnableTLS: true, + MaxRetries: 10, + MaxRetryBackoff: time.Second, + Failover: true, + SentinelMasterName: "tesSentinelMasterName", }, }, } diff --git a/metadata/utils.go b/metadata/utils.go index 3c18a34d2..65d66691b 100644 --- a/metadata/utils.go +++ b/metadata/utils.go @@ -16,11 +16,16 @@ package metadata import ( "fmt" "math" + "reflect" "strconv" + "strings" "time" "github.com/mitchellh/mapstructure" "github.com/pkg/errors" + + "github.com/dapr/components-contrib/internal/utils" + "github.com/dapr/kit/ptr" ) const ( @@ -140,7 +145,10 @@ func GetMetadataProperty(props map[string]string, keys ...string) (val string, o func DecodeMetadata(input interface{}, result interface{}) error { decoder, err := mapstructure.NewDecoder(&mapstructure.DecoderConfig{ DecodeHook: mapstructure.ComposeDecodeHookFunc( - toTimeDurationHookFunc()), + toTimeDurationHookFunc(), + toTruthyBoolHookFunc(), + toStringArrayHookFunc(), + ), Metadata: nil, Result: result, WeaklyTypedInput: true, @@ -151,3 +159,71 @@ func DecodeMetadata(input interface{}, result interface{}) error { err = decoder.Decode(input) return err } + +func toTruthyBoolHookFunc() mapstructure.DecodeHookFunc { + return func( + f reflect.Type, + t reflect.Type, + data interface{}, + ) (interface{}, error) { + if f == reflect.TypeOf("") && t == reflect.TypeOf(true) { + val := data.(string) + return utils.IsTruthy(val), nil + } + if f == reflect.TypeOf("") && t == reflect.TypeOf(reflect.TypeOf(ptr.Of(true))) { + val := data.(string) + return ptr.Of(utils.IsTruthy(val)), nil + } + return data, nil + } +} + +func toStringArrayHookFunc() mapstructure.DecodeHookFunc { + return func( + f reflect.Type, + t reflect.Type, + data interface{}, + ) (interface{}, error) { + if f == reflect.TypeOf("") && t == reflect.TypeOf([]string{}) { + val := data.(string) + return strings.Split(val, ","), nil + } + if f == reflect.TypeOf("") && t == reflect.TypeOf(ptr.Of([]string{})) { + val := data.(string) + return ptr.Of(strings.Split(val, ",")), nil + } + return data, nil + } +} + +// GetMetadataInfoFromStructType converts a struct to a map of field name (or struct tag) to field type. +// This is used to generate metadata documentation for components. +func GetMetadataInfoFromStructType(t reflect.Type, metadataMap *map[string]string) error { + // Return if not struct or pointer to struct. + if t.Kind() == reflect.Ptr { + t = t.Elem() + } + if t.Kind() != reflect.Struct { + return fmt.Errorf("not a struct: %s", t.Kind().String()) + } + + for i := 0; i < t.NumField(); i++ { + currentField := t.Field(i) + mapStructureTag := currentField.Tag.Get("mapstructure") + tags := strings.Split(mapStructureTag, ",") + numTags := len(tags) + if numTags > 1 && tags[numTags-1] == "squash" && currentField.Anonymous { + // traverse embedded struct + GetMetadataInfoFromStructType(currentField.Type, metadataMap) + continue + } + var fieldName string + if numTags > 0 && tags[0] != "" { + fieldName = tags[0] + } else { + fieldName = currentField.Name + } + (*metadataMap)[fieldName] = currentField.Type.String() + } + return nil +} diff --git a/metadata/utils_test.go b/metadata/utils_test.go index 0e55b0f0f..21ce8dc42 100644 --- a/metadata/utils_test.go +++ b/metadata/utils_test.go @@ -14,6 +14,7 @@ limitations under the License. package metadata import ( + "reflect" "testing" "time" @@ -124,4 +125,116 @@ func TestMetadataDecode(t *testing.T) { assert.Equal(t, 6*time.Minute, m.MyRegularDuration) assert.Equal(t, Duration{Duration: 3 * time.Second}, m.Myduration) }) + + t.Run("Test metadata decode hook for truthy values", func(t *testing.T) { + type testMetadata struct { + BoolPointer *bool + BoolPointerNotProvided *bool + BoolValueOn bool + BoolValue1 bool + BoolValueTrue bool + BoolValue0 bool + BoolValueFalse bool + BoolValueNonsense bool + } + + var m testMetadata + + testData := make(map[string]string) + testData["boolpointer"] = "on" + testData["boolvalueon"] = "on" + testData["boolvalue1"] = "1" + testData["boolvaluetrue"] = "true" + testData["boolvalue0"] = "0" + testData["boolvaluefalse"] = "false" + testData["boolvaluenonsense"] = "nonsense" + + err := DecodeMetadata(testData, &m) + assert.NoError(t, err) + assert.True(t, *m.BoolPointer) + assert.True(t, m.BoolValueOn) + assert.True(t, m.BoolValue1) + assert.True(t, m.BoolValueTrue) + assert.False(t, m.BoolValue0) + assert.False(t, m.BoolValueFalse) + assert.False(t, m.BoolValueNonsense) + assert.Nil(t, m.BoolPointerNotProvided) + }) + + t.Run("Test metadata decode for string arrays", func(t *testing.T) { + type testMetadata struct { + StringArray []string + StringArrayPointer *[]string + EmptyStringArray []string + EmptyStringArrayPointer *[]string + EmptyStringArrayWithComma []string + EmptyStringArrayPointerWithComma *[]string + StringArrayOneElement []string + StringArrayOneElementPointer *[]string + StringArrayOneElementWithComma []string + StringArrayOneElementPointerWithComma *[]string + } + + var m testMetadata + + testData := make(map[string]string) + testData["stringarray"] = "one,two,three" + testData["stringarraypointer"] = "one,two,three" + testData["emptystringarray"] = "" + testData["emptystringarraypointer"] = "" + testData["stringarrayoneelement"] = "test" + testData["stringarrayoneelementpointer"] = "test" + testData["stringarrayoneelementwithcomma"] = "test," + testData["stringarrayoneelementpointerwithcomma"] = "test," + testData["emptystringarraywithcomma"] = "," + testData["emptystringarraypointerwithcomma"] = "," + + err := DecodeMetadata(testData, &m) + assert.NoError(t, err) + assert.Equal(t, []string{"one", "two", "three"}, m.StringArray) + assert.Equal(t, []string{"one", "two", "three"}, *m.StringArrayPointer) + assert.Equal(t, []string{""}, m.EmptyStringArray) + assert.Equal(t, []string{""}, *m.EmptyStringArrayPointer) + assert.Equal(t, []string{"test"}, m.StringArrayOneElement) + assert.Equal(t, []string{"test"}, *m.StringArrayOneElementPointer) + assert.Equal(t, []string{"test", ""}, m.StringArrayOneElementWithComma) + assert.Equal(t, []string{"test", ""}, *m.StringArrayOneElementPointerWithComma) + assert.Equal(t, []string{"", ""}, m.EmptyStringArrayWithComma) + assert.Equal(t, []string{"", ""}, *m.EmptyStringArrayPointerWithComma) + }) +} + +func TestMetadataStructToStringMap(t *testing.T) { + t.Run("Test metadata struct to metadata info conversion", func(t *testing.T) { + type NestedStruct struct { + NestedStringCustom string `mapstructure:"nested_string_custom"` + NestedString string + } + + type testMetadata struct { + NestedStruct `mapstructure:",squash"` + Mystring string + Myduration Duration + Myinteger int + Myfloat64 float64 + Mybool *bool `json:",omitempty"` + MyRegularDuration time.Duration + SomethingWithCustomName string `mapstructure:"something_with_custom_name"` + } + m := testMetadata{} + metadatainfo := map[string]string{} + GetMetadataInfoFromStructType(reflect.TypeOf(m), &metadatainfo) + + assert.Equal(t, "string", metadatainfo["Mystring"]) + assert.Equal(t, "metadata.Duration", metadatainfo["Myduration"]) + assert.Equal(t, "int", metadatainfo["Myinteger"]) + assert.Equal(t, "float64", metadatainfo["Myfloat64"]) + assert.Equal(t, "*bool", metadatainfo["Mybool"]) + assert.Equal(t, "time.Duration", metadatainfo["MyRegularDuration"]) + assert.Equal(t, "string", metadatainfo["something_with_custom_name"]) + assert.NotContains(t, metadatainfo, "NestedStruct") + assert.NotContains(t, metadatainfo, "SomethingWithCustomName") + assert.Equal(t, "string", metadatainfo["nested_string_custom"]) + assert.Equal(t, "string", metadatainfo["NestedString"]) + }) } diff --git a/state/aerospike/aerospike.go b/state/aerospike/aerospike.go index 64235c344..12dec8998 100644 --- a/state/aerospike/aerospike.go +++ b/state/aerospike/aerospike.go @@ -17,6 +17,7 @@ import ( "encoding/json" "errors" "fmt" + "reflect" "strconv" "strings" @@ -24,17 +25,17 @@ import ( "github.com/aerospike/aerospike-client-go/types" jsoniter "github.com/json-iterator/go" + "github.com/dapr/components-contrib/metadata" "github.com/dapr/components-contrib/state" "github.com/dapr/kit/logger" "github.com/dapr/kit/ptr" ) -// metadata values. -const ( - hosts = "hosts" - namespace = "namespace" - set = "set" // optional -) +type aerospikeMetadata struct { + Hosts string + Namespace string + Set string // optional +} var ( errMissingHosts = errors.New("aerospike: value for 'hosts' missing") @@ -65,32 +66,37 @@ func NewAerospikeStateStore(logger logger.Logger) state.Store { return s } -func validateMetadata(metadata state.Metadata) error { - if metadata.Properties[hosts] == "" { - return errMissingHosts +func parseAndValidateMetadata(meta state.Metadata) (*aerospikeMetadata, error) { + var m aerospikeMetadata + decodeErr := metadata.DecodeMetadata(meta.Properties, &m) + if decodeErr != nil { + return nil, decodeErr } - if metadata.Properties[namespace] == "" { - return errMissingHosts + + if m.Hosts == "" { + return nil, errMissingHosts + } + if m.Namespace == "" { + return nil, errMissingHosts } // format is host1:port1,host2:port2 - hostsMeta := metadata.Properties[hosts] - _, err := parseHosts(hostsMeta) + _, err := parseHosts(m.Hosts) if err != nil { - return err + return nil, err } - return nil + return &m, nil } // Init does metadata and connection parsing. func (aspike *Aerospike) Init(metadata state.Metadata) error { - err := validateMetadata(metadata) + m, err := parseAndValidateMetadata(metadata) if err != nil { return err } - hostsMeta := metadata.Properties[hosts] + hostsMeta := m.Hosts hostPorts, _ := parseHosts(hostsMeta) c, err := as.NewClientWithPolicyAndHost(nil, hostPorts...) @@ -98,8 +104,8 @@ func (aspike *Aerospike) Init(metadata state.Metadata) error { return fmt.Errorf("aerospike: failed to connect %v", err) } aspike.client = c - aspike.namespace = metadata.Properties[namespace] - aspike.set = metadata.Properties[set] + aspike.namespace = m.Namespace + aspike.set = m.Set return nil } @@ -263,3 +269,10 @@ func convertETag(eTag string) (uint32, error) { return uint32(i), nil } + +func (aspike *Aerospike) GetComponentMetadata() map[string]string { + metadataStruct := aerospikeMetadata{} + metadataInfo := map[string]string{} + metadata.GetMetadataInfoFromStructType(reflect.TypeOf(metadataStruct), &metadataInfo) + return metadataInfo +} diff --git a/state/aerospike/aerospike_test.go b/state/aerospike/aerospike_test.go index fb0f17674..5ae1dbd4c 100644 --- a/state/aerospike/aerospike_test.go +++ b/state/aerospike/aerospike_test.go @@ -22,6 +22,12 @@ import ( "github.com/dapr/components-contrib/state" ) +const ( + hosts = "hosts" + namespace = "namespace" + set = "set" +) + func TestValidateMetadataForValidInputs(t *testing.T) { type testCase struct { name string @@ -45,7 +51,7 @@ func TestValidateMetadataForValidInputs(t *testing.T) { for _, test := range tests { t.Run(test.name, func(t *testing.T) { metadata := state.Metadata{Base: metadata.Base{Properties: test.properties}} - err := validateMetadata(metadata) + _, err := parseAndValidateMetadata(metadata) assert.Nil(t, err) }) } @@ -79,7 +85,7 @@ func TestValidateMetadataForInvalidInputs(t *testing.T) { for _, test := range tests { t.Run(test.name, func(t *testing.T) { metadata := state.Metadata{Base: metadata.Base{Properties: test.properties}} - err := validateMetadata(metadata) + _, err := parseAndValidateMetadata(metadata) assert.NotNil(t, err) }) } diff --git a/state/alicloud/tablestore/tablestore.go b/state/alicloud/tablestore/tablestore.go index d6a7bf97f..238e5433f 100644 --- a/state/alicloud/tablestore/tablestore.go +++ b/state/alicloud/tablestore/tablestore.go @@ -14,11 +14,12 @@ limitations under the License. package tablestore import ( - "encoding/json" + "reflect" "github.com/aliyun/aliyun-tablestore-go-sdk/tablestore" jsoniter "github.com/json-iterator/go" + "github.com/dapr/components-contrib/metadata" "github.com/dapr/components-contrib/state" "github.com/dapr/kit/logger" "github.com/dapr/kit/ptr" @@ -234,19 +235,10 @@ func (s *AliCloudTableStore) batchWrite(setReqs []state.SetRequest, deleteReqs [ return nil } -func (s *AliCloudTableStore) parse(metadata state.Metadata) (*tablestoreMetadata, error) { - b, err := json.Marshal(metadata.Properties) - if err != nil { - return nil, err - } - +func (s *AliCloudTableStore) parse(meta state.Metadata) (*tablestoreMetadata, error) { var m tablestoreMetadata - err = json.Unmarshal(b, &m) - if err != nil { - return nil, err - } - - return &m, nil + err := metadata.DecodeMetadata(meta.Properties, &m) + return &m, err } func (s *AliCloudTableStore) primaryKey(key string) *tablestore.PrimaryKey { @@ -255,3 +247,10 @@ func (s *AliCloudTableStore) primaryKey(key string) *tablestore.PrimaryKey { return pk } + +func (s *AliCloudTableStore) GetComponentMetadata() map[string]string { + metadataStruct := tablestoreMetadata{} + metadataInfo := map[string]string{} + metadata.GetMetadataInfoFromStructType(reflect.TypeOf(metadataStruct), &metadataInfo) + return metadataInfo +} diff --git a/state/aws/dynamodb/dynamodb.go b/state/aws/dynamodb/dynamodb.go index c163a7d80..ce26bfd27 100644 --- a/state/aws/dynamodb/dynamodb.go +++ b/state/aws/dynamodb/dynamodb.go @@ -16,8 +16,8 @@ package dynamodb import ( "crypto/rand" "encoding/binary" - "encoding/json" "fmt" + "reflect" "strconv" "time" @@ -28,6 +28,7 @@ import ( jsoniterator "github.com/json-iterator/go" awsAuth "github.com/dapr/components-contrib/internal/authentication/aws" + "github.com/dapr/components-contrib/metadata" "github.com/dapr/components-contrib/state" "github.com/dapr/kit/logger" ) @@ -284,22 +285,20 @@ func (d *StateStore) BulkDelete(req []state.DeleteRequest) error { return e } -func (d *StateStore) getDynamoDBMetadata(metadata state.Metadata) (*dynamoDBMetadata, error) { - b, err := json.Marshal(metadata.Properties) - if err != nil { - return nil, err - } +func (d *StateStore) GetComponentMetadata() map[string]string { + metadataStruct := dynamoDBMetadata{} + metadataInfo := map[string]string{} + metadata.GetMetadataInfoFromStructType(reflect.TypeOf(metadataStruct), &metadataInfo) + return metadataInfo +} - var meta dynamoDBMetadata - err = json.Unmarshal(b, &meta) - if err != nil { - return nil, err - } - if meta.Table == "" { +func (d *StateStore) getDynamoDBMetadata(meta state.Metadata) (*dynamoDBMetadata, error) { + var m dynamoDBMetadata + err := metadata.DecodeMetadata(meta.Properties, &m) + if m.Table == "" { return nil, fmt.Errorf("missing dynamodb table name") } - - return &meta, nil + return &m, err } func (d *StateStore) getClient(metadata *dynamoDBMetadata) (*dynamodb.DynamoDB, error) { diff --git a/state/azure/blobstorage/blobstorage.go b/state/azure/blobstorage/blobstorage.go index e56e2c709..b493ae162 100644 --- a/state/azure/blobstorage/blobstorage.go +++ b/state/azure/blobstorage/blobstorage.go @@ -42,6 +42,7 @@ import ( "io" "net" "net/url" + "reflect" "strings" "github.com/Azure/azure-storage-blob-go/azblob" @@ -75,8 +76,8 @@ type StateStore struct { } type blobStorageMetadata struct { - accountName string - containerName string + AccountName string + ContainerName string } // Init the connection to blob storage, optionally creates a blob container if it doesn't exist. @@ -86,7 +87,7 @@ func (r *StateStore) Init(metadata state.Metadata) error { return err } - credential, env, err := azauth.GetAzureStorageBlobCredentials(r.logger, meta.accountName, metadata.Properties) + credential, env, err := azauth.GetAzureStorageBlobCredentials(r.logger, meta.AccountName, metadata.Properties) if err != nil { return fmt.Errorf("invalid credentials with error: %s", err.Error()) } @@ -100,9 +101,9 @@ func (r *StateStore) Init(metadata state.Metadata) error { var URL *url.URL customEndpoint, ok := mdutils.GetMetadataProperty(metadata.Properties, azauth.StorageEndpointKeys...) if ok && customEndpoint != "" { - URL, err = url.Parse(fmt.Sprintf("%s/%s/%s", customEndpoint, meta.accountName, meta.containerName)) + URL, err = url.Parse(fmt.Sprintf("%s/%s/%s", customEndpoint, meta.AccountName, meta.ContainerName)) } else { - URL, err = url.Parse(fmt.Sprintf("https://%s.blob.%s/%s", meta.accountName, env.StorageEndpointSuffix, meta.containerName)) + URL, err = url.Parse(fmt.Sprintf("https://%s.blob.%s/%s", meta.AccountName, env.StorageEndpointSuffix, meta.ContainerName)) } if err != nil { return err @@ -119,7 +120,7 @@ func (r *StateStore) Init(metadata state.Metadata) error { r.logger.Debugf("error creating container: %s", err) r.containerURL = containerURL - r.logger.Debugf("using container '%s'", meta.containerName) + r.logger.Debugf("using container '%s'", meta.ContainerName) return nil } @@ -157,6 +158,13 @@ func (r *StateStore) Ping() error { return nil } +func (r *StateStore) GetComponentMetadata() map[string]string { + metadataStruct := blobStorageMetadata{} + metadataInfo := map[string]string{} + mdutils.GetMetadataInfoFromStructType(reflect.TypeOf(metadataStruct), &metadataInfo) + return metadataInfo +} + // NewAzureBlobStorageStore instance. func NewAzureBlobStorageStore(logger logger.Logger) state.Store { s := &StateStore{ @@ -169,22 +177,23 @@ func NewAzureBlobStorageStore(logger logger.Logger) state.Store { return s } -func getBlobStorageMetadata(metadata map[string]string) (*blobStorageMetadata, error) { - meta := blobStorageMetadata{} +func getBlobStorageMetadata(meta map[string]string) (*blobStorageMetadata, error) { + m := blobStorageMetadata{} + err := mdutils.DecodeMetadata(meta, &m) - if val, ok := mdutils.GetMetadataProperty(metadata, azauth.StorageAccountNameKeys...); ok && val != "" { - meta.accountName = val + if val, ok := mdutils.GetMetadataProperty(meta, azauth.StorageAccountNameKeys...); ok && val != "" { + m.AccountName = val } else { return nil, fmt.Errorf("missing or empty %s field from metadata", azauth.StorageAccountNameKeys[0]) } - if val, ok := mdutils.GetMetadataProperty(metadata, azauth.StorageContainerNameKeys...); ok && val != "" { - meta.containerName = val + if val, ok := mdutils.GetMetadataProperty(meta, azauth.StorageContainerNameKeys...); ok && val != "" { + m.ContainerName = val } else { return nil, fmt.Errorf("missing or empty %s field from metadata", azauth.StorageContainerNameKeys[0]) } - return &meta, nil + return &m, err } func (r *StateStore) readFile(ctx context.Context, req *state.GetRequest) (*state.GetResponse, error) { diff --git a/state/azure/blobstorage/blobstorage_test.go b/state/azure/blobstorage/blobstorage_test.go index 2aa666c91..f511239b1 100644 --- a/state/azure/blobstorage/blobstorage_test.go +++ b/state/azure/blobstorage/blobstorage_test.go @@ -73,8 +73,8 @@ func TestGetBlobStorageMetaData(t *testing.T) { meta, err := getBlobStorageMetadata(m) assert.Nil(t, err) - assert.Equal(t, "acc", meta.accountName) - assert.Equal(t, "dapr", meta.containerName) + assert.Equal(t, "acc", meta.AccountName) + assert.Equal(t, "dapr", meta.ContainerName) }) } diff --git a/state/azure/cosmosdb/cosmosdb.go b/state/azure/cosmosdb/cosmosdb.go index 3caf4b04e..045a8383e 100644 --- a/state/azure/cosmosdb/cosmosdb.go +++ b/state/azure/cosmosdb/cosmosdb.go @@ -20,6 +20,7 @@ import ( "errors" "fmt" "net/http" + "reflect" "strconv" "strings" "time" @@ -32,6 +33,7 @@ import ( "github.com/dapr/components-contrib/contenttype" "github.com/dapr/components-contrib/internal/authentication/azure" + contribmeta "github.com/dapr/components-contrib/metadata" "github.com/dapr/components-contrib/state" "github.com/dapr/components-contrib/state/query" "github.com/dapr/kit/logger" @@ -104,22 +106,23 @@ func NewCosmosDBStateStore(logger logger.Logger) state.Store { return s } +func (c *StateStore) GetComponentMetadata() map[string]string { + metadataStruct := metadata{} + metadataInfo := map[string]string{} + contribmeta.GetMetadataInfoFromStructType(reflect.TypeOf(metadataStruct), &metadataInfo) + return metadataInfo +} + // Init does metadata and connection parsing. func (c *StateStore) Init(meta state.Metadata) error { c.logger.Debugf("CosmosDB init start") - b, err := json.Marshal(meta.Properties) - if err != nil { - return err - } - m := metadata{ ContentType: "application/json", } - - err = json.Unmarshal(b, &m) - if err != nil { - return err + errDecode := contribmeta.DecodeMetadata(meta.Properties, &m) + if errDecode != nil { + return errDecode } if m.URL == "" { @@ -147,7 +150,7 @@ func (c *StateStore) Init(meta state.Metadata) error { var client *azcosmos.Client if m.MasterKey != "" { var cred azcosmos.KeyCredential - cred, err = azcosmos.NewKeyCredential(m.MasterKey) + cred, err := azcosmos.NewKeyCredential(m.MasterKey) if err != nil { return err } @@ -158,7 +161,7 @@ func (c *StateStore) Init(meta state.Metadata) error { } else { // Fallback to using Azure AD var env azure.EnvironmentSettings - env, err = azure.NewEnvironmentSettings("cosmosdb", meta.Properties) + env, err := azure.NewEnvironmentSettings("cosmosdb", meta.Properties) if err != nil { return err } diff --git a/state/azure/tablestorage/tablestorage.go b/state/azure/tablestorage/tablestorage.go index 89dede5fc..c91f4a181 100644 --- a/state/azure/tablestorage/tablestorage.go +++ b/state/azure/tablestorage/tablestorage.go @@ -40,6 +40,7 @@ package tablestorage import ( "context" "fmt" + "reflect" "strings" "time" @@ -49,7 +50,6 @@ import ( "github.com/pkg/errors" azauth "github.com/dapr/components-contrib/internal/authentication/azure" - "github.com/dapr/components-contrib/internal/utils" mdutils "github.com/dapr/components-contrib/metadata" "github.com/dapr/components-contrib/state" "github.com/dapr/kit/logger" @@ -59,10 +59,8 @@ const ( keyDelimiter = "||" valueEntityProperty = "Value" - cosmosDBModeKey = "cosmosDbMode" - serviceURLKey = "serviceURL" - skipCreateTableKey = "skipCreateTable" - timeout = 15 * time.Second + cosmosDBModeKey = "cosmosDbMode" + timeout = 15 * time.Second ) type StateStore struct { @@ -76,12 +74,12 @@ type StateStore struct { } type tablesMetadata struct { - accountName string - accountKey string // optional, if not provided, will use Azure AD authentication - tableName string - cosmosDBMode bool // if true, use CosmosDB Table API, otherwise use Azure Table Storage - serviceURL string // optional, if not provided, will use default Azure service URL - skipCreateTable bool // skip attempt to create table - useful for fine grained AAD roles + AccountName string + AccountKey string // optional, if not provided, will use Azure AD authentication + TableName string + CosmosDBMode bool // if true, use CosmosDB Table API, otherwise use Azure Table Storage + ServiceURL string // optional, if not provided, will use default Azure service URL + SkipCreateTable bool // skip attempt to create table - useful for fine grained AAD roles } // Init Initialises connection to table storage, optionally creates a table if it doesn't exist. @@ -93,20 +91,20 @@ func (r *StateStore) Init(metadata state.Metadata) error { var client *aztables.ServiceClient - r.cosmosDBMode = meta.cosmosDBMode - serviceURL := meta.serviceURL + r.cosmosDBMode = meta.CosmosDBMode + serviceURL := meta.ServiceURL if serviceURL == "" { if r.cosmosDBMode { - serviceURL = fmt.Sprintf("https://%s.table.cosmos.azure.com", meta.accountName) + serviceURL = fmt.Sprintf("https://%s.table.cosmos.azure.com", meta.AccountName) } else { - serviceURL = fmt.Sprintf("https://%s.table.core.windows.net", meta.accountName) + serviceURL = fmt.Sprintf("https://%s.table.core.windows.net", meta.AccountName) } } - if meta.accountKey != "" { + if meta.AccountKey != "" { // use shared key authentication - cred, innerErr := aztables.NewSharedKeyCredential(meta.accountName, meta.accountKey) + cred, innerErr := aztables.NewSharedKeyCredential(meta.AccountName, meta.AccountKey) if innerErr != nil { return innerErr } @@ -138,10 +136,10 @@ func (r *StateStore) Init(metadata state.Metadata) error { } } - if !meta.skipCreateTable { + if !meta.SkipCreateTable { createContext, cancel := context.WithTimeout(context.Background(), timeout) defer cancel() - _, innerErr := client.CreateTable(createContext, meta.tableName, nil) + _, innerErr := client.CreateTable(createContext, meta.TableName, nil) if innerErr != nil { if isTableAlreadyExistsError(innerErr) { // error creating table, but it already exists so we're fine @@ -151,9 +149,9 @@ func (r *StateStore) Init(metadata state.Metadata) error { } } } - r.client = client.NewClient(meta.tableName) + r.client = client.NewClient(meta.TableName) - r.logger.Debugf("table initialised, account: %s, cosmosDbMode: %s, table: %s", meta.accountName, meta.cosmosDBMode, meta.tableName) + r.logger.Debugf("table initialised, account: %s, cosmosDbMode: %s, table: %s", meta.AccountName, meta.CosmosDBMode, meta.TableName) return nil } @@ -208,6 +206,13 @@ func (r *StateStore) Set(req *state.SetRequest) error { return err } +func (r *StateStore) GetComponentMetadata() map[string]string { + metadataStruct := tablesMetadata{} + metadataInfo := map[string]string{} + mdutils.GetMetadataInfoFromStructType(reflect.TypeOf(metadataStruct), &metadataInfo) + return metadataInfo +} + func NewAzureTablesStateStore(logger logger.Logger) state.Store { s := &StateStore{ json: jsoniter.ConfigFastest, @@ -219,39 +224,26 @@ func NewAzureTablesStateStore(logger logger.Logger) state.Store { return s } -func getTablesMetadata(metadata map[string]string) (*tablesMetadata, error) { - meta := tablesMetadata{} +func getTablesMetadata(meta map[string]string) (*tablesMetadata, error) { + m := tablesMetadata{} + err := mdutils.DecodeMetadata(meta, &m) - if val, ok := mdutils.GetMetadataProperty(metadata, azauth.StorageAccountNameKeys...); ok && val != "" { - meta.accountName = val + if val, ok := mdutils.GetMetadataProperty(meta, azauth.StorageAccountNameKeys...); ok && val != "" { + m.AccountName = val } else { return nil, errors.New(fmt.Sprintf("missing or empty %s field from metadata", azauth.StorageAccountNameKeys[0])) } // Can be empty (such as when using Azure AD for auth) - meta.accountKey, _ = mdutils.GetMetadataProperty(metadata, azauth.StorageAccountKeyKeys...) + m.AccountKey, _ = mdutils.GetMetadataProperty(meta, azauth.StorageAccountKeyKeys...) - if val, ok := mdutils.GetMetadataProperty(metadata, azauth.StorageTableNameKeys...); ok && val != "" { - meta.tableName = val + if val, ok := mdutils.GetMetadataProperty(meta, azauth.StorageTableNameKeys...); ok && val != "" { + m.TableName = val } else { return nil, errors.New(fmt.Sprintf("missing or empty %s field from metadata", azauth.StorageTableNameKeys[0])) } - if val, ok := metadata[cosmosDBModeKey]; ok && val != "" { - meta.cosmosDBMode = utils.IsTruthy(val) - } - - if val, ok := metadata[serviceURLKey]; ok && val != "" { - meta.serviceURL = val - } else { - meta.serviceURL = "" - } - - if val, ok := metadata[skipCreateTableKey]; ok && val != "" { - meta.skipCreateTable = utils.IsTruthy(val) - } - - return &meta, nil + return &m, err } func (r *StateStore) writeRow(req *state.SetRequest) error { diff --git a/state/azure/tablestorage/tablestorage_test.go b/state/azure/tablestorage/tablestorage_test.go index a5b525c57..ffc88136f 100644 --- a/state/azure/tablestorage/tablestorage_test.go +++ b/state/azure/tablestorage/tablestorage_test.go @@ -32,12 +32,14 @@ func TestGetTableStorageMetadata(t *testing.T) { m["accountName"] = "acc" m["accountKey"] = "key" m["tableName"] = "dapr" + m[cosmosDBModeKey] = "on" meta, err := getTablesMetadata(m) assert.Nil(t, err) - assert.Equal(t, "acc", meta.accountName) - assert.Equal(t, "key", meta.accountKey) - assert.Equal(t, "dapr", meta.tableName) + assert.Equal(t, "acc", meta.AccountName) + assert.Equal(t, "key", meta.AccountKey) + assert.Equal(t, "dapr", meta.TableName) + assert.Equal(t, true, meta.CosmosDBMode) }) t.Run("All parameters passed and parsed, using aliases", func(t *testing.T) { @@ -48,9 +50,9 @@ func TestGetTableStorageMetadata(t *testing.T) { meta, err := getTablesMetadata(m) assert.Nil(t, err) - assert.Equal(t, "acc", meta.accountName) - assert.Equal(t, "key", meta.accountKey) - assert.Equal(t, "dapr", meta.tableName) + assert.Equal(t, "acc", meta.AccountName) + assert.Equal(t, "key", meta.AccountKey) + assert.Equal(t, "dapr", meta.TableName) }) } diff --git a/state/cassandra/cassandra.go b/state/cassandra/cassandra.go index 0fe9a0f2c..8ea64ccc0 100644 --- a/state/cassandra/cassandra.go +++ b/state/cassandra/cassandra.go @@ -14,14 +14,14 @@ limitations under the License. package cassandra import ( - "errors" "fmt" + "reflect" "strconv" - "strings" "github.com/gocql/gocql" jsoniter "github.com/json-iterator/go" + "github.com/dapr/components-contrib/metadata" "github.com/dapr/components-contrib/state" "github.com/dapr/kit/logger" ) @@ -56,15 +56,15 @@ type Cassandra struct { } type cassandraMetadata struct { - hosts []string - port int - protoVersion int - replicationFactor int - username string - password string - consistency string - table string - keyspace string + Hosts []string + Port int + ProtoVersion int + ReplicationFactor int + Username string + Password string + Consistency string + Table string + Keyspace string } // NewCassandraStateStore returns a new cassandra state store. @@ -94,17 +94,17 @@ func (c *Cassandra) Init(metadata state.Metadata) error { } c.session = session - err = c.tryCreateKeyspace(meta.keyspace, meta.replicationFactor) + err = c.tryCreateKeyspace(meta.Keyspace, meta.ReplicationFactor) if err != nil { - return fmt.Errorf("error creating keyspace %s: %s", meta.keyspace, err) + return fmt.Errorf("error creating keyspace %s: %s", meta.Keyspace, err) } - err = c.tryCreateTable(meta.table, meta.keyspace) + err = c.tryCreateTable(meta.Table, meta.Keyspace) if err != nil { - return fmt.Errorf("error creating table %s: %s", meta.table, err) + return fmt.Errorf("error creating table %s: %s", meta.Table, err) } - c.table = fmt.Sprintf("%s.%s", meta.keyspace, meta.table) + c.table = fmt.Sprintf("%s.%s", meta.Keyspace, meta.Table) return nil } @@ -123,13 +123,13 @@ func (c *Cassandra) tryCreateTable(table, keyspace string) error { } func (c *Cassandra) createClusterConfig(metadata *cassandraMetadata) (*gocql.ClusterConfig, error) { - clusterConfig := gocql.NewCluster(metadata.hosts...) - if metadata.username != "" && metadata.password != "" { - clusterConfig.Authenticator = gocql.PasswordAuthenticator{Username: metadata.username, Password: metadata.password} + clusterConfig := gocql.NewCluster(metadata.Hosts...) + if metadata.Username != "" && metadata.Password != "" { + clusterConfig.Authenticator = gocql.PasswordAuthenticator{Username: metadata.Username, Password: metadata.Password} } - clusterConfig.Port = metadata.port - clusterConfig.ProtoVersion = metadata.protoVersion - cons, err := c.getConsistency(metadata.consistency) + clusterConfig.Port = metadata.Port + clusterConfig.ProtoVersion = metadata.ProtoVersion + cons, err := c.getConsistency(metadata.Consistency) if err != nil { return nil, err } @@ -166,67 +166,49 @@ func (c *Cassandra) getConsistency(consistency string) (gocql.Consistency, error return 0, fmt.Errorf("consistency mode %s not found", consistency) } -func getCassandraMetadata(metadata state.Metadata) (*cassandraMetadata, error) { - meta := cassandraMetadata{ - protoVersion: defaultProtoVersion, - table: defaultTable, - keyspace: defaultKeyspace, - replicationFactor: defaultReplicationFactor, - consistency: "All", - port: defaultPort, +func getCassandraMetadata(meta state.Metadata) (*cassandraMetadata, error) { + m := cassandraMetadata{ + ProtoVersion: defaultProtoVersion, + Table: defaultTable, + Keyspace: defaultKeyspace, + ReplicationFactor: defaultReplicationFactor, + Consistency: "All", + Port: defaultPort, + } + err := metadata.DecodeMetadata(meta.Properties, &m) + if err != nil { + return nil, err } - if val, ok := metadata.Properties[hosts]; ok && val != "" { - meta.hosts = strings.Split(val, ",") - } else { - return nil, errors.New("missing or empty hosts field from metadata") + if m.Hosts == nil || len(m.Hosts) == 0 { + return nil, fmt.Errorf("missing or empty hosts field from metadata") } - if val, ok := metadata.Properties[port]; ok && val != "" { + if val, ok := meta.Properties[port]; ok && val != "" { p, err := strconv.ParseInt(val, 0, 32) if err != nil { return nil, fmt.Errorf("error parsing port field: %s", err) } - meta.port = int(p) + m.Port = int(p) } - if val, ok := metadata.Properties[consistency]; ok && val != "" { - meta.consistency = val - } - - if val, ok := metadata.Properties[table]; ok && val != "" { - meta.table = val - } - - if val, ok := metadata.Properties[keyspace]; ok && val != "" { - meta.keyspace = val - } - - if val, ok := metadata.Properties[username]; ok && val != "" { - meta.username = val - } - - if val, ok := metadata.Properties[password]; ok && val != "" { - meta.password = val - } - - if val, ok := metadata.Properties[protoVersion]; ok && val != "" { + if val, ok := meta.Properties[protoVersion]; ok && val != "" { p, err := strconv.ParseInt(val, 0, 32) if err != nil { return nil, fmt.Errorf("error parsing protoVersion field: %s", err) } - meta.protoVersion = int(p) + m.ProtoVersion = int(p) } - if val, ok := metadata.Properties[replicationFactor]; ok && val != "" { + if val, ok := meta.Properties[replicationFactor]; ok && val != "" { r, err := strconv.ParseInt(val, 0, 32) if err != nil { return nil, fmt.Errorf("error parsing replicationFactor field: %s", err) } - meta.replicationFactor = int(r) + m.ReplicationFactor = int(r) } - return &meta, nil + return &m, nil } // Delete performs a delete operation. @@ -332,3 +314,10 @@ func parseTTL(requestMetadata map[string]string) (*int, error) { return nil, nil } + +func (c *Cassandra) GetComponentMetadata() map[string]string { + metadataStruct := cassandraMetadata{} + metadataInfo := map[string]string{} + metadata.GetMetadataInfoFromStructType(reflect.TypeOf(metadataStruct), &metadataInfo) + return metadataInfo +} diff --git a/state/cassandra/cassandra_test.go b/state/cassandra/cassandra_test.go index 3133d65f2..7087fc6b2 100644 --- a/state/cassandra/cassandra_test.go +++ b/state/cassandra/cassandra_test.go @@ -15,6 +15,7 @@ package cassandra import ( "strconv" + "strings" "testing" "github.com/stretchr/testify/assert" @@ -34,18 +35,18 @@ func TestGetCassandraMetadata(t *testing.T) { metadata, err := getCassandraMetadata(m) assert.Nil(t, err) - assert.Equal(t, properties[hosts], metadata.hosts[0]) - assert.Equal(t, "All", metadata.consistency) - assert.Equal(t, defaultKeyspace, metadata.keyspace) - assert.Equal(t, defaultProtoVersion, metadata.protoVersion) - assert.Equal(t, defaultReplicationFactor, metadata.replicationFactor) - assert.Equal(t, defaultTable, metadata.table) - assert.Equal(t, defaultPort, metadata.port) + assert.Equal(t, properties[hosts], metadata.Hosts[0]) + assert.Equal(t, "All", metadata.Consistency) + assert.Equal(t, defaultKeyspace, metadata.Keyspace) + assert.Equal(t, defaultProtoVersion, metadata.ProtoVersion) + assert.Equal(t, defaultReplicationFactor, metadata.ReplicationFactor) + assert.Equal(t, defaultTable, metadata.Table) + assert.Equal(t, defaultPort, metadata.Port) }) t.Run("With custom values", func(t *testing.T) { properties := map[string]string{ - hosts: "127.0.0.1", + hosts: "127.0.0.1,10.10.10.10", port: "9043", consistency: "Quorum", keyspace: "keyspace", @@ -61,15 +62,16 @@ func TestGetCassandraMetadata(t *testing.T) { metadata, err := getCassandraMetadata(m) assert.Nil(t, err) - assert.Equal(t, properties[hosts], metadata.hosts[0]) - assert.Equal(t, properties[consistency], metadata.consistency) - assert.Equal(t, properties[keyspace], metadata.keyspace) - assert.Equal(t, 3, metadata.protoVersion) - assert.Equal(t, 2, metadata.replicationFactor) - assert.Equal(t, properties[table], metadata.table) - assert.Equal(t, properties[username], metadata.username) - assert.Equal(t, properties[password], metadata.password) - assert.Equal(t, 9043, metadata.port) + assert.Equal(t, strings.Split(properties[hosts], ",")[0], metadata.Hosts[0]) + assert.Equal(t, strings.Split(properties[hosts], ",")[1], metadata.Hosts[1]) + assert.Equal(t, properties[consistency], metadata.Consistency) + assert.Equal(t, properties[keyspace], metadata.Keyspace) + assert.Equal(t, 3, metadata.ProtoVersion) + assert.Equal(t, 2, metadata.ReplicationFactor) + assert.Equal(t, properties[table], metadata.Table) + assert.Equal(t, properties[username], metadata.Username) + assert.Equal(t, properties[password], metadata.Password) + assert.Equal(t, 9043, metadata.Port) }) t.Run("Incorrect proto version", func(t *testing.T) { diff --git a/state/cockroachdb/cockroachdb.go b/state/cockroachdb/cockroachdb.go index f0c46c6b2..62bc3c20c 100644 --- a/state/cockroachdb/cockroachdb.go +++ b/state/cockroachdb/cockroachdb.go @@ -14,6 +14,9 @@ limitations under the License. package cockroachdb import ( + "reflect" + + "github.com/dapr/components-contrib/metadata" "github.com/dapr/components-contrib/state" "github.com/dapr/kit/logger" ) @@ -106,3 +109,10 @@ func (c *CockroachDB) Close() error { return nil } + +func (c *CockroachDB) GetComponentMetadata() map[string]string { + metadataStruct := cockroachDBMetadata{} + metadataInfo := map[string]string{} + metadata.GetMetadataInfoFromStructType(reflect.TypeOf(metadataStruct), &metadataInfo) + return metadataInfo +} diff --git a/state/cockroachdb/cockroachdb_access.go b/state/cockroachdb/cockroachdb_access.go index d033031d3..84c88702c 100644 --- a/state/cockroachdb/cockroachdb_access.go +++ b/state/cockroachdb/cockroachdb_access.go @@ -41,37 +41,55 @@ const ( // cockroachDBAccess implements dbaccess. type cockroachDBAccess struct { logger logger.Logger - metadata state.Metadata + metadata cockroachDBMetadata db *sql.DB connectionString string } +type cockroachDBMetadata struct { + ConnectionString string + TableName string +} + // newCockroachDBAccess creates a new instance of cockroachDBAccess. func newCockroachDBAccess(logger logger.Logger) *cockroachDBAccess { logger.Debug("Instantiating new CockroachDB state store") return &cockroachDBAccess{ - logger: logger, - metadata: state.Metadata{ - Base: metadata.Base{Properties: map[string]string{}}, - }, + logger: logger, + metadata: cockroachDBMetadata{}, db: nil, connectionString: "", } } +func parseMetadata(meta state.Metadata) (*cockroachDBMetadata, error) { + m := cockroachDBMetadata{} + metadata.DecodeMetadata(meta.Properties, &m) + + if m.ConnectionString == "" { + return nil, errors.New(errMissingConnectionString) + } + + return &m, nil +} + // Init sets up CockroachDB connection and ensures that the state table exists. func (p *cockroachDBAccess) Init(metadata state.Metadata) error { p.logger.Debug("Initializing CockroachDB state store") - p.metadata = metadata + meta, err := parseMetadata(metadata) + if err != nil { + return err + } + p.metadata = *meta - if val, ok := metadata.Properties[connectionStringKey]; ok && val != "" { - p.connectionString = val - } else { + if p.metadata.ConnectionString == "" { p.logger.Error("Missing CockroachDB connection string") return fmt.Errorf(errMissingConnectionString) + } else { + p.connectionString = p.metadata.ConnectionString } databaseConn, err := sql.Open("pgx", p.connectionString) diff --git a/state/couchbase/couchbase.go b/state/couchbase/couchbase.go index 317886515..1d67f73f7 100644 --- a/state/couchbase/couchbase.go +++ b/state/couchbase/couchbase.go @@ -14,13 +14,14 @@ limitations under the License. package couchbase import ( - "errors" "fmt" + "reflect" "strconv" jsoniter "github.com/json-iterator/go" "gopkg.in/couchbase/gocb.v1" + "github.com/dapr/components-contrib/metadata" "github.com/dapr/components-contrib/state" "github.com/dapr/components-contrib/state/utils" "github.com/dapr/kit/logger" @@ -51,6 +52,15 @@ type Couchbase struct { logger logger.Logger } +type couchbaseMetadata struct { + CouchbaseURL string + Username string + Password string + BucketName string + NumReplicasDurableReplication uint + NumReplicasDurablePersistence uint +} + // NewCouchbaseStateStore returns a new couchbase state store. func NewCouchbaseStateStore(logger logger.Logger) state.Store { s := &Couchbase{ @@ -63,57 +73,65 @@ func NewCouchbaseStateStore(logger logger.Logger) state.Store { return s } -func validateMetadata(metadata state.Metadata) error { - if metadata.Properties[couchbaseURL] == "" { - return errors.New("couchbase error: couchbase URL is missing") +func parseAndValidateMetadata(meta state.Metadata) (*couchbaseMetadata, error) { + m := couchbaseMetadata{} + err := metadata.DecodeMetadata(meta.Properties, &m) + if err != nil { + return nil, err } - if metadata.Properties[username] == "" { - return errors.New("couchbase error: couchbase username is missing") + if m.CouchbaseURL == "" { + return nil, fmt.Errorf("couchbase error: couchbase URL is missing") } - if metadata.Properties[password] == "" { - return errors.New("couchbase error: couchbase password is missing") + if m.Username == "" { + return nil, fmt.Errorf("couchbase error: couchbase username is missing") } - if metadata.Properties[bucketName] == "" { - return errors.New("couchbase error: couchbase bucket name is missing") + if m.Password == "" { + return nil, fmt.Errorf("couchbase error: couchbase password is missing") } - v := metadata.Properties[numReplicasDurableReplication] + if m.BucketName == "" { + return nil, fmt.Errorf("couchbase error: couchbase bucket name is missing") + } + + v := meta.Properties[numReplicasDurableReplication] if v != "" { - _, err := strconv.ParseUint(v, 10, 0) + num, err := strconv.ParseUint(v, 10, 0) if err != nil { - return fmt.Errorf("couchbase error: %v", err) + return nil, fmt.Errorf("couchbase error: %v", err) } + m.NumReplicasDurableReplication = uint(num) } - v = metadata.Properties[numReplicasDurablePersistence] + v = meta.Properties[numReplicasDurablePersistence] if v != "" { - _, err := strconv.ParseUint(v, 10, 0) + num, err := strconv.ParseUint(v, 10, 0) if err != nil { - return fmt.Errorf("couchbase error: %v", err) + return nil, fmt.Errorf("couchbase error: %v", err) } + m.NumReplicasDurablePersistence = uint(num) } - return nil + return &m, nil } // Init does metadata and connection parsing. func (cbs *Couchbase) Init(metadata state.Metadata) error { - err := validateMetadata(metadata) + meta, err := parseAndValidateMetadata(metadata) if err != nil { return err } - cbs.bucketName = metadata.Properties[bucketName] - c, err := gocb.Connect(metadata.Properties[couchbaseURL]) + cbs.bucketName = meta.BucketName + c, err := gocb.Connect(meta.CouchbaseURL) if err != nil { - return fmt.Errorf("couchbase error: unable to connect to couchbase at %s - %v ", metadata.Properties[couchbaseURL], err) + return fmt.Errorf("couchbase error: unable to connect to couchbase at %s - %v ", meta.CouchbaseURL, err) } // does not actually trigger the authentication c.Authenticate(gocb.PasswordAuthenticator{ - Username: metadata.Properties[username], - Password: metadata.Properties[password], + Username: meta.Username, + Password: meta.Password, }) // with RBAC, bucket-passwords are no longer used - https://docs.couchbase.com/go-sdk/1.6/sdk-authentication-overview.html#authenticating-with-legacy-sdk-versions @@ -125,14 +143,12 @@ func (cbs *Couchbase) Init(metadata state.Metadata) error { r := metadata.Properties[numReplicasDurableReplication] if r != "" { - r2, _ := strconv.ParseUint(r, 10, 0) - cbs.numReplicasDurableReplication = uint(r2) + cbs.numReplicasDurableReplication = meta.NumReplicasDurableReplication } p := metadata.Properties[numReplicasDurablePersistence] if p != "" { - p2, _ := strconv.ParseUint(p, 10, 0) - cbs.numReplicasDurablePersistence = uint(p2) + cbs.numReplicasDurablePersistence = meta.NumReplicasDurablePersistence } return nil @@ -248,3 +264,10 @@ func eTagToCas(eTag string) (gocb.Cas, error) { return cas, nil } + +func (cbs *Couchbase) GetComponentMetadata() map[string]string { + metadataStruct := couchbaseMetadata{} + metadataInfo := map[string]string{} + metadata.GetMetadataInfoFromStructType(reflect.TypeOf(metadataStruct), &metadataInfo) + return metadataInfo +} diff --git a/state/couchbase/couchbase_test.go b/state/couchbase/couchbase_test.go index ad1c45e5e..91375ce4e 100644 --- a/state/couchbase/couchbase_test.go +++ b/state/couchbase/couchbase_test.go @@ -14,6 +14,7 @@ limitations under the License. package couchbase import ( + "fmt" "testing" "github.com/stretchr/testify/assert" @@ -33,8 +34,9 @@ func TestValidateMetadata(t *testing.T) { } metadata := state.Metadata{Base: metadata.Base{Properties: props}} - err := validateMetadata(metadata) + meta, err := parseAndValidateMetadata(metadata) assert.Equal(t, nil, err) + assert.Equal(t, props[couchbaseURL], meta.CouchbaseURL) }) t.Run("with optional fields", func(t *testing.T) { props := map[string]string{ @@ -47,8 +49,10 @@ func TestValidateMetadata(t *testing.T) { } metadata := state.Metadata{Base: metadata.Base{Properties: props}} - err := validateMetadata(metadata) + meta, err := parseAndValidateMetadata(metadata) assert.Equal(t, nil, err) + assert.Equal(t, props[couchbaseURL], meta.CouchbaseURL) + assert.Equal(t, props[numReplicasDurablePersistence], fmt.Sprintf("%d", meta.NumReplicasDurablePersistence)) }) t.Run("With missing couchbase URL", func(t *testing.T) { props := map[string]string{ @@ -57,7 +61,7 @@ func TestValidateMetadata(t *testing.T) { bucketName: "testbucket", } metadata := state.Metadata{Base: metadata.Base{Properties: props}} - err := validateMetadata(metadata) + _, err := parseAndValidateMetadata(metadata) assert.NotNil(t, err) }) t.Run("With missing username", func(t *testing.T) { @@ -67,7 +71,7 @@ func TestValidateMetadata(t *testing.T) { bucketName: "testbucket", } metadata := state.Metadata{Base: metadata.Base{Properties: props}} - err := validateMetadata(metadata) + _, err := parseAndValidateMetadata(metadata) assert.NotNil(t, err) }) t.Run("With missing password", func(t *testing.T) { @@ -77,7 +81,7 @@ func TestValidateMetadata(t *testing.T) { bucketName: "testbucket", } metadata := state.Metadata{Base: metadata.Base{Properties: props}} - err := validateMetadata(metadata) + _, err := parseAndValidateMetadata(metadata) assert.NotNil(t, err) }) t.Run("With missing bucket", func(t *testing.T) { @@ -87,7 +91,7 @@ func TestValidateMetadata(t *testing.T) { password: "secret", } metadata := state.Metadata{Base: metadata.Base{Properties: props}} - err := validateMetadata(metadata) + _, err := parseAndValidateMetadata(metadata) assert.NotNil(t, err) }) t.Run("With invalid durable replication", func(t *testing.T) { @@ -98,7 +102,7 @@ func TestValidateMetadata(t *testing.T) { numReplicasDurableReplication: "junk", } metadata := state.Metadata{Base: metadata.Base{Properties: props}} - err := validateMetadata(metadata) + _, err := parseAndValidateMetadata(metadata) assert.NotNil(t, err) }) t.Run("With invalid durable persistence", func(t *testing.T) { @@ -109,7 +113,7 @@ func TestValidateMetadata(t *testing.T) { numReplicasDurablePersistence: "junk", } metadata := state.Metadata{Base: metadata.Base{Properties: props}} - err := validateMetadata(metadata) + _, err := parseAndValidateMetadata(metadata) assert.NotNil(t, err) }) } diff --git a/state/gcp/firestore/firestore.go b/state/gcp/firestore/firestore.go index c88ee047d..5a36173bd 100644 --- a/state/gcp/firestore/firestore.go +++ b/state/gcp/firestore/firestore.go @@ -18,11 +18,13 @@ import ( "encoding/json" "errors" "fmt" + "reflect" "cloud.google.com/go/datastore" jsoniter "github.com/json-iterator/go" "google.golang.org/api/option" + "github.com/dapr/components-contrib/metadata" "github.com/dapr/components-contrib/state" "github.com/dapr/kit/logger" ) @@ -39,17 +41,17 @@ type Firestore struct { } type firestoreMetadata struct { - Type string `json:"type"` - ProjectID string `json:"project_id"` - PrivateKeyID string `json:"private_key_id"` - PrivateKey string `json:"private_key"` - ClientEmail string `json:"client_email"` - ClientID string `json:"client_id"` - AuthURI string `json:"auth_uri"` - TokenURI string `json:"token_uri"` - AuthProviderCertURL string `json:"auth_provider_x509_cert_url"` - ClientCertURL string `json:"client_x509_cert_url"` - EntityKind string `json:"entity_kind"` + Type string `json:"type" mapstructure:"type"` + ProjectID string `json:"project_id" mapstructure:"project_id"` + PrivateKeyID string `json:"private_key_id" mapstructure:"private_key_id"` + PrivateKey string `json:"private_key" mapstructure:"private_key"` + ClientEmail string `json:"client_email" mapstructure:"client_email"` + ClientID string `json:"client_id" mapstructure:"client_id"` + AuthURI string `json:"auth_uri" mapstructure:"auth_uri"` + TokenURI string `json:"token_uri" mapstructure:"token_uri"` + AuthProviderCertURL string `json:"auth_provider_x509_cert_url" mapstructure:"auth_provider_x509_cert_url"` + ClientCertURL string `json:"client_x509_cert_url" mapstructure:"client_x509_cert_url"` + EntityKind string `json:"entity_kind" mapstructure:"entity_kind"` } type StateEntity struct { @@ -162,35 +164,43 @@ func (f *Firestore) Delete(req *state.DeleteRequest) error { return state.DeleteWithOptions(f.deleteValue, req) } -func getFirestoreMetadata(metadata state.Metadata) (*firestoreMetadata, error) { - meta := firestoreMetadata{ +func getFirestoreMetadata(meta state.Metadata) (*firestoreMetadata, error) { + m := firestoreMetadata{ EntityKind: defaultEntityKind, } + + err := metadata.DecodeMetadata(meta.Properties, &m) + if err != nil { + return nil, err + } + requiredMetaProperties := []string{ "type", "project_id", "private_key_id", "private_key", "client_email", "client_id", "auth_uri", "token_uri", "auth_provider_x509_cert_url", "client_x509_cert_url", } + metadataMap := map[string]string{} + bytes, err := json.Marshal(m) + if err != nil { + return nil, err + } + err = json.Unmarshal(bytes, &metadataMap) + if err != nil { + return nil, err + } + for _, k := range requiredMetaProperties { - if val, ok := metadata.Properties[k]; !ok || len(val) < 1 { + if val, ok := metadataMap[k]; !ok || len(val) < 1 { return nil, fmt.Errorf("error parsing required field: %s", k) } } - meta.Type = metadata.Properties["type"] - meta.ProjectID = metadata.Properties["project_id"] - meta.PrivateKeyID = metadata.Properties["private_key_id"] - meta.PrivateKey = metadata.Properties["private_key"] - meta.ClientEmail = metadata.Properties["client_email"] - meta.ClientID = metadata.Properties["client_id"] - meta.AuthURI = metadata.Properties["auth_uri"] - meta.TokenURI = metadata.Properties["token_uri"] - meta.AuthProviderCertURL = metadata.Properties["auth_provider_x509_cert_url"] - meta.ClientCertURL = metadata.Properties["client_x509_cert_url"] - - if val, ok := metadata.Properties["entity_kind"]; ok && val != "" { - meta.EntityKind = val - } - - return &meta, nil + return &m, nil +} + +func (f *Firestore) GetComponentMetadata() map[string]string { + metadataStruct := firestoreMetadata{} + metadataInfo := map[string]string{} + metadata.GetMetadataInfoFromStructType(reflect.TypeOf(metadataStruct), &metadataInfo) + return metadataInfo } diff --git a/state/hashicorp/consul/consul.go b/state/hashicorp/consul/consul.go index 5680d15a2..d56533f70 100644 --- a/state/hashicorp/consul/consul.go +++ b/state/hashicorp/consul/consul.go @@ -16,10 +16,12 @@ package consul import ( "encoding/json" "fmt" + "reflect" "github.com/hashicorp/consul/api" "github.com/pkg/errors" + "github.com/dapr/components-contrib/metadata" "github.com/dapr/components-contrib/state" "github.com/dapr/kit/logger" "github.com/dapr/kit/ptr" @@ -87,18 +89,9 @@ func (c *Consul) Features() []state.Feature { } func metadataToConfig(connInfo map[string]string) (*consulConfig, error) { - b, err := json.Marshal(connInfo) - if err != nil { - return nil, err - } - - var config consulConfig - err = json.Unmarshal(b, &config) - if err != nil { - return nil, err - } - - return &config, nil + m := &consulConfig{} + err := metadata.DecodeMetadata(connInfo, m) + return m, err } // Get retrieves a Consul KV item. @@ -156,3 +149,10 @@ func (c *Consul) Delete(req *state.DeleteRequest) error { return nil } + +func (c *Consul) GetComponentMetadata() map[string]string { + metadataStruct := consulConfig{} + metadataInfo := map[string]string{} + metadata.GetMetadataInfoFromStructType(reflect.TypeOf(metadataStruct), &metadataInfo) + return metadataInfo +} diff --git a/state/hazelcast/hazelcast.go b/state/hazelcast/hazelcast.go index 1c8043726..6bab42b94 100644 --- a/state/hazelcast/hazelcast.go +++ b/state/hazelcast/hazelcast.go @@ -14,23 +14,19 @@ limitations under the License. package hazelcast import ( - "errors" "fmt" + "reflect" "strings" "github.com/hazelcast/hazelcast-go-client" "github.com/hazelcast/hazelcast-go-client/core" jsoniter "github.com/json-iterator/go" + "github.com/dapr/components-contrib/metadata" "github.com/dapr/components-contrib/state" "github.com/dapr/kit/logger" ) -const ( - hazelcastServers = "hazelcastServers" - hazelcastMap = "hazelcastMap" -) - // Hazelcast state store. type Hazelcast struct { state.DefaultBulkStore @@ -39,6 +35,11 @@ type Hazelcast struct { logger logger.Logger } +type hazelcastMetadata struct { + HazelcastServers string + HazelcastMap string +} + // NewHazelcastStore returns a new hazelcast backed state store. func NewHazelcastStore(logger logger.Logger) state.Store { s := &Hazelcast{ @@ -50,24 +51,29 @@ func NewHazelcastStore(logger logger.Logger) state.Store { return s } -func validateMetadata(metadata state.Metadata) error { - if metadata.Properties[hazelcastServers] == "" { - return errors.New("hazelcast error: missing hazelcast servers") +func validateAndParseMetadata(meta state.Metadata) (*hazelcastMetadata, error) { + m := &hazelcastMetadata{} + err := metadata.DecodeMetadata(meta.Properties, m) + if err != nil { + return nil, err } - if metadata.Properties[hazelcastMap] == "" { - return errors.New("hazelcast error: missing hazelcast map name") + if m.HazelcastServers == "" { + return nil, fmt.Errorf("hazelcast error: missing hazelcast servers") + } + if m.HazelcastMap == "" { + return nil, fmt.Errorf("hazelcast error: missing hazelcast map name") } - return nil + return m, nil } // Init does metadata and connection parsing. func (store *Hazelcast) Init(metadata state.Metadata) error { - err := validateMetadata(metadata) + meta, err := validateAndParseMetadata(metadata) if err != nil { return err } - servers := metadata.Properties[hazelcastServers] + servers := meta.HazelcastServers hzConfig := hazelcast.NewConfig() hzConfig.NetworkConfig().AddAddress(strings.Split(servers, ",")...) @@ -76,7 +82,7 @@ func (store *Hazelcast) Init(metadata state.Metadata) error { if err != nil { return fmt.Errorf("hazelcast error: %v", err) } - store.hzMap, err = client.GetMap(metadata.Properties[hazelcastMap]) + store.hzMap, err = client.GetMap(meta.HazelcastMap) if err != nil { return fmt.Errorf("hazelcast error: %v", err) @@ -150,3 +156,10 @@ func (store *Hazelcast) Delete(req *state.DeleteRequest) error { return nil } + +func (store *Hazelcast) GetComponentMetadata() map[string]string { + metadataStruct := hazelcastMetadata{} + metadataInfo := map[string]string{} + metadata.GetMetadataInfoFromStructType(reflect.TypeOf(metadataStruct), &metadataInfo) + return metadataInfo +} diff --git a/state/hazelcast/hazelcast_test.go b/state/hazelcast/hazelcast_test.go index f125d81a0..109f04b43 100644 --- a/state/hazelcast/hazelcast_test.go +++ b/state/hazelcast/hazelcast_test.go @@ -28,7 +28,7 @@ func TestValidateMetadata(t *testing.T) { m := state.Metadata{ Base: metadata.Base{Properties: properties}, } - err := validateMetadata(m) + _, err := validateAndParseMetadata(m) assert.NotNil(t, err) }) @@ -39,7 +39,7 @@ func TestValidateMetadata(t *testing.T) { m := state.Metadata{ Base: metadata.Base{Properties: properties}, } - err := validateMetadata(m) + _, err := validateAndParseMetadata(m) assert.NotNil(t, err) }) @@ -50,7 +50,7 @@ func TestValidateMetadata(t *testing.T) { m := state.Metadata{ Base: metadata.Base{Properties: properties}, } - err := validateMetadata(m) + _, err := validateAndParseMetadata(m) assert.NotNil(t, err) }) @@ -62,7 +62,8 @@ func TestValidateMetadata(t *testing.T) { m := state.Metadata{ Base: metadata.Base{Properties: properties}, } - err := validateMetadata(m) + meta, err := validateAndParseMetadata(m) assert.Nil(t, err) + assert.Equal(t, properties["hazelcastServers"], meta.HazelcastServers) }) } diff --git a/state/in-memory/in_memory.go b/state/in-memory/in_memory.go index 96e86c1a1..cc796bf56 100644 --- a/state/in-memory/in_memory.go +++ b/state/in-memory/in_memory.go @@ -410,3 +410,8 @@ func (store *inMemoryStore) doCleanExpiredItems() { } } } + +func (store *inMemoryStore) GetComponentMetadata() map[string]string { + // no metadata, hence no metadata struct to convert here + return map[string]string{} +} diff --git a/state/jetstream/jetstream.go b/state/jetstream/jetstream.go index 930d56f5f..9df089c23 100644 --- a/state/jetstream/jetstream.go +++ b/state/jetstream/jetstream.go @@ -15,10 +15,12 @@ package jetstream import ( "fmt" + "reflect" "strings" jsoniter "github.com/json-iterator/go" + "github.com/dapr/components-contrib/metadata" "github.com/dapr/components-contrib/state" "github.com/dapr/components-contrib/state/utils" "github.com/dapr/kit/logger" @@ -37,11 +39,11 @@ type StateStore struct { } type jetstreamMetadata struct { - name string - natsURL string - jwt string - seedKey string - bucket string + Name string + NatsURL string + Jwt string + SeedKey string + Bucket string } // NewJetstreamStateStore returns a new nats jetstream KV state store. @@ -63,18 +65,18 @@ func (js *StateStore) Init(metadata state.Metadata) error { } var opts []nats.Option - opts = append(opts, nats.Name(meta.name)) + opts = append(opts, nats.Name(meta.Name)) // Set nats.UserJWT options when jwt and seed key is provided. - if meta.jwt != "" && meta.seedKey != "" { + if meta.Jwt != "" && meta.SeedKey != "" { opts = append(opts, nats.UserJWT(func() (string, error) { - return meta.jwt, nil + return meta.Jwt, nil }, func(nonce []byte) ([]byte, error) { - return sigHandler(meta.seedKey, nonce) + return sigHandler(meta.SeedKey, nonce) })) } - js.nc, err = nats.Connect(meta.natsURL, opts...) + js.nc, err = nats.Connect(meta.NatsURL, opts...) if err != nil { return err } @@ -84,7 +86,7 @@ func (js *StateStore) Init(metadata state.Metadata) error { return err } - js.bucket, err = jsc.KeyValue(meta.bucket) + js.bucket, err = jsc.KeyValue(meta.Bucket) if err != nil { return err } @@ -120,31 +122,30 @@ func (js *StateStore) Delete(req *state.DeleteRequest) error { return js.bucket.Delete(escape(req.Key)) } -func (js *StateStore) getMetadata(metadata state.Metadata) (jetstreamMetadata, error) { +func (js *StateStore) getMetadata(meta state.Metadata) (jetstreamMetadata, error) { var m jetstreamMetadata + err := metadata.DecodeMetadata(meta.Properties, &m) + if err != nil { + return jetstreamMetadata{}, err + } - if v, ok := metadata.Properties["natsURL"]; ok && v != "" { - m.natsURL = v - } else { + if m.NatsURL == "" { return jetstreamMetadata{}, fmt.Errorf("missing nats URL") } - m.jwt = metadata.Properties["jwt"] - m.seedKey = metadata.Properties["seedKey"] - - if m.jwt != "" && m.seedKey == "" { + if m.Jwt != "" && m.SeedKey == "" { return jetstreamMetadata{}, fmt.Errorf("missing seed key") } - if m.jwt == "" && m.seedKey != "" { + if m.Jwt == "" && m.SeedKey != "" { return jetstreamMetadata{}, fmt.Errorf("missing jwt") } - if m.name = metadata.Properties["name"]; m.name == "" { - m.name = "dapr.io - statestore.jetstream" + if m.Name == "" { + m.Name = "dapr.io - statestore.jetstream" } - if m.bucket = metadata.Properties["bucket"]; m.bucket == "" { + if m.Bucket == "" { return jetstreamMetadata{}, fmt.Errorf("missing bucket") } @@ -168,3 +169,10 @@ func sigHandler(seedKey string, nonce []byte) ([]byte, error) { func escape(key string) string { return strings.ReplaceAll(key, "||", ".") } + +func (js *StateStore) GetComponentMetadata() map[string]string { + metadataStruct := jetstreamMetadata{} + metadataInfo := map[string]string{} + metadata.GetMetadataInfoFromStructType(reflect.TypeOf(metadataStruct), &metadataInfo) + return metadataInfo +} diff --git a/state/memcached/memcached.go b/state/memcached/memcached.go index 8875ffb66..486b20aa5 100644 --- a/state/memcached/memcached.go +++ b/state/memcached/memcached.go @@ -16,20 +16,20 @@ package memcached import ( "errors" "fmt" + "reflect" "strconv" - "strings" "time" "github.com/bradfitz/gomemcache/memcache" jsoniter "github.com/json-iterator/go" + "github.com/dapr/components-contrib/metadata" "github.com/dapr/components-contrib/state" "github.com/dapr/components-contrib/state/utils" "github.com/dapr/kit/logger" ) const ( - hosts = "hosts" maxIdleConnections = "maxIdleConnections" timeout = "timeout" ttlInSeconds = "ttlInSeconds" @@ -46,9 +46,9 @@ type Memcached struct { } type memcachedMetadata struct { - hosts []string - maxIdleConnections int - timeout time.Duration + Hosts []string + MaxIdleConnections int + Timeout int } func NewMemCacheStateStore(logger logger.Logger) state.Store { @@ -67,9 +67,13 @@ func (m *Memcached) Init(metadata state.Metadata) error { return err } - client := memcache.New(meta.hosts...) - client.Timeout = meta.timeout - client.MaxIdleConns = meta.maxIdleConnections + client := memcache.New(meta.Hosts...) + if meta.Timeout < 0 { + client.Timeout = defaultTimeout + } else { + client.Timeout = time.Duration(meta.Timeout) * time.Millisecond + } + client.MaxIdleConns = meta.MaxIdleConnections m.client = client @@ -86,35 +90,38 @@ func (m *Memcached) Features() []state.Feature { return nil } -func getMemcachedMetadata(metadata state.Metadata) (*memcachedMetadata, error) { - meta := memcachedMetadata{ - maxIdleConnections: defaultMaxIdleConnections, - timeout: defaultTimeout, +func getMemcachedMetadata(meta state.Metadata) (*memcachedMetadata, error) { + m := memcachedMetadata{ + MaxIdleConnections: defaultMaxIdleConnections, + Timeout: -1, } - if val, ok := metadata.Properties[hosts]; ok && val != "" { - meta.hosts = strings.Split(val, ",") - } else { + err := metadata.DecodeMetadata(meta.Properties, &m) + if err != nil { + return nil, err + } + + if m.Hosts == nil || len(m.Hosts) == 0 { return nil, errors.New("missing or empty hosts field from metadata") } - if val, ok := metadata.Properties[maxIdleConnections]; ok && val != "" { + if val, ok := meta.Properties[maxIdleConnections]; ok && val != "" { p, err := strconv.Atoi(val) if err != nil { return nil, fmt.Errorf("error parsing maxIdleConnections") } - meta.maxIdleConnections = p + m.MaxIdleConnections = p } - if val, ok := metadata.Properties[timeout]; ok && val != "" { + if val, ok := meta.Properties[timeout]; ok && val != "" { p, err := strconv.Atoi(val) if err != nil { return nil, fmt.Errorf("error parsing timeout") } - meta.timeout = time.Duration(p) * time.Millisecond + m.Timeout = p } - return &meta, nil + return &m, nil } func (m *Memcached) parseTTL(req *state.SetRequest) (*int32, error) { @@ -190,3 +197,10 @@ func (m *Memcached) Get(req *state.GetRequest) (*state.GetResponse, error) { func (m *Memcached) Set(req *state.SetRequest) error { return state.SetWithOptions(m.setValue, req) } + +func (m *Memcached) GetComponentMetadata() map[string]string { + metadataStruct := memcachedMetadata{} + metadataInfo := map[string]string{} + metadata.GetMetadataInfoFromStructType(reflect.TypeOf(metadataStruct), &metadataInfo) + return metadataInfo +} diff --git a/state/memcached/memcached_test.go b/state/memcached/memcached_test.go index a6d3899be..cd45a1c20 100644 --- a/state/memcached/memcached_test.go +++ b/state/memcached/memcached_test.go @@ -45,9 +45,9 @@ func TestMemcachedMetadata(t *testing.T) { } metadata, err := getMemcachedMetadata(m) assert.Nil(t, err) - assert.Equal(t, properties["hosts"], metadata.hosts[0]) - assert.Equal(t, defaultMaxIdleConnections, metadata.maxIdleConnections) - assert.Equal(t, defaultTimeout, metadata.timeout) + assert.Equal(t, properties["hosts"], metadata.Hosts[0]) + assert.Equal(t, defaultMaxIdleConnections, metadata.MaxIdleConnections) + assert.Equal(t, -1, metadata.Timeout) }) t.Run("with required configuration, multiple host", func(t *testing.T) { @@ -60,9 +60,9 @@ func TestMemcachedMetadata(t *testing.T) { split := strings.Split(properties["hosts"], ",") metadata, err := getMemcachedMetadata(m) assert.Nil(t, err) - assert.Equal(t, split, metadata.hosts) - assert.Equal(t, defaultMaxIdleConnections, metadata.maxIdleConnections) - assert.Equal(t, defaultTimeout, metadata.timeout) + assert.Equal(t, split, metadata.Hosts) + assert.Equal(t, defaultMaxIdleConnections, metadata.MaxIdleConnections) + assert.Equal(t, -1, metadata.Timeout) }) t.Run("with optional configuration, multiple hosts", func(t *testing.T) { @@ -77,9 +77,9 @@ func TestMemcachedMetadata(t *testing.T) { split := strings.Split(properties["hosts"], ",") metadata, err := getMemcachedMetadata(m) assert.Nil(t, err) - assert.Equal(t, split, metadata.hosts) - assert.Equal(t, 10, metadata.maxIdleConnections) - assert.Equal(t, 5000*time.Millisecond, metadata.timeout) + assert.Equal(t, split, metadata.Hosts) + assert.Equal(t, 10, metadata.MaxIdleConnections) + assert.Equal(t, int(5000*time.Millisecond), metadata.Timeout*int(time.Millisecond)) }) } diff --git a/state/mongodb/mongodb.go b/state/mongodb/mongodb.go index 1a99293e4..a055bd886 100644 --- a/state/mongodb/mongodb.go +++ b/state/mongodb/mongodb.go @@ -20,6 +20,7 @@ import ( "encoding/json" "errors" "fmt" + "reflect" "strconv" "time" @@ -31,6 +32,7 @@ import ( "go.mongodb.org/mongo-driver/mongo/readconcern" "go.mongodb.org/mongo-driver/mongo/writeconcern" + "github.com/dapr/components-contrib/metadata" "github.com/dapr/components-contrib/state" "github.com/dapr/components-contrib/state/query" "github.com/dapr/kit/logger" @@ -44,8 +46,6 @@ const ( databaseName = "databaseName" collectionName = "collectionName" server = "server" - writeConcern = "writeConcern" - readConcern = "readConcern" operationTimeout = "operationTimeout" params = "params" id = "_id" @@ -82,16 +82,16 @@ type MongoDB struct { } type mongoDBMetadata struct { - host string - username string - password string - databaseName string - collectionName string - server string - writeconcern string - readconcern string - params string - operationTimeout time.Duration + Host string + Username string + Password string + DatabaseName string + CollectionName string + Server string + Writeconcern string + Readconcern string + Params string + OperationTimeout time.Duration } // Item is Mongodb document wrapper. @@ -119,7 +119,7 @@ func (m *MongoDB) Init(metadata state.Metadata) error { return err } - m.operationTimeout = meta.operationTimeout + m.operationTimeout = meta.OperationTimeout client, err := getMongoDBClient(meta) if err != nil { @@ -127,26 +127,26 @@ func (m *MongoDB) Init(metadata state.Metadata) error { } if err = client.Ping(context.Background(), nil); err != nil { - return fmt.Errorf("error in connecting to mongodb, host: %s error: %s", meta.host, err) + return fmt.Errorf("error in connecting to mongodb, host: %s error: %s", meta.Host, err) } m.client = client // get the write concern - wc, err := getWriteConcernObject(meta.writeconcern) + wc, err := getWriteConcernObject(meta.Writeconcern) if err != nil { return fmt.Errorf("error in getting write concern object: %s", err) } // get the read concern - rc, err := getReadConcernObject(meta.readconcern) + rc, err := getReadConcernObject(meta.Readconcern) if err != nil { return fmt.Errorf("error in getting read concern object: %s", err) } m.metadata = *meta opts := options.Collection().SetWriteConcern(wc).SetReadConcern(rc) - collection := m.client.Database(meta.databaseName).Collection(meta.collectionName, opts) + collection := m.client.Database(meta.DatabaseName).Collection(meta.CollectionName, opts) m.collection = collection @@ -173,7 +173,7 @@ func (m *MongoDB) Set(req *state.SetRequest) error { func (m *MongoDB) Ping() error { if err := m.client.Ping(context.Background(), nil); err != nil { - return fmt.Errorf("mongoDB store: error connecting to mongoDB at %s: %s", m.metadata.host, err) + return fmt.Errorf("mongoDB store: error connecting to mongoDB at %s: %s", m.metadata.Host, err) } return nil @@ -357,19 +357,19 @@ func (m *MongoDB) Query(req *state.QueryRequest) (*state.QueryResponse, error) { } func getMongoURI(metadata *mongoDBMetadata) string { - if len(metadata.server) != 0 { - if metadata.username != "" && metadata.password != "" { - return fmt.Sprintf(connectionURIFormatWithSrvAndCredentials, metadata.username, metadata.password, metadata.server, metadata.databaseName, metadata.params) + if len(metadata.Server) != 0 { + if metadata.Username != "" && metadata.Password != "" { + return fmt.Sprintf(connectionURIFormatWithSrvAndCredentials, metadata.Username, metadata.Password, metadata.Server, metadata.DatabaseName, metadata.Params) } - return fmt.Sprintf(connectionURIFormatWithSrv, metadata.server, metadata.params) + return fmt.Sprintf(connectionURIFormatWithSrv, metadata.Server, metadata.Params) } - if metadata.username != "" && metadata.password != "" { - return fmt.Sprintf(connectionURIFormatWithAuthentication, metadata.username, metadata.password, metadata.host, metadata.databaseName, metadata.params) + if metadata.Username != "" && metadata.Password != "" { + return fmt.Sprintf(connectionURIFormatWithAuthentication, metadata.Username, metadata.Password, metadata.Host, metadata.DatabaseName, metadata.Params) } - return fmt.Sprintf(connectionURIFormat, metadata.host, metadata.databaseName, metadata.params) + return fmt.Sprintf(connectionURIFormat, metadata.Host, metadata.DatabaseName, metadata.Params) } func getMongoDBClient(metadata *mongoDBMetadata) (*mongo.Client, error) { @@ -379,7 +379,7 @@ func getMongoDBClient(metadata *mongoDBMetadata) (*mongo.Client, error) { clientOptions := options.Client().ApplyURI(uri) // Connect to MongoDB - ctx, cancel := context.WithTimeout(context.Background(), metadata.operationTimeout) + ctx, cancel := context.WithTimeout(context.Background(), metadata.OperationTimeout) defer cancel() daprUserAgent := "dapr-" + logger.DaprVersion @@ -397,66 +397,35 @@ func getMongoDBClient(metadata *mongoDBMetadata) (*mongo.Client, error) { return client, nil } -func getMongoDBMetaData(metadata state.Metadata) (*mongoDBMetadata, error) { - meta := mongoDBMetadata{ - databaseName: defaultDatabaseName, - collectionName: defaultCollectionName, - operationTimeout: defaultTimeout, +func getMongoDBMetaData(meta state.Metadata) (*mongoDBMetadata, error) { + m := mongoDBMetadata{ + DatabaseName: defaultDatabaseName, + CollectionName: defaultCollectionName, + OperationTimeout: defaultTimeout, } - if val, ok := metadata.Properties[host]; ok && val != "" { - meta.host = val + decodeErr := metadata.DecodeMetadata(meta.Properties, &m) + if decodeErr != nil { + return nil, decodeErr } - if val, ok := metadata.Properties[server]; ok && val != "" { - meta.server = val - } - - if len(meta.host) == 0 && len(meta.server) == 0 { + if len(m.Host) == 0 && len(m.Server) == 0 { return nil, errors.New("must set 'host' or 'server' fields in metadata") } - if len(meta.host) != 0 && len(meta.server) != 0 { + if len(m.Host) != 0 && len(m.Server) != 0 { return nil, errors.New("'host' or 'server' fields are mutually exclusive") } - if val, ok := metadata.Properties[username]; ok && val != "" { - meta.username = val - } - - if val, ok := metadata.Properties[password]; ok && val != "" { - meta.password = val - } - - if val, ok := metadata.Properties[databaseName]; ok && val != "" { - meta.databaseName = val - } - - if val, ok := metadata.Properties[collectionName]; ok && val != "" { - meta.collectionName = val - } - - if val, ok := metadata.Properties[writeConcern]; ok && val != "" { - meta.writeconcern = val - } - - if val, ok := metadata.Properties[readConcern]; ok && val != "" { - meta.readconcern = val - } - - if val, ok := metadata.Properties[params]; ok && val != "" { - meta.params = val - } - var err error - if val, ok := metadata.Properties[operationTimeout]; ok && val != "" { - meta.operationTimeout, err = time.ParseDuration(val) + if val, ok := meta.Properties[operationTimeout]; ok && val != "" { + m.OperationTimeout, err = time.ParseDuration(val) if err != nil { return nil, errors.New("incorrect operationTimeout field from metadata") } } - return &meta, nil + return &m, nil } func getWriteConcernObject(cn string) (*writeconcern.WriteConcern, error) { @@ -495,3 +464,10 @@ func getReadConcernObject(cn string) (*readconcern.ReadConcern, error) { return nil, fmt.Errorf("readConcern %s not found", cn) } + +func (m *MongoDB) GetComponentMetadata() map[string]string { + metadataStruct := mongoDBMetadata{} + metadataInfo := map[string]string{} + metadata.GetMetadataInfoFromStructType(reflect.TypeOf(metadataStruct), &metadataInfo) + return metadataInfo +} diff --git a/state/mongodb/mongodb_test.go b/state/mongodb/mongodb_test.go index 88c677cbe..80cf8867b 100644 --- a/state/mongodb/mongodb_test.go +++ b/state/mongodb/mongodb_test.go @@ -33,9 +33,9 @@ func TestGetMongoDBMetadata(t *testing.T) { metadata, err := getMongoDBMetaData(m) assert.Nil(t, err) - assert.Equal(t, properties[host], metadata.host) - assert.Equal(t, defaultDatabaseName, metadata.databaseName) - assert.Equal(t, defaultCollectionName, metadata.collectionName) + assert.Equal(t, properties[host], metadata.Host) + assert.Equal(t, defaultDatabaseName, metadata.DatabaseName) + assert.Equal(t, defaultCollectionName, metadata.CollectionName) }) t.Run("With custom values", func(t *testing.T) { @@ -52,11 +52,11 @@ func TestGetMongoDBMetadata(t *testing.T) { metadata, err := getMongoDBMetaData(m) assert.Nil(t, err) - assert.Equal(t, properties[host], metadata.host) - assert.Equal(t, properties[databaseName], metadata.databaseName) - assert.Equal(t, properties[collectionName], metadata.collectionName) - assert.Equal(t, properties[username], metadata.username) - assert.Equal(t, properties[password], metadata.password) + assert.Equal(t, properties[host], metadata.Host) + assert.Equal(t, properties[databaseName], metadata.DatabaseName) + assert.Equal(t, properties[collectionName], metadata.CollectionName) + assert.Equal(t, properties[username], metadata.Username) + assert.Equal(t, properties[password], metadata.Password) }) t.Run("Missing hosts", func(t *testing.T) { diff --git a/state/mysql/mysql.go b/state/mysql/mysql.go index 584ed6f52..654f42ac0 100644 --- a/state/mysql/mysql.go +++ b/state/mysql/mysql.go @@ -20,12 +20,14 @@ import ( "encoding/json" "errors" "fmt" + "reflect" "strconv" "strings" "time" "github.com/google/uuid" + "github.com/dapr/components-contrib/metadata" "github.com/dapr/components-contrib/state" "github.com/dapr/kit/logger" "github.com/dapr/kit/ptr" @@ -86,6 +88,14 @@ type MySQL struct { factory iMySQLFactory } +type mySQLMetadata struct { + TableName string + SchemaName string + ConnectionString string + Timeout int + PemPath string +} + // NewMySQLStateStore creates a new instance of MySQL state store. func NewMySQLStateStore(logger logger.Logger) state.Store { factory := newMySQLFactory(logger) @@ -131,46 +141,46 @@ func (m *MySQL) Init(metadata state.Metadata) error { } func (m *MySQL) parseMetadata(md map[string]string) error { - val, ok := md[keyTableName] - if ok && val != "" { + meta := mySQLMetadata{ + TableName: defaultTableName, + SchemaName: defaultSchemaName, + } + err := metadata.DecodeMetadata(md, &meta) + if err != nil { + return err + } + + if meta.TableName != "" { // Sanitize the table name - if !validIdentifier(val) { - return fmt.Errorf("table name '%s' is not valid", val) + if !validIdentifier(meta.TableName) { + return fmt.Errorf("table name '%s' is not valid", meta.TableName) } - m.tableName = val - } else { - // Default to the constant - m.tableName = defaultTableName } + m.tableName = meta.TableName - val, ok = md[keySchemaName] - if ok && val != "" { + if meta.SchemaName != "" { // Sanitize the schema name - if !validIdentifier(val) { - return fmt.Errorf("schema name '%s' is not valid", val) + if !validIdentifier(meta.SchemaName) { + return fmt.Errorf("schema name '%s' is not valid", meta.SchemaName) } - m.schemaName = val - } else { - // Default to the constant - m.schemaName = defaultSchemaName } + m.schemaName = meta.SchemaName - m.connectionString, ok = md[keyConnectionString] - if !ok || m.connectionString == "" { + if meta.ConnectionString == "" { m.logger.Error("Missing MySql connection string") return fmt.Errorf(errMissingConnectionString) } + m.connectionString = meta.ConnectionString - val, ok = md[keyPemPath] - if ok && val != "" { - err := m.factory.RegisterTLSConfig(val) + if meta.PemPath != "" { + err := m.factory.RegisterTLSConfig(meta.PemPath) if err != nil { m.logger.Error(err) return err } } - val, ok = md[keyTimeoutInSeconds] + val, ok := md[keyTimeoutInSeconds] if ok && val != "" { n, err := strconv.Atoi(val) if err == nil && n > 0 { @@ -721,3 +731,10 @@ type querier interface { QueryContext(ctx context.Context, query string, args ...any) (*sql.Rows, error) QueryRowContext(ctx context.Context, query string, args ...any) *sql.Row } + +func (m *MySQL) GetComponentMetadata() map[string]string { + metadataStruct := mySQLMetadata{} + metadataInfo := map[string]string{} + metadata.GetMetadataInfoFromStructType(reflect.TypeOf(metadataStruct), &metadataInfo) + return metadataInfo +} diff --git a/state/oci/objectstorage/objectstorage.go b/state/oci/objectstorage/objectstorage.go index d4ad1c16a..440a19523 100644 --- a/state/oci/objectstorage/objectstorage.go +++ b/state/oci/objectstorage/objectstorage.go @@ -20,6 +20,7 @@ import ( "io" "os" "path" + "reflect" "strconv" "strings" "time" @@ -30,6 +31,7 @@ import ( "github.com/oracle/oci-go-sdk/v54/common/auth" "github.com/oracle/oci-go-sdk/v54/objectstorage" + "github.com/dapr/components-contrib/metadata" "github.com/dapr/components-contrib/state" "github.com/dapr/kit/logger" ) @@ -39,7 +41,6 @@ const ( instancePrincipalAuthenticationKey = "instancePrincipalAuthentication" configFileAuthenticationKey = "configFileAuthentication" configFilePathKey = "configFilePath" - configFileProfileKey = "configFileProfile" tenancyKey = "tenancyOCID" compartmentKey = "compartmentOCID" regionKey = "region" @@ -62,19 +63,19 @@ type StateStore struct { client objectStoreClient } -type Metadata struct { - userOCID string - bucketName string - region string - tenancyOCID string - fingerPrint string - privateKey string - compartmentOCID string - namespace string - configFilePath string - configFileProfile string - instancePrincipalAuthentication bool - configFileAuthentication bool +type objectStoreMetadata struct { + UserOCID string + BucketName string + Region string + TenancyOCID string + FingerPrint string + PrivateKey string + CompartmentOCID string + Namespace string + ConfigFilePath string + ConfigFileProfile string + InstancePrincipalAuthentication bool + ConfigFileAuthentication bool OCIObjectStorageClient *objectstorage.ObjectStorageClient } @@ -89,7 +90,7 @@ type objectStoreClient interface { } type objectStorageClient struct { - objectStorageMetadata *Metadata + objectStorageMetadata *objectStoreMetadata } type ociObjectStorageClient struct { @@ -122,7 +123,7 @@ func (r *StateStore) Init(metadata state.Metadata) error { if cerr != nil { return fmt.Errorf("failed to create bucket : %w", cerr) } - r.logger.Debugf("OCI Object Storage State Store initialized using bucket '%s'", meta.bucketName) + r.logger.Debugf("OCI Object Storage State Store initialized using bucket '%s'", meta.BucketName) return nil } @@ -178,30 +179,8 @@ func NewOCIObjectStorageStore(logger logger.Logger) state.Store { /************** private helper functions. */ -func getValue(metadata map[string]string, key string, valueRequired bool) (value string, err error) { - if val, ok := metadata[key]; ok && val != "" { - return val, nil - } - if !valueRequired { - return "", nil - } - return "", fmt.Errorf("missing or empty %s field from metadata", key) -} - -func getOptionalBooleanValue(metadata map[string]string, key string) (value bool, err error) { - stringValue, _ := getValue(metadata, key, false) - if stringValue == "" { - stringValue = "false" - } - value, err = strconv.ParseBool(stringValue) - if err != nil { - return false, fmt.Errorf("incorrect value %s for %s, should be 'true' or 'false'", stringValue, key) - } - return value, nil -} - -func getConfigFilePath(meta map[string]string) (value string, err error) { - value, _ = getValue(meta, configFilePathKey, false) +func getConfigFilePath(configFilePath string) (value string, err error) { + value = configFilePath if strings.HasPrefix(value, "~/") { return "", fmt.Errorf("%s is set to %s which starts with ~/; this is not supported - please provide absolute path to configuration file", configFilePathKey, value) } @@ -216,52 +195,51 @@ func getConfigFilePath(meta map[string]string) (value string, err error) { return value, nil } -func getObjectStorageMetadata(metadata map[string]string) (*Metadata, error) { - meta := Metadata{} +func getObjectStorageMetadata(meta map[string]string) (*objectStoreMetadata, error) { + m := objectStoreMetadata{} + errDecode := metadata.DecodeMetadata(meta, &m) + if errDecode != nil { + return nil, errDecode + } + var err error - if meta.instancePrincipalAuthentication, err = getOptionalBooleanValue(metadata, instancePrincipalAuthenticationKey); err != nil { - return nil, err - } - if meta.configFileAuthentication, err = getOptionalBooleanValue(metadata, configFileAuthenticationKey); err != nil { - return nil, err - } - if meta.configFileAuthentication { - if meta.configFilePath, err = getConfigFilePath(metadata); err != nil { + + if m.ConfigFileAuthentication { + if m.ConfigFilePath, err = getConfigFilePath(m.ConfigFilePath); err != nil { return nil, err } - meta.configFileProfile, _ = getValue(metadata, configFileProfileKey, false) } - if meta.bucketName, err = getValue(metadata, bucketNameKey, true); err != nil { - return nil, err + if m.BucketName == "" { + return nil, fmt.Errorf("missing or empty %s field from metadata", bucketNameKey) } - if meta.compartmentOCID, err = getValue(metadata, compartmentKey, true); err != nil { - return nil, err + if m.CompartmentOCID == "" { + return nil, fmt.Errorf("missing or empty %s field from metadata", compartmentKey) } - externalAuthentication := meta.instancePrincipalAuthentication || meta.configFileAuthentication + externalAuthentication := m.InstancePrincipalAuthentication || m.ConfigFileAuthentication if !externalAuthentication { - err = getIdentityAuthenticationDetails(metadata, &meta) + err = getIdentityAuthenticationDetails(m) if err != nil { return nil, err } } - return &meta, nil + return &m, nil } -func getIdentityAuthenticationDetails(metadata map[string]string, meta *Metadata) (err error) { - if meta.region, err = getValue(metadata, regionKey, true); err != nil { - return err +func getIdentityAuthenticationDetails(meta objectStoreMetadata) (err error) { + if meta.Region == "" { + return fmt.Errorf("missing or empty %s field from metadata", regionKey) } - if meta.userOCID, err = getValue(metadata, userKey, true); err != nil { - return err + if meta.UserOCID == "" { + return fmt.Errorf("missing or empty %s field from metadata", userKey) } - if meta.fingerPrint, err = getValue(metadata, fingerPrintKey, true); err != nil { - return err + if meta.FingerPrint == "" { + return fmt.Errorf("missing or empty %s field from metadata", fingerPrintKey) } - if meta.privateKey, err = getValue(metadata, privateKeyKey, true); err != nil { - return err + if meta.PrivateKey == "" { + return fmt.Errorf("missing or empty %s field from metadata", privateKeyKey) } - if meta.tenancyOCID, err = getValue(metadata, tenancyKey, true); err != nil { - return err + if meta.TenancyOCID == "" { + return fmt.Errorf("missing or empty %s field from metadata", tenancyKey) } return nil } @@ -458,10 +436,10 @@ func createBucket(ctx context.Context, client objectstorage.ObjectStorageClient, // ***** the functions that interact with OCI Object Storage AND constitute the objectStoreClient interface. func (c *ociObjectStorageClient) getObject(ctx context.Context, objectname string) (content []byte, etag *string, metadata map[string]string, err error) { - c.logger.Debugf("read file %s from OCI ObjectStorage StateStore %s ", objectname, &c.objectStorageMetadata.bucketName) + c.logger.Debugf("read file %s from OCI ObjectStorage StateStore %s ", objectname, &c.objectStorageMetadata.BucketName) request := objectstorage.GetObjectRequest{ - NamespaceName: &c.objectStorageMetadata.namespace, - BucketName: &c.objectStorageMetadata.bucketName, + NamespaceName: &c.objectStorageMetadata.Namespace, + BucketName: &c.objectStorageMetadata.BucketName, ObjectName: &objectname, } response, err := c.objectStorageMetadata.OCIObjectStorageClient.GetObject(ctx, request) @@ -479,8 +457,8 @@ func (c *ociObjectStorageClient) getObject(ctx context.Context, objectname strin func (c *ociObjectStorageClient) deleteObject(ctx context.Context, objectname string, etag *string) (err error) { request := objectstorage.DeleteObjectRequest{ - NamespaceName: &c.objectStorageMetadata.namespace, - BucketName: &c.objectStorageMetadata.bucketName, + NamespaceName: &c.objectStorageMetadata.Namespace, + BucketName: &c.objectStorageMetadata.BucketName, ObjectName: &objectname, IfMatch: etag, } @@ -493,8 +471,8 @@ func (c *ociObjectStorageClient) deleteObject(ctx context.Context, objectname st func (c *ociObjectStorageClient) putObject(ctx context.Context, objectname string, contentLen int64, content io.ReadCloser, metadata map[string]string, etag *string) error { request := objectstorage.PutObjectRequest{ - NamespaceName: &c.objectStorageMetadata.namespace, - BucketName: &c.objectStorageMetadata.bucketName, + NamespaceName: &c.objectStorageMetadata.Namespace, + BucketName: &c.objectStorageMetadata.BucketName, ObjectName: &objectname, ContentLength: &contentLen, PutObjectBody: content, @@ -502,7 +480,7 @@ func (c *ociObjectStorageClient) putObject(ctx context.Context, objectname strin IfMatch: etag, } _, err := c.objectStorageMetadata.OCIObjectStorageClient.PutObject(ctx, request) - c.logger.Debugf("Put object ", objectname, " in bucket ", &c.objectStorageMetadata.bucketName) + c.logger.Debugf("Put object ", objectname, " in bucket ", &c.objectStorageMetadata.BucketName) if err != nil { return fmt.Errorf("failed to put object on OCI : %w", err) } @@ -511,7 +489,7 @@ func (c *ociObjectStorageClient) putObject(ctx context.Context, objectname strin func (c *ociObjectStorageClient) initStorageBucket() error { ctx := context.Background() - err := c.ensureBucketExists(ctx, *c.objectStorageMetadata.OCIObjectStorageClient, c.objectStorageMetadata.namespace, c.objectStorageMetadata.bucketName, c.objectStorageMetadata.compartmentOCID) + err := c.ensureBucketExists(ctx, *c.objectStorageMetadata.OCIObjectStorageClient, c.objectStorageMetadata.Namespace, c.objectStorageMetadata.BucketName, c.objectStorageMetadata.CompartmentOCID) if err != nil { return fmt.Errorf("failed to read or create bucket : %w", err) } @@ -520,7 +498,7 @@ func (c *ociObjectStorageClient) initStorageBucket() error { func (c *ociObjectStorageClient) initOCIObjectStorageClient() (*objectstorage.ObjectStorageClient, error) { var configurationProvider common.ConfigurationProvider - if c.objectStorageMetadata.instancePrincipalAuthentication { + if c.objectStorageMetadata.InstancePrincipalAuthentication { c.logger.Debugf("instance principal authentication is used. ") var err error configurationProvider, err = auth.InstancePrincipalConfigurationProvider() @@ -528,12 +506,12 @@ func (c *ociObjectStorageClient) initOCIObjectStorageClient() (*objectstorage.Ob return nil, fmt.Errorf("failed to get oci configurationprovider based on instance principal authentication : %w", err) } } else { - if c.objectStorageMetadata.configFileAuthentication { - c.logger.Debugf("configuration file based authentication is used with configuration file path %s and configuration profile %s. ", c.objectStorageMetadata.configFilePath, c.objectStorageMetadata.configFileProfile) - configurationProvider = common.CustomProfileConfigProvider(c.objectStorageMetadata.configFilePath, c.objectStorageMetadata.configFileProfile) + if c.objectStorageMetadata.ConfigFileAuthentication { + c.logger.Debugf("configuration file based authentication is used with configuration file path %s and configuration profile %s. ", c.objectStorageMetadata.ConfigFilePath, c.objectStorageMetadata.ConfigFileProfile) + configurationProvider = common.CustomProfileConfigProvider(c.objectStorageMetadata.ConfigFilePath, c.objectStorageMetadata.ConfigFileProfile) } else { c.logger.Debugf("identity authentication is used with configuration provided through Dapr component configuration ") - configurationProvider = common.NewRawConfigurationProvider(c.objectStorageMetadata.tenancyOCID, c.objectStorageMetadata.userOCID, c.objectStorageMetadata.region, c.objectStorageMetadata.fingerPrint, c.objectStorageMetadata.privateKey, nil) + configurationProvider = common.NewRawConfigurationProvider(c.objectStorageMetadata.TenancyOCID, c.objectStorageMetadata.UserOCID, c.objectStorageMetadata.Region, c.objectStorageMetadata.FingerPrint, c.objectStorageMetadata.PrivateKey, nil) } } @@ -542,7 +520,7 @@ func (c *ociObjectStorageClient) initOCIObjectStorageClient() (*objectstorage.Ob return nil, fmt.Errorf("failed to create ObjectStorageClient : %w", cerr) } ctx := context.Background() - c.objectStorageMetadata.namespace, cerr = getNamespace(ctx, objectStorageClient) + c.objectStorageMetadata.Namespace, cerr = getNamespace(ctx, objectStorageClient) if cerr != nil { return nil, fmt.Errorf("failed to get namespace : %w", cerr) } @@ -551,8 +529,8 @@ func (c *ociObjectStorageClient) initOCIObjectStorageClient() (*objectstorage.Ob func (c *ociObjectStorageClient) pingBucket() error { req := objectstorage.GetBucketRequest{ - NamespaceName: &c.objectStorageMetadata.namespace, - BucketName: &c.objectStorageMetadata.bucketName, + NamespaceName: &c.objectStorageMetadata.Namespace, + BucketName: &c.objectStorageMetadata.BucketName, } _, err := c.objectStorageMetadata.OCIObjectStorageClient.GetBucket(context.Background(), req) if err != nil { @@ -560,3 +538,10 @@ func (c *ociObjectStorageClient) pingBucket() error { } return nil } + +func (r *StateStore) GetComponentMetadata() map[string]string { + metadataStruct := objectStoreMetadata{} + metadataInfo := map[string]string{} + metadata.GetMetadataInfoFromStructType(reflect.TypeOf(metadataStruct), &metadataInfo) + return metadataInfo +} diff --git a/state/oci/objectstorage/objectstorage_test.go b/state/oci/objectstorage/objectstorage_test.go index b2d4b1a46..1b2d97c3f 100644 --- a/state/oci/objectstorage/objectstorage_test.go +++ b/state/oci/objectstorage/objectstorage_test.go @@ -160,7 +160,7 @@ func TestGetObjectStorageMetadata(t *testing.T) { t.Run("Test getObjectStorageMetadata with full properties map", func(t *testing.T) { meta, err := getObjectStorageMetadata(getDummyOCIObjectStorageConfiguration()) assert.Nil(t, err, "No error expected in clean property set") - assert.Equal(t, getDummyOCIObjectStorageConfiguration()["region"], meta.region, "Region in object storage metadata should match region in properties") + assert.Equal(t, getDummyOCIObjectStorageConfiguration()["region"], meta.Region, "Region in object storage metadata should match region in properties") }) t.Run("Test getObjectStorageMetadata with incomplete property set", func(t *testing.T) { properties := map[string]string{ @@ -382,27 +382,6 @@ func TestDeleteWithMockClient(t *testing.T) { }) } -func TestGetValue(t *testing.T) { - meta := map[string]string{ - "testKey": "theValue", - } - t.Parallel() - t.Run("Existing value", func(t *testing.T) { - value, _ := getValue(meta, "testKey", true) - assert.Equal(t, "theValue", value) - }) - t.Run("Non-existing, required value", func(t *testing.T) { - value, err := getValue(meta, "noKey", true) - assert.NotNil(t, err, "Missing required value should result in error") - assert.Equal(t, "", value, "Empty string should be returned for non-existing value") - }) - t.Run("Non-existing, optional value", func(t *testing.T) { - value, err := getValue(meta, "noKey", false) - assert.Nil(t, err, "Missing optional value should not result in error") - assert.Equal(t, "", value, "Empty string should be returned for non-existing value") - }) -} - func TestGetFilename(t *testing.T) { t.Parallel() t.Run("Valid composite key", func(t *testing.T) { diff --git a/state/oracledatabase/oracledatabase.go b/state/oracledatabase/oracledatabase.go index f607947ef..5e6b142bc 100644 --- a/state/oracledatabase/oracledatabase.go +++ b/state/oracledatabase/oracledatabase.go @@ -15,7 +15,9 @@ package oracledatabase import ( "fmt" + "reflect" + "github.com/dapr/components-contrib/metadata" "github.com/dapr/components-contrib/state" "github.com/dapr/kit/logger" ) @@ -129,3 +131,10 @@ func (o *OracleDatabase) Close() error { return nil } + +func (o *OracleDatabase) GetComponentMetadata() map[string]string { + metadataStruct := oracleDatabaseMetadata{} + metadataInfo := map[string]string{} + metadata.GetMetadataInfoFromStructType(reflect.TypeOf(metadataStruct), &metadataInfo) + return metadataInfo +} diff --git a/state/oracledatabase/oracledatabaseaccess.go b/state/oracledatabase/oracledatabaseaccess.go index 5fba997c3..5446959b7 100644 --- a/state/oracledatabase/oracledatabaseaccess.go +++ b/state/oracledatabase/oracledatabaseaccess.go @@ -23,6 +23,7 @@ import ( "github.com/google/uuid" + "github.com/dapr/components-contrib/metadata" "github.com/dapr/components-contrib/state" "github.com/dapr/components-contrib/state/utils" "github.com/dapr/kit/logger" @@ -42,12 +43,18 @@ const ( // oracleDatabaseAccess implements dbaccess. type oracleDatabaseAccess struct { logger logger.Logger - metadata state.Metadata + metadata oracleDatabaseMetadata db *sql.DB connectionString string tx *sql.Tx } +type oracleDatabaseMetadata struct { + ConnectionString string + OracleWalletLocation string + TableName string +} + // newOracleDatabaseAccess creates a new instance of oracleDatabaseAccess. func newOracleDatabaseAccess(logger logger.Logger) *oracleDatabaseAccess { logger.Debug("Instantiating new Oracle Database state store") @@ -61,19 +68,31 @@ func (o *oracleDatabaseAccess) Ping() error { return o.db.Ping() } +func parseMetadata(meta map[string]string) (oracleDatabaseMetadata, error) { + m := oracleDatabaseMetadata{ + TableName: "state", + } + err := metadata.DecodeMetadata(meta, &m) + return m, err +} + // Init sets up OracleDatabase connection and ensures that the state table exists. func (o *oracleDatabaseAccess) Init(metadata state.Metadata) error { o.logger.Debug("Initializing OracleDatabase state store") - o.metadata = metadata - if val, ok := metadata.Properties[connectionStringKey]; ok && val != "" { - o.connectionString = val + meta, err := parseMetadata(metadata.Properties) + o.metadata = meta + if err != nil { + return err + } + if o.metadata.ConnectionString != "" { + o.connectionString = meta.ConnectionString } else { o.logger.Error("Missing Oracle Database connection string") return fmt.Errorf(errMissingConnectionString) } - if val, ok := o.metadata.Properties[oracleWalletLocationKey]; ok && val != "" { - o.connectionString += "?TRACE FILE=trace.log&SSL=enable&SSL Verify=false&WALLET=" + url.QueryEscape(val) + if o.metadata.OracleWalletLocation != "" { + o.connectionString += "?TRACE FILE=trace.log&SSL=enable&SSL Verify=false&WALLET=" + url.QueryEscape(o.metadata.OracleWalletLocation) } db, err := sql.Open("oracle", o.connectionString) if err != nil { diff --git a/state/postgresql/postgresdbaccess.go b/state/postgresql/postgresdbaccess.go index 9cdca16b7..8ffa628d9 100644 --- a/state/postgresql/postgresdbaccess.go +++ b/state/postgresql/postgresdbaccess.go @@ -21,6 +21,7 @@ import ( "strconv" "time" + "github.com/dapr/components-contrib/metadata" "github.com/dapr/components-contrib/state" "github.com/dapr/components-contrib/state/query" "github.com/dapr/components-contrib/state/utils" @@ -34,14 +35,13 @@ import ( const ( connectionStringKey = "connectionString" errMissingConnectionString = "missing connection string" - tableName = "state" - connMaxIdleTimeKey = "connMaxIdleTime" + defaultTableName = "state" ) // postgresDBAccess implements dbaccess. type postgresDBAccess struct { logger logger.Logger - metadata state.Metadata + metadata postgresMetadataStruct db *sql.DB connectionString string } @@ -55,18 +55,30 @@ func newPostgresDBAccess(logger logger.Logger) *postgresDBAccess { } } -// Init sets up PostgreSQL connection and ensures that the state table exists. -func (p *postgresDBAccess) Init(metadata state.Metadata) error { - p.logger.Debug("Initializing PostgreSQL state store") - p.metadata = metadata +type postgresMetadataStruct struct { + ConnectionString string + ConnectionMaxIdleTime time.Duration + TableName string +} - if val, ok := metadata.Properties[connectionStringKey]; ok && val != "" { - p.connectionString = val - } else { +// Init sets up PostgreSQL connection and ensures that the state table exists. +func (p *postgresDBAccess) Init(meta state.Metadata) error { + p.logger.Debug("Initializing PostgreSQL state store") + m := postgresMetadataStruct{ + TableName: defaultTableName, + } + err := metadata.DecodeMetadata(meta.Properties, &m) + if err != nil { + return err + } + p.metadata = m + + if m.ConnectionString == "" { p.logger.Error("Missing postgreSQL connection string") return fmt.Errorf(errMissingConnectionString) } + p.connectionString = m.ConnectionString db, err := sql.Open("pgx", p.connectionString) if err != nil { @@ -82,12 +94,12 @@ func (p *postgresDBAccess) Init(metadata state.Metadata) error { return pingErr } - err = propertyToDuration(p.metadata.Properties, connMaxIdleTimeKey, p.db.SetConnMaxIdleTime) + p.db.SetConnMaxIdleTime(m.ConnectionMaxIdleTime) if err != nil { return err } - err = p.ensureStateTable(tableName) + err = p.ensureStateTable(m.TableName) if err != nil { return err } @@ -135,7 +147,7 @@ func (p *postgresDBAccess) setValue(req *state.SetRequest) error { result, err = p.db.Exec(fmt.Sprintf( `INSERT INTO %s (key, value, isbinary) VALUES ($1, $2, $3) ON CONFLICT (key) DO UPDATE SET value = $2, isbinary = $3, updatedate = NOW();`, - tableName), req.Key, value, isBinary) + defaultTableName), req.Key, value, isBinary) } else { // Convert req.ETag to uint32 for postgres XID compatibility var etag64 uint64 @@ -149,7 +161,7 @@ func (p *postgresDBAccess) setValue(req *state.SetRequest) error { result, err = p.db.Exec(fmt.Sprintf( `UPDATE %s SET value = $1, isbinary = $2, updatedate = NOW() WHERE key = $3 AND xmin = $4;`, - tableName), value, isBinary, req.Key, etag) + defaultTableName), value, isBinary, req.Key, etag) } if err != nil { @@ -206,7 +218,7 @@ func (p *postgresDBAccess) Get(req *state.GetRequest) (*state.GetResponse, error var value string var isBinary bool var etag int - err := p.db.QueryRow(fmt.Sprintf("SELECT value, isbinary, xmin as etag FROM %s WHERE key = $1", tableName), req.Key).Scan(&value, &isBinary, &etag) + err := p.db.QueryRow(fmt.Sprintf("SELECT value, isbinary, xmin as etag FROM %s WHERE key = $1", defaultTableName), req.Key).Scan(&value, &isBinary, &etag) if err != nil { // If no rows exist, return an empty response, otherwise return the error. if err == sql.ErrNoRows { @@ -450,15 +462,3 @@ func getDelete(req state.TransactionalStateOperation) (state.DeleteRequest, erro return delReq, nil } - -func propertyToDuration(props map[string]string, key string, setter func(time.Duration)) error { - if v, ok := props[key]; ok { - if d, err := time.ParseDuration(v); err == nil { - setter(d) - } else { - return fmt.Errorf("error converitng %s:%s to time duration: %w", key, v, err) - } - } - - return nil -} diff --git a/state/postgresql/postgresql.go b/state/postgresql/postgresql.go index 59782b298..78585c319 100644 --- a/state/postgresql/postgresql.go +++ b/state/postgresql/postgresql.go @@ -14,6 +14,9 @@ limitations under the License. package postgresql import ( + "reflect" + + "github.com/dapr/components-contrib/metadata" "github.com/dapr/components-contrib/state" "github.com/dapr/kit/logger" ) @@ -101,3 +104,10 @@ func (p *PostgreSQL) Close() error { return nil } + +func (p *PostgreSQL) GetComponentMetadata() map[string]string { + metadataStruct := postgresMetadataStruct{} + metadataInfo := map[string]string{} + metadata.GetMetadataInfoFromStructType(reflect.TypeOf(metadataStruct), &metadataInfo) + return metadataInfo +} diff --git a/state/postgresql/postgresql_integration_test.go b/state/postgresql/postgresql_integration_test.go index 52ba490a5..3f88bae6d 100644 --- a/state/postgresql/postgresql_integration_test.go +++ b/state/postgresql/postgresql_integration_test.go @@ -560,7 +560,7 @@ func storeItemExists(t *testing.T, key string) bool { defer db.Close() exists := false - statement := fmt.Sprintf(`SELECT EXISTS (SELECT FROM %s WHERE key = $1)`, tableName) + statement := fmt.Sprintf(`SELECT EXISTS (SELECT FROM %s WHERE key = $1)`, defaultTableName) err = db.QueryRow(statement, key).Scan(&exists) assert.Nil(t, err) @@ -572,7 +572,7 @@ func getRowData(t *testing.T, key string) (returnValue string, insertdate sql.Nu assert.Nil(t, err) defer db.Close() - err = db.QueryRow(fmt.Sprintf("SELECT value, insertdate, updatedate FROM %s WHERE key = $1", tableName), key).Scan(&returnValue, &insertdate, &updatedate) + err = db.QueryRow(fmt.Sprintf("SELECT value, insertdate, updatedate FROM %s WHERE key = $1", defaultTableName), key).Scan(&returnValue, &insertdate, &updatedate) assert.Nil(t, err) return returnValue, insertdate, updatedate diff --git a/state/postgresql/postgresql_query.go b/state/postgresql/postgresql_query.go index 833618a6b..102ac2b4e 100644 --- a/state/postgresql/postgresql_query.go +++ b/state/postgresql/postgresql_query.go @@ -101,7 +101,7 @@ func (q *Query) VisitOR(f *query.OR) (string, error) { } func (q *Query) Finalize(filters string, qq *query.Query) error { - q.query = fmt.Sprintf("SELECT key, value, xmin as etag FROM %s", tableName) + q.query = fmt.Sprintf("SELECT key, value, xmin as etag FROM %s", defaultTableName) if filters != "" { q.query += fmt.Sprintf(" WHERE %s", filters) diff --git a/state/redis/redis.go b/state/redis/redis.go index 03c47fc88..ae676737c 100644 --- a/state/redis/redis.go +++ b/state/redis/redis.go @@ -16,6 +16,7 @@ package redis import ( "context" "fmt" + "reflect" "strconv" "strings" @@ -545,3 +546,10 @@ func (r *StateStore) Close() error { return r.client.Close() } + +func (r *StateStore) GetComponentMetadata() map[string]string { + metadataStruct := rediscomponent.Settings{} + metadataInfo := map[string]string{} + daprmetadata.GetMetadataInfoFromStructType(reflect.TypeOf(metadataStruct), &metadataInfo) + return metadataInfo +} diff --git a/state/redis/redis_test.go b/state/redis/redis_test.go index c90eeca17..9006af0f1 100644 --- a/state/redis/redis_test.go +++ b/state/redis/redis_test.go @@ -515,6 +515,23 @@ func TestTransactionalDeleteNoEtag(t *testing.T) { assert.Equal(t, 0, len(vals)) } +func TestGetMetadata(t *testing.T) { + s, c := setupMiniredis() + defer s.Close() + + ss := &StateStore{ + client: c, + json: jsoniter.ConfigFastest, + logger: logger.NewLogger("test"), + } + + metadataInfo := ss.GetComponentMetadata() + assert.Contains(t, metadataInfo, "redisHost") + assert.Contains(t, metadataInfo, "idleCheckFrequency") + assert.Equal(t, metadataInfo["redisHost"], "string") + assert.Equal(t, metadataInfo["idleCheckFrequency"], "redis.Duration") +} + func setupMiniredis() (*miniredis.Miniredis, *redis.Client) { s, err := miniredis.Run() if err != nil { diff --git a/state/rethinkdb/rethinkdb.go b/state/rethinkdb/rethinkdb.go index 6db3044b8..11dbe17d4 100644 --- a/state/rethinkdb/rethinkdb.go +++ b/state/rethinkdb/rethinkdb.go @@ -16,13 +16,13 @@ package rethinkdb import ( "encoding/json" "io" - "strconv" - "strings" + "reflect" "time" r "github.com/dancannon/gorethink" "github.com/pkg/errors" + "github.com/dapr/components-contrib/metadata" "github.com/dapr/components-contrib/state" "github.com/dapr/kit/logger" "github.com/dapr/kit/ptr" @@ -44,9 +44,9 @@ type RethinkDB struct { } type stateConfig struct { - r.ConnectOpts - Archive bool `json:"archive"` - Table string `json:"table"` + r.ConnectOpts `mapstructure:",squash"` + Archive bool `json:"archive"` + Table string `json:"table"` } type stateRecord struct { @@ -323,87 +323,17 @@ func metadataToConfig(cfg map[string]string, logger logger.Logger) (*stateConfig Table: stateTableNameDefault, } - // runtime - for k, v := range cfg { - switch k { - case "table": // string - c.Table = v - case "address": // string - c.Address = v - case "addresses": // []string - c.Addresses = strings.Split(v, ",") - case "database": // string - c.Database = v - case "username": // string - c.Username = v - case "password": // string - c.Password = v - case "authkey": // string - c.AuthKey = v - case "timeout": // time.Duration - d, err := time.ParseDuration(v) - if err != nil { - return nil, errors.Wrapf(err, "invalid timeout format: %v", v) - } - c.Timeout = d - case "write_timeout": // time.Duration - d, err := time.ParseDuration(v) - if err != nil { - return nil, errors.Wrapf(err, "invalid write timeout format: %v", v) - } - c.WriteTimeout = d - case "read_timeout": // time.Duration - d, err := time.ParseDuration(v) - if err != nil { - return nil, errors.Wrapf(err, "invalid read timeout format: %v", v) - } - c.ReadTimeout = d - case "keep_alive_timeout": // time.Duration - d, err := time.ParseDuration(v) - if err != nil { - return nil, errors.Wrapf(err, "invalid keep alive timeout format: %v", v) - } - c.KeepAlivePeriod = d - case "initial_cap": // int - i, err := strconv.Atoi(v) - if err != nil { - return nil, errors.Wrapf(err, "invalid keep initial cap format: %v", v) - } - c.InitialCap = i - case "max_open": // int - i, err := strconv.Atoi(v) - if err != nil { - return nil, errors.Wrapf(err, "invalid keep max open format: %v", v) - } - c.MaxOpen = i - case "discover_hosts": // bool - b, err := strconv.ParseBool(v) - if err != nil { - return nil, errors.Wrapf(err, "invalid discover hosts format: %v", v) - } - c.DiscoverHosts = b - case "use-open-tracing": // bool - b, err := strconv.ParseBool(v) - if err != nil { - return nil, errors.Wrapf(err, "invalid use open tracing format: %v", v) - } - c.UseOpentracing = b - case "archive": // bool - b, err := strconv.ParseBool(v) - if err != nil { - return nil, errors.Wrapf(err, "invalid use open tracing format: %v", v) - } - c.Archive = b - case "max_idle": // int - i, err := strconv.Atoi(v) - if err != nil { - return nil, errors.Wrapf(err, "invalid keep max idle format: %v", v) - } - c.InitialCap = i - default: - logger.Infof("unrecognized metadata: %s", k) - } + err := metadata.DecodeMetadata(cfg, &c) + if err != nil { + return nil, err } return &c, nil } + +func (s *RethinkDB) GetComponentMetadata() map[string]string { + metadataStruct := stateConfig{} + metadataInfo := map[string]string{} + metadata.GetMetadataInfoFromStructType(reflect.TypeOf(metadataStruct), &metadataInfo) + return metadataInfo +} diff --git a/state/rethinkdb/rethinkdb_test.go b/state/rethinkdb/rethinkdb_test.go index c29439069..058ede3f0 100644 --- a/state/rethinkdb/rethinkdb_test.go +++ b/state/rethinkdb/rethinkdb_test.go @@ -46,10 +46,10 @@ func TestGetRethinkDBMetadata(t *testing.T) { p["timeout"] = fmt.Sprintf("%v", timeout) maxOpen := 30 - p["max_open"] = fmt.Sprintf("%v", maxOpen) + p["maxOpen"] = fmt.Sprintf("%v", maxOpen) discoverHosts := true - p["discover_hosts"] = fmt.Sprintf("%v", discoverHosts) + p["discoverHosts"] = fmt.Sprintf("%v", discoverHosts) m, err := metadataToConfig(p, testLogger) assert.Nil(t, err) diff --git a/state/sqlserver/sqlserver.go b/state/sqlserver/sqlserver.go index 1bddd3a8f..296f6de0e 100644 --- a/state/sqlserver/sqlserver.go +++ b/state/sqlserver/sqlserver.go @@ -19,11 +19,11 @@ import ( "encoding/json" "errors" "fmt" - "strconv" "unicode" mssql "github.com/denisenkom/go-mssqldb" + "github.com/dapr/components-contrib/metadata" "github.com/dapr/components-contrib/state" "github.com/dapr/components-contrib/state/utils" "github.com/dapr/kit/logger" @@ -119,6 +119,16 @@ type SQLServer struct { db *sql.DB } +type sqlServerMetadata struct { + ConnectionString string + DatabaseName string + TableName string + Schema string + KeyType string + KeyLength int + IndexedProperties string +} + func isLetterOrNumber(c rune) bool { return unicode.IsNumber(c) || unicode.IsLetter(c) } @@ -155,29 +165,8 @@ func isValidIndexedPropertyType(s string) bool { // Init initializes the SQL server state store. func (s *SQLServer) Init(metadata state.Metadata) error { - if val, ok := metadata.Properties[connectionStringKey]; ok && val != "" { - s.connectionString = val - } else { - return fmt.Errorf("missing connection string") - } - - if err := s.getTable(metadata); err != nil { - return err - } - - if err := s.getDatabase(metadata); err != nil { - return err - } - - if err := s.getKeyType(metadata); err != nil { - return err - } - - if err := s.getSchema(metadata); err != nil { - return err - } - - if err := s.getIndexedProperties(metadata); err != nil { + err := s.parseMetadata(metadata.Properties) + if err != nil { return err } @@ -202,11 +191,50 @@ func (s *SQLServer) Init(metadata state.Metadata) error { return nil } +func (s *SQLServer) parseMetadata(meta map[string]string) error { + m := sqlServerMetadata{ + TableName: defaultTable, + Schema: defaultSchema, + DatabaseName: defaultDatabase, + KeyLength: defaultKeyLength, + } + err := metadata.DecodeMetadata(meta, &m) + if err != nil { + return err + } + if m.ConnectionString == "" { + return fmt.Errorf("missing connection string") + } + s.connectionString = m.ConnectionString + + if err := s.setTable(m.TableName); err != nil { + return err + } + + if err := s.setDatabase(m.DatabaseName); err != nil { + return err + } + + if err := s.setKeyType(m.KeyType, m.KeyLength); err != nil { + return err + } + + if err := s.setSchema(m.Schema); err != nil { + return err + } + + if err := s.setIndexedProperties(m.IndexedProperties); err != nil { + return err + } + + return nil +} + // Returns validated index properties. -func (s *SQLServer) getIndexedProperties(metadata state.Metadata) error { - if val, ok := metadata.Properties[indexedPropertiesKey]; ok && val != "" { +func (s *SQLServer) setIndexedProperties(indexedPropertiesString string) error { + if indexedPropertiesString != "" { var indexedProperties []IndexedProperty - err := json.Unmarshal([]byte(val), &indexedProperties) + err := json.Unmarshal([]byte(indexedPropertiesString), &indexedProperties) if err != nil { return err } @@ -255,9 +283,9 @@ func (s *SQLServer) validateIndexedProperties(indexedProperties []IndexedPropert } // Validates and returns the key type. -func (s *SQLServer) getKeyType(metadata state.Metadata) error { - if val, ok := metadata.Properties[keyTypeKey]; ok && val != "" { - kt, err := KeyTypeFromString(val) +func (s *SQLServer) setKeyType(keyType string, keyLength int) error { + if keyType != "" { + kt, err := KeyTypeFromString(keyType) if err != nil { return err } @@ -271,64 +299,44 @@ func (s *SQLServer) getKeyType(metadata state.Metadata) error { return nil } - if val, ok := metadata.Properties[keyLengthKey]; ok && val != "" { - var err error - s.keyLength, err = strconv.Atoi(val) - if err != nil { - return err - } - - if s.keyLength <= 0 { - return fmt.Errorf("invalid key length value of %d", s.keyLength) - } + if keyLength <= 0 { + return fmt.Errorf("invalid key length value of %d", keyLength) } else { - s.keyLength = defaultKeyLength + s.keyLength = keyLength } return nil } // Returns the schema name if set or the default value otherwise. -func (s *SQLServer) getSchema(metadata state.Metadata) error { - if val, ok := metadata.Properties[schemaKey]; ok && val != "" { - if !isValidSQLName(val) { - return fmt.Errorf("invalid schema name, accepted characters are (A-Z, a-z, 0-9, _)") - } - s.schema = val - } else { - s.schema = defaultSchema +func (s *SQLServer) setSchema(schemaName string) error { + if !isValidSQLName(schemaName) { + return fmt.Errorf("invalid schema name, accepted characters are (A-Z, a-z, 0-9, _)") } + s.schema = schemaName return nil } // Returns the database name if set or the default value otherwise. -func (s *SQLServer) getDatabase(metadata state.Metadata) error { - if val, ok := metadata.Properties[databaseNameKey]; ok && val != "" { - if !isValidSQLName(val) { - return fmt.Errorf("invalid database name, accepted characters are (A-Z, a-z, 0-9, _)") - } - - s.databaseName = val - } else { - s.databaseName = defaultDatabase +func (s *SQLServer) setDatabase(databaseName string) error { + if !isValidSQLName(databaseName) { + return fmt.Errorf("invalid database name, accepted characters are (A-Z, a-z, 0-9, _)") } + s.databaseName = databaseName + return nil } // Returns the table name if set or the default value otherwise. -func (s *SQLServer) getTable(metadata state.Metadata) error { - if val, ok := metadata.Properties[tableNameKey]; ok && val != "" { - if !isValidSQLName(val) { - return fmt.Errorf("invalid table name, accepted characters are (A-Z, a-z, 0-9, _)") - } - - s.tableName = val - } else { - s.tableName = defaultTable +func (s *SQLServer) setTable(tableName string) error { + if !isValidSQLName(tableName) { + return fmt.Errorf("invalid table name, accepted characters are (A-Z, a-z, 0-9, _)") } + s.tableName = tableName + return nil } @@ -623,3 +631,7 @@ func (s *SQLServer) BulkSet(req []state.SetRequest) error { return err } + +func (s *SQLServer) GetComponentMetadata() map[string]string { + return map[string]string{} +} diff --git a/state/sqlserver/sqlserver_test.go b/state/sqlserver/sqlserver_test.go index 6233e382f..cacaf4eb0 100644 --- a/state/sqlserver/sqlserver_test.go +++ b/state/sqlserver/sqlserver_test.go @@ -229,11 +229,6 @@ func TestInvalidConfiguration(t *testing.T) { props: map[string]string{connectionStringKey: ""}, expectedErr: "missing connection string", }, - { - name: "Invalid maxKeyLength value", - props: map[string]string{connectionStringKey: sampleConnectionString, tableNameKey: "test", keyLengthKey: "aa"}, - expectedErr: "parsing \"aa\"", - }, { name: "Negative maxKeyLength value", props: map[string]string{connectionStringKey: sampleConnectionString, tableNameKey: "test", keyLengthKey: "-1"}, diff --git a/state/store.go b/state/store.go index a61df3251..f99cb2b27 100644 --- a/state/store.go +++ b/state/store.go @@ -27,6 +27,7 @@ type Store interface { Delete(req *DeleteRequest) error Get(req *GetRequest) (*GetResponse, error) Set(req *SetRequest) error + GetComponentMetadata() map[string]string } func Ping(store Store) error { diff --git a/state/store_test.go b/state/store_test.go index b0d0b2bf6..a93e682cf 100644 --- a/state/store_test.go +++ b/state/store_test.go @@ -128,6 +128,10 @@ func (s *Store1) Set(req *SetRequest) error { return nil } +func (s *Store1) GetComponentMetadata() map[string]string { + return map[string]string{} +} + // example of store which supports bulk method. type Store2 struct { // DefaultBulkStore @@ -186,3 +190,7 @@ func (s *Store2) BulkDelete(req []DeleteRequest) error { return nil } + +func (s *Store2) GetComponentMetadata() map[string]string { + return map[string]string{} +} diff --git a/state/zookeeper/zk.go b/state/zookeeper/zk.go index 8cb0ebf60..8b2935148 100644 --- a/state/zookeeper/zk.go +++ b/state/zookeeper/zk.go @@ -16,6 +16,7 @@ package zookeeper import ( "errors" "path" + reflect "reflect" "strconv" "strings" "time" @@ -24,6 +25,7 @@ import ( jsoniter "github.com/json-iterator/go" "github.com/samuel/go-zookeeper/zk" + "github.com/dapr/components-contrib/metadata" "github.com/dapr/components-contrib/state" "github.com/dapr/kit/logger" "github.com/dapr/kit/ptr" @@ -56,16 +58,11 @@ type config struct { keyPrefixPath string } -func newConfig(metadata map[string]string) (c *config, err error) { - var buf []byte - - if buf, err = jsoniter.ConfigFastest.Marshal(metadata); err != nil { - return - } - +func newConfig(meta map[string]string) (c *config, err error) { var props properties - if err = jsoniter.ConfigFastest.Unmarshal(buf, &props); err != nil { - return + errDecode := metadata.DecodeMetadata(meta, &props) + if errDecode != nil { + return nil, errDecode } return props.parse() @@ -390,3 +387,10 @@ func (s *StateStore) marshalData(v interface{}) ([]byte, error) { return jsoniter.ConfigFastest.Marshal(v) } + +func (s *StateStore) GetComponentMetadata() map[string]string { + metadataStruct := properties{} + metadataInfo := map[string]string{} + metadata.GetMetadataInfoFromStructType(reflect.TypeOf(metadataStruct), &metadataInfo) + return metadataInfo +} diff --git a/tests/certification/bindings/alicloud/dubbo/go.mod b/tests/certification/bindings/alicloud/dubbo/go.mod index 005dfa299..3f16003fa 100644 --- a/tests/certification/bindings/alicloud/dubbo/go.mod +++ b/tests/certification/bindings/alicloud/dubbo/go.mod @@ -170,6 +170,8 @@ require ( sigs.k8s.io/yaml v1.3.0 // indirect ) +replace github.com/dapr/dapr => github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0 + replace github.com/dapr/components-contrib => ../../../../.. replace github.com/dapr/components-contrib/tests/certification => ../../.. diff --git a/tests/certification/bindings/alicloud/dubbo/go.sum b/tests/certification/bindings/alicloud/dubbo/go.sum index d4a0db797..a2f24d82c 100644 --- a/tests/certification/bindings/alicloud/dubbo/go.sum +++ b/tests/certification/bindings/alicloud/dubbo/go.sum @@ -64,7 +64,6 @@ github.com/Workiva/go-datastructures v1.0.53/go.mod h1:1yZL+zfsztete+ePzZz/Zb1/t github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5 h1:rFw4nCn9iMW+Vajsk51NtYIcwSTkXr+JGrMd36kTDJw= github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= github.com/agiledragon/gomonkey v2.0.2+incompatible/go.mod h1:2NGfXu1a80LLr2cmWXGBDaHEjb1idR6+FVlX5T3D9hw= -github.com/agrea/ptr v0.0.0-20180711073057-77a518d99b7b h1:WMhlIaJkDgEQSVJQM06YV+cYUl1r5OY5//ijMXJNqtA= github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= @@ -116,6 +115,8 @@ github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24 github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0 h1:DHv0Odl7nn296mOlv9HiqANeSywCLVLdoPeNY/t18x0= +github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0/go.mod h1:2Vqy6l1G2eq24stXXRqTE+Do9p+pAISrgGJ1BPknok8= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bits-and-blooms/bitset v1.2.0 h1:Kn4yilvwNtMACtf1eYDlG8H77R07mZSPbMjLyS07ChA= github.com/bits-and-blooms/bitset v1.2.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= @@ -170,8 +171,6 @@ github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ3 github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/creasty/defaults v1.5.2 h1:/VfB6uxpyp6h0fr7SPp7n8WJBoV8jfxQXPCnkVSjyls= github.com/creasty/defaults v1.5.2/go.mod h1:FPZ+Y0WNrbqOVw+c6av63eyHUAl6pMHZwqLPvXUZGfY= -github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e h1:Ieid1nWDFssDXrXIdRakN/jAcHMA1x3Rq0joFXGaMM0= -github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e/go.mod h1:mGNQLZnlzH8HX7GcQv3u4YNE432gs1CYC8NLbOf65SE= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= diff --git a/tests/certification/bindings/alicloud/nacos/go.mod b/tests/certification/bindings/alicloud/nacos/go.mod index fd8498119..085f76367 100644 --- a/tests/certification/bindings/alicloud/nacos/go.mod +++ b/tests/certification/bindings/alicloud/nacos/go.mod @@ -141,6 +141,8 @@ require ( sigs.k8s.io/yaml v1.3.0 // indirect ) +replace github.com/dapr/dapr => github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0 + replace github.com/dapr/components-contrib => ../../../../.. replace github.com/dapr/components-contrib/tests/certification => ../../.. diff --git a/tests/certification/bindings/alicloud/nacos/go.sum b/tests/certification/bindings/alicloud/nacos/go.sum index 572232ac8..ff48f8312 100644 --- a/tests/certification/bindings/alicloud/nacos/go.sum +++ b/tests/certification/bindings/alicloud/nacos/go.sum @@ -44,7 +44,6 @@ github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbt github.com/PuerkitoBio/purell v1.2.0 h1:/Jdm5QfyM8zdlqT6WVZU4cfP23sot6CEHA4CS49Ezig= github.com/PuerkitoBio/purell v1.2.0/go.mod h1:OhLRTaaIzhvIyofkJfB24gokC7tM42Px5UhoT32THBk= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= -github.com/agrea/ptr v0.0.0-20180711073057-77a518d99b7b h1:WMhlIaJkDgEQSVJQM06YV+cYUl1r5OY5//ijMXJNqtA= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= @@ -70,6 +69,8 @@ github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24 github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0 h1:DHv0Odl7nn296mOlv9HiqANeSywCLVLdoPeNY/t18x0= +github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0/go.mod h1:2Vqy6l1G2eq24stXXRqTE+Do9p+pAISrgGJ1BPknok8= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/buger/jsonparser v1.1.1 h1:2PnMjfWD7wBILjqQbt530v576A/cAbQvEW9gGIpYMUs= github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0= @@ -97,8 +98,6 @@ github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e h1:Ieid1nWDFssDXrXIdRakN/jAcHMA1x3Rq0joFXGaMM0= -github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e/go.mod h1:mGNQLZnlzH8HX7GcQv3u4YNE432gs1CYC8NLbOf65SE= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= diff --git a/tests/certification/bindings/azure/blobstorage/go.mod b/tests/certification/bindings/azure/blobstorage/go.mod index 0fa980566..df4503ea5 100644 --- a/tests/certification/bindings/azure/blobstorage/go.mod +++ b/tests/certification/bindings/azure/blobstorage/go.mod @@ -159,4 +159,6 @@ require ( replace github.com/dapr/components-contrib/tests/certification => ../../../ +replace github.com/dapr/dapr => github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0 + replace github.com/dapr/components-contrib => ../../../../../ diff --git a/tests/certification/bindings/azure/blobstorage/go.sum b/tests/certification/bindings/azure/blobstorage/go.sum index 5635e0fb2..3a90fb97c 100644 --- a/tests/certification/bindings/azure/blobstorage/go.sum +++ b/tests/certification/bindings/azure/blobstorage/go.sum @@ -97,7 +97,6 @@ github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbt github.com/PuerkitoBio/purell v1.2.0 h1:/Jdm5QfyM8zdlqT6WVZU4cfP23sot6CEHA4CS49Ezig= github.com/PuerkitoBio/purell v1.2.0/go.mod h1:OhLRTaaIzhvIyofkJfB24gokC7tM42Px5UhoT32THBk= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= -github.com/agrea/ptr v0.0.0-20180711073057-77a518d99b7b h1:WMhlIaJkDgEQSVJQM06YV+cYUl1r5OY5//ijMXJNqtA= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= @@ -119,6 +118,8 @@ github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24 github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0 h1:DHv0Odl7nn296mOlv9HiqANeSywCLVLdoPeNY/t18x0= +github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0/go.mod h1:2Vqy6l1G2eq24stXXRqTE+Do9p+pAISrgGJ1BPknok8= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= @@ -143,8 +144,6 @@ github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e h1:Ieid1nWDFssDXrXIdRakN/jAcHMA1x3Rq0joFXGaMM0= -github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e/go.mod h1:mGNQLZnlzH8HX7GcQv3u4YNE432gs1CYC8NLbOf65SE= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= diff --git a/tests/certification/bindings/azure/cosmosdb/go.mod b/tests/certification/bindings/azure/cosmosdb/go.mod index 649ebcf10..fd5bfac03 100644 --- a/tests/certification/bindings/azure/cosmosdb/go.mod +++ b/tests/certification/bindings/azure/cosmosdb/go.mod @@ -161,4 +161,6 @@ require ( replace github.com/dapr/components-contrib/tests/certification => ../../../ +replace github.com/dapr/dapr => github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0 + replace github.com/dapr/components-contrib => ../../../../../ diff --git a/tests/certification/bindings/azure/cosmosdb/go.sum b/tests/certification/bindings/azure/cosmosdb/go.sum index 76b91daf1..b63e24fa2 100644 --- a/tests/certification/bindings/azure/cosmosdb/go.sum +++ b/tests/certification/bindings/azure/cosmosdb/go.sum @@ -101,7 +101,6 @@ github.com/PuerkitoBio/purell v1.2.0/go.mod h1:OhLRTaaIzhvIyofkJfB24gokC7tM42Px5 github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/a8m/documentdb v1.3.1-0.20220405205223-5b41ba0aaeb1 h1:vdxL7id6rXNHNAh7yHUHiTsTvFupt+c7MBa+1bru+48= github.com/a8m/documentdb v1.3.1-0.20220405205223-5b41ba0aaeb1/go.mod h1:4Z0mpi7fkyqjxUdGiNMO3vagyiUoiwLncaIX6AsW5z0= -github.com/agrea/ptr v0.0.0-20180711073057-77a518d99b7b h1:WMhlIaJkDgEQSVJQM06YV+cYUl1r5OY5//ijMXJNqtA= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= @@ -123,6 +122,8 @@ github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24 github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0 h1:DHv0Odl7nn296mOlv9HiqANeSywCLVLdoPeNY/t18x0= +github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0/go.mod h1:2Vqy6l1G2eq24stXXRqTE+Do9p+pAISrgGJ1BPknok8= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= @@ -147,8 +148,6 @@ github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e h1:Ieid1nWDFssDXrXIdRakN/jAcHMA1x3Rq0joFXGaMM0= -github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e/go.mod h1:mGNQLZnlzH8HX7GcQv3u4YNE432gs1CYC8NLbOf65SE= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= diff --git a/tests/certification/bindings/azure/eventhubs/go.mod b/tests/certification/bindings/azure/eventhubs/go.mod index c0dbc5193..231983040 100644 --- a/tests/certification/bindings/azure/eventhubs/go.mod +++ b/tests/certification/bindings/azure/eventhubs/go.mod @@ -166,6 +166,8 @@ require ( sigs.k8s.io/yaml v1.3.0 // indirect ) +replace github.com/dapr/dapr => github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0 + replace github.com/dapr/components-contrib => ../../../../.. replace github.com/dapr/components-contrib/tests/certification => ../../.. diff --git a/tests/certification/bindings/azure/eventhubs/go.sum b/tests/certification/bindings/azure/eventhubs/go.sum index c9d2c4215..6e62d9e58 100644 --- a/tests/certification/bindings/azure/eventhubs/go.sum +++ b/tests/certification/bindings/azure/eventhubs/go.sum @@ -113,7 +113,6 @@ github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbt github.com/PuerkitoBio/purell v1.2.0 h1:/Jdm5QfyM8zdlqT6WVZU4cfP23sot6CEHA4CS49Ezig= github.com/PuerkitoBio/purell v1.2.0/go.mod h1:OhLRTaaIzhvIyofkJfB24gokC7tM42Px5UhoT32THBk= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= -github.com/agrea/ptr v0.0.0-20180711073057-77a518d99b7b h1:WMhlIaJkDgEQSVJQM06YV+cYUl1r5OY5//ijMXJNqtA= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= @@ -135,6 +134,8 @@ github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24 github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0 h1:DHv0Odl7nn296mOlv9HiqANeSywCLVLdoPeNY/t18x0= +github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0/go.mod h1:2Vqy6l1G2eq24stXXRqTE+Do9p+pAISrgGJ1BPknok8= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= @@ -159,8 +160,6 @@ github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e h1:Ieid1nWDFssDXrXIdRakN/jAcHMA1x3Rq0joFXGaMM0= -github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e/go.mod h1:mGNQLZnlzH8HX7GcQv3u4YNE432gs1CYC8NLbOf65SE= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= diff --git a/tests/certification/bindings/azure/servicebusqueues/go.mod b/tests/certification/bindings/azure/servicebusqueues/go.mod index 78eaa13e4..b03a1078a 100644 --- a/tests/certification/bindings/azure/servicebusqueues/go.mod +++ b/tests/certification/bindings/azure/servicebusqueues/go.mod @@ -163,6 +163,8 @@ require ( sigs.k8s.io/yaml v1.3.0 // indirect ) +replace github.com/dapr/dapr => github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0 + replace github.com/dapr/components-contrib => ../../../../.. replace github.com/dapr/components-contrib/tests/certification => ../../.. diff --git a/tests/certification/bindings/azure/servicebusqueues/go.sum b/tests/certification/bindings/azure/servicebusqueues/go.sum index cc085fae8..d6685e8d6 100644 --- a/tests/certification/bindings/azure/servicebusqueues/go.sum +++ b/tests/certification/bindings/azure/servicebusqueues/go.sum @@ -99,7 +99,6 @@ github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbt github.com/PuerkitoBio/purell v1.2.0 h1:/Jdm5QfyM8zdlqT6WVZU4cfP23sot6CEHA4CS49Ezig= github.com/PuerkitoBio/purell v1.2.0/go.mod h1:OhLRTaaIzhvIyofkJfB24gokC7tM42Px5UhoT32THBk= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= -github.com/agrea/ptr v0.0.0-20180711073057-77a518d99b7b h1:WMhlIaJkDgEQSVJQM06YV+cYUl1r5OY5//ijMXJNqtA= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= @@ -123,6 +122,8 @@ github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24 github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0 h1:DHv0Odl7nn296mOlv9HiqANeSywCLVLdoPeNY/t18x0= +github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0/go.mod h1:2Vqy6l1G2eq24stXXRqTE+Do9p+pAISrgGJ1BPknok8= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= @@ -147,8 +148,6 @@ github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e h1:Ieid1nWDFssDXrXIdRakN/jAcHMA1x3Rq0joFXGaMM0= -github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e/go.mod h1:mGNQLZnlzH8HX7GcQv3u4YNE432gs1CYC8NLbOf65SE= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= diff --git a/tests/certification/bindings/azure/storagequeues/go.mod b/tests/certification/bindings/azure/storagequeues/go.mod index ce96b0fb2..64645190d 100644 --- a/tests/certification/bindings/azure/storagequeues/go.mod +++ b/tests/certification/bindings/azure/storagequeues/go.mod @@ -159,6 +159,8 @@ require ( sigs.k8s.io/yaml v1.3.0 // indirect ) +replace github.com/dapr/dapr => github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0 + replace github.com/dapr/components-contrib => ../../../../.. replace github.com/dapr/components-contrib/tests/certification => ../../.. diff --git a/tests/certification/bindings/azure/storagequeues/go.sum b/tests/certification/bindings/azure/storagequeues/go.sum index 656b80388..b9d06c9b6 100644 --- a/tests/certification/bindings/azure/storagequeues/go.sum +++ b/tests/certification/bindings/azure/storagequeues/go.sum @@ -95,7 +95,6 @@ github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbt github.com/PuerkitoBio/purell v1.2.0 h1:/Jdm5QfyM8zdlqT6WVZU4cfP23sot6CEHA4CS49Ezig= github.com/PuerkitoBio/purell v1.2.0/go.mod h1:OhLRTaaIzhvIyofkJfB24gokC7tM42Px5UhoT32THBk= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= -github.com/agrea/ptr v0.0.0-20180711073057-77a518d99b7b h1:WMhlIaJkDgEQSVJQM06YV+cYUl1r5OY5//ijMXJNqtA= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= @@ -117,6 +116,8 @@ github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24 github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0 h1:DHv0Odl7nn296mOlv9HiqANeSywCLVLdoPeNY/t18x0= +github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0/go.mod h1:2Vqy6l1G2eq24stXXRqTE+Do9p+pAISrgGJ1BPknok8= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= @@ -141,8 +142,6 @@ github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e h1:Ieid1nWDFssDXrXIdRakN/jAcHMA1x3Rq0joFXGaMM0= -github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e/go.mod h1:mGNQLZnlzH8HX7GcQv3u4YNE432gs1CYC8NLbOf65SE= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= diff --git a/tests/certification/bindings/kafka/go.mod b/tests/certification/bindings/kafka/go.mod index c596e42cf..39c70e7c5 100644 --- a/tests/certification/bindings/kafka/go.mod +++ b/tests/certification/bindings/kafka/go.mod @@ -155,4 +155,6 @@ require ( replace github.com/dapr/components-contrib/tests/certification => ../../ +replace github.com/dapr/dapr => github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0 + replace github.com/dapr/components-contrib => ../../../../ diff --git a/tests/certification/bindings/kafka/go.sum b/tests/certification/bindings/kafka/go.sum index 77b7fa071..1f2b81f1d 100644 --- a/tests/certification/bindings/kafka/go.sum +++ b/tests/certification/bindings/kafka/go.sum @@ -46,7 +46,6 @@ github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdko github.com/Shopify/sarama v1.37.2 h1:LoBbU0yJPte0cE5TZCGdlzZRmMgMtZU/XgnUKZg9Cv4= github.com/Shopify/sarama v1.37.2/go.mod h1:Nxye/E+YPru//Bpaorfhc3JsSGYwCaDDj+R4bK52U5o= github.com/Shopify/toxiproxy/v2 v2.5.0 h1:i4LPT+qrSlKNtQf5QliVjdP08GyAH8+BUIc9gT0eahc= -github.com/agrea/ptr v0.0.0-20180711073057-77a518d99b7b h1:WMhlIaJkDgEQSVJQM06YV+cYUl1r5OY5//ijMXJNqtA= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= @@ -68,6 +67,8 @@ github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24 github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0 h1:DHv0Odl7nn296mOlv9HiqANeSywCLVLdoPeNY/t18x0= +github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0/go.mod h1:2Vqy6l1G2eq24stXXRqTE+Do9p+pAISrgGJ1BPknok8= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= @@ -92,8 +93,6 @@ github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e h1:Ieid1nWDFssDXrXIdRakN/jAcHMA1x3Rq0joFXGaMM0= -github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e/go.mod h1:mGNQLZnlzH8HX7GcQv3u4YNE432gs1CYC8NLbOf65SE= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= diff --git a/tests/certification/bindings/localstorage/go.mod b/tests/certification/bindings/localstorage/go.mod index 5c34cca99..ee5a3a95d 100644 --- a/tests/certification/bindings/localstorage/go.mod +++ b/tests/certification/bindings/localstorage/go.mod @@ -134,6 +134,8 @@ require ( sigs.k8s.io/yaml v1.3.0 // indirect ) +replace github.com/dapr/dapr => github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0 + replace github.com/dapr/components-contrib => ../../../.. replace github.com/dapr/components-contrib/tests/certification => ../.. diff --git a/tests/certification/bindings/localstorage/go.sum b/tests/certification/bindings/localstorage/go.sum index 0c051efe4..0d8e9d344 100644 --- a/tests/certification/bindings/localstorage/go.sum +++ b/tests/certification/bindings/localstorage/go.sum @@ -43,7 +43,6 @@ github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbt github.com/PuerkitoBio/purell v1.2.0 h1:/Jdm5QfyM8zdlqT6WVZU4cfP23sot6CEHA4CS49Ezig= github.com/PuerkitoBio/purell v1.2.0/go.mod h1:OhLRTaaIzhvIyofkJfB24gokC7tM42Px5UhoT32THBk= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= -github.com/agrea/ptr v0.0.0-20180711073057-77a518d99b7b h1:WMhlIaJkDgEQSVJQM06YV+cYUl1r5OY5//ijMXJNqtA= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= @@ -65,6 +64,8 @@ github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24 github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0 h1:DHv0Odl7nn296mOlv9HiqANeSywCLVLdoPeNY/t18x0= +github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0/go.mod h1:2Vqy6l1G2eq24stXXRqTE+Do9p+pAISrgGJ1BPknok8= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= @@ -91,8 +92,6 @@ github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWH github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/cyphar/filepath-securejoin v0.2.3 h1:YX6ebbZCZP7VkM3scTTokDgBL2TY741X51MTk3ycuNI= github.com/cyphar/filepath-securejoin v0.2.3/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= -github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e h1:Ieid1nWDFssDXrXIdRakN/jAcHMA1x3Rq0joFXGaMM0= -github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e/go.mod h1:mGNQLZnlzH8HX7GcQv3u4YNE432gs1CYC8NLbOf65SE= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= diff --git a/tests/certification/bindings/postgres/go.mod b/tests/certification/bindings/postgres/go.mod index a054960ef..42f2f4519 100644 --- a/tests/certification/bindings/postgres/go.mod +++ b/tests/certification/bindings/postgres/go.mod @@ -142,4 +142,6 @@ require ( replace github.com/dapr/components-contrib/tests/certification => ../../ +replace github.com/dapr/dapr => github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0 + replace github.com/dapr/components-contrib => ../../../../ diff --git a/tests/certification/bindings/postgres/go.sum b/tests/certification/bindings/postgres/go.sum index 44d5bf22f..752fd2a1e 100644 --- a/tests/certification/bindings/postgres/go.sum +++ b/tests/certification/bindings/postgres/go.sum @@ -43,7 +43,6 @@ github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbt github.com/PuerkitoBio/purell v1.2.0 h1:/Jdm5QfyM8zdlqT6WVZU4cfP23sot6CEHA4CS49Ezig= github.com/PuerkitoBio/purell v1.2.0/go.mod h1:OhLRTaaIzhvIyofkJfB24gokC7tM42Px5UhoT32THBk= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= -github.com/agrea/ptr v0.0.0-20180711073057-77a518d99b7b h1:WMhlIaJkDgEQSVJQM06YV+cYUl1r5OY5//ijMXJNqtA= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= @@ -65,6 +64,8 @@ github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24 github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0 h1:DHv0Odl7nn296mOlv9HiqANeSywCLVLdoPeNY/t18x0= +github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0/go.mod h1:2Vqy6l1G2eq24stXXRqTE+Do9p+pAISrgGJ1BPknok8= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= @@ -89,8 +90,6 @@ github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e h1:Ieid1nWDFssDXrXIdRakN/jAcHMA1x3Rq0joFXGaMM0= -github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e/go.mod h1:mGNQLZnlzH8HX7GcQv3u4YNE432gs1CYC8NLbOf65SE= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= diff --git a/tests/certification/bindings/rabbitmq/go.mod b/tests/certification/bindings/rabbitmq/go.mod index b1d77eb71..075e437e5 100644 --- a/tests/certification/bindings/rabbitmq/go.mod +++ b/tests/certification/bindings/rabbitmq/go.mod @@ -139,4 +139,6 @@ require ( replace github.com/dapr/components-contrib/tests/certification => ../../ +replace github.com/dapr/dapr => github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0 + replace github.com/dapr/components-contrib => ../../../../ diff --git a/tests/certification/bindings/rabbitmq/go.sum b/tests/certification/bindings/rabbitmq/go.sum index 1e990bab6..a4eff7e01 100644 --- a/tests/certification/bindings/rabbitmq/go.sum +++ b/tests/certification/bindings/rabbitmq/go.sum @@ -43,7 +43,6 @@ github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbt github.com/PuerkitoBio/purell v1.2.0 h1:/Jdm5QfyM8zdlqT6WVZU4cfP23sot6CEHA4CS49Ezig= github.com/PuerkitoBio/purell v1.2.0/go.mod h1:OhLRTaaIzhvIyofkJfB24gokC7tM42Px5UhoT32THBk= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= -github.com/agrea/ptr v0.0.0-20180711073057-77a518d99b7b h1:WMhlIaJkDgEQSVJQM06YV+cYUl1r5OY5//ijMXJNqtA= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= @@ -65,6 +64,8 @@ github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24 github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0 h1:DHv0Odl7nn296mOlv9HiqANeSywCLVLdoPeNY/t18x0= +github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0/go.mod h1:2Vqy6l1G2eq24stXXRqTE+Do9p+pAISrgGJ1BPknok8= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= @@ -89,8 +90,6 @@ github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e h1:Ieid1nWDFssDXrXIdRakN/jAcHMA1x3Rq0joFXGaMM0= -github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e/go.mod h1:mGNQLZnlzH8HX7GcQv3u4YNE432gs1CYC8NLbOf65SE= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= diff --git a/tests/certification/bindings/redis/go.mod b/tests/certification/bindings/redis/go.mod index 6d43bfcf5..40e8b93ba 100644 --- a/tests/certification/bindings/redis/go.mod +++ b/tests/certification/bindings/redis/go.mod @@ -136,6 +136,8 @@ require ( sigs.k8s.io/yaml v1.3.0 // indirect ) +replace github.com/dapr/dapr => github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0 + replace github.com/dapr/components-contrib => ../../../.. replace github.com/dapr/components-contrib/tests/certification => ../.. diff --git a/tests/certification/bindings/redis/go.sum b/tests/certification/bindings/redis/go.sum index f9e4d82bd..eb9fe226b 100644 --- a/tests/certification/bindings/redis/go.sum +++ b/tests/certification/bindings/redis/go.sum @@ -43,7 +43,6 @@ github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbt github.com/PuerkitoBio/purell v1.2.0 h1:/Jdm5QfyM8zdlqT6WVZU4cfP23sot6CEHA4CS49Ezig= github.com/PuerkitoBio/purell v1.2.0/go.mod h1:OhLRTaaIzhvIyofkJfB24gokC7tM42Px5UhoT32THBk= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= -github.com/agrea/ptr v0.0.0-20180711073057-77a518d99b7b h1:WMhlIaJkDgEQSVJQM06YV+cYUl1r5OY5//ijMXJNqtA= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= @@ -67,6 +66,8 @@ github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24 github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0 h1:DHv0Odl7nn296mOlv9HiqANeSywCLVLdoPeNY/t18x0= +github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0/go.mod h1:2Vqy6l1G2eq24stXXRqTE+Do9p+pAISrgGJ1BPknok8= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= @@ -91,8 +92,6 @@ github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e h1:Ieid1nWDFssDXrXIdRakN/jAcHMA1x3Rq0joFXGaMM0= -github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e/go.mod h1:mGNQLZnlzH8HX7GcQv3u4YNE432gs1CYC8NLbOf65SE= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= diff --git a/tests/certification/go.mod b/tests/certification/go.mod index 81c12676d..bb8662ceb 100644 --- a/tests/certification/go.mod +++ b/tests/certification/go.mod @@ -138,4 +138,6 @@ require ( ) +replace github.com/dapr/dapr => github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0 + replace github.com/dapr/components-contrib => ../../ diff --git a/tests/certification/go.sum b/tests/certification/go.sum index db82d340e..113c706b3 100644 --- a/tests/certification/go.sum +++ b/tests/certification/go.sum @@ -43,7 +43,6 @@ github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbt github.com/PuerkitoBio/purell v1.2.0 h1:/Jdm5QfyM8zdlqT6WVZU4cfP23sot6CEHA4CS49Ezig= github.com/PuerkitoBio/purell v1.2.0/go.mod h1:OhLRTaaIzhvIyofkJfB24gokC7tM42Px5UhoT32THBk= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= -github.com/agrea/ptr v0.0.0-20180711073057-77a518d99b7b h1:WMhlIaJkDgEQSVJQM06YV+cYUl1r5OY5//ijMXJNqtA= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= @@ -65,6 +64,8 @@ github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24 github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0 h1:DHv0Odl7nn296mOlv9HiqANeSywCLVLdoPeNY/t18x0= +github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0/go.mod h1:2Vqy6l1G2eq24stXXRqTE+Do9p+pAISrgGJ1BPknok8= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= @@ -89,8 +90,6 @@ github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e h1:Ieid1nWDFssDXrXIdRakN/jAcHMA1x3Rq0joFXGaMM0= -github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e/go.mod h1:mGNQLZnlzH8HX7GcQv3u4YNE432gs1CYC8NLbOf65SE= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= diff --git a/tests/certification/pubsub/azure/eventhubs/go.mod b/tests/certification/pubsub/azure/eventhubs/go.mod index 9043ab619..7055be7b1 100644 --- a/tests/certification/pubsub/azure/eventhubs/go.mod +++ b/tests/certification/pubsub/azure/eventhubs/go.mod @@ -167,4 +167,6 @@ require ( replace github.com/dapr/components-contrib/tests/certification => ../../../ +replace github.com/dapr/dapr => github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0 + replace github.com/dapr/components-contrib => ../../../../../ diff --git a/tests/certification/pubsub/azure/eventhubs/go.sum b/tests/certification/pubsub/azure/eventhubs/go.sum index 53d72ab43..7848bdb15 100644 --- a/tests/certification/pubsub/azure/eventhubs/go.sum +++ b/tests/certification/pubsub/azure/eventhubs/go.sum @@ -113,7 +113,6 @@ github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbt github.com/PuerkitoBio/purell v1.2.0 h1:/Jdm5QfyM8zdlqT6WVZU4cfP23sot6CEHA4CS49Ezig= github.com/PuerkitoBio/purell v1.2.0/go.mod h1:OhLRTaaIzhvIyofkJfB24gokC7tM42Px5UhoT32THBk= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= -github.com/agrea/ptr v0.0.0-20180711073057-77a518d99b7b h1:WMhlIaJkDgEQSVJQM06YV+cYUl1r5OY5//ijMXJNqtA= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= @@ -135,6 +134,8 @@ github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24 github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0 h1:DHv0Odl7nn296mOlv9HiqANeSywCLVLdoPeNY/t18x0= +github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0/go.mod h1:2Vqy6l1G2eq24stXXRqTE+Do9p+pAISrgGJ1BPknok8= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= @@ -159,8 +160,6 @@ github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e h1:Ieid1nWDFssDXrXIdRakN/jAcHMA1x3Rq0joFXGaMM0= -github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e/go.mod h1:mGNQLZnlzH8HX7GcQv3u4YNE432gs1CYC8NLbOf65SE= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= diff --git a/tests/certification/pubsub/azure/servicebus/topics/go.mod b/tests/certification/pubsub/azure/servicebus/topics/go.mod index 7951cab40..62e0f47b8 100644 --- a/tests/certification/pubsub/azure/servicebus/topics/go.mod +++ b/tests/certification/pubsub/azure/servicebus/topics/go.mod @@ -163,6 +163,8 @@ require ( sigs.k8s.io/yaml v1.3.0 // indirect ) +replace github.com/dapr/dapr => github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0 + replace github.com/dapr/components-contrib => ../../../../../.. replace github.com/dapr/components-contrib/tests/certification => ../../../.. diff --git a/tests/certification/pubsub/azure/servicebus/topics/go.sum b/tests/certification/pubsub/azure/servicebus/topics/go.sum index cc085fae8..d6685e8d6 100644 --- a/tests/certification/pubsub/azure/servicebus/topics/go.sum +++ b/tests/certification/pubsub/azure/servicebus/topics/go.sum @@ -99,7 +99,6 @@ github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbt github.com/PuerkitoBio/purell v1.2.0 h1:/Jdm5QfyM8zdlqT6WVZU4cfP23sot6CEHA4CS49Ezig= github.com/PuerkitoBio/purell v1.2.0/go.mod h1:OhLRTaaIzhvIyofkJfB24gokC7tM42Px5UhoT32THBk= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= -github.com/agrea/ptr v0.0.0-20180711073057-77a518d99b7b h1:WMhlIaJkDgEQSVJQM06YV+cYUl1r5OY5//ijMXJNqtA= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= @@ -123,6 +122,8 @@ github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24 github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0 h1:DHv0Odl7nn296mOlv9HiqANeSywCLVLdoPeNY/t18x0= +github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0/go.mod h1:2Vqy6l1G2eq24stXXRqTE+Do9p+pAISrgGJ1BPknok8= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= @@ -147,8 +148,6 @@ github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e h1:Ieid1nWDFssDXrXIdRakN/jAcHMA1x3Rq0joFXGaMM0= -github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e/go.mod h1:mGNQLZnlzH8HX7GcQv3u4YNE432gs1CYC8NLbOf65SE= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= diff --git a/tests/certification/pubsub/kafka/go.mod b/tests/certification/pubsub/kafka/go.mod index 3a9b7aac2..270a76518 100644 --- a/tests/certification/pubsub/kafka/go.mod +++ b/tests/certification/pubsub/kafka/go.mod @@ -155,4 +155,6 @@ require ( replace github.com/dapr/components-contrib/tests/certification => ../../ +replace github.com/dapr/dapr => github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0 + replace github.com/dapr/components-contrib => ../../../../ diff --git a/tests/certification/pubsub/kafka/go.sum b/tests/certification/pubsub/kafka/go.sum index 77b7fa071..1f2b81f1d 100644 --- a/tests/certification/pubsub/kafka/go.sum +++ b/tests/certification/pubsub/kafka/go.sum @@ -46,7 +46,6 @@ github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdko github.com/Shopify/sarama v1.37.2 h1:LoBbU0yJPte0cE5TZCGdlzZRmMgMtZU/XgnUKZg9Cv4= github.com/Shopify/sarama v1.37.2/go.mod h1:Nxye/E+YPru//Bpaorfhc3JsSGYwCaDDj+R4bK52U5o= github.com/Shopify/toxiproxy/v2 v2.5.0 h1:i4LPT+qrSlKNtQf5QliVjdP08GyAH8+BUIc9gT0eahc= -github.com/agrea/ptr v0.0.0-20180711073057-77a518d99b7b h1:WMhlIaJkDgEQSVJQM06YV+cYUl1r5OY5//ijMXJNqtA= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= @@ -68,6 +67,8 @@ github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24 github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0 h1:DHv0Odl7nn296mOlv9HiqANeSywCLVLdoPeNY/t18x0= +github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0/go.mod h1:2Vqy6l1G2eq24stXXRqTE+Do9p+pAISrgGJ1BPknok8= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= @@ -92,8 +93,6 @@ github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e h1:Ieid1nWDFssDXrXIdRakN/jAcHMA1x3Rq0joFXGaMM0= -github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e/go.mod h1:mGNQLZnlzH8HX7GcQv3u4YNE432gs1CYC8NLbOf65SE= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= diff --git a/tests/certification/pubsub/mqtt/go.mod b/tests/certification/pubsub/mqtt/go.mod index 05e06f359..d05b98913 100644 --- a/tests/certification/pubsub/mqtt/go.mod +++ b/tests/certification/pubsub/mqtt/go.mod @@ -142,4 +142,6 @@ require ( replace github.com/dapr/components-contrib/tests/certification => ../../ +replace github.com/dapr/dapr => github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0 + replace github.com/dapr/components-contrib => ../../../../ diff --git a/tests/certification/pubsub/mqtt/go.sum b/tests/certification/pubsub/mqtt/go.sum index 5581f252a..b8ad6725c 100644 --- a/tests/certification/pubsub/mqtt/go.sum +++ b/tests/certification/pubsub/mqtt/go.sum @@ -43,7 +43,6 @@ github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbt github.com/PuerkitoBio/purell v1.2.0 h1:/Jdm5QfyM8zdlqT6WVZU4cfP23sot6CEHA4CS49Ezig= github.com/PuerkitoBio/purell v1.2.0/go.mod h1:OhLRTaaIzhvIyofkJfB24gokC7tM42Px5UhoT32THBk= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= -github.com/agrea/ptr v0.0.0-20180711073057-77a518d99b7b h1:WMhlIaJkDgEQSVJQM06YV+cYUl1r5OY5//ijMXJNqtA= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= @@ -67,6 +66,8 @@ github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24 github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0 h1:DHv0Odl7nn296mOlv9HiqANeSywCLVLdoPeNY/t18x0= +github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0/go.mod h1:2Vqy6l1G2eq24stXXRqTE+Do9p+pAISrgGJ1BPknok8= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= @@ -91,8 +92,6 @@ github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e h1:Ieid1nWDFssDXrXIdRakN/jAcHMA1x3Rq0joFXGaMM0= -github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e/go.mod h1:mGNQLZnlzH8HX7GcQv3u4YNE432gs1CYC8NLbOf65SE= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= diff --git a/tests/certification/pubsub/rabbitmq/go.mod b/tests/certification/pubsub/rabbitmq/go.mod index 42947bfca..8135796bf 100644 --- a/tests/certification/pubsub/rabbitmq/go.mod +++ b/tests/certification/pubsub/rabbitmq/go.mod @@ -139,4 +139,6 @@ require ( replace github.com/dapr/components-contrib/tests/certification => ../../ +replace github.com/dapr/dapr => github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0 + replace github.com/dapr/components-contrib => ../../../../ diff --git a/tests/certification/pubsub/rabbitmq/go.sum b/tests/certification/pubsub/rabbitmq/go.sum index 1e990bab6..a4eff7e01 100644 --- a/tests/certification/pubsub/rabbitmq/go.sum +++ b/tests/certification/pubsub/rabbitmq/go.sum @@ -43,7 +43,6 @@ github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbt github.com/PuerkitoBio/purell v1.2.0 h1:/Jdm5QfyM8zdlqT6WVZU4cfP23sot6CEHA4CS49Ezig= github.com/PuerkitoBio/purell v1.2.0/go.mod h1:OhLRTaaIzhvIyofkJfB24gokC7tM42Px5UhoT32THBk= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= -github.com/agrea/ptr v0.0.0-20180711073057-77a518d99b7b h1:WMhlIaJkDgEQSVJQM06YV+cYUl1r5OY5//ijMXJNqtA= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= @@ -65,6 +64,8 @@ github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24 github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0 h1:DHv0Odl7nn296mOlv9HiqANeSywCLVLdoPeNY/t18x0= +github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0/go.mod h1:2Vqy6l1G2eq24stXXRqTE+Do9p+pAISrgGJ1BPknok8= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= @@ -89,8 +90,6 @@ github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e h1:Ieid1nWDFssDXrXIdRakN/jAcHMA1x3Rq0joFXGaMM0= -github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e/go.mod h1:mGNQLZnlzH8HX7GcQv3u4YNE432gs1CYC8NLbOf65SE= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= diff --git a/tests/certification/secretstores/azure/keyvault/go.mod b/tests/certification/secretstores/azure/keyvault/go.mod index 9e2fc5ffe..77c7dd5d7 100644 --- a/tests/certification/secretstores/azure/keyvault/go.mod +++ b/tests/certification/secretstores/azure/keyvault/go.mod @@ -160,4 +160,6 @@ require ( replace github.com/dapr/components-contrib/tests/certification => ../../../ +replace github.com/dapr/dapr => github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0 + replace github.com/dapr/components-contrib => ../../../../../ diff --git a/tests/certification/secretstores/azure/keyvault/go.sum b/tests/certification/secretstores/azure/keyvault/go.sum index c642d3d73..b6d23539f 100644 --- a/tests/certification/secretstores/azure/keyvault/go.sum +++ b/tests/certification/secretstores/azure/keyvault/go.sum @@ -99,7 +99,6 @@ github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbt github.com/PuerkitoBio/purell v1.2.0 h1:/Jdm5QfyM8zdlqT6WVZU4cfP23sot6CEHA4CS49Ezig= github.com/PuerkitoBio/purell v1.2.0/go.mod h1:OhLRTaaIzhvIyofkJfB24gokC7tM42Px5UhoT32THBk= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= -github.com/agrea/ptr v0.0.0-20180711073057-77a518d99b7b h1:WMhlIaJkDgEQSVJQM06YV+cYUl1r5OY5//ijMXJNqtA= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= @@ -121,6 +120,8 @@ github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24 github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0 h1:DHv0Odl7nn296mOlv9HiqANeSywCLVLdoPeNY/t18x0= +github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0/go.mod h1:2Vqy6l1G2eq24stXXRqTE+Do9p+pAISrgGJ1BPknok8= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= @@ -145,8 +146,6 @@ github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e h1:Ieid1nWDFssDXrXIdRakN/jAcHMA1x3Rq0joFXGaMM0= -github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e/go.mod h1:mGNQLZnlzH8HX7GcQv3u4YNE432gs1CYC8NLbOf65SE= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= diff --git a/tests/certification/secretstores/hashicorp/vault/go.mod b/tests/certification/secretstores/hashicorp/vault/go.mod index 1d72c4125..c35b32c21 100644 --- a/tests/certification/secretstores/hashicorp/vault/go.mod +++ b/tests/certification/secretstores/hashicorp/vault/go.mod @@ -136,4 +136,6 @@ require ( replace github.com/dapr/components-contrib/tests/certification => ../../../ +replace github.com/dapr/dapr => github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0 + replace github.com/dapr/components-contrib => ../../../../../ diff --git a/tests/certification/secretstores/hashicorp/vault/go.sum b/tests/certification/secretstores/hashicorp/vault/go.sum index ae4025442..551dc9dff 100644 --- a/tests/certification/secretstores/hashicorp/vault/go.sum +++ b/tests/certification/secretstores/hashicorp/vault/go.sum @@ -43,7 +43,6 @@ github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbt github.com/PuerkitoBio/purell v1.2.0 h1:/Jdm5QfyM8zdlqT6WVZU4cfP23sot6CEHA4CS49Ezig= github.com/PuerkitoBio/purell v1.2.0/go.mod h1:OhLRTaaIzhvIyofkJfB24gokC7tM42Px5UhoT32THBk= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= -github.com/agrea/ptr v0.0.0-20180711073057-77a518d99b7b h1:WMhlIaJkDgEQSVJQM06YV+cYUl1r5OY5//ijMXJNqtA= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= @@ -65,6 +64,8 @@ github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24 github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0 h1:DHv0Odl7nn296mOlv9HiqANeSywCLVLdoPeNY/t18x0= +github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0/go.mod h1:2Vqy6l1G2eq24stXXRqTE+Do9p+pAISrgGJ1BPknok8= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= @@ -89,8 +90,6 @@ github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e h1:Ieid1nWDFssDXrXIdRakN/jAcHMA1x3Rq0joFXGaMM0= -github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e/go.mod h1:mGNQLZnlzH8HX7GcQv3u4YNE432gs1CYC8NLbOf65SE= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= diff --git a/tests/certification/secretstores/local/env/go.mod b/tests/certification/secretstores/local/env/go.mod index c2a1fea2b..7eb46dd7c 100644 --- a/tests/certification/secretstores/local/env/go.mod +++ b/tests/certification/secretstores/local/env/go.mod @@ -133,6 +133,8 @@ require ( sigs.k8s.io/yaml v1.3.0 // indirect ) +replace github.com/dapr/dapr => github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0 + replace github.com/dapr/components-contrib => ../../../../.. replace github.com/dapr/components-contrib/tests/certification => ../../.. diff --git a/tests/certification/secretstores/local/env/go.sum b/tests/certification/secretstores/local/env/go.sum index 0c41a3545..823b0c866 100644 --- a/tests/certification/secretstores/local/env/go.sum +++ b/tests/certification/secretstores/local/env/go.sum @@ -43,7 +43,6 @@ github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbt github.com/PuerkitoBio/purell v1.2.0 h1:/Jdm5QfyM8zdlqT6WVZU4cfP23sot6CEHA4CS49Ezig= github.com/PuerkitoBio/purell v1.2.0/go.mod h1:OhLRTaaIzhvIyofkJfB24gokC7tM42Px5UhoT32THBk= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= -github.com/agrea/ptr v0.0.0-20180711073057-77a518d99b7b h1:WMhlIaJkDgEQSVJQM06YV+cYUl1r5OY5//ijMXJNqtA= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= @@ -65,6 +64,8 @@ github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24 github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0 h1:DHv0Odl7nn296mOlv9HiqANeSywCLVLdoPeNY/t18x0= +github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0/go.mod h1:2Vqy6l1G2eq24stXXRqTE+Do9p+pAISrgGJ1BPknok8= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= @@ -89,8 +90,6 @@ github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e h1:Ieid1nWDFssDXrXIdRakN/jAcHMA1x3Rq0joFXGaMM0= -github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e/go.mod h1:mGNQLZnlzH8HX7GcQv3u4YNE432gs1CYC8NLbOf65SE= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= diff --git a/tests/certification/secretstores/local/file/go.mod b/tests/certification/secretstores/local/file/go.mod index 04406b348..daaabeafd 100644 --- a/tests/certification/secretstores/local/file/go.mod +++ b/tests/certification/secretstores/local/file/go.mod @@ -133,6 +133,8 @@ require ( sigs.k8s.io/yaml v1.3.0 // indirect ) +replace github.com/dapr/dapr => github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0 + replace github.com/dapr/components-contrib => ../../../../.. replace github.com/dapr/components-contrib/tests/certification => ../../.. diff --git a/tests/certification/secretstores/local/file/go.sum b/tests/certification/secretstores/local/file/go.sum index 0c41a3545..823b0c866 100644 --- a/tests/certification/secretstores/local/file/go.sum +++ b/tests/certification/secretstores/local/file/go.sum @@ -43,7 +43,6 @@ github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbt github.com/PuerkitoBio/purell v1.2.0 h1:/Jdm5QfyM8zdlqT6WVZU4cfP23sot6CEHA4CS49Ezig= github.com/PuerkitoBio/purell v1.2.0/go.mod h1:OhLRTaaIzhvIyofkJfB24gokC7tM42Px5UhoT32THBk= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= -github.com/agrea/ptr v0.0.0-20180711073057-77a518d99b7b h1:WMhlIaJkDgEQSVJQM06YV+cYUl1r5OY5//ijMXJNqtA= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= @@ -65,6 +64,8 @@ github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24 github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0 h1:DHv0Odl7nn296mOlv9HiqANeSywCLVLdoPeNY/t18x0= +github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0/go.mod h1:2Vqy6l1G2eq24stXXRqTE+Do9p+pAISrgGJ1BPknok8= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= @@ -89,8 +90,6 @@ github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e h1:Ieid1nWDFssDXrXIdRakN/jAcHMA1x3Rq0joFXGaMM0= -github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e/go.mod h1:mGNQLZnlzH8HX7GcQv3u4YNE432gs1CYC8NLbOf65SE= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= diff --git a/tests/certification/state/azure/blobstorage/go.mod b/tests/certification/state/azure/blobstorage/go.mod index 9109348cc..5022f1279 100644 --- a/tests/certification/state/azure/blobstorage/go.mod +++ b/tests/certification/state/azure/blobstorage/go.mod @@ -156,6 +156,8 @@ require ( sigs.k8s.io/yaml v1.3.0 // indirect ) +replace github.com/dapr/dapr => github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0 + replace github.com/dapr/components-contrib => ../../../../.. replace github.com/dapr/components-contrib/tests/certification => ../../.. diff --git a/tests/certification/state/azure/blobstorage/go.sum b/tests/certification/state/azure/blobstorage/go.sum index 46df2c8f8..e1c955cbc 100644 --- a/tests/certification/state/azure/blobstorage/go.sum +++ b/tests/certification/state/azure/blobstorage/go.sum @@ -95,7 +95,6 @@ github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbt github.com/PuerkitoBio/purell v1.2.0 h1:/Jdm5QfyM8zdlqT6WVZU4cfP23sot6CEHA4CS49Ezig= github.com/PuerkitoBio/purell v1.2.0/go.mod h1:OhLRTaaIzhvIyofkJfB24gokC7tM42Px5UhoT32THBk= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= -github.com/agrea/ptr v0.0.0-20180711073057-77a518d99b7b h1:WMhlIaJkDgEQSVJQM06YV+cYUl1r5OY5//ijMXJNqtA= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= @@ -117,6 +116,8 @@ github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24 github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0 h1:DHv0Odl7nn296mOlv9HiqANeSywCLVLdoPeNY/t18x0= +github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0/go.mod h1:2Vqy6l1G2eq24stXXRqTE+Do9p+pAISrgGJ1BPknok8= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= @@ -141,8 +142,6 @@ github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e h1:Ieid1nWDFssDXrXIdRakN/jAcHMA1x3Rq0joFXGaMM0= -github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e/go.mod h1:mGNQLZnlzH8HX7GcQv3u4YNE432gs1CYC8NLbOf65SE= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= diff --git a/tests/certification/state/azure/cosmosdb/go.mod b/tests/certification/state/azure/cosmosdb/go.mod index 74e17517d..8dbfc9a34 100644 --- a/tests/certification/state/azure/cosmosdb/go.mod +++ b/tests/certification/state/azure/cosmosdb/go.mod @@ -158,6 +158,8 @@ require ( sigs.k8s.io/yaml v1.3.0 // indirect ) +replace github.com/dapr/dapr => github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0 + replace github.com/dapr/components-contrib => ../../../../.. replace github.com/dapr/components-contrib/tests/certification => ../../.. diff --git a/tests/certification/state/azure/cosmosdb/go.sum b/tests/certification/state/azure/cosmosdb/go.sum index c3653b513..5f83b83bc 100644 --- a/tests/certification/state/azure/cosmosdb/go.sum +++ b/tests/certification/state/azure/cosmosdb/go.sum @@ -99,7 +99,6 @@ github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbt github.com/PuerkitoBio/purell v1.2.0 h1:/Jdm5QfyM8zdlqT6WVZU4cfP23sot6CEHA4CS49Ezig= github.com/PuerkitoBio/purell v1.2.0/go.mod h1:OhLRTaaIzhvIyofkJfB24gokC7tM42Px5UhoT32THBk= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= -github.com/agrea/ptr v0.0.0-20180711073057-77a518d99b7b h1:WMhlIaJkDgEQSVJQM06YV+cYUl1r5OY5//ijMXJNqtA= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= @@ -121,6 +120,8 @@ github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24 github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0 h1:DHv0Odl7nn296mOlv9HiqANeSywCLVLdoPeNY/t18x0= +github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0/go.mod h1:2Vqy6l1G2eq24stXXRqTE+Do9p+pAISrgGJ1BPknok8= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= @@ -145,8 +146,6 @@ github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e h1:Ieid1nWDFssDXrXIdRakN/jAcHMA1x3Rq0joFXGaMM0= -github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e/go.mod h1:mGNQLZnlzH8HX7GcQv3u4YNE432gs1CYC8NLbOf65SE= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= diff --git a/tests/certification/state/azure/tablestorage/go.mod b/tests/certification/state/azure/tablestorage/go.mod index 4b2ed2558..c7ad889bc 100644 --- a/tests/certification/state/azure/tablestorage/go.mod +++ b/tests/certification/state/azure/tablestorage/go.mod @@ -157,6 +157,8 @@ require ( sigs.k8s.io/yaml v1.3.0 // indirect ) +replace github.com/dapr/dapr => github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0 + replace github.com/dapr/components-contrib => ../../../../.. replace github.com/dapr/components-contrib/tests/certification => ../../.. diff --git a/tests/certification/state/azure/tablestorage/go.sum b/tests/certification/state/azure/tablestorage/go.sum index 0d7d87f9d..a592f8d13 100644 --- a/tests/certification/state/azure/tablestorage/go.sum +++ b/tests/certification/state/azure/tablestorage/go.sum @@ -97,7 +97,6 @@ github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbt github.com/PuerkitoBio/purell v1.2.0 h1:/Jdm5QfyM8zdlqT6WVZU4cfP23sot6CEHA4CS49Ezig= github.com/PuerkitoBio/purell v1.2.0/go.mod h1:OhLRTaaIzhvIyofkJfB24gokC7tM42Px5UhoT32THBk= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= -github.com/agrea/ptr v0.0.0-20180711073057-77a518d99b7b h1:WMhlIaJkDgEQSVJQM06YV+cYUl1r5OY5//ijMXJNqtA= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= @@ -119,6 +118,8 @@ github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24 github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0 h1:DHv0Odl7nn296mOlv9HiqANeSywCLVLdoPeNY/t18x0= +github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0/go.mod h1:2Vqy6l1G2eq24stXXRqTE+Do9p+pAISrgGJ1BPknok8= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= @@ -143,8 +144,6 @@ github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e h1:Ieid1nWDFssDXrXIdRakN/jAcHMA1x3Rq0joFXGaMM0= -github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e/go.mod h1:mGNQLZnlzH8HX7GcQv3u4YNE432gs1CYC8NLbOf65SE= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= diff --git a/tests/certification/state/cassandra/go.mod b/tests/certification/state/cassandra/go.mod index 974b66aca..7d7293273 100644 --- a/tests/certification/state/cassandra/go.mod +++ b/tests/certification/state/cassandra/go.mod @@ -139,4 +139,6 @@ require ( replace github.com/dapr/components-contrib/tests/certification => ../../ +replace github.com/dapr/dapr => github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0 + replace github.com/dapr/components-contrib => ../../../../ diff --git a/tests/certification/state/cassandra/go.sum b/tests/certification/state/cassandra/go.sum index 55f04cfb6..e9734c081 100644 --- a/tests/certification/state/cassandra/go.sum +++ b/tests/certification/state/cassandra/go.sum @@ -43,7 +43,6 @@ github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbt github.com/PuerkitoBio/purell v1.2.0 h1:/Jdm5QfyM8zdlqT6WVZU4cfP23sot6CEHA4CS49Ezig= github.com/PuerkitoBio/purell v1.2.0/go.mod h1:OhLRTaaIzhvIyofkJfB24gokC7tM42Px5UhoT32THBk= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= -github.com/agrea/ptr v0.0.0-20180711073057-77a518d99b7b h1:WMhlIaJkDgEQSVJQM06YV+cYUl1r5OY5//ijMXJNqtA= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= @@ -65,6 +64,8 @@ github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24 github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0 h1:DHv0Odl7nn296mOlv9HiqANeSywCLVLdoPeNY/t18x0= +github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0/go.mod h1:2Vqy6l1G2eq24stXXRqTE+Do9p+pAISrgGJ1BPknok8= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bitly/go-hostpool v0.0.0-20171023180738-a3a6125de932 h1:mXoPYz/Ul5HYEDvkta6I8/rnYM5gSdSV2tJ6XbZuEtY= github.com/bitly/go-hostpool v0.0.0-20171023180738-a3a6125de932/go.mod h1:NOuUCSz6Q9T7+igc/hlvDOUdtWKryOrtFyIVABv/p7k= @@ -93,8 +94,6 @@ github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e h1:Ieid1nWDFssDXrXIdRakN/jAcHMA1x3Rq0joFXGaMM0= -github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e/go.mod h1:mGNQLZnlzH8HX7GcQv3u4YNE432gs1CYC8NLbOf65SE= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= diff --git a/tests/certification/state/memcached/go.mod b/tests/certification/state/memcached/go.mod index 14d0787e9..0aca607b4 100644 --- a/tests/certification/state/memcached/go.mod +++ b/tests/certification/state/memcached/go.mod @@ -137,4 +137,6 @@ require ( replace github.com/dapr/components-contrib/tests/certification => ../../ +replace github.com/dapr/dapr => github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0 + replace github.com/dapr/components-contrib => ../../../../ diff --git a/tests/certification/state/memcached/go.sum b/tests/certification/state/memcached/go.sum index 4a0218124..16bbfd64f 100644 --- a/tests/certification/state/memcached/go.sum +++ b/tests/certification/state/memcached/go.sum @@ -43,7 +43,6 @@ github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbt github.com/PuerkitoBio/purell v1.2.0 h1:/Jdm5QfyM8zdlqT6WVZU4cfP23sot6CEHA4CS49Ezig= github.com/PuerkitoBio/purell v1.2.0/go.mod h1:OhLRTaaIzhvIyofkJfB24gokC7tM42Px5UhoT32THBk= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= -github.com/agrea/ptr v0.0.0-20180711073057-77a518d99b7b h1:WMhlIaJkDgEQSVJQM06YV+cYUl1r5OY5//ijMXJNqtA= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= @@ -65,6 +64,8 @@ github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24 github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0 h1:DHv0Odl7nn296mOlv9HiqANeSywCLVLdoPeNY/t18x0= +github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0/go.mod h1:2Vqy6l1G2eq24stXXRqTE+Do9p+pAISrgGJ1BPknok8= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bradfitz/gomemcache v0.0.0-20221031212613-62deef7fc822 h1:hjXJeBcAMS1WGENGqDpzvmgS43oECTx8UXq31UBu0Jw= github.com/bradfitz/gomemcache v0.0.0-20221031212613-62deef7fc822/go.mod h1:H0wQNHz2YrLsuXOZozoeDmnHXkNCRmMW0gwFWDfEZDA= @@ -91,8 +92,6 @@ github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e h1:Ieid1nWDFssDXrXIdRakN/jAcHMA1x3Rq0joFXGaMM0= -github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e/go.mod h1:mGNQLZnlzH8HX7GcQv3u4YNE432gs1CYC8NLbOf65SE= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= diff --git a/tests/certification/state/mongodb/go.mod b/tests/certification/state/mongodb/go.mod index eb2839cf1..319c56b9c 100644 --- a/tests/certification/state/mongodb/go.mod +++ b/tests/certification/state/mongodb/go.mod @@ -144,4 +144,6 @@ require ( replace github.com/dapr/components-contrib/tests/certification => ../../ +replace github.com/dapr/dapr => github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0 + replace github.com/dapr/components-contrib => ../../../../ diff --git a/tests/certification/state/mongodb/go.sum b/tests/certification/state/mongodb/go.sum index bd26f9a1f..c4ec85592 100644 --- a/tests/certification/state/mongodb/go.sum +++ b/tests/certification/state/mongodb/go.sum @@ -43,7 +43,6 @@ github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbt github.com/PuerkitoBio/purell v1.2.0 h1:/Jdm5QfyM8zdlqT6WVZU4cfP23sot6CEHA4CS49Ezig= github.com/PuerkitoBio/purell v1.2.0/go.mod h1:OhLRTaaIzhvIyofkJfB24gokC7tM42Px5UhoT32THBk= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= -github.com/agrea/ptr v0.0.0-20180711073057-77a518d99b7b h1:WMhlIaJkDgEQSVJQM06YV+cYUl1r5OY5//ijMXJNqtA= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= @@ -65,6 +64,8 @@ github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24 github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0 h1:DHv0Odl7nn296mOlv9HiqANeSywCLVLdoPeNY/t18x0= +github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0/go.mod h1:2Vqy6l1G2eq24stXXRqTE+Do9p+pAISrgGJ1BPknok8= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= @@ -89,8 +90,6 @@ github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e h1:Ieid1nWDFssDXrXIdRakN/jAcHMA1x3Rq0joFXGaMM0= -github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e/go.mod h1:mGNQLZnlzH8HX7GcQv3u4YNE432gs1CYC8NLbOf65SE= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= diff --git a/tests/certification/state/mysql/go.mod b/tests/certification/state/mysql/go.mod index 174c14531..acc2457b8 100644 --- a/tests/certification/state/mysql/go.mod +++ b/tests/certification/state/mysql/go.mod @@ -136,4 +136,6 @@ require ( replace github.com/dapr/components-contrib/tests/certification => ../../ +replace github.com/dapr/dapr => github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0 + replace github.com/dapr/components-contrib => ../../../../ diff --git a/tests/certification/state/mysql/go.sum b/tests/certification/state/mysql/go.sum index 83c83b8c3..fdf8cd1b8 100644 --- a/tests/certification/state/mysql/go.sum +++ b/tests/certification/state/mysql/go.sum @@ -44,7 +44,6 @@ github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbt github.com/PuerkitoBio/purell v1.2.0 h1:/Jdm5QfyM8zdlqT6WVZU4cfP23sot6CEHA4CS49Ezig= github.com/PuerkitoBio/purell v1.2.0/go.mod h1:OhLRTaaIzhvIyofkJfB24gokC7tM42Px5UhoT32THBk= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= -github.com/agrea/ptr v0.0.0-20180711073057-77a518d99b7b h1:WMhlIaJkDgEQSVJQM06YV+cYUl1r5OY5//ijMXJNqtA= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= @@ -66,6 +65,8 @@ github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24 github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0 h1:DHv0Odl7nn296mOlv9HiqANeSywCLVLdoPeNY/t18x0= +github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0/go.mod h1:2Vqy6l1G2eq24stXXRqTE+Do9p+pAISrgGJ1BPknok8= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= @@ -90,8 +91,6 @@ github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e h1:Ieid1nWDFssDXrXIdRakN/jAcHMA1x3Rq0joFXGaMM0= -github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e/go.mod h1:mGNQLZnlzH8HX7GcQv3u4YNE432gs1CYC8NLbOf65SE= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= diff --git a/tests/certification/state/postgresql/go.mod b/tests/certification/state/postgresql/go.mod index 3c5255b8b..c362c0938 100644 --- a/tests/certification/state/postgresql/go.mod +++ b/tests/certification/state/postgresql/go.mod @@ -139,4 +139,6 @@ require ( replace github.com/dapr/components-contrib/tests/certification => ../../ +replace github.com/dapr/dapr => github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0 + replace github.com/dapr/components-contrib => ../../../../ diff --git a/tests/certification/state/postgresql/go.sum b/tests/certification/state/postgresql/go.sum index f30ac73a9..0ba906b62 100644 --- a/tests/certification/state/postgresql/go.sum +++ b/tests/certification/state/postgresql/go.sum @@ -44,7 +44,6 @@ github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbt github.com/PuerkitoBio/purell v1.2.0 h1:/Jdm5QfyM8zdlqT6WVZU4cfP23sot6CEHA4CS49Ezig= github.com/PuerkitoBio/purell v1.2.0/go.mod h1:OhLRTaaIzhvIyofkJfB24gokC7tM42Px5UhoT32THBk= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= -github.com/agrea/ptr v0.0.0-20180711073057-77a518d99b7b h1:WMhlIaJkDgEQSVJQM06YV+cYUl1r5OY5//ijMXJNqtA= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= @@ -66,6 +65,8 @@ github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24 github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0 h1:DHv0Odl7nn296mOlv9HiqANeSywCLVLdoPeNY/t18x0= +github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0/go.mod h1:2Vqy6l1G2eq24stXXRqTE+Do9p+pAISrgGJ1BPknok8= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= @@ -90,8 +91,6 @@ github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e h1:Ieid1nWDFssDXrXIdRakN/jAcHMA1x3Rq0joFXGaMM0= -github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e/go.mod h1:mGNQLZnlzH8HX7GcQv3u4YNE432gs1CYC8NLbOf65SE= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= diff --git a/tests/certification/state/redis/go.mod b/tests/certification/state/redis/go.mod index 1d941ed95..919e983e8 100644 --- a/tests/certification/state/redis/go.mod +++ b/tests/certification/state/redis/go.mod @@ -139,4 +139,6 @@ require ( replace github.com/dapr/components-contrib/tests/certification => ../../ +replace github.com/dapr/dapr => github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0 + replace github.com/dapr/components-contrib => ../../../../ diff --git a/tests/certification/state/redis/go.sum b/tests/certification/state/redis/go.sum index f9e4d82bd..eb9fe226b 100644 --- a/tests/certification/state/redis/go.sum +++ b/tests/certification/state/redis/go.sum @@ -43,7 +43,6 @@ github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbt github.com/PuerkitoBio/purell v1.2.0 h1:/Jdm5QfyM8zdlqT6WVZU4cfP23sot6CEHA4CS49Ezig= github.com/PuerkitoBio/purell v1.2.0/go.mod h1:OhLRTaaIzhvIyofkJfB24gokC7tM42Px5UhoT32THBk= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= -github.com/agrea/ptr v0.0.0-20180711073057-77a518d99b7b h1:WMhlIaJkDgEQSVJQM06YV+cYUl1r5OY5//ijMXJNqtA= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= @@ -67,6 +66,8 @@ github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24 github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0 h1:DHv0Odl7nn296mOlv9HiqANeSywCLVLdoPeNY/t18x0= +github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0/go.mod h1:2Vqy6l1G2eq24stXXRqTE+Do9p+pAISrgGJ1BPknok8= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= @@ -91,8 +92,6 @@ github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e h1:Ieid1nWDFssDXrXIdRakN/jAcHMA1x3Rq0joFXGaMM0= -github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e/go.mod h1:mGNQLZnlzH8HX7GcQv3u4YNE432gs1CYC8NLbOf65SE= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= diff --git a/tests/certification/state/sqlserver/go.mod b/tests/certification/state/sqlserver/go.mod index 7a073440e..a7372193c 100644 --- a/tests/certification/state/sqlserver/go.mod +++ b/tests/certification/state/sqlserver/go.mod @@ -140,4 +140,6 @@ require ( replace github.com/dapr/components-contrib/tests/certification => ../../ +replace github.com/dapr/dapr => github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0 + replace github.com/dapr/components-contrib => ../../../../ diff --git a/tests/certification/state/sqlserver/go.sum b/tests/certification/state/sqlserver/go.sum index 6d2742716..0b3a8dd5e 100644 --- a/tests/certification/state/sqlserver/go.sum +++ b/tests/certification/state/sqlserver/go.sum @@ -46,7 +46,6 @@ github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbt github.com/PuerkitoBio/purell v1.2.0 h1:/Jdm5QfyM8zdlqT6WVZU4cfP23sot6CEHA4CS49Ezig= github.com/PuerkitoBio/purell v1.2.0/go.mod h1:OhLRTaaIzhvIyofkJfB24gokC7tM42Px5UhoT32THBk= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= -github.com/agrea/ptr v0.0.0-20180711073057-77a518d99b7b h1:WMhlIaJkDgEQSVJQM06YV+cYUl1r5OY5//ijMXJNqtA= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= @@ -68,6 +67,8 @@ github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24 github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0 h1:DHv0Odl7nn296mOlv9HiqANeSywCLVLdoPeNY/t18x0= +github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0/go.mod h1:2Vqy6l1G2eq24stXXRqTE+Do9p+pAISrgGJ1BPknok8= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= @@ -92,8 +93,6 @@ github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e h1:Ieid1nWDFssDXrXIdRakN/jAcHMA1x3Rq0joFXGaMM0= -github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e/go.mod h1:mGNQLZnlzH8HX7GcQv3u4YNE432gs1CYC8NLbOf65SE= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= From 4cf523bc45534e98913700129bf222ae02705d47 Mon Sep 17 00:00:00 2001 From: "zhangzhongliang@kanzhun.com" Date: Tue, 8 Nov 2022 15:35:39 +0800 Subject: [PATCH 15/87] fix kubernetes nameresolution customize configuration --- nameresolution/kubernetes/kubernetes.go | 11 +++++++---- nameresolution/kubernetes/kubernetes_test.go | 2 +- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/nameresolution/kubernetes/kubernetes.go b/nameresolution/kubernetes/kubernetes.go index 47a4bbbc1..41ad6084a 100644 --- a/nameresolution/kubernetes/kubernetes.go +++ b/nameresolution/kubernetes/kubernetes.go @@ -45,10 +45,13 @@ func (k *resolver) Init(metadata nameresolution.Metadata) error { if err != nil { return err } - if config, ok := configInterface.(map[string]string); ok { - clusterDomain := config[ClusterDomainKey] - if clusterDomain != "" { - k.clusterDomain = clusterDomain + if config, ok := configInterface.(map[string]interface{}); ok { + clusterDomainPtr := config[ClusterDomainKey] + if clusterDomainPtr != nil { + clusterDomain, _ := clusterDomainPtr.(string) + if clusterDomain != "" { + k.clusterDomain = clusterDomain + } } } diff --git a/nameresolution/kubernetes/kubernetes_test.go b/nameresolution/kubernetes/kubernetes_test.go index cc6b345ae..f5010f383 100644 --- a/nameresolution/kubernetes/kubernetes_test.go +++ b/nameresolution/kubernetes/kubernetes_test.go @@ -36,7 +36,7 @@ func TestResolve(t *testing.T) { func TestResolveWithCustomClusterDomain(t *testing.T) { resolver := NewResolver(logger.NewLogger("test")) _ = resolver.Init(nameresolution.Metadata{ - Configuration: map[string]string{ + Configuration: map[string]interface{}{ "clusterDomain": "mydomain.com", }, }) From ce87730a7362a71a1a0b81619a0703c8ae7b65e9 Mon Sep 17 00:00:00 2001 From: Nick Date: Wed, 9 Nov 2022 04:49:34 +0100 Subject: [PATCH 16/87] pubsub jetstream: set Nats-Msg-Id for message deduplication (#2200) (#2202) Signed-off-by: NickLarsenNZ Signed-off-by: NickLarsenNZ Co-authored-by: Yaron Schneider Co-authored-by: Bernd Verst <4535280+berndverst@users.noreply.github.com> --- pubsub/jetstream/jetstream.go | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/pubsub/jetstream/jetstream.go b/pubsub/jetstream/jetstream.go index 970329ac8..5e5c5288f 100644 --- a/pubsub/jetstream/jetstream.go +++ b/pubsub/jetstream/jetstream.go @@ -88,8 +88,26 @@ func (js *jetstreamPubSub) Features() []pubsub.Feature { } func (js *jetstreamPubSub) Publish(req *pubsub.PublishRequest) error { - js.l.Debugf("Publishing topic %v with data: %v", req.Topic, req.Data) - _, err := js.jsc.Publish(req.Topic, req.Data) + var opts []nats.PubOpt + var msgID string + + event, err := pubsub.FromCloudEvent(req.Data, "", "", "", "") + if err != nil { + js.l.Debugf("error unmarshalling cloudevent: %v", err) + } else { + // Use the cloudevent id as the Nats-MsgId for deduplication + if id, ok := event["id"].(string); ok { + msgID = id + opts = append(opts, nats.MsgId(msgID)) + } + } + + if msgID == "" { + js.l.Warn("empty message ID, Jetstream deduplication will not be possible") + } + + js.l.Debugf("Publishing to topic %v id: %s", req.Topic, msgID) + _, err = js.jsc.Publish(req.Topic, req.Data, opts...) return err } From 73ec4e3cfc3f6fee3075481f5bdcc01d6a942022 Mon Sep 17 00:00:00 2001 From: Bernd Verst <4535280+berndverst@users.noreply.github.com> Date: Tue, 8 Nov 2022 21:25:22 -0800 Subject: [PATCH 17/87] Storage Queues Binding: Add b64encoding option for messages Signed-off-by: Bernd Verst <4535280+berndverst@users.noreply.github.com> --- bindings/azure/storagequeues/storagequeues.go | 22 ++++++++++++------- .../decode/azure_queue_storage.yaml | 2 ++ .../azure/storagequeues/storagequeue_test.go | 4 +--- 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/bindings/azure/storagequeues/storagequeues.go b/bindings/azure/storagequeues/storagequeues.go index 51da3427f..c48956331 100644 --- a/bindings/azure/storagequeues/storagequeues.go +++ b/bindings/azure/storagequeues/storagequeues.go @@ -25,7 +25,6 @@ import ( "github.com/dapr/components-contrib/bindings" azauth "github.com/dapr/components-contrib/internal/authentication/azure" - "github.com/dapr/components-contrib/internal/utils" contribMetadata "github.com/dapr/components-contrib/metadata" "github.com/dapr/kit/logger" ) @@ -50,6 +49,7 @@ type AzureQueueHelper struct { queueURL azqueue.QueueURL logger logger.Logger decodeBase64 bool + encodeBase64 bool } // Init sets up this helper. @@ -73,6 +73,7 @@ func (d *AzureQueueHelper) Init(metadata bindings.Metadata) (*storageQueuesMetad p := azqueue.NewPipeline(credential, pipelineOptions) d.decodeBase64 = m.DecodeBase64 + d.encodeBase64 = m.EncodeBase64 if m.QueueEndpoint != "" { URL, parseErr := url.Parse(fmt.Sprintf("%s/%s/%s", m.QueueEndpoint, m.AccountName, m.QueueName)) @@ -103,6 +104,10 @@ func (d *AzureQueueHelper) Write(ctx context.Context, data []byte, ttl *time.Dur s = string(data) } + if d.encodeBase64 { + s = base64.StdEncoding.EncodeToString([]byte(s)) + } + if ttl == nil { ttlToUse := defaultTTL ttl = &ttlToUse @@ -174,6 +179,7 @@ type storageQueuesMetadata struct { QueueEndpoint string AccountName string DecodeBase64 bool + EncodeBase64 bool ttl *time.Duration } @@ -192,29 +198,29 @@ func (a *AzureStorageQueues) Init(metadata bindings.Metadata) (err error) { return nil } -func parseMetadata(metadata bindings.Metadata) (*storageQueuesMetadata, error) { +func parseMetadata(meta bindings.Metadata) (*storageQueuesMetadata, error) { var m storageQueuesMetadata // AccountKey is parsed in azauth - if val, ok := contribMetadata.GetMetadataProperty(metadata.Properties, azauth.StorageAccountNameKeys...); ok && val != "" { + contribMetadata.DecodeMetadata(meta.Properties, &m) + + if val, ok := contribMetadata.GetMetadataProperty(meta.Properties, azauth.StorageAccountNameKeys...); ok && val != "" { m.AccountName = val } else { return nil, fmt.Errorf("missing or empty %s field from metadata", azauth.StorageAccountNameKeys[0]) } - if val, ok := contribMetadata.GetMetadataProperty(metadata.Properties, azauth.StorageQueueNameKeys...); ok && val != "" { + if val, ok := contribMetadata.GetMetadataProperty(meta.Properties, azauth.StorageQueueNameKeys...); ok && val != "" { m.QueueName = val } else { return nil, fmt.Errorf("missing or empty %s field from metadata", azauth.StorageQueueNameKeys[0]) } - if val, ok := contribMetadata.GetMetadataProperty(metadata.Properties, azauth.StorageEndpointKeys...); ok && val != "" { + if val, ok := contribMetadata.GetMetadataProperty(meta.Properties, azauth.StorageEndpointKeys...); ok && val != "" { m.QueueEndpoint = val } - m.DecodeBase64 = utils.IsTruthy(metadata.Properties["decodeBase64"]) - - ttl, ok, err := contribMetadata.TryGetTTL(metadata.Properties) + ttl, ok, err := contribMetadata.TryGetTTL(meta.Properties) if err != nil { return nil, err } diff --git a/tests/certification/bindings/azure/storagequeues/components/decode/azure_queue_storage.yaml b/tests/certification/bindings/azure/storagequeues/components/decode/azure_queue_storage.yaml index 1e02a5a42..02a99f0bd 100644 --- a/tests/certification/bindings/azure/storagequeues/components/decode/azure_queue_storage.yaml +++ b/tests/certification/bindings/azure/storagequeues/components/decode/azure_queue_storage.yaml @@ -17,6 +17,8 @@ spec: key: AzureBlobStorageAccessKey - name: decodeBase64 value: true + - name: encodeBase64 + value: true - name: queue value: "decodequeue" auth: diff --git a/tests/certification/bindings/azure/storagequeues/storagequeue_test.go b/tests/certification/bindings/azure/storagequeues/storagequeue_test.go index f550b6b3f..b20b75290 100644 --- a/tests/certification/bindings/azure/storagequeues/storagequeue_test.go +++ b/tests/certification/bindings/azure/storagequeues/storagequeue_test.go @@ -16,7 +16,6 @@ package storagequeue_test import ( "context" - "encoding/base64" "fmt" "testing" "time" @@ -312,7 +311,7 @@ func TestAzureStorageQueueForDecode(t *testing.T) { // Declare the expected data. msgs := make([]string, numOfMessages) for i := 0; i < numOfMessages; i++ { - msgs[i] = fmt.Sprintf("Message %03d", i) + msgs[i] = fmt.Sprintf("Message 新 %03d", i) // the chinese character is part of the test for UTF-8 characters } messages.ExpectStrings(msgs...) @@ -323,7 +322,6 @@ func TestAzureStorageQueueForDecode(t *testing.T) { for _, msg := range msgs { ctx.Logf("Sending: %q", msg) dataBytes := []byte(msg) - dataBytes = []byte(base64.StdEncoding.EncodeToString(dataBytes)) req := &daprClient.InvokeBindingRequest{Name: "decode-binding", Operation: "create", Data: dataBytes, Metadata: metadata} err := client.InvokeOutputBinding(ctx, req) require.NoError(ctx, err, "error publishing message") From e69ae3751d5a2b5e88d0e6b1f9ebfb4040d1173a Mon Sep 17 00:00:00 2001 From: wxbty <38374721+wxbty@users.noreply.github.com> Date: Thu, 10 Nov 2022 06:42:49 +0800 Subject: [PATCH 18/87] feat:add redis binder invoke of del&get (#2197) Signed-off-by: x-shadow-man <1494445739@qq.com> Signed-off-by: x-shadow-man <1494445739@qq.com> Co-authored-by: x-shadow-man <1494445739@qq.com> --- bindings/redis/redis.go | 39 +++++++++++++++++------- bindings/redis/redis_test.go | 57 ++++++++++++++++++++++++++++++++++-- 2 files changed, 83 insertions(+), 13 deletions(-) diff --git a/bindings/redis/redis.go b/bindings/redis/redis.go index aa70213ab..41b947d50 100644 --- a/bindings/redis/redis.go +++ b/bindings/redis/redis.go @@ -15,10 +15,10 @@ package redis import ( "context" - "errors" "fmt" "github.com/go-redis/redis/v8" + "github.com/pkg/errors" "github.com/dapr/components-contrib/bindings" rediscomponent "github.com/dapr/components-contrib/internal/component/redis" @@ -66,21 +66,40 @@ func (r *Redis) Ping() error { } func (r *Redis) Operations() []bindings.OperationKind { - return []bindings.OperationKind{bindings.CreateOperation} + return []bindings.OperationKind{ + bindings.CreateOperation, + bindings.DeleteOperation, + bindings.GetOperation, + } } func (r *Redis) Invoke(ctx context.Context, req *bindings.InvokeRequest) (*bindings.InvokeResponse, error) { - if val, ok := req.Metadata["key"]; ok && val != "" { - key := val - _, err := r.client.Do(ctx, "SET", key, req.Data).Result() - if err != nil { - return nil, err + if key, ok := req.Metadata["key"]; ok && key != "" { + switch req.Operation { + case bindings.DeleteOperation: + err := r.client.Del(ctx, key).Err() + if err != nil { + return nil, err + } + case bindings.GetOperation: + data, err := r.client.Get(ctx, key).Result() + if err != nil { + return nil, err + } + rep := &bindings.InvokeResponse{} + rep.Data = []byte(data) + return rep, nil + case bindings.CreateOperation: + _, err := r.client.Do(ctx, "SET", key, req.Data).Result() + if err != nil { + return nil, err + } + default: + return nil, fmt.Errorf("invalid operation type: %s", req.Operation) } - return nil, nil } - - return nil, errors.New("redis binding: missing key on write request metadata") + return nil, errors.New("redis binding: missing key in request metadata") } func (r *Redis) Close() error { diff --git a/bindings/redis/redis_test.go b/bindings/redis/redis_test.go index f57d81993..81fe68e92 100644 --- a/bindings/redis/redis_test.go +++ b/bindings/redis/redis_test.go @@ -30,7 +30,7 @@ const ( testKey = "test" ) -func TestInvoke(t *testing.T) { +func TestInvokeCreate(t *testing.T) { s, c := setupMiniredis() defer s.Close() @@ -44,8 +44,9 @@ func TestInvoke(t *testing.T) { assert.Equal(t, redis.Nil, err) bindingRes, err := bind.Invoke(context.TODO(), &bindings.InvokeRequest{ - Data: []byte(testData), - Metadata: map[string]string{"key": testKey}, + Data: []byte(testData), + Metadata: map[string]string{"key": testKey}, + Operation: bindings.CreateOperation, }) assert.Equal(t, nil, err) assert.Equal(t, true, bindingRes == nil) @@ -55,6 +56,56 @@ func TestInvoke(t *testing.T) { assert.Equal(t, true, getRes == testData) } +func TestInvokeGet(t *testing.T) { + s, c := setupMiniredis() + defer s.Close() + + bind := &Redis{ + client: c, + logger: logger.NewLogger("test"), + } + bind.ctx, bind.cancel = context.WithCancel(context.Background()) + + _, err := c.Do(context.Background(), "SET", testKey, testData).Result() + assert.Equal(t, nil, err) + + bindingRes, err := bind.Invoke(context.TODO(), &bindings.InvokeRequest{ + Metadata: map[string]string{"key": testKey}, + Operation: bindings.GetOperation, + }) + assert.Equal(t, nil, err) + assert.Equal(t, true, string(bindingRes.Data) == testData) +} + +func TestInvokeDelete(t *testing.T) { + s, c := setupMiniredis() + defer s.Close() + + bind := &Redis{ + client: c, + logger: logger.NewLogger("test"), + } + bind.ctx, bind.cancel = context.WithCancel(context.Background()) + + _, err := c.Do(context.Background(), "SET", testKey, testData).Result() + assert.Equal(t, nil, err) + + getRes, err := c.Do(context.Background(), "GET", testKey).Result() + assert.Equal(t, nil, err) + assert.Equal(t, true, getRes == testData) + + _, err = bind.Invoke(context.TODO(), &bindings.InvokeRequest{ + Metadata: map[string]string{"key": testKey}, + Operation: bindings.DeleteOperation, + }) + + assert.Equal(t, nil, err) + + rgetRep, err := c.Do(context.Background(), "GET", testKey).Result() + assert.Equal(t, redis.Nil, err) + assert.Equal(t, nil, rgetRep) +} + func setupMiniredis() (*miniredis.Miniredis, *redis.Client) { s, err := miniredis.Run() if err != nil { From a6176e3cf112bcb869ca1733f2b339bbc13560bb Mon Sep 17 00:00:00 2001 From: Ryan Lettieri Date: Thu, 10 Nov 2022 09:20:15 -0700 Subject: [PATCH 19/87] Adding in optional metadata parameter for namespace in temporal Signed-off-by: Ryan Lettieri --- workflows/temporal/temporal.go | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/workflows/temporal/temporal.go b/workflows/temporal/temporal.go index cc98a67c8..a90bc35fc 100644 --- a/workflows/temporal/temporal.go +++ b/workflows/temporal/temporal.go @@ -33,8 +33,9 @@ type TemporalWF struct { } type temporalMetadata struct { - Identity string `json:"identity"` - HostPort string `json:"hostport"` + Identity string `json:"identity"` + HostPort string `json:"hostport"` + Namespace string `json:"namespace"` } // NewTemporalWorkflow returns a new workflow. @@ -58,6 +59,9 @@ func (c *TemporalWF) Init(metadata workflows.Metadata) error { if m.Identity != "" { cOpt.Identity = m.Identity } + if m.Namespace != "" { + cOpt.Namespace = m.Namespace + } // Create the workflow client newClient, err := client.Dial(cOpt) if err != nil { From beaa223bc2089db67d455957252df42dce2a1188 Mon Sep 17 00:00:00 2001 From: yaron2 Date: Thu, 10 Nov 2022 10:08:35 -0800 Subject: [PATCH 20/87] fix deletion of sqs queue regression Signed-off-by: yaron2 --- pubsub/aws/snssqs/snssqs.go | 7 ------- 1 file changed, 7 deletions(-) diff --git a/pubsub/aws/snssqs/snssqs.go b/pubsub/aws/snssqs/snssqs.go index b11a06ad8..353f8312b 100644 --- a/pubsub/aws/snssqs/snssqs.go +++ b/pubsub/aws/snssqs/snssqs.go @@ -855,13 +855,6 @@ func (s *snsSqs) Subscribe(subscribeCtx context.Context, req pubsub.SubscribeReq // Remove the handler delete(s.topicHandlers, sanitizedName) - // If we can perform management operations, remove the subscription entirely - if !s.metadata.disableEntityManagement { - // Use a background context because subscribeCtx is canceled already - // Error is logged already - _ = s.removeSnsSqsSubscription(s.ctx, subscriptionArn) - } - // If we don't have any topic left, close the poller if len(s.topicHandlers) == 0 { s.pollerCancel() From 1f2c987c86159887bac0793d257c00519492f981 Mon Sep 17 00:00:00 2001 From: yaron2 Date: Thu, 10 Nov 2022 10:32:24 -0800 Subject: [PATCH 21/87] linter Signed-off-by: yaron2 --- pubsub/aws/snssqs/snssqs.go | 18 +----------------- 1 file changed, 1 insertion(+), 17 deletions(-) diff --git a/pubsub/aws/snssqs/snssqs.go b/pubsub/aws/snssqs/snssqs.go index 353f8312b..05ef43305 100644 --- a/pubsub/aws/snssqs/snssqs.go +++ b/pubsub/aws/snssqs/snssqs.go @@ -406,22 +406,6 @@ func (s *snsSqs) createSnsSqsSubscription(parentCtx context.Context, queueArn, t return *subscribeOutput.SubscriptionArn, nil } -func (s *snsSqs) removeSnsSqsSubscription(parentCtx context.Context, subscriptionArn string) error { - ctx, cancel := context.WithTimeout(parentCtx, s.opsTimeout) - _, err := s.snsClient.UnsubscribeWithContext(ctx, &sns.UnsubscribeInput{ - SubscriptionArn: aws.String(subscriptionArn), - }) - cancel() - if err != nil { - wrappedErr := fmt.Errorf("error unsubscribing to arn: %s %w", subscriptionArn, err) - s.logger.Error(wrappedErr) - - return wrappedErr - } - - return nil -} - func (s *snsSqs) getSnsSqsSubscriptionArn(parentCtx context.Context, topicArn string) (string, error) { ctx, cancel := context.WithTimeout(parentCtx, s.opsTimeout) listSubscriptionsOutput, err := s.snsClient.ListSubscriptionsByTopicWithContext(ctx, &sns.ListSubscriptionsByTopicInput{TopicArn: aws.String(topicArn)}) @@ -817,7 +801,7 @@ func (s *snsSqs) Subscribe(subscribeCtx context.Context, req pubsub.SubscribeReq } // subscription creation is idempotent. Subscriptions are unique by topic/queue. - subscriptionArn, err := s.getOrCreateSnsSqsSubscription(subscribeCtx, queueInfo.arn, topicArn) + _, err = s.getOrCreateSnsSqsSubscription(subscribeCtx, queueInfo.arn, topicArn) if err != nil { wrappedErr := fmt.Errorf("error subscribing topic: %s, to queue: %s, with error: %w", topicArn, queueInfo.arn, err) s.logger.Error(wrappedErr) From 875abcda56b345a3a5f4fbb19c0a0ea81a1fba40 Mon Sep 17 00:00:00 2001 From: jinjianfeng-chn Date: Fri, 11 Nov 2022 03:54:40 +0800 Subject: [PATCH 22/87] Add rocketmq configuration items. Add orderly message. (#2198) * Add rocketmq configuration items. Add orderly message. Change the version of rocketmq-client-go to v2.1.0. Signed-off-by: jinjianfeng-chn * modtidy Signed-off-by: Bernd Verst <4535280+berndverst@users.noreply.github.com> Signed-off-by: jinjianfeng-chn Signed-off-by: Bernd Verst <4535280+berndverst@users.noreply.github.com> Co-authored-by: Bernd Verst <4535280+berndverst@users.noreply.github.com> Co-authored-by: Dapr Bot <56698301+dapr-bot@users.noreply.github.com> --- go.mod | 4 +- go.sum | 8 +- pubsub/rocketmq/metadata.go | 206 ++++++++--- pubsub/rocketmq/metadata_test.go | 75 +++- pubsub/rocketmq/rocketmq.go | 583 +++++++++++++++++++------------ pubsub/rocketmq/rocketmq_test.go | 241 ++++++++++--- 6 files changed, 773 insertions(+), 344 deletions(-) diff --git a/go.mod b/go.mod index c564fb88c..1ed482322 100644 --- a/go.mod +++ b/go.mod @@ -39,7 +39,7 @@ require ( github.com/aliyun/aliyun-tablestore-go-sdk v1.7.7 github.com/apache/dubbo-go-hessian2 v1.11.3 github.com/apache/pulsar-client-go v0.9.0 - github.com/apache/rocketmq-client-go/v2 v2.1.1-rc2 + github.com/apache/rocketmq-client-go/v2 v2.1.0 github.com/aws/aws-sdk-go v1.44.128 github.com/bradfitz/gomemcache v0.0.0-20221031212613-62deef7fc822 github.com/camunda/zeebe/clients/go/v8 v8.1.3 @@ -314,7 +314,6 @@ require ( github.com/spaolacci/murmur3 v1.1.0 // indirect github.com/spf13/cast v1.4.1 // indirect github.com/spf13/pflag v1.0.5 // indirect - github.com/stathat/consistent v1.0.0 // indirect github.com/stretchr/objx v0.5.0 // indirect github.com/tchap/go-patricia/v2 v2.3.1 // indirect github.com/tidwall/gjson v1.13.0 // indirect @@ -366,6 +365,7 @@ require ( sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 // indirect sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect sigs.k8s.io/yaml v1.2.0 // indirect + stathat.com/c/consistent v1.0.0 // indirect ) replace github.com/gobwas/pool => github.com/gobwas/pool v0.2.1 diff --git a/go.sum b/go.sum index 9a65a59c8..07243a014 100644 --- a/go.sum +++ b/go.sum @@ -281,9 +281,8 @@ github.com/apache/pulsar-client-go v0.9.0 h1:L5jvGFXJm0JNA/PgUiJctTVHHttCe4wIEFD github.com/apache/pulsar-client-go v0.9.0/go.mod h1:fSAcBipgz4KQ/VgwZEJtQ71cCXMKm8ezznstrozrngw= github.com/apache/rocketmq-client-go v1.2.5 h1:2hPoLHpMJy1a57HDNmx7PZKgvlgVYO1Alz925oeqphQ= github.com/apache/rocketmq-client-go v1.2.5/go.mod h1:Kap8oXIVLlHF50BGUbN9z97QUp1GaK1nOoCfsZnR2bw= +github.com/apache/rocketmq-client-go/v2 v2.1.0 h1:3eABKfxc1WmS2lLTTbKMe1gZfZV6u1Sx9orFnOfABV0= github.com/apache/rocketmq-client-go/v2 v2.1.0/go.mod h1:oEZKFDvS7sz/RWU0839+dQBupazyBV7WX5cP6nrio0Q= -github.com/apache/rocketmq-client-go/v2 v2.1.1-rc2 h1:UQHWhwyw3tSLRhp0lVn/r/uNUzDnBZcDekGSzaXfz0M= -github.com/apache/rocketmq-client-go/v2 v2.1.1-rc2/go.mod h1:DDYjQ9wxYmJLjgNK4+RqyFE8/13gLK/Bugz4U6zD5MI= github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/apache/thrift v0.13.0 h1:5hryIiq9gtn+MiLVn0wP37kb/uTeRZgN08WoCsAhIhI= github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= @@ -1377,8 +1376,6 @@ github.com/spf13/viper v1.7.1/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5q github.com/spf13/viper v1.8.1/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns= github.com/spf13/viper v1.10.1 h1:nuJZuYpG7gTj/XqiUwg8bA0cp1+M2mC3J4g5luUYBKk= github.com/spf13/viper v1.10.1/go.mod h1:IGlFPqhNAPKRxohIzWpI5QEy4kuI7tcl5WvR+8qy1rU= -github.com/stathat/consistent v1.0.0 h1:ZFJ1QTRn8npNBKW065raSZ8xfOqhpb8vLOkfp4CcL/U= -github.com/stathat/consistent v1.0.0/go.mod h1:uajTPbgSygZBJ+V+0mY7meZ8i0XAcZs7AQ6V121XSxw= github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= @@ -1416,16 +1413,13 @@ github.com/tetratelabs/wazero v1.0.0-pre.3 h1:Z5fbogMUGcERzaQb9mQU8+yJSy0bVvv2ce github.com/tetratelabs/wazero v1.0.0-pre.3/go.mod h1:M8UDNECGm/HVjOfq0EOe4QfCY9Les1eq54IChMLETbc= github.com/tevid/gohamcrest v1.1.1/go.mod h1:3UvtWlqm8j5JbwYZh80D/PVBt0mJ1eJiYgZMibh0H/k= github.com/tidwall/gjson v1.2.1/go.mod h1:c/nTNbUr0E0OrXEhq1pwa8iEgc2DOt4ZZqAt1HtCkPA= -github.com/tidwall/gjson v1.8.1/go.mod h1:5/xDoumyyDNerp2U36lyolv46b3uF/9Bu6OfyQ9GImk= github.com/tidwall/gjson v1.13.0 h1:3TFY9yxOQShrvmjdM76K+jc66zJeT6D3/VFFYCGQf7M= github.com/tidwall/gjson v1.13.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= github.com/tidwall/match v1.0.1/go.mod h1:LujAq0jyVjBy028G1WhWfIzbpQfMO8bBZ6Tyb0+pL9E= -github.com/tidwall/match v1.0.3/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA= github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= github.com/tidwall/pretty v0.0.0-20190325153808-1166b9ac2b65/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= -github.com/tidwall/pretty v1.1.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= github.com/tidwall/pretty v1.2.0 h1:RWIZEg2iJ8/g6fDDYzMpobmaoGh5OLl4AXtGUGPcqCs= github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= github.com/tinylib/msgp v1.1.5/go.mod h1:eQsjooMTnV42mHu917E26IogZ2930nFyBQdofk10Udg= diff --git a/pubsub/rocketmq/metadata.go b/pubsub/rocketmq/metadata.go index 2ee9547f3..dc6a8817f 100644 --- a/pubsub/rocketmq/metadata.go +++ b/pubsub/rocketmq/metadata.go @@ -14,68 +14,171 @@ limitations under the License. package rocketmq import ( - "errors" "fmt" "github.com/dapr/components-contrib/metadata" "github.com/dapr/components-contrib/pubsub" - "github.com/dapr/kit/logger" -) - -var ( - ErrRocketmqPublishMsg = errors.New("rocketmq publish msg error") - ErrRocketmqValidPublishMsgTyp = errors.New("rocketmq publish msg error, invalid msg type") ) const ( metadataRocketmqTag = "rocketmq-tag" metadataRocketmqKey = "rocketmq-key" metadataRocketmqShardingKey = "rocketmq-shardingkey" + metadataRocketmqQueue = "rocketmq-queue" metadataRocketmqConsumerGroup = "rocketmq-consumerGroup" metadataRocketmqType = "rocketmq-sub-type" metadataRocketmqExpression = "rocketmq-sub-expression" metadataRocketmqBrokerName = "rocketmq-broker-name" + metadataRocketmqQueueID = "rocketmq-queue-id" ) +type QueueSelectorType string + +const ( + HashQueueSelector QueueSelectorType = "hash" + RandomQueueSelector QueueSelectorType = "random" + ManualQueueSelector QueueSelectorType = "manual" + RoundRobinQueueSelector QueueSelectorType = "roundRobin" + DaprQueueSelector QueueSelectorType = "dapr" +) + +// RocketMQ Go Client Options type rocketMQMetaData struct { - // rocketmq Credentials - AccessKey string `mapstructure:"accessKey"` - SecretKey string `mapstructure:"secretKey"` - NameServer string `mapstructure:"nameServer"` - // Deprecated: use ProducerGroup instead. + // rocketmq instance name, it will be registered to the broker + InstanceName string `mapstructure:"instanceName"` + // Deprecated: consumer group name GroupName string `mapstructure:"groupName"` + ConsumerGroup string `mapstructure:"consumerGroup"` + // producer group name ProducerGroup string `mapstructure:"producerGroup"` - NameSpace string `mapstructure:"nameSpace"` - // consumer group rocketmq's subscribers - ConsumerGroup string `mapstructure:"consumerGroup"` - ConsumerBatchSize int `mapstructure:"consumerBatchSize"` + // rocketmq namespace + NameSpace string `mapstructure:"nameSpace"` // rocketmq's name server domain NameServerDomain string `mapstructure:"nameServerDomain"` - // msg's content-type - ContentType string `mapstructure:"content-type"` - // retry times to connect rocketmq's broker + // rocketmq's name server + NameServer string `mapstructure:"nameServer"` + // rocketmq Credentials + AccessKey string `mapstructure:"accessKey"` + SecretKey string `mapstructure:"secretKey"` + SecurityToken string `mapstructure:"securityToken"` + // retry times to send msg to broker Retries int `mapstructure:"retries"` + + // Producer Queue selector + // There are five implementations of queue selector,Hash, Random, Manual, RoundRobin, Dapr,respectively + // + // Dapr Queue selector is design by dapr developers + ProducerQueueSelector QueueSelectorType `mapstructure:"producerQueueSelector"` + + // Message model defines the way how messages are delivered to each consumer clients + // RocketMQ supports two message models: clustering and broadcasting. If clustering is set, consumer clients with + // the same {@link #ConsumerGroup} would only consume shards of the messages subscribed, which achieves load + // balances; Conversely, if the broadcasting is set, each consumer client will consume all subscribed messages + // separately. + // + // This field defaults to clustering. + ConsumerModel string `mapstructure:"consumerModel"` + + // Consuming point on consumer booting. + // There are three consuming points: + // - CONSUME_FROM_LAST_OFFSET: consumer clients pick up where it stopped previously. If it were a newly booting up + // consumer client, according aging of the consumer group, there are two cases. + // cases1: + // if the consumer group is created so recently that the earliest message being subscribed has yet + // expired, which means the consumer group represents a lately launched business, consuming will + // start from the very beginning. + // case2: + // if the earliest message being subscribed has expired, consuming will start from the latest messages, + // meaning messages born prior to the booting timestamp would be ignored. + // - CONSUME_FROM_FIRST_OFFSET: Consumer client will start from earliest messages available. + // - CONSUME_FROM_TIMESTAMP: Consumer client will start from specified timestamp, which means messages born + // prior to {@link #consumeTimestamp} will be ignored + FromWhere string `mapstructure:"fromWhere"` + + /** + * Backtracking consumption time with second precision. Time format is + * 20131223171201
+ * Implying Seventeen twelve and 01 seconds on December 23, 2013 year
+ * Default backtracking consumption time Half an hour ago. + * + * RocketMQ Go Client does not support configuration in github.com/apache/rocketmq-client-go/v2 v2.1.1-rc2 + */ + ConsumeTimestamp string `mapstructure:"consumeTimestamp"` + + // Whether it is an ordered message using FIFO order + // + // This field defaults to false. + ConsumeOrderly string `mapstructure:"consumeOrderly"` + + // Batch consumption size + ConsumeMessageBatchMaxSize int `mapstructure:"consumeMessageBatchMaxSize"` + + // Concurrently max span offset.it has no effect on sequential consumption + ConsumeConcurrentlyMaxSpan int `mapstructure:"consumeConcurrentlyMaxSpan"` + + // Max re-consume times. -1 means 16 times. + // + // If messages are re-consumed more than {@link #maxReconsumeTimes} before Success, it's be directed to a deletion + // queue waiting. + MaxReconsumeTimes int32 `mapstructure:"maxReconsumeTimes"` + AutoCommit string `mapstructure:"autoCommit"` + + // Maximum amount of time a message may block the consuming thread. + // + // RocketMQ Go Client does not support configuration in github.com/apache/rocketmq-client-go/v2 v2.1.1-rc2 + ConsumeTimeout int `mapstructure:"consumeTimeout"` + + // The socket timeout in milliseconds + ConsumerPullTimeout int `mapstructure:"consumerPullTimeout"` + + // Message pull Interval + PullInterval int `mapstructure:"pullInterval"` + + // Deprecated: The number of messages pulled from the broker at a time + ConsumerBatchSize int `mapstructure:"consumerBatchSize"` + // The number of messages pulled from the broker at a time + PullBatchSize int32 `mapstructure:"pullBatchSize"` + + // Flow control threshold on queue level, each message queue will cache at most 1000 messages by default, + // Consider the {PullBatchSize}, the instantaneous value may exceed the limit + // + // RocketMQ Go Client does not support configuration in github.com/apache/rocketmq-client-go/v2 v2.1.1-rc2 + PullThresholdForQueue int64 `mapstructure:"pullThresholdForQueue"` + + // Flow control threshold on topic level, default value is -1(Unlimited) + // + // The value of {@code pullThresholdForQueue} will be overwritten and calculated based on + // {@code pullThresholdForTopic} if it isn't unlimited + // + // For example, if the value of pullThresholdForTopic is 1000 and 10 message queues are assigned to this consumer, + // then pullThresholdForQueue will be set to 100 + // + // RocketMQ Go Client does not support configuration in github.com/apache/rocketmq-client-go/v2 v2.1.1-rc2 + PullThresholdForTopic int64 `mapstructure:"pullThresholdForTopic"` + + // RocketMQ Go Client does not support configuration in github.com/apache/rocketmq-client-go/v2 v2.1.1-rc2 + PullThresholdSizeForQueue int `mapstructure:"pullThresholdSizeForQueue"` + + // Limit the cached message size on topic level, default value is -1 MiB(Unlimited) + // + // The value of {@code pullThresholdSizeForQueue} will be overwritten and calculated based on + // {@code pullThresholdSizeForTopic} if it isn't unlimited + // + // For example, if the value of pullThresholdSizeForTopic is 1000 MiB and 10 message queues are + // assigned to this consumer, then pullThresholdSizeForQueue will be set to 100 MiB + // + // RocketMQ Go Client does not support configuration in github.com/apache/rocketmq-client-go/v2 v2.1.1-rc2 + PullThresholdSizeForTopic int `mapstructure:"pullThresholdSizeForTopic"` + ContentType string `mapstructure:"content-type"` // msg's content-type // Deprecated: send msg timeout to connect rocketmq's broker, nanoseconds SendTimeOut int `mapstructure:"sendTimeOut"` - // send msg timeout to connect rocketmq's broker, seconds - SendTimeOutSec int `mapstructure:"sendTimeOutSec"` -} + // timeout for send msg to rocketmq broker, in seconds + SendTimeOutSec int `mapstructure:"sendTimeOutSec"` + LogLevel string `mapstructure:"logLevel"` -func getDefaultRocketMQMetaData() *rocketMQMetaData { - return &rocketMQMetaData{ - AccessKey: "", - SecretKey: "", - NameServer: "", - GroupName: "", - ProducerGroup: "", - NameSpace: "", - ConsumerGroup: "", - ConsumerBatchSize: 0, - NameServerDomain: "", - ContentType: pubsub.DefaultCloudEventDataContentType, - Retries: 3, - SendTimeOutSec: 60, - } + // The RocketMQ message properties in this collection are passed to the APP in Data + // Separate multiple properties with "," + MsgProperties string `mapstructure:"mspProperties"` } func (s *rocketMQMetaData) Decode(in interface{}) error { @@ -85,8 +188,18 @@ func (s *rocketMQMetaData) Decode(in interface{}) error { return nil } -func parseRocketMQMetaData(metadata pubsub.Metadata, logger logger.Logger) (*rocketMQMetaData, error) { - rMetaData := getDefaultRocketMQMetaData() +const ( + KeyConsumeFromWhere string = "consumeFromWhere" + KeyQueueSelector string = "queueSelector" +) + +func parseRocketMQMetaData(metadata pubsub.Metadata) (*rocketMQMetaData, error) { + rMetaData := &rocketMQMetaData{ + Retries: 3, + LogLevel: "warn", + PullInterval: 100, + ConsumerPullTimeout: 30, + } if metadata.Properties != nil { err := rMetaData.Decode(metadata.Properties) if err != nil { @@ -94,19 +207,16 @@ func parseRocketMQMetaData(metadata pubsub.Metadata, logger logger.Logger) (*roc } } - if rMetaData.GroupName != "" { - logger.Warn("pubsub.rocketmq: metadata property 'groupName' has been deprecated - use 'producerGroup' instead. See: https://docs.dapr.io/reference/components-reference/supported-pubsub/setup-rocketmq/") - } - if rMetaData.ProducerGroup == "" { rMetaData.ProducerGroup = metadata.Properties[pubsub.RuntimeConsumerIDKey] } - if rMetaData.SendTimeOut != 0 { - logger.Warn("pubsub.rocketmq: metadata property 'sendTimeOut' has been deprecated - use 'sendTimeOutSec' instead. See: https://docs.dapr.io/reference/components-reference/supported-pubsub/setup-rocketmq/") - if rMetaData.SendTimeOutSec == 0 { - rMetaData.SendTimeOutSec = rMetaData.SendTimeOut / 1000000 - } + if rMetaData.FromWhere == "" { + rMetaData.FromWhere = metadata.Properties[KeyConsumeFromWhere] + } + + if rMetaData.ProducerQueueSelector == "" { + rMetaData.ProducerQueueSelector = QueueSelectorType(metadata.Properties[KeyQueueSelector]) } return rMetaData, nil diff --git a/pubsub/rocketmq/metadata_test.go b/pubsub/rocketmq/metadata_test.go index e303d1774..587222b8d 100644 --- a/pubsub/rocketmq/metadata_test.go +++ b/pubsub/rocketmq/metadata_test.go @@ -21,21 +21,76 @@ import ( mdata "github.com/dapr/components-contrib/metadata" "github.com/dapr/components-contrib/pubsub" - "github.com/dapr/kit/logger" ) func TestMetaDataDecode(t *testing.T) { props := map[string]string{ - "accessKey": "**", - "secretKey": "***", - "nameServer": "http://test.nameserver", - "consumerGroup": "defaultGroup", - "nameSpace": "defaultNamespace", + "instanceName": "dapr-rocketmq-test", + "producerGroup": "dapr-rocketmq-test-g-p", + "consumerGroup": "dapr-rocketmq-test-g-c", + "groupName": "dapr-rocketmq-test-g-c", + "nameSpace": "dapr-test", + "nameServerDomain": "www.baidu.com", + "nameServer": "test.nameserver", + "accessKey": "accessKey", + "secretKey": "secretKey", + "securityToken": "securityToken", + "retries": "5", + "consumerModel": "Clustering", + "fromWhere": "ConsumeFromLastOffset", + "consumeTimestamp": "20220817101902", + "consumeOrderly": "true", + "consumeMessageBatchMaxSize": "10", + "consumeConcurrentlyMaxSpan": "10", + "maxReconsumeTimes": "10000", + "autoCommit": "true", + "consumeTimeout": "10", + "consumerPullTimeout": "10", + "pullInterval": "10", + "consumerBatchSize": "10", + "pullBatchSize": "10", + "pullThresholdForQueue": "100", + "pullThresholdForTopic": "100", + "pullThresholdSizeForQueue": "10", + "pullThresholdSizeForTopic": "10", + "content-type": "json", + "sendTimeOutSec": "10", + "logLevel": "ERROR", + "mspProperties": "UNIQ_KEY", } pubsubMeta := pubsub.Metadata{Base: mdata.Base{Properties: props}} - metaData, err := parseRocketMQMetaData(pubsubMeta, logger.NewLogger("test")) + metaData, err := parseRocketMQMetaData(pubsubMeta) require.NoError(t, err) - assert.Equal(t, "**", metaData.AccessKey) - assert.Equal(t, "***", metaData.SecretKey) - assert.Equal(t, "defaultGroup", metaData.ConsumerGroup) + assert.Equal(t, "dapr-rocketmq-test", metaData.InstanceName) + assert.Equal(t, "dapr-rocketmq-test-g-p", metaData.ProducerGroup) + assert.Equal(t, "dapr-rocketmq-test-g-c", metaData.ConsumerGroup) + assert.Equal(t, "dapr-rocketmq-test-g-c", metaData.GroupName) + assert.Equal(t, "dapr-test", metaData.NameSpace) + assert.Equal(t, "www.baidu.com", metaData.NameServerDomain) + assert.Equal(t, "test.nameserver", metaData.NameServer) + assert.Equal(t, "accessKey", metaData.AccessKey) + assert.Equal(t, "secretKey", metaData.SecretKey) + assert.Equal(t, "securityToken", metaData.SecurityToken) + assert.Equal(t, 5, metaData.Retries) + assert.Equal(t, "Clustering", metaData.ConsumerModel) + assert.Equal(t, "ConsumeFromLastOffset", metaData.FromWhere) + assert.Equal(t, "20220817101902", metaData.ConsumeTimestamp) + assert.Equal(t, "true", metaData.ConsumeOrderly) + assert.Equal(t, 10, metaData.ConsumeMessageBatchMaxSize) + assert.Equal(t, 10, metaData.ConsumeConcurrentlyMaxSpan) + assert.Equal(t, int32(10000), metaData.MaxReconsumeTimes) + assert.Equal(t, "true", metaData.AutoCommit) + assert.Equal(t, 10, metaData.ConsumeTimeout) + assert.Equal(t, 10, metaData.ConsumerPullTimeout) + assert.Equal(t, 10, metaData.PullInterval) + assert.Equal(t, int32(10), metaData.PullBatchSize) + assert.Equal(t, int(10), metaData.ConsumerBatchSize) + assert.Equal(t, int64(100), metaData.PullThresholdForQueue) + assert.Equal(t, int64(100), metaData.PullThresholdForTopic) + assert.Equal(t, 10, metaData.PullThresholdSizeForQueue) + assert.Equal(t, 10, metaData.PullThresholdSizeForTopic) + assert.Equal(t, "json", metaData.ContentType) + assert.Equal(t, 10, metaData.SendTimeOutSec) + assert.Equal(t, "ERROR", metaData.LogLevel) + assert.Equal(t, "UNIQ_KEY", metaData.MsgProperties) } diff --git a/pubsub/rocketmq/rocketmq.go b/pubsub/rocketmq/rocketmq.go index cec794562..d0b82d854 100644 --- a/pubsub/rocketmq/rocketmq.go +++ b/pubsub/rocketmq/rocketmq.go @@ -16,7 +16,10 @@ package rocketmq import ( "context" "encoding/json" + "errors" "fmt" + "strconv" + "strings" "sync" "time" @@ -24,112 +27,252 @@ import ( mqc "github.com/apache/rocketmq-client-go/v2/consumer" "github.com/apache/rocketmq-client-go/v2/primitive" mqp "github.com/apache/rocketmq-client-go/v2/producer" - "github.com/cenkalti/backoff/v4" + "github.com/apache/rocketmq-client-go/v2/rlog" + "github.com/dapr/components-contrib/internal/utils" "github.com/dapr/components-contrib/pubsub" "github.com/dapr/kit/logger" - "github.com/dapr/kit/retry" ) -type topicData struct { - selector mqc.MessageSelector - handler pubsub.Handler - consumerGroup string - mqType string - mqExpr string +type daprQueueSelector struct { + hashQueueSelector mqp.QueueSelector + roundRobinQueueSelector mqp.QueueSelector +} + +func NewDaprQueueSelector() *daprQueueSelector { + return &daprQueueSelector{ + hashQueueSelector: mqp.NewHashQueueSelector(), + roundRobinQueueSelector: mqp.NewRoundRobinQueueSelector(), + } +} + +func (p *daprQueueSelector) Select(msg *primitive.Message, queues []*primitive.MessageQueue) *primitive.MessageQueue { + if msg.Queue != nil { + return msg.Queue + } + if queue := msg.GetProperty(metadataRocketmqQueue); queue != "" { + for _, q := range queues { + if strconv.Itoa(q.QueueId) == queue { + return q + } + } + } + key := msg.GetShardingKey() + if len(key) == 0 { + return p.roundRobinQueueSelector.Select(msg, queues) + } + return p.hashQueueSelector.Select(msg, queues) } type rocketMQ struct { - name string - metadata *rocketMQMetaData - - logger logger.Logger - topics map[string]topicData - producer mq.Producer - producerLock sync.RWMutex - consumer mq.PushConsumer - consumerLock sync.RWMutex - - ctx context.Context - cancel context.CancelFunc + name string + metadata *rocketMQMetaData + producer mq.Producer + producerLock sync.Mutex + consumer mq.PushConsumer + consumerLock sync.Mutex + topics map[string]mqc.MessageSelector + msgProperties map[string]bool + logger logger.Logger + ctx context.Context + cancel context.CancelFunc } func NewRocketMQ(l logger.Logger) pubsub.PubSub { return &rocketMQ{ name: "rocketmq", logger: l, - topics: make(map[string]topicData), - producerLock: sync.RWMutex{}, - consumerLock: sync.RWMutex{}, + producerLock: sync.Mutex{}, + consumerLock: sync.Mutex{}, } } func (r *rocketMQ) Init(metadata pubsub.Metadata) error { var err error - r.metadata, err = parseRocketMQMetaData(metadata, r.logger) + r.metadata, err = parseRocketMQMetaData(metadata) if err != nil { return err } + r.topics = make(map[string]mqc.MessageSelector) + r.msgProperties = make(map[string]bool) + rlog.SetLogLevel(r.metadata.LogLevel) + if r.metadata.MsgProperties != "" { + mps := strings.Split(r.metadata.MsgProperties, ",") + for _, mp := range mps { + r.msgProperties[mp] = true + } + } r.ctx, r.cancel = context.WithCancel(context.Background()) return nil } +func parseNameServer(nameServer string) []string { + if strings.Contains(nameServer, ",") { + return strings.Split(nameServer, ",") + } else if strings.Contains(nameServer, ";") { + return strings.Split(nameServer, ";") + } else { + return []string{nameServer} + } +} + func (r *rocketMQ) setUpConsumer() (mq.PushConsumer, error) { opts := make([]mqc.Option, 0) + if r.metadata.InstanceName != "" { + opts = append(opts, mqc.WithInstance(r.metadata.InstanceName)) + } if r.metadata.ConsumerGroup != "" { opts = append(opts, mqc.WithGroupName(r.metadata.ConsumerGroup)) + } else if r.metadata.GroupName != "" { + r.metadata.ConsumerGroup = r.metadata.GroupName + opts = append(opts, mqc.WithGroupName(r.metadata.ConsumerGroup)) + r.logger.Warnf("set the consumer group name, please use the keyword consumerGroup") } - if r.metadata.ConsumerBatchSize != 0 { - opts = append(opts, mqc.WithPullBatchSize(int32(r.metadata.ConsumerBatchSize))) + if r.metadata.NameServer != "" { + opts = append(opts, mqc.WithNameServer(parseNameServer(r.metadata.NameServer))) } if r.metadata.NameSpace != "" { opts = append(opts, mqc.WithNamespace(r.metadata.NameSpace)) } - if r.metadata.Retries != 0 { - opts = append(opts, mqc.WithRetry(r.metadata.Retries)) - } if r.metadata.NameServerDomain != "" { opts = append(opts, mqc.WithNameServerDomain(r.metadata.NameServerDomain)) } - if r.metadata.NameServer != "" { - opts = append(opts, mqc.WithNameServer(primitive.NamesrvAddr{r.metadata.NameServer})) - } if r.metadata.AccessKey != "" && r.metadata.SecretKey != "" { opts = append(opts, mqc.WithCredentials(primitive.Credentials{ - AccessKey: r.metadata.AccessKey, - SecretKey: r.metadata.SecretKey, + AccessKey: r.metadata.AccessKey, + SecretKey: r.metadata.SecretKey, + SecurityToken: r.metadata.SecurityToken, })) } - return mq.NewPushConsumer(opts...) + if r.metadata.Retries > 0 { + opts = append(opts, mqc.WithRetry(r.metadata.Retries)) + } + if r.metadata.ConsumerModel != "" { + switch strings.ToLower(r.metadata.ConsumerModel) { + case "broadcasting": + opts = append(opts, mqc.WithConsumerModel(mqc.BroadCasting)) + case "clustering": + opts = append(opts, mqc.WithConsumerModel(mqc.Clustering)) + default: + r.metadata.ConsumerModel = "Clustering" + opts = append(opts, mqc.WithConsumerModel(mqc.Clustering)) + r.logger.Warnf("%s Consumer Model[%s] is invalid: expected [broadcasting, clustering]; "+ + "we will use default model [clustering]", r.name, r.metadata.ConsumerModel) + } + } + if r.metadata.FromWhere != "" { + switch strings.ToLower(r.metadata.FromWhere) { + case "consumefromlastoffset": + opts = append(opts, mqc.WithConsumeFromWhere(mqc.ConsumeFromLastOffset)) + case "consumefromfirstoffset": + opts = append(opts, mqc.WithConsumeFromWhere(mqc.ConsumeFromFirstOffset)) + case "consumefromtimestamp": + opts = append(opts, mqc.WithConsumeFromWhere(mqc.ConsumeFromTimestamp)) + default: + r.metadata.FromWhere = "ConsumeFromLastOffset" + opts = append(opts, mqc.WithConsumeFromWhere(mqc.ConsumeFromLastOffset)) + r.logger.Warnf("%s Consumer FromWhere[%s] is error, "+ + "expected [ConsumeFromLastOffset, ConsumeFromFirstOffset, ConsumeFromTimestamp], "+ + "we will use default value [ConsumeFromLastOffset]", r.name, r.metadata.FromWhere) + } + } + if r.metadata.ConsumeOrderly != "" { + if utils.IsTruthy(r.metadata.ConsumeOrderly) { + opts = append(opts, mqc.WithConsumerOrder(true)) + // in orderly message mode, if no value is set of MessageBatchMaxSize, the recommended value [1] is used + if r.metadata.ConsumeMessageBatchMaxSize <= 0 { + r.metadata.ConsumeMessageBatchMaxSize = 1 + } + } else { + opts = append(opts, mqc.WithConsumerOrder(false)) + } + } + if r.metadata.ConsumeMessageBatchMaxSize > 0 { + opts = append(opts, mqc.WithConsumeMessageBatchMaxSize(r.metadata.ConsumeMessageBatchMaxSize)) + } + if r.metadata.MaxReconsumeTimes > 0 { + opts = append(opts, mqc.WithMaxReconsumeTimes(r.metadata.MaxReconsumeTimes)) + } + if r.metadata.AutoCommit != "" { + opts = append(opts, mqc.WithAutoCommit(utils.IsTruthy(r.metadata.AutoCommit))) + } + if r.metadata.PullInterval > 0 { + opts = append(opts, mqc.WithPullInterval(time.Duration(r.metadata.PullInterval)*time.Millisecond)) + } + if r.metadata.PullBatchSize > 0 { + opts = append(opts, mqc.WithPullBatchSize(r.metadata.PullBatchSize)) + } else if r.metadata.ConsumerBatchSize > 0 { + r.metadata.PullBatchSize = int32(r.metadata.ConsumerBatchSize) + opts = append(opts, mqc.WithPullBatchSize(r.metadata.PullBatchSize)) + r.logger.Warn("set the number of msg pulled from the broker at a time, " + + "please use pullBatchSize instead of consumerBatchSize") + } + c, e := mqc.NewPushConsumer(opts...) + if e != nil { + return nil, e + } + return c, e } func (r *rocketMQ) setUpProducer() (mq.Producer, error) { opts := make([]mqp.Option, 0) - if r.metadata.Retries != 0 { - opts = append(opts, mqp.WithRetry(r.metadata.Retries)) - } - if r.metadata.GroupName != "" { - opts = append(opts, mqp.WithGroupName(r.metadata.GroupName)) + if r.metadata.InstanceName != "" { + opts = append(opts, mqp.WithInstanceName(r.metadata.InstanceName)) } if r.metadata.ProducerGroup != "" { opts = append(opts, mqp.WithGroupName(r.metadata.ProducerGroup)) + } else if r.metadata.GroupName != "" { + r.metadata.ProducerGroup = r.metadata.GroupName + opts = append(opts, mqp.WithGroupName(r.metadata.ProducerGroup)) + r.logger.Warnf("set the producer group name, please use the keyword producerGroup") } - if r.metadata.NameServerDomain != "" { - opts = append(opts, mqp.WithNameServerDomain(r.metadata.NameServerDomain)) + if r.metadata.NameServer != "" { + opts = append(opts, mqp.WithNameServer(parseNameServer(r.metadata.NameServer))) } if r.metadata.NameSpace != "" { opts = append(opts, mqp.WithNamespace(r.metadata.NameSpace)) } - if r.metadata.NameServer != "" { - opts = append(opts, mqp.WithNameServer(primitive.NamesrvAddr{r.metadata.NameServer})) + if r.metadata.NameServerDomain != "" { + opts = append(opts, mqp.WithNameServerDomain(r.metadata.NameServerDomain)) } if r.metadata.AccessKey != "" && r.metadata.SecretKey != "" { opts = append(opts, mqp.WithCredentials(primitive.Credentials{ - AccessKey: r.metadata.AccessKey, - SecretKey: r.metadata.SecretKey, + AccessKey: r.metadata.AccessKey, + SecretKey: r.metadata.SecretKey, + SecurityToken: r.metadata.SecurityToken, })) } + if r.metadata.Retries > 0 { + opts = append(opts, mqp.WithRetry(r.metadata.Retries)) + } + if r.metadata.SendTimeOutSec > 0 { + opts = append(opts, mqp.WithSendMsgTimeout(time.Duration(r.metadata.SendTimeOutSec)*time.Second)) + } else if r.metadata.SendTimeOut > 0 { + r.metadata.SendTimeOutSec = r.metadata.SendTimeOut / int(time.Second.Nanoseconds()) + opts = append(opts, mqp.WithSendMsgTimeout(time.Duration(r.metadata.SendTimeOutSec)*time.Second)) + r.logger.Warn("set the timeout for send msg to rocketmq broker, please use the keyword sendTimeOutSec. " + + "SendTimeOutSec is in seconds, SendTimeOut is in nanoseconds") + } else { + opts = append(opts, mqp.WithSendMsgTimeout(30*time.Second)) + r.logger.Warn("You have not set a timeout for send msg to rocketmq broker, " + + "The default value of 30 seconds will be used. ") + } + switch r.metadata.ProducerQueueSelector { + case HashQueueSelector: + opts = append(opts, mqp.WithQueueSelector(mqp.NewHashQueueSelector())) + case RandomQueueSelector: + opts = append(opts, mqp.WithQueueSelector(mqp.NewRandomQueueSelector())) + case RoundRobinQueueSelector: + opts = append(opts, mqp.WithQueueSelector(mqp.NewRoundRobinQueueSelector())) + case ManualQueueSelector: + opts = append(opts, mqp.WithQueueSelector(mqp.NewManualQueueSelector())) + case DaprQueueSelector: + opts = append(opts, mqp.WithQueueSelector(NewDaprQueueSelector())) + default: + opts = append(opts, mqp.WithQueueSelector(NewDaprQueueSelector())) + } + producer, err := mq.NewProducer(opts...) if err != nil { return nil, err @@ -146,208 +289,198 @@ func (r *rocketMQ) Features() []pubsub.Feature { return nil } +func (r *rocketMQ) getProducer() (mq.Producer, error) { + if nil != r.producer { + return r.producer, nil + } + r.producerLock.Lock() + defer r.producerLock.Unlock() + if nil != r.producer { + return r.producer, nil + } + producer, e := r.setUpProducer() + if e != nil { + return nil, e + } + r.producer = producer + return r.producer, nil +} + +func (r *rocketMQ) resetProducer() { + r.producerLock.Lock() + defer r.producerLock.Unlock() + r.producer = nil +} + func (r *rocketMQ) Publish(req *pubsub.PublishRequest) error { r.logger.Debugf("rocketmq publish topic:%s with data:%v", req.Topic, req.Data) - msg := newRocketMQMessage(req) - - publishBo := backoff.NewExponentialBackOff() - publishBo.InitialInterval = 100 * time.Millisecond - bo := backoff.WithMaxRetries(publishBo, 3) - bo = backoff.WithContext(bo, r.ctx) - return retry.NotifyRecover( - func() (err error) { - r.producerLock.RLock() - producer := r.producer - r.producerLock.RUnlock() - - if producer == nil { - r.producerLock.Lock() - r.producer, err = r.setUpProducer() - if err != nil { - r.producer = nil - } - producer = r.producer - r.producerLock.Unlock() - if err != nil { - return err - } - } - - sendTimeOut := time.Duration(r.metadata.SendTimeOutSec) * time.Second - ctx, cancel := context.WithTimeout(r.ctx, sendTimeOut) - defer cancel() - result, err := producer.SendSync(ctx, msg) - if err != nil { - r.producerLock.Lock() - r.producer = nil - r.producerLock.Unlock() - r.logger.Errorf("error send message topic:%s : %v", req.Topic, err) - return ErrRocketmqPublishMsg - } - r.logger.Debugf("rocketmq send result topic:%s tag:%s status:%v", req.Topic, msg.GetTags(), result.Status) - return nil - }, - bo, - func(err error, d time.Duration) { - r.logger.Errorf("rocketmq error: fail to send message. topic:%s. Retrying...", msg.Topic) - }, - func() { - r.logger.Infof("rocketmq successfully sent message after it previously failed. topic:%s.", msg.Topic) - }, - ) -} - -func newRocketMQMessage(req *pubsub.PublishRequest) *primitive.Message { - return primitive.NewMessage(req.Topic, req.Data). - WithTag(req.Metadata[metadataRocketmqTag]). - WithKeys([]string{req.Metadata[metadataRocketmqKey]}). - WithShardingKey(req.Metadata[metadataRocketmqShardingKey]) -} - -type mqSubscribeCallback func(ctx context.Context, msgs ...*primitive.MessageExt) (mqc.ConsumeResult, error) - -func (r *rocketMQ) adaptCallback(topic, consumerGroup, mqType, mqExpr string, handler pubsub.Handler) mqSubscribeCallback { - return func(ctx context.Context, msgs ...*primitive.MessageExt) (mqc.ConsumeResult, error) { - success := true - for _, msg := range msgs { - cloudEventsMap := pubsub.NewCloudEventsEnvelope(msg.MsgId, msg.StoreHost, r.name, msg.GetProperty(primitive.PropertyKeys), msg.Topic, r.name, r.metadata.ContentType, msg.Body, "", "") - dataBytes, err := json.Marshal(cloudEventsMap) - if err != nil { - r.logger.Warn("rocketmq fail to marshal cloudEventsMap message, topic:%s cloudEventsMap-length:%d err:%newMessage ", msg.Topic, len(msg.Body), err) - success = false - continue - } - metadata := map[string]string{ - metadataRocketmqType: mqType, - metadataRocketmqExpression: mqExpr, - metadataRocketmqConsumerGroup: consumerGroup, - } - if msg.Queue != nil { - metadata[metadataRocketmqBrokerName] = msg.Queue.BrokerName - } - newMessage := &pubsub.NewMessage{ - Topic: topic, - Data: dataBytes, - Metadata: metadata, - } - err = handler(ctx, newMessage) - if err != nil { - r.logger.Errorf("rocketmq error: fail to process message. topic:%s cloudEventsMap-length:%d err:%v.", newMessage.Topic, len(msg.Body), err) - success = false - } + msg := primitive.NewMessage(req.Topic, req.Data) + for k, v := range req.Metadata { + switch strings.ToLower(k) { + case metadataRocketmqTag: + msg.WithTag(v) + case metadataRocketmqKey: + msg.WithKeys(strings.Split(v, ",")) + case metadataRocketmqShardingKey: + msg.WithShardingKey(v) + default: + msg.WithProperty(k, v) } - if !success { - return mqc.ConsumeRetryLater, nil - } - return mqc.ConsumeSuccess, nil } + producer, e := r.getProducer() + if e != nil { + return fmt.Errorf("rocketmq message send fail because producer failed to initialize: %v", e) + } + result, e := producer.SendSync(r.ctx, msg) + if e != nil { + r.resetProducer() + m := fmt.Sprintf("rocketmq message send fail, topic[%s]: %v", req.Topic, e) + r.logger.Error(m) + return errors.New(m) + } + r.logger.Debugf("rocketmq message send result: topic[%s], tag[%s], status[%v]", req.Topic, msg.GetTags(), result.Status) + return nil } func (r *rocketMQ) Subscribe(ctx context.Context, req pubsub.SubscribeRequest, handler pubsub.Handler) error { - if req.Metadata == nil { - req.Metadata = make(map[string]string) + selector, e := buildMessageSelector(req) + if e != nil { + r.logger.Warnf("rocketmq subscribe failed: %v", e) + return e } - var ( - mqExpr = req.Metadata[metadataRocketmqExpression] - mqType = req.Metadata[metadataRocketmqType] - ) - if !r.validMqTypeParams(mqType) { - return ErrRocketmqValidPublishMsgTyp - } - consumerGroup := r.metadata.ConsumerGroup - if group, ok := req.Metadata[metadataRocketmqConsumerGroup]; ok { - consumerGroup = group + + var cb func(ctx context.Context, msgs ...*primitive.MessageExt) (mqc.ConsumeResult, error) + if utils.IsTruthy(r.metadata.ConsumeOrderly) { + cb = r.consumeMessageOrderly(req.Topic, selector, handler) + } else { + cb = r.consumeMessageConcurrently(req.Topic, selector, handler) } r.consumerLock.Lock() defer r.consumerLock.Unlock() - // Start the subscription - // When the connection is ready, add the topic - // Use the global context here to maintain the connection - r.startSubscription(ctx, func() { - r.topics[req.Topic] = topicData{ - handler: handler, - selector: mqc.MessageSelector{ - Type: mqc.ExpressionType(mqType), - Expression: mqExpr, - }, - consumerGroup: consumerGroup, - mqExpr: mqExpr, - mqType: mqType, + r.topics[req.Topic] = *selector + + if nil == r.consumer { + // if consumer is not initialized, initialize it + if r.consumer, e = r.setUpConsumer(); e != nil { + return fmt.Errorf("consumer setup failed: %v", e) } - }) + // consumer will start after one second. + // Consumers who complete the subscription within 1 second, will begin the subscription immediately upon launch. + // Consumers who do not complete the subscription within 1 second, will start the subscription after 20 seconds. + // The 20-second time is the interval for RocketMQ to refresh the topic route. + go func() { + time.Sleep(time.Second) + if e = r.consumer.Start(); e == nil { + r.logger.Infof("consumer start success: Group[%s], Topics[%v]", r.metadata.ConsumerGroup, r.topics) + } else { + r.logger.Errorf("consumer start failed: %v", e) + } + }() + } - // Listen for context cancelation to remove the subscription - go func() { - select { - case <-ctx.Done(): - case <-r.ctx.Done(): - } - - r.consumerLock.Lock() - defer r.consumerLock.Unlock() - - // If this is the last subscription or if the global context is done, close the connection entirely - if len(r.topics) <= 1 || r.ctx.Err() != nil { - _ = r.consumer.Shutdown() - r.consumer = nil - delete(r.topics, req.Topic) - return - } - - // Reconnect with one less topic - r.startSubscription(r.ctx, func() { - delete(r.topics, req.Topic) - }) - }() + // subscribe topic + if e = r.consumer.Subscribe(req.Topic, *selector, cb); e != nil { + r.logger.Errorf("subscribe topic[%s] Group[%s] failed, error: %v", req.Topic, r.metadata.ConsumerGroup, e) + return e + } + r.logger.Infof("subscribe topic[%s] success, Group[%s], Topics[%v]", req.Topic, r.metadata.ConsumerGroup, r.topics) return nil } -// Should be wrapped around r.consumerLock lock -func (r *rocketMQ) startSubscription(ctx context.Context, onConnRready func()) (err error) { - // reset synchronization - if r.consumer != nil { - r.logger.Infof("re-initializing the consumer") - _ = r.consumer.Shutdown() - r.consumer = nil - } else { - r.logger.Infof("initializing the consumer") +func buildMessageSelector(req pubsub.SubscribeRequest) (*mqc.MessageSelector, error) { + if req.Metadata == nil { + req.Metadata = make(map[string]string) + } + mqExpr := req.Metadata[metadataRocketmqExpression] + mqType := req.Metadata[metadataRocketmqType] + + var ExpressionType mqc.ExpressionType + switch strings.ToUpper(mqType) { + case "", string(mqc.TAG): + ExpressionType = mqc.TAG + case string(mqc.SQL92): + ExpressionType = mqc.SQL92 + default: + return nil, fmt.Errorf("rocketmq msg type invalid: %s, expected value is 'tag' or 'sql92' or ''", mqType) } - r.consumer, err = r.setUpConsumer() - if err != nil { - r.consumer = nil - return err - } - - // Invoke onConnReady so changes to the topics can be made safely - onConnRready() - - for topic, data := range r.topics { - cb := r.adaptCallback(topic, r.metadata.ConsumerGroup, string(data.selector.Type), data.selector.Expression, data.handler) - err = r.consumer.Subscribe(topic, data.selector, cb) - if err != nil { - r.logger.Errorf("subscribe topic:%v failed,error:%v", topic, err) - continue - } - } - - err = r.consumer.Start() - if err != nil { - return fmt.Errorf("consumer start failed. %w", err) - } - - return nil + return &mqc.MessageSelector{ + Type: ExpressionType, + Expression: mqExpr, + }, nil } -func (r *rocketMQ) validMqTypeParams(mqType string) bool { - if len(mqType) != 0 && (mqType != string(mqc.SQL92) && mqType != string(mqc.TAG)) { - r.logger.Warnf("rocketmq subscribe failed because some illegal type(%s).", mqType) - return false +func (r *rocketMQ) buildPubsubMessage(topic, mqType, mqExpr string, msg *primitive.MessageExt) (*pubsub.NewMessage, error) { + cloudEventsMap := pubsub.NewCloudEventsEnvelope(msg.MsgId, msg.StoreHost, "", "", msg.Topic, r.name, r.metadata.ContentType, msg.Body, "", "") + cloudEventsMap[primitive.PropertyKeys] = msg.GetKeys() + cloudEventsMap[primitive.PropertyShardingKey] = msg.GetShardingKey() + cloudEventsMap[primitive.PropertyTags] = msg.GetTags() + cloudEventsMap[primitive.PropertyMsgRegion] = msg.GetRegionID() + for k, v := range msg.GetProperties() { + if _, ok := r.msgProperties[k]; ok { + cloudEventsMap[k] = v + } + if strings.EqualFold(k, pubsub.TraceIDField) { + cloudEventsMap[pubsub.TraceIDField] = v + } + } + dataBytes, err := json.Marshal(cloudEventsMap) + if err != nil { + return nil, err + } + metadata := map[string]string{ + metadataRocketmqType: mqType, + metadataRocketmqExpression: mqExpr, + metadataRocketmqConsumerGroup: r.metadata.ProducerGroup, + } + if msg.Queue != nil { + metadata[metadataRocketmqBrokerName] = msg.Queue.BrokerName + metadata[metadataRocketmqQueueID] = strconv.Itoa(msg.Queue.QueueId) + } + return &pubsub.NewMessage{ + Topic: topic, + Data: dataBytes, + Metadata: metadata, + }, nil +} + +func (r *rocketMQ) consumeMessageOrderly(topic string, selector *mqc.MessageSelector, handler pubsub.Handler) func(ctx context.Context, msgs ...*primitive.MessageExt) (mqc.ConsumeResult, error) { + return func(ctx context.Context, msgs ...*primitive.MessageExt) (mqc.ConsumeResult, error) { + for _, msg := range msgs { + newMessage, e := r.buildPubsubMessage(topic, string(selector.Type), selector.Expression, msg) + if e != nil { + r.logger.Errorf("rocketmq message consume fail, topic: %s, msgId: %s, error: %v", newMessage.Topic, msg.MsgId, e) + return mqc.SuspendCurrentQueueAMoment, nil + } + e = handler(ctx, newMessage) + if e != nil { + r.logger.Errorf("rocketmq message consume fail, topic: %s, msgId: %s, error: %v", newMessage.Topic, msg.MsgId, e) + return mqc.SuspendCurrentQueueAMoment, nil + } + } + return mqc.ConsumeSuccess, nil + } +} + +func (r *rocketMQ) consumeMessageConcurrently(topic string, selector *mqc.MessageSelector, handler pubsub.Handler) func(ctx context.Context, msgs ...*primitive.MessageExt) (mqc.ConsumeResult, error) { + return func(ctx context.Context, msgs ...*primitive.MessageExt) (mqc.ConsumeResult, error) { + for _, msg := range msgs { + newMessage, e := r.buildPubsubMessage(topic, string(selector.Type), selector.Expression, msg) + if e != nil { + r.logger.Errorf("rocketmq message consume fail, topic: %s, msgId: %s, error: %v", newMessage.Topic, msg.MsgId, e) + return mqc.ConsumeRetryLater, nil + } + e = handler(ctx, newMessage) + if e != nil { + r.logger.Errorf("rocketmq message consume fail, topic: %s, msgId: %s, error: %v", newMessage.Topic, msg.MsgId, e) + return mqc.ConsumeRetryLater, nil + } + } + return mqc.ConsumeSuccess, nil } - return true } func (r *rocketMQ) Close() error { @@ -360,7 +493,7 @@ func (r *rocketMQ) Close() error { r.producer = nil - if r.consumer != nil { + if nil != r.consumer { _ = r.consumer.Shutdown() r.consumer = nil } diff --git a/pubsub/rocketmq/rocketmq_test.go b/pubsub/rocketmq/rocketmq_test.go index 621787eb9..7c9f361ce 100644 --- a/pubsub/rocketmq/rocketmq_test.go +++ b/pubsub/rocketmq/rocketmq_test.go @@ -16,6 +16,7 @@ package rocketmq import ( "context" "testing" + "time" "github.com/stretchr/testify/assert" @@ -26,60 +27,196 @@ import ( func getTestMetadata() map[string]string { return map[string]string{ - "nameServer": "127.0.0.1:9876", - "consumerGroup": "dapr.rocketmq.producer", - "accessKey": "RocketMQ", - "secretKey": "12345", - "retries": "2", + "nameServer": "127.0.0.1:9876", + "consumerGroup": "dapr.rocketmq.producer", + "accessKey": "RocketMQ", + "secretKey": "12345", + "consumerBatchSize": "1", + "consumerThreadNums": "2", + "retries": "2", + "sendMsgTimeout": "30", } } func TestParseRocketMQMetadata(t *testing.T) { - t.Run("correct metadata", func(t *testing.T) { - meta := getTestMetadata() - _, err := parseRocketMQMetaData(pubsub.Metadata{Base: mdata.Base{Properties: meta}}, logger.NewLogger("test")) - assert.Nil(t, err) - }) - - t.Run("correct init", func(t *testing.T) { - meta := getTestMetadata() - r := NewRocketMQ(logger.NewLogger("test")) - err := r.Init(pubsub.Metadata{Base: mdata.Base{Properties: meta}}) - assert.Nil(t, err) - }) - - t.Run("setup producer missing nameserver", func(t *testing.T) { - meta := getTestMetadata() - delete(meta, "nameServer") - r := NewRocketMQ(logger.NewLogger("test")) - err := r.Init(pubsub.Metadata{Base: mdata.Base{Properties: meta}}) - assert.Nil(t, err) - req := &pubsub.PublishRequest{ - Data: []byte("hello"), - PubsubName: "rocketmq", - Topic: "test", - Metadata: map[string]string{}, - } - err = r.Publish(req) - assert.NotNil(t, err) - }) - - t.Run("subscribe illegal type", func(t *testing.T) { - meta := getTestMetadata() - r := NewRocketMQ(logger.NewLogger("test")) - err := r.Init(pubsub.Metadata{Base: mdata.Base{Properties: meta}}) - assert.Nil(t, err) - - req := pubsub.SubscribeRequest{ - Topic: "test", - Metadata: map[string]string{ - metadataRocketmqType: "incorrect type", - }, - } - handler := func(ctx context.Context, msg *pubsub.NewMessage) error { - return nil - } - err = r.Subscribe(context.Background(), req, handler) - assert.NotNil(t, err) - }) + meta := getTestMetadata() + _, err := parseRocketMQMetaData(pubsub.Metadata{Base: mdata.Base{Properties: meta}}) + assert.Nil(t, err) +} + +func TestRocketMQ_Init(t *testing.T) { + meta := getTestMetadata() + r := NewRocketMQ(logger.NewLogger("test")) + err := r.Init(pubsub.Metadata{Base: mdata.Base{Properties: meta}}) + assert.Nil(t, err) +} + +func TestRocketMQ_Publish_Currently(t *testing.T) { + l, r, e := BuildRocketMQ() + assert.Nil(t, e) + + req := &pubsub.PublishRequest{ + Data: []byte("{\"key\": 1, \"value\": \"1\"}"), + PubsubName: "rocketmq", + Topic: "ZCY_ZHIXING_TEST_test", + Metadata: map[string]string{}, + } + e = r.Publish(req) + if e != nil { + l.Error(e) + return + } + assert.Nil(t, e) + + req = &pubsub.PublishRequest{ + Data: []byte("{\"key\": 2, \"value\": \"2\"}"), + PubsubName: "rocketmq", + Topic: "ZCY_ZHIXING_TEST_test", + Metadata: map[string]string{ + "rocketmq-tag": "tag", + "rocketmq-key": "2", + "rocketmq-shardingkey": "key", + "traceId": "4a09073987b148348ae0420435cddf5e", + }, + } + e = r.Publish(req) + assert.Nil(t, e) + + req = &pubsub.PublishRequest{ + Data: []byte("{\"key\": 3, \"value\": \"3\"}"), + PubsubName: "rocketmq", + Topic: "ZCY_ZHIXING_TEST_test", + Metadata: map[string]string{ + "rocketmq-tag": "tag", + "rocketmq-key": "3", + "rocketmq-shardingkey": "key", + }, + } + e = r.Publish(req) + assert.Nil(t, e) + + req = &pubsub.PublishRequest{ + Data: []byte("{\"key\": 4, \"value\": \"4\"}"), + PubsubName: "rocketmq", + Topic: "ZCY_ZHIXING_TEST_test", + Metadata: map[string]string{ + "rocketmq-tag": "tag", + "rocketmq-key": "4", + "rocketmq-shardingkey": "key", + }, + } + e = r.Publish(req) + assert.Nil(t, e) +} + +func TestRocketMQ_Publish_Orderly(t *testing.T) { + l, r, e := BuildRocketMQ() + assert.Nil(t, e) + + req := &pubsub.PublishRequest{ + Data: []byte("{\"key\": 1, \"value\": \"1\", \"sKey\": \"sKeyHello\"}"), + PubsubName: "rocketmq", + Topic: "ZCY_ZHIXING_TEST_ORDER_test", + Metadata: map[string]string{ + "rocketmq-tag": "tag", + "rocketmq-key": "1", + "rocketmq-shardingkey": "sKey", + "rocketmq-queue": "2", + }, + } + e = r.Publish(req) + if e != nil { + l.Error(e) + return + } + assert.Nil(t, e) + + req = &pubsub.PublishRequest{ + Data: []byte("{\"key\": 2, \"value\": \"2\", \"sKey\": \"sKeyHello\"}"), + PubsubName: "rocketmq", + Topic: "ZCY_ZHIXING_TEST_ORDER_test", + Metadata: map[string]string{ + "rocketmq-tag": "tag", + "rocketmq-key": "2", + "rocketmq-shardingkey": "sKey", + "rocketmq-queue": "3", + }, + } + e = r.Publish(req) + assert.Nil(t, e) + + req = &pubsub.PublishRequest{ + Data: []byte("{\"key\": 3, \"value\": \"3\", \"sKey\": \"sKeyHello\"}"), + PubsubName: "rocketmq", + Topic: "ZCY_ZHIXING_TEST_ORDER_test", + Metadata: map[string]string{ + "rocketmq-tag": "tag", + "rocketmq-key": "3", + "rocketmq-shardingkey": "sKey", + }, + } + e = r.Publish(req) + assert.Nil(t, e) +} + +func TestRocketMQ_Subscribe_Currently(t *testing.T) { + l, r, e := BuildRocketMQ() + assert.Nil(t, e) + + req := pubsub.SubscribeRequest{ + Topic: "ZCY_ZHIXING_TEST_test", + } + handler := func(ctx context.Context, msg *pubsub.NewMessage) error { + l.Info(string(msg.Data)) + return nil + } + e = r.Subscribe(context.Background(), req, handler) + if e != nil { + l.Error(e) + return + } + assert.Nil(t, e) + time.Sleep(20 * time.Second) +} + +func TestRocketMQ_Subscribe_Orderly(t *testing.T) { + l, r, e := BuildRocketMQ() + assert.Nil(t, e) + + handler := func(ctx context.Context, msg *pubsub.NewMessage) error { + l.Info(msg.Topic, string(msg.Data)) + return nil + } + req := pubsub.SubscribeRequest{ + Topic: "ZCY_ZHIXING_TEST_ORDER_test", + Metadata: map[string]string{ + metadataRocketmqType: "tag", + metadataRocketmqExpression: "*", + }, + } + e = r.Subscribe(context.Background(), req, handler) + if e != nil { + l.Error(e) + return + } + assert.Nil(t, e) + + req = pubsub.SubscribeRequest{ + Topic: "ZCY_ZHIXING_TEST_test", + Metadata: map[string]string{ + metadataRocketmqType: "tag", + metadataRocketmqExpression: "*", + }, + } + e = r.Subscribe(context.Background(), req, handler) + assert.Nil(t, e) + time.Sleep(20 * time.Second) +} + +func BuildRocketMQ() (logger.Logger, pubsub.PubSub, error) { + meta := getTestMetadata() + l := logger.NewLogger("test") + r := NewRocketMQ(l) + err := r.Init(pubsub.Metadata{Base: mdata.Base{Properties: meta}}) + return l, r, err } From eec3698d72f8960e421ca4ed80543f9ecba84869 Mon Sep 17 00:00:00 2001 From: Bernd Verst <4535280+berndverst@users.noreply.github.com> Date: Thu, 10 Nov 2022 12:08:36 -0800 Subject: [PATCH 23/87] Use nats.go v1.19.1 and modtidy-all Signed-off-by: Bernd Verst <4535280+berndverst@users.noreply.github.com> --- go.mod | 2 +- go.sum | 6 ++---- tests/e2e/pubsub/jetstream/go.mod | 2 +- tests/e2e/pubsub/jetstream/go.sum | 4 ++-- 4 files changed, 6 insertions(+), 8 deletions(-) diff --git a/go.mod b/go.mod index 300c9b210..5b94f3034 100644 --- a/go.mod +++ b/go.mod @@ -83,7 +83,7 @@ require ( github.com/mrz1836/postmark v1.3.0 github.com/nacos-group/nacos-sdk-go/v2 v2.1.2 github.com/nats-io/nats-server/v2 v2.9.4 - github.com/nats-io/nats.go v1.19.1-0.20221031153055-7ac1087d8c10 + github.com/nats-io/nats.go v1.19.1 github.com/nats-io/nkeys v0.3.0 github.com/nats-io/stan.go v0.10.3 github.com/open-policy-agent/opa v0.45.0 diff --git a/go.sum b/go.sum index 5dff8c7ec..13862b899 100644 --- a/go.sum +++ b/go.sum @@ -1136,10 +1136,8 @@ github.com/nats-io/nats-streaming-server v0.25.2/go.mod h1:bRbgx+iCG6EZEXpqVMroR github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= github.com/nats-io/nats.go v1.16.0/go.mod h1:BPko4oXsySz4aSWeFgOHLZs3G4Jq4ZAyE6/zMCxRT6w= github.com/nats-io/nats.go v1.17.0/go.mod h1:BPko4oXsySz4aSWeFgOHLZs3G4Jq4ZAyE6/zMCxRT6w= -github.com/nats-io/nats.go v1.18.0 h1:o480Ao6kuSSFyJO75rGTXCEPj7LGkY84C1Ye+Uhm4c0= -github.com/nats-io/nats.go v1.18.0/go.mod h1:BPko4oXsySz4aSWeFgOHLZs3G4Jq4ZAyE6/zMCxRT6w= -github.com/nats-io/nats.go v1.19.1-0.20221031153055-7ac1087d8c10 h1:tEeZe9AeM2fb/ntXlrhx7IYGrKEfbmSTrzwsh++wE14= -github.com/nats-io/nats.go v1.19.1-0.20221031153055-7ac1087d8c10/go.mod h1:tLqubohF7t4z3du1QDPYJIQQyhb4wl6DhjxEajSI7UA= +github.com/nats-io/nats.go v1.19.1 h1:pDQZthDfxRMSJ0ereExAM9ODf3JyS42Exk7iCMdbpec= +github.com/nats-io/nats.go v1.19.1/go.mod h1:tLqubohF7t4z3du1QDPYJIQQyhb4wl6DhjxEajSI7UA= github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nkeys v0.3.0 h1:cgM5tL53EvYRU+2YLXIK0G2mJtK12Ft9oeooSZMA2G8= diff --git a/tests/e2e/pubsub/jetstream/go.mod b/tests/e2e/pubsub/jetstream/go.mod index ecc25faab..345cf91fe 100644 --- a/tests/e2e/pubsub/jetstream/go.mod +++ b/tests/e2e/pubsub/jetstream/go.mod @@ -11,7 +11,7 @@ require ( github.com/cenkalti/backoff/v4 v4.1.3 // indirect github.com/google/uuid v1.3.0 // indirect github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 // indirect - github.com/nats-io/nats.go v1.19.0 // indirect + github.com/nats-io/nats.go v1.19.1 // indirect github.com/nats-io/nkeys v0.3.0 // indirect github.com/nats-io/nuid v1.0.1 // indirect github.com/pkg/errors v0.9.1 // indirect diff --git a/tests/e2e/pubsub/jetstream/go.sum b/tests/e2e/pubsub/jetstream/go.sum index bfa768ffe..3853b1782 100644 --- a/tests/e2e/pubsub/jetstream/go.sum +++ b/tests/e2e/pubsub/jetstream/go.sum @@ -14,8 +14,8 @@ github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 h1:BpfhmL github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/nats-io/jwt/v2 v2.3.0 h1:z2mA1a7tIf5ShggOFlR1oBPgd6hGqcDYsISxZByUzdI= github.com/nats-io/nats-server/v2 v2.9.4 h1:GvRgv1936J/zYUwMg/cqtYaJ6L+bgeIOIvPslbesdow= -github.com/nats-io/nats.go v1.19.0 h1:H6j8aBnTQFoVrTGB6Xjd903UMdE7jz6DS4YkmAqgZ9Q= -github.com/nats-io/nats.go v1.19.0/go.mod h1:tLqubohF7t4z3du1QDPYJIQQyhb4wl6DhjxEajSI7UA= +github.com/nats-io/nats.go v1.19.1 h1:pDQZthDfxRMSJ0ereExAM9ODf3JyS42Exk7iCMdbpec= +github.com/nats-io/nats.go v1.19.1/go.mod h1:tLqubohF7t4z3du1QDPYJIQQyhb4wl6DhjxEajSI7UA= github.com/nats-io/nkeys v0.3.0 h1:cgM5tL53EvYRU+2YLXIK0G2mJtK12Ft9oeooSZMA2G8= github.com/nats-io/nkeys v0.3.0/go.mod h1:gvUNGjVcM2IPr5rCsRsC6Wb3Hr2CQAm08dsxtV6A5y4= github.com/nats-io/nuid v1.0.1 h1:5iA8DT8V7q8WK2EScv2padNa/rTESc1KdnPw4TC2paw= From e5a2266fa86c5a609609582217e522318d88210e Mon Sep 17 00:00:00 2001 From: Bernd Verst <4535280+berndverst@users.noreply.github.com> Date: Thu, 10 Nov 2022 12:23:04 -0800 Subject: [PATCH 24/87] Address lint issues Signed-off-by: Bernd Verst <4535280+berndverst@users.noreply.github.com> --- pubsub/jetstream/jetstream.go | 1 - 1 file changed, 1 deletion(-) diff --git a/pubsub/jetstream/jetstream.go b/pubsub/jetstream/jetstream.go index 90be84aa5..28555d9e8 100644 --- a/pubsub/jetstream/jetstream.go +++ b/pubsub/jetstream/jetstream.go @@ -113,7 +113,6 @@ func (js *jetstreamPubSub) Publish(req *pubsub.PublishRequest) error { } func (js *jetstreamPubSub) Subscribe(ctx context.Context, req pubsub.SubscribeRequest, handler pubsub.Handler) error { - var consumerConfig nats.ConsumerConfig consumerConfig.DeliverSubject = nats.NewInbox() From a47d8f87ddabc515d4760a95ba4380acf8b9d5e7 Mon Sep 17 00:00:00 2001 From: Lior Nabat Date: Fri, 11 Nov 2022 16:03:25 +0200 Subject: [PATCH 25/87] Adding KubeMQ Binding - Queue Signed-off-by: Lior Nabat --- bindings/kubemq/kubemq.go | 143 ++++++++ bindings/kubemq/kubemq_integration_test.go | 187 ++++++++++ bindings/kubemq/kubemq_test.go | 400 +++++++++++++++++++++ bindings/kubemq/options.go | 159 ++++++++ tests/config/bindings/kubemq/binding.yml | 13 + tests/config/bindings/tests.yml | 6 +- tests/conformance/common.go | 5 + 7 files changed, 911 insertions(+), 2 deletions(-) create mode 100644 bindings/kubemq/kubemq.go create mode 100644 bindings/kubemq/kubemq_integration_test.go create mode 100644 bindings/kubemq/kubemq_test.go create mode 100644 bindings/kubemq/options.go create mode 100644 tests/config/bindings/kubemq/binding.yml diff --git a/bindings/kubemq/kubemq.go b/bindings/kubemq/kubemq.go new file mode 100644 index 000000000..f5a14f752 --- /dev/null +++ b/bindings/kubemq/kubemq.go @@ -0,0 +1,143 @@ +package kubemq + +import ( + "context" + "fmt" + "strings" + "time" + + qs "github.com/kubemq-io/kubemq-go/queues_stream" + + "github.com/dapr/components-contrib/bindings" + "github.com/dapr/kit/logger" +) + +// interface used to allow unit testing. +type Kubemq interface { + bindings.InputBinding + bindings.OutputBinding +} + +type kubeMQ struct { + client *qs.QueuesStreamClient + opts *options + logger logger.Logger + ctx context.Context + ctxCancel context.CancelFunc +} + +func NewKubeMQ(logger logger.Logger) Kubemq { + return &kubeMQ{ + client: nil, + opts: nil, + logger: logger, + ctx: nil, + ctxCancel: nil, + } +} +func (k *kubeMQ) Init(metadata bindings.Metadata) error { + opts, err := createOptions(metadata) + if err != nil { + return err + } + k.opts = opts + k.ctx, k.ctxCancel = context.WithCancel(context.Background()) + client, err := qs.NewQueuesStreamClient(k.ctx, + qs.WithAddress(opts.host, opts.port), + qs.WithCheckConnection(true), + qs.WithAuthToken(opts.authToken), + qs.WithAutoReconnect(true), + qs.WithReconnectInterval(time.Second)) + if err != nil { + k.logger.Errorf("error init kubemq client error: %s", err.Error()) + return err + } + k.ctx, k.ctxCancel = context.WithCancel(context.Background()) + k.client = client + return nil +} + +func (k *kubeMQ) Read(ctx context.Context, handler bindings.Handler) error { + go func() { + for { + err := k.processQueueMessage(k.ctx, handler) + if err != nil { + k.logger.Error(err.Error()) + time.Sleep(time.Second) + } + if k.ctx.Err() != nil { + return + } + } + }() + return nil +} + +func (k *kubeMQ) Invoke(ctx context.Context, req *bindings.InvokeRequest) (*bindings.InvokeResponse, error) { + queueMessage := qs.NewQueueMessage(). + SetChannel(k.opts.channel). + SetBody(req.Data). + SetPolicyDelaySeconds(parsePolicyDelaySeconds(req.Metadata)). + SetPolicyExpirationSeconds(parsePolicyExpirationSeconds(req.Metadata)). + SetPolicyMaxReceiveCount(parseSetPolicyMaxReceiveCount(req.Metadata)). + SetPolicyMaxReceiveQueue(parsePolicyMaxReceiveQueue(req.Metadata)) + result, err := k.client.Send(k.ctx, queueMessage) + if err != nil { + return nil, err + } + if len(result.Results) > 0 { + if result.Results[0].IsError { + return nil, fmt.Errorf("error sending queue message: %s", result.Results[0].Error) + } + } + return &bindings.InvokeResponse{ + Data: nil, + Metadata: nil, + ContentType: nil, + }, nil +} + +func (k *kubeMQ) Operations() []bindings.OperationKind { + return []bindings.OperationKind{bindings.CreateOperation} +} + +func (k *kubeMQ) processQueueMessage(ctx context.Context, handler bindings.Handler) error { + pr := qs.NewPollRequest(). + SetChannel(k.opts.channel). + SetMaxItems(k.opts.pollMaxItems). + SetWaitTimeout(k.opts.pollTimeoutSeconds). + SetAutoAck(k.opts.autoAcknowledged) + + pollResp, err := k.client.Poll(ctx, pr) + if err != nil { + if strings.Contains(err.Error(), "timout waiting response") { + return nil + } + return err + } + if !pollResp.HasMessages() { + return nil + } + + for _, message := range pollResp.Messages { + _, err := handler(ctx, &bindings.ReadResponse{ + Data: message.Body, + }) + if err != nil { + k.logger.Errorf("error received from response handler: %s", err.Error()) + err := message.NAck() + if err != nil { + k.logger.Errorf("error processing nack message error: %s", err.Error()) + } + time.Sleep(time.Second) + continue + } else { + err := message.Ack() + if err != nil { + k.logger.Errorf("error processing ack queue message error: %s", err.Error()) + continue + } + } + } + return nil +} diff --git a/bindings/kubemq/kubemq_integration_test.go b/bindings/kubemq/kubemq_integration_test.go new file mode 100644 index 000000000..1ca639a94 --- /dev/null +++ b/bindings/kubemq/kubemq_integration_test.go @@ -0,0 +1,187 @@ +//go:build integration_test +// +build integration_test + +package kubemq + +import ( + "context" + "fmt" + "github.com/dapr/components-contrib/bindings" + "github.com/dapr/components-contrib/metadata" + "github.com/dapr/kit/logger" + "github.com/stretchr/testify/require" + "os" + "testing" + "time" +) + +const ( + // Environment variable containing the host name for KubeMQ integration tests + // To run using docker: docker run -d --hostname -kubemq --name test-kubemq -p 50000:50000 kubemq/kubemq-community:latest + // In that case the address string will be: "localhost:50000" + testKubeMQHostEnvKey = "DAPR_TEST_KUBEMQ_HOST" +) + +func getTestKubeMQHost() string { + host := os.Getenv(testKubeMQHostEnvKey) + if host == "" { + host = "localhost:50000" + } + return host +} + +func getDefaultMetadata(channel string) bindings.Metadata { + return bindings.Metadata{Base: metadata.Base{ + Name: "kubemq", + Properties: map[string]string{ + "address": getTestKubeMQHost(), + "channel": string(channel), + "pollMaxItems": "1", + "autoAcknowledged": "true", + "pollTimeoutSeconds": "2", + }, + }, + } +} + +func Test_kubeMQ_Init(t *testing.T) { + tests := []struct { + name string + meta bindings.Metadata + wantErr bool + }{ + { + name: "init with valid options", + meta: bindings.Metadata{Base: metadata.Base{ + Name: "kubemq", + Properties: map[string]string{ + "address": getTestKubeMQHost(), + "channel": "test", + "pollMaxItems": "1", + "autoAcknowledged": "true", + "pollTimeoutSeconds": "2", + }, + }, + }, + wantErr: false, + }, + { + name: "init with invalid options", + meta: bindings.Metadata{Base: metadata.Base{ + Name: "kubemq", + Properties: map[string]string{ + "address": "localhost-bad:50000", + "channel": "test", + "pollMaxItems": "1", + "autoAcknowledged": "true", + "pollTimeoutSeconds": "2", + }, + }, + }, + wantErr: true, + }, + { + name: "init with invalid parsing options", + meta: bindings.Metadata{Base: metadata.Base{ + Name: "kubemq", + Properties: map[string]string{ + "address": "bad", + "channel": "test", + "pollMaxItems": "1", + "autoAcknowledged": "true", + "pollTimeoutSeconds": "2", + }, + }, + }, + wantErr: true, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + kubemq := NewKubeMQ(logger.NewLogger("test")) + err := kubemq.Init(tt.meta) + if tt.wantErr { + require.Error(t, err) + } else { + require.NoError(t, err) + } + }) + } +} + +func Test_kubeMQ_Invoke_Read_Single_Message(t *testing.T) { + ctx, cancel := context.WithTimeout(context.Background(), time.Second*5) + defer cancel() + kubemq := NewKubeMQ(logger.NewLogger("test")) + err := kubemq.Init(getDefaultMetadata("test.read.single")) + require.NoError(t, err) + dataReadCh := make(chan []byte) + invokeRequest := &bindings.InvokeRequest{ + Data: []byte("test"), + Metadata: map[string]string{}, + } + _, err = kubemq.Invoke(ctx, invokeRequest) + require.NoError(t, err) + _ = kubemq.Read(ctx, func(ctx context.Context, req *bindings.ReadResponse) ([]byte, error) { + dataReadCh <- req.Data + return req.Data, nil + }) + select { + case <-ctx.Done(): + require.Fail(t, "timeout waiting for read response") + case data := <-dataReadCh: + require.Equal(t, invokeRequest.Data, data) + } +} +func Test_kubeMQ_Invoke_Read_Single_MessageWithHandlerError(t *testing.T) { + ctx, cancel := context.WithTimeout(context.Background(), time.Second*10) + defer cancel() + kubemq := NewKubeMQ(logger.NewLogger("test")) + md := getDefaultMetadata("test.read.single.error") + md.Properties["autoAcknowledged"] = "false" + err := kubemq.Init(md) + require.NoError(t, err) + invokeRequest := &bindings.InvokeRequest{ + Data: []byte("test"), + Metadata: map[string]string{}, + } + + _, err = kubemq.Invoke(ctx, invokeRequest) + require.NoError(t, err) + firstReadCtx, firstReadCancel := context.WithTimeout(context.Background(), time.Second*3) + defer firstReadCancel() + _ = kubemq.Read(firstReadCtx, func(ctx context.Context, req *bindings.ReadResponse) ([]byte, error) { + return nil, fmt.Errorf("handler error") + }) + + <-firstReadCtx.Done() + dataReadCh := make(chan []byte) + secondReadCtx, secondReadCancel := context.WithTimeout(context.Background(), time.Second*3) + defer secondReadCancel() + _ = kubemq.Read(secondReadCtx, func(ctx context.Context, req *bindings.ReadResponse) ([]byte, error) { + dataReadCh <- req.Data + return req.Data, nil + }) + select { + case <-secondReadCtx.Done(): + require.Fail(t, "timeout waiting for read response") + case data := <-dataReadCh: + require.Equal(t, invokeRequest.Data, data) + } +} + +func Test_kubeMQ_Invoke_Error(t *testing.T) { + ctx, cancel := context.WithTimeout(context.Background(), time.Second*5) + defer cancel() + kubemq := NewKubeMQ(logger.NewLogger("test")) + err := kubemq.Init(getDefaultMetadata("***test***")) + require.NoError(t, err) + + invokeRequest := &bindings.InvokeRequest{ + Data: []byte("test"), + Metadata: map[string]string{}, + } + _, err = kubemq.Invoke(ctx, invokeRequest) + require.Error(t, err) +} diff --git a/bindings/kubemq/kubemq_test.go b/bindings/kubemq/kubemq_test.go new file mode 100644 index 000000000..d5bc2e076 --- /dev/null +++ b/bindings/kubemq/kubemq_test.go @@ -0,0 +1,400 @@ +package kubemq + +import ( + "testing" + + "github.com/stretchr/testify/assert" + + "github.com/dapr/components-contrib/bindings" + "github.com/dapr/components-contrib/metadata" +) + +func Test_createOptions(t *testing.T) { + tests := []struct { + name string + meta bindings.Metadata + want *options + wantErr bool + }{ + { + name: "create valid opts", + meta: bindings.Metadata{Base: metadata.Base{ + Name: "kubemq", + Properties: map[string]string{ + "address": "localhost:50000", + "channel": "test", + "authToken": "authToken", + "pollMaxItems": "10", + "autoAcknowledged": "true", + "pollTimeoutSeconds": "10", + }, + }, + }, + want: &options{ + host: "localhost", + port: 50000, + authToken: "authToken", + channel: "test", + autoAcknowledged: true, + pollMaxItems: 10, + pollTimeoutSeconds: 10, + }, + wantErr: false, + }, + { + name: "create invalid opts with bad host", + meta: bindings.Metadata{Base: metadata.Base{ + Name: "kubemq", + Properties: map[string]string{ + "address": ":50000", + "clientId": "clientId", + }, + }, + }, + want: nil, + wantErr: true, + }, + { + name: "create invalid opts with bad port", + meta: bindings.Metadata{Base: metadata.Base{ + Name: "kubemq", + Properties: map[string]string{ + "address": "localhost:badport", + "clientId": "clientId", + }, + }, + }, + want: nil, + wantErr: true, + }, + { + name: "create invalid opts with empty address", + meta: bindings.Metadata{Base: metadata.Base{ + Name: "kubemq", + Properties: map[string]string{ + "address": "", + "clientId": "clientId", + }, + }, + }, + want: nil, + wantErr: true, + }, + { + name: "create invalid opts with bad address format", + meta: bindings.Metadata{Base: metadata.Base{ + Name: "kubemq", + Properties: map[string]string{ + "address": "localhost50000", + }, + }}, + want: nil, + wantErr: true, + }, + { + name: "create invalid opts with no channel", + meta: bindings.Metadata{Base: metadata.Base{ + Name: "kubemq", + Properties: map[string]string{ + "address": "localhost:50000", + }, + }}, + want: nil, + wantErr: true, + }, + { + name: "create invalid opts with bad autoAcknowledged", + meta: bindings.Metadata{Base: metadata.Base{ + Name: "kubemq", + Properties: map[string]string{ + "address": "localhost:50000", + "channel": "test", + "autoAcknowledged": "bad", + }, + }}, + want: nil, + wantErr: true, + }, + { + name: "create invalid opts with invalid pollMaxItems", + meta: bindings.Metadata{Base: metadata.Base{ + Name: "kubemq", + Properties: map[string]string{ + "address": "localhost:50000", + "channel": "test", + "pollMaxItems": "0", + }, + }}, + want: nil, + wantErr: true, + }, + { + name: "create invalid opts with bad pollMaxItems format", + meta: bindings.Metadata{Base: metadata.Base{ + Name: "kubemq", + Properties: map[string]string{ + "address": "localhost:50000", + "channel": "test", + "pollMaxItems": "bad", + }, + }}, + want: nil, + wantErr: true, + }, + { + name: "create invalid opts with invalid pollTimeoutSeconds", + meta: bindings.Metadata{Base: metadata.Base{ + Name: "kubemq", + Properties: map[string]string{ + "address": "localhost:50000", + "channel": "test", + "pollTimeoutSeconds": "0", + }, + }}, + want: nil, + wantErr: true, + }, + { + name: "create invalid opts with bad format pollTimeoutSeconds", + meta: bindings.Metadata{Base: metadata.Base{ + Name: "kubemq", + Properties: map[string]string{ + "address": "localhost:50000", + "channel": "test", + "pollTimeoutSeconds": "bad", + }, + }}, + want: nil, + wantErr: true, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got, err := createOptions(tt.meta) + if tt.wantErr { + assert.Error(t, err) + + } else { + assert.NoError(t, err) + assert.Equal(t, tt.want, got) + } + }) + } +} + +func Test_parsePolicyDelaySeconds(t *testing.T) { + type args struct { + md map[string]string + } + tests := []struct { + name string + args args + want int + }{ + { + name: "parse policy delay seconds - nil", + args: args{ + md: nil, + }, + want: 0, + }, + { + name: "parse policy delay seconds - empty", + args: args{ + md: map[string]string{}, + }, + want: 0, + }, + { + name: "parse policy delay seconds", + args: args{ + md: map[string]string{ + "delaySeconds": "10", + }, + }, + want: 10, + }, + { + name: "parse policy delay seconds with bad format", + args: args{ + md: map[string]string{ + "delaySeconds": "bad", + }, + }, + want: 0, + }, + { + name: "parse policy delay seconds with negative value", + args: args{ + md: map[string]string{ + "delaySeconds": "-10", + }, + }, + want: 0, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + assert.Equalf(t, tt.want, parsePolicyDelaySeconds(tt.args.md), "parsePolicyDelaySeconds(%v)", tt.args.md) + }) + } +} + +func Test_parsePolicyExpirationSeconds(t *testing.T) { + type args struct { + md map[string]string + } + tests := []struct { + name string + args args + want int + }{ + {name: "parse policy expiration seconds - nil", + args: args{ + md: nil, + }, + want: 0, + }, + { + name: "parse policy expiration seconds - empty", + args: args{ + md: map[string]string{}, + }, + want: 0, + }, + { + name: "parse policy expiration seconds", + args: args{ + md: map[string]string{ + "expirationSeconds": "10", + }, + }, + want: 10, + }, + { + name: "parse policy expiration seconds with bad format", + args: args{ + md: map[string]string{ + "expirationSeconds": "bad", + }, + }, + want: 0, + }, + { + name: "parse policy expiration seconds with negative value", + args: args{ + md: map[string]string{ + "expirationSeconds": "-10", + }, + }, + want: 0, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + assert.Equalf(t, tt.want, parsePolicyExpirationSeconds(tt.args.md), "parsePolicyExpirationSeconds(%v)", tt.args.md) + }) + } +} + +func Test_parseSetPolicyMaxReceiveCount(t *testing.T) { + type args struct { + md map[string]string + } + tests := []struct { + name string + args args + want int + }{ + { + name: "parse policy max receive count nil", + args: args{ + md: nil, + }, + want: 0, + }, + { + name: "parse policy max receive count empty", + args: args{ + md: map[string]string{}, + }, + want: 0, + }, + { + name: "parse policy max receive count", + args: args{ + md: map[string]string{ + "maxReceiveCount": "10", + }, + }, + want: 10, + }, + + { + name: "parse policy max receive count with bad format", + args: args{ + md: map[string]string{ + "maxReceiveCount": "bad", + }, + }, + want: 0, + }, + { + name: "parse policy max receive count with negative value", + args: args{ + md: map[string]string{ + "maxReceiveCount": "-10", + }, + }, + want: 0, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + assert.Equalf(t, tt.want, parseSetPolicyMaxReceiveCount(tt.args.md), "parseSetPolicyMaxReceiveCount(%v)", tt.args.md) + }) + } +} + +func Test_parsePolicyMaxReceiveQueue(t *testing.T) { + type args struct { + md map[string]string + } + tests := []struct { + name string + args args + want string + }{ + { + name: "parse policy max receive queue nil", + args: args{ + md: nil, + }, + want: "", + }, + { + name: "parse policy max receive queue empty", + args: args{ + md: map[string]string{}, + }, + want: "", + }, + { + name: "parse policy max receive queue", + args: args{ + md: map[string]string{ + "maxReceiveQueue": "some-queue", + }, + }, + want: "some-queue", + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + assert.Equalf(t, tt.want, parsePolicyMaxReceiveQueue(tt.args.md), "parsePolicyMaxReceiveQueue(%v)", tt.args.md) + }) + } +} diff --git a/bindings/kubemq/options.go b/bindings/kubemq/options.go new file mode 100644 index 000000000..3208d7b62 --- /dev/null +++ b/bindings/kubemq/options.go @@ -0,0 +1,159 @@ +package kubemq + +import ( + "fmt" + "github.com/dapr/components-contrib/bindings" + "strconv" + "strings" +) + +type options struct { + host string + port int + channel string + authToken string + autoAcknowledged bool + pollMaxItems int + pollTimeoutSeconds int +} + +func parseAddress(address string) (string, int, error) { + var host string + var port int + var err error + hostPort := strings.Split(address, ":") + if len(hostPort) != 2 { + return "", 0, fmt.Errorf("invalid kubemq address, address format is invalid") + } + host = hostPort[0] + if len(host) == 0 { + return "", 0, fmt.Errorf("invalid kubemq address, host is empty") + } + port, err = strconv.Atoi(hostPort[1]) + if err != nil { + return "", 0, fmt.Errorf("invalid kubemq address, port is invalid") + } + return host, port, nil +} + +// createOptions creates a new instance from the kubemq options +func createOptions(md bindings.Metadata) (*options, error) { + result := &options{ + host: "", + port: 0, + channel: "", + authToken: "", + autoAcknowledged: false, + pollMaxItems: 1, + pollTimeoutSeconds: 3600, + } + if val, found := md.Properties["address"]; found && val != "" { + var err error + result.host, result.port, err = parseAddress(val) + if err != nil { + return nil, err + } + } else { + return nil, fmt.Errorf("invalid kubemq address, address is empty") + } + if val, ok := md.Properties["channel"]; ok && val != "" { + result.channel = val + } else { + return nil, fmt.Errorf("invalid kubemq channel, channel is empty") + } + + if val, found := md.Properties["authToken"]; found && val != "" { + if found && val != "" { + result.authToken = val + } + } + + if val, found := md.Properties["autoAcknowledged"]; found && val != "" { + autoAcknowledged, err := strconv.ParseBool(val) + if err != nil { + return nil, fmt.Errorf("invalid kubemq autoAcknowledged value, %s", err.Error()) + } + result.autoAcknowledged = autoAcknowledged + } + if val, found := md.Properties["pollMaxItems"]; found && val != "" { + pollMaxItems, err := strconv.Atoi(val) + if err != nil { + return nil, fmt.Errorf("invalid kubemq pollMaxItems value, %s", err.Error()) + } + if pollMaxItems < 1 { + return nil, fmt.Errorf("invalid kubemq pollMaxItems value, value must be greater than 0") + } + result.pollMaxItems = pollMaxItems + } + if val, found := md.Properties["pollTimeoutSeconds"]; found && val != "" { + timeoutSecond, err := strconv.Atoi(val) + if err != nil { + return nil, fmt.Errorf("invalid kubemq pollTimeoutSeconds value, %s", err.Error()) + } else { + if timeoutSecond < 1 { + return nil, fmt.Errorf("invalid kubemq pollTimeoutSeconds value, value must be greater than 0") + } + result.pollTimeoutSeconds = timeoutSecond + } + } + return result, nil +} + +func parsePolicyDelaySeconds(md map[string]string) int { + if md == nil { + return 0 + } + if val, found := md["delaySeconds"]; found && val != "" { + delaySeconds, err := strconv.Atoi(val) + if err != nil { + return 0 + } + if delaySeconds < 0 { + return 0 + } + return delaySeconds + } + return 0 +} +func parsePolicyExpirationSeconds(md map[string]string) int { + if md == nil { + return 0 + } + if val, found := md["expirationSeconds"]; found && val != "" { + expirationSeconds, err := strconv.Atoi(val) + if err != nil { + return 0 + } + if expirationSeconds < 0 { + return 0 + } + return expirationSeconds + } + return 0 +} +func parseSetPolicyMaxReceiveCount(md map[string]string) int { + if md == nil { + return 0 + } + if val, found := md["maxReceiveCount"]; found && val != "" { + maxReceiveCount, err := strconv.Atoi(val) + if err != nil { + return 0 + } + if maxReceiveCount < 0 { + return 0 + } + return maxReceiveCount + } + return 0 +} + +func parsePolicyMaxReceiveQueue(md map[string]string) string { + if md == nil { + return "" + } + if val, found := md["maxReceiveQueue"]; found && val != "" { + return val + } + return "" +} diff --git a/tests/config/bindings/kubemq/binding.yml b/tests/config/bindings/kubemq/binding.yml new file mode 100644 index 000000000..cba5b2825 --- /dev/null +++ b/tests/config/bindings/kubemq/binding.yml @@ -0,0 +1,13 @@ +apiVersion: dapr.io/v1alpha1 +kind: Component +metadata: + name: binding-topic + namespace: default +spec: + type: bindings.kubemq + version: v1 + metadata: + - name: address + value: localhost:50000 + - name: channel + value: queue1 diff --git a/tests/config/bindings/tests.yml b/tests/config/bindings/tests.yml index 1c5b7170c..d57614c04 100644 --- a/tests/config/bindings/tests.yml +++ b/tests/config/bindings/tests.yml @@ -38,7 +38,7 @@ components: operations: ["create", "operations"] - component: kafka profile: confluent - operations: ["create", "operations"] + operations: ["create", "operations"] - component: http operations: ["create", "operations"] config: @@ -61,6 +61,8 @@ components: operations: ["create", "operations", "read"] config: checkInOrderProcessing: false + - component: kubemq + operations: [ "create", "operations", "read" ] - component: postgres allOperations: false - operations: [ "exec", "query", "close", "operations" ] \ No newline at end of file + operations: [ "exec", "query", "close", "operations" ] diff --git a/tests/conformance/common.go b/tests/conformance/common.go index 94521000d..2229f0a9f 100644 --- a/tests/conformance/common.go +++ b/tests/conformance/common.go @@ -45,6 +45,7 @@ import ( b_http "github.com/dapr/components-contrib/bindings/http" b_influx "github.com/dapr/components-contrib/bindings/influx" b_kafka "github.com/dapr/components-contrib/bindings/kafka" + b_kubemq "github.com/dapr/components-contrib/bindings/kubemq" b_mqtt "github.com/dapr/components-contrib/bindings/mqtt" b_postgres "github.com/dapr/components-contrib/bindings/postgres" b_rabbitmq "github.com/dapr/components-contrib/bindings/rabbitmq" @@ -497,6 +498,8 @@ func loadOutputBindings(tc TestComponent) bindings.OutputBinding { binding = b_mqtt.NewMQTT(testLogger) case "rabbitmq": binding = b_rabbitmq.NewRabbitMQ(testLogger) + case "kubemq": + binding = b_kubemq.NewKubeMQ(testLogger) case "postgres": binding = b_postgres.NewPostgres(testLogger) default: @@ -524,6 +527,8 @@ func loadInputBindings(tc TestComponent) bindings.InputBinding { binding = b_mqtt.NewMQTT(testLogger) case "rabbitmq": binding = b_rabbitmq.NewRabbitMQ(testLogger) + case "kubemq": + binding = b_kubemq.NewKubeMQ(testLogger) default: return nil } From 7295b3acc16c6dea35371da39a9df6ef90af16b9 Mon Sep 17 00:00:00 2001 From: Pravin Pushkar Date: Fri, 11 Nov 2022 23:49:23 +0530 Subject: [PATCH 26/87] azappconfig incorporate OnlyIfChanged flag from sdk Signed-off-by: Pravin Pushkar --- configuration/azure/appconfig/appconfig.go | 14 ++++++++++---- go.mod | 2 +- go.sum | 2 ++ 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/configuration/azure/appconfig/appconfig.go b/configuration/azure/appconfig/appconfig.go index b91601ad6..262657753 100644 --- a/configuration/azure/appconfig/appconfig.go +++ b/configuration/azure/appconfig/appconfig.go @@ -295,15 +295,21 @@ func (r *ConfigurationStore) Subscribe(ctx context.Context, req *configuration.S } func (r *ConfigurationStore) doSubscribe(ctx context.Context, req *configuration.SubscribeRequest, handler configuration.UpdateHandler, sentinelKey string, id string) { + var etagVal *azcore.ETag for { // get sentinel key changes - _, err := r.Get(ctx, &configuration.GetRequest{ - Keys: []string{sentinelKey}, - Metadata: req.Metadata, - }) + resp, err := r.client.GetSetting( + context.TODO(), + sentinelKey, + &azappconfig.GetSettingOptions{ + Label: r.getLabelFromMetadata(req.Metadata), + OnlyIfChanged: etagVal, + }, + ) if err != nil { r.logger.Debugf("azure appconfig error: fail to get sentinel key changes or sentinel key's value is unchanged: %s", err) } else { + etagVal = resp.ETag items, err := r.Get(ctx, &configuration.GetRequest{ Keys: req.Keys, Metadata: req.Metadata, diff --git a/go.mod b/go.mod index 5b94f3034..6d8febc18 100644 --- a/go.mod +++ b/go.mod @@ -13,7 +13,7 @@ require ( github.com/Azure/azure-sdk-for-go v65.0.0+incompatible github.com/Azure/azure-sdk-for-go/sdk/azcore v1.1.4 github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.1.0 - github.com/Azure/azure-sdk-for-go/sdk/data/azappconfig v0.4.3 + github.com/Azure/azure-sdk-for-go/sdk/data/azappconfig v0.5.0 github.com/Azure/azure-sdk-for-go/sdk/data/azcosmos v0.3.2 github.com/Azure/azure-sdk-for-go/sdk/data/aztables v1.0.1 github.com/Azure/azure-sdk-for-go/sdk/keyvault/azsecrets v0.10.1 diff --git a/go.sum b/go.sum index 13862b899..b5ce71902 100644 --- a/go.sum +++ b/go.sum @@ -105,6 +105,8 @@ github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.1.0 h1:QkAcEIAKbNL4KoFr4Sath github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.1.0/go.mod h1:bhXu1AjYL+wutSL/kpSq6s7733q2Rb0yuot9Zgfqa/0= github.com/Azure/azure-sdk-for-go/sdk/data/azappconfig v0.4.3 h1:QzjiMJn/pBxOq1xA3F6ODUvO1agmt7+mI+DZEx6dPtc= github.com/Azure/azure-sdk-for-go/sdk/data/azappconfig v0.4.3/go.mod h1:p74+tP95m8830ypJk53L93+BEsjTKY4SKQ75J2NmS5U= +github.com/Azure/azure-sdk-for-go/sdk/data/azappconfig v0.5.0 h1:OrKZybbyagpgJiREiIVzH5mV/z9oS4rXqdX7i31DSF0= +github.com/Azure/azure-sdk-for-go/sdk/data/azappconfig v0.5.0/go.mod h1:p74+tP95m8830ypJk53L93+BEsjTKY4SKQ75J2NmS5U= github.com/Azure/azure-sdk-for-go/sdk/data/azcosmos v0.3.2 h1:yJegJqjhrMJ3Oe5s43jOTGL2AsE7pJyx+7Yqls/65tw= github.com/Azure/azure-sdk-for-go/sdk/data/azcosmos v0.3.2/go.mod h1:Fy3bbChFm4cZn6oIxYYqKB2FG3rBDxk3NZDLDJCHl+Q= github.com/Azure/azure-sdk-for-go/sdk/data/aztables v1.0.1 h1:bFa9IcjvrCber6gGgDAUZ+I2bO8J7s8JxXmu9fhi2ss= From 9870c5e33beb8706a6e76e5c95d55a39b40d7fa3 Mon Sep 17 00:00:00 2001 From: Taction Date: Sat, 12 Nov 2022 03:34:33 +0800 Subject: [PATCH 27/87] Add pubsub rabbitmq TTL support (#2093) * Add pubsub rabbitmq TTL support Signed-off-by: zhangchao * fix review: remove queue level ttl, both ttl is handled when publishing, to make message ttl has priority over queue level ttl Signed-off-by: zhangchao * add rabbitmq ttl certificate test Signed-off-by: zhangchao * fix lint Signed-off-by: zhangchao * fix ttl certificate test precreate topic Signed-off-by: zhangchao * tiny fix tests Signed-off-by: zhangchao Signed-off-by: zhangchao Signed-off-by: Bernd Verst <4535280+berndverst@users.noreply.github.com> Co-authored-by: Yaron Schneider Co-authored-by: Artur Souza Co-authored-by: Bernd Verst <4535280+berndverst@users.noreply.github.com> --- pubsub/rabbitmq/metadata.go | 14 +- pubsub/rabbitmq/rabbitmq.go | 19 +- tests/certification/pubsub/rabbitmq/README.md | 8 + .../components/ttl/rabbitmq_msg_ttl.yaml | 19 ++ .../ttl/rabbitmq_overwrite_ttl.yaml | 21 ++ .../components/ttl/rabbitmq_queue_ttl.yaml | 21 ++ .../pubsub/rabbitmq/rabbitmq_test.go | 245 +++++++++++++++++- 7 files changed, 330 insertions(+), 17 deletions(-) create mode 100644 tests/certification/pubsub/rabbitmq/components/ttl/rabbitmq_msg_ttl.yaml create mode 100644 tests/certification/pubsub/rabbitmq/components/ttl/rabbitmq_overwrite_ttl.yaml create mode 100644 tests/certification/pubsub/rabbitmq/components/ttl/rabbitmq_queue_ttl.yaml diff --git a/pubsub/rabbitmq/metadata.go b/pubsub/rabbitmq/metadata.go index 5c477f91b..fd531024c 100644 --- a/pubsub/rabbitmq/metadata.go +++ b/pubsub/rabbitmq/metadata.go @@ -21,8 +21,10 @@ import ( amqp "github.com/rabbitmq/amqp091-go" - "github.com/dapr/components-contrib/pubsub" "github.com/dapr/kit/logger" + + contribMetadata "github.com/dapr/components-contrib/metadata" + "github.com/dapr/components-contrib/pubsub" ) type metadata struct { @@ -45,6 +47,7 @@ type metadata struct { exchangeKind string publisherConfirm bool concurrency pubsub.ConcurrencyMode + defaultQueueTTL *time.Duration } const ( @@ -191,6 +194,15 @@ func createMetadata(pubSubMetadata pubsub.Metadata, log logger.Logger) (*metadat } } + ttl, ok, err := contribMetadata.TryGetTTL(pubSubMetadata.Properties) + if err != nil { + return &result, fmt.Errorf("%s parse RabbitMQ ttl metadata with error: %s", errorMessagePrefix, err) + } + + if ok { + result.defaultQueueTTL = &ttl + } + c, err := pubsub.Concurrency(pubSubMetadata.Properties) if err != nil { return &result, err diff --git a/pubsub/rabbitmq/rabbitmq.go b/pubsub/rabbitmq/rabbitmq.go index 852af79db..821e00c8c 100644 --- a/pubsub/rabbitmq/rabbitmq.go +++ b/pubsub/rabbitmq/rabbitmq.go @@ -24,8 +24,10 @@ import ( amqp "github.com/rabbitmq/amqp091-go" - "github.com/dapr/components-contrib/pubsub" "github.com/dapr/kit/logger" + + contribMetadata "github.com/dapr/components-contrib/metadata" + "github.com/dapr/components-contrib/pubsub" ) const ( @@ -190,10 +192,23 @@ func (r *rabbitMQ) publishSync(req *pubsub.PublishRequest) (rabbitMQChannelBroke routingKey = val } + ttl, ok, err := contribMetadata.TryGetTTL(req.Metadata) + if err != nil { + r.logger.Warnf("%s publishing to %s failed parse TryGetTTL: %v, it is ignored.", logMessagePrefix, req.Topic, err) + } + var expiration string + if ok { + // RabbitMQ expects the duration in ms + expiration = strconv.FormatInt(ttl.Milliseconds(), 10) + } else if r.metadata.defaultQueueTTL != nil { + expiration = strconv.FormatInt(r.metadata.defaultQueueTTL.Milliseconds(), 10) + } + confirm, err := r.channel.PublishWithDeferredConfirmWithContext(r.ctx, req.Topic, routingKey, false, false, amqp.Publishing{ ContentType: "text/plain", Body: req.Data, DeliveryMode: r.metadata.deliveryMode, + Expiration: expiration, }) if err != nil { r.logger.Errorf("%s publishing to %s failed in channel.Publish: %v", logMessagePrefix, req.Topic, err) @@ -545,7 +560,7 @@ func (r *rabbitMQ) Close() error { } func (r *rabbitMQ) Features() []pubsub.Feature { - return nil + return []pubsub.Feature{pubsub.FeatureMessageTTL} } func mustReconnect(channel rabbitMQChannelBroker, err error) bool { diff --git a/tests/certification/pubsub/rabbitmq/README.md b/tests/certification/pubsub/rabbitmq/README.md index f07d26962..bc4699365 100644 --- a/tests/certification/pubsub/rabbitmq/README.md +++ b/tests/certification/pubsub/rabbitmq/README.md @@ -27,3 +27,11 @@ This project aims to test the RabbitMQ Pub/Sub component under various condition * the total number of the messages received by subscribers "B" * App: Simulates periodic errors * Component: Retries on error +* Test TTL is regarded. + * Setting a large TTL only at the message level but not component level, wait for a small period, and verify that the message is received. + * Setting a TTL only at the message level but not component level expires messages correctly + * Setting a default TTL at the component level expires messages correctly + * Create component spec with the field `ttlInSeconds`. + * Run dapr application with component. + * Send a message, wait TTL seconds, and verify the message is deleted/expired. + * Setting a TTL at the component level and message level ignores the default component level TTL and always uses the message level TTL specified diff --git a/tests/certification/pubsub/rabbitmq/components/ttl/rabbitmq_msg_ttl.yaml b/tests/certification/pubsub/rabbitmq/components/ttl/rabbitmq_msg_ttl.yaml new file mode 100644 index 000000000..121bbe192 --- /dev/null +++ b/tests/certification/pubsub/rabbitmq/components/ttl/rabbitmq_msg_ttl.yaml @@ -0,0 +1,19 @@ +apiVersion: dapr.io/v1alpha1 +kind: Component +metadata: + name: msg-ttl-pubsub + namespace: default +spec: + type: pubsub.rabbitmq + version: v1 + metadata: + - name: consumerID + value: msg + - name: host + value: "amqp://test:test@localhost:5672" + - name: durable + value: true + - name: deletedWhenUnused + value: false + - name: requeueInFailure + value: true diff --git a/tests/certification/pubsub/rabbitmq/components/ttl/rabbitmq_overwrite_ttl.yaml b/tests/certification/pubsub/rabbitmq/components/ttl/rabbitmq_overwrite_ttl.yaml new file mode 100644 index 000000000..9b7ebd2ff --- /dev/null +++ b/tests/certification/pubsub/rabbitmq/components/ttl/rabbitmq_overwrite_ttl.yaml @@ -0,0 +1,21 @@ +apiVersion: dapr.io/v1alpha1 +kind: Component +metadata: + name: overwrite-ttl-pubsub + namespace: default +spec: + type: pubsub.rabbitmq + version: v1 + metadata: + - name: consumerID + value: overwrite + - name: host + value: "amqp://test:test@localhost:5672" + - name: durable + value: true + - name: deletedWhenUnused + value: false + - name: requeueInFailure + value: true + - name: ttlInSeconds + value: 30 # Short TTL for easier testing \ No newline at end of file diff --git a/tests/certification/pubsub/rabbitmq/components/ttl/rabbitmq_queue_ttl.yaml b/tests/certification/pubsub/rabbitmq/components/ttl/rabbitmq_queue_ttl.yaml new file mode 100644 index 000000000..06a0a223d --- /dev/null +++ b/tests/certification/pubsub/rabbitmq/components/ttl/rabbitmq_queue_ttl.yaml @@ -0,0 +1,21 @@ +apiVersion: dapr.io/v1alpha1 +kind: Component +metadata: + name: queue-ttl-pubsub + namespace: default +spec: + type: pubsub.rabbitmq + version: v1 + metadata: + - name: consumerID + value: queue + - name: host + value: "amqp://test:test@localhost:5672" + - name: durable + value: true + - name: deletedWhenUnused + value: false + - name: requeueInFailure + value: true + - name: ttlInSeconds + value: 10 # Short TTL for easier testing \ No newline at end of file diff --git a/tests/certification/pubsub/rabbitmq/rabbitmq_test.go b/tests/certification/pubsub/rabbitmq/rabbitmq_test.go index 3d14ff465..146325d81 100644 --- a/tests/certification/pubsub/rabbitmq/rabbitmq_test.go +++ b/tests/certification/pubsub/rabbitmq/rabbitmq_test.go @@ -17,24 +17,27 @@ import ( "context" "fmt" "math/rand" + "strconv" "sync" "testing" "time" "github.com/cenkalti/backoff/v4" + daprClient "github.com/dapr/go-sdk/client" amqp "github.com/rabbitmq/amqp091-go" "github.com/stretchr/testify/require" "go.uber.org/multierr" // Pub/Sub. - pubsub_rabbitmq "github.com/dapr/components-contrib/pubsub/rabbitmq" pubsub_loader "github.com/dapr/dapr/pkg/components/pubsub" "github.com/dapr/dapr/pkg/runtime" "github.com/dapr/go-sdk/service/common" "github.com/dapr/kit/logger" kit_retry "github.com/dapr/kit/retry" + pubsub_rabbitmq "github.com/dapr/components-contrib/pubsub/rabbitmq" + "github.com/dapr/components-contrib/tests/certification/embedded" "github.com/dapr/components-contrib/tests/certification/flow" "github.com/dapr/components-contrib/tests/certification/flow/app" @@ -47,26 +50,34 @@ import ( ) const ( - sidecarName1 = "dapr-1" - sidecarName2 = "dapr-2" - sidecarName3 = "dapr-3" - appID1 = "app-1" - appID2 = "app-2" - appID3 = "app-3" - clusterName = "rabbitmqcertification" - dockerComposeYAML = "docker-compose.yml" - numMessages = 1000 - errFrequency = 100 - appPort = 8000 + sidecarName1 = "dapr-1" + sidecarName2 = "dapr-2" + sidecarName3 = "dapr-3" + sidecarNameTTLClient = "dapr-ttl-client" + appID1 = "app-1" + appID2 = "app-2" + appID3 = "app-3" + clusterName = "rabbitmqcertification" + dockerComposeYAML = "docker-compose.yml" + numMessages = 1000 + errFrequency = 100 + appPort = 8000 rabbitMQURL = "amqp://test:test@localhost:5672" - pubsubAlpha = "mq-alpha" - pubsubBeta = "mq-beta" + pubsubAlpha = "mq-alpha" + pubsubBeta = "mq-beta" + pubsubMessageOnlyTTL = "msg-ttl-pubsub" + pubsubQueueOnlyTTL = "overwrite-ttl-pubsub" + pubsubOverwriteTTL = "queue-ttl-pubsub" topicRed = "red" topicBlue = "blue" topicGreen = "green" + + topicTTL1 = "ttl1" + topicTTL2 = "ttl2" + topicTTL3 = "ttl3" ) type Consumer struct { @@ -325,6 +336,212 @@ func TestRabbitMQ(t *testing.T) { Run() } +func TestRabbitMQTTL(t *testing.T) { + rand.Seed(time.Now().UTC().UnixNano()) + log := logger.NewLogger("dapr.components") + // log.SetOutputLevel(logger.DebugLevel) + + MessageOnlyMessages, QueueOnlyMessages, OverwriteMessages := watcher.NewUnordered(), watcher.NewUnordered(), watcher.NewUnordered() + fullMessages := watcher.NewUnordered() + // Application logic that tracks messages from a topic. + application := func(pubsubName, topic string, w *watcher.Watcher) app.SetupFn { + return func(ctx flow.Context, s common.Service) (err error) { + // Simulate periodic errors. + sim := simulate.PeriodicError(ctx, errFrequency) + err = multierr.Combine( + err, + s.AddTopicEventHandler(&common.Subscription{ + PubsubName: pubsubName, + Topic: topic, + Route: fmt.Sprintf("/%s", topic), + }, func(_ context.Context, e *common.TopicEvent) (retry bool, err error) { + if err := sim(); err != nil { + log.Debugf("Simulated error - pubsub: %s, topic: %s, id: %s, data: %s", e.PubsubName, e.Topic, e.ID, e.Data) + return true, err + } + + // Track/Observe the data of the event. + w.Observe(e.Data) + log.Debugf("Event - pubsub: %s, topic: %s, id: %s, data: %s", e.PubsubName, e.Topic, e.ID, e.Data) + return false, nil + }), + ) + + return err + } + } + + sendMessage := func(sidecarName, pubsubName, topic string, ttlInSeconds int) func(ctx flow.Context) error { + fullMessages.Reset() + return func(ctx flow.Context) error { + // Declare what is expected BEFORE performing any steps + // that will satisfy the test. + msgs := make([]string, numMessages) + for i := range msgs { + msgs[i] = fmt.Sprintf("Hello, Messages %03d", i) + } + + sc := sidecar.GetClient(ctx, sidecarName) + + // Send events that the application above will observe. + log.Infof("Sending messages on topic '%s'", topic) + + var err error + for _, msg := range msgs { + log.Debugf("Sending: '%s' on topic '%s'", msg, topic) + if ttlInSeconds > 0 { + err = sc.PublishEvent(ctx, pubsubName, topic, msg, daprClient.PublishEventWithMetadata(map[string]string{"ttlInSeconds": strconv.Itoa(ttlInSeconds)})) + } else { + err = sc.PublishEvent(ctx, pubsubName, topic, msg) + } + require.NoError(ctx, err, "error publishing message") + fullMessages.Add(msg) + fullMessages.Prepare(msg) + } + + return nil + } + } + + flow.New(t, "rabbitmq ttl certification"). + // Run RabbitMQ using Docker Compose. + Step(dockercompose.Run(clusterName, dockerComposeYAML)). + Step("wait for rabbitmq readiness", + retry.Do(time.Second, 30, amqpReady(rabbitMQURL))). + // Start dapr and app to precreate all 3 queue in rabbitmq, + // if topic is not subscribed, then the message will be lost. + // Sidecar will block to wait app, so we need to start app first. + Step(app.Run(appID1, fmt.Sprintf(":%d", appPort+1), + application(pubsubMessageOnlyTTL, topicTTL1, fullMessages))). + Step(sidecar.Run(sidecarName1, + embedded.WithComponentsPath("./components/ttl"), + embedded.WithAppProtocol(runtime.HTTPProtocol, appPort+1), + embedded.WithDaprGRPCPort(runtime.DefaultDaprAPIGRPCPort+1), + embedded.WithDaprHTTPPort(runtime.DefaultDaprHTTPPort+1), + embedded.WithProfilePort(runtime.DefaultProfilePort+1), + componentRuntimeOptions(), + )). + Step(app.Run(appID2, fmt.Sprintf(":%d", appPort+2), + application(pubsubQueueOnlyTTL, topicTTL2, QueueOnlyMessages))). + Step(sidecar.Run(sidecarName2, + embedded.WithComponentsPath("./components/ttl"), + embedded.WithAppProtocol(runtime.HTTPProtocol, appPort+2), + embedded.WithDaprGRPCPort(runtime.DefaultDaprAPIGRPCPort+2), + embedded.WithDaprHTTPPort(runtime.DefaultDaprHTTPPort+2), + embedded.WithProfilePort(runtime.DefaultProfilePort+2), + componentRuntimeOptions(), + )). + Step(app.Run(appID3, fmt.Sprintf(":%d", appPort+4), + application(pubsubOverwriteTTL, topicTTL3, OverwriteMessages))). + Step(sidecar.Run(sidecarName3, + embedded.WithComponentsPath("./components/ttl"), + embedded.WithAppProtocol(runtime.HTTPProtocol, appPort+4), + embedded.WithDaprGRPCPort(runtime.DefaultDaprAPIGRPCPort+4), + embedded.WithDaprHTTPPort(runtime.DefaultDaprHTTPPort+4), + embedded.WithProfilePort(runtime.DefaultProfilePort+4), + componentRuntimeOptions(), + )). + // Wait for all queue crated and then stop. + Step("wait", flow.Sleep(10*time.Second)). + Step("stop sidecar1", sidecar.Stop(sidecarName1)). + Step("stop app1", app.Stop(appID1)). + Step("stop sidecar2", sidecar.Stop(sidecarName2)). + Step("stop app2", app.Stop(appID2)). + Step("stop sidecar3", sidecar.Stop(sidecarName3)). + Step("stop app3", app.Stop(appID3)). + // Run publishing sidecars and send to RabbitMQ. + Step(sidecar.Run(sidecarNameTTLClient, + embedded.WithComponentsPath("./components/ttl"), + embedded.WithAppProtocol(runtime.HTTPProtocol, 0), + embedded.WithDaprGRPCPort(runtime.DefaultDaprAPIGRPCPort), + embedded.WithDaprHTTPPort(runtime.DefaultDaprHTTPPort), + embedded.WithProfilePort(runtime.DefaultProfilePort), + componentRuntimeOptions(), + )). + Step("wait", flow.Sleep(5*time.Second)). + // base test case, send message with large ttl and check messages are received. + Step("send message only ttl messages", sendMessage(sidecarNameTTLClient, pubsubMessageOnlyTTL, topicTTL1, 100)). + Step("wait", flow.Sleep(5*time.Second)). + // Run the application1 logic above. + Step(app.Run(appID1, fmt.Sprintf(":%d", appPort+1), + application(pubsubMessageOnlyTTL, topicTTL1, fullMessages))). + // Run the Dapr sidecar with the RabbitMQ component. + Step(sidecar.Run(sidecarName1, + embedded.WithComponentsPath("./components/ttl"), + embedded.WithAppProtocol(runtime.HTTPProtocol, appPort+1), + embedded.WithDaprGRPCPort(runtime.DefaultDaprAPIGRPCPort+1), + embedded.WithDaprHTTPPort(runtime.DefaultDaprHTTPPort+1), + embedded.WithProfilePort(runtime.DefaultProfilePort+1), + componentRuntimeOptions(), + )). + Step("verify full messages", func(ctx flow.Context) error { + // Assertion on the data. + fullMessages.Assert(t, 3*time.Minute) + return nil + }). + Step("stop sidecar", sidecar.Stop(sidecarName1)). + Step("stop app", app.Stop(appID1)). + // test case 1, send message with ttl and check messages are expired. + Step("send message only ttl messages", sendMessage(sidecarNameTTLClient, pubsubMessageOnlyTTL, topicTTL1, 10)). + Step("wait", flow.Sleep(10*time.Second)). + Step(app.Run(appID1, fmt.Sprintf(":%d", appPort+1), + application(pubsubMessageOnlyTTL, topicTTL1, MessageOnlyMessages))). + Step(sidecar.Run(sidecarName1, + embedded.WithComponentsPath("./components/ttl"), + embedded.WithAppProtocol(runtime.HTTPProtocol, appPort+1), + embedded.WithDaprGRPCPort(runtime.DefaultDaprAPIGRPCPort+1), + embedded.WithDaprHTTPPort(runtime.DefaultDaprHTTPPort+1), + embedded.WithProfilePort(runtime.DefaultProfilePort+1), + componentRuntimeOptions(), + )). + Step("verify messages only ttl", func(ctx flow.Context) error { + // Assertion on the data. + MessageOnlyMessages.Assert(t, 3*time.Minute) + return nil + }). + // test case 2, send message without ttl to a queue with ttl, check messages are expired. + Step("send message without ttl to queue with ttl", sendMessage(sidecarNameTTLClient, pubsubQueueOnlyTTL, topicTTL2, 0)). + Step("wait", flow.Sleep(10*time.Second)). + // Run the application2 logic above. + Step(app.Run(appID2, fmt.Sprintf(":%d", appPort+2), + application(pubsubQueueOnlyTTL, topicTTL2, QueueOnlyMessages))). + // Run the Dapr sidecar with the RabbitMQ component. + Step(sidecar.Run(sidecarName2, + embedded.WithComponentsPath("./components/ttl"), + embedded.WithAppProtocol(runtime.HTTPProtocol, appPort+2), + embedded.WithDaprGRPCPort(runtime.DefaultDaprAPIGRPCPort+2), + embedded.WithDaprHTTPPort(runtime.DefaultDaprHTTPPort+2), + embedded.WithProfilePort(runtime.DefaultProfilePort+2), + componentRuntimeOptions(), + )). + Step("verify messages only ttl", func(ctx flow.Context) error { + // Assertion on the data. + QueueOnlyMessages.Assert(t, 3*time.Minute) + return nil + }). + Step("send message with ttl 10 to queue with ttl 30", + sendMessage(sidecarNameTTLClient, pubsubOverwriteTTL, topicTTL3, 10)). + Step("wait", flow.Sleep(10*time.Second)). + // test case 3, send message with ttl 10s to a queue with ttl 30s, wait for 10s, check messages are expired. + Step(app.Run(appID3, fmt.Sprintf(":%d", appPort+4), + application(pubsubOverwriteTTL, topicTTL3, OverwriteMessages))). + // Run the Dapr sidecar with the RabbitMQ component. + Step(sidecar.Run(sidecarName3, + embedded.WithComponentsPath("./components/ttl"), + embedded.WithAppProtocol(runtime.HTTPProtocol, appPort+4), + embedded.WithDaprGRPCPort(runtime.DefaultDaprAPIGRPCPort+4), + embedded.WithDaprHTTPPort(runtime.DefaultDaprHTTPPort+4), + embedded.WithProfilePort(runtime.DefaultProfilePort+4), + componentRuntimeOptions(), + )). + Step("verify messages only ttl", func(ctx flow.Context) error { + // Assertion on the data. + OverwriteMessages.Assert(t, 3*time.Minute) + return nil + }). + Run() +} + func componentRuntimeOptions() []runtime.Option { log := logger.NewLogger("dapr.components") From 80ba89988c85428781912d3b3b31f24094e09581 Mon Sep 17 00:00:00 2001 From: Lior Nabat Date: Fri, 11 Nov 2022 21:39:19 +0200 Subject: [PATCH 28/87] Add to conformance file Signed-off-by: Lior Nabat --- .github/workflows/conformance.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/conformance.yml b/.github/workflows/conformance.yml index ca08e9dbf..be728c034 100644 --- a/.github/workflows/conformance.yml +++ b/.github/workflows/conformance.yml @@ -57,6 +57,7 @@ jobs: - bindings.mqtt-vernemq - bindings.postgres - bindings.redis + - bindings.kubemq - bindings.rabbitmq - pubsub.aws.snssqs - pubsub.hazelcast From f928b2235e59bcbe364c6e94026c21843364d902 Mon Sep 17 00:00:00 2001 From: Lior Nabat Date: Fri, 11 Nov 2022 21:47:55 +0200 Subject: [PATCH 29/87] Remove Content-Type Signed-off-by: Lior Nabat --- bindings/kubemq/kubemq.go | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/bindings/kubemq/kubemq.go b/bindings/kubemq/kubemq.go index f5a14f752..45a90c880 100644 --- a/bindings/kubemq/kubemq.go +++ b/bindings/kubemq/kubemq.go @@ -91,9 +91,8 @@ func (k *kubeMQ) Invoke(ctx context.Context, req *bindings.InvokeRequest) (*bind } } return &bindings.InvokeResponse{ - Data: nil, - Metadata: nil, - ContentType: nil, + Data: nil, + Metadata: nil, }, nil } From ac46b110c826c8d83a697f4db7f004e3a431c230 Mon Sep 17 00:00:00 2001 From: Lior Nabat Date: Fri, 11 Nov 2022 22:06:08 +0200 Subject: [PATCH 30/87] re-Arrange for lint Signed-off-by: Lior Nabat --- bindings/kubemq/kubemq_integration_test.go | 12 +++++++----- bindings/kubemq/options.go | 3 ++- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/bindings/kubemq/kubemq_integration_test.go b/bindings/kubemq/kubemq_integration_test.go index 1ca639a94..248f1f976 100644 --- a/bindings/kubemq/kubemq_integration_test.go +++ b/bindings/kubemq/kubemq_integration_test.go @@ -6,13 +6,15 @@ package kubemq import ( "context" "fmt" - "github.com/dapr/components-contrib/bindings" - "github.com/dapr/components-contrib/metadata" - "github.com/dapr/kit/logger" - "github.com/stretchr/testify/require" "os" "testing" "time" + + "github.com/stretchr/testify/require" + + "github.com/dapr/components-contrib/bindings" + "github.com/dapr/components-contrib/metadata" + "github.com/dapr/kit/logger" ) const ( @@ -35,7 +37,7 @@ func getDefaultMetadata(channel string) bindings.Metadata { Name: "kubemq", Properties: map[string]string{ "address": getTestKubeMQHost(), - "channel": string(channel), + "channel": channel, "pollMaxItems": "1", "autoAcknowledged": "true", "pollTimeoutSeconds": "2", diff --git a/bindings/kubemq/options.go b/bindings/kubemq/options.go index 3208d7b62..37cbfaa67 100644 --- a/bindings/kubemq/options.go +++ b/bindings/kubemq/options.go @@ -2,9 +2,10 @@ package kubemq import ( "fmt" - "github.com/dapr/components-contrib/bindings" "strconv" "strings" + + "github.com/dapr/components-contrib/bindings" ) type options struct { From 12ad3b9bde7ca4210ab6f2174ba811ceb03ed22e Mon Sep 17 00:00:00 2001 From: Lior Nabat Date: Fri, 11 Nov 2022 22:47:34 +0200 Subject: [PATCH 31/87] update new line for linter Signed-off-by: Lior Nabat --- bindings/kubemq/kubemq.go | 1 + bindings/kubemq/options.go | 2 ++ 2 files changed, 3 insertions(+) diff --git a/bindings/kubemq/kubemq.go b/bindings/kubemq/kubemq.go index 45a90c880..ca6c589ce 100644 --- a/bindings/kubemq/kubemq.go +++ b/bindings/kubemq/kubemq.go @@ -35,6 +35,7 @@ func NewKubeMQ(logger logger.Logger) Kubemq { ctxCancel: nil, } } + func (k *kubeMQ) Init(metadata bindings.Metadata) error { opts, err := createOptions(metadata) if err != nil { diff --git a/bindings/kubemq/options.go b/bindings/kubemq/options.go index 37cbfaa67..6abe4c9ed 100644 --- a/bindings/kubemq/options.go +++ b/bindings/kubemq/options.go @@ -116,6 +116,7 @@ func parsePolicyDelaySeconds(md map[string]string) int { } return 0 } + func parsePolicyExpirationSeconds(md map[string]string) int { if md == nil { return 0 @@ -132,6 +133,7 @@ func parsePolicyExpirationSeconds(md map[string]string) int { } return 0 } + func parseSetPolicyMaxReceiveCount(md map[string]string) int { if md == nil { return 0 From cf1cee0941e61e195a6c72e6637b8d491d90b893 Mon Sep 17 00:00:00 2001 From: Lior Nabat Date: Fri, 11 Nov 2022 23:11:22 +0200 Subject: [PATCH 32/87] update new line for linter Signed-off-by: Lior Nabat --- .golangci.yml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/.golangci.yml b/.golangci.yml index c10f1e9a3..3d6804940 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -31,7 +31,7 @@ run: # skip-files: # - ".*\\.my\\.go$" # - lib/bad.go - + # output configuration options output: # colored-line-number|line-number|json|tab|checkstyle, default is "colored-line-number" @@ -245,7 +245,6 @@ linters: - nestif - nlreturn - exhaustive - - exhaustruct - noctx - gci - golint @@ -272,8 +271,6 @@ linters: - wastedassign - containedctx - gosimple - - nonamedreturns - - asasalint - rowserrcheck - sqlclosecheck - structcheck From c53ea4a5246614dad3df42894bd1f90bd0ca0adc Mon Sep 17 00:00:00 2001 From: Lior Nabat Date: Fri, 11 Nov 2022 23:14:41 +0200 Subject: [PATCH 33/87] revert golangci.yml Signed-off-by: Lior Nabat --- .golangci.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.golangci.yml b/.golangci.yml index 3d6804940..a5f911638 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -245,6 +245,7 @@ linters: - nestif - nlreturn - exhaustive + - exhaustruct - noctx - gci - golint @@ -271,6 +272,8 @@ linters: - wastedassign - containedctx - gosimple + - nonamedreturns + - asasalint - rowserrcheck - sqlclosecheck - structcheck From 462e2faadc52db426bfb211185800504af756430 Mon Sep 17 00:00:00 2001 From: Bernd Verst <4535280+berndverst@users.noreply.github.com> Date: Fri, 11 Nov 2022 13:19:57 -0800 Subject: [PATCH 34/87] Upgrade linter and fix linter issues Signed-off-by: Bernd Verst <4535280+berndverst@users.noreply.github.com> --- .github/workflows/components-contrib.yml | 2 +- .golangci.yml | 3 +++ bindings/alicloud/dingtalk/webhook/webhook_test.go | 2 +- bindings/gcp/bucket/bucket.go | 2 +- bindings/rethinkdb/statechange/statechange.go | 2 +- pubsub/jetstream/metadata_test.go | 2 +- pubsub/rabbitmq/rabbitmq.go | 2 ++ secretstores/azure/keyvault/keyvault.go | 4 ++-- secretstores/hashicorp/vault/vault.go | 6 +++--- state/oci/objectstorage/objectstorage.go | 5 +++-- state/sqlserver/migration.go | 1 + tests/conformance/utils/utils.go | 4 ++-- 12 files changed, 21 insertions(+), 14 deletions(-) diff --git a/.github/workflows/components-contrib.yml b/.github/workflows/components-contrib.yml index c4185e2bf..9871ff236 100644 --- a/.github/workflows/components-contrib.yml +++ b/.github/workflows/components-contrib.yml @@ -35,7 +35,7 @@ jobs: GOOS: ${{ matrix.target_os }} GOARCH: ${{ matrix.target_arch }} GOPROXY: https://proxy.golang.org - GOLANGCI_LINT_VER: "v1.48.0" + GOLANGCI_LINT_VER: "v1.50.1" strategy: matrix: os: [ubuntu-latest, windows-latest, macOS-latest] diff --git a/.golangci.yml b/.golangci.yml index c10f1e9a3..abe2e9ce0 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -277,3 +277,6 @@ linters: - rowserrcheck - sqlclosecheck - structcheck + - deadcode + - nosnakecase + - varcheck diff --git a/bindings/alicloud/dingtalk/webhook/webhook_test.go b/bindings/alicloud/dingtalk/webhook/webhook_test.go index 895ad2b36..b527171af 100644 --- a/bindings/alicloud/dingtalk/webhook/webhook_test.go +++ b/bindings/alicloud/dingtalk/webhook/webhook_test.go @@ -37,7 +37,7 @@ func TestPublishMsg(t *testing.T) { //nolint:paralleltest w.WriteHeader(http.StatusOK) _, err := w.Write([]byte("{\"errcode\":0}")) require.NoError(t, err) - if r.Method != "POST" { + if r.Method != http.MethodPost { t.Errorf("Expected 'POST' request, got '%s'", r.Method) } if r.URL.EscapedPath() != "/test" { diff --git a/bindings/gcp/bucket/bucket.go b/bindings/gcp/bucket/bucket.go index b1f80fb43..9a83b1e96 100644 --- a/bindings/gcp/bucket/bucket.go +++ b/bindings/gcp/bucket/bucket.go @@ -196,7 +196,7 @@ func (g *GCPStorage) create(ctx context.Context, req *bindings.InvokeRequest) (* func (g *GCPStorage) get(ctx context.Context, req *bindings.InvokeRequest) (*bindings.InvokeResponse, error) { metadata, err := g.metadata.mergeWithRequestMetadata(req) if err != nil { - return nil, fmt.Errorf("gcp binding binding error. error merge metadata : %w", err) + return nil, fmt.Errorf("gcp binding error. error merge metadata : %w", err) } var key string diff --git a/bindings/rethinkdb/statechange/statechange.go b/bindings/rethinkdb/statechange/statechange.go index 9e642cf5c..c6203bfcf 100644 --- a/bindings/rethinkdb/statechange/statechange.go +++ b/bindings/rethinkdb/statechange/statechange.go @@ -28,7 +28,7 @@ import ( "github.com/dapr/kit/logger" ) -// Binding represents RethinkDB change change state input binding which fires handler with +// Binding represents RethinkDB change state input binding which fires handler with // both the previous and current state store content each time there is a change. type Binding struct { logger logger.Logger diff --git a/pubsub/jetstream/metadata_test.go b/pubsub/jetstream/metadata_test.go index 9ee8c8365..94314a2d2 100644 --- a/pubsub/jetstream/metadata_test.go +++ b/pubsub/jetstream/metadata_test.go @@ -126,7 +126,7 @@ func TestParseMetadata(t *testing.T) { expectErr: true, }, { - desc: "Invalid metadata with missing tls client client", + desc: "Invalid metadata with missing tls client", input: pubsub.Metadata{Base: mdata.Base{ Properties: map[string]string{ "natsURL": "nats://localhost:4222", diff --git a/pubsub/rabbitmq/rabbitmq.go b/pubsub/rabbitmq/rabbitmq.go index 821e00c8c..0e4280908 100644 --- a/pubsub/rabbitmq/rabbitmq.go +++ b/pubsub/rabbitmq/rabbitmq.go @@ -67,6 +67,8 @@ type rabbitMQ struct { } // interface used to allow unit testing. +// +//nolint:interfacebloat type rabbitMQChannelBroker interface { PublishWithContext(ctx context.Context, exchange string, key string, mandatory bool, immediate bool, msg amqp.Publishing) error PublishWithDeferredConfirmWithContext(ctx context.Context, exchange string, key string, mandatory bool, immediate bool, msg amqp.Publishing) (*amqp.DeferredConfirmation, error) diff --git a/secretstores/azure/keyvault/keyvault.go b/secretstores/azure/keyvault/keyvault.go index 0af130a17..9a3440007 100644 --- a/secretstores/azure/keyvault/keyvault.go +++ b/secretstores/azure/keyvault/keyvault.go @@ -185,11 +185,11 @@ func (k *keyvaultSecretStore) getVaultURI() string { func (k *keyvaultSecretStore) getMaxResultsFromMetadata(metadata map[string]string) (*int32, error) { if s, ok := metadata["maxresults"]; ok && s != "" { - val, err := strconv.Atoi(s) //nolint:gosec + val, err := strconv.Atoi(s) if err != nil { return nil, err } - converted := int32(val) + converted := int32(val) //nolint:gosec return &converted, nil } diff --git a/secretstores/hashicorp/vault/vault.go b/secretstores/hashicorp/vault/vault.go index 3411a38ca..da029b9fa 100644 --- a/secretstores/hashicorp/vault/vault.go +++ b/secretstores/hashicorp/vault/vault.go @@ -226,11 +226,11 @@ func (v *vaultSecretStore) getSecret(ctx context.Context, secret, version string defer httpresp.Body.Close() - if httpresp.StatusCode != 200 { + if httpresp.StatusCode != http.StatusOK { var b bytes.Buffer io.Copy(&b, httpresp.Body) v.logger.Debugf("getSecret %s couldn't get successful response: %#v, %s", secret, httpresp, b.String()) - if httpresp.StatusCode == 404 { + if httpresp.StatusCode == http.StatusNotFound { // handle not found error return nil, fmt.Errorf("getSecret %s failed %w", secret, ErrNotFound) } @@ -344,7 +344,7 @@ func (v *vaultSecretStore) listKeysUnderPath(ctx context.Context, path string) ( defer httpresp.Body.Close() - if httpresp.StatusCode != 200 { + if httpresp.StatusCode != http.StatusOK { var b bytes.Buffer io.Copy(&b, httpresp.Body) v.logger.Debugf("list keys couldn't get successful response: %#v, %s", httpresp, b.String()) diff --git a/state/oci/objectstorage/objectstorage.go b/state/oci/objectstorage/objectstorage.go index 440a19523..cb722f7ed 100644 --- a/state/oci/objectstorage/objectstorage.go +++ b/state/oci/objectstorage/objectstorage.go @@ -18,6 +18,7 @@ import ( "context" "fmt" "io" + "net/http" "os" "path" "reflect" @@ -405,7 +406,7 @@ func (c *ociObjectStorageClient) ensureBucketExists(ctx context.Context, client // verify if bucket exists. response, err := client.GetBucket(ctx, req) if err != nil { - if response.RawResponse.StatusCode == 404 { + if response.RawResponse.StatusCode == http.StatusNotFound { err = createBucket(ctx, client, namespace, name, compartmentOCID) if err == nil { c.logger.Debugf("Created OCI Object Storage Bucket %s as State Store", name) @@ -445,7 +446,7 @@ func (c *ociObjectStorageClient) getObject(ctx context.Context, objectname strin response, err := c.objectStorageMetadata.OCIObjectStorageClient.GetObject(ctx, request) if err != nil { c.logger.Debugf("Issue in OCI ObjectStorage with retrieving object %s, error: %s", objectname, err) - if response.RawResponse.StatusCode == 404 { + if response.RawResponse.StatusCode == http.StatusNotFound { return nil, nil, nil, nil } return nil, nil, nil, fmt.Errorf("failed to retrieve object : %w", err) diff --git a/state/sqlserver/migration.go b/state/sqlserver/migration.go index 06ab76bc4..a56019906 100644 --- a/state/sqlserver/migration.go +++ b/state/sqlserver/migration.go @@ -277,6 +277,7 @@ func (m *migration) createStoredProcedureIfNotExists(db *sql.DB, name string, es } /* #nosec. */ +//nolint:dupword func (m *migration) ensureUpsertStoredProcedureExists(db *sql.DB, mr migrationResult) error { tsql := fmt.Sprintf(` CREATE PROCEDURE %s ( diff --git a/tests/conformance/utils/utils.go b/tests/conformance/utils/utils.go index 01d5c3244..2628ce2b0 100644 --- a/tests/conformance/utils/utils.go +++ b/tests/conformance/utils/utils.go @@ -104,9 +104,9 @@ func appRouter() *mux.Router { func handleCall(w http.ResponseWriter, r *http.Request) { switch r.Method { - case "POST": + case http.MethodPost: s.handlePost(r) - case "GET": + case http.MethodGet: w.Write(s.handleGet()) default: w.WriteHeader(http.StatusInternalServerError) From 1024190fcc8d96767331c8cf7f771130644e1310 Mon Sep 17 00:00:00 2001 From: Lior Nabat Date: Fri, 11 Nov 2022 23:41:09 +0200 Subject: [PATCH 35/87] update for gofumpt Signed-off-by: Lior Nabat --- bindings/kubemq/kubemq_integration_test.go | 77 ++++++++++++---------- bindings/kubemq/kubemq_test.go | 64 +++++++++--------- 2 files changed, 75 insertions(+), 66 deletions(-) diff --git a/bindings/kubemq/kubemq_integration_test.go b/bindings/kubemq/kubemq_integration_test.go index 248f1f976..d9ead92ee 100644 --- a/bindings/kubemq/kubemq_integration_test.go +++ b/bindings/kubemq/kubemq_integration_test.go @@ -33,16 +33,17 @@ func getTestKubeMQHost() string { } func getDefaultMetadata(channel string) bindings.Metadata { - return bindings.Metadata{Base: metadata.Base{ - Name: "kubemq", - Properties: map[string]string{ - "address": getTestKubeMQHost(), - "channel": channel, - "pollMaxItems": "1", - "autoAcknowledged": "true", - "pollTimeoutSeconds": "2", + return bindings.Metadata{ + Base: metadata.Base{ + Name: "kubemq", + Properties: map[string]string{ + "address": getTestKubeMQHost(), + "channel": channel, + "pollMaxItems": "1", + "autoAcknowledged": "true", + "pollTimeoutSeconds": "2", + }, }, - }, } } @@ -54,47 +55,50 @@ func Test_kubeMQ_Init(t *testing.T) { }{ { name: "init with valid options", - meta: bindings.Metadata{Base: metadata.Base{ - Name: "kubemq", - Properties: map[string]string{ - "address": getTestKubeMQHost(), - "channel": "test", - "pollMaxItems": "1", - "autoAcknowledged": "true", - "pollTimeoutSeconds": "2", + meta: bindings.Metadata{ + Base: metadata.Base{ + Name: "kubemq", + Properties: map[string]string{ + "address": getTestKubeMQHost(), + "channel": "test", + "pollMaxItems": "1", + "autoAcknowledged": "true", + "pollTimeoutSeconds": "2", + }, }, }, - }, wantErr: false, }, { name: "init with invalid options", - meta: bindings.Metadata{Base: metadata.Base{ - Name: "kubemq", - Properties: map[string]string{ - "address": "localhost-bad:50000", - "channel": "test", - "pollMaxItems": "1", - "autoAcknowledged": "true", - "pollTimeoutSeconds": "2", + meta: bindings.Metadata{ + Base: metadata.Base{ + Name: "kubemq", + Properties: map[string]string{ + "address": "localhost-bad:50000", + "channel": "test", + "pollMaxItems": "1", + "autoAcknowledged": "true", + "pollTimeoutSeconds": "2", + }, }, }, - }, wantErr: true, }, { name: "init with invalid parsing options", - meta: bindings.Metadata{Base: metadata.Base{ - Name: "kubemq", - Properties: map[string]string{ - "address": "bad", - "channel": "test", - "pollMaxItems": "1", - "autoAcknowledged": "true", - "pollTimeoutSeconds": "2", + meta: bindings.Metadata{ + Base: metadata.Base{ + Name: "kubemq", + Properties: map[string]string{ + "address": "bad", + "channel": "test", + "pollMaxItems": "1", + "autoAcknowledged": "true", + "pollTimeoutSeconds": "2", + }, }, }, - }, wantErr: true, }, } @@ -136,6 +140,7 @@ func Test_kubeMQ_Invoke_Read_Single_Message(t *testing.T) { require.Equal(t, invokeRequest.Data, data) } } + func Test_kubeMQ_Invoke_Read_Single_MessageWithHandlerError(t *testing.T) { ctx, cancel := context.WithTimeout(context.Background(), time.Second*10) defer cancel() diff --git a/bindings/kubemq/kubemq_test.go b/bindings/kubemq/kubemq_test.go index d5bc2e076..faa835d95 100644 --- a/bindings/kubemq/kubemq_test.go +++ b/bindings/kubemq/kubemq_test.go @@ -18,18 +18,19 @@ func Test_createOptions(t *testing.T) { }{ { name: "create valid opts", - meta: bindings.Metadata{Base: metadata.Base{ - Name: "kubemq", - Properties: map[string]string{ - "address": "localhost:50000", - "channel": "test", - "authToken": "authToken", - "pollMaxItems": "10", - "autoAcknowledged": "true", - "pollTimeoutSeconds": "10", + meta: bindings.Metadata{ + Base: metadata.Base{ + Name: "kubemq", + Properties: map[string]string{ + "address": "localhost:50000", + "channel": "test", + "authToken": "authToken", + "pollMaxItems": "10", + "autoAcknowledged": "true", + "pollTimeoutSeconds": "10", + }, }, }, - }, want: &options{ host: "localhost", port: 50000, @@ -43,40 +44,43 @@ func Test_createOptions(t *testing.T) { }, { name: "create invalid opts with bad host", - meta: bindings.Metadata{Base: metadata.Base{ - Name: "kubemq", - Properties: map[string]string{ - "address": ":50000", - "clientId": "clientId", + meta: bindings.Metadata{ + Base: metadata.Base{ + Name: "kubemq", + Properties: map[string]string{ + "address": ":50000", + "clientId": "clientId", + }, }, }, - }, want: nil, wantErr: true, }, { name: "create invalid opts with bad port", - meta: bindings.Metadata{Base: metadata.Base{ - Name: "kubemq", - Properties: map[string]string{ - "address": "localhost:badport", - "clientId": "clientId", + meta: bindings.Metadata{ + Base: metadata.Base{ + Name: "kubemq", + Properties: map[string]string{ + "address": "localhost:badport", + "clientId": "clientId", + }, }, }, - }, want: nil, wantErr: true, }, { name: "create invalid opts with empty address", - meta: bindings.Metadata{Base: metadata.Base{ - Name: "kubemq", - Properties: map[string]string{ - "address": "", - "clientId": "clientId", + meta: bindings.Metadata{ + Base: metadata.Base{ + Name: "kubemq", + Properties: map[string]string{ + "address": "", + "clientId": "clientId", + }, }, }, - }, want: nil, wantErr: true, }, @@ -174,7 +178,6 @@ func Test_createOptions(t *testing.T) { got, err := createOptions(tt.meta) if tt.wantErr { assert.Error(t, err) - } else { assert.NoError(t, err) assert.Equal(t, tt.want, got) @@ -251,7 +254,8 @@ func Test_parsePolicyExpirationSeconds(t *testing.T) { args args want int }{ - {name: "parse policy expiration seconds - nil", + { + name: "parse policy expiration seconds - nil", args: args{ md: nil, }, From 9d39e9ee87a8e145267383eab8b81518f8bd3eb7 Mon Sep 17 00:00:00 2001 From: Ryan Lettieri Date: Sat, 12 Nov 2022 11:04:32 -0700 Subject: [PATCH 36/87] Adding in optional parameter for a namespace into temporal Signed-off-by: Ryan Lettieri --- tests/conformance/workflows/workflows.go | 3 ++- workflows/metadata.go | 6 ++++-- workflows/temporal/temporal.go | 20 +++++--------------- 3 files changed, 11 insertions(+), 18 deletions(-) diff --git a/tests/conformance/workflows/workflows.go b/tests/conformance/workflows/workflows.go index 5232c7a00..1a7fba0f2 100644 --- a/tests/conformance/workflows/workflows.go +++ b/tests/conformance/workflows/workflows.go @@ -22,6 +22,7 @@ import ( "github.com/dapr/kit/logger" + "github.com/dapr/components-contrib/metadata" "github.com/dapr/components-contrib/tests/conformance/utils" "github.com/dapr/components-contrib/workflows" ) @@ -50,7 +51,7 @@ func ConformanceTests(t *testing.T, props map[string]string, workflowItem workfl // Test vars t.Run("init", func(t *testing.T) { err := workflowItem.Init(workflows.Metadata{ - Properties: props, + Base: metadata.Base{Properties: props}, }) assert.NoError(t, err) }) diff --git a/workflows/metadata.go b/workflows/metadata.go index 659de3767..c1f6cc02a 100644 --- a/workflows/metadata.go +++ b/workflows/metadata.go @@ -13,7 +13,9 @@ limitations under the License. package workflows -// Metadata represents a set of binding specific properties. +import "github.com/dapr/components-contrib/metadata" + +// Metadata represents a set of workflow specific properties. type Metadata struct { - Properties map[string]string `json:"properties"` + metadata.Base `json:",inline"` } diff --git a/workflows/temporal/temporal.go b/workflows/temporal/temporal.go index a90bc35fc..842f4fe63 100644 --- a/workflows/temporal/temporal.go +++ b/workflows/temporal/temporal.go @@ -15,7 +15,6 @@ package temporal import ( "context" - "encoding/json" "errors" "fmt" "time" @@ -23,6 +22,7 @@ import ( "go.temporal.io/api/enums/v1" "go.temporal.io/sdk/client" + "github.com/dapr/components-contrib/metadata" "github.com/dapr/components-contrib/workflows" "github.com/dapr/kit/logger" ) @@ -128,20 +128,10 @@ func (c *TemporalWF) Close() { c.client.Close() } -func (c *TemporalWF) parseMetadata(metadata workflows.Metadata) (*temporalMetadata, error) { - connInfo := metadata.Properties - b, err := json.Marshal(connInfo) - if err != nil { - return nil, err - } - - var creds temporalMetadata - err = json.Unmarshal(b, &creds) - if err != nil { - return nil, err - } - - return &creds, nil +func (c *TemporalWF) parseMetadata(meta workflows.Metadata) (*temporalMetadata, error) { + var m temporalMetadata + err := metadata.DecodeMetadata(meta.Properties, &m) + return &m, err } func lookupStatus(status enums.WorkflowExecutionStatus) string { From a64a45d208feae10e1a2ac7a40f67ab91eb49a76 Mon Sep 17 00:00:00 2001 From: Pravin Pushkar Date: Tue, 15 Nov 2022 00:00:43 +0530 Subject: [PATCH 37/87] Address review comments Signed-off-by: Pravin Pushkar --- configuration/azure/appconfig/appconfig.go | 41 +++++++++++++--------- go.sum | 2 -- 2 files changed, 25 insertions(+), 18 deletions(-) diff --git a/configuration/azure/appconfig/appconfig.go b/configuration/azure/appconfig/appconfig.go index 262657753..94c72d3b6 100644 --- a/configuration/azure/appconfig/appconfig.go +++ b/configuration/azure/appconfig/appconfig.go @@ -15,6 +15,7 @@ package appconfig import ( "context" + "errors" "fmt" "strconv" "sync" @@ -189,24 +190,19 @@ func parseMetadata(meta configuration.Metadata) (metadata, error) { } func (r *ConfigurationStore) Get(ctx context.Context, req *configuration.GetRequest) (*configuration.GetResponse, error) { - timeoutContext, cancel := context.WithTimeout(ctx, r.metadata.requestTimeout) - defer cancel() - keys := req.Keys var items map[string]*configuration.Item if len(keys) == 0 { var err error - if items, err = r.getAll(timeoutContext, req); err != nil { + if items, err = r.getAll(ctx, req); err != nil { return &configuration.GetResponse{}, err } } else { items = make(map[string]*configuration.Item, len(keys)) for _, key := range keys { - // TODO: here contxt.TODO() is used because the SDK panics when a cancelled context is passed in GetSetting - // Issue - https://github.com/Azure/azure-sdk-for-go/issues/19223 . Needs to be modified to use timeoutContext once the SDK is fixed - resp, err := r.client.GetSetting( - context.TODO(), + resp, err := r.getSettings( + ctx, key, &azappconfig.GetSettingOptions{ Label: r.getLabelFromMetadata(req.Metadata), @@ -233,6 +229,9 @@ func (r *ConfigurationStore) Get(ctx context.Context, req *configuration.GetRequ } func (r *ConfigurationStore) getAll(ctx context.Context, req *configuration.GetRequest) (map[string]*configuration.Item, error) { + timeoutContext, cancel := context.WithTimeout(ctx, r.metadata.requestTimeout) + defer cancel() + items := make(map[string]*configuration.Item, 0) labelFilter := r.getLabelFromMetadata(req.Metadata) @@ -248,10 +247,8 @@ func (r *ConfigurationStore) getAll(ctx context.Context, req *configuration.GetR }, nil) - // TODO: here contxt.TODO() is used because the SDK panics when a cancelled context is passed in NextPage - // Issue - https://github.com/Azure/azure-sdk-for-go/issues/19223 . It needs to be modified to use ctx once the SDK is fixed for allSettingsPgr.More() { - if revResp, err := allSettingsPgr.NextPage(context.TODO()); err == nil { + if revResp, err := allSettingsPgr.NextPage(timeoutContext); err == nil { for _, setting := range revResp.Settings { item := &configuration.Item{ Metadata: map[string]string{}, @@ -297,9 +294,9 @@ func (r *ConfigurationStore) Subscribe(ctx context.Context, req *configuration.S func (r *ConfigurationStore) doSubscribe(ctx context.Context, req *configuration.SubscribeRequest, handler configuration.UpdateHandler, sentinelKey string, id string) { var etagVal *azcore.ETag for { - // get sentinel key changes - resp, err := r.client.GetSetting( - context.TODO(), + // get sentinel key changes. + resp, err := r.getSettings( + ctx, sentinelKey, &azappconfig.GetSettingOptions{ Label: r.getLabelFromMetadata(req.Metadata), @@ -307,15 +304,20 @@ func (r *ConfigurationStore) doSubscribe(ctx context.Context, req *configuration }, ) if err != nil { - r.logger.Debugf("azure appconfig error: fail to get sentinel key changes or sentinel key's value is unchanged: %s", err) + if !errors.Is(err, context.Canceled) { + r.logger.Debugf("azure appconfig error: fail to get sentinel key or sentinel's key %s value is unchanged: %s", sentinelKey, err) + } } else { + // if sentinel key has changed then update the Etag value. etagVal = resp.ETag items, err := r.Get(ctx, &configuration.GetRequest{ Keys: req.Keys, Metadata: req.Metadata, }) if err != nil { - r.logger.Errorf("azure appconfig error: fail to get configuration key changes: %s", err) + if !errors.Is(err, context.Canceled) { + r.logger.Errorf("azure appconfig error: fail to get configuration key changes: %s", err) + } } else { r.handleSubscribedChange(ctx, handler, items, id) } @@ -328,6 +330,13 @@ func (r *ConfigurationStore) doSubscribe(ctx context.Context, req *configuration } } +func (r *ConfigurationStore) getSettings(ctx context.Context, key string, getSettingsOptions *azappconfig.GetSettingOptions) (azappconfig.GetSettingResponse, error) { + timeoutContext, cancel := context.WithTimeout(ctx, r.metadata.requestTimeout) + defer cancel() + resp, err := r.client.GetSetting(timeoutContext, key, getSettingsOptions) + return resp, err +} + func (r *ConfigurationStore) handleSubscribedChange(ctx context.Context, handler configuration.UpdateHandler, items *configuration.GetResponse, id string) { e := &configuration.UpdateEvent{ Items: items.Items, diff --git a/go.sum b/go.sum index b5ce71902..6f2d97959 100644 --- a/go.sum +++ b/go.sum @@ -103,8 +103,6 @@ github.com/Azure/azure-sdk-for-go/sdk/azcore v1.1.4/go.mod h1:uGG2W01BaETf0Ozp+Q github.com/Azure/azure-sdk-for-go/sdk/azidentity v0.11.0/go.mod h1:HcM1YX14R7CJcghJGOYCgdezslRSVzqwLf/q+4Y2r/0= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.1.0 h1:QkAcEIAKbNL4KoFr4SathZPhDhF4mVwpBMFlYjyAqy8= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.1.0/go.mod h1:bhXu1AjYL+wutSL/kpSq6s7733q2Rb0yuot9Zgfqa/0= -github.com/Azure/azure-sdk-for-go/sdk/data/azappconfig v0.4.3 h1:QzjiMJn/pBxOq1xA3F6ODUvO1agmt7+mI+DZEx6dPtc= -github.com/Azure/azure-sdk-for-go/sdk/data/azappconfig v0.4.3/go.mod h1:p74+tP95m8830ypJk53L93+BEsjTKY4SKQ75J2NmS5U= github.com/Azure/azure-sdk-for-go/sdk/data/azappconfig v0.5.0 h1:OrKZybbyagpgJiREiIVzH5mV/z9oS4rXqdX7i31DSF0= github.com/Azure/azure-sdk-for-go/sdk/data/azappconfig v0.5.0/go.mod h1:p74+tP95m8830ypJk53L93+BEsjTKY4SKQ75J2NmS5U= github.com/Azure/azure-sdk-for-go/sdk/data/azcosmos v0.3.2 h1:yJegJqjhrMJ3Oe5s43jOTGL2AsE7pJyx+7Yqls/65tw= From deb647c241f365e9f6a68df21352289423b78c6e Mon Sep 17 00:00:00 2001 From: Ryan Lettieri Date: Mon, 14 Nov 2022 12:39:35 -0700 Subject: [PATCH 38/87] Updating workflows request struct Signed-off-by: Ryan Lettieri --- tests/conformance/workflows/workflows.go | 2 +- workflows/requests.go | 2 +- workflows/temporal/temporal.go | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/conformance/workflows/workflows.go b/tests/conformance/workflows/workflows.go index 1a7fba0f2..2c876c717 100644 --- a/tests/conformance/workflows/workflows.go +++ b/tests/conformance/workflows/workflows.go @@ -61,7 +61,7 @@ func ConformanceTests(t *testing.T, props map[string]string, workflowItem workfl t.Run("start", func(t *testing.T) { testLogger.Info("Start test running...") req := &workflows.StartRequest{ - Parameters: 10, // Time that the activity within the workflow runs for + Input: 10, // Time that the activity within the workflow runs for WorkflowName: "TestWorkflow", } req.WorkflowReference.InstanceID = "TestID" diff --git a/workflows/requests.go b/workflows/requests.go index f85d73463..590cb285b 100644 --- a/workflows/requests.go +++ b/workflows/requests.go @@ -9,5 +9,5 @@ type StartRequest struct { Options map[string]string `json:"workflow_options"` WorkflowReference WorkflowReference `json:"workflow_reference"` WorkflowName string `json:"function_name"` - Parameters interface{} `json:"parameters"` + Input interface{} `json:"input"` } diff --git a/workflows/temporal/temporal.go b/workflows/temporal/temporal.go index 842f4fe63..81fb7dc87 100644 --- a/workflows/temporal/temporal.go +++ b/workflows/temporal/temporal.go @@ -87,7 +87,7 @@ func (c *TemporalWF) Start(ctx context.Context, req *workflows.StartRequest) (*w taskQ := req.Options["task_queue"] opt := client.StartWorkflowOptions{ID: req.WorkflowReference.InstanceID, TaskQueue: taskQ} - run, err := c.client.ExecuteWorkflow(ctx, opt, req.WorkflowName, req.Parameters) + run, err := c.client.ExecuteWorkflow(ctx, opt, req.WorkflowName, req.Input) if err != nil { return &workflows.WorkflowReference{}, fmt.Errorf("error executing workflow: %w", err) } From 5c9a5792bed42c7cb026d9dcdf879bad8c926bf2 Mon Sep 17 00:00:00 2001 From: Bernd Verst <4535280+berndverst@users.noreply.github.com> Date: Mon, 14 Nov 2022 11:47:56 -0800 Subject: [PATCH 39/87] ASQ Binding: Make visibilityTimeout configurable Signed-off-by: Bernd Verst <4535280+berndverst@users.noreply.github.com> --- bindings/azure/storagequeues/storagequeues.go | 30 +++++++++------ .../azure/storagequeues/storagequeues_test.go | 37 +++++++++++++------ 2 files changed, 43 insertions(+), 24 deletions(-) diff --git a/bindings/azure/storagequeues/storagequeues.go b/bindings/azure/storagequeues/storagequeues.go index c48956331..fc156a8f3 100644 --- a/bindings/azure/storagequeues/storagequeues.go +++ b/bindings/azure/storagequeues/storagequeues.go @@ -27,6 +27,7 @@ import ( azauth "github.com/dapr/components-contrib/internal/authentication/azure" contribMetadata "github.com/dapr/components-contrib/metadata" "github.com/dapr/kit/logger" + "github.com/dapr/kit/ptr" ) const ( @@ -46,10 +47,11 @@ type QueueHelper interface { // AzureQueueHelper concrete impl of queue helper. type AzureQueueHelper struct { - queueURL azqueue.QueueURL - logger logger.Logger - decodeBase64 bool - encodeBase64 bool + queueURL azqueue.QueueURL + logger logger.Logger + decodeBase64 bool + encodeBase64 bool + visibilityTimeout time.Duration } // Init sets up this helper. @@ -74,6 +76,7 @@ func (d *AzureQueueHelper) Init(metadata bindings.Metadata) (*storageQueuesMetad d.decodeBase64 = m.DecodeBase64 d.encodeBase64 = m.EncodeBase64 + d.visibilityTimeout = *m.VisibilityTimeout if m.QueueEndpoint != "" { URL, parseErr := url.Parse(fmt.Sprintf("%s/%s/%s", m.QueueEndpoint, m.AccountName, m.QueueName)) @@ -119,7 +122,7 @@ func (d *AzureQueueHelper) Write(ctx context.Context, data []byte, ttl *time.Dur func (d *AzureQueueHelper) Read(ctx context.Context, consumer *consumer) error { messagesURL := d.queueURL.NewMessagesURL() - res, err := messagesURL.Dequeue(ctx, 1, time.Second*30) + res, err := messagesURL.Dequeue(ctx, 1, d.visibilityTimeout) if err != nil { return err } @@ -175,12 +178,13 @@ type AzureStorageQueues struct { } type storageQueuesMetadata struct { - QueueName string - QueueEndpoint string - AccountName string - DecodeBase64 bool - EncodeBase64 bool - ttl *time.Duration + QueueName string + QueueEndpoint string + AccountName string + DecodeBase64 bool + EncodeBase64 bool + ttl *time.Duration + VisibilityTimeout *time.Duration } // NewAzureStorageQueues returns a new AzureStorageQueues instance. @@ -199,7 +203,9 @@ func (a *AzureStorageQueues) Init(metadata bindings.Metadata) (err error) { } func parseMetadata(meta bindings.Metadata) (*storageQueuesMetadata, error) { - var m storageQueuesMetadata + var m storageQueuesMetadata = storageQueuesMetadata{ + VisibilityTimeout: ptr.Of(time.Second * 30), + } // AccountKey is parsed in azauth contribMetadata.DecodeMetadata(meta.Properties, &m) diff --git a/bindings/azure/storagequeues/storagequeues_test.go b/bindings/azure/storagequeues/storagequeues_test.go index 77c0903cb..678ba388d 100644 --- a/bindings/azure/storagequeues/storagequeues_test.go +++ b/bindings/azure/storagequeues/storagequeues_test.go @@ -25,6 +25,7 @@ import ( "github.com/dapr/components-contrib/bindings" "github.com/dapr/components-contrib/metadata" "github.com/dapr/kit/logger" + "github.com/dapr/kit/ptr" ) type MockHelper struct { @@ -294,38 +295,49 @@ func TestParseMetadata(t *testing.T) { properties map[string]string // Account key is parsed in azauth // expectedAccountKey string - expectedQueueName string - expectedQueueEndpointURL string - expectedTTL *time.Duration + expectedQueueName string + expectedQueueEndpointURL string + expectedTTL *time.Duration + expectedVisibilityTimeout *time.Duration }{ { name: "Account and key", properties: map[string]string{"storageAccessKey": "myKey", "queue": "queue1", "storageAccount": "devstoreaccount1"}, // expectedAccountKey: "myKey", - expectedQueueName: "queue1", - expectedQueueEndpointURL: "", + expectedQueueName: "queue1", + expectedQueueEndpointURL: "", + expectedVisibilityTimeout: ptr.Of(30 * time.Second), }, { name: "Accout, key, and endpoint", properties: map[string]string{"accountKey": "myKey", "queueName": "queue1", "storageAccount": "someAccount", "queueEndpointUrl": "https://foo.example.com:10001"}, // expectedAccountKey: "myKey", - expectedQueueName: "queue1", - expectedQueueEndpointURL: "https://foo.example.com:10001", + expectedQueueName: "queue1", + expectedQueueEndpointURL: "https://foo.example.com:10001", + expectedVisibilityTimeout: ptr.Of(30 * time.Second), }, { name: "Empty TTL", properties: map[string]string{"storageAccessKey": "myKey", "queue": "queue1", "storageAccount": "devstoreaccount1", metadata.TTLMetadataKey: ""}, // expectedAccountKey: "myKey", - expectedQueueName: "queue1", - expectedQueueEndpointURL: "", + expectedQueueName: "queue1", + expectedQueueEndpointURL: "", + expectedVisibilityTimeout: ptr.Of(30 * time.Second), }, { name: "With TTL", properties: map[string]string{"accessKey": "myKey", "storageAccountQueue": "queue1", "storageAccount": "devstoreaccount1", metadata.TTLMetadataKey: "1"}, // expectedAccountKey: "myKey", - expectedQueueName: "queue1", - expectedTTL: &oneSecondDuration, - expectedQueueEndpointURL: "", + expectedQueueName: "queue1", + expectedTTL: &oneSecondDuration, + expectedQueueEndpointURL: "", + expectedVisibilityTimeout: ptr.Of(30 * time.Second), + }, + { + name: "With visibility timeout", + properties: map[string]string{"accessKey": "myKey", "storageAccountQueue": "queue1", "storageAccount": "devstoreaccount1", "visibilityTimeout": "5s"}, + expectedQueueName: "queue1", + expectedVisibilityTimeout: ptr.Of(5 * time.Second), }, } @@ -341,6 +353,7 @@ func TestParseMetadata(t *testing.T) { assert.Equal(t, tt.expectedQueueName, meta.QueueName) assert.Equal(t, tt.expectedTTL, meta.ttl) assert.Equal(t, tt.expectedQueueEndpointURL, meta.QueueEndpoint) + assert.Equal(t, tt.expectedVisibilityTimeout, meta.VisibilityTimeout) }) } } From d916808824a15b53926cfed9abe6a9fcb80ca74a Mon Sep 17 00:00:00 2001 From: Bernd Verst <4535280+berndverst@users.noreply.github.com> Date: Mon, 14 Nov 2022 18:14:19 -0800 Subject: [PATCH 40/87] address linter issue Signed-off-by: Bernd Verst <4535280+berndverst@users.noreply.github.com> --- bindings/azure/storagequeues/storagequeues.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bindings/azure/storagequeues/storagequeues.go b/bindings/azure/storagequeues/storagequeues.go index fc156a8f3..cc0f4f195 100644 --- a/bindings/azure/storagequeues/storagequeues.go +++ b/bindings/azure/storagequeues/storagequeues.go @@ -203,7 +203,7 @@ func (a *AzureStorageQueues) Init(metadata bindings.Metadata) (err error) { } func parseMetadata(meta bindings.Metadata) (*storageQueuesMetadata, error) { - var m storageQueuesMetadata = storageQueuesMetadata{ + var m storageQueuesMetadata = { VisibilityTimeout: ptr.Of(time.Second * 30), } // AccountKey is parsed in azauth From 2fdb1f3e9024e859338dd8b1fc9bdb09eab6cb83 Mon Sep 17 00:00:00 2001 From: Pravin Pushkar Date: Tue, 15 Nov 2022 17:23:54 +0530 Subject: [PATCH 41/87] address review comments Signed-off-by: Pravin Pushkar --- configuration/azure/appconfig/appconfig.go | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/configuration/azure/appconfig/appconfig.go b/configuration/azure/appconfig/appconfig.go index 94c72d3b6..d93ee96d4 100644 --- a/configuration/azure/appconfig/appconfig.go +++ b/configuration/azure/appconfig/appconfig.go @@ -15,7 +15,6 @@ package appconfig import ( "context" - "errors" "fmt" "strconv" "sync" @@ -229,9 +228,6 @@ func (r *ConfigurationStore) Get(ctx context.Context, req *configuration.GetRequ } func (r *ConfigurationStore) getAll(ctx context.Context, req *configuration.GetRequest) (map[string]*configuration.Item, error) { - timeoutContext, cancel := context.WithTimeout(ctx, r.metadata.requestTimeout) - defer cancel() - items := make(map[string]*configuration.Item, 0) labelFilter := r.getLabelFromMetadata(req.Metadata) @@ -248,6 +244,8 @@ func (r *ConfigurationStore) getAll(ctx context.Context, req *configuration.GetR nil) for allSettingsPgr.More() { + timeoutContext, cancel := context.WithTimeout(ctx, r.metadata.requestTimeout) + defer cancel() if revResp, err := allSettingsPgr.NextPage(timeoutContext); err == nil { for _, setting := range revResp.Settings { item := &configuration.Item{ @@ -304,9 +302,7 @@ func (r *ConfigurationStore) doSubscribe(ctx context.Context, req *configuration }, ) if err != nil { - if !errors.Is(err, context.Canceled) { - r.logger.Debugf("azure appconfig error: fail to get sentinel key or sentinel's key %s value is unchanged: %s", sentinelKey, err) - } + r.logger.Debugf("azure appconfig error: fail to get sentinel key or sentinel's key %s value is unchanged: %s", sentinelKey, err) } else { // if sentinel key has changed then update the Etag value. etagVal = resp.ETag @@ -315,9 +311,7 @@ func (r *ConfigurationStore) doSubscribe(ctx context.Context, req *configuration Metadata: req.Metadata, }) if err != nil { - if !errors.Is(err, context.Canceled) { - r.logger.Errorf("azure appconfig error: fail to get configuration key changes: %s", err) - } + r.logger.Errorf("azure appconfig error: fail to get configuration key changes: %s", err) } else { r.handleSubscribedChange(ctx, handler, items, id) } From 2698482f3452433496dff90b78ead7c2e333259b Mon Sep 17 00:00:00 2001 From: Bernd Verst <4535280+berndverst@users.noreply.github.com> Date: Tue, 15 Nov 2022 14:55:20 -0800 Subject: [PATCH 42/87] Add user agent back to Cosmos DB state store Signed-off-by: Bernd Verst <4535280+berndverst@users.noreply.github.com> --- state/azure/cosmosdb/cosmosdb.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/state/azure/cosmosdb/cosmosdb.go b/state/azure/cosmosdb/cosmosdb.go index 045a8383e..ba8a775e2 100644 --- a/state/azure/cosmosdb/cosmosdb.go +++ b/state/azure/cosmosdb/cosmosdb.go @@ -143,6 +143,9 @@ func (c *StateStore) Init(meta state.Metadata) error { opts := azcosmos.ClientOptions{ ClientOptions: policy.ClientOptions{ PerCallPolicies: []policy.Policy{queryPolicy}, + Telemetry: policy.TelemetryOptions{ + ApplicationID: "dapr-" + logger.DaprVersion, + }, }, } From 14d89afeef4163528680cae14dee77e1cc88f0fd Mon Sep 17 00:00:00 2001 From: Bernd Verst <4535280+berndverst@users.noreply.github.com> Date: Tue, 15 Nov 2022 14:59:04 -0800 Subject: [PATCH 43/87] Add user agent back to Cosmos DB Binding Signed-off-by: Bernd Verst <4535280+berndverst@users.noreply.github.com> --- bindings/azure/cosmosdb/cosmosdb.go | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/bindings/azure/cosmosdb/cosmosdb.go b/bindings/azure/cosmosdb/cosmosdb.go index d4efb802b..4a3cbaf8b 100644 --- a/bindings/azure/cosmosdb/cosmosdb.go +++ b/bindings/azure/cosmosdb/cosmosdb.go @@ -20,6 +20,7 @@ import ( "strings" "time" + "github.com/Azure/azure-sdk-for-go/sdk/azcore/policy" "github.com/Azure/azure-sdk-for-go/sdk/data/azcosmos" "github.com/dapr/components-contrib/bindings" @@ -60,6 +61,14 @@ func (c *CosmosDB) Init(metadata bindings.Metadata) error { c.partitionKey = m.PartitionKey + opts := azcosmos.ClientOptions{ + ClientOptions: policy.ClientOptions{ + Telemetry: policy.TelemetryOptions{ + ApplicationID: "dapr-" + logger.DaprVersion, + }, + }, + } + // Create the client; first, try authenticating with a master key, if present var client *azcosmos.Client if m.MasterKey != "" { @@ -67,7 +76,7 @@ func (c *CosmosDB) Init(metadata bindings.Metadata) error { if keyErr != nil { return keyErr } - client, err = azcosmos.NewClientWithKey(m.URL, cred, nil) + client, err = azcosmos.NewClientWithKey(m.URL, cred, &opts) if err != nil { return err } @@ -81,7 +90,7 @@ func (c *CosmosDB) Init(metadata bindings.Metadata) error { if errToken != nil { return errToken } - client, err = azcosmos.NewClient(m.URL, token, nil) + client, err = azcosmos.NewClient(m.URL, token, &opts) if err != nil { return err } From 483e8b96bc4d7c8ec21e24c6325042d76e936a9c Mon Sep 17 00:00:00 2001 From: Bernd Verst <4535280+berndverst@users.noreply.github.com> Date: Tue, 15 Nov 2022 16:49:56 -0800 Subject: [PATCH 44/87] Add user agent to table storage state store Signed-off-by: Bernd Verst <4535280+berndverst@users.noreply.github.com> --- state/azure/tablestorage/tablestorage.go | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/state/azure/tablestorage/tablestorage.go b/state/azure/tablestorage/tablestorage.go index c91f4a181..9ac1d3cb3 100644 --- a/state/azure/tablestorage/tablestorage.go +++ b/state/azure/tablestorage/tablestorage.go @@ -45,6 +45,7 @@ import ( "time" "github.com/Azure/azure-sdk-for-go/sdk/azcore" + "github.com/Azure/azure-sdk-for-go/sdk/azcore/policy" "github.com/Azure/azure-sdk-for-go/sdk/data/aztables" jsoniter "github.com/json-iterator/go" "github.com/pkg/errors" @@ -102,6 +103,14 @@ func (r *StateStore) Init(metadata state.Metadata) error { } } + opts := aztables.ClientOptions{ + ClientOptions: policy.ClientOptions{ + Telemetry: policy.TelemetryOptions{ + ApplicationID: "dapr-" + logger.DaprVersion, + }, + }, + } + if meta.AccountKey != "" { // use shared key authentication cred, innerErr := aztables.NewSharedKeyCredential(meta.AccountName, meta.AccountKey) @@ -109,7 +118,7 @@ func (r *StateStore) Init(metadata state.Metadata) error { return innerErr } - client, innerErr = aztables.NewServiceClientWithSharedKey(serviceURL, cred, nil) + client, innerErr = aztables.NewServiceClientWithSharedKey(serviceURL, cred, &opts) if innerErr != nil { return innerErr } @@ -130,7 +139,7 @@ func (r *StateStore) Init(metadata state.Metadata) error { if innerErr != nil { return innerErr } - client, innerErr = aztables.NewServiceClient(serviceURL, token, nil) + client, innerErr = aztables.NewServiceClient(serviceURL, token, &opts) if err != nil { return innerErr } From d7dd4799d06d7a4bfc599908bf1ef8f0e1881995 Mon Sep 17 00:00:00 2001 From: Bernd Verst <4535280+berndverst@users.noreply.github.com> Date: Wed, 16 Nov 2022 15:28:10 -0800 Subject: [PATCH 45/87] ASQ Binding: Cert Test: Add queue visibilityTimeout test Signed-off-by: Bernd Verst <4535280+berndverst@users.noreply.github.com> --- .../azure_queue_storage.yaml | 23 ++++ .../visibilityTimeout/localsecrets.yaml | 9 ++ .../azure/storagequeues/storagequeue_test.go | 121 +++++++++++++++--- tests/certification/flow/watcher/watcher.go | 7 +- 4 files changed, 138 insertions(+), 22 deletions(-) create mode 100644 tests/certification/bindings/azure/storagequeues/components/visibilityTimeout/azure_queue_storage.yaml create mode 100644 tests/certification/bindings/azure/storagequeues/components/visibilityTimeout/localsecrets.yaml diff --git a/tests/certification/bindings/azure/storagequeues/components/visibilityTimeout/azure_queue_storage.yaml b/tests/certification/bindings/azure/storagequeues/components/visibilityTimeout/azure_queue_storage.yaml new file mode 100644 index 000000000..0209c247b --- /dev/null +++ b/tests/certification/bindings/azure/storagequeues/components/visibilityTimeout/azure_queue_storage.yaml @@ -0,0 +1,23 @@ +apiVersion: dapr.io/v1alpha1 +kind: Component +metadata: + name: visibilityBinding + namespace: default +spec: + type: bindings.azure.storagequeues + version: v1 + metadata: + - name: storageAccount + secretKeyRef: + name: AzureBlobStorageAccount + key: AzureBlobStorageAccount + - name: storageAccessKey + secretKeyRef: + name: AzureBlobStorageAccessKey + key: AzureBlobStorageAccessKey + - name: queue + value: "visibility" + - name: visibilityTimeout + value: "20s" +auth: + secretStore: envvar-secret-store diff --git a/tests/certification/bindings/azure/storagequeues/components/visibilityTimeout/localsecrets.yaml b/tests/certification/bindings/azure/storagequeues/components/visibilityTimeout/localsecrets.yaml new file mode 100644 index 000000000..94bb7a264 --- /dev/null +++ b/tests/certification/bindings/azure/storagequeues/components/visibilityTimeout/localsecrets.yaml @@ -0,0 +1,9 @@ +apiVersion: dapr.io/v1alpha1 +kind: Component +metadata: + name: envvar-secret-store + namespace: default +spec: + type: secretstores.local.env + version: v1 + metadata: diff --git a/tests/certification/bindings/azure/storagequeues/storagequeue_test.go b/tests/certification/bindings/azure/storagequeues/storagequeue_test.go index b20b75290..12516b2ec 100644 --- a/tests/certification/bindings/azure/storagequeues/storagequeue_test.go +++ b/tests/certification/bindings/azure/storagequeues/storagequeue_test.go @@ -17,6 +17,7 @@ package storagequeue_test import ( "context" "fmt" + "strings" "testing" "time" @@ -26,17 +27,6 @@ import ( "github.com/dapr/components-contrib/bindings" binding_asq "github.com/dapr/components-contrib/bindings/azure/storagequeues" secretstore_env "github.com/dapr/components-contrib/secretstores/local/env" - - bindings_loader "github.com/dapr/dapr/pkg/components/bindings" - secretstores_loader "github.com/dapr/dapr/pkg/components/secretstores" - "github.com/dapr/dapr/pkg/runtime" - dapr_testing "github.com/dapr/dapr/pkg/testing" - - daprClient "github.com/dapr/go-sdk/client" - "github.com/dapr/go-sdk/service/common" - - "github.com/dapr/kit/logger" - "github.com/dapr/components-contrib/tests/certification/embedded" "github.com/dapr/components-contrib/tests/certification/flow" "github.com/dapr/components-contrib/tests/certification/flow/app" @@ -44,6 +34,13 @@ import ( "github.com/dapr/components-contrib/tests/certification/flow/sidecar" "github.com/dapr/components-contrib/tests/certification/flow/simulate" "github.com/dapr/components-contrib/tests/certification/flow/watcher" + bindings_loader "github.com/dapr/dapr/pkg/components/bindings" + secretstores_loader "github.com/dapr/dapr/pkg/components/secretstores" + "github.com/dapr/dapr/pkg/runtime" + dapr_testing "github.com/dapr/dapr/pkg/testing" + daprClient "github.com/dapr/go-sdk/client" + "github.com/dapr/go-sdk/service/common" + "github.com/dapr/kit/logger" ) const ( @@ -131,6 +128,7 @@ func TestStorageQueue(t *testing.T) { componentRuntimeOptions(), )). Step("send and wait", test). + Step("wait for messages to be deleted", flow.Sleep(time.Second*3)). Run() } @@ -169,9 +167,6 @@ func TestAzureStorageQueueTTLs(t *testing.T) { err = client.InvokeOutputBinding(ctx, mixedTTLReq) require.NoError(ctx, err, "error publishing message") } - - // Wait for double the TTL after sending the last message. - time.Sleep(time.Second * 20) return nil } @@ -200,10 +195,8 @@ func TestAzureStorageQueueTTLs(t *testing.T) { freshPorts, _ := dapr_testing.GetFreePorts(2) flow.New(t, "storagequeue ttl certification"). - // Run the application logic above. - Step(app.Run("ttlApp", fmt.Sprintf(":%d", appPort), ttlApplication)). Step(sidecar.Run("ttlSidecar", - embedded.WithAppProtocol(runtime.HTTPProtocol, appPort), + embedded.WithoutApp(), embedded.WithDaprGRPCPort(grpcPort), embedded.WithDaprHTTPPort(httpPort), embedded.WithComponentsPath("./components/ttl"), @@ -211,6 +204,7 @@ func TestAzureStorageQueueTTLs(t *testing.T) { )). Step("send ttl messages", ttlTest). Step("stop initial sidecar", sidecar.Stop("ttlSidecar")). + Step("wait for messages to expire", flow.Sleep(time.Second*20)). Step(app.Run("ttlApp", fmt.Sprintf(":%d", appPort), ttlApplication)). Step(sidecar.Run("appSidecar", embedded.WithAppProtocol(runtime.HTTPProtocol, appPort), @@ -223,6 +217,7 @@ func TestAzureStorageQueueTTLs(t *testing.T) { ttlMessages.Assert(t, time.Minute) return nil }). + Step("wait for messages to be deleted", flow.Sleep(time.Second*3)). Run() } @@ -250,9 +245,6 @@ func TestAzureStorageQueueTTLsWithLessSleepTime(t *testing.T) { err = client.InvokeOutputBinding(ctx, messageTTLReq) require.NoError(ctx, err, "error publishing message") } - - // Wait for double the TTL after sending the last message. - time.Sleep(time.Second * 1) return nil } @@ -280,6 +272,7 @@ func TestAzureStorageQueueTTLsWithLessSleepTime(t *testing.T) { componentRuntimeOptions(), )). Step("send ttl messages", ttlTest). + Step("wait a brief moment - messages will not have expired", flow.Sleep(time.Second*1)). Step("stop initial sidecar", sidecar.Stop("ttlSidecar")). Step(app.Run("ttlApp", fmt.Sprintf(":%d", appPort), ttlApplication)). Step(sidecar.Run("appSidecar", @@ -293,6 +286,7 @@ func TestAzureStorageQueueTTLsWithLessSleepTime(t *testing.T) { ttlMessages.Assert(t, time.Minute) return nil }). + Step("wait for messages to be deleted", flow.Sleep(time.Second*3)). Run() } @@ -354,6 +348,92 @@ func TestAzureStorageQueueForDecode(t *testing.T) { componentRuntimeOptions(), )). Step("send and wait", testDecode). + Step("wait for messages to be deleted", flow.Sleep(time.Second*3)). + Run() +} + +func TestAzureStorageQueueForVisibility(t *testing.T) { + allmessages := watcher.NewOrdered() + + ports, _ := dapr_testing.GetFreePorts(3) + grpcPort := ports[0] + httpPort := ports[1] + appPort := ports[2] + + messageRetryMap := make(map[string]bool) + + testVisibility := func(ctx flow.Context) error { + client, err := daprClient.NewClientWithPort(fmt.Sprintf("%d", grpcPort)) + require.NoError(t, err, "Could not initialize dapr client.") + + numMessages := 3 + // Declare the expected data. + msgs := make([]string, numMessages) + for i := 0; i < 3; i++ { + msgs[i] = fmt.Sprintf("Message %d", i) + } + + retryMessages := make([]string, numMessages) + for i := 0; i < 3; i++ { + retryMessages[i] = fmt.Sprintf("Retry Message %d", i) + } + // combine retryMessages and msgs + combineMessages := make([]string, 0) + combineMessages = append(combineMessages, msgs...) + combineMessages = append(combineMessages, retryMessages...) + allmessages.ExpectStrings(combineMessages...) + + metadata := make(map[string]string) + + ctx.Log("Invoking output binding!") + for i := 0; i < numMessages; i++ { + dataBytes := []byte(msgs[i]) + req := &daprClient.InvokeBindingRequest{Name: "visibilityBinding", Operation: "create", Data: dataBytes, Metadata: metadata} + err := client.InvokeOutputBinding(ctx, req) + require.NoError(ctx, err, "error publishing message") + // we alternate between message we will accept and message we will intentionally reject / fail just once for visibility testing + dataBytes = []byte(retryMessages[i]) + req = &daprClient.InvokeBindingRequest{Name: "visibilityBinding", Operation: "create", Data: dataBytes, Metadata: metadata} + err = client.InvokeOutputBinding(ctx, req) + require.NoError(ctx, err, "error publishing message") + } + + // check that we eventually got all messages + // this verifies that the retried messages were delivered after the other messages + allmessages.Assert(ctx, time.Second*60) + + return nil + } + + visibilityApplication := func(ctx flow.Context, s common.Service) (err error) { + // Setup the input binding endpoints. + err = multierr.Combine(err, + s.AddBindingInvocationHandler("visibilityBinding", func(_ context.Context, in *common.BindingEvent) ([]byte, error) { + ctx.Logf("Reading message: %s", string(in.Data)) + if strings.HasPrefix(string(in.Data), "Retry") && !messageRetryMap[string(in.Data)] { + ctx.Logf("Intentionally retrying message: %s", string(in.Data)) + messageRetryMap[string(in.Data)] = true + return nil, fmt.Errorf("retry") + } + allmessages.Observe(string(in.Data)) + ctx.Logf("Successfully handled message: %s", string(in.Data)) + return []byte("{}"), nil + })) + return err + } + + flow.New(t, "storagequeue visibilityTimeout certification"). + // Run the application logic above. + Step(app.Run("standardApp", fmt.Sprintf(":%d", appPort), visibilityApplication)). + Step(sidecar.Run("standardSidecar", + embedded.WithAppProtocol(runtime.HTTPProtocol, appPort), + embedded.WithDaprGRPCPort(grpcPort), + embedded.WithDaprHTTPPort(httpPort), + embedded.WithComponentsPath("./components/visibilityTimeout"), + componentRuntimeOptions(), + )). + Step("send and wait", testVisibility). + Step("wait for messages to be deleted", flow.Sleep(time.Second*3)). Run() } @@ -426,6 +506,7 @@ func TestAzureStorageQueueRetriesOnError(t *testing.T) { )). Step("interrupt network", network.InterruptNetwork(time.Minute, []string{}, []string{}, "443")). Step("send and wait", testRetry). + Step("wait for messages to be deleted", flow.Sleep(time.Second*3)). Run() } diff --git a/tests/certification/flow/watcher/watcher.go b/tests/certification/flow/watcher/watcher.go index 161b4b8cd..75b044c71 100644 --- a/tests/certification/flow/watcher/watcher.go +++ b/tests/certification/flow/watcher/watcher.go @@ -15,6 +15,7 @@ package watcher import ( "errors" + "fmt" "sync" "time" @@ -344,8 +345,10 @@ func (w *Watcher) FailIfNotExpected(t TestingT, data ...interface{}) { defer w.mu.Unlock() for _, item := range data { - val, ok := w.remaining[item] - assert.False(t, ok, "Encountered an unexpected item: %v", val) + _, ok := w.remaining[item] + if !ok { + assert.Fail(t, fmt.Sprintf("Encountered an unexpected item: %v", item), item) + } } } From a76d4b25afc7000e263d13480c049ed26bc9a78e Mon Sep 17 00:00:00 2001 From: Bernd Verst <4535280+berndverst@users.noreply.github.com> Date: Wed, 16 Nov 2022 16:04:18 -0800 Subject: [PATCH 46/87] fix servicebus topics certification test Signed-off-by: Bernd Verst <4535280+berndverst@users.noreply.github.com> --- .../azure/servicebus/topics/servicebus_test.go | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/tests/certification/pubsub/azure/servicebus/topics/servicebus_test.go b/tests/certification/pubsub/azure/servicebus/topics/servicebus_test.go index 1c00a432c..f971ee5c3 100644 --- a/tests/certification/pubsub/azure/servicebus/topics/servicebus_test.go +++ b/tests/certification/pubsub/azure/servicebus/topics/servicebus_test.go @@ -902,8 +902,6 @@ func TestServicebusDefaultTtl(t *testing.T) { } require.NoError(ctx, err, "error publishing message") } - // Wait for double the TTL after sending the last message. - time.Sleep(time.Second * 20) return nil } } @@ -926,16 +924,25 @@ func TestServicebusDefaultTtl(t *testing.T) { subscriberApplication(appID1, topicActiveName, consumerGroup1))). // Run the Dapr sidecar with the component entitymanagement - Step(sidecar.Run(sidecarName1, + Step(sidecar.Run("initalSidecar", embedded.WithComponentsPath("./components/default_ttl"), - embedded.WithAppProtocol(runtime.HTTPProtocol, appPort+portOffset), + embedded.WithoutApp(), embedded.WithDaprGRPCPort(runtime.DefaultDaprAPIGRPCPort+portOffset), embedded.WithDaprHTTPPort(runtime.DefaultDaprHTTPPort+portOffset), embedded.WithProfilePort(runtime.DefaultProfilePort+portOffset), componentRuntimeOptions(), )). - Step(fmt.Sprintf("publish messages to topicToBeCreated: %s", topicActiveName), testTtlPublishMessages(metadata, sidecarName1, topicActiveName, consumerGroup1)). + Step(fmt.Sprintf("publish messages to topicToBeCreated: %s", topicActiveName), testTtlPublishMessages(metadata, "initalSidecar", topicActiveName, consumerGroup1)). + Step("stop initial sidecar", sidecar.Stop("initialSidecar")). Step("wait", flow.Sleep(20*time.Second)). + Step(sidecar.Run(sidecarName1, + embedded.WithComponentsPath("./components/default_ttl"), + embedded.WithAppProtocol(runtime.HTTPProtocol, appPort+portOffset), + embedded.WithDaprGRPCPort(runtime.DefaultDaprAPIGRPCPort+portOffset*2), + embedded.WithDaprHTTPPort(runtime.DefaultDaprHTTPPort+portOffset*2), + embedded.WithProfilePort(runtime.DefaultProfilePort+portOffset*2), + componentRuntimeOptions(), + )). Step("verify if app6 has recevied messages published to newly created topic", assertMessages(10*time.Second, consumerGroup1)). Run() } From 3af09535162d35772b510f6dfd2912dfad73e4b1 Mon Sep 17 00:00:00 2001 From: Bernd Verst <4535280+berndverst@users.noreply.github.com> Date: Wed, 16 Nov 2022 19:59:22 -0800 Subject: [PATCH 47/87] Postgres State Store: Add Support for First-Write concurrency Signed-off-by: Bernd Verst <4535280+berndverst@users.noreply.github.com> --- state/postgresql/postgresdbaccess.go | 6 +++++- tests/config/state/tests.yml | 4 ++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/state/postgresql/postgresdbaccess.go b/state/postgresql/postgresdbaccess.go index 8ffa628d9..3e62985a2 100644 --- a/state/postgresql/postgresdbaccess.go +++ b/state/postgresql/postgresdbaccess.go @@ -143,7 +143,11 @@ func (p *postgresDBAccess) setValue(req *state.SetRequest) error { // Sprintf is required for table name because sql.DB does not substitute parameters for table names. // Other parameters use sql.DB parameter substitution. - if req.ETag == nil { + if req.Options.Concurrency == state.FirstWrite && (req.ETag == nil || *req.ETag == "") { + result, err = p.db.Exec(fmt.Sprintf( + `INSERT INTO %s (key, value, isbinary) VALUES ($1, $2, $3);`, + defaultTableName), req.Key, value, isBinary) + } else if req.ETag == nil { result, err = p.db.Exec(fmt.Sprintf( `INSERT INTO %s (key, value, isbinary) VALUES ($1, $2, $3) ON CONFLICT (key) DO UPDATE SET value = $2, isbinary = $3, updatedate = NOW();`, diff --git a/tests/config/state/tests.yml b/tests/config/state/tests.yml index e3215c940..d211c5021 100644 --- a/tests/config/state/tests.yml +++ b/tests/config/state/tests.yml @@ -21,7 +21,7 @@ components: operations: [ "set", "get", "delete", "bulkset", "bulkdelete", "transaction", "etag", "first-write" ] - component: postgresql allOperations: false - operations: [ "set", "get", "delete", "bulkset", "bulkdelete", "transaction", "etag", "query" ] + operations: [ "set", "get", "delete", "bulkset", "bulkdelete", "transaction", "etag", "query", "first-write" ] - component: mysql.mysql allOperations: false operations: [ "set", "get", "delete", "bulkset", "bulkdelete", "transaction", "etag", "first-write" ] @@ -42,4 +42,4 @@ components: operations: [ "set", "get", "delete", "bulkset", "bulkdelete", "transaction", "etag", "query" ] - component: rethinkdb allOperations: false - operations: [ "set", "get", "delete", "bulkset", "bulkdelete"] \ No newline at end of file + operations: [ "set", "get", "delete", "bulkset", "bulkdelete"] From b7d56fd7d6bc06e5a5514466381ef0605de7e392 Mon Sep 17 00:00:00 2001 From: Bernd Verst <4535280+berndverst@users.noreply.github.com> Date: Wed, 16 Nov 2022 20:13:39 -0800 Subject: [PATCH 48/87] Postgresql: allow custom table table Signed-off-by: Bernd Verst <4535280+berndverst@users.noreply.github.com> --- state/postgresql/postgresdbaccess.go | 15 +++++++++------ state/postgresql/postgresql_query.go | 11 ++++++----- state/postgresql/postgresql_query_test.go | 4 +++- 3 files changed, 18 insertions(+), 12 deletions(-) diff --git a/state/postgresql/postgresdbaccess.go b/state/postgresql/postgresdbaccess.go index 3e62985a2..1e0267c62 100644 --- a/state/postgresql/postgresdbaccess.go +++ b/state/postgresql/postgresdbaccess.go @@ -44,6 +44,7 @@ type postgresDBAccess struct { metadata postgresMetadataStruct db *sql.DB connectionString string + tableName string } // newPostgresDBAccess creates a new instance of postgresAccess. @@ -103,6 +104,7 @@ func (p *postgresDBAccess) Init(meta state.Metadata) error { if err != nil { return err } + p.tableName = m.TableName return nil } @@ -146,12 +148,12 @@ func (p *postgresDBAccess) setValue(req *state.SetRequest) error { if req.Options.Concurrency == state.FirstWrite && (req.ETag == nil || *req.ETag == "") { result, err = p.db.Exec(fmt.Sprintf( `INSERT INTO %s (key, value, isbinary) VALUES ($1, $2, $3);`, - defaultTableName), req.Key, value, isBinary) + p.tableName), req.Key, value, isBinary) } else if req.ETag == nil { result, err = p.db.Exec(fmt.Sprintf( `INSERT INTO %s (key, value, isbinary) VALUES ($1, $2, $3) ON CONFLICT (key) DO UPDATE SET value = $2, isbinary = $3, updatedate = NOW();`, - defaultTableName), req.Key, value, isBinary) + p.tableName), req.Key, value, isBinary) } else { // Convert req.ETag to uint32 for postgres XID compatibility var etag64 uint64 @@ -165,7 +167,7 @@ func (p *postgresDBAccess) setValue(req *state.SetRequest) error { result, err = p.db.Exec(fmt.Sprintf( `UPDATE %s SET value = $1, isbinary = $2, updatedate = NOW() WHERE key = $3 AND xmin = $4;`, - defaultTableName), value, isBinary, req.Key, etag) + p.tableName), value, isBinary, req.Key, etag) } if err != nil { @@ -222,7 +224,7 @@ func (p *postgresDBAccess) Get(req *state.GetRequest) (*state.GetResponse, error var value string var isBinary bool var etag int - err := p.db.QueryRow(fmt.Sprintf("SELECT value, isbinary, xmin as etag FROM %s WHERE key = $1", defaultTableName), req.Key).Scan(&value, &isBinary, &etag) + err := p.db.QueryRow(fmt.Sprintf("SELECT value, isbinary, xmin as etag FROM %s WHERE key = $1", p.tableName), req.Key).Scan(&value, &isBinary, &etag) if err != nil { // If no rows exist, return an empty response, otherwise return the error. if err == sql.ErrNoRows { @@ -382,8 +384,9 @@ func (p *postgresDBAccess) ExecuteMulti(request *state.TransactionalStateRequest func (p *postgresDBAccess) Query(req *state.QueryRequest) (*state.QueryResponse, error) { p.logger.Debug("Getting query value from PostgreSQL") q := &Query{ - query: "", - params: []interface{}{}, + query: "", + params: []interface{}{}, + tableName: p.tableName, } qbuilder := query.NewQueryBuilder(q) if err := qbuilder.BuildQuery(&req.Query); err != nil { diff --git a/state/postgresql/postgresql_query.go b/state/postgresql/postgresql_query.go index 102ac2b4e..ca113ff09 100644 --- a/state/postgresql/postgresql_query.go +++ b/state/postgresql/postgresql_query.go @@ -27,10 +27,11 @@ import ( ) type Query struct { - query string - params []interface{} - limit int - skip *int64 + query string + params []interface{} + limit int + skip *int64 + tableName string } func (q *Query) VisitEQ(f *query.EQ) (string, error) { @@ -101,7 +102,7 @@ func (q *Query) VisitOR(f *query.OR) (string, error) { } func (q *Query) Finalize(filters string, qq *query.Query) error { - q.query = fmt.Sprintf("SELECT key, value, xmin as etag FROM %s", defaultTableName) + q.query = fmt.Sprintf("SELECT key, value, xmin as etag FROM %s", q.tableName) if filters != "" { q.query += fmt.Sprintf(" WHERE %s", filters) diff --git a/state/postgresql/postgresql_query_test.go b/state/postgresql/postgresql_query_test.go index 260d3d570..e576ce6ff 100644 --- a/state/postgresql/postgresql_query_test.go +++ b/state/postgresql/postgresql_query_test.go @@ -60,7 +60,9 @@ func TestPostgresqlQueryBuildQuery(t *testing.T) { err = json.Unmarshal(data, &qq) assert.NoError(t, err) - q := &Query{} + q := &Query{ + tableName: defaultTableName, + } qbuilder := query.NewQueryBuilder(q) err = qbuilder.BuildQuery(&qq) assert.NoError(t, err) From 1e728597b4b7428f7d3c520d9dba9a31bb246d7d Mon Sep 17 00:00:00 2001 From: ItalyPaleAle <43508+ItalyPaleAle@users.noreply.github.com> Date: Thu, 17 Nov 2022 16:29:29 +0000 Subject: [PATCH 49/87] Misc refactorings - Removed `state.DeleteWithOptions` and `state.SetWithOptions` which were useless at this point (likely a leftover from when there were retries) - Some improvements in etag handling in postgres - Other minor refactorings Signed-off-by: ItalyPaleAle <43508+ItalyPaleAle@users.noreply.github.com> --- .../rabbitmq/rabbitmq_integration_test.go | 58 +++++++++------- .../eventhubs/eventhubs_integration_test.go | 10 +-- state/cockroachdb/cockroachdb_access.go | 10 --- state/gcp/firestore/firestore.go | 16 ++--- state/memcached/memcached.go | 6 +- state/mysql/mysql.go | 9 +-- state/oracledatabase/oracledatabaseaccess.go | 24 ++----- state/postgresql/postgresdbaccess.go | 67 ++++++++----------- state/postgresql/postgresql_query.go | 22 +++--- state/redis/redis.go | 28 +++----- state/request_options.go | 10 --- state/request_options_test.go | 25 ------- state/zookeeper/zk.go | 51 +++++++------- 13 files changed, 121 insertions(+), 215 deletions(-) diff --git a/bindings/rabbitmq/rabbitmq_integration_test.go b/bindings/rabbitmq/rabbitmq_integration_test.go index e2714c9d3..e3939bbce 100644 --- a/bindings/rabbitmq/rabbitmq_integration_test.go +++ b/bindings/rabbitmq/rabbitmq_integration_test.go @@ -130,12 +130,14 @@ func TestPublishingWithTTL(t *testing.T) { const maxGetDuration = ttlInSeconds * time.Second metadata := bindings.Metadata{ - Name: "testQueue", - Properties: map[string]string{ - "queueName": queueName, - "host": rabbitmqHost, - "deleteWhenUnused": strconv.FormatBool(exclusive), - "durable": strconv.FormatBool(durable), + Base: contribMetadata.Base{ + Name: "testQueue", + Properties: map[string]string{ + "queueName": queueName, + "host": rabbitmqHost, + "deleteWhenUnused": strconv.FormatBool(exclusive), + "durable": strconv.FormatBool(durable), + }, }, } @@ -162,7 +164,7 @@ func TestPublishingWithTTL(t *testing.T) { }, } - _, err = rabbitMQBinding1.Invoke(context.Backgound(), &writeRequest) + _, err = rabbitMQBinding1.Invoke(context.Background(), &writeRequest) assert.Nil(t, err) time.Sleep(time.Second + (ttlInSeconds * time.Second)) @@ -183,7 +185,7 @@ func TestPublishingWithTTL(t *testing.T) { contribMetadata.TTLMetadataKey: strconv.Itoa(ttlInSeconds * 1000), }, } - _, err = rabbitMQBinding2.Invoke(context.Backgound(), &writeRequest) + _, err = rabbitMQBinding2.Invoke(context.Background(), &writeRequest) assert.Nil(t, err) msg, ok, err := getMessageWithRetries(ch, queueName, maxGetDuration) @@ -204,14 +206,16 @@ func TestExclusiveQueue(t *testing.T) { const maxGetDuration = ttlInSeconds * time.Second metadata := bindings.Metadata{ - Name: "testQueue", - Properties: map[string]string{ - "queueName": queueName, - "host": rabbitmqHost, - "deleteWhenUnused": strconv.FormatBool(exclusive), - "durable": strconv.FormatBool(durable), - "exclusive": strconv.FormatBool(exclusive), - contribMetadata.TTLMetadataKey: strconv.FormatInt(ttlInSeconds, 10), + Base: contribMetadata.Base{ + Name: "testQueue", + Properties: map[string]string{ + "queueName": queueName, + "host": rabbitmqHost, + "deleteWhenUnused": strconv.FormatBool(exclusive), + "durable": strconv.FormatBool(durable), + "exclusive": strconv.FormatBool(exclusive), + contribMetadata.TTLMetadataKey: strconv.FormatInt(ttlInSeconds, 10), + }, }, } @@ -257,13 +261,15 @@ func TestPublishWithPriority(t *testing.T) { const maxPriority = 10 metadata := bindings.Metadata{ - Name: "testQueue", - Properties: map[string]string{ - "queueName": queueName, - "host": rabbitmqHost, - "deleteWhenUnused": strconv.FormatBool(exclusive), - "durable": strconv.FormatBool(durable), - "maxPriority": strconv.FormatInt(maxPriority, 10), + Base: contribMetadata.Base{ + Name: "testQueue", + Properties: map[string]string{ + "queueName": queueName, + "host": rabbitmqHost, + "deleteWhenUnused": strconv.FormatBool(exclusive), + "durable": strconv.FormatBool(durable), + "maxPriority": strconv.FormatInt(maxPriority, 10), + }, }, } @@ -283,7 +289,7 @@ func TestPublishWithPriority(t *testing.T) { defer ch.Close() const middlePriorityMsgContent = "middle" - _, err = r.Invoke(context.Backgound(), &bindings.InvokeRequest{ + _, err = r.Invoke(context.Background(), &bindings.InvokeRequest{ Metadata: map[string]string{ contribMetadata.PriorityMetadataKey: "5", }, @@ -292,7 +298,7 @@ func TestPublishWithPriority(t *testing.T) { assert.Nil(t, err) const lowPriorityMsgContent = "low" - _, err = r.Invoke(context.Backgound(), &bindings.InvokeRequest{ + _, err = r.Invoke(context.Background(), &bindings.InvokeRequest{ Metadata: map[string]string{ contribMetadata.PriorityMetadataKey: "1", }, @@ -301,7 +307,7 @@ func TestPublishWithPriority(t *testing.T) { assert.Nil(t, err) const highPriorityMsgContent = "high" - _, err = r.Invoke(context.Backgound(), &bindings.InvokeRequest{ + _, err = r.Invoke(context.Background(), &bindings.InvokeRequest{ Metadata: map[string]string{ contribMetadata.PriorityMetadataKey: "10", }, diff --git a/pubsub/azure/eventhubs/eventhubs_integration_test.go b/pubsub/azure/eventhubs/eventhubs_integration_test.go index dddf66f5a..077e91ac9 100644 --- a/pubsub/azure/eventhubs/eventhubs_integration_test.go +++ b/pubsub/azure/eventhubs/eventhubs_integration_test.go @@ -52,11 +52,11 @@ func createIotHubPubsubMetadata() pubsub.Metadata { metadata := pubsub.Metadata{ Base: metadata.Base{ Properties: map[string]string{ - connectionString: os.Getenv(iotHubConnectionStringEnvKey), - consumerID: os.Getenv(iotHubConsumerGroupEnvKey), - storageAccountName: os.Getenv(storageAccountNameEnvKey), - storageAccountKey: os.Getenv(storageAccountKeyEnvKey), - storageContainerName: testStorageContainerName, + "connectionString": os.Getenv(iotHubConnectionStringEnvKey), + "consumerID": os.Getenv(iotHubConsumerGroupEnvKey), + "storageAccountName": os.Getenv(storageAccountNameEnvKey), + "storageAccountKey": os.Getenv(storageAccountKeyEnvKey), + "storageContainerName": testStorageContainerName, }, }, } diff --git a/state/cockroachdb/cockroachdb_access.go b/state/cockroachdb/cockroachdb_access.go index 84c88702c..6fdb454fc 100644 --- a/state/cockroachdb/cockroachdb_access.go +++ b/state/cockroachdb/cockroachdb_access.go @@ -114,11 +114,6 @@ func (p *cockroachDBAccess) Init(metadata state.Metadata) error { // Set makes an insert or update to the database. func (p *cockroachDBAccess) Set(req *state.SetRequest) error { - return state.SetWithOptions(p.setValue, req) -} - -// setValue is an internal implementation of set to enable passing the logic to state.SetWithRetries as a func. -func (p *cockroachDBAccess) setValue(req *state.SetRequest) error { p.logger.Debug("Setting state value in CockroachDB") value, isBinary, err := validateAndReturnValue(req) @@ -240,11 +235,6 @@ func (p *cockroachDBAccess) Get(req *state.GetRequest) (*state.GetResponse, erro // Delete removes an item from the state store. func (p *cockroachDBAccess) Delete(req *state.DeleteRequest) error { - return state.DeleteWithOptions(p.deleteValue, req) -} - -// deleteValue is an internal implementation of delete to enable passing the logic to state.DeleteWithRetries as a func. -func (p *cockroachDBAccess) deleteValue(req *state.DeleteRequest) error { p.logger.Debug("Deleting state value from CockroachDB") if req.Key == "" { return fmt.Errorf("missing key in delete operation") diff --git a/state/gcp/firestore/firestore.go b/state/gcp/firestore/firestore.go index 5a36173bd..17c3ef9bf 100644 --- a/state/gcp/firestore/firestore.go +++ b/state/gcp/firestore/firestore.go @@ -113,7 +113,8 @@ func (f *Firestore) Get(req *state.GetRequest) (*state.GetResponse, error) { }, nil } -func (f *Firestore) setValue(req *state.SetRequest) error { +// Set saves state into Firestore. +func (f *Firestore) Set(req *state.SetRequest) error { err := state.CheckRequestOptions(req.Options) if err != nil { return err @@ -142,12 +143,8 @@ func (f *Firestore) setValue(req *state.SetRequest) error { return nil } -// Set saves state into Firestore with retry. -func (f *Firestore) Set(req *state.SetRequest) error { - return state.SetWithOptions(f.setValue, req) -} - -func (f *Firestore) deleteValue(req *state.DeleteRequest) error { +// Delete performs a delete operation. +func (f *Firestore) Delete(req *state.DeleteRequest) error { ctx := context.Background() key := datastore.NameKey(f.entityKind, req.Key, nil) @@ -159,11 +156,6 @@ func (f *Firestore) deleteValue(req *state.DeleteRequest) error { return nil } -// Delete performs a delete operation. -func (f *Firestore) Delete(req *state.DeleteRequest) error { - return state.DeleteWithOptions(f.deleteValue, req) -} - func getFirestoreMetadata(meta state.Metadata) (*firestoreMetadata, error) { m := firestoreMetadata{ EntityKind: defaultEntityKind, diff --git a/state/memcached/memcached.go b/state/memcached/memcached.go index 486b20aa5..e04811a40 100644 --- a/state/memcached/memcached.go +++ b/state/memcached/memcached.go @@ -146,7 +146,7 @@ func (m *Memcached) parseTTL(req *state.SetRequest) (*int32, error) { return nil, nil } -func (m *Memcached) setValue(req *state.SetRequest) error { +func (m *Memcached) Set(req *state.SetRequest) error { var bt []byte ttl, err := m.parseTTL(req) if err != nil { @@ -194,10 +194,6 @@ func (m *Memcached) Get(req *state.GetRequest) (*state.GetResponse, error) { }, nil } -func (m *Memcached) Set(req *state.SetRequest) error { - return state.SetWithOptions(m.setValue, req) -} - func (m *Memcached) GetComponentMetadata() map[string]string { metadataStruct := memcachedMetadata{} metadataInfo := map[string]string{} diff --git a/state/mysql/mysql.go b/state/mysql/mysql.go index 654f42ac0..628812d19 100644 --- a/state/mysql/mysql.go +++ b/state/mysql/mysql.go @@ -30,7 +30,6 @@ import ( "github.com/dapr/components-contrib/metadata" "github.com/dapr/components-contrib/state" "github.com/dapr/kit/logger" - "github.com/dapr/kit/ptr" ) // Optimistic Concurrency is implemented using a string column that stores a UUID. @@ -337,8 +336,6 @@ func (m *MySQL) Delete(req *state.DeleteRequest) error { return m.deleteValue(m.db, req) } -// deleteValue is an internal implementation of delete to enable passing the -// logic to state.DeleteWithRetries as a func. func (m *MySQL) deleteValue(querier querier, req *state.DeleteRequest) error { m.logger.Debug("Deleting state value from MySql") @@ -458,14 +455,14 @@ func (m *MySQL) Get(req *state.GetRequest) (*state.GetResponse, error) { return &state.GetResponse{ Data: data, - ETag: ptr.Of(eTag), + ETag: &eTag, Metadata: req.Metadata, }, nil } return &state.GetResponse{ Data: value, - ETag: ptr.Of(eTag), + ETag: &eTag, Metadata: req.Metadata, }, nil } @@ -476,8 +473,6 @@ func (m *MySQL) Set(req *state.SetRequest) error { return m.setValue(m.db, req) } -// setValue is an internal implementation of set to enable passing the logic -// to state.SetWithRetries as a func. func (m *MySQL) setValue(querier querier, req *state.SetRequest) error { m.logger.Debug("Setting state value in MySql") diff --git a/state/oracledatabase/oracledatabaseaccess.go b/state/oracledatabase/oracledatabaseaccess.go index 5446959b7..2e395cb46 100644 --- a/state/oracledatabase/oracledatabaseaccess.go +++ b/state/oracledatabase/oracledatabaseaccess.go @@ -114,11 +114,6 @@ func (o *oracleDatabaseAccess) Init(metadata state.Metadata) error { return nil } -// Set makes an insert or update to the database. -func (o *oracleDatabaseAccess) Set(req *state.SetRequest) error { - return state.SetWithOptions(o.setValue, req) -} - func parseTTL(requestMetadata map[string]string) (*int, error) { if val, found := requestMetadata[metadataTTLKey]; found && val != "" { parsedVal, err := strconv.ParseInt(val, 10, 0) @@ -133,8 +128,8 @@ func parseTTL(requestMetadata map[string]string) (*int, error) { return nil, nil } -// setValue is an internal implementation of set to enable passing the logic to state.SetWithRetries as a func. -func (o *oracleDatabaseAccess) setValue(req *state.SetRequest) error { +// Set makes an insert or update to the database. +func (o *oracleDatabaseAccess) Set(req *state.SetRequest) error { o.logger.Debug("Setting state value in OracleDatabase") err := state.CheckRequestOptions(req.Options) if err != nil { @@ -204,6 +199,7 @@ func (o *oracleDatabaseAccess) setValue(req *state.SetRequest) error { result, err = tx.Exec(mergeStatement, req.Key, value, binaryYN, etag, ttlSeconds) } else { // when first write policy is indicated, an existing record has to be updated - one that has the etag provided. + // TODO: Needs to update ttl_in_seconds updateStatement := fmt.Sprintf( `UPDATE %s SET value = :value, binary_yn = :binary_yn, etag = :new_etag WHERE key = :key AND etag = :etag`, @@ -273,11 +269,6 @@ func (o *oracleDatabaseAccess) Get(req *state.GetRequest) (*state.GetResponse, e // Delete removes an item from the state store. func (o *oracleDatabaseAccess) Delete(req *state.DeleteRequest) error { - return state.DeleteWithOptions(o.deleteValue, req) -} - -// deleteValue is an internal implementation of delete to enable passing the logic to state.DeleteWithRetries as a func. -func (o *oracleDatabaseAccess) deleteValue(req *state.DeleteRequest) error { o.logger.Debug("Deleting state value from OracleDatabase") if req.Key == "" { return fmt.Errorf("missing key in delete operation") @@ -354,7 +345,7 @@ func (o *oracleDatabaseAccess) ExecuteMulti(sets []state.SetRequest, deletes []s return err } -// Close implements io.Close. +// Close implements io.Closer. func (o *oracleDatabaseAccess) Close() error { if o.db != nil { return o.db.Close() @@ -391,10 +382,3 @@ func tableExists(db *sql.DB, tableName string) (bool, error) { exists := tblCount > 0 return exists, err } - -// func handleError(msg string, err error) { -// if err != nil { -// fmt.Println(msg, err) - -// } -// } diff --git a/state/postgresql/postgresdbaccess.go b/state/postgresql/postgresdbaccess.go index 1e0267c62..53846066a 100644 --- a/state/postgresql/postgresdbaccess.go +++ b/state/postgresql/postgresdbaccess.go @@ -17,6 +17,7 @@ import ( "database/sql" "encoding/base64" "encoding/json" + "errors" "fmt" "strconv" "time" @@ -77,7 +78,7 @@ func (p *postgresDBAccess) Init(meta state.Metadata) error { if m.ConnectionString == "" { p.logger.Error("Missing postgreSQL connection string") - return fmt.Errorf(errMissingConnectionString) + return errors.New(errMissingConnectionString) } p.connectionString = m.ConnectionString @@ -111,11 +112,6 @@ func (p *postgresDBAccess) Init(meta state.Metadata) error { // Set makes an insert or update to the database. func (p *postgresDBAccess) Set(req *state.SetRequest) error { - return state.SetWithOptions(p.setValue, req) -} - -// setValue is an internal implementation of set to enable passing the logic to state.SetWithRetries as a func. -func (p *postgresDBAccess) setValue(req *state.SetRequest) error { p.logger.Debug("Setting state value in PostgreSQL") err := state.CheckRequestOptions(req.Options) @@ -124,11 +120,11 @@ func (p *postgresDBAccess) setValue(req *state.SetRequest) error { } if req.Key == "" { - return fmt.Errorf("missing key in set operation") + return errors.New("missing key in set operation") } if v, ok := req.Value.(string); ok && v == "" { - return fmt.Errorf("empty string is not allowed in set operation") + return errors.New("empty string is not allowed in set operation") } v := req.Value @@ -149,7 +145,7 @@ func (p *postgresDBAccess) setValue(req *state.SetRequest) error { result, err = p.db.Exec(fmt.Sprintf( `INSERT INTO %s (key, value, isbinary) VALUES ($1, $2, $3);`, p.tableName), req.Key, value, isBinary) - } else if req.ETag == nil { + } else if req.ETag == nil || *req.ETag == "" { result, err = p.db.Exec(fmt.Sprintf( `INSERT INTO %s (key, value, isbinary) VALUES ($1, $2, $3) ON CONFLICT (key) DO UPDATE SET value = $2, isbinary = $3, updatedate = NOW();`, @@ -184,7 +180,7 @@ func (p *postgresDBAccess) setValue(req *state.SetRequest) error { } if rows != 1 { - return fmt.Errorf("no item was updated") + return errors.New("no item was updated") } return nil @@ -218,27 +214,30 @@ func (p *postgresDBAccess) BulkSet(req []state.SetRequest) error { func (p *postgresDBAccess) Get(req *state.GetRequest) (*state.GetResponse, error) { p.logger.Debug("Getting state value from PostgreSQL") if req.Key == "" { - return nil, fmt.Errorf("missing key in get operation") + return nil, errors.New("missing key in get operation") } - var value string - var isBinary bool - var etag int + var ( + value []byte + isBinary bool + etag uint64 // Postgres uses uint32, but FormatUint requires uint64, so using uint64 directly to avoid re-allocations + ) err := p.db.QueryRow(fmt.Sprintf("SELECT value, isbinary, xmin as etag FROM %s WHERE key = $1", p.tableName), req.Key).Scan(&value, &isBinary, &etag) if err != nil { // If no rows exist, return an empty response, otherwise return the error. if err == sql.ErrNoRows { return &state.GetResponse{}, nil } - return nil, err } if isBinary { - var s string - var data []byte + var ( + s string + data []byte + ) - if err = json.Unmarshal([]byte(value), &s); err != nil { + if err = json.Unmarshal(value, &s); err != nil { return nil, err } @@ -248,34 +247,28 @@ func (p *postgresDBAccess) Get(req *state.GetRequest) (*state.GetResponse, error return &state.GetResponse{ Data: data, - ETag: ptr.Of(strconv.Itoa(etag)), + ETag: ptr.Of(strconv.FormatUint(etag, 10)), Metadata: req.Metadata, }, nil } return &state.GetResponse{ - Data: []byte(value), - ETag: ptr.Of(strconv.Itoa(etag)), + Data: value, + ETag: ptr.Of(strconv.FormatUint(etag, 10)), Metadata: req.Metadata, }, nil } // Delete removes an item from the state store. -func (p *postgresDBAccess) Delete(req *state.DeleteRequest) error { - return state.DeleteWithOptions(p.deleteValue, req) -} - -// deleteValue is an internal implementation of delete to enable passing the logic to state.DeleteWithRetries as a func. -func (p *postgresDBAccess) deleteValue(req *state.DeleteRequest) error { +func (p *postgresDBAccess) Delete(req *state.DeleteRequest) (err error) { p.logger.Debug("Deleting state value from PostgreSQL") if req.Key == "" { - return fmt.Errorf("missing key in delete operation") + return errors.New("missing key in delete operation") } var result sql.Result - var err error - if req.ETag == nil { + if req.ETag == nil || *req.ETag == "" { result, err = p.db.Exec("DELETE FROM state WHERE key = $1", req.Key) } else { // Convert req.ETag to uint32 for postgres XID compatibility @@ -313,12 +306,10 @@ func (p *postgresDBAccess) BulkDelete(req []state.DeleteRequest) error { } if len(req) > 0 { - for _, d := range req { - da := d // Fix for gosec G601: Implicit memory aliasing in for loop. - err = p.Delete(&da) + for i := range req { + err = p.Delete(&req[i]) if err != nil { tx.Rollback() - return err } } @@ -446,11 +437,11 @@ func tableExists(db *sql.DB, tableName string) (bool, error) { func getSet(req state.TransactionalStateOperation) (state.SetRequest, error) { setReq, ok := req.Request.(state.SetRequest) if !ok { - return setReq, fmt.Errorf("expecting set request") + return setReq, errors.New("expecting set request") } if setReq.Key == "" { - return setReq, fmt.Errorf("missing key in upsert operation") + return setReq, errors.New("missing key in upsert operation") } return setReq, nil @@ -460,11 +451,11 @@ func getSet(req state.TransactionalStateOperation) (state.SetRequest, error) { func getDelete(req state.TransactionalStateOperation) (state.DeleteRequest, error) { delReq, ok := req.Request.(state.DeleteRequest) if !ok { - return delReq, fmt.Errorf("expecting delete request") + return delReq, errors.New("expecting delete request") } if delReq.Key == "" { - return delReq, fmt.Errorf("missing key in upsert operation") + return delReq, errors.New("missing key in upsert operation") } return delReq, nil diff --git a/state/postgresql/postgresql_query.go b/state/postgresql/postgresql_query.go index ca113ff09..30e287c96 100644 --- a/state/postgresql/postgresql_query.go +++ b/state/postgresql/postgresql_query.go @@ -88,9 +88,9 @@ func (q *Query) visitFilters(op string, filters []query.Filter) (string, error) } } - sep := fmt.Sprintf(" %s ", op) + sep := " " + op + " " - return fmt.Sprintf("(%s)", strings.Join(arr, sep)), nil + return "(" + strings.Join(arr, sep) + ")", nil } func (q *Query) VisitAND(f *query.AND) (string, error) { @@ -102,10 +102,10 @@ func (q *Query) VisitOR(f *query.OR) (string, error) { } func (q *Query) Finalize(filters string, qq *query.Query) error { - q.query = fmt.Sprintf("SELECT key, value, xmin as etag FROM %s", q.tableName) + q.query = "SELECT key, value, xmin as etag FROM " + q.tableName if filters != "" { - q.query += fmt.Sprintf(" WHERE %s", filters) + q.query += " WHERE " + filters } if len(qq.Sort) > 0 { @@ -117,13 +117,13 @@ func (q *Query) Finalize(filters string, qq *query.Query) error { } q.query += translateFieldToFilter(sortItem.Key) if sortItem.Order != "" { - q.query += fmt.Sprintf(" %s", sortItem.Order) + q.query += " " + sortItem.Order } } } if qq.Page.Limit > 0 { - q.query += fmt.Sprintf(" LIMIT %d", qq.Page.Limit) + q.query += " LIMIT " + strconv.Itoa(qq.Page.Limit) q.limit = qq.Page.Limit } @@ -132,7 +132,7 @@ func (q *Query) Finalize(filters string, qq *query.Query) error { if err != nil { return err } - q.query += fmt.Sprintf(" OFFSET %d", skip) + q.query += " OFFSET " + strconv.FormatInt(skip, 10) q.skip = &skip } @@ -151,7 +151,7 @@ func (q *Query) execute(logger logger.Logger, db *sql.DB) ([]state.QueryItem, st var ( key string data []byte - etag int + etag uint64 // Postgres uses uint32, but FormatUint requires uint64, so using uint64 directly to avoid re-allocations ) if err = rows.Scan(&key, &data, &etag); err != nil { return nil, "", err @@ -159,7 +159,7 @@ func (q *Query) execute(logger logger.Logger, db *sql.DB) ([]state.QueryItem, st result := state.QueryItem{ Key: key, Data: data, - ETag: ptr.Of(strconv.Itoa(etag)), + ETag: ptr.Of(strconv.FormatUint(etag, 10)), } ret = append(ret, result) } @@ -200,7 +200,7 @@ func translateFieldToFilter(key string) string { filterField += ">" } - filterField += fmt.Sprintf("'%s'", fieldPart) + filterField += "'" + fieldPart + "'" } return filterField @@ -209,6 +209,6 @@ func translateFieldToFilter(key string) string { func (q *Query) whereFieldEqual(key string, value interface{}) string { position := q.addParamValueAndReturnPosition(value) filterField := translateFieldToFilter(key) - query := fmt.Sprintf("%s=$%v", filterField, position) + query := filterField + "=$" + strconv.Itoa(position) return query } diff --git a/state/redis/redis.go b/state/redis/redis.go index ae676737c..a3120a1fd 100644 --- a/state/redis/redis.go +++ b/state/redis/redis.go @@ -196,7 +196,13 @@ func (r *StateStore) parseConnectedSlaves(res string) int { return 0 } -func (r *StateStore) deleteValue(req *state.DeleteRequest) error { +// Delete performs a delete operation. +func (r *StateStore) Delete(req *state.DeleteRequest) error { + err := state.CheckRequestOptions(req.Options) + if err != nil { + return err + } + if req.ETag == nil { etag := "0" req.ETag = &etag @@ -208,7 +214,7 @@ func (r *StateStore) deleteValue(req *state.DeleteRequest) error { } else { delQuery = delDefaultQuery } - _, err := r.client.Do(r.ctx, "EVAL", delQuery, 1, req.Key, *req.ETag).Result() + _, err = r.client.Do(r.ctx, "EVAL", delQuery, 1, req.Key, *req.ETag).Result() if err != nil { return state.NewETagError(state.ETagMismatch, err) } @@ -216,16 +222,6 @@ func (r *StateStore) deleteValue(req *state.DeleteRequest) error { return nil } -// Delete performs a delete operation. -func (r *StateStore) Delete(req *state.DeleteRequest) error { - err := state.CheckRequestOptions(req.Options) - if err != nil { - return err - } - - return state.DeleteWithOptions(r.deleteValue, req) -} - func (r *StateStore) directGet(req *state.GetRequest) (*state.GetResponse, error) { res, err := r.client.Do(r.ctx, "GET", req.Key).Result() if err != nil { @@ -318,7 +314,8 @@ type jsonEntry struct { Version *int `json:"version,omitempty"` } -func (r *StateStore) setValue(req *state.SetRequest) error { +// Set saves state into redis. +func (r *StateStore) Set(req *state.SetRequest) error { err := state.CheckRequestOptions(req.Options) if err != nil { return err @@ -384,11 +381,6 @@ func (r *StateStore) setValue(req *state.SetRequest) error { return nil } -// Set saves state into redis. -func (r *StateStore) Set(req *state.SetRequest) error { - return state.SetWithOptions(r.setValue, req) -} - // Multi performs a transactional operation. succeeds only if all operations succeed, and fails if one or more operations fail. func (r *StateStore) Multi(request *state.TransactionalStateRequest) error { var setQuery, delQuery string diff --git a/state/request_options.go b/state/request_options.go index 23ed85cb3..140783244 100644 --- a/state/request_options.go +++ b/state/request_options.go @@ -66,13 +66,3 @@ func validateConsistencyOption(c string) error { return nil } - -// SetWithOptions handles SetRequest with request options. -func SetWithOptions(method func(req *SetRequest) error, req *SetRequest) error { - return method(req) -} - -// DeleteWithOptions handles DeleteRequest with options. -func DeleteWithOptions(method func(req *DeleteRequest) error, req *DeleteRequest) error { - return method(req) -} diff --git a/state/request_options_test.go b/state/request_options_test.go index 2bf8e72f3..2853fea6b 100644 --- a/state/request_options_test.go +++ b/state/request_options_test.go @@ -19,31 +19,6 @@ import ( "github.com/stretchr/testify/assert" ) -// TestSetRequestWithOptions is used to test request options. -func TestSetRequestWithOptions(t *testing.T) { - t.Run("set with default options", func(t *testing.T) { - counter := 0 - SetWithOptions(func(req *SetRequest) error { - counter++ - - return nil - }, &SetRequest{}) - assert.Equal(t, 1, counter, "should execute only once") - }) - - t.Run("set with no explicit options", func(t *testing.T) { - counter := 0 - SetWithOptions(func(req *SetRequest) error { - counter++ - - return nil - }, &SetRequest{ - Options: SetStateOption{}, - }) - assert.Equal(t, 1, counter, "should execute only once") - }) -} - // TestCheckRequestOptions is used to validate request options. func TestCheckRequestOptions(t *testing.T) { t.Run("set state options", func(t *testing.T) { diff --git a/state/zookeeper/zk.go b/state/zookeeper/zk.go index 8b2935148..280dbf09b 100644 --- a/state/zookeeper/zk.go +++ b/state/zookeeper/zk.go @@ -187,22 +187,20 @@ func (s *StateStore) Delete(req *state.DeleteRequest) error { return err } - return state.DeleteWithOptions(func(req *state.DeleteRequest) error { - err := s.conn.Delete(r.Path, r.Version) - if errors.Is(err, zk.ErrNoNode) { - return nil - } - - if err != nil { - if req.ETag != nil { - return state.NewETagError(state.ETagMismatch, err) - } - - return err - } - + err = s.conn.Delete(r.Path, r.Version) + if errors.Is(err, zk.ErrNoNode) { return nil - }, req) + } + + if err != nil { + if req.ETag != nil { + return state.NewETagError(state.ETagMismatch, err) + } + + return err + } + + return nil } // BulkDelete performs a bulk delete operation. @@ -239,23 +237,20 @@ func (s *StateStore) Set(req *state.SetRequest) error { return err } - return state.SetWithOptions(func(req *state.SetRequest) error { - _, err = s.conn.Set(r.Path, r.Data, r.Version) + _, err = s.conn.Set(r.Path, r.Data, r.Version) + if errors.Is(err, zk.ErrNoNode) { + _, err = s.conn.Create(r.Path, r.Data, 0, nil) + } - if errors.Is(err, zk.ErrNoNode) { - _, err = s.conn.Create(r.Path, r.Data, 0, nil) + if err != nil { + if req.ETag != nil { + return state.NewETagError(state.ETagMismatch, err) } - if err != nil { - if req.ETag != nil { - return state.NewETagError(state.ETagMismatch, err) - } + return err + } - return err - } - - return nil - }, req) + return nil } // BulkSet performs a bulks save operation. From 7ee92e8f74912389439b09861133ce50cc2e8d79 Mon Sep 17 00:00:00 2001 From: Pravin Pushkar Date: Fri, 18 Nov 2022 00:07:59 +0530 Subject: [PATCH 50/87] address review comments Signed-off-by: Pravin Pushkar --- configuration/azure/appconfig/appconfig.go | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/configuration/azure/appconfig/appconfig.go b/configuration/azure/appconfig/appconfig.go index d93ee96d4..849763c5c 100644 --- a/configuration/azure/appconfig/appconfig.go +++ b/configuration/azure/appconfig/appconfig.go @@ -15,6 +15,7 @@ package appconfig import ( "context" + "errors" "fmt" "strconv" "sync" @@ -302,6 +303,9 @@ func (r *ConfigurationStore) doSubscribe(ctx context.Context, req *configuration }, ) if err != nil { + if errors.Is(err, context.Canceled) { + return + } r.logger.Debugf("azure appconfig error: fail to get sentinel key or sentinel's key %s value is unchanged: %s", sentinelKey, err) } else { // if sentinel key has changed then update the Etag value. @@ -311,6 +315,9 @@ func (r *ConfigurationStore) doSubscribe(ctx context.Context, req *configuration Metadata: req.Metadata, }) if err != nil { + if errors.Is(err, context.Canceled) { + return + } r.logger.Errorf("azure appconfig error: fail to get configuration key changes: %s", err) } else { r.handleSubscribedChange(ctx, handler, items, id) From 51e0aa992c54367fbd4ffb51976855f739834a2c Mon Sep 17 00:00:00 2001 From: Bernd Verst <4535280+berndverst@users.noreply.github.com> Date: Thu, 17 Nov 2022 02:06:51 -0800 Subject: [PATCH 51/87] Azure Blobstorage Binding: Migrate to Track2 Azure SDK Signed-off-by: Bernd Verst <4535280+berndverst@users.noreply.github.com> --- bindings/azure/blobstorage/blobstorage.go | 282 ++++++++++-------- .../azure/blobstorage/blobstorage_test.go | 10 +- go.mod | 3 +- go.sum | 6 +- .../azure/blobstorage/blobstorage_test.go | 46 +-- .../bindings/azure/blobstorage/go.mod | 4 +- .../bindings/azure/blobstorage/go.sum | 8 +- .../bindings/azure/cosmosdb/go.mod | 2 +- .../bindings/azure/cosmosdb/go.sum | 4 +- .../bindings/azure/eventhubs/go.mod | 2 +- .../bindings/azure/eventhubs/go.sum | 4 +- .../bindings/azure/servicebusqueues/go.mod | 2 +- .../bindings/azure/servicebusqueues/go.sum | 4 +- .../bindings/azure/storagequeues/go.mod | 2 +- .../bindings/azure/storagequeues/go.sum | 4 +- .../pubsub/azure/eventhubs/go.mod | 2 +- .../pubsub/azure/eventhubs/go.sum | 4 +- .../pubsub/azure/servicebus/topics/go.mod | 2 +- .../pubsub/azure/servicebus/topics/go.sum | 4 +- .../secretstores/azure/keyvault/go.mod | 2 +- .../secretstores/azure/keyvault/go.sum | 4 +- .../state/azure/blobstorage/go.mod | 2 +- .../state/azure/blobstorage/go.sum | 4 +- .../certification/state/azure/cosmosdb/go.mod | 2 +- .../certification/state/azure/cosmosdb/go.sum | 4 +- .../state/azure/tablestorage/go.mod | 2 +- .../state/azure/tablestorage/go.sum | 4 +- 27 files changed, 235 insertions(+), 184 deletions(-) diff --git a/bindings/azure/blobstorage/blobstorage.go b/bindings/azure/blobstorage/blobstorage.go index ddcd2f8e0..34d10f2ae 100644 --- a/bindings/azure/blobstorage/blobstorage.go +++ b/bindings/azure/blobstorage/blobstorage.go @@ -14,24 +14,29 @@ limitations under the License. package blobstorage import ( + "bytes" "context" b64 "encoding/base64" "encoding/json" "errors" "fmt" - "io" "net/url" "strconv" - "strings" "time" - "github.com/Azure/azure-storage-blob-go/azblob" + "github.com/Azure/azure-sdk-for-go/sdk/azcore" + "github.com/Azure/azure-sdk-for-go/sdk/azcore/policy" + "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob" + "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/blob" + "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/blockblob" + "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/container" "github.com/google/uuid" "github.com/dapr/components-contrib/bindings" azauth "github.com/dapr/components-contrib/internal/authentication/azure" mdutils "github.com/dapr/components-contrib/metadata" "github.com/dapr/kit/logger" + "github.com/dapr/kit/ptr" ) const ( @@ -63,25 +68,28 @@ const ( // Specifies the maximum number of blobs to return, including all BlobPrefix elements. If the request does not // specify maxresults the server will return up to 5,000 items. // See: https://docs.microsoft.com/en-us/rest/api/storageservices/list-blobs#uri-parameters - maxResults = 5000 + maxResults = 5000 + endpointKey = "endpoint" ) var ErrMissingBlobName = errors.New("blobName is a required attribute") // AzureBlobStorage allows saving blobs to an Azure Blob Storage account. type AzureBlobStorage struct { - metadata *blobStorageMetadata - containerURL azblob.ContainerURL + metadata *blobStorageMetadata + // containerURL azblob.ContainerURL + containerClient *container.Client logger logger.Logger } type blobStorageMetadata struct { - AccountName string - Container string - GetBlobRetryCount int - DecodeBase64 bool - PublicAccessLevel azblob.PublicAccessType + StorageAccount string `json:"storageAccount"` + StorageAccessKey string `json:"storageAccessKey"` + Container string `json:"container"` + GetBlobRetryCount int `json:"getBlobRetryCount,string"` + DecodeBase64 bool `json:"decodeBase64,string"` + PublicAccessLevel azblob.PublicAccessType `json:"publicAccessLevel"` } type createResponse struct { @@ -117,79 +125,100 @@ func (a *AzureBlobStorage) Init(metadata bindings.Metadata) error { } a.metadata = m - credential, env, err := azauth.GetAzureStorageBlobCredentials(a.logger, m.AccountName, metadata.Properties) - if err != nil { - return fmt.Errorf("invalid credentials with error: %s", err.Error()) - } - userAgent := "dapr-" + logger.DaprVersion - options := azblob.PipelineOptions{ - Telemetry: azblob.TelemetryOptions{Value: userAgent}, + options := container.ClientOptions{ + ClientOptions: azcore.ClientOptions{ + Retry: policy.RetryOptions{ + MaxRetries: int32(a.metadata.GetBlobRetryCount), + }, + Telemetry: policy.TelemetryOptions{ + ApplicationID: userAgent, + }, + }, } - p := azblob.NewPipeline(credential, options) - var containerURL azblob.ContainerURL - customEndpoint, ok := mdutils.GetMetadataProperty(metadata.Properties, azauth.StorageEndpointKeys...) + settings, err := azauth.NewEnvironmentSettings("storage", metadata.Properties) + if err != nil { + return err + } + customEndpoint, ok := metadata.Properties[endpointKey] + var URL *url.URL if ok && customEndpoint != "" { - URL, parseErr := url.Parse(fmt.Sprintf("%s/%s/%s", customEndpoint, m.AccountName, m.Container)) + var parseErr error + URL, parseErr = url.Parse(fmt.Sprintf("%s/%s/%s", customEndpoint, m.StorageAccount, m.Container)) if parseErr != nil { return parseErr } - containerURL = azblob.NewContainerURL(*URL, p) } else { - URL, _ := url.Parse(fmt.Sprintf("https://%s.blob.%s/%s", m.AccountName, env.StorageEndpointSuffix, m.Container)) - containerURL = azblob.NewContainerURL(*URL, p) + env := settings.AzureEnvironment + URL, _ = url.Parse(fmt.Sprintf("https://%s.blob.%s/%s", m.StorageAccount, env.StorageEndpointSuffix, m.Container)) } - ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) - _, err = containerURL.Create(ctx, azblob.Metadata{}, m.PublicAccessLevel) + var clientErr error + var client *container.Client + // Try using shared key credentials first + if m.StorageAccessKey != "" { + credential, newSharedKeyErr := azblob.NewSharedKeyCredential(m.StorageAccount, m.StorageAccessKey) + if err != nil { + return fmt.Errorf("invalid credentials with error: %w", newSharedKeyErr) + } + client, clientErr = container.NewClientWithSharedKeyCredential(URL.String(), credential, &options) + if clientErr != nil { + return fmt.Errorf("cannot init Blobstorage container client: %w", err) + } + container.NewClientWithSharedKeyCredential(URL.String(), credential, &options) + a.containerClient = client + } else { + // fallback to AAD + credential, tokenErr := settings.GetTokenCredential() + if err != nil { + return fmt.Errorf("invalid credentials with error: %w", tokenErr) + } + client, clientErr = container.NewClient(URL.String(), credential, &options) + } + if clientErr != nil { + return fmt.Errorf("cannot init Blobstorage client: %w", clientErr) + } + + createContainerOptions := container.CreateOptions{ + Access: &m.PublicAccessLevel, + Metadata: map[string]string{}, + } + timeoutCtx, cancel := context.WithTimeout(context.Background(), 30*time.Second) + _, err = client.Create(timeoutCtx, &createContainerOptions) cancel() // Don't return error, container might already exist a.logger.Debugf("error creating container: %w", err) - a.containerURL = containerURL + a.containerClient = client return nil } -func (a *AzureBlobStorage) parseMetadata(metadata bindings.Metadata) (*blobStorageMetadata, error) { - var m blobStorageMetadata - if val, ok := mdutils.GetMetadataProperty(metadata.Properties, azauth.StorageAccountNameKeys...); ok && val != "" { - m.AccountName = val +func (a *AzureBlobStorage) parseMetadata(meta bindings.Metadata) (*blobStorageMetadata, error) { + m := blobStorageMetadata{ + GetBlobRetryCount: defaultGetBlobRetryCount, + } + mdutils.DecodeMetadata(meta.Properties, &m) + + if val, ok := mdutils.GetMetadataProperty(meta.Properties, azauth.StorageAccountNameKeys...); ok && val != "" { + m.StorageAccount = val } else { return nil, fmt.Errorf("missing or empty %s field from metadata", azauth.StorageAccountNameKeys[0]) } - if val, ok := mdutils.GetMetadataProperty(metadata.Properties, azauth.StorageContainerNameKeys...); ok && val != "" { + if val, ok := mdutils.GetMetadataProperty(meta.Properties, azauth.StorageContainerNameKeys...); ok && val != "" { m.Container = val } else { return nil, fmt.Errorf("missing or empty %s field from metadata", azauth.StorageContainerNameKeys[0]) } - m.GetBlobRetryCount = defaultGetBlobRetryCount - if val, ok := metadata.Properties["getBlobRetryCount"]; ok { - n, err := strconv.Atoi(val) - if err != nil || n == 0 { - return nil, fmt.Errorf("invalid getBlobRetryCount field from metadata") - } - m.GetBlobRetryCount = n - } - - m.DecodeBase64 = false - if val, ok := metadata.Properties["decodeBase64"]; ok { - n, err := strconv.ParseBool(val) - if err != nil { - return nil, fmt.Errorf("invalid decodeBase64 field from metadata") - } - m.DecodeBase64 = n - } - - m.PublicAccessLevel = azblob.PublicAccessType(strings.ToLower(metadata.Properties["publicAccessLevel"])) // per the Dapr documentation "none" is a valid value if m.PublicAccessLevel == "none" { m.PublicAccessLevel = "" } - if !a.isValidPublicAccessType(m.PublicAccessLevel) { - return nil, fmt.Errorf("invalid public access level: %s; allowed: %s", m.PublicAccessLevel, azblob.PossiblePublicAccessTypeValues()) + if m.PublicAccessLevel != "" && !a.isValidPublicAccessType(m.PublicAccessLevel) { + return nil, fmt.Errorf("invalid public access level: %s; allowed: %s", + m.PublicAccessLevel, azblob.PossiblePublicAccessTypeValues()) } return &m, nil @@ -205,8 +234,6 @@ func (a *AzureBlobStorage) Operations() []bindings.OperationKind { } func (a *AzureBlobStorage) create(ctx context.Context, req *bindings.InvokeRequest) (*bindings.InvokeResponse, error) { - var blobHTTPHeaders azblob.BlobHTTPHeaders - var blobURL azblob.BlockBlobURL var blobName string if val, ok := req.Metadata[metadataKeyBlobName]; ok && val != "" { blobName = val @@ -214,34 +241,38 @@ func (a *AzureBlobStorage) create(ctx context.Context, req *bindings.InvokeReque } else { blobName = uuid.New().String() } - blobURL = a.getBlobURL(blobName) + + blobHTTPHeaders := blob.HTTPHeaders{} if val, ok := req.Metadata[metadataKeyContentType]; ok && val != "" { - blobHTTPHeaders.ContentType = val + blobHTTPHeaders.BlobContentType = ptr.Of(val) delete(req.Metadata, metadataKeyContentType) } + var contentMD5 *[]byte + if val, ok := req.Metadata[metadataKeyContentMD5]; ok && val != "" { sDec, err := b64.StdEncoding.DecodeString(val) if err != nil || len(sDec) != 16 { return nil, fmt.Errorf("the MD5 value specified in Content MD5 is invalid, MD5 value must be 128 bits and base64 encoded") } - blobHTTPHeaders.ContentMD5 = sDec + blobHTTPHeaders.BlobContentMD5 = sDec + contentMD5 = &sDec delete(req.Metadata, metadataKeyContentMD5) } if val, ok := req.Metadata[metadataKeyContentEncoding]; ok && val != "" { - blobHTTPHeaders.ContentEncoding = val + blobHTTPHeaders.BlobContentEncoding = ptr.Of(val) delete(req.Metadata, metadataKeyContentEncoding) } if val, ok := req.Metadata[metadataKeyContentLanguage]; ok && val != "" { - blobHTTPHeaders.ContentLanguage = val + blobHTTPHeaders.BlobContentLanguage = ptr.Of(val) delete(req.Metadata, metadataKeyContentLanguage) } if val, ok := req.Metadata[metadataKeyContentDisposition]; ok && val != "" { - blobHTTPHeaders.ContentDisposition = val + blobHTTPHeaders.BlobContentDisposition = ptr.Of(val) delete(req.Metadata, metadataKeyContentDisposition) } if val, ok := req.Metadata[metadataKeyCacheControl]; ok && val != "" { - blobHTTPHeaders.CacheControl = val + blobHTTPHeaders.BlobCacheControl = ptr.Of(val) delete(req.Metadata, metadataKeyCacheControl) } @@ -258,17 +289,22 @@ func (a *AzureBlobStorage) create(ctx context.Context, req *bindings.InvokeReque req.Data = decoded } - _, err = azblob.UploadBufferToBlockBlob(ctx, req.Data, blobURL, azblob.UploadToBlockBlobOptions{ - Parallelism: 16, - Metadata: a.sanitizeMetadata(req.Metadata), - BlobHTTPHeaders: blobHTTPHeaders, - }) + uploadOptions := azblob.UploadBufferOptions{ + Metadata: a.sanitizeMetadata(req.Metadata), + HTTPHeaders: &blobHTTPHeaders, + Concurrency: 16, + TransactionalContentMD5: contentMD5, + } + + blockBlobClient := a.containerClient.NewBlockBlobClient(blobName) + _, err = blockBlobClient.UploadBuffer(ctx, req.Data, &uploadOptions) + if err != nil { return nil, fmt.Errorf("error uploading az blob: %w", err) } resp := createResponse{ - BlobURL: blobURL.String(), + BlobURL: blockBlobClient.URL(), } b, err := json.Marshal(resp) if err != nil { @@ -286,23 +322,30 @@ func (a *AzureBlobStorage) create(ctx context.Context, req *bindings.InvokeReque } func (a *AzureBlobStorage) get(ctx context.Context, req *bindings.InvokeRequest) (*bindings.InvokeResponse, error) { - var blobURL azblob.BlockBlobURL + var blockBlobClient *blockblob.Client if val, ok := req.Metadata[metadataKeyBlobName]; ok && val != "" { - blobURL = a.getBlobURL(val) + blockBlobClient = a.containerClient.NewBlockBlobClient(val) } else { return nil, ErrMissingBlobName } - resp, err := blobURL.Download(ctx, 0, azblob.CountToEnd, azblob.BlobAccessConditions{}, false) + downloadOptions := azblob.DownloadStreamOptions{ + AccessConditions: &blob.AccessConditions{}, + } + + blobDownloadResponse, err := blockBlobClient.DownloadStream(ctx, &downloadOptions) if err != nil { return nil, fmt.Errorf("error downloading az blob: %w", err) } - - bodyStream := resp.Body(azblob.RetryReaderOptions{MaxRetryRequests: a.metadata.GetBlobRetryCount}) - - data, err := io.ReadAll(bodyStream) + blobData := &bytes.Buffer{} + reader := blobDownloadResponse.Body + _, err = blobData.ReadFrom(reader) if err != nil { - return nil, fmt.Errorf("error reading az blob body: %w", err) + return nil, fmt.Errorf("error reading az blob: %w", err) + } + err = reader.Close() + if err != nil { + return nil, fmt.Errorf("error closing az blob reader: %w", err) } var metadata map[string]string @@ -311,45 +354,54 @@ func (a *AzureBlobStorage) get(ctx context.Context, req *bindings.InvokeRequest) return nil, fmt.Errorf("error parsing metadata: %w", err) } + getPropertiesOptions := blob.GetPropertiesOptions{ + AccessConditions: &blob.AccessConditions{}, + } + if fetchMetadata { - props, err := blobURL.GetProperties(ctx, azblob.BlobAccessConditions{}) + props, err := blockBlobClient.GetProperties(ctx, &getPropertiesOptions) if err != nil { return nil, fmt.Errorf("error reading blob metadata: %w", err) } - metadata = props.NewMetadata() + metadata = props.Metadata } return &bindings.InvokeResponse{ - Data: data, + Data: blobData.Bytes(), Metadata: metadata, }, nil } func (a *AzureBlobStorage) delete(ctx context.Context, req *bindings.InvokeRequest) (*bindings.InvokeResponse, error) { - var blobURL azblob.BlockBlobURL - if val, ok := req.Metadata[metadataKeyBlobName]; ok && val != "" { - blobURL = a.getBlobURL(val) - } else { + var blockBlobClient *blockblob.Client + val, ok := req.Metadata[metadataKeyBlobName] + if !ok || val == "" { return nil, ErrMissingBlobName } - deleteSnapshotsOptions := azblob.DeleteSnapshotsOptionNone - if val, ok := req.Metadata[metadataKeyDeleteSnapshots]; ok && val != "" { - deleteSnapshotsOptions = azblob.DeleteSnapshotsOptionType(val) + var deleteSnapshotsOptions blob.DeleteSnapshotsOptionType + if deleteSnapShotOption, ok := req.Metadata[metadataKeyDeleteSnapshots]; ok && val != "" { + deleteSnapshotsOptions = azblob.DeleteSnapshotsOptionType(deleteSnapShotOption) if !a.isValidDeleteSnapshotsOptionType(deleteSnapshotsOptions) { return nil, fmt.Errorf("invalid delete snapshot option type: %s; allowed: %s", deleteSnapshotsOptions, azblob.PossibleDeleteSnapshotsOptionTypeValues()) } } - _, err := blobURL.Delete(ctx, deleteSnapshotsOptions, azblob.BlobAccessConditions{}) + deleteOptions := blob.DeleteOptions{ + DeleteSnapshots: &deleteSnapshotsOptions, + AccessConditions: &blob.AccessConditions{}, + } + + blockBlobClient = a.containerClient.NewBlockBlobClient(val) + _, err := blockBlobClient.Delete(context.Background(), &deleteOptions) return nil, err } func (a *AzureBlobStorage) list(ctx context.Context, req *bindings.InvokeRequest) (*bindings.InvokeResponse, error) { - options := azblob.ListBlobsSegmentOptions{} + options := container.ListBlobsFlatOptions{} hasPayload := false var payload listPayload @@ -360,50 +412,52 @@ func (a *AzureBlobStorage) list(ctx context.Context, req *bindings.InvokeRequest } hasPayload = true } - if hasPayload { - options.Details.Copy = payload.Include.Copy - options.Details.Metadata = payload.Include.Metadata - options.Details.Snapshots = payload.Include.Snapshots - options.Details.UncommittedBlobs = payload.Include.UncommittedBlobs - options.Details.Deleted = payload.Include.Deleted + options.Include.Copy = payload.Include.Copy + options.Include.Metadata = payload.Include.Metadata + options.Include.Snapshots = payload.Include.Snapshots + options.Include.UncommittedBlobs = payload.Include.UncommittedBlobs + options.Include.Deleted = payload.Include.Deleted } if hasPayload && payload.MaxResults != int32(0) { - options.MaxResults = payload.MaxResults + options.MaxResults = ptr.Of(payload.MaxResults) } else { - options.MaxResults = maxResults + options.MaxResults = ptr.Of(int32(maxResults)) } if hasPayload && payload.Prefix != "" { - options.Prefix = payload.Prefix + options.Prefix = ptr.Of(payload.Prefix) } - var initialMarker azblob.Marker + var initialMarker string if hasPayload && payload.Marker != "" { - initialMarker = azblob.Marker{Val: &payload.Marker} + initialMarker = payload.Marker } else { - initialMarker = azblob.Marker{} + initialMarker = "" } + options.Marker = ptr.Of(initialMarker) - var blobs []azblob.BlobItem metadata := map[string]string{} - for currentMaker := initialMarker; currentMaker.NotDone(); { - var listBlob *azblob.ListBlobsFlatSegmentResponse - listBlob, err := a.containerURL.ListBlobsFlatSegment(ctx, currentMaker, options) + blobs := []*container.BlobItem{} + pager := a.containerClient.NewListBlobsFlatPager(&options) + + for pager.More() { + resp, err := pager.NextPage(ctx) if err != nil { return nil, fmt.Errorf("error listing blobs: %w", err) } - blobs = append(blobs, listBlob.Segment.BlobItems...) - + blobs = append(blobs, resp.Segment.BlobItems...) numBlobs := len(blobs) - currentMaker = listBlob.NextMarker - metadata[metadataKeyMarker] = *currentMaker.Val metadata[metadataKeyNumber] = strconv.FormatInt(int64(numBlobs), 10) + metadata[metadataKeyMarker] = "" + if resp.Marker != nil { + metadata[metadataKeyMarker] = *resp.Marker + } - if options.MaxResults-maxResults > 0 { - options.MaxResults -= maxResults + if *options.MaxResults-maxResults > 0 { + *options.MaxResults -= maxResults } else { break } @@ -435,12 +489,6 @@ func (a *AzureBlobStorage) Invoke(ctx context.Context, req *bindings.InvokeReque } } -func (a *AzureBlobStorage) getBlobURL(name string) azblob.BlockBlobURL { - blobURL := a.containerURL.NewBlockBlobURL(name) - - return blobURL -} - func (a *AzureBlobStorage) isValidPublicAccessType(accessType azblob.PublicAccessType) bool { validTypes := azblob.PossiblePublicAccessTypeValues() for _, item := range validTypes { diff --git a/bindings/azure/blobstorage/blobstorage_test.go b/bindings/azure/blobstorage/blobstorage_test.go index d0a459141..52810feab 100644 --- a/bindings/azure/blobstorage/blobstorage_test.go +++ b/bindings/azure/blobstorage/blobstorage_test.go @@ -17,7 +17,7 @@ import ( "context" "testing" - "github.com/Azure/azure-storage-blob-go/azblob" + "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob" "github.com/stretchr/testify/assert" "github.com/dapr/components-contrib/bindings" @@ -39,11 +39,11 @@ func TestParseMetadata(t *testing.T) { meta, err := blobStorage.parseMetadata(m) assert.Nil(t, err) assert.Equal(t, "test", meta.Container) - assert.Equal(t, "account", meta.AccountName) + assert.Equal(t, "account", meta.StorageAccount) // storageAccessKey is parsed in the azauth package assert.Equal(t, true, meta.DecodeBase64) assert.Equal(t, 5, meta.GetBlobRetryCount) - assert.Equal(t, azblob.PublicAccessNone, meta.PublicAccessLevel) + assert.Equal(t, "", string(meta.PublicAccessLevel)) }) t.Run("parse metadata with publicAccessLevel = blob", func(t *testing.T) { @@ -55,7 +55,7 @@ func TestParseMetadata(t *testing.T) { } meta, err := blobStorage.parseMetadata(m) assert.Nil(t, err) - assert.Equal(t, azblob.PublicAccessBlob, meta.PublicAccessLevel) + assert.Equal(t, azblob.PublicAccessTypeBlob, meta.PublicAccessLevel) }) t.Run("parse metadata with publicAccessLevel = container", func(t *testing.T) { @@ -67,7 +67,7 @@ func TestParseMetadata(t *testing.T) { } meta, err := blobStorage.parseMetadata(m) assert.Nil(t, err) - assert.Equal(t, azblob.PublicAccessContainer, meta.PublicAccessLevel) + assert.Equal(t, azblob.PublicAccessTypeContainer, meta.PublicAccessLevel) }) t.Run("parse metadata with invalid publicAccessLevel", func(t *testing.T) { diff --git a/go.mod b/go.mod index 5b94f3034..84ce825b3 100644 --- a/go.mod +++ b/go.mod @@ -18,6 +18,7 @@ require ( github.com/Azure/azure-sdk-for-go/sdk/data/aztables v1.0.1 github.com/Azure/azure-sdk-for-go/sdk/keyvault/azsecrets v0.10.1 github.com/Azure/azure-sdk-for-go/sdk/messaging/azservicebus v1.1.1 + github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v0.5.1 github.com/Azure/azure-storage-blob-go v0.10.0 github.com/Azure/azure-storage-queue-go v0.0.0-20191125232315-636801874cdd github.com/Azure/go-amqp v0.17.5 @@ -133,7 +134,7 @@ require ( github.com/99designs/keyring v1.2.1 // indirect github.com/AthenZ/athenz v1.10.39 // indirect github.com/Azure/azure-pipeline-go v0.2.3 // indirect - github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.1 // indirect github.com/Azure/azure-sdk-for-go/sdk/keyvault/internal v0.7.0 // indirect github.com/Azure/go-autorest v14.2.0+incompatible // indirect github.com/Azure/go-autorest/autorest/azure/cli v0.4.5 // indirect diff --git a/go.sum b/go.sum index 13862b899..72cb6d3dc 100644 --- a/go.sum +++ b/go.sum @@ -110,14 +110,16 @@ github.com/Azure/azure-sdk-for-go/sdk/data/azcosmos v0.3.2/go.mod h1:Fy3bbChFm4c github.com/Azure/azure-sdk-for-go/sdk/data/aztables v1.0.1 h1:bFa9IcjvrCber6gGgDAUZ+I2bO8J7s8JxXmu9fhi2ss= github.com/Azure/azure-sdk-for-go/sdk/data/aztables v1.0.1/go.mod h1:l3wvZkG9oW07GLBW5Cd0WwG5asOfJ8aqE8raUvNzLpk= github.com/Azure/azure-sdk-for-go/sdk/internal v0.7.0/go.mod h1:yqy467j36fJxcRV2TzfVZ1pCb5vxm4BtZPUdYWe/Xo8= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.0 h1:jp0dGvZ7ZK0mgqnTSClMxa5xuRL7NZgHameVYF6BurY= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.0/go.mod h1:eWRD7oawr1Mu1sLCawqVc0CUiF43ia3qQMxLscsKQ9w= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.1 h1:XUNQ4mw+zJmaA2KXzP9JlQiecy1SI+Eog7xVkPiqIbg= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.1/go.mod h1:eWRD7oawr1Mu1sLCawqVc0CUiF43ia3qQMxLscsKQ9w= github.com/Azure/azure-sdk-for-go/sdk/keyvault/azsecrets v0.10.1 h1:AhZnZn4kUKz36bHJ8AK/FH2tH/q3CAkG+Gme+2ibuak= github.com/Azure/azure-sdk-for-go/sdk/keyvault/azsecrets v0.10.1/go.mod h1:S78i9yTr4o/nXlH76bKjGUye9Z2wSxO5Tz7GoDr4vfI= github.com/Azure/azure-sdk-for-go/sdk/keyvault/internal v0.7.0 h1:Lg6BW0VPmCwcMlvOviL3ruHFO+H9tZNqscK0AeuFjGM= github.com/Azure/azure-sdk-for-go/sdk/keyvault/internal v0.7.0/go.mod h1:9V2j0jn9jDEkCkv8w/bKTNppX/d0FVA1ud77xCIP4KA= github.com/Azure/azure-sdk-for-go/sdk/messaging/azservicebus v1.1.1 h1:Zm7A6yKHT3evC/0lquPWJ9hrkRGVIeZOmIvHPv6xV9Q= github.com/Azure/azure-sdk-for-go/sdk/messaging/azservicebus v1.1.1/go.mod h1:LH9XQnMr2ZYxQdVdCrzLO9mxeDyrDFa6wbSI3x5zCZk= +github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v0.5.1 h1:BMTdr+ib5ljLa9MxTJK8x/Ds0MbBb4MfuW5BL0zMJnI= +github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v0.5.1/go.mod h1:c6WvOhtmjNUWbLfOG1qxM/q0SPvQNSVJvolm+C52dIU= github.com/Azure/azure-storage-blob-go v0.6.0/go.mod h1:oGfmITT1V6x//CswqY2gtAHND+xIP64/qL7a5QJix0Y= github.com/Azure/azure-storage-blob-go v0.10.0 h1:evCwGreYo3XLeBV4vSxLbLiYb6e0SzsJiXQVRGsRXxs= github.com/Azure/azure-storage-blob-go v0.10.0/go.mod h1:ep1edmW+kNQx4UfWM9heESNmQdijykocJ0YOxmMX8SE= diff --git a/tests/certification/bindings/azure/blobstorage/blobstorage_test.go b/tests/certification/bindings/azure/blobstorage/blobstorage_test.go index 964b2910d..ad715e91b 100644 --- a/tests/certification/bindings/azure/blobstorage/blobstorage_test.go +++ b/tests/certification/bindings/azure/blobstorage/blobstorage_test.go @@ -39,6 +39,8 @@ import ( "github.com/dapr/components-contrib/tests/certification/flow/sidecar" "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob" + "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/blob" + "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/container" ) const ( @@ -192,12 +194,12 @@ func TestBlobStorage(t *testing.T) { // confirm the deletion. _, invokeSecondGetErr := getBlobRequest(ctx, client, blobName, false) assert.Error(t, invokeSecondGetErr) - assert.Contains(t, invokeSecondGetErr.Error(), "ServiceCode=BlobNotFound") + assert.Contains(t, invokeSecondGetErr.Error(), "ERROR CODE: BlobNotFound") // deleting the key again should fail. _, invokeDeleteErr2 := deleteBlobRequest(ctx, client, blobName, "") assert.Error(t, invokeDeleteErr2) - assert.Contains(t, invokeDeleteErr2.Error(), "ServiceCode=BlobNotFound") + assert.Contains(t, invokeDeleteErr2.Error(), "ERROR CODE: BlobNotFound") return nil } @@ -230,7 +232,7 @@ func TestBlobStorage(t *testing.T) { _, invokeCreateErr := client.InvokeBinding(ctx, invokeCreateRequest) assert.Error(t, invokeCreateErr) - assert.Contains(t, invokeCreateErr.Error(), "ServiceCode=Md5Mismatch") + assert.Contains(t, invokeCreateErr.Error(), "ERROR CODE: Md5Mismatch") return nil } @@ -279,7 +281,7 @@ func TestBlobStorage(t *testing.T) { // confirm the deletion. _, invokeSecondGetErr := getBlobRequest(ctx, client, blobName, false) assert.Error(t, invokeSecondGetErr) - assert.Contains(t, invokeSecondGetErr.Error(), "ServiceCode=BlobNotFound") + assert.Contains(t, invokeSecondGetErr.Error(), "ERROR CODE: BlobNotFound") return nil } @@ -384,9 +386,9 @@ func TestBlobStorage(t *testing.T) { out, invokeGetErr := client.InvokeBinding(ctx, invokeGetRequest) assert.NoError(t, invokeGetErr) - assert.Equal(t, string(out.Data), input) - assert.Contains(t, out.Metadata, "custom") - assert.Equal(t, out.Metadata["custom"], "hello-world") + assert.Equal(t, input, string(out.Data)) + assert.Contains(t, out.Metadata, "Custom") + assert.Equal(t, "hello-world", out.Metadata["Custom"]) out, invokeErr := listBlobRequest(ctx, client, "", "", -1, true, false, false, false, false) assert.NoError(t, invokeErr) @@ -419,7 +421,7 @@ func TestBlobStorage(t *testing.T) { // confirm the deletion. _, invokeSecondGetErr := getBlobRequest(ctx, client, "filename.txt", false) assert.Error(t, invokeSecondGetErr) - assert.Contains(t, invokeSecondGetErr.Error(), "ServiceCode=BlobNotFound") + assert.Contains(t, invokeSecondGetErr.Error(), "ERROR CODE: BlobNotFound") return nil } @@ -505,8 +507,8 @@ func TestBlobStorage(t *testing.T) { unmarshalErr := json.Unmarshal(out.Data, &output) assert.NoError(t, unmarshalErr) - assert.Equal(t, len(output), 1) - assert.Equal(t, output[0]["Name"], "prefixA/filename.txt") + assert.Equal(t, 1, len(output)) + assert.Contains(t, output[0]["Name"], "prefixA") nextMarker := out.Metadata["marker"] @@ -518,8 +520,8 @@ func TestBlobStorage(t *testing.T) { err2 := json.Unmarshal(out2.Data, &output2) assert.NoError(t, err2) - assert.Equal(t, len(output2), 1) - assert.Equal(t, output2[0]["Name"], "prefixAfilename.txt") + assert.Equal(t, 1, len(output2)) + assert.Contains(t, output2[0]["Name"], "prefixA") // cleanup. _, invokeDeleteErr1 := deleteBlobRequest(ctx, client, "prefixA/filename.txt", "") @@ -530,15 +532,15 @@ func TestBlobStorage(t *testing.T) { assert.NoError(t, invokeDeleteErr3) // list deleted items with prefix. - out3, listErr3 := listBlobRequest(ctx, client, "prefixA", "", -1, false, false, false, false, true) + out3, listErr3 := listBlobRequest(ctx, client, "prefixA/", "", -1, false, false, false, false, true) assert.NoError(t, listErr3) // this will only return the deleted items if soft delete policy is enabled for the blob service. - assert.Equal(t, out3.Metadata["number"], "2") + assert.Equal(t, "1", out3.Metadata["number"]) var output3 []map[string]interface{} err3 := json.Unmarshal(out3.Data, &output3) assert.NoError(t, err3) - assert.Equal(t, len(output3), 2) + assert.Equal(t, len(output3), 1) return nil } @@ -553,17 +555,15 @@ func TestBlobStorage(t *testing.T) { defer client.Close() cred, _ := azblob.NewSharedKeyCredential(os.Getenv("AzureBlobStorageAccount"), os.Getenv("AzureBlobStorageAccessKey")) - service, _ := azblob.NewServiceClientWithSharedKey(fmt.Sprintf("https://%s.blob.core.windows.net/", os.Getenv("AzureBlobStorageAccount")), cred, nil) - containerClient, _ := service.NewContainerClient(os.Getenv("AzureBlobStorageContainer")) + containerClient, _ := container.NewClientWithSharedKeyCredential(fmt.Sprintf("https://%s.blob.core.windows.net/%s", os.Getenv("AzureBlobStorageAccount"), os.Getenv("AzureBlobStorageContainer")), cred, nil) - blobClient, _ := containerClient.NewBlockBlobClient("snapshotthis.txt") - uploadResp, uploadErr := blobClient.UploadBuffer( + blobClient := containerClient.NewBlockBlobClient("snapshotthis.txt") + _, uploadErr := blobClient.UploadBuffer( ctx, []byte("some example content"), - azblob.UploadOption{}) //nolint:exhaustivestruct + &azblob.UploadBufferOptions{}) //nolint:exhaustivestruct assert.NoError(t, uploadErr) - uploadResp.Body.Close() _, createSnapshotErr := blobClient.CreateSnapshot( - ctx, &azblob.BlobCreateSnapshotOptions{}) //nolint:exhaustivestruct + ctx, &blob.CreateSnapshotOptions{}) //nolint:exhaustivestruct assert.NoError(t, createSnapshotErr) // list the contents of the container including snapshots for the specific blob only. @@ -582,7 +582,7 @@ func TestBlobStorage(t *testing.T) { // create another snapshot. _, createSnapshotErr2 := blobClient.CreateSnapshot( - ctx, &azblob.BlobCreateSnapshotOptions{}) //nolint:exhaustivestruct + ctx, &blob.CreateSnapshotOptions{}) //nolint:exhaustivestruct assert.NoError(t, createSnapshotErr2) // delete base blob and snapshots all at once. diff --git a/tests/certification/bindings/azure/blobstorage/go.mod b/tests/certification/bindings/azure/blobstorage/go.mod index df4503ea5..39df468c9 100644 --- a/tests/certification/bindings/azure/blobstorage/go.mod +++ b/tests/certification/bindings/azure/blobstorage/go.mod @@ -3,7 +3,7 @@ module github.com/dapr/components-contrib/tests/certification/bindings/azure/blo go 1.19 require ( - github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v0.4.1 + github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v0.5.1 github.com/dapr/components-contrib v1.9.1-0.20221025205611-e38369028650 github.com/dapr/components-contrib/tests/certification v0.0.0-20211130185200-4918900c09e1 github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e @@ -19,7 +19,7 @@ require ( github.com/Azure/azure-pipeline-go v0.2.3 // indirect github.com/Azure/azure-sdk-for-go/sdk/azcore v1.1.4 // indirect github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.1.0 // indirect - github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.1 // indirect github.com/Azure/azure-storage-blob-go v0.10.0 // indirect github.com/Azure/azure-storage-queue-go v0.0.0-20191125232315-636801874cdd // indirect github.com/Azure/go-autorest v14.2.0+incompatible // indirect diff --git a/tests/certification/bindings/azure/blobstorage/go.sum b/tests/certification/bindings/azure/blobstorage/go.sum index 3a90fb97c..0200c2d33 100644 --- a/tests/certification/bindings/azure/blobstorage/go.sum +++ b/tests/certification/bindings/azure/blobstorage/go.sum @@ -45,10 +45,10 @@ github.com/Azure/azure-sdk-for-go/sdk/azcore v1.1.4 h1:pqrAR74b6EoR4kcxF7L7Wg2B8 github.com/Azure/azure-sdk-for-go/sdk/azcore v1.1.4/go.mod h1:uGG2W01BaETf0Ozp+QxxKJdMBNRWPdstHG0Fmdwn1/U= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.1.0 h1:QkAcEIAKbNL4KoFr4SathZPhDhF4mVwpBMFlYjyAqy8= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.1.0/go.mod h1:bhXu1AjYL+wutSL/kpSq6s7733q2Rb0yuot9Zgfqa/0= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.0 h1:jp0dGvZ7ZK0mgqnTSClMxa5xuRL7NZgHameVYF6BurY= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.0/go.mod h1:eWRD7oawr1Mu1sLCawqVc0CUiF43ia3qQMxLscsKQ9w= -github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v0.4.1 h1:QSdcrd/UFJv6Bp/CfoVf2SrENpFn9P6Yh8yb+xNhYMM= -github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v0.4.1/go.mod h1:eZ4g6GUvXiGulfIbbhh1Xr4XwUYaYaWMqzGD/284wCA= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.1 h1:XUNQ4mw+zJmaA2KXzP9JlQiecy1SI+Eog7xVkPiqIbg= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.1/go.mod h1:eWRD7oawr1Mu1sLCawqVc0CUiF43ia3qQMxLscsKQ9w= +github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v0.5.1 h1:BMTdr+ib5ljLa9MxTJK8x/Ds0MbBb4MfuW5BL0zMJnI= +github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v0.5.1/go.mod h1:c6WvOhtmjNUWbLfOG1qxM/q0SPvQNSVJvolm+C52dIU= github.com/Azure/azure-storage-blob-go v0.10.0 h1:evCwGreYo3XLeBV4vSxLbLiYb6e0SzsJiXQVRGsRXxs= github.com/Azure/azure-storage-blob-go v0.10.0/go.mod h1:ep1edmW+kNQx4UfWM9heESNmQdijykocJ0YOxmMX8SE= github.com/Azure/azure-storage-queue-go v0.0.0-20191125232315-636801874cdd h1:b3wyxBl3vvr15tUAziPBPK354y+LSdfPCpex5oBttHo= diff --git a/tests/certification/bindings/azure/cosmosdb/go.mod b/tests/certification/bindings/azure/cosmosdb/go.mod index fd5bfac03..886fc97c8 100644 --- a/tests/certification/bindings/azure/cosmosdb/go.mod +++ b/tests/certification/bindings/azure/cosmosdb/go.mod @@ -22,7 +22,7 @@ require ( github.com/Azure/azure-sdk-for-go/sdk/azcore v1.1.4 // indirect github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.1.0 // indirect github.com/Azure/azure-sdk-for-go/sdk/data/azcosmos v0.3.2 // indirect - github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.1 // indirect github.com/Azure/azure-storage-blob-go v0.10.0 // indirect github.com/Azure/azure-storage-queue-go v0.0.0-20191125232315-636801874cdd // indirect github.com/Azure/go-autorest v14.2.0+incompatible // indirect diff --git a/tests/certification/bindings/azure/cosmosdb/go.sum b/tests/certification/bindings/azure/cosmosdb/go.sum index b63e24fa2..82ff71cf6 100644 --- a/tests/certification/bindings/azure/cosmosdb/go.sum +++ b/tests/certification/bindings/azure/cosmosdb/go.sum @@ -49,8 +49,8 @@ github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.1.0 h1:QkAcEIAKbNL4KoFr4Sath github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.1.0/go.mod h1:bhXu1AjYL+wutSL/kpSq6s7733q2Rb0yuot9Zgfqa/0= github.com/Azure/azure-sdk-for-go/sdk/data/azcosmos v0.3.2 h1:yJegJqjhrMJ3Oe5s43jOTGL2AsE7pJyx+7Yqls/65tw= github.com/Azure/azure-sdk-for-go/sdk/data/azcosmos v0.3.2/go.mod h1:Fy3bbChFm4cZn6oIxYYqKB2FG3rBDxk3NZDLDJCHl+Q= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.0 h1:jp0dGvZ7ZK0mgqnTSClMxa5xuRL7NZgHameVYF6BurY= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.0/go.mod h1:eWRD7oawr1Mu1sLCawqVc0CUiF43ia3qQMxLscsKQ9w= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.1 h1:XUNQ4mw+zJmaA2KXzP9JlQiecy1SI+Eog7xVkPiqIbg= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.1/go.mod h1:eWRD7oawr1Mu1sLCawqVc0CUiF43ia3qQMxLscsKQ9w= github.com/Azure/azure-storage-blob-go v0.10.0 h1:evCwGreYo3XLeBV4vSxLbLiYb6e0SzsJiXQVRGsRXxs= github.com/Azure/azure-storage-blob-go v0.10.0/go.mod h1:ep1edmW+kNQx4UfWM9heESNmQdijykocJ0YOxmMX8SE= github.com/Azure/azure-storage-queue-go v0.0.0-20191125232315-636801874cdd h1:b3wyxBl3vvr15tUAziPBPK354y+LSdfPCpex5oBttHo= diff --git a/tests/certification/bindings/azure/eventhubs/go.mod b/tests/certification/bindings/azure/eventhubs/go.mod index 231983040..e700c189c 100644 --- a/tests/certification/bindings/azure/eventhubs/go.mod +++ b/tests/certification/bindings/azure/eventhubs/go.mod @@ -22,7 +22,7 @@ require ( github.com/Azure/azure-sdk-for-go v67.0.0+incompatible // indirect github.com/Azure/azure-sdk-for-go/sdk/azcore v1.1.4 // indirect github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.1.0 // indirect - github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.1 // indirect github.com/Azure/azure-storage-blob-go v0.10.0 // indirect github.com/Azure/azure-storage-queue-go v0.0.0-20191125232315-636801874cdd // indirect github.com/Azure/go-amqp v0.17.5 // indirect diff --git a/tests/certification/bindings/azure/eventhubs/go.sum b/tests/certification/bindings/azure/eventhubs/go.sum index 6e62d9e58..2ffcf1e77 100644 --- a/tests/certification/bindings/azure/eventhubs/go.sum +++ b/tests/certification/bindings/azure/eventhubs/go.sum @@ -51,8 +51,8 @@ github.com/Azure/azure-sdk-for-go/sdk/azcore v1.1.4 h1:pqrAR74b6EoR4kcxF7L7Wg2B8 github.com/Azure/azure-sdk-for-go/sdk/azcore v1.1.4/go.mod h1:uGG2W01BaETf0Ozp+QxxKJdMBNRWPdstHG0Fmdwn1/U= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.1.0 h1:QkAcEIAKbNL4KoFr4SathZPhDhF4mVwpBMFlYjyAqy8= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.1.0/go.mod h1:bhXu1AjYL+wutSL/kpSq6s7733q2Rb0yuot9Zgfqa/0= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.0 h1:jp0dGvZ7ZK0mgqnTSClMxa5xuRL7NZgHameVYF6BurY= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.0/go.mod h1:eWRD7oawr1Mu1sLCawqVc0CUiF43ia3qQMxLscsKQ9w= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.1 h1:XUNQ4mw+zJmaA2KXzP9JlQiecy1SI+Eog7xVkPiqIbg= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.1/go.mod h1:eWRD7oawr1Mu1sLCawqVc0CUiF43ia3qQMxLscsKQ9w= github.com/Azure/azure-storage-blob-go v0.6.0/go.mod h1:oGfmITT1V6x//CswqY2gtAHND+xIP64/qL7a5QJix0Y= github.com/Azure/azure-storage-blob-go v0.10.0 h1:evCwGreYo3XLeBV4vSxLbLiYb6e0SzsJiXQVRGsRXxs= github.com/Azure/azure-storage-blob-go v0.10.0/go.mod h1:ep1edmW+kNQx4UfWM9heESNmQdijykocJ0YOxmMX8SE= diff --git a/tests/certification/bindings/azure/servicebusqueues/go.mod b/tests/certification/bindings/azure/servicebusqueues/go.mod index b03a1078a..3f276e42d 100644 --- a/tests/certification/bindings/azure/servicebusqueues/go.mod +++ b/tests/certification/bindings/azure/servicebusqueues/go.mod @@ -19,7 +19,7 @@ require ( github.com/Azure/azure-pipeline-go v0.2.3 // indirect github.com/Azure/azure-sdk-for-go/sdk/azcore v1.1.4 // indirect github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.1.0 // indirect - github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.1 // indirect github.com/Azure/azure-sdk-for-go/sdk/messaging/azservicebus v1.1.1 // indirect github.com/Azure/azure-storage-blob-go v0.10.0 // indirect github.com/Azure/azure-storage-queue-go v0.0.0-20191125232315-636801874cdd // indirect diff --git a/tests/certification/bindings/azure/servicebusqueues/go.sum b/tests/certification/bindings/azure/servicebusqueues/go.sum index d6685e8d6..aab8e8327 100644 --- a/tests/certification/bindings/azure/servicebusqueues/go.sum +++ b/tests/certification/bindings/azure/servicebusqueues/go.sum @@ -45,8 +45,8 @@ github.com/Azure/azure-sdk-for-go/sdk/azcore v1.1.4 h1:pqrAR74b6EoR4kcxF7L7Wg2B8 github.com/Azure/azure-sdk-for-go/sdk/azcore v1.1.4/go.mod h1:uGG2W01BaETf0Ozp+QxxKJdMBNRWPdstHG0Fmdwn1/U= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.1.0 h1:QkAcEIAKbNL4KoFr4SathZPhDhF4mVwpBMFlYjyAqy8= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.1.0/go.mod h1:bhXu1AjYL+wutSL/kpSq6s7733q2Rb0yuot9Zgfqa/0= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.0 h1:jp0dGvZ7ZK0mgqnTSClMxa5xuRL7NZgHameVYF6BurY= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.0/go.mod h1:eWRD7oawr1Mu1sLCawqVc0CUiF43ia3qQMxLscsKQ9w= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.1 h1:XUNQ4mw+zJmaA2KXzP9JlQiecy1SI+Eog7xVkPiqIbg= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.1/go.mod h1:eWRD7oawr1Mu1sLCawqVc0CUiF43ia3qQMxLscsKQ9w= github.com/Azure/azure-sdk-for-go/sdk/messaging/azservicebus v1.1.1 h1:Zm7A6yKHT3evC/0lquPWJ9hrkRGVIeZOmIvHPv6xV9Q= github.com/Azure/azure-sdk-for-go/sdk/messaging/azservicebus v1.1.1/go.mod h1:LH9XQnMr2ZYxQdVdCrzLO9mxeDyrDFa6wbSI3x5zCZk= github.com/Azure/azure-storage-blob-go v0.10.0 h1:evCwGreYo3XLeBV4vSxLbLiYb6e0SzsJiXQVRGsRXxs= diff --git a/tests/certification/bindings/azure/storagequeues/go.mod b/tests/certification/bindings/azure/storagequeues/go.mod index 64645190d..6698ef29e 100644 --- a/tests/certification/bindings/azure/storagequeues/go.mod +++ b/tests/certification/bindings/azure/storagequeues/go.mod @@ -19,7 +19,7 @@ require ( github.com/Azure/azure-pipeline-go v0.2.3 // indirect github.com/Azure/azure-sdk-for-go/sdk/azcore v1.1.4 // indirect github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.1.0 // indirect - github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.1 // indirect github.com/Azure/azure-storage-blob-go v0.10.0 // indirect github.com/Azure/azure-storage-queue-go v0.0.0-20191125232315-636801874cdd // indirect github.com/Azure/go-autorest v14.2.0+incompatible // indirect diff --git a/tests/certification/bindings/azure/storagequeues/go.sum b/tests/certification/bindings/azure/storagequeues/go.sum index b9d06c9b6..9776a9019 100644 --- a/tests/certification/bindings/azure/storagequeues/go.sum +++ b/tests/certification/bindings/azure/storagequeues/go.sum @@ -45,8 +45,8 @@ github.com/Azure/azure-sdk-for-go/sdk/azcore v1.1.4 h1:pqrAR74b6EoR4kcxF7L7Wg2B8 github.com/Azure/azure-sdk-for-go/sdk/azcore v1.1.4/go.mod h1:uGG2W01BaETf0Ozp+QxxKJdMBNRWPdstHG0Fmdwn1/U= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.1.0 h1:QkAcEIAKbNL4KoFr4SathZPhDhF4mVwpBMFlYjyAqy8= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.1.0/go.mod h1:bhXu1AjYL+wutSL/kpSq6s7733q2Rb0yuot9Zgfqa/0= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.0 h1:jp0dGvZ7ZK0mgqnTSClMxa5xuRL7NZgHameVYF6BurY= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.0/go.mod h1:eWRD7oawr1Mu1sLCawqVc0CUiF43ia3qQMxLscsKQ9w= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.1 h1:XUNQ4mw+zJmaA2KXzP9JlQiecy1SI+Eog7xVkPiqIbg= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.1/go.mod h1:eWRD7oawr1Mu1sLCawqVc0CUiF43ia3qQMxLscsKQ9w= github.com/Azure/azure-storage-blob-go v0.10.0 h1:evCwGreYo3XLeBV4vSxLbLiYb6e0SzsJiXQVRGsRXxs= github.com/Azure/azure-storage-blob-go v0.10.0/go.mod h1:ep1edmW+kNQx4UfWM9heESNmQdijykocJ0YOxmMX8SE= github.com/Azure/azure-storage-queue-go v0.0.0-20191125232315-636801874cdd h1:b3wyxBl3vvr15tUAziPBPK354y+LSdfPCpex5oBttHo= diff --git a/tests/certification/pubsub/azure/eventhubs/go.mod b/tests/certification/pubsub/azure/eventhubs/go.mod index 7055be7b1..a49ec755b 100644 --- a/tests/certification/pubsub/azure/eventhubs/go.mod +++ b/tests/certification/pubsub/azure/eventhubs/go.mod @@ -22,7 +22,7 @@ require ( github.com/Azure/azure-sdk-for-go v67.0.0+incompatible // indirect github.com/Azure/azure-sdk-for-go/sdk/azcore v1.1.4 // indirect github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.1.0 // indirect - github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.1 // indirect github.com/Azure/azure-storage-blob-go v0.10.0 // indirect github.com/Azure/azure-storage-queue-go v0.0.0-20191125232315-636801874cdd // indirect github.com/Azure/go-amqp v0.17.5 // indirect diff --git a/tests/certification/pubsub/azure/eventhubs/go.sum b/tests/certification/pubsub/azure/eventhubs/go.sum index 7848bdb15..bba9d03a7 100644 --- a/tests/certification/pubsub/azure/eventhubs/go.sum +++ b/tests/certification/pubsub/azure/eventhubs/go.sum @@ -51,8 +51,8 @@ github.com/Azure/azure-sdk-for-go/sdk/azcore v1.1.4 h1:pqrAR74b6EoR4kcxF7L7Wg2B8 github.com/Azure/azure-sdk-for-go/sdk/azcore v1.1.4/go.mod h1:uGG2W01BaETf0Ozp+QxxKJdMBNRWPdstHG0Fmdwn1/U= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.1.0 h1:QkAcEIAKbNL4KoFr4SathZPhDhF4mVwpBMFlYjyAqy8= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.1.0/go.mod h1:bhXu1AjYL+wutSL/kpSq6s7733q2Rb0yuot9Zgfqa/0= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.0 h1:jp0dGvZ7ZK0mgqnTSClMxa5xuRL7NZgHameVYF6BurY= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.0/go.mod h1:eWRD7oawr1Mu1sLCawqVc0CUiF43ia3qQMxLscsKQ9w= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.1 h1:XUNQ4mw+zJmaA2KXzP9JlQiecy1SI+Eog7xVkPiqIbg= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.1/go.mod h1:eWRD7oawr1Mu1sLCawqVc0CUiF43ia3qQMxLscsKQ9w= github.com/Azure/azure-storage-blob-go v0.6.0/go.mod h1:oGfmITT1V6x//CswqY2gtAHND+xIP64/qL7a5QJix0Y= github.com/Azure/azure-storage-blob-go v0.10.0 h1:evCwGreYo3XLeBV4vSxLbLiYb6e0SzsJiXQVRGsRXxs= github.com/Azure/azure-storage-blob-go v0.10.0/go.mod h1:ep1edmW+kNQx4UfWM9heESNmQdijykocJ0YOxmMX8SE= diff --git a/tests/certification/pubsub/azure/servicebus/topics/go.mod b/tests/certification/pubsub/azure/servicebus/topics/go.mod index 62e0f47b8..eaf00930e 100644 --- a/tests/certification/pubsub/azure/servicebus/topics/go.mod +++ b/tests/certification/pubsub/azure/servicebus/topics/go.mod @@ -20,7 +20,7 @@ require ( github.com/Azure/azure-pipeline-go v0.2.3 // indirect github.com/Azure/azure-sdk-for-go/sdk/azcore v1.1.4 // indirect github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.1.0 // indirect - github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.1 // indirect github.com/Azure/azure-sdk-for-go/sdk/messaging/azservicebus v1.1.1 // indirect github.com/Azure/azure-storage-blob-go v0.10.0 // indirect github.com/Azure/azure-storage-queue-go v0.0.0-20191125232315-636801874cdd // indirect diff --git a/tests/certification/pubsub/azure/servicebus/topics/go.sum b/tests/certification/pubsub/azure/servicebus/topics/go.sum index d6685e8d6..aab8e8327 100644 --- a/tests/certification/pubsub/azure/servicebus/topics/go.sum +++ b/tests/certification/pubsub/azure/servicebus/topics/go.sum @@ -45,8 +45,8 @@ github.com/Azure/azure-sdk-for-go/sdk/azcore v1.1.4 h1:pqrAR74b6EoR4kcxF7L7Wg2B8 github.com/Azure/azure-sdk-for-go/sdk/azcore v1.1.4/go.mod h1:uGG2W01BaETf0Ozp+QxxKJdMBNRWPdstHG0Fmdwn1/U= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.1.0 h1:QkAcEIAKbNL4KoFr4SathZPhDhF4mVwpBMFlYjyAqy8= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.1.0/go.mod h1:bhXu1AjYL+wutSL/kpSq6s7733q2Rb0yuot9Zgfqa/0= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.0 h1:jp0dGvZ7ZK0mgqnTSClMxa5xuRL7NZgHameVYF6BurY= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.0/go.mod h1:eWRD7oawr1Mu1sLCawqVc0CUiF43ia3qQMxLscsKQ9w= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.1 h1:XUNQ4mw+zJmaA2KXzP9JlQiecy1SI+Eog7xVkPiqIbg= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.1/go.mod h1:eWRD7oawr1Mu1sLCawqVc0CUiF43ia3qQMxLscsKQ9w= github.com/Azure/azure-sdk-for-go/sdk/messaging/azservicebus v1.1.1 h1:Zm7A6yKHT3evC/0lquPWJ9hrkRGVIeZOmIvHPv6xV9Q= github.com/Azure/azure-sdk-for-go/sdk/messaging/azservicebus v1.1.1/go.mod h1:LH9XQnMr2ZYxQdVdCrzLO9mxeDyrDFa6wbSI3x5zCZk= github.com/Azure/azure-storage-blob-go v0.10.0 h1:evCwGreYo3XLeBV4vSxLbLiYb6e0SzsJiXQVRGsRXxs= diff --git a/tests/certification/secretstores/azure/keyvault/go.mod b/tests/certification/secretstores/azure/keyvault/go.mod index 77c7dd5d7..50595d243 100644 --- a/tests/certification/secretstores/azure/keyvault/go.mod +++ b/tests/certification/secretstores/azure/keyvault/go.mod @@ -18,7 +18,7 @@ require ( github.com/Azure/azure-pipeline-go v0.2.3 // indirect github.com/Azure/azure-sdk-for-go/sdk/azcore v1.1.4 // indirect github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.1.0 // indirect - github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.1 // indirect github.com/Azure/azure-sdk-for-go/sdk/keyvault/azsecrets v0.10.1 // indirect github.com/Azure/azure-sdk-for-go/sdk/keyvault/internal v0.7.0 // indirect github.com/Azure/azure-storage-blob-go v0.10.0 // indirect diff --git a/tests/certification/secretstores/azure/keyvault/go.sum b/tests/certification/secretstores/azure/keyvault/go.sum index b6d23539f..4fa12be75 100644 --- a/tests/certification/secretstores/azure/keyvault/go.sum +++ b/tests/certification/secretstores/azure/keyvault/go.sum @@ -45,8 +45,8 @@ github.com/Azure/azure-sdk-for-go/sdk/azcore v1.1.4 h1:pqrAR74b6EoR4kcxF7L7Wg2B8 github.com/Azure/azure-sdk-for-go/sdk/azcore v1.1.4/go.mod h1:uGG2W01BaETf0Ozp+QxxKJdMBNRWPdstHG0Fmdwn1/U= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.1.0 h1:QkAcEIAKbNL4KoFr4SathZPhDhF4mVwpBMFlYjyAqy8= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.1.0/go.mod h1:bhXu1AjYL+wutSL/kpSq6s7733q2Rb0yuot9Zgfqa/0= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.0 h1:jp0dGvZ7ZK0mgqnTSClMxa5xuRL7NZgHameVYF6BurY= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.0/go.mod h1:eWRD7oawr1Mu1sLCawqVc0CUiF43ia3qQMxLscsKQ9w= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.1 h1:XUNQ4mw+zJmaA2KXzP9JlQiecy1SI+Eog7xVkPiqIbg= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.1/go.mod h1:eWRD7oawr1Mu1sLCawqVc0CUiF43ia3qQMxLscsKQ9w= github.com/Azure/azure-sdk-for-go/sdk/keyvault/azsecrets v0.10.1 h1:AhZnZn4kUKz36bHJ8AK/FH2tH/q3CAkG+Gme+2ibuak= github.com/Azure/azure-sdk-for-go/sdk/keyvault/azsecrets v0.10.1/go.mod h1:S78i9yTr4o/nXlH76bKjGUye9Z2wSxO5Tz7GoDr4vfI= github.com/Azure/azure-sdk-for-go/sdk/keyvault/internal v0.7.0 h1:Lg6BW0VPmCwcMlvOviL3ruHFO+H9tZNqscK0AeuFjGM= diff --git a/tests/certification/state/azure/blobstorage/go.mod b/tests/certification/state/azure/blobstorage/go.mod index 5022f1279..b7c33bfbe 100644 --- a/tests/certification/state/azure/blobstorage/go.mod +++ b/tests/certification/state/azure/blobstorage/go.mod @@ -18,7 +18,7 @@ require ( github.com/Azure/azure-pipeline-go v0.2.3 // indirect github.com/Azure/azure-sdk-for-go/sdk/azcore v1.1.4 // indirect github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.1.0 // indirect - github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.1 // indirect github.com/Azure/azure-storage-blob-go v0.10.0 // indirect github.com/Azure/azure-storage-queue-go v0.0.0-20191125232315-636801874cdd // indirect github.com/Azure/go-autorest v14.2.0+incompatible // indirect diff --git a/tests/certification/state/azure/blobstorage/go.sum b/tests/certification/state/azure/blobstorage/go.sum index e1c955cbc..3b5acc6ec 100644 --- a/tests/certification/state/azure/blobstorage/go.sum +++ b/tests/certification/state/azure/blobstorage/go.sum @@ -45,8 +45,8 @@ github.com/Azure/azure-sdk-for-go/sdk/azcore v1.1.4 h1:pqrAR74b6EoR4kcxF7L7Wg2B8 github.com/Azure/azure-sdk-for-go/sdk/azcore v1.1.4/go.mod h1:uGG2W01BaETf0Ozp+QxxKJdMBNRWPdstHG0Fmdwn1/U= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.1.0 h1:QkAcEIAKbNL4KoFr4SathZPhDhF4mVwpBMFlYjyAqy8= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.1.0/go.mod h1:bhXu1AjYL+wutSL/kpSq6s7733q2Rb0yuot9Zgfqa/0= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.0 h1:jp0dGvZ7ZK0mgqnTSClMxa5xuRL7NZgHameVYF6BurY= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.0/go.mod h1:eWRD7oawr1Mu1sLCawqVc0CUiF43ia3qQMxLscsKQ9w= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.1 h1:XUNQ4mw+zJmaA2KXzP9JlQiecy1SI+Eog7xVkPiqIbg= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.1/go.mod h1:eWRD7oawr1Mu1sLCawqVc0CUiF43ia3qQMxLscsKQ9w= github.com/Azure/azure-storage-blob-go v0.10.0 h1:evCwGreYo3XLeBV4vSxLbLiYb6e0SzsJiXQVRGsRXxs= github.com/Azure/azure-storage-blob-go v0.10.0/go.mod h1:ep1edmW+kNQx4UfWM9heESNmQdijykocJ0YOxmMX8SE= github.com/Azure/azure-storage-queue-go v0.0.0-20191125232315-636801874cdd h1:b3wyxBl3vvr15tUAziPBPK354y+LSdfPCpex5oBttHo= diff --git a/tests/certification/state/azure/cosmosdb/go.mod b/tests/certification/state/azure/cosmosdb/go.mod index 8dbfc9a34..44f1f6f01 100644 --- a/tests/certification/state/azure/cosmosdb/go.mod +++ b/tests/certification/state/azure/cosmosdb/go.mod @@ -20,7 +20,7 @@ require ( github.com/Azure/azure-sdk-for-go/sdk/azcore v1.1.4 // indirect github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.1.0 // indirect github.com/Azure/azure-sdk-for-go/sdk/data/azcosmos v0.3.2 // indirect - github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.1 // indirect github.com/Azure/azure-storage-blob-go v0.10.0 // indirect github.com/Azure/azure-storage-queue-go v0.0.0-20191125232315-636801874cdd // indirect github.com/Azure/go-autorest v14.2.0+incompatible // indirect diff --git a/tests/certification/state/azure/cosmosdb/go.sum b/tests/certification/state/azure/cosmosdb/go.sum index 5f83b83bc..e1969c129 100644 --- a/tests/certification/state/azure/cosmosdb/go.sum +++ b/tests/certification/state/azure/cosmosdb/go.sum @@ -49,8 +49,8 @@ github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.1.0 h1:QkAcEIAKbNL4KoFr4Sath github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.1.0/go.mod h1:bhXu1AjYL+wutSL/kpSq6s7733q2Rb0yuot9Zgfqa/0= github.com/Azure/azure-sdk-for-go/sdk/data/azcosmos v0.3.2 h1:yJegJqjhrMJ3Oe5s43jOTGL2AsE7pJyx+7Yqls/65tw= github.com/Azure/azure-sdk-for-go/sdk/data/azcosmos v0.3.2/go.mod h1:Fy3bbChFm4cZn6oIxYYqKB2FG3rBDxk3NZDLDJCHl+Q= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.0 h1:jp0dGvZ7ZK0mgqnTSClMxa5xuRL7NZgHameVYF6BurY= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.0/go.mod h1:eWRD7oawr1Mu1sLCawqVc0CUiF43ia3qQMxLscsKQ9w= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.1 h1:XUNQ4mw+zJmaA2KXzP9JlQiecy1SI+Eog7xVkPiqIbg= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.1/go.mod h1:eWRD7oawr1Mu1sLCawqVc0CUiF43ia3qQMxLscsKQ9w= github.com/Azure/azure-storage-blob-go v0.10.0 h1:evCwGreYo3XLeBV4vSxLbLiYb6e0SzsJiXQVRGsRXxs= github.com/Azure/azure-storage-blob-go v0.10.0/go.mod h1:ep1edmW+kNQx4UfWM9heESNmQdijykocJ0YOxmMX8SE= github.com/Azure/azure-storage-queue-go v0.0.0-20191125232315-636801874cdd h1:b3wyxBl3vvr15tUAziPBPK354y+LSdfPCpex5oBttHo= diff --git a/tests/certification/state/azure/tablestorage/go.mod b/tests/certification/state/azure/tablestorage/go.mod index c7ad889bc..b6a64984a 100644 --- a/tests/certification/state/azure/tablestorage/go.mod +++ b/tests/certification/state/azure/tablestorage/go.mod @@ -19,7 +19,7 @@ require ( github.com/Azure/azure-sdk-for-go/sdk/azcore v1.1.4 // indirect github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.1.0 // indirect github.com/Azure/azure-sdk-for-go/sdk/data/aztables v1.0.1 // indirect - github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.1 // indirect github.com/Azure/azure-storage-blob-go v0.10.0 // indirect github.com/Azure/azure-storage-queue-go v0.0.0-20191125232315-636801874cdd // indirect github.com/Azure/go-autorest v14.2.0+incompatible // indirect diff --git a/tests/certification/state/azure/tablestorage/go.sum b/tests/certification/state/azure/tablestorage/go.sum index a592f8d13..658835afc 100644 --- a/tests/certification/state/azure/tablestorage/go.sum +++ b/tests/certification/state/azure/tablestorage/go.sum @@ -47,8 +47,8 @@ github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.1.0 h1:QkAcEIAKbNL4KoFr4Sath github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.1.0/go.mod h1:bhXu1AjYL+wutSL/kpSq6s7733q2Rb0yuot9Zgfqa/0= github.com/Azure/azure-sdk-for-go/sdk/data/aztables v1.0.1 h1:bFa9IcjvrCber6gGgDAUZ+I2bO8J7s8JxXmu9fhi2ss= github.com/Azure/azure-sdk-for-go/sdk/data/aztables v1.0.1/go.mod h1:l3wvZkG9oW07GLBW5Cd0WwG5asOfJ8aqE8raUvNzLpk= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.0 h1:jp0dGvZ7ZK0mgqnTSClMxa5xuRL7NZgHameVYF6BurY= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.0/go.mod h1:eWRD7oawr1Mu1sLCawqVc0CUiF43ia3qQMxLscsKQ9w= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.1 h1:XUNQ4mw+zJmaA2KXzP9JlQiecy1SI+Eog7xVkPiqIbg= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.1/go.mod h1:eWRD7oawr1Mu1sLCawqVc0CUiF43ia3qQMxLscsKQ9w= github.com/Azure/azure-storage-blob-go v0.10.0 h1:evCwGreYo3XLeBV4vSxLbLiYb6e0SzsJiXQVRGsRXxs= github.com/Azure/azure-storage-blob-go v0.10.0/go.mod h1:ep1edmW+kNQx4UfWM9heESNmQdijykocJ0YOxmMX8SE= github.com/Azure/azure-storage-queue-go v0.0.0-20191125232315-636801874cdd h1:b3wyxBl3vvr15tUAziPBPK354y+LSdfPCpex5oBttHo= From c3027b8fb1ae884366b56c083884e44e119e8f31 Mon Sep 17 00:00:00 2001 From: Bernd Verst <4535280+berndverst@users.noreply.github.com> Date: Thu, 17 Nov 2022 11:52:37 -0800 Subject: [PATCH 52/87] some small improvements Signed-off-by: Bernd Verst <4535280+berndverst@users.noreply.github.com> --- bindings/azure/blobstorage/blobstorage.go | 32 +++++++++---------- .../azure/blobstorage/blobstorage_test.go | 2 +- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/bindings/azure/blobstorage/blobstorage.go b/bindings/azure/blobstorage/blobstorage.go index 34d10f2ae..e97101b85 100644 --- a/bindings/azure/blobstorage/blobstorage.go +++ b/bindings/azure/blobstorage/blobstorage.go @@ -62,14 +62,14 @@ const ( metadataKeyContentLanguage = "contentLanguage" metadataKeyContentDisposition = "contentDisposition" metadataKeyCacheControl = "cacheControl" - // Specifies the maximum number of HTTP GET requests that will be made while reading from a RetryReader. A value - // of zero means that no additional HTTP GET requests will be made. + // Specifies the maximum number of HTTP requests that will be made to retry blob operations. A value + // of zero means that no additional HTTP requests will be made. defaultGetBlobRetryCount = 10 // Specifies the maximum number of blobs to return, including all BlobPrefix elements. If the request does not // specify maxresults the server will return up to 5,000 items. // See: https://docs.microsoft.com/en-us/rest/api/storageservices/list-blobs#uri-parameters - maxResults = 5000 - endpointKey = "endpoint" + maxResults int32 = 5000 + endpointKey = "endpoint" ) var ErrMissingBlobName = errors.New("blobName is a required attribute") @@ -87,7 +87,7 @@ type blobStorageMetadata struct { StorageAccount string `json:"storageAccount"` StorageAccessKey string `json:"storageAccessKey"` Container string `json:"container"` - GetBlobRetryCount int `json:"getBlobRetryCount,string"` + GetBlobRetryCount int32 `json:"getBlobRetryCount,string"` DecodeBase64 bool `json:"decodeBase64,string"` PublicAccessLevel azblob.PublicAccessType `json:"publicAccessLevel"` } @@ -129,7 +129,7 @@ func (a *AzureBlobStorage) Init(metadata bindings.Metadata) error { options := container.ClientOptions{ ClientOptions: azcore.ClientOptions{ Retry: policy.RetryOptions{ - MaxRetries: int32(a.metadata.GetBlobRetryCount), + MaxRetries: a.metadata.GetBlobRetryCount, }, Telemetry: policy.TelemetryOptions{ ApplicationID: userAgent, @@ -245,7 +245,7 @@ func (a *AzureBlobStorage) create(ctx context.Context, req *bindings.InvokeReque blobHTTPHeaders := blob.HTTPHeaders{} if val, ok := req.Metadata[metadataKeyContentType]; ok && val != "" { - blobHTTPHeaders.BlobContentType = ptr.Of(val) + blobHTTPHeaders.BlobContentType = &val delete(req.Metadata, metadataKeyContentType) } var contentMD5 *[]byte @@ -253,26 +253,26 @@ func (a *AzureBlobStorage) create(ctx context.Context, req *bindings.InvokeReque if val, ok := req.Metadata[metadataKeyContentMD5]; ok && val != "" { sDec, err := b64.StdEncoding.DecodeString(val) if err != nil || len(sDec) != 16 { - return nil, fmt.Errorf("the MD5 value specified in Content MD5 is invalid, MD5 value must be 128 bits and base64 encoded") + return nil, errors.New("the MD5 value specified in Content MD5 is invalid, MD5 value must be 128 bits and base64 encoded") } blobHTTPHeaders.BlobContentMD5 = sDec contentMD5 = &sDec delete(req.Metadata, metadataKeyContentMD5) } if val, ok := req.Metadata[metadataKeyContentEncoding]; ok && val != "" { - blobHTTPHeaders.BlobContentEncoding = ptr.Of(val) + blobHTTPHeaders.BlobContentEncoding = &val delete(req.Metadata, metadataKeyContentEncoding) } if val, ok := req.Metadata[metadataKeyContentLanguage]; ok && val != "" { - blobHTTPHeaders.BlobContentLanguage = ptr.Of(val) + blobHTTPHeaders.BlobContentLanguage = &val delete(req.Metadata, metadataKeyContentLanguage) } if val, ok := req.Metadata[metadataKeyContentDisposition]; ok && val != "" { - blobHTTPHeaders.BlobContentDisposition = ptr.Of(val) + blobHTTPHeaders.BlobContentDisposition = &val delete(req.Metadata, metadataKeyContentDisposition) } if val, ok := req.Metadata[metadataKeyCacheControl]; ok && val != "" { - blobHTTPHeaders.BlobCacheControl = ptr.Of(val) + blobHTTPHeaders.BlobCacheControl = &val delete(req.Metadata, metadataKeyCacheControl) } @@ -421,13 +421,13 @@ func (a *AzureBlobStorage) list(ctx context.Context, req *bindings.InvokeRequest } if hasPayload && payload.MaxResults != int32(0) { - options.MaxResults = ptr.Of(payload.MaxResults) + options.MaxResults = &payload.MaxResults } else { - options.MaxResults = ptr.Of(int32(maxResults)) + options.MaxResults = ptr.Of(maxResults) // cannot get address of constant directly } if hasPayload && payload.Prefix != "" { - options.Prefix = ptr.Of(payload.Prefix) + options.Prefix = &payload.Prefix } var initialMarker string @@ -436,7 +436,7 @@ func (a *AzureBlobStorage) list(ctx context.Context, req *bindings.InvokeRequest } else { initialMarker = "" } - options.Marker = ptr.Of(initialMarker) + options.Marker = &initialMarker metadata := map[string]string{} blobs := []*container.BlobItem{} diff --git a/bindings/azure/blobstorage/blobstorage_test.go b/bindings/azure/blobstorage/blobstorage_test.go index 52810feab..8462e497d 100644 --- a/bindings/azure/blobstorage/blobstorage_test.go +++ b/bindings/azure/blobstorage/blobstorage_test.go @@ -42,7 +42,7 @@ func TestParseMetadata(t *testing.T) { assert.Equal(t, "account", meta.StorageAccount) // storageAccessKey is parsed in the azauth package assert.Equal(t, true, meta.DecodeBase64) - assert.Equal(t, 5, meta.GetBlobRetryCount) + assert.Equal(t, int32(5), meta.GetBlobRetryCount) assert.Equal(t, "", string(meta.PublicAccessLevel)) }) From 17d38d7f655edc1ef05f23bcbf63bf5ef3612b0d Mon Sep 17 00:00:00 2001 From: Bernd Verst <4535280+berndverst@users.noreply.github.com> Date: Thu, 17 Nov 2022 12:02:22 -0800 Subject: [PATCH 53/87] fix blob storage cert test Signed-off-by: Bernd Verst <4535280+berndverst@users.noreply.github.com> --- .../azure/blobstorage/blobstorage_test.go | 33 ++++++++++--------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/tests/certification/bindings/azure/blobstorage/blobstorage_test.go b/tests/certification/bindings/azure/blobstorage/blobstorage_test.go index ad715e91b..79c4855e1 100644 --- a/tests/certification/bindings/azure/blobstorage/blobstorage_test.go +++ b/tests/certification/bindings/azure/blobstorage/blobstorage_test.go @@ -33,6 +33,7 @@ import ( dapr_testing "github.com/dapr/dapr/pkg/testing" daprsdk "github.com/dapr/go-sdk/client" "github.com/dapr/kit/logger" + "github.com/dapr/kit/ptr" "github.com/dapr/components-contrib/tests/certification/embedded" "github.com/dapr/components-contrib/tests/certification/flow" @@ -106,10 +107,12 @@ func listBlobRequest(ctx flow.Context, client daprsdk.Client, prefix string, mar } // deleteBlobRequest is used to make a common binding request for the delete operation. -func deleteBlobRequest(ctx flow.Context, client daprsdk.Client, name string, deleteSnapshotsOption string) (out *daprsdk.BindingEvent, err error) { +func deleteBlobRequest(ctx flow.Context, client daprsdk.Client, name string, deleteSnapshotsOption *string) (out *daprsdk.BindingEvent, err error) { invokeDeleteMetadata := map[string]string{ - "blobName": name, - "deleteSnapshots": deleteSnapshotsOption, + "blobName": name, + } + if deleteSnapshotsOption != nil { + invokeDeleteMetadata["deleteSnapshots"] = *deleteSnapshotsOption } invokeGetRequest := &daprsdk.InvokeBindingRequest{ @@ -187,7 +190,7 @@ func TestBlobStorage(t *testing.T) { assert.Equal(t, newString, input2) // cleanup. - out, invokeDeleteErr := deleteBlobRequest(ctx, client, blobName, "") + out, invokeDeleteErr := deleteBlobRequest(ctx, client, blobName, nil) assert.NoError(t, invokeDeleteErr) assert.Empty(t, out.Data) @@ -197,7 +200,7 @@ func TestBlobStorage(t *testing.T) { assert.Contains(t, invokeSecondGetErr.Error(), "ERROR CODE: BlobNotFound") // deleting the key again should fail. - _, invokeDeleteErr2 := deleteBlobRequest(ctx, client, blobName, "") + _, invokeDeleteErr2 := deleteBlobRequest(ctx, client, blobName, nil) assert.Error(t, invokeDeleteErr2) assert.Contains(t, invokeDeleteErr2.Error(), "ERROR CODE: BlobNotFound") @@ -274,7 +277,7 @@ func TestBlobStorage(t *testing.T) { assert.Equal(t, responseData, dataBytes) assert.Empty(t, out.Metadata) - out, invokeDeleteErr := deleteBlobRequest(ctx, client, blobName, "") + out, invokeDeleteErr := deleteBlobRequest(ctx, client, blobName, nil) assert.NoError(t, invokeDeleteErr) assert.Empty(t, out.Data) @@ -329,7 +332,7 @@ func TestBlobStorage(t *testing.T) { } // cleanup. - _, invokeDeleteErr := deleteBlobRequest(ctx, client, blobName, "") + _, invokeDeleteErr := deleteBlobRequest(ctx, client, blobName, nil) assert.NoError(t, invokeDeleteErr) return nil @@ -414,7 +417,7 @@ func TestBlobStorage(t *testing.T) { } assert.True(t, found) - out, invokeDeleteErr := deleteBlobRequest(ctx, client, "filename.txt", "") + out, invokeDeleteErr := deleteBlobRequest(ctx, client, "filename.txt", nil) assert.NoError(t, invokeDeleteErr) assert.Empty(t, out.Data) @@ -524,11 +527,11 @@ func TestBlobStorage(t *testing.T) { assert.Contains(t, output2[0]["Name"], "prefixA") // cleanup. - _, invokeDeleteErr1 := deleteBlobRequest(ctx, client, "prefixA/filename.txt", "") + _, invokeDeleteErr1 := deleteBlobRequest(ctx, client, "prefixA/filename.txt", nil) assert.NoError(t, invokeDeleteErr1) - _, invokeDeleteErr2 := deleteBlobRequest(ctx, client, "prefixAfilename.txt", "") + _, invokeDeleteErr2 := deleteBlobRequest(ctx, client, "prefixAfilename.txt", nil) assert.NoError(t, invokeDeleteErr2) - _, invokeDeleteErr3 := deleteBlobRequest(ctx, client, "prefixB/filename.txt", "") + _, invokeDeleteErr3 := deleteBlobRequest(ctx, client, "prefixB/filename.txt", nil) assert.NoError(t, invokeDeleteErr3) // list deleted items with prefix. @@ -572,13 +575,13 @@ func TestBlobStorage(t *testing.T) { assert.Equal(t, out.Metadata["number"], "2") // delete snapshots. - _, invokeDeleteErr := deleteBlobRequest(ctx, client, "snapshotthis.txt", "only") + _, invokeDeleteErr := deleteBlobRequest(ctx, client, "snapshotthis.txt", ptr.Of(string(blob.DeleteSnapshotsOptionTypeOnly))) assert.NoError(t, invokeDeleteErr) // verify snapshot is deleted. out2, listErr2 := listBlobRequest(ctx, client, "snapshotthis.txt", "", -1, false, true, false, false, false) assert.NoError(t, listErr2) - assert.Equal(t, out2.Metadata["number"], "1") + assert.Equal(t, "1", out2.Metadata["number"]) // create another snapshot. _, createSnapshotErr2 := blobClient.CreateSnapshot( @@ -586,13 +589,13 @@ func TestBlobStorage(t *testing.T) { assert.NoError(t, createSnapshotErr2) // delete base blob and snapshots all at once. - _, invokeDeleteErr2 := deleteBlobRequest(ctx, client, "snapshotthis.txt", "include") + _, invokeDeleteErr2 := deleteBlobRequest(ctx, client, "snapshotthis.txt", ptr.Of(string(blob.DeleteSnapshotsOptionTypeInclude))) assert.NoError(t, invokeDeleteErr2) // verify base blob and snapshots are deleted. out3, listErr3 := listBlobRequest(ctx, client, "snapshotthis.txt", "", -1, false, true, false, false, false) assert.NoError(t, listErr3) - assert.Equal(t, out3.Metadata["number"], "0") + assert.Equal(t, "0", out3.Metadata["number"]) return nil } From 7ccca4def8a90b4055935a0008db87127b03adff Mon Sep 17 00:00:00 2001 From: Bernd Verst <4535280+berndverst@users.noreply.github.com> Date: Thu, 17 Nov 2022 19:55:02 -0800 Subject: [PATCH 54/87] AzBlob State: Migrate to Track2 SDK Signed-off-by: Bernd Verst <4535280+berndverst@users.noreply.github.com> --- state/azure/blobstorage/blobstorage.go | 210 +++++++++++------- state/azure/blobstorage/blobstorage_test.go | 12 +- .../state/azure/blobstorage/go.mod | 1 + .../state/azure/blobstorage/go.sum | 2 + 4 files changed, 140 insertions(+), 85 deletions(-) diff --git a/state/azure/blobstorage/blobstorage.go b/state/azure/blobstorage/blobstorage.go index b493ae162..a03e7c663 100644 --- a/state/azure/blobstorage/blobstorage.go +++ b/state/azure/blobstorage/blobstorage.go @@ -36,16 +36,21 @@ Concurrency is supported with ETags according to https://docs.microsoft.com/en-u package blobstorage import ( + "bytes" "context" b64 "encoding/base64" "fmt" - "io" - "net" "net/url" "reflect" "strings" + "time" - "github.com/Azure/azure-storage-blob-go/azblob" + "github.com/Azure/azure-sdk-for-go/sdk/azcore" + "github.com/Azure/azure-sdk-for-go/sdk/azcore/policy" + "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob" + "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/blob" + "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/bloberror" + "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/container" jsoniter "github.com/json-iterator/go" azauth "github.com/dapr/components-contrib/internal/authentication/azure" @@ -63,13 +68,14 @@ const ( contentLanguage = "ContentLanguage" contentDisposition = "ContentDisposition" cacheControl = "CacheControl" + endpointKey = "endpoint" ) // StateStore Type. type StateStore struct { state.DefaultBulkStore - containerURL azblob.ContainerURL - json jsoniter.API + containerClient *container.Client + json jsoniter.API features []state.Feature logger logger.Logger @@ -78,49 +84,77 @@ type StateStore struct { type blobStorageMetadata struct { AccountName string ContainerName string + AccountKey string } // Init the connection to blob storage, optionally creates a blob container if it doesn't exist. func (r *StateStore) Init(metadata state.Metadata) error { - meta, err := getBlobStorageMetadata(metadata.Properties) + m, err := getBlobStorageMetadata(metadata.Properties) if err != nil { return err } - credential, env, err := azauth.GetAzureStorageBlobCredentials(r.logger, meta.AccountName, metadata.Properties) - if err != nil { - return fmt.Errorf("invalid credentials with error: %s", err.Error()) - } - userAgent := "dapr-" + logger.DaprVersion - options := azblob.PipelineOptions{ - Telemetry: azblob.TelemetryOptions{Value: userAgent}, + options := container.ClientOptions{ + ClientOptions: azcore.ClientOptions{ + Telemetry: policy.TelemetryOptions{ + ApplicationID: userAgent, + }, + }, } - p := azblob.NewPipeline(credential, options) + settings, err := azauth.NewEnvironmentSettings("storage", metadata.Properties) + if err != nil { + return err + } + customEndpoint, ok := metadata.Properties[endpointKey] var URL *url.URL - customEndpoint, ok := mdutils.GetMetadataProperty(metadata.Properties, azauth.StorageEndpointKeys...) if ok && customEndpoint != "" { - URL, err = url.Parse(fmt.Sprintf("%s/%s/%s", customEndpoint, meta.AccountName, meta.ContainerName)) + var parseErr error + URL, parseErr = url.Parse(fmt.Sprintf("%s/%s/%s", customEndpoint, m.AccountName, m.ContainerName)) + if parseErr != nil { + return parseErr + } } else { - URL, err = url.Parse(fmt.Sprintf("https://%s.blob.%s/%s", meta.AccountName, env.StorageEndpointSuffix, meta.ContainerName)) - } - if err != nil { - return err - } - containerURL := azblob.NewContainerURL(*URL, p) - - _, err = net.LookupHost(URL.Hostname()) - if err != nil { - return err + env := settings.AzureEnvironment + URL, _ = url.Parse(fmt.Sprintf("https://%s.blob.%s/%s", m.AccountName, env.StorageEndpointSuffix, m.ContainerName)) } - ctx := context.Background() - _, err = containerURL.Create(ctx, azblob.Metadata{}, azblob.PublicAccessNone) - r.logger.Debugf("error creating container: %s", err) + var clientErr error + var client *container.Client + // Try using shared key credentials first + if m.AccountKey != "" { + credential, newSharedKeyErr := azblob.NewSharedKeyCredential(m.AccountName, m.AccountKey) + if err != nil { + return fmt.Errorf("invalid credentials with error: %w", newSharedKeyErr) + } + client, clientErr = container.NewClientWithSharedKeyCredential(URL.String(), credential, &options) + if clientErr != nil { + return fmt.Errorf("cannot init Blobstorage container client: %w", err) + } + container.NewClientWithSharedKeyCredential(URL.String(), credential, &options) + r.containerClient = client + } else { + // fallback to AAD + credential, tokenErr := settings.GetTokenCredential() + if err != nil { + return fmt.Errorf("invalid credentials with error: %w", tokenErr) + } + client, clientErr = container.NewClient(URL.String(), credential, &options) + } + if clientErr != nil { + return fmt.Errorf("cannot init Blobstorage client: %w", clientErr) + } - r.containerURL = containerURL - r.logger.Debugf("using container '%s'", meta.ContainerName) + createContainerOptions := container.CreateOptions{ + Access: nil, + } + timeoutCtx, cancel := context.WithTimeout(context.Background(), 30*time.Second) + _, err = client.Create(timeoutCtx, &createContainerOptions) + cancel() + // Don't return error, container might already exist + r.logger.Debugf("error creating container: %w", err) + r.containerClient = client return nil } @@ -149,10 +183,11 @@ func (r *StateStore) Set(req *state.SetRequest) error { } func (r *StateStore) Ping() error { - accessConditions := azblob.BlobAccessConditions{} - - if _, err := r.containerURL.GetProperties(context.Background(), accessConditions.LeaseAccessConditions); err != nil { - return fmt.Errorf("blob storage: error connecting to Blob storage at %s: %s", r.containerURL.URL().Host, err) + getPropertiesOptions := container.GetPropertiesOptions{ + LeaseAccessConditions: &container.LeaseAccessConditions{}, + } + if _, err := r.containerClient.GetProperties(context.Background(), &getPropertiesOptions); err != nil { + return fmt.Errorf("blob storage: error connecting to Blob storage at %s: %s", r.containerClient.URL(), err) } return nil @@ -197,9 +232,13 @@ func getBlobStorageMetadata(meta map[string]string) (*blobStorageMetadata, error } func (r *StateStore) readFile(ctx context.Context, req *state.GetRequest) (*state.GetResponse, error) { - blobURL := r.containerURL.NewBlockBlobURL(getFileName(req.Key)) + blockBlobClient := r.containerClient.NewBlockBlobClient(getFileName(req.Key)) - resp, err := blobURL.Download(ctx, 0, azblob.CountToEnd, azblob.BlobAccessConditions{}, false) + downloadOptions := azblob.DownloadStreamOptions{ + AccessConditions: &blob.AccessConditions{}, + } + + blobDownloadResponse, err := blockBlobClient.DownloadStream(ctx, &downloadOptions) if err != nil { r.logger.Debugf("download file %s, err %s", req.Key, err) @@ -210,107 +249,124 @@ func (r *StateStore) readFile(ctx context.Context, req *state.GetRequest) (*stat return &state.GetResponse{}, err } - bodyStream := resp.Body(azblob.RetryReaderOptions{}) - data, err := io.ReadAll(bodyStream) + blobData := &bytes.Buffer{} + reader := blobDownloadResponse.Body + _, err = blobData.ReadFrom(reader) if err != nil { - r.logger.Debugf("read file %s, err %s", req.Key, err) - return &state.GetResponse{}, err + return &state.GetResponse{}, fmt.Errorf("error reading az blob: %w", err) + } + err = reader.Close() + if err != nil { + return &state.GetResponse{}, fmt.Errorf("error closing az blob reader: %w", err) } - contentType := resp.ContentType() + contentType := blobDownloadResponse.ContentType return &state.GetResponse{ - Data: data, - ETag: ptr.Of(string(resp.ETag())), - ContentType: &contentType, + Data: blobData.Bytes(), + ETag: ptr.Of(string(*blobDownloadResponse.ETag)), + ContentType: contentType, }, nil } func (r *StateStore) writeFile(ctx context.Context, req *state.SetRequest) error { - accessConditions := azblob.BlobAccessConditions{} + modifiedAccessConditions := blob.ModifiedAccessConditions{} if req.ETag != nil && *req.ETag != "" { - accessConditions.IfMatch = azblob.ETag(*req.ETag) + modifiedAccessConditions.IfMatch = ptr.Of(azcore.ETag(*req.ETag)) } if req.Options.Concurrency == state.FirstWrite && (req.ETag == nil || *req.ETag == "") { - accessConditions.IfNoneMatch = azblob.ETag("*") + modifiedAccessConditions.IfNoneMatch = ptr.Of(azcore.ETagAny) } - blobURL := r.containerURL.NewBlockBlobURL(getFileName(req.Key)) + accessConditions := blob.AccessConditions{ + ModifiedAccessConditions: &modifiedAccessConditions, + } blobHTTPHeaders, err := r.createBlobHTTPHeadersFromRequest(req) if err != nil { return err } - _, err = azblob.UploadBufferToBlockBlob(ctx, r.marshal(req), blobURL, azblob.UploadToBlockBlobOptions{ - Metadata: req.Metadata, - AccessConditions: accessConditions, - BlobHTTPHeaders: blobHTTPHeaders, - }) - if err != nil { - r.logger.Debugf("write file %s, err %s", req.Key, err) + uploadOptions := azblob.UploadBufferOptions{ + AccessConditions: &accessConditions, + Metadata: req.Metadata, + HTTPHeaders: &blobHTTPHeaders, + Concurrency: 16, + } + + blockBlobClient := r.containerClient.NewBlockBlobClient(getFileName(req.Key)) + _, err = blockBlobClient.UploadBuffer(ctx, r.marshal(req), &uploadOptions) + + if err != nil { // Check if the error is due to ETag conflict if req.ETag != nil && isETagConflictError(err) { return state.NewETagError(state.ETagMismatch, err) } - return err + return fmt.Errorf("error uploading az blob: %w", err) } return nil } -func (r *StateStore) createBlobHTTPHeadersFromRequest(req *state.SetRequest) (azblob.BlobHTTPHeaders, error) { - var blobHTTPHeaders azblob.BlobHTTPHeaders +func (r *StateStore) createBlobHTTPHeadersFromRequest(req *state.SetRequest) (blob.HTTPHeaders, error) { + blobHTTPHeaders := blob.HTTPHeaders{} if val, ok := req.Metadata[contentType]; ok && val != "" { - blobHTTPHeaders.ContentType = val + blobHTTPHeaders.BlobContentType = &val delete(req.Metadata, contentType) } if req.ContentType != nil { - if blobHTTPHeaders.ContentType != "" { - r.logger.Warnf("ContentType received from request Metadata %s, as well as ContentType property %s, choosing value from contentType property", blobHTTPHeaders.ContentType, *req.ContentType) + if blobHTTPHeaders.BlobContentType != nil { + r.logger.Warnf("ContentType received from request Metadata %s, as well as ContentType property %s, choosing value from contentType property", blobHTTPHeaders.BlobContentType, req.ContentType) } - blobHTTPHeaders.ContentType = *req.ContentType + blobHTTPHeaders.BlobContentType = req.ContentType } if val, ok := req.Metadata[contentMD5]; ok && val != "" { sDec, err := b64.StdEncoding.DecodeString(val) if err != nil || len(sDec) != 16 { - return azblob.BlobHTTPHeaders{}, fmt.Errorf("the MD5 value specified in Content MD5 is invalid, MD5 value must be 128 bits and base64 encoded") + return blob.HTTPHeaders{}, fmt.Errorf("the MD5 value specified in Content MD5 is invalid, MD5 value must be 128 bits and base64 encoded") } - blobHTTPHeaders.ContentMD5 = sDec + blobHTTPHeaders.BlobContentMD5 = sDec delete(req.Metadata, contentMD5) } if val, ok := req.Metadata[contentEncoding]; ok && val != "" { - blobHTTPHeaders.ContentEncoding = val + blobHTTPHeaders.BlobContentEncoding = &val delete(req.Metadata, contentEncoding) } if val, ok := req.Metadata[contentLanguage]; ok && val != "" { - blobHTTPHeaders.ContentLanguage = val + blobHTTPHeaders.BlobContentLanguage = &val delete(req.Metadata, contentLanguage) } if val, ok := req.Metadata[contentDisposition]; ok && val != "" { - blobHTTPHeaders.ContentDisposition = val + blobHTTPHeaders.BlobContentDisposition = &val delete(req.Metadata, contentDisposition) } if val, ok := req.Metadata[cacheControl]; ok && val != "" { - blobHTTPHeaders.CacheControl = val + blobHTTPHeaders.BlobCacheControl = &val delete(req.Metadata, cacheControl) } return blobHTTPHeaders, nil } func (r *StateStore) deleteFile(ctx context.Context, req *state.DeleteRequest) error { - blobURL := r.containerURL.NewBlockBlobURL(getFileName(req.Key)) - accessConditions := azblob.BlobAccessConditions{} + blockBlobClient := r.containerClient.NewBlockBlobClient(getFileName(req.Key)) + modifiedAccessConditions := blob.ModifiedAccessConditions{} if req.ETag != nil && *req.ETag != "" { - accessConditions.IfMatch = azblob.ETag(*req.ETag) + modifiedAccessConditions.IfMatch = ptr.Of(azcore.ETag(*req.ETag)) } - _, err := blobURL.Delete(ctx, azblob.DeleteSnapshotsOptionNone, accessConditions) + deleteOptions := blob.DeleteOptions{ + DeleteSnapshots: nil, + AccessConditions: &blob.AccessConditions{ + ModifiedAccessConditions: &modifiedAccessConditions, + }, + } + + _, err := blockBlobClient.Delete(ctx, &deleteOptions) if err != nil { r.logger.Debugf("delete file %s, err %s", req.Key, err) @@ -349,13 +405,9 @@ func (r *StateStore) marshal(req *state.SetRequest) []byte { } func isNotFoundError(err error) bool { - azureError, ok := err.(azblob.StorageError) - - return ok && azureError.ServiceCode() == azblob.ServiceCodeBlobNotFound + return bloberror.HasCode(err, bloberror.BlobNotFound) } func isETagConflictError(err error) bool { - azureError, ok := err.(azblob.StorageError) - - return ok && azureError.ServiceCode() == azblob.ServiceCodeConditionNotMet + return bloberror.HasCode(err, bloberror.ConditionNotMet) } diff --git a/state/azure/blobstorage/blobstorage_test.go b/state/azure/blobstorage/blobstorage_test.go index f511239b1..e86505d51 100644 --- a/state/azure/blobstorage/blobstorage_test.go +++ b/state/azure/blobstorage/blobstorage_test.go @@ -34,8 +34,7 @@ func TestInit(t *testing.T) { } err := s.Init(m) assert.Nil(t, err) - assert.Equal(t, "acc.blob.core.windows.net", s.containerURL.URL().Host) - assert.Equal(t, "/dapr", s.containerURL.URL().Path) + assert.Equal(t, "https://acc.blob.core.windows.net/dapr", s.containerClient.URL()) }) t.Run("Init with missing metadata", func(t *testing.T) { @@ -53,7 +52,8 @@ func TestInit(t *testing.T) { "accountKey": "e+Dnvl8EOxYxV94nurVaRQ==", "containerName": "dapr", } - err := s.Init(m) + s.Init(m) + err := s.Ping() assert.NotNil(t, err) }) } @@ -100,7 +100,7 @@ func TestBlobHTTPHeaderGeneration(t *testing.T) { blobHeaders, err := s.createBlobHTTPHeadersFromRequest(req) assert.Nil(t, err) - assert.Equal(t, "application/json", blobHeaders.ContentType) + assert.Equal(t, "application/json", *blobHeaders.BlobContentType) }) t.Run("Content type and metadata provided (conflict), content type chosen", func(t *testing.T) { contentType := "application/json" @@ -113,7 +113,7 @@ func TestBlobHTTPHeaderGeneration(t *testing.T) { blobHeaders, err := s.createBlobHTTPHeadersFromRequest(req) assert.Nil(t, err) - assert.Equal(t, "application/json", blobHeaders.ContentType) + assert.Equal(t, "application/json", *blobHeaders.BlobContentType) }) t.Run("ContentType not provided, metadata provided set backward compatibility", func(t *testing.T) { req := &state.SetRequest{ @@ -124,6 +124,6 @@ func TestBlobHTTPHeaderGeneration(t *testing.T) { blobHeaders, err := s.createBlobHTTPHeadersFromRequest(req) assert.Nil(t, err) - assert.Equal(t, "text/plain", blobHeaders.ContentType) + assert.Equal(t, "text/plain", *blobHeaders.BlobContentType) }) } diff --git a/tests/certification/state/azure/blobstorage/go.mod b/tests/certification/state/azure/blobstorage/go.mod index b7c33bfbe..1caa631ff 100644 --- a/tests/certification/state/azure/blobstorage/go.mod +++ b/tests/certification/state/azure/blobstorage/go.mod @@ -19,6 +19,7 @@ require ( github.com/Azure/azure-sdk-for-go/sdk/azcore v1.1.4 // indirect github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.1.0 // indirect github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.1 // indirect + github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v0.5.1 // indirect github.com/Azure/azure-storage-blob-go v0.10.0 // indirect github.com/Azure/azure-storage-queue-go v0.0.0-20191125232315-636801874cdd // indirect github.com/Azure/go-autorest v14.2.0+incompatible // indirect diff --git a/tests/certification/state/azure/blobstorage/go.sum b/tests/certification/state/azure/blobstorage/go.sum index 3b5acc6ec..0200c2d33 100644 --- a/tests/certification/state/azure/blobstorage/go.sum +++ b/tests/certification/state/azure/blobstorage/go.sum @@ -47,6 +47,8 @@ github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.1.0 h1:QkAcEIAKbNL4KoFr4Sath github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.1.0/go.mod h1:bhXu1AjYL+wutSL/kpSq6s7733q2Rb0yuot9Zgfqa/0= github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.1 h1:XUNQ4mw+zJmaA2KXzP9JlQiecy1SI+Eog7xVkPiqIbg= github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.1/go.mod h1:eWRD7oawr1Mu1sLCawqVc0CUiF43ia3qQMxLscsKQ9w= +github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v0.5.1 h1:BMTdr+ib5ljLa9MxTJK8x/Ds0MbBb4MfuW5BL0zMJnI= +github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v0.5.1/go.mod h1:c6WvOhtmjNUWbLfOG1qxM/q0SPvQNSVJvolm+C52dIU= github.com/Azure/azure-storage-blob-go v0.10.0 h1:evCwGreYo3XLeBV4vSxLbLiYb6e0SzsJiXQVRGsRXxs= github.com/Azure/azure-storage-blob-go v0.10.0/go.mod h1:ep1edmW+kNQx4UfWM9heESNmQdijykocJ0YOxmMX8SE= github.com/Azure/azure-storage-queue-go v0.0.0-20191125232315-636801874cdd h1:b3wyxBl3vvr15tUAziPBPK354y+LSdfPCpex5oBttHo= From 70eb9f3a9c43c7829e36a8ceb2f77a50efc6e276 Mon Sep 17 00:00:00 2001 From: Bernd Verst <4535280+berndverst@users.noreply.github.com> Date: Thu, 17 Nov 2022 20:35:05 -0800 Subject: [PATCH 55/87] Address code review comments Signed-off-by: Bernd Verst <4535280+berndverst@users.noreply.github.com> --- bindings/azure/blobstorage/blobstorage.go | 23 ++++++++----------- state/azure/blobstorage/blobstorage.go | 9 ++++---- .../azure/blobstorage/blobstorage_test.go | 11 +++++---- 3 files changed, 20 insertions(+), 23 deletions(-) diff --git a/bindings/azure/blobstorage/blobstorage.go b/bindings/azure/blobstorage/blobstorage.go index e97101b85..5a8dbbc06 100644 --- a/bindings/azure/blobstorage/blobstorage.go +++ b/bindings/azure/blobstorage/blobstorage.go @@ -14,12 +14,12 @@ limitations under the License. package blobstorage import ( - "bytes" "context" b64 "encoding/base64" "encoding/json" "errors" "fmt" + "io" "net/url" "strconv" "time" @@ -64,7 +64,7 @@ const ( metadataKeyCacheControl = "cacheControl" // Specifies the maximum number of HTTP requests that will be made to retry blob operations. A value // of zero means that no additional HTTP requests will be made. - defaultGetBlobRetryCount = 10 + defaultBlobRetryCount = 3 // Specifies the maximum number of blobs to return, including all BlobPrefix elements. If the request does not // specify maxresults the server will return up to 5,000 items. // See: https://docs.microsoft.com/en-us/rest/api/storageservices/list-blobs#uri-parameters @@ -76,8 +76,7 @@ var ErrMissingBlobName = errors.New("blobName is a required attribute") // AzureBlobStorage allows saving blobs to an Azure Blob Storage account. type AzureBlobStorage struct { - metadata *blobStorageMetadata - // containerURL azblob.ContainerURL + metadata *blobStorageMetadata containerClient *container.Client logger logger.Logger @@ -166,7 +165,6 @@ func (a *AzureBlobStorage) Init(metadata bindings.Metadata) error { if clientErr != nil { return fmt.Errorf("cannot init Blobstorage container client: %w", err) } - container.NewClientWithSharedKeyCredential(URL.String(), credential, &options) a.containerClient = client } else { // fallback to AAD @@ -196,7 +194,7 @@ func (a *AzureBlobStorage) Init(metadata bindings.Metadata) error { func (a *AzureBlobStorage) parseMetadata(meta bindings.Metadata) (*blobStorageMetadata, error) { m := blobStorageMetadata{ - GetBlobRetryCount: defaultGetBlobRetryCount, + GetBlobRetryCount: defaultBlobRetryCount, } mdutils.DecodeMetadata(meta.Properties, &m) @@ -248,8 +246,8 @@ func (a *AzureBlobStorage) create(ctx context.Context, req *bindings.InvokeReque blobHTTPHeaders.BlobContentType = &val delete(req.Metadata, metadataKeyContentType) } - var contentMD5 *[]byte + var contentMD5 *[]byte if val, ok := req.Metadata[metadataKeyContentMD5]; ok && val != "" { sDec, err := b64.StdEncoding.DecodeString(val) if err != nil || len(sDec) != 16 { @@ -292,7 +290,6 @@ func (a *AzureBlobStorage) create(ctx context.Context, req *bindings.InvokeReque uploadOptions := azblob.UploadBufferOptions{ Metadata: a.sanitizeMetadata(req.Metadata), HTTPHeaders: &blobHTTPHeaders, - Concurrency: 16, TransactionalContentMD5: contentMD5, } @@ -337,9 +334,9 @@ func (a *AzureBlobStorage) get(ctx context.Context, req *bindings.InvokeRequest) if err != nil { return nil, fmt.Errorf("error downloading az blob: %w", err) } - blobData := &bytes.Buffer{} reader := blobDownloadResponse.Body - _, err = blobData.ReadFrom(reader) + defer reader.Close() + blobData, err := io.ReadAll(reader) if err != nil { return nil, fmt.Errorf("error reading az blob: %w", err) } @@ -368,7 +365,7 @@ func (a *AzureBlobStorage) get(ctx context.Context, req *bindings.InvokeRequest) } return &bindings.InvokeResponse{ - Data: blobData.Bytes(), + Data: blobData, Metadata: metadata, }, nil } @@ -395,7 +392,7 @@ func (a *AzureBlobStorage) delete(ctx context.Context, req *bindings.InvokeReque } blockBlobClient = a.containerClient.NewBlockBlobClient(val) - _, err := blockBlobClient.Delete(context.Background(), &deleteOptions) + _, err := blockBlobClient.Delete(ctx, &deleteOptions) return nil, err } @@ -420,7 +417,7 @@ func (a *AzureBlobStorage) list(ctx context.Context, req *bindings.InvokeRequest options.Include.Deleted = payload.Include.Deleted } - if hasPayload && payload.MaxResults != int32(0) { + if hasPayload && payload.MaxResults > 0 { options.MaxResults = &payload.MaxResults } else { options.MaxResults = ptr.Of(maxResults) // cannot get address of constant directly diff --git a/state/azure/blobstorage/blobstorage.go b/state/azure/blobstorage/blobstorage.go index a03e7c663..5c6f6cd38 100644 --- a/state/azure/blobstorage/blobstorage.go +++ b/state/azure/blobstorage/blobstorage.go @@ -36,10 +36,10 @@ Concurrency is supported with ETags according to https://docs.microsoft.com/en-u package blobstorage import ( - "bytes" "context" b64 "encoding/base64" "fmt" + "io" "net/url" "reflect" "strings" @@ -132,7 +132,6 @@ func (r *StateStore) Init(metadata state.Metadata) error { if clientErr != nil { return fmt.Errorf("cannot init Blobstorage container client: %w", err) } - container.NewClientWithSharedKeyCredential(URL.String(), credential, &options) r.containerClient = client } else { // fallback to AAD @@ -249,9 +248,9 @@ func (r *StateStore) readFile(ctx context.Context, req *state.GetRequest) (*stat return &state.GetResponse{}, err } - blobData := &bytes.Buffer{} reader := blobDownloadResponse.Body - _, err = blobData.ReadFrom(reader) + defer reader.Close() + blobData, err := io.ReadAll(reader) if err != nil { return &state.GetResponse{}, fmt.Errorf("error reading az blob: %w", err) } @@ -263,7 +262,7 @@ func (r *StateStore) readFile(ctx context.Context, req *state.GetRequest) (*stat contentType := blobDownloadResponse.ContentType return &state.GetResponse{ - Data: blobData.Bytes(), + Data: blobData, ETag: ptr.Of(string(*blobDownloadResponse.ETag)), ContentType: contentType, }, nil diff --git a/tests/certification/bindings/azure/blobstorage/blobstorage_test.go b/tests/certification/bindings/azure/blobstorage/blobstorage_test.go index 79c4855e1..a775cc53c 100644 --- a/tests/certification/bindings/azure/blobstorage/blobstorage_test.go +++ b/tests/certification/bindings/azure/blobstorage/blobstorage_test.go @@ -41,6 +41,7 @@ import ( "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob" "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/blob" + "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/bloberror" "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/container" ) @@ -197,12 +198,12 @@ func TestBlobStorage(t *testing.T) { // confirm the deletion. _, invokeSecondGetErr := getBlobRequest(ctx, client, blobName, false) assert.Error(t, invokeSecondGetErr) - assert.Contains(t, invokeSecondGetErr.Error(), "ERROR CODE: BlobNotFound") + assert.Contains(t, invokeSecondGetErr.Error(), bloberror.BlobNotFound) // deleting the key again should fail. _, invokeDeleteErr2 := deleteBlobRequest(ctx, client, blobName, nil) assert.Error(t, invokeDeleteErr2) - assert.Contains(t, invokeDeleteErr2.Error(), "ERROR CODE: BlobNotFound") + assert.Contains(t, invokeDeleteErr2.Error(), bloberror.BlobNotFound) return nil } @@ -235,7 +236,7 @@ func TestBlobStorage(t *testing.T) { _, invokeCreateErr := client.InvokeBinding(ctx, invokeCreateRequest) assert.Error(t, invokeCreateErr) - assert.Contains(t, invokeCreateErr.Error(), "ERROR CODE: Md5Mismatch") + assert.Contains(t, invokeCreateErr.Error(), bloberror.MD5Mismatch) return nil } @@ -284,7 +285,7 @@ func TestBlobStorage(t *testing.T) { // confirm the deletion. _, invokeSecondGetErr := getBlobRequest(ctx, client, blobName, false) assert.Error(t, invokeSecondGetErr) - assert.Contains(t, invokeSecondGetErr.Error(), "ERROR CODE: BlobNotFound") + assert.Contains(t, invokeSecondGetErr.Error(), bloberror.BlobNotFound) return nil } @@ -424,7 +425,7 @@ func TestBlobStorage(t *testing.T) { // confirm the deletion. _, invokeSecondGetErr := getBlobRequest(ctx, client, "filename.txt", false) assert.Error(t, invokeSecondGetErr) - assert.Contains(t, invokeSecondGetErr.Error(), "ERROR CODE: BlobNotFound") + assert.Contains(t, invokeSecondGetErr.Error(), bloberror.BlobNotFound) return nil } From 8811d5e64fa0feb4cc3b1c10ebdda3610aa0a236 Mon Sep 17 00:00:00 2001 From: Bernd Verst <4535280+berndverst@users.noreply.github.com> Date: Thu, 17 Nov 2022 21:37:17 -0800 Subject: [PATCH 56/87] AzBlob components: Extract shared code Signed-off-by: Bernd Verst <4535280+berndverst@users.noreply.github.com> --- bindings/azure/blobstorage/blobstorage.go | 172 +----------------- .../azure/blobstorage/blobstorage_test.go | 71 -------- .../component/azure/blobstorage/client.go | 108 +++++++++++ .../component/azure/blobstorage/metadata.go | 123 +++++++++++++ .../azure/blobstorage/metadata_test.go | 93 ++++++++++ state/azure/blobstorage/blobstorage.go | 99 +--------- state/azure/blobstorage/blobstorage_test.go | 20 -- 7 files changed, 334 insertions(+), 352 deletions(-) create mode 100644 internal/component/azure/blobstorage/client.go create mode 100644 internal/component/azure/blobstorage/metadata.go create mode 100644 internal/component/azure/blobstorage/metadata_test.go diff --git a/bindings/azure/blobstorage/blobstorage.go b/bindings/azure/blobstorage/blobstorage.go index 5a8dbbc06..5150a9b0e 100644 --- a/bindings/azure/blobstorage/blobstorage.go +++ b/bindings/azure/blobstorage/blobstorage.go @@ -20,12 +20,8 @@ import ( "errors" "fmt" "io" - "net/url" "strconv" - "time" - "github.com/Azure/azure-sdk-for-go/sdk/azcore" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/policy" "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob" "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/blob" "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/blockblob" @@ -33,8 +29,7 @@ import ( "github.com/google/uuid" "github.com/dapr/components-contrib/bindings" - azauth "github.com/dapr/components-contrib/internal/authentication/azure" - mdutils "github.com/dapr/components-contrib/metadata" + storageinternal "github.com/dapr/components-contrib/internal/component/azure/blobstorage" "github.com/dapr/kit/logger" "github.com/dapr/kit/ptr" ) @@ -62,9 +57,6 @@ const ( metadataKeyContentLanguage = "contentLanguage" metadataKeyContentDisposition = "contentDisposition" metadataKeyCacheControl = "cacheControl" - // Specifies the maximum number of HTTP requests that will be made to retry blob operations. A value - // of zero means that no additional HTTP requests will be made. - defaultBlobRetryCount = 3 // Specifies the maximum number of blobs to return, including all BlobPrefix elements. If the request does not // specify maxresults the server will return up to 5,000 items. // See: https://docs.microsoft.com/en-us/rest/api/storageservices/list-blobs#uri-parameters @@ -76,21 +68,12 @@ var ErrMissingBlobName = errors.New("blobName is a required attribute") // AzureBlobStorage allows saving blobs to an Azure Blob Storage account. type AzureBlobStorage struct { - metadata *blobStorageMetadata + metadata *storageinternal.BlobStorageMetadata containerClient *container.Client logger logger.Logger } -type blobStorageMetadata struct { - StorageAccount string `json:"storageAccount"` - StorageAccessKey string `json:"storageAccessKey"` - Container string `json:"container"` - GetBlobRetryCount int32 `json:"getBlobRetryCount,string"` - DecodeBase64 bool `json:"decodeBase64,string"` - PublicAccessLevel azblob.PublicAccessType `json:"publicAccessLevel"` -} - type createResponse struct { BlobURL string `json:"blobURL"` BlobName string `json:"blobName"` @@ -118,110 +101,14 @@ func NewAzureBlobStorage(logger logger.Logger) bindings.OutputBinding { // Init performs metadata parsing. func (a *AzureBlobStorage) Init(metadata bindings.Metadata) error { - m, err := a.parseMetadata(metadata) + var err error + a.containerClient, a.metadata, err = storageinternal.CreateContainerStorageClient(a.logger, metadata.Properties) if err != nil { return err } - a.metadata = m - - userAgent := "dapr-" + logger.DaprVersion - options := container.ClientOptions{ - ClientOptions: azcore.ClientOptions{ - Retry: policy.RetryOptions{ - MaxRetries: a.metadata.GetBlobRetryCount, - }, - Telemetry: policy.TelemetryOptions{ - ApplicationID: userAgent, - }, - }, - } - - settings, err := azauth.NewEnvironmentSettings("storage", metadata.Properties) - if err != nil { - return err - } - customEndpoint, ok := metadata.Properties[endpointKey] - var URL *url.URL - if ok && customEndpoint != "" { - var parseErr error - URL, parseErr = url.Parse(fmt.Sprintf("%s/%s/%s", customEndpoint, m.StorageAccount, m.Container)) - if parseErr != nil { - return parseErr - } - } else { - env := settings.AzureEnvironment - URL, _ = url.Parse(fmt.Sprintf("https://%s.blob.%s/%s", m.StorageAccount, env.StorageEndpointSuffix, m.Container)) - } - - var clientErr error - var client *container.Client - // Try using shared key credentials first - if m.StorageAccessKey != "" { - credential, newSharedKeyErr := azblob.NewSharedKeyCredential(m.StorageAccount, m.StorageAccessKey) - if err != nil { - return fmt.Errorf("invalid credentials with error: %w", newSharedKeyErr) - } - client, clientErr = container.NewClientWithSharedKeyCredential(URL.String(), credential, &options) - if clientErr != nil { - return fmt.Errorf("cannot init Blobstorage container client: %w", err) - } - a.containerClient = client - } else { - // fallback to AAD - credential, tokenErr := settings.GetTokenCredential() - if err != nil { - return fmt.Errorf("invalid credentials with error: %w", tokenErr) - } - client, clientErr = container.NewClient(URL.String(), credential, &options) - } - if clientErr != nil { - return fmt.Errorf("cannot init Blobstorage client: %w", clientErr) - } - - createContainerOptions := container.CreateOptions{ - Access: &m.PublicAccessLevel, - Metadata: map[string]string{}, - } - timeoutCtx, cancel := context.WithTimeout(context.Background(), 30*time.Second) - _, err = client.Create(timeoutCtx, &createContainerOptions) - cancel() - // Don't return error, container might already exist - a.logger.Debugf("error creating container: %w", err) - a.containerClient = client - return nil } -func (a *AzureBlobStorage) parseMetadata(meta bindings.Metadata) (*blobStorageMetadata, error) { - m := blobStorageMetadata{ - GetBlobRetryCount: defaultBlobRetryCount, - } - mdutils.DecodeMetadata(meta.Properties, &m) - - if val, ok := mdutils.GetMetadataProperty(meta.Properties, azauth.StorageAccountNameKeys...); ok && val != "" { - m.StorageAccount = val - } else { - return nil, fmt.Errorf("missing or empty %s field from metadata", azauth.StorageAccountNameKeys[0]) - } - - if val, ok := mdutils.GetMetadataProperty(meta.Properties, azauth.StorageContainerNameKeys...); ok && val != "" { - m.Container = val - } else { - return nil, fmt.Errorf("missing or empty %s field from metadata", azauth.StorageContainerNameKeys[0]) - } - - // per the Dapr documentation "none" is a valid value - if m.PublicAccessLevel == "none" { - m.PublicAccessLevel = "" - } - if m.PublicAccessLevel != "" && !a.isValidPublicAccessType(m.PublicAccessLevel) { - return nil, fmt.Errorf("invalid public access level: %s; allowed: %s", - m.PublicAccessLevel, azblob.PossiblePublicAccessTypeValues()) - } - - return &m, nil -} - func (a *AzureBlobStorage) Operations() []bindings.OperationKind { return []bindings.OperationKind{ bindings.CreateOperation, @@ -288,7 +175,7 @@ func (a *AzureBlobStorage) create(ctx context.Context, req *bindings.InvokeReque } uploadOptions := azblob.UploadBufferOptions{ - Metadata: a.sanitizeMetadata(req.Metadata), + Metadata: storageinternal.SanitizeMetadata(a.logger, req.Metadata), HTTPHeaders: &blobHTTPHeaders, TransactionalContentMD5: contentMD5, } @@ -486,17 +373,6 @@ func (a *AzureBlobStorage) Invoke(ctx context.Context, req *bindings.InvokeReque } } -func (a *AzureBlobStorage) isValidPublicAccessType(accessType azblob.PublicAccessType) bool { - validTypes := azblob.PossiblePublicAccessTypeValues() - for _, item := range validTypes { - if item == accessType { - return true - } - } - - return false -} - func (a *AzureBlobStorage) isValidDeleteSnapshotsOptionType(accessType azblob.DeleteSnapshotsOptionType) bool { validTypes := azblob.PossibleDeleteSnapshotsOptionTypeValues() for _, item := range validTypes { @@ -507,41 +383,3 @@ func (a *AzureBlobStorage) isValidDeleteSnapshotsOptionType(accessType azblob.De return false } - -func (a *AzureBlobStorage) sanitizeMetadata(metadata map[string]string) map[string]string { - for key, val := range metadata { - // Keep only letters and digits - n := 0 - newKey := make([]byte, len(key)) - for i := 0; i < len(key); i++ { - if (key[i] >= 'A' && key[i] <= 'Z') || - (key[i] >= 'a' && key[i] <= 'z') || - (key[i] >= '0' && key[i] <= '9') { - newKey[n] = key[i] - n++ - } - } - - if n != len(key) { - nks := string(newKey[:n]) - a.logger.Warnf("metadata key %s contains disallowed characters, sanitized to %s", key, nks) - delete(metadata, key) - metadata[nks] = val - key = nks - } - - // Remove all non-ascii characters - n = 0 - newVal := make([]byte, len(val)) - for i := 0; i < len(val); i++ { - if val[i] > 127 { - continue - } - newVal[n] = val[i] - n++ - } - metadata[key] = string(newVal[:n]) - } - - return metadata -} diff --git a/bindings/azure/blobstorage/blobstorage_test.go b/bindings/azure/blobstorage/blobstorage_test.go index 8462e497d..fbcb6e54e 100644 --- a/bindings/azure/blobstorage/blobstorage_test.go +++ b/bindings/azure/blobstorage/blobstorage_test.go @@ -17,83 +17,12 @@ import ( "context" "testing" - "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob" "github.com/stretchr/testify/assert" "github.com/dapr/components-contrib/bindings" "github.com/dapr/kit/logger" ) -func TestParseMetadata(t *testing.T) { - m := bindings.Metadata{} - blobStorage := NewAzureBlobStorage(logger.NewLogger("test")).(*AzureBlobStorage) - - t.Run("parse all metadata", func(t *testing.T) { - m.Properties = map[string]string{ - "storageAccount": "account", - "storageAccessKey": "key", - "container": "test", - "getBlobRetryCount": "5", - "decodeBase64": "true", - } - meta, err := blobStorage.parseMetadata(m) - assert.Nil(t, err) - assert.Equal(t, "test", meta.Container) - assert.Equal(t, "account", meta.StorageAccount) - // storageAccessKey is parsed in the azauth package - assert.Equal(t, true, meta.DecodeBase64) - assert.Equal(t, int32(5), meta.GetBlobRetryCount) - assert.Equal(t, "", string(meta.PublicAccessLevel)) - }) - - t.Run("parse metadata with publicAccessLevel = blob", func(t *testing.T) { - m.Properties = map[string]string{ - "storageAccount": "account", - "storageAccessKey": "key", - "container": "test", - "publicAccessLevel": "blob", - } - meta, err := blobStorage.parseMetadata(m) - assert.Nil(t, err) - assert.Equal(t, azblob.PublicAccessTypeBlob, meta.PublicAccessLevel) - }) - - t.Run("parse metadata with publicAccessLevel = container", func(t *testing.T) { - m.Properties = map[string]string{ - "storageAccount": "account", - "storageAccessKey": "key", - "container": "test", - "publicAccessLevel": "container", - } - meta, err := blobStorage.parseMetadata(m) - assert.Nil(t, err) - assert.Equal(t, azblob.PublicAccessTypeContainer, meta.PublicAccessLevel) - }) - - t.Run("parse metadata with invalid publicAccessLevel", func(t *testing.T) { - m.Properties = map[string]string{ - "storageAccount": "account", - "storageAccessKey": "key", - "container": "test", - "publicAccessLevel": "invalid", - } - _, err := blobStorage.parseMetadata(m) - assert.Error(t, err) - }) - - t.Run("sanitize metadata if necessary", func(t *testing.T) { - m.Properties = map[string]string{ - "somecustomfield": "some-custom-value", - "specialfield": "special:valueÜ", - "not-allowed:": "not-allowed", - } - meta := blobStorage.sanitizeMetadata(m.Properties) - assert.Equal(t, meta["somecustomfield"], "some-custom-value") - assert.Equal(t, meta["specialfield"], "special:value") - assert.Equal(t, meta["notallowed"], "not-allowed") - }) -} - func TestGetOption(t *testing.T) { blobStorage := NewAzureBlobStorage(logger.NewLogger("test")).(*AzureBlobStorage) diff --git a/internal/component/azure/blobstorage/client.go b/internal/component/azure/blobstorage/client.go new file mode 100644 index 000000000..64eb5a6d2 --- /dev/null +++ b/internal/component/azure/blobstorage/client.go @@ -0,0 +1,108 @@ +/* +Copyright 2021 The Dapr Authors +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package blobstorage + +import ( + "context" + "fmt" + "net/url" + "time" + + "github.com/Azure/azure-sdk-for-go/sdk/azcore" + "github.com/Azure/azure-sdk-for-go/sdk/azcore/policy" + "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob" + "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/container" + + azauth "github.com/dapr/components-contrib/internal/authentication/azure" + "github.com/dapr/kit/logger" +) + +const ( + endpointKey = "endpoint" + // Specifies the maximum number of HTTP requests that will be made to retry blob operations. A value + // of zero means that no additional HTTP requests will be made. + defaultBlobRetryCount = 3 +) + +func CreateContainerStorageClient(log logger.Logger, meta map[string]string) (*container.Client, *BlobStorageMetadata, error) { + m, err := parseMetadata(meta) + if err != nil { + return nil, nil, err + } + + userAgent := "dapr-" + logger.DaprVersion + options := container.ClientOptions{ + ClientOptions: azcore.ClientOptions{ + Retry: policy.RetryOptions{ + MaxRetries: m.RetryCount, + }, + Telemetry: policy.TelemetryOptions{ + ApplicationID: userAgent, + }, + }, + } + + settings, err := azauth.NewEnvironmentSettings("storage", meta) + if err != nil { + return nil, nil, err + } + customEndpoint, ok := meta[endpointKey] + var URL *url.URL + if ok && customEndpoint != "" { + var parseErr error + URL, parseErr = url.Parse(fmt.Sprintf("%s/%s/%s", customEndpoint, m.AccountName, m.ContainerName)) + if parseErr != nil { + return nil, nil, parseErr + } + } else { + env := settings.AzureEnvironment + URL, _ = url.Parse(fmt.Sprintf("https://%s.blob.%s/%s", m.AccountName, env.StorageEndpointSuffix, m.ContainerName)) + } + + var clientErr error + var client *container.Client + // Try using shared key credentials first + if m.AccountKey != "" { + credential, newSharedKeyErr := azblob.NewSharedKeyCredential(m.AccountName, m.AccountKey) + if err != nil { + return nil, nil, fmt.Errorf("invalid credentials with error: %w", newSharedKeyErr) + } + client, clientErr = container.NewClientWithSharedKeyCredential(URL.String(), credential, &options) + if clientErr != nil { + return nil, nil, fmt.Errorf("cannot init Blobstorage container client: %w", err) + } + } else { + // fallback to AAD + credential, tokenErr := settings.GetTokenCredential() + if err != nil { + return nil, nil, fmt.Errorf("invalid credentials with error: %w", tokenErr) + } + client, clientErr = container.NewClient(URL.String(), credential, &options) + } + if clientErr != nil { + return nil, nil, fmt.Errorf("cannot init Blobstorage client: %w", clientErr) + } + + createContainerOptions := container.CreateOptions{ + Access: &m.PublicAccessLevel, + Metadata: map[string]string{}, + } + timeoutCtx, cancel := context.WithTimeout(context.Background(), 30*time.Second) + _, err = client.Create(timeoutCtx, &createContainerOptions) + cancel() + // Don't return error, container might already exist + log.Debugf("error creating container: %w", err) + + return client, m, nil +} diff --git a/internal/component/azure/blobstorage/metadata.go b/internal/component/azure/blobstorage/metadata.go new file mode 100644 index 000000000..14223c9ef --- /dev/null +++ b/internal/component/azure/blobstorage/metadata.go @@ -0,0 +1,123 @@ +/* +Copyright 2021 The Dapr Authors +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package blobstorage + +import ( + "fmt" + "strconv" + + "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob" + + azauth "github.com/dapr/components-contrib/internal/authentication/azure" + mdutils "github.com/dapr/components-contrib/metadata" + "github.com/dapr/kit/logger" +) + +type BlobStorageMetadata struct { + AccountName string + AccountKey string + ContainerName string + RetryCount int32 `json:"retryCount,string"` + DecodeBase64 bool `json:"decodeBase64,string"` + PublicAccessLevel azblob.PublicAccessType +} + +func parseMetadata(meta map[string]string) (*BlobStorageMetadata, error) { + m := BlobStorageMetadata{ + RetryCount: defaultBlobRetryCount, + } + mdutils.DecodeMetadata(meta, &m) + + if val, ok := mdutils.GetMetadataProperty(meta, azauth.StorageAccountNameKeys...); ok && val != "" { + m.AccountName = val + } else { + return nil, fmt.Errorf("missing or empty %s field from metadata", azauth.StorageAccountNameKeys[0]) + } + + if val, ok := mdutils.GetMetadataProperty(meta, azauth.StorageContainerNameKeys...); ok && val != "" { + m.ContainerName = val + } else { + return nil, fmt.Errorf("missing or empty %s field from metadata", azauth.StorageContainerNameKeys[0]) + } + + // per the Dapr documentation "none" is a valid value + if m.PublicAccessLevel == "none" { + m.PublicAccessLevel = "" + } + if m.PublicAccessLevel != "" && !isValidPublicAccessType(m.PublicAccessLevel) { + return nil, fmt.Errorf("invalid public access level: %s; allowed: %s", + m.PublicAccessLevel, azblob.PossiblePublicAccessTypeValues()) + } + + // we need this key for backwards compatibility + if val, ok := meta["getBlobRetryCount"]; ok && val != "" { + // convert val from string to int32 + parseInt, err := strconv.ParseInt(val, 10, 32) + if err != nil { + return nil, err + } + m.RetryCount = int32(parseInt) + } + + return &m, nil +} + +func isValidPublicAccessType(accessType azblob.PublicAccessType) bool { + validTypes := azblob.PossiblePublicAccessTypeValues() + for _, item := range validTypes { + if item == accessType { + return true + } + } + + return false +} + +func SanitizeMetadata(log logger.Logger, metadata map[string]string) map[string]string { + for key, val := range metadata { + // Keep only letters and digits + n := 0 + newKey := make([]byte, len(key)) + for i := 0; i < len(key); i++ { + if (key[i] >= 'A' && key[i] <= 'Z') || + (key[i] >= 'a' && key[i] <= 'z') || + (key[i] >= '0' && key[i] <= '9') { + newKey[n] = key[i] + n++ + } + } + + if n != len(key) { + nks := string(newKey[:n]) + log.Warnf("metadata key %s contains disallowed characters, sanitized to %s", key, nks) + delete(metadata, key) + metadata[nks] = val + key = nks + } + + // Remove all non-ascii characters + n = 0 + newVal := make([]byte, len(val)) + for i := 0; i < len(val); i++ { + if val[i] > 127 { + continue + } + newVal[n] = val[i] + n++ + } + metadata[key] = string(newVal[:n]) + } + + return metadata +} diff --git a/internal/component/azure/blobstorage/metadata_test.go b/internal/component/azure/blobstorage/metadata_test.go new file mode 100644 index 000000000..e60ef9c14 --- /dev/null +++ b/internal/component/azure/blobstorage/metadata_test.go @@ -0,0 +1,93 @@ +/* +Copyright 2021 The Dapr Authors +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ +package blobstorage + +import ( + "testing" + + "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob" + "github.com/dapr/kit/logger" + "github.com/stretchr/testify/assert" +) + +func TestParseMetadata(t *testing.T) { + logger := logger.NewLogger("test") + var m map[string]string + + t.Run("parse all metadata", func(t *testing.T) { + m = map[string]string{ + "storageAccount": "account", + "storageAccessKey": "key", + "container": "test", + "getBlobRetryCount": "5", + "decodeBase64": "true", + } + meta, err := parseMetadata(m) + assert.Nil(t, err) + assert.Equal(t, "test", meta.ContainerName) + assert.Equal(t, "account", meta.AccountName) + // storageAccessKey is parsed in the azauth package + assert.Equal(t, true, meta.DecodeBase64) + assert.Equal(t, int32(5), meta.RetryCount) + assert.Equal(t, "", string(meta.PublicAccessLevel)) + }) + + t.Run("parse metadata with publicAccessLevel = blob", func(t *testing.T) { + m = map[string]string{ + "storageAccount": "account", + "storageAccessKey": "key", + "container": "test", + "publicAccessLevel": "blob", + } + meta, err := parseMetadata(m) + assert.Nil(t, err) + assert.Equal(t, azblob.PublicAccessTypeBlob, meta.PublicAccessLevel) + }) + + t.Run("parse metadata with publicAccessLevel = container", func(t *testing.T) { + m = map[string]string{ + "storageAccount": "account", + "storageAccessKey": "key", + "container": "test", + "publicAccessLevel": "container", + } + meta, err := parseMetadata(m) + assert.Nil(t, err) + assert.Equal(t, azblob.PublicAccessTypeContainer, meta.PublicAccessLevel) + }) + + t.Run("parse metadata with invalid publicAccessLevel", func(t *testing.T) { + m = map[string]string{ + "storageAccount": "account", + "storageAccessKey": "key", + "container": "test", + "publicAccessLevel": "invalid", + } + _, err := parseMetadata(m) + assert.Error(t, err) + }) + + t.Run("sanitize metadata if necessary", func(t *testing.T) { + m = map[string]string{ + "somecustomfield": "some-custom-value", + "specialfield": "special:valueÜ", + "not-allowed:": "not-allowed", + } + meta := SanitizeMetadata(logger, m) + assert.Equal(t, meta["somecustomfield"], "some-custom-value") + assert.Equal(t, meta["specialfield"], "special:value") + assert.Equal(t, meta["notallowed"], "not-allowed") + }) +} diff --git a/state/azure/blobstorage/blobstorage.go b/state/azure/blobstorage/blobstorage.go index 5c6f6cd38..fb92126dd 100644 --- a/state/azure/blobstorage/blobstorage.go +++ b/state/azure/blobstorage/blobstorage.go @@ -40,20 +40,17 @@ import ( b64 "encoding/base64" "fmt" "io" - "net/url" "reflect" "strings" - "time" "github.com/Azure/azure-sdk-for-go/sdk/azcore" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/policy" "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob" "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/blob" "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/bloberror" "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/container" jsoniter "github.com/json-iterator/go" - azauth "github.com/dapr/components-contrib/internal/authentication/azure" + storageinternal "github.com/dapr/components-contrib/internal/component/azure/blobstorage" mdutils "github.com/dapr/components-contrib/metadata" "github.com/dapr/components-contrib/state" "github.com/dapr/kit/logger" @@ -81,80 +78,13 @@ type StateStore struct { logger logger.Logger } -type blobStorageMetadata struct { - AccountName string - ContainerName string - AccountKey string -} - // Init the connection to blob storage, optionally creates a blob container if it doesn't exist. func (r *StateStore) Init(metadata state.Metadata) error { - m, err := getBlobStorageMetadata(metadata.Properties) + var err error + r.containerClient, _, err = storageinternal.CreateContainerStorageClient(r.logger, metadata.Properties) if err != nil { return err } - - userAgent := "dapr-" + logger.DaprVersion - options := container.ClientOptions{ - ClientOptions: azcore.ClientOptions{ - Telemetry: policy.TelemetryOptions{ - ApplicationID: userAgent, - }, - }, - } - - settings, err := azauth.NewEnvironmentSettings("storage", metadata.Properties) - if err != nil { - return err - } - customEndpoint, ok := metadata.Properties[endpointKey] - var URL *url.URL - if ok && customEndpoint != "" { - var parseErr error - URL, parseErr = url.Parse(fmt.Sprintf("%s/%s/%s", customEndpoint, m.AccountName, m.ContainerName)) - if parseErr != nil { - return parseErr - } - } else { - env := settings.AzureEnvironment - URL, _ = url.Parse(fmt.Sprintf("https://%s.blob.%s/%s", m.AccountName, env.StorageEndpointSuffix, m.ContainerName)) - } - - var clientErr error - var client *container.Client - // Try using shared key credentials first - if m.AccountKey != "" { - credential, newSharedKeyErr := azblob.NewSharedKeyCredential(m.AccountName, m.AccountKey) - if err != nil { - return fmt.Errorf("invalid credentials with error: %w", newSharedKeyErr) - } - client, clientErr = container.NewClientWithSharedKeyCredential(URL.String(), credential, &options) - if clientErr != nil { - return fmt.Errorf("cannot init Blobstorage container client: %w", err) - } - r.containerClient = client - } else { - // fallback to AAD - credential, tokenErr := settings.GetTokenCredential() - if err != nil { - return fmt.Errorf("invalid credentials with error: %w", tokenErr) - } - client, clientErr = container.NewClient(URL.String(), credential, &options) - } - if clientErr != nil { - return fmt.Errorf("cannot init Blobstorage client: %w", clientErr) - } - - createContainerOptions := container.CreateOptions{ - Access: nil, - } - timeoutCtx, cancel := context.WithTimeout(context.Background(), 30*time.Second) - _, err = client.Create(timeoutCtx, &createContainerOptions) - cancel() - // Don't return error, container might already exist - r.logger.Debugf("error creating container: %w", err) - r.containerClient = client - return nil } @@ -193,7 +123,7 @@ func (r *StateStore) Ping() error { } func (r *StateStore) GetComponentMetadata() map[string]string { - metadataStruct := blobStorageMetadata{} + metadataStruct := storageinternal.BlobStorageMetadata{} metadataInfo := map[string]string{} mdutils.GetMetadataInfoFromStructType(reflect.TypeOf(metadataStruct), &metadataInfo) return metadataInfo @@ -211,25 +141,6 @@ func NewAzureBlobStorageStore(logger logger.Logger) state.Store { return s } -func getBlobStorageMetadata(meta map[string]string) (*blobStorageMetadata, error) { - m := blobStorageMetadata{} - err := mdutils.DecodeMetadata(meta, &m) - - if val, ok := mdutils.GetMetadataProperty(meta, azauth.StorageAccountNameKeys...); ok && val != "" { - m.AccountName = val - } else { - return nil, fmt.Errorf("missing or empty %s field from metadata", azauth.StorageAccountNameKeys[0]) - } - - if val, ok := mdutils.GetMetadataProperty(meta, azauth.StorageContainerNameKeys...); ok && val != "" { - m.ContainerName = val - } else { - return nil, fmt.Errorf("missing or empty %s field from metadata", azauth.StorageContainerNameKeys[0]) - } - - return &m, err -} - func (r *StateStore) readFile(ctx context.Context, req *state.GetRequest) (*state.GetResponse, error) { blockBlobClient := r.containerClient.NewBlockBlobClient(getFileName(req.Key)) @@ -289,7 +200,7 @@ func (r *StateStore) writeFile(ctx context.Context, req *state.SetRequest) error uploadOptions := azblob.UploadBufferOptions{ AccessConditions: &accessConditions, - Metadata: req.Metadata, + Metadata: storageinternal.SanitizeMetadata(r.logger, req.Metadata), HTTPHeaders: &blobHTTPHeaders, Concurrency: 16, } diff --git a/state/azure/blobstorage/blobstorage_test.go b/state/azure/blobstorage/blobstorage_test.go index e86505d51..2e69af070 100644 --- a/state/azure/blobstorage/blobstorage_test.go +++ b/state/azure/blobstorage/blobstorage_test.go @@ -58,26 +58,6 @@ func TestInit(t *testing.T) { }) } -func TestGetBlobStorageMetaData(t *testing.T) { - t.Run("Nothing at all passed", func(t *testing.T) { - m := make(map[string]string) - _, err := getBlobStorageMetadata(m) - - assert.NotNil(t, err) - }) - - t.Run("All parameters passed and parsed", func(t *testing.T) { - m := make(map[string]string) - m["accountName"] = "acc" - m["containerName"] = "dapr" - meta, err := getBlobStorageMetadata(m) - - assert.Nil(t, err) - assert.Equal(t, "acc", meta.AccountName) - assert.Equal(t, "dapr", meta.ContainerName) - }) -} - func TestFileName(t *testing.T) { t.Run("Valid composite key", func(t *testing.T) { key := getFileName("app_id||key") From f11fc2421ed2ed1aadf2db5f84787580c9b92bf7 Mon Sep 17 00:00:00 2001 From: Bernd Verst <4535280+berndverst@users.noreply.github.com> Date: Thu, 17 Nov 2022 21:43:20 -0800 Subject: [PATCH 57/87] fix linter issue Signed-off-by: Bernd Verst <4535280+berndverst@users.noreply.github.com> --- internal/component/azure/blobstorage/metadata_test.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/internal/component/azure/blobstorage/metadata_test.go b/internal/component/azure/blobstorage/metadata_test.go index e60ef9c14..c466fb093 100644 --- a/internal/component/azure/blobstorage/metadata_test.go +++ b/internal/component/azure/blobstorage/metadata_test.go @@ -18,8 +18,9 @@ import ( "testing" "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob" - "github.com/dapr/kit/logger" "github.com/stretchr/testify/assert" + + "github.com/dapr/kit/logger" ) func TestParseMetadata(t *testing.T) { From 103624468fdf3fdae3261adcf57f4ab3fccaee65 Mon Sep 17 00:00:00 2001 From: Armin Schlegel Date: Fri, 18 Nov 2022 08:28:18 +0100 Subject: [PATCH 58/87] jetstream pubsub now supports token based auth (#2295) Signed-off-by: Armin Schlegel Signed-off-by: Armin Schlegel --- pubsub/jetstream/jetstream.go | 3 +++ pubsub/jetstream/metadata.go | 2 ++ pubsub/jetstream/metadata_test.go | 44 +++++++++++++++++++++++++++++++ 3 files changed, 49 insertions(+) diff --git a/pubsub/jetstream/jetstream.go b/pubsub/jetstream/jetstream.go index 28555d9e8..37e2a610d 100644 --- a/pubsub/jetstream/jetstream.go +++ b/pubsub/jetstream/jetstream.go @@ -57,6 +57,9 @@ func (js *jetstreamPubSub) Init(metadata pubsub.Metadata) error { } else if js.meta.tlsClientCert != "" && js.meta.tlsClientKey != "" { js.l.Debug("Configure nats for tls client authentication") opts = append(opts, nats.ClientCert(js.meta.tlsClientCert, js.meta.tlsClientKey)) + } else if js.meta.token != "" { + js.l.Debug("Configure nats for token authentication") + opts = append(opts, nats.Token(js.meta.token)) } js.nc, err = nats.Connect(js.meta.natsURL, opts...) diff --git a/pubsub/jetstream/metadata.go b/pubsub/jetstream/metadata.go index 890959013..e35708952 100644 --- a/pubsub/jetstream/metadata.go +++ b/pubsub/jetstream/metadata.go @@ -27,6 +27,7 @@ type metadata struct { jwt string seedKey string + token string tlsClientCert string tlsClientKey string @@ -58,6 +59,7 @@ func parseMetadata(psm pubsub.Metadata) (metadata, error) { return metadata{}, fmt.Errorf("missing nats URL") } + m.token = psm.Properties["token"] m.jwt = psm.Properties["jwt"] m.seedKey = psm.Properties["seedKey"] diff --git a/pubsub/jetstream/metadata_test.go b/pubsub/jetstream/metadata_test.go index 94314a2d2..0ad9007bc 100644 --- a/pubsub/jetstream/metadata_test.go +++ b/pubsub/jetstream/metadata_test.go @@ -71,6 +71,50 @@ func TestParseMetadata(t *testing.T) { }, expectErr: false, }, + { + desc: "Valid Metadata with token", + input: pubsub.Metadata{Base: mdata.Base{ + Properties: map[string]string{ + "natsURL": "nats://localhost:4222", + "name": "myName", + "durableName": "myDurable", + "queueGroupName": "myQueue", + "startSequence": "1", + "startTime": "1629328511", + "deliverAll": "true", + "flowControl": "true", + "ackWait": "2s", + "maxDeliver": "10", + "backOff": "500ms, 2s, 10s", + "maxAckPending": "5000", + "replicas": "3", + "memoryStorage": "true", + "rateLimit": "20000", + "hearbeat": "1s", + "token": "myToken", + }, + }}, + want: metadata{ + natsURL: "nats://localhost:4222", + name: "myName", + durableName: "myDurable", + queueGroupName: "myQueue", + startSequence: 1, + startTime: time.Unix(1629328511, 0), + deliverAll: true, + flowControl: true, + ackWait: 2 * time.Second, + maxDeliver: 10, + backOff: []time.Duration{time.Millisecond * 500, time.Second * 2, time.Second * 10}, + maxAckPending: 5000, + replicas: 3, + memoryStorage: true, + rateLimit: 20000, + hearbeat: time.Second * 1, + token: "myToken", + }, + expectErr: false, + }, { desc: "Invalid metadata with missing seed key", input: pubsub.Metadata{Base: mdata.Base{ From 23d36a08d78e47d64b60553def2262bd6e5bd326 Mon Sep 17 00:00:00 2001 From: Bernd Verst <4535280+berndverst@users.noreply.github.com> Date: Fri, 18 Nov 2022 17:56:02 -0800 Subject: [PATCH 59/87] more refactoring and address code review Signed-off-by: Bernd Verst <4535280+berndverst@users.noreply.github.com> --- bindings/azure/blobstorage/blobstorage.go | 51 +++--------- .../component/azure/blobstorage/client.go | 15 ++-- .../azure/blobstorage/client_test.go | 64 +++++++++++++++ .../component/azure/blobstorage/metadata.go | 4 + .../component/azure/blobstorage/request.go | 73 ++++++++++++++++++ .../azure/blobstorage/request_test.go | 53 +++++++++++++ state/azure/blobstorage/blobstorage.go | 77 +------------------ state/azure/blobstorage/blobstorage_test.go | 38 --------- 8 files changed, 216 insertions(+), 159 deletions(-) create mode 100644 internal/component/azure/blobstorage/client_test.go create mode 100644 internal/component/azure/blobstorage/request.go create mode 100644 internal/component/azure/blobstorage/request_test.go diff --git a/bindings/azure/blobstorage/blobstorage.go b/bindings/azure/blobstorage/blobstorage.go index 5150a9b0e..582de9878 100644 --- a/bindings/azure/blobstorage/blobstorage.go +++ b/bindings/azure/blobstorage/blobstorage.go @@ -49,14 +49,6 @@ const ( // Defines the delete snapshots option for the delete operation. // See: https://docs.microsoft.com/en-us/rest/api/storageservices/delete-blob#request-headers metadataKeyDeleteSnapshots = "deleteSnapshots" - // HTTP headers to be associated with the blob. - // See: https://docs.microsoft.com/en-us/rest/api/storageservices/put-blob#request-headers-all-blob-types - metadataKeyContentType = "contentType" - metadataKeyContentMD5 = "contentMD5" - metadataKeyContentEncoding = "contentEncoding" - metadataKeyContentLanguage = "contentLanguage" - metadataKeyContentDisposition = "contentDisposition" - metadataKeyCacheControl = "cacheControl" // Specifies the maximum number of blobs to return, including all BlobPrefix elements. If the request does not // specify maxresults the server will return up to 5,000 items. // See: https://docs.microsoft.com/en-us/rest/api/storageservices/list-blobs#uri-parameters @@ -124,41 +116,16 @@ func (a *AzureBlobStorage) create(ctx context.Context, req *bindings.InvokeReque blobName = val delete(req.Metadata, metadataKeyBlobName) } else { - blobName = uuid.New().String() - } - - blobHTTPHeaders := blob.HTTPHeaders{} - - if val, ok := req.Metadata[metadataKeyContentType]; ok && val != "" { - blobHTTPHeaders.BlobContentType = &val - delete(req.Metadata, metadataKeyContentType) - } - - var contentMD5 *[]byte - if val, ok := req.Metadata[metadataKeyContentMD5]; ok && val != "" { - sDec, err := b64.StdEncoding.DecodeString(val) - if err != nil || len(sDec) != 16 { - return nil, errors.New("the MD5 value specified in Content MD5 is invalid, MD5 value must be 128 bits and base64 encoded") + id, err := uuid.NewRandom() + if err != nil { + return nil, err } - blobHTTPHeaders.BlobContentMD5 = sDec - contentMD5 = &sDec - delete(req.Metadata, metadataKeyContentMD5) + blobName = id.String() } - if val, ok := req.Metadata[metadataKeyContentEncoding]; ok && val != "" { - blobHTTPHeaders.BlobContentEncoding = &val - delete(req.Metadata, metadataKeyContentEncoding) - } - if val, ok := req.Metadata[metadataKeyContentLanguage]; ok && val != "" { - blobHTTPHeaders.BlobContentLanguage = &val - delete(req.Metadata, metadataKeyContentLanguage) - } - if val, ok := req.Metadata[metadataKeyContentDisposition]; ok && val != "" { - blobHTTPHeaders.BlobContentDisposition = &val - delete(req.Metadata, metadataKeyContentDisposition) - } - if val, ok := req.Metadata[metadataKeyCacheControl]; ok && val != "" { - blobHTTPHeaders.BlobCacheControl = &val - delete(req.Metadata, metadataKeyCacheControl) + + blobHTTPHeaders, err := storageinternal.CreateBlobHTTPHeadersFromRequest(req.Metadata, nil, a.logger) + if err != nil { + return nil, err } d, err := strconv.Unquote(string(req.Data)) @@ -177,7 +144,7 @@ func (a *AzureBlobStorage) create(ctx context.Context, req *bindings.InvokeReque uploadOptions := azblob.UploadBufferOptions{ Metadata: storageinternal.SanitizeMetadata(a.logger, req.Metadata), HTTPHeaders: &blobHTTPHeaders, - TransactionalContentMD5: contentMD5, + TransactionalContentMD5: &blobHTTPHeaders.BlobContentMD5, } blockBlobClient := a.containerClient.NewBlockBlobClient(blobName) diff --git a/internal/component/azure/blobstorage/client.go b/internal/component/azure/blobstorage/client.go index 64eb5a6d2..7a9250421 100644 --- a/internal/component/azure/blobstorage/client.go +++ b/internal/component/azure/blobstorage/client.go @@ -25,11 +25,11 @@ import ( "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/container" azauth "github.com/dapr/components-contrib/internal/authentication/azure" + mdutils "github.com/dapr/components-contrib/metadata" "github.com/dapr/kit/logger" ) const ( - endpointKey = "endpoint" // Specifies the maximum number of HTTP requests that will be made to retry blob operations. A value // of zero means that no additional HTTP requests will be made. defaultBlobRetryCount = 3 @@ -57,9 +57,12 @@ func CreateContainerStorageClient(log logger.Logger, meta map[string]string) (*c if err != nil { return nil, nil, err } - customEndpoint, ok := meta[endpointKey] + var customEndpoint string + if val, ok := mdutils.GetMetadataProperty(meta, azauth.StorageEndpointKeys...); ok && val != "" { + customEndpoint = val + } var URL *url.URL - if ok && customEndpoint != "" { + if customEndpoint != "" { var parseErr error URL, parseErr = url.Parse(fmt.Sprintf("%s/%s/%s", customEndpoint, m.AccountName, m.ContainerName)) if parseErr != nil { @@ -76,7 +79,7 @@ func CreateContainerStorageClient(log logger.Logger, meta map[string]string) (*c if m.AccountKey != "" { credential, newSharedKeyErr := azblob.NewSharedKeyCredential(m.AccountName, m.AccountKey) if err != nil { - return nil, nil, fmt.Errorf("invalid credentials with error: %w", newSharedKeyErr) + return nil, nil, fmt.Errorf("invalid shared key credentials with error: %w", newSharedKeyErr) } client, clientErr = container.NewClientWithSharedKeyCredential(URL.String(), credential, &options) if clientErr != nil { @@ -86,7 +89,7 @@ func CreateContainerStorageClient(log logger.Logger, meta map[string]string) (*c // fallback to AAD credential, tokenErr := settings.GetTokenCredential() if err != nil { - return nil, nil, fmt.Errorf("invalid credentials with error: %w", tokenErr) + return nil, nil, fmt.Errorf("invalid token credentials with error: %w", tokenErr) } client, clientErr = container.NewClient(URL.String(), credential, &options) } @@ -102,7 +105,7 @@ func CreateContainerStorageClient(log logger.Logger, meta map[string]string) (*c _, err = client.Create(timeoutCtx, &createContainerOptions) cancel() // Don't return error, container might already exist - log.Debugf("error creating container: %w", err) + log.Debugf("error creating container: %v", err) return client, m, nil } diff --git a/internal/component/azure/blobstorage/client_test.go b/internal/component/azure/blobstorage/client_test.go new file mode 100644 index 000000000..61ebe43ba --- /dev/null +++ b/internal/component/azure/blobstorage/client_test.go @@ -0,0 +1,64 @@ +/* +Copyright 2021 The Dapr Authors +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package blobstorage + +import ( + "testing" + + "github.com/stretchr/testify/assert" + + azauth "github.com/dapr/components-contrib/internal/authentication/azure" + "github.com/dapr/kit/logger" +) + +type scenario struct { + metadata map[string]string + expectedFailureSubString string +} + +func TestClientInitFailures(t *testing.T) { + log := logger.NewLogger("test") + + scenarios := map[string]scenario{ + "missing accountName": { + metadata: createTestMetadata(false, true, true), + expectedFailureSubString: "missing or empty accountName field from metadata", + }, + "missing container": { + metadata: createTestMetadata(true, true, false), + expectedFailureSubString: "missing or empty containerName field from metadata", + }, + } + + for name, s := range scenarios { + t.Run(name, func(t *testing.T) { + _, _, err := CreateContainerStorageClient(log, s.metadata) + assert.Contains(t, err.Error(), s.expectedFailureSubString) + }) + } +} + +func createTestMetadata(accountName bool, accountKey bool, container bool) map[string]string { + m := map[string]string{} + if accountName { + m[azauth.StorageAccountNameKeys[0]] = "account" + } + if accountKey { + m[azauth.StorageAccountKeyKeys[0]] = "key" + } + if container { + m[azauth.StorageContainerNameKeys[0]] = "test" + } + return m +} diff --git a/internal/component/azure/blobstorage/metadata.go b/internal/component/azure/blobstorage/metadata.go index 14223c9ef..04a3499e5 100644 --- a/internal/component/azure/blobstorage/metadata.go +++ b/internal/component/azure/blobstorage/metadata.go @@ -51,6 +51,10 @@ func parseMetadata(meta map[string]string) (*BlobStorageMetadata, error) { return nil, fmt.Errorf("missing or empty %s field from metadata", azauth.StorageContainerNameKeys[0]) } + if val, ok := mdutils.GetMetadataProperty(meta, azauth.StorageAccountKeyKeys...); ok && val != "" { + m.AccountKey = val + } + // per the Dapr documentation "none" is a valid value if m.PublicAccessLevel == "none" { m.PublicAccessLevel = "" diff --git a/internal/component/azure/blobstorage/request.go b/internal/component/azure/blobstorage/request.go new file mode 100644 index 000000000..38bc5e4e2 --- /dev/null +++ b/internal/component/azure/blobstorage/request.go @@ -0,0 +1,73 @@ +/* +Copyright 2021 The Dapr Authors +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package blobstorage + +import ( + b64 "encoding/base64" + "fmt" + + "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/blob" + + "github.com/dapr/kit/logger" +) + +const ( + contentTypeKey = "ContentType" + contentMD5Key = "ContentMD5" + contentEncodingKey = "ContentEncoding" + contentLanguageKey = "ContentLanguage" + contentDispositionKey = "ContentDisposition" + cacheControlKey = "CacheControl" +) + +func CreateBlobHTTPHeadersFromRequest(meta map[string]string, contentType *string, log logger.Logger) (blob.HTTPHeaders, error) { + blobHTTPHeaders := blob.HTTPHeaders{} + if val, ok := meta[contentTypeKey]; ok && val != "" { + blobHTTPHeaders.BlobContentType = &val + delete(meta, contentTypeKey) + } + + if contentType != nil { + if blobHTTPHeaders.BlobContentType != nil { + log.Warnf("ContentType received from request Metadata %s, as well as ContentType property %s, choosing value from contentType property", blobHTTPHeaders.BlobContentType, *contentType) + } + blobHTTPHeaders.BlobContentType = contentType + } + + if val, ok := meta[contentMD5Key]; ok && val != "" { + sDec, err := b64.StdEncoding.DecodeString(val) + if err != nil || len(sDec) != 16 { + return blob.HTTPHeaders{}, fmt.Errorf("the MD5 value specified in Content MD5 is invalid, MD5 value must be 128 bits and base64 encoded") + } + blobHTTPHeaders.BlobContentMD5 = sDec + delete(meta, contentMD5Key) + } + if val, ok := meta[contentEncodingKey]; ok && val != "" { + blobHTTPHeaders.BlobContentEncoding = &val + delete(meta, contentEncodingKey) + } + if val, ok := meta[contentLanguageKey]; ok && val != "" { + blobHTTPHeaders.BlobContentLanguage = &val + delete(meta, contentLanguageKey) + } + if val, ok := meta[contentDispositionKey]; ok && val != "" { + blobHTTPHeaders.BlobContentDisposition = &val + delete(meta, contentDispositionKey) + } + if val, ok := meta[cacheControlKey]; ok && val != "" { + blobHTTPHeaders.BlobCacheControl = &val + delete(meta, cacheControlKey) + } + return blobHTTPHeaders, nil +} diff --git a/internal/component/azure/blobstorage/request_test.go b/internal/component/azure/blobstorage/request_test.go new file mode 100644 index 000000000..051eb6f0f --- /dev/null +++ b/internal/component/azure/blobstorage/request_test.go @@ -0,0 +1,53 @@ +/* +Copyright 2021 The Dapr Authors +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package blobstorage + +import ( + "testing" + + "github.com/stretchr/testify/assert" + + "github.com/dapr/kit/logger" +) + +func TestBlobHTTPHeaderGeneration(t *testing.T) { + log := logger.NewLogger("test") + + t.Run("Content type is set from request, forward compatibility", func(t *testing.T) { + contentType := "application/json" + requestMetadata := map[string]string{} + + blobHeaders, err := CreateBlobHTTPHeadersFromRequest(requestMetadata, &contentType, log) + assert.Nil(t, err) + assert.Equal(t, "application/json", *blobHeaders.BlobContentType) + }) + t.Run("Content type and metadata provided (conflict), content type chosen", func(t *testing.T) { + contentType := "application/json" + requestMetadata := map[string]string{ + contentTypeKey: "text/plain", + } + + blobHeaders, err := CreateBlobHTTPHeadersFromRequest(requestMetadata, &contentType, log) + assert.Nil(t, err) + assert.Equal(t, "application/json", *blobHeaders.BlobContentType) + }) + t.Run("ContentType not provided, metadata provided set backward compatibility", func(t *testing.T) { + requestMetadata := map[string]string{ + contentTypeKey: "text/plain", + } + blobHeaders, err := CreateBlobHTTPHeadersFromRequest(requestMetadata, nil, log) + assert.Nil(t, err) + assert.Equal(t, "text/plain", *blobHeaders.BlobContentType) + }) +} diff --git a/state/azure/blobstorage/blobstorage.go b/state/azure/blobstorage/blobstorage.go index fb92126dd..c3d238706 100644 --- a/state/azure/blobstorage/blobstorage.go +++ b/state/azure/blobstorage/blobstorage.go @@ -37,7 +37,6 @@ package blobstorage import ( "context" - b64 "encoding/base64" "fmt" "io" "reflect" @@ -58,14 +57,7 @@ import ( ) const ( - keyDelimiter = "||" - contentType = "ContentType" - contentMD5 = "ContentMD5" - contentEncoding = "ContentEncoding" - contentLanguage = "ContentLanguage" - contentDisposition = "ContentDisposition" - cacheControl = "CacheControl" - endpointKey = "endpoint" + keyDelimiter = "||" ) // StateStore Type. @@ -95,27 +87,21 @@ func (r *StateStore) Features() []state.Feature { // Delete the state. func (r *StateStore) Delete(req *state.DeleteRequest) error { - r.logger.Debugf("delete %s", req.Key) return r.deleteFile(context.Background(), req) } // Get the state. func (r *StateStore) Get(req *state.GetRequest) (*state.GetResponse, error) { - r.logger.Debugf("get %s", req.Key) return r.readFile(context.Background(), req) } // Set the state. func (r *StateStore) Set(req *state.SetRequest) error { - r.logger.Debugf("saving %s", req.Key) return r.writeFile(context.Background(), req) } func (r *StateStore) Ping() error { - getPropertiesOptions := container.GetPropertiesOptions{ - LeaseAccessConditions: &container.LeaseAccessConditions{}, - } - if _, err := r.containerClient.GetProperties(context.Background(), &getPropertiesOptions); err != nil { + if _, err := r.containerClient.GetProperties(context.Background(), nil); err != nil { return fmt.Errorf("blob storage: error connecting to Blob storage at %s: %s", r.containerClient.URL(), err) } @@ -143,15 +129,8 @@ func NewAzureBlobStorageStore(logger logger.Logger) state.Store { func (r *StateStore) readFile(ctx context.Context, req *state.GetRequest) (*state.GetResponse, error) { blockBlobClient := r.containerClient.NewBlockBlobClient(getFileName(req.Key)) - - downloadOptions := azblob.DownloadStreamOptions{ - AccessConditions: &blob.AccessConditions{}, - } - - blobDownloadResponse, err := blockBlobClient.DownloadStream(ctx, &downloadOptions) + blobDownloadResponse, err := blockBlobClient.DownloadStream(ctx, nil) if err != nil { - r.logger.Debugf("download file %s, err %s", req.Key, err) - if isNotFoundError(err) { return &state.GetResponse{}, nil } @@ -165,10 +144,6 @@ func (r *StateStore) readFile(ctx context.Context, req *state.GetRequest) (*stat if err != nil { return &state.GetResponse{}, fmt.Errorf("error reading az blob: %w", err) } - err = reader.Close() - if err != nil { - return &state.GetResponse{}, fmt.Errorf("error closing az blob reader: %w", err) - } contentType := blobDownloadResponse.ContentType @@ -193,7 +168,7 @@ func (r *StateStore) writeFile(ctx context.Context, req *state.SetRequest) error ModifiedAccessConditions: &modifiedAccessConditions, } - blobHTTPHeaders, err := r.createBlobHTTPHeadersFromRequest(req) + blobHTTPHeaders, err := storageinternal.CreateBlobHTTPHeadersFromRequest(req.Metadata, req.ContentType, r.logger) if err != nil { return err } @@ -202,7 +177,6 @@ func (r *StateStore) writeFile(ctx context.Context, req *state.SetRequest) error AccessConditions: &accessConditions, Metadata: storageinternal.SanitizeMetadata(r.logger, req.Metadata), HTTPHeaders: &blobHTTPHeaders, - Concurrency: 16, } blockBlobClient := r.containerClient.NewBlockBlobClient(getFileName(req.Key)) @@ -220,47 +194,6 @@ func (r *StateStore) writeFile(ctx context.Context, req *state.SetRequest) error return nil } -func (r *StateStore) createBlobHTTPHeadersFromRequest(req *state.SetRequest) (blob.HTTPHeaders, error) { - blobHTTPHeaders := blob.HTTPHeaders{} - if val, ok := req.Metadata[contentType]; ok && val != "" { - blobHTTPHeaders.BlobContentType = &val - delete(req.Metadata, contentType) - } - - if req.ContentType != nil { - if blobHTTPHeaders.BlobContentType != nil { - r.logger.Warnf("ContentType received from request Metadata %s, as well as ContentType property %s, choosing value from contentType property", blobHTTPHeaders.BlobContentType, req.ContentType) - } - blobHTTPHeaders.BlobContentType = req.ContentType - } - - if val, ok := req.Metadata[contentMD5]; ok && val != "" { - sDec, err := b64.StdEncoding.DecodeString(val) - if err != nil || len(sDec) != 16 { - return blob.HTTPHeaders{}, fmt.Errorf("the MD5 value specified in Content MD5 is invalid, MD5 value must be 128 bits and base64 encoded") - } - blobHTTPHeaders.BlobContentMD5 = sDec - delete(req.Metadata, contentMD5) - } - if val, ok := req.Metadata[contentEncoding]; ok && val != "" { - blobHTTPHeaders.BlobContentEncoding = &val - delete(req.Metadata, contentEncoding) - } - if val, ok := req.Metadata[contentLanguage]; ok && val != "" { - blobHTTPHeaders.BlobContentLanguage = &val - delete(req.Metadata, contentLanguage) - } - if val, ok := req.Metadata[contentDisposition]; ok && val != "" { - blobHTTPHeaders.BlobContentDisposition = &val - delete(req.Metadata, contentDisposition) - } - if val, ok := req.Metadata[cacheControl]; ok && val != "" { - blobHTTPHeaders.BlobCacheControl = &val - delete(req.Metadata, cacheControl) - } - return blobHTTPHeaders, nil -} - func (r *StateStore) deleteFile(ctx context.Context, req *state.DeleteRequest) error { blockBlobClient := r.containerClient.NewBlockBlobClient(getFileName(req.Key)) @@ -278,8 +211,6 @@ func (r *StateStore) deleteFile(ctx context.Context, req *state.DeleteRequest) e _, err := blockBlobClient.Delete(ctx, &deleteOptions) if err != nil { - r.logger.Debugf("delete file %s, err %s", req.Key, err) - if req.ETag != nil && isETagConflictError(err) { return state.NewETagError(state.ETagMismatch, err) } else if isNotFoundError(err) { diff --git a/state/azure/blobstorage/blobstorage_test.go b/state/azure/blobstorage/blobstorage_test.go index 2e69af070..e8ec8a97b 100644 --- a/state/azure/blobstorage/blobstorage_test.go +++ b/state/azure/blobstorage/blobstorage_test.go @@ -69,41 +69,3 @@ func TestFileName(t *testing.T) { assert.Equal(t, "key", key) }) } - -func TestBlobHTTPHeaderGeneration(t *testing.T) { - s := NewAzureBlobStorageStore(logger.NewLogger("logger")).(*StateStore) - t.Run("Content type is set from request, forward compatibility", func(t *testing.T) { - contentType := "application/json" - req := &state.SetRequest{ - ContentType: &contentType, - } - - blobHeaders, err := s.createBlobHTTPHeadersFromRequest(req) - assert.Nil(t, err) - assert.Equal(t, "application/json", *blobHeaders.BlobContentType) - }) - t.Run("Content type and metadata provided (conflict), content type chosen", func(t *testing.T) { - contentType := "application/json" - req := &state.SetRequest{ - ContentType: &contentType, - Metadata: map[string]string{ - contentType: "text/plain", - }, - } - - blobHeaders, err := s.createBlobHTTPHeadersFromRequest(req) - assert.Nil(t, err) - assert.Equal(t, "application/json", *blobHeaders.BlobContentType) - }) - t.Run("ContentType not provided, metadata provided set backward compatibility", func(t *testing.T) { - req := &state.SetRequest{ - Metadata: map[string]string{ - contentType: "text/plain", - }, - } - - blobHeaders, err := s.createBlobHTTPHeadersFromRequest(req) - assert.Nil(t, err) - assert.Equal(t, "text/plain", *blobHeaders.BlobContentType) - }) -} From f1b9374f9a72da8c0a1c6e94f75184cdc31dfc10 Mon Sep 17 00:00:00 2001 From: Bernd Verst <4535280+berndverst@users.noreply.github.com> Date: Fri, 18 Nov 2022 18:02:09 -0800 Subject: [PATCH 60/87] Move tests around Signed-off-by: Bernd Verst <4535280+berndverst@users.noreply.github.com> --- .../component/azure/blobstorage/metadata.go | 39 ------------------- .../azure/blobstorage/metadata_test.go | 15 ------- .../component/azure/blobstorage/request.go | 38 ++++++++++++++++++ .../azure/blobstorage/request_test.go | 15 +++++++ 4 files changed, 53 insertions(+), 54 deletions(-) diff --git a/internal/component/azure/blobstorage/metadata.go b/internal/component/azure/blobstorage/metadata.go index 04a3499e5..af3db2061 100644 --- a/internal/component/azure/blobstorage/metadata.go +++ b/internal/component/azure/blobstorage/metadata.go @@ -21,7 +21,6 @@ import ( azauth "github.com/dapr/components-contrib/internal/authentication/azure" mdutils "github.com/dapr/components-contrib/metadata" - "github.com/dapr/kit/logger" ) type BlobStorageMetadata struct { @@ -87,41 +86,3 @@ func isValidPublicAccessType(accessType azblob.PublicAccessType) bool { return false } - -func SanitizeMetadata(log logger.Logger, metadata map[string]string) map[string]string { - for key, val := range metadata { - // Keep only letters and digits - n := 0 - newKey := make([]byte, len(key)) - for i := 0; i < len(key); i++ { - if (key[i] >= 'A' && key[i] <= 'Z') || - (key[i] >= 'a' && key[i] <= 'z') || - (key[i] >= '0' && key[i] <= '9') { - newKey[n] = key[i] - n++ - } - } - - if n != len(key) { - nks := string(newKey[:n]) - log.Warnf("metadata key %s contains disallowed characters, sanitized to %s", key, nks) - delete(metadata, key) - metadata[nks] = val - key = nks - } - - // Remove all non-ascii characters - n = 0 - newVal := make([]byte, len(val)) - for i := 0; i < len(val); i++ { - if val[i] > 127 { - continue - } - newVal[n] = val[i] - n++ - } - metadata[key] = string(newVal[:n]) - } - - return metadata -} diff --git a/internal/component/azure/blobstorage/metadata_test.go b/internal/component/azure/blobstorage/metadata_test.go index c466fb093..e0d648184 100644 --- a/internal/component/azure/blobstorage/metadata_test.go +++ b/internal/component/azure/blobstorage/metadata_test.go @@ -19,12 +19,9 @@ import ( "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob" "github.com/stretchr/testify/assert" - - "github.com/dapr/kit/logger" ) func TestParseMetadata(t *testing.T) { - logger := logger.NewLogger("test") var m map[string]string t.Run("parse all metadata", func(t *testing.T) { @@ -79,16 +76,4 @@ func TestParseMetadata(t *testing.T) { _, err := parseMetadata(m) assert.Error(t, err) }) - - t.Run("sanitize metadata if necessary", func(t *testing.T) { - m = map[string]string{ - "somecustomfield": "some-custom-value", - "specialfield": "special:valueÜ", - "not-allowed:": "not-allowed", - } - meta := SanitizeMetadata(logger, m) - assert.Equal(t, meta["somecustomfield"], "some-custom-value") - assert.Equal(t, meta["specialfield"], "special:value") - assert.Equal(t, meta["notallowed"], "not-allowed") - }) } diff --git a/internal/component/azure/blobstorage/request.go b/internal/component/azure/blobstorage/request.go index 38bc5e4e2..38f017bbc 100644 --- a/internal/component/azure/blobstorage/request.go +++ b/internal/component/azure/blobstorage/request.go @@ -71,3 +71,41 @@ func CreateBlobHTTPHeadersFromRequest(meta map[string]string, contentType *strin } return blobHTTPHeaders, nil } + +func SanitizeMetadata(log logger.Logger, metadata map[string]string) map[string]string { + for key, val := range metadata { + // Keep only letters and digits + n := 0 + newKey := make([]byte, len(key)) + for i := 0; i < len(key); i++ { + if (key[i] >= 'A' && key[i] <= 'Z') || + (key[i] >= 'a' && key[i] <= 'z') || + (key[i] >= '0' && key[i] <= '9') { + newKey[n] = key[i] + n++ + } + } + + if n != len(key) { + nks := string(newKey[:n]) + log.Warnf("metadata key %s contains disallowed characters, sanitized to %s", key, nks) + delete(metadata, key) + metadata[nks] = val + key = nks + } + + // Remove all non-ascii characters + n = 0 + newVal := make([]byte, len(val)) + for i := 0; i < len(val); i++ { + if val[i] > 127 { + continue + } + newVal[n] = val[i] + n++ + } + metadata[key] = string(newVal[:n]) + } + + return metadata +} diff --git a/internal/component/azure/blobstorage/request_test.go b/internal/component/azure/blobstorage/request_test.go index 051eb6f0f..74d92e7ed 100644 --- a/internal/component/azure/blobstorage/request_test.go +++ b/internal/component/azure/blobstorage/request_test.go @@ -51,3 +51,18 @@ func TestBlobHTTPHeaderGeneration(t *testing.T) { assert.Equal(t, "text/plain", *blobHeaders.BlobContentType) }) } + +func TestSanitizeRequestMetadata(t *testing.T) { + log := logger.NewLogger("test") + t.Run("sanitize metadata if necessary", func(t *testing.T) { + m := map[string]string{ + "somecustomfield": "some-custom-value", + "specialfield": "special:valueÜ", + "not-allowed:": "not-allowed", + } + meta := SanitizeMetadata(log, m) + assert.Equal(t, meta["somecustomfield"], "some-custom-value") + assert.Equal(t, meta["specialfield"], "special:value") + assert.Equal(t, meta["notallowed"], "not-allowed") + }) +} From 4d4b98d3399eff46809c1dec8d45888634349f09 Mon Sep 17 00:00:00 2001 From: ItalyPaleAle <43508+ItalyPaleAle@users.noreply.github.com> Date: Tue, 22 Nov 2022 04:33:47 +0000 Subject: [PATCH 61/87] Add conformance test for TTL in state stores Signed-off-by: ItalyPaleAle <43508+ItalyPaleAle@users.noreply.github.com> --- tests/config/state/tests.yml | 4 +- tests/conformance/state/state.go | 68 ++++++++++++++++++++++---------- 2 files changed, 50 insertions(+), 22 deletions(-) diff --git a/tests/config/state/tests.yml b/tests/config/state/tests.yml index d211c5021..b28a5434a 100644 --- a/tests/config/state/tests.yml +++ b/tests/config/state/tests.yml @@ -7,7 +7,7 @@ components: allOperations: true - component: memcached allOperations: false - operations: [ "set", "get", "delete", "bulkset", "bulkdelete" ] + operations: [ "set", "get", "delete", "bulkset", "bulkdelete", "ttl" ] - component: azure.cosmosdb allOperations: true - component: azure.blobstorage @@ -36,7 +36,7 @@ components: operations: ["set", "get", "delete", "etag", "bulkset", "bulkdelete", "first-write"] - component: cassandra allOperations: false - operations: [ "set", "get", "delete", "bulkset", "bulkdelete" ] + operations: [ "set", "get", "delete", "bulkset", "bulkdelete", "ttl" ] - component: cockroachdb allOperations: false operations: [ "set", "get", "delete", "bulkset", "bulkdelete", "transaction", "etag", "query" ] diff --git a/tests/conformance/state/state.go b/tests/conformance/state/state.go index a57bae49c..6e49fcd51 100644 --- a/tests/conformance/state/state.go +++ b/tests/conformance/state/state.go @@ -19,6 +19,7 @@ import ( "sort" "strings" "testing" + "time" "github.com/google/uuid" "github.com/stretchr/testify/assert" @@ -588,21 +589,20 @@ func ConformanceTests(t *testing.T, props map[string]string, statestore state.St err := statestore.Delete(&state.DeleteRequest{ Key: testKey, }) - require.Nil(t, err) + require.NoError(t, err) // Set an object. err = statestore.Set(&state.SetRequest{ Key: testKey, Value: firstValue, }) - require.Nil(t, err) + require.NoError(t, err) // Validate the set. res, err := statestore.Get(&state.GetRequest{ Key: testKey, }) - - require.Nil(t, err) + require.NoError(t, err) assertEquals(t, firstValue, res) etag := res.ETag @@ -612,7 +612,7 @@ func ConformanceTests(t *testing.T, props map[string]string, statestore state.St Value: secondValue, ETag: &fakeEtag, }) - require.NotNil(t, err) + require.Error(t, err) // Try and update with corect ETag, expect success. err = statestore.Set(&state.SetRequest{ @@ -620,13 +620,13 @@ func ConformanceTests(t *testing.T, props map[string]string, statestore state.St Value: secondValue, ETag: etag, }) - require.Nil(t, err) + require.NoError(t, err) // Validate the set. res, err = statestore.Get(&state.GetRequest{ Key: testKey, }) - require.Nil(t, err) + require.NoError(t, err) assertEquals(t, secondValue, res) require.NotEqual(t, etag, res.ETag) etag = res.ETag @@ -636,14 +636,14 @@ func ConformanceTests(t *testing.T, props map[string]string, statestore state.St Key: testKey, ETag: &fakeEtag, }) - require.NotNil(t, err) + require.Error(t, err) // Try and delete with correct ETag, expect success. err = statestore.Delete(&state.DeleteRequest{ Key: testKey, ETag: etag, }) - require.Nil(t, err) + require.NoError(t, err) }) } else { // Check if eTag feature is NOT listed @@ -701,21 +701,21 @@ func ConformanceTests(t *testing.T, props map[string]string, statestore state.St err := statestore.Delete(&state.DeleteRequest{ Key: testKey, }) - require.Nil(t, err) + require.NoError(t, err) err = statestore.Set(requestSet[0]) - require.Nil(t, err) + require.NoError(t, err) // Validate the set. res, err := statestore.Get(&state.GetRequest{ Key: testKey, }) - require.Nil(t, err) + require.NoError(t, err) assertEquals(t, firstValue, res) // Second write expect fail err = statestore.Set(requestSet[1]) - require.NotNil(t, err) + require.Error(t, err) }) } }) @@ -734,16 +734,16 @@ func ConformanceTests(t *testing.T, props map[string]string, statestore state.St err := statestore.Delete(&state.DeleteRequest{ Key: testKey, }) - require.Nil(t, err) + require.NoError(t, err) err = statestore.Set(request) - require.Nil(t, err) + require.NoError(t, err) // Validate the set. res, err := statestore.Get(&state.GetRequest{ Key: testKey, }) - require.Nil(t, err) + require.NoError(t, err) assertEquals(t, firstValue, res) etag := res.ETag @@ -758,13 +758,13 @@ func ConformanceTests(t *testing.T, props map[string]string, statestore state.St }, } err = statestore.Set(request) - require.Nil(t, err) + require.NoError(t, err) // Validate the set. res, err = statestore.Get(&state.GetRequest{ Key: testKey, }) - require.Nil(t, err) + require.NoError(t, err) require.NotEqual(t, etag, res.ETag) assertEquals(t, secondValue, res) @@ -772,12 +772,40 @@ func ConformanceTests(t *testing.T, props map[string]string, statestore state.St // Second write expect fail err = statestore.Set(request) - require.NotNil(t, err) + require.Error(t, err) + }) + } + + if config.HasOperation("ttl") { + t.Run("set and get with TTL", func(t *testing.T) { + err := statestore.Set(&state.SetRequest{ + Key: key + "-ttl", + Value: "⏱️", + Metadata: map[string]string{ + "ttlInSeconds": "2", + }, + }) + require.NoError(t, err) + + // Request immediately + res, err := statestore.Get(&state.GetRequest{ + Key: key + "-ttl", + }) + require.NoError(t, err) + assertEquals(t, "⏱️", res) + + // Wait for the object to expire and request again + time.Sleep(3 * time.Second) + res, err = statestore.Get(&state.GetRequest{ + Key: key + "-ttl", + }) + require.NoError(t, err) + assert.Nil(t, res.Data) }) } } -func assertEquals(t *testing.T, value interface{}, res *state.GetResponse) { +func assertEquals(t *testing.T, value any, res *state.GetResponse) { switch v := value.(type) { case intValueType: // Custom type requires case mapping From 7ee30a411b20ae96d0412f9e10d2494adb548b67 Mon Sep 17 00:00:00 2001 From: ItalyPaleAle <43508+ItalyPaleAle@users.noreply.github.com> Date: Tue, 22 Nov 2022 04:57:41 +0000 Subject: [PATCH 62/87] MongoDB doesn't support TTLs Signed-off-by: ItalyPaleAle <43508+ItalyPaleAle@users.noreply.github.com> --- tests/config/state/tests.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/config/state/tests.yml b/tests/config/state/tests.yml index b28a5434a..5b4b5bb7d 100644 --- a/tests/config/state/tests.yml +++ b/tests/config/state/tests.yml @@ -1,10 +1,10 @@ -# Supported operations: set, get, delete, bulkset, bulkdelete, transaction, etag, first-write, query +# Supported operations: set, get, delete, bulkset, bulkdelete, transaction, etag, first-write, query, ttl componentType: state components: - component: redis allOperations: true - component: mongodb - allOperations: true + operations: [ "set", "get", "delete", "bulkset", "bulkdelete", "transaction", "etag", "first-write", "query" ] - component: memcached allOperations: false operations: [ "set", "get", "delete", "bulkset", "bulkdelete", "ttl" ] From 79eed355cc750ba17477c58b343e4956e64dcf0c Mon Sep 17 00:00:00 2001 From: Shubham Sharma Date: Tue, 22 Nov 2022 10:58:29 +0530 Subject: [PATCH 63/87] Refactor dapr bot Signed-off-by: Shubham Sharma --- .github/scripts/dapr_bot.js | 208 +++++++++++++++++++++++++++++++++ .github/workflows/dapr-bot.yml | 97 ++------------- 2 files changed, 218 insertions(+), 87 deletions(-) create mode 100644 .github/scripts/dapr_bot.js diff --git a/.github/scripts/dapr_bot.js b/.github/scripts/dapr_bot.js new file mode 100644 index 000000000..c0e646fbc --- /dev/null +++ b/.github/scripts/dapr_bot.js @@ -0,0 +1,208 @@ +// list of owner who can control dapr-bot workflow +// TODO: Read owners from OWNERS file. +const owners = [ + "yaron2", + "berndverst", + "artursouza", + "mukundansundar", + "halspang", + "tanvigour", + "pkedy", + "amuluyavarote", + "daixiang0", + "ItalyPaleAle", + "jjcollinge", + "pravinpushkar", + "shivamkm07", + "shubham1172", + "skyao", + "msfussell", + "Taction", + "RyanLettieri", + "DeepanshuA", + "yash-nisar", + "addjuarez", + "tmacam", +]; + +const docsIssueBodyTpl = (issueNumber) => `This issue was automatically created by \ +[Dapr Bot](https://github.com/dapr/dapr/blob/master/.github/workflows/dapr-bot.yml) because a \"documentation required\" label \ +was added to dapr/components-contrib#${issueNumber}. \n\n\ +TODO: Add more details as per [this template](.github/ISSUE_TEMPLATE/new-content-needed.md).`; + +module.exports = async ({ github, context }) => { + if (context.eventName == "issue_comment" && context.payload.action == "created") { + await handleIssueCommentCreate({ github, context }); + } else if (context.eventName == "issues" && context.payload.action == "labeled") { + await handleIssueLabeled({ github, context }); + } else { + console.log(`[main] event ${context.eventName} not supported, exiting.`); + } +} + +/** + * Handle issue comment create event. + */ +async function handleIssueCommentCreate({ github, context }) { + const payload = context.payload; + const issue = context.issue; + const username = context.actor; + const isFromPulls = !!payload.issue.pull_request; + const commentBody = payload.comment.body; + + if (!commentBody) { + console.log("[handleIssueCommentCreate] comment body not found, exiting."); + return; + } + const command = commentBody.split(" ")[0]; + + // Commands that can be executed by anyone. + if (command === "/assign") { + await cmdAssign(github, issue, username, isFromPulls); + return; + } + + // Commands that can only be executed by owners. + if (owners.indexOf(username) < 0) { + console.log(`[handleIssueCommentCreate] user ${username} is not an owner, exiting.`); + return; + } + + switch (command) { + case "/make-me-laugh": + await cmdMakeMeLaugh(github, issue); + break; + case "/ok-to-test": + await cmdOkToTest(github, issue, isFromPulls); + break; + default: + console.log(`[handleIssueCommentCreate] command ${command} not found, exiting.`); + break; + } +} + + + +/** + * Handle issue labeled event. + */ +async function handleIssueLabeled({ github, context }) { + const payload = context.payload; + const label = payload.label.name; + const issueNumber = payload.issue.number; + + // This should not run in forks. + if (context.repo.owner !== "dapr") { + console.log("[handleIssueLabeled] not running in dapr repo, exiting."); + return; + } + + // Authorization is not required here because it's triggered by an issue label event. + // Only authorized users can add labels to issues. + if (label == "documentation required") { + // Open a new issue + await github.issues.create({ + owner: "dapr", + repo: "docs", + title: `New content needed for dapr/components-contrib#${issueNumber}`, + labels: ["content/missing-information", "created-by/dapr-bot"], + body: docsIssueBodyTpl(issueNumber), + }); + } else { + console.log(`[handleIssueLabeled] label ${label} not supported, exiting.`); + } +} + +/** + * Assign the issue to the user who commented. + * @param {*} github GitHub object reference + * @param {*} issue GitHub issue object + * @param {*} username GitHub user who commented + * @param {boolean} isFromPulls is the workflow triggered by a pull request? + */ +async function cmdAssign(github, issue, username, isFromPulls) { + if (isFromPulls) { + console.log("[cmdAssign] pull requests unsupported, skipping command execution."); + return; + } else if (issue.assignees && issue.assignees.length !== 0) { + console.log("[cmdAssign] issue already has assignees, skipping command execution."); + return; + } + + await github.issues.addAssignees({ + owner: issue.owner, + repo: issue.repo, + issue_number: issue.number, + assignees: [username], + }); +} + +/** + * Comment a funny joke. + * @param {*} github GitHub object reference + * @param {*} issue GitHub issue object + */ +async function cmdMakeMeLaugh(github, issue) { + const result = await github.request("https://official-joke-api.appspot.com/random_joke"); + jokedata = result.data; + joke = "I have a bad feeling about this."; + if (jokedata && jokedata.setup && jokedata.punchline) { + joke = `${jokedata.setup} - ${jokedata.punchline}`; + } + + await github.issues.createComment({ + owner: issue.owner, + repo: issue.repo, + issue_number: issue.number, + body: joke, + }); +} + + +/** + * Trigger e2e test for the pull request. + * @param {*} github GitHub object reference + * @param {*} issue GitHub issue object + * @param {boolean} isFromPulls is the workflow triggered by a pull request? + */ +async function cmdOkToTest(github, issue, isFromPulls) { + if (!isFromPulls) { + console.log("[cmdOkToTest] only pull requests supported, skipping command execution."); + return; + } + + // Get pull request + const pull = await github.pulls.get({ + owner: issue.owner, + repo: issue.repo, + pull_number: issue.number + }); + + if (pull && pull.data) { + // Get commit id and repo from pull head + const testPayload = { + pull_head_ref: pull.data.head.sha, + pull_head_repo: pull.data.head.repo.full_name, + command: "ok-to-test", + issue: issue, + }; + + // Fire repository_dispatch event to trigger certification test + await github.repos.createDispatchEvent({ + owner: issue.owner, + repo: issue.repo, + event_type: "certification-test", + client_payload: testPayload, + }); + + // Fire repository_dispatch event to trigger conformance test + await github.repos.createDispatchEvent({ + owner: issue.owner, + repo: issue.repo, + event_type: "conformance-test", + client_payload: testPayload, + }); + + console.log(`[cmdOkToTest] triggered certification and conformance tests for ${JSON.stringify(testPayload)}`); + } +} diff --git a/.github/workflows/dapr-bot.yml b/.github/workflows/dapr-bot.yml index c4ef5d1a1..0604b723c 100644 --- a/.github/workflows/dapr-bot.yml +++ b/.github/workflows/dapr-bot.yml @@ -14,99 +14,22 @@ name: dapr-bot on: - issue_comment: {types: created} + issue_comment: + types: [created] + issues: + types: [labeled] jobs: daprbot: name: bot-processor runs-on: ubuntu-latest steps: - - name: Comment analyzer - uses: actions/github-script@v1 + - name: Checkout code + uses: actions/checkout@v2 # required to make the script available for next step + - name: Issue analyzer + uses: actions/github-script@v4 with: github-token: ${{secrets.DAPR_BOT_TOKEN}} script: | - // list of owner who can control dapr-bot workflow - // TODO: Read owners from OWNERS file. - const owners = [ - "yaron2", - "berndverst", - "artursouza", - "mukundansundar", - "halspang", - "tanvigour", - "pkedy", - "amuluyavarote", - "daixiang0", - "ItalyPaleAle", - "jjcollinge", - "pravinpushkar", - "shivamkm07", - "shubham1172", - "skyao", - "msfussell", - "Taction", - "RyanLettieri", - "DeepanshuA", - "yash-nisar", - "addjuarez", - "tmacam", - ]; - const payload = context.payload; - const issue = context.issue; - const isFromPulls = !!payload.issue.pull_request; - const commentBody = payload.comment.body; - - if (!isFromPulls && commentBody && commentBody.indexOf("/assign") == 0) { - if (!issue.assignees || issue.assignees.length === 0) { - await github.issues.addAssignees({ - owner: issue.owner, - repo: issue.repo, - issue_number: issue.number, - assignees: [context.actor], - }) - } - - return; - } - - // actions above this check are enabled for everyone. - if (owners.indexOf(context.actor) < 0) { - return; - } - - if (isFromPulls && commentBody) { - if (commentBody.indexOf("/ok-to-test") == 0) { - // Get pull request - const pull = await github.pulls.get({ - owner: issue.owner, - repo: issue.repo, - pull_number: issue.number - }); - if (pull && pull.data) { - // Get commit id and repo from pull head - const testPayload = { - pull_head_ref: pull.data.head.sha, - pull_head_repo: pull.data.head.repo.full_name, - command: "ok-to-test", - issue: issue, - }; - - // Fire repository_dispatch event to trigger certification test - await github.repos.createDispatchEvent({ - owner: issue.owner, - repo: issue.repo, - event_type: "certification-test", - client_payload: testPayload, - }); - - // Fire repository_dispatch event to trigger conformance test - await github.repos.createDispatchEvent({ - owner: issue.owner, - repo: issue.repo, - event_type: "conformance-test", - client_payload: testPayload, - }); - } - } - } + const script = require('./.github/scripts/dapr_bot.js') + await script({github, context}) From 4dde34c2d14b377aa9c52630951beea9f6f6b8c2 Mon Sep 17 00:00:00 2001 From: "Alessandro (Ale) Segala" <43508+ItalyPaleAle@users.noreply.github.com> Date: Mon, 21 Nov 2022 21:53:51 -0800 Subject: [PATCH 64/87] Fix state.in-memory and enable conformance tests (#2303) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Fix state.in-memory and enable conf tests Signed-off-by: ItalyPaleAle <43508+ItalyPaleAle@users.noreply.github.com> * Fixed unit tests Signed-off-by: ItalyPaleAle <43508+ItalyPaleAle@users.noreply.github.com> * 💄 Signed-off-by: ItalyPaleAle <43508+ItalyPaleAle@users.noreply.github.com> Signed-off-by: ItalyPaleAle <43508+ItalyPaleAle@users.noreply.github.com> --- .github/workflows/conformance.yml | 1 + state/in-memory/in_memory.go | 173 ++++++++++++------- state/in-memory/in_memory_test.go | 33 ++-- tests/config/state/in-memory/statestore.yaml | 8 + tests/config/state/tests.yml | 3 + tests/conformance/common.go | 3 + 6 files changed, 142 insertions(+), 79 deletions(-) create mode 100644 tests/config/state/in-memory/statestore.yaml diff --git a/.github/workflows/conformance.yml b/.github/workflows/conformance.yml index be728c034..b5d7d19a9 100644 --- a/.github/workflows/conformance.yml +++ b/.github/workflows/conformance.yml @@ -84,6 +84,7 @@ jobs: - state.postgresql - state.redis - state.sqlserver + - state.in-memory - state.cockroachdb - workflows.temporal - state.rethinkdb diff --git a/state/in-memory/in_memory.go b/state/in-memory/in_memory.go index cc796bf56..1e94d99d6 100644 --- a/state/in-memory/in_memory.go +++ b/state/in-memory/in_memory.go @@ -15,22 +15,29 @@ package inmemory import ( "context" + "encoding/base64" + "encoding/json" + "errors" "fmt" "strconv" "sync" "time" + "github.com/google/uuid" jsoniter "github.com/json-iterator/go" "github.com/dapr/kit/logger" + "github.com/dapr/kit/ptr" "github.com/dapr/components-contrib/state" + "github.com/dapr/components-contrib/state/utils" ) type inMemStateStoreItem struct { - data []byte - etag *string - expire int64 + data []byte + etag *string + expire *int64 + isBinary bool } type inMemoryStore struct { @@ -61,10 +68,13 @@ func (store *inMemoryStore) Close() error { if store.cancel != nil { store.cancel() } + // release memory reference store.lock.Lock() defer store.lock.Unlock() - store.items = map[string]*inMemStateStoreItem{} + for k := range store.items { + delete(store.items, k) + } return nil } @@ -75,7 +85,7 @@ func (store *inMemoryStore) Features() []state.Feature { func (store *inMemoryStore) Delete(req *state.DeleteRequest) error { // step1: validate parameters - if err := store.doDeleteValidateParameters(req); err != nil { + if err := state.CheckRequestOptions(req.Options); err != nil { return err } @@ -94,13 +104,17 @@ func (store *inMemoryStore) Delete(req *state.DeleteRequest) error { return nil } -func (store *inMemoryStore) doDeleteValidateParameters(req *state.DeleteRequest) error { - return state.CheckRequestOptions(req.Options) -} - func (store *inMemoryStore) doValidateEtag(key string, etag *string, concurrency string) error { - if etag != nil && *etag != "" && concurrency == state.FirstWrite { - // For FirstWrite, we need to validate etag before delete + hasEtag := etag != nil && *etag != "" + + if concurrency == state.FirstWrite && !hasEtag { + item := store.items[key] + if item != nil { + return state.NewETagError(state.ETagMismatch, errors.New("item already exists and no etag was passed")) + } else { + return nil + } + } else if hasEtag { item := store.items[key] if item == nil { return state.NewETagError(state.ETagMismatch, fmt.Errorf("state not exist or expired for key=%s", key)) @@ -127,9 +141,8 @@ func (store *inMemoryStore) BulkDelete(req []state.DeleteRequest) error { } // step1: validate parameters - for i := 0; i < len(req); i++ { - if err := store.doDeleteValidateParameters(&req[i]); err != nil { + if err := state.CheckRequestOptions(&req[i].Options); err != nil { return err } } @@ -155,14 +168,32 @@ func (store *inMemoryStore) BulkDelete(req []state.DeleteRequest) error { func (store *inMemoryStore) Get(req *state.GetRequest) (*state.GetResponse, error) { item := store.doGetWithReadLock(req.Key) - if item != nil && isExpired(item.expire) { + if item != nil && isExpired(item) { item = store.doGetWithWriteLock(req.Key) } if item == nil { return &state.GetResponse{Data: nil, ETag: nil}, nil } - return &state.GetResponse{Data: unmarshal(item.data), ETag: item.etag}, nil + + data := item.data + if item.isBinary { + var ( + s string + err error + ) + + if err = jsoniter.Unmarshal(data, &s); err != nil { + return nil, err + } + + data, err = base64.StdEncoding.DecodeString(s) + if err != nil { + return nil, err + } + } + + return &state.GetResponse{Data: data, ETag: item.etag}, nil } func (store *inMemoryStore) doGetWithReadLock(key string) *inMemStateStoreItem { @@ -180,24 +211,36 @@ func (store *inMemoryStore) doGetWithWriteLock(key string) *inMemStateStoreItem if item == nil { return nil } - if isExpired(item.expire) { + if isExpired(item) { store.doDelete(key) return nil } return item } -func isExpired(expire int64) bool { - if expire <= 0 { +func isExpired(item *inMemStateStoreItem) bool { + if item == nil || item.expire == nil { return false } - return time.Now().UnixMilli() > expire + return time.Now().UnixMilli() > *item.expire } func (store *inMemoryStore) BulkGet(req []state.GetRequest) (bool, []state.BulkGetResponse, error) { return false, nil, nil } +func (store *inMemoryStore) marshal(v any) (bt []byte, isBinary bool, err error) { + byteArray, isBinary := v.([]uint8) + if isBinary { + v = base64.StdEncoding.EncodeToString(byteArray) + } + bt, err = utils.Marshal(v, json.Marshal) + if err != nil { + return nil, false, err + } + return bt, isBinary, nil +} + func (store *inMemoryStore) Set(req *state.SetRequest) error { // step1: validate parameters ttlInSeconds, err := store.doSetValidateParameters(req) @@ -205,31 +248,36 @@ func (store *inMemoryStore) Set(req *state.SetRequest) error { return err } - b, _ := marshal(req.Value) // step2 and step3 should be protected by write-lock store.lock.Lock() defer store.lock.Unlock() // step2: validate etag if needed - if err := store.doValidateEtag(req.Key, req.ETag, req.Options.Concurrency); err != nil { + err = store.doValidateEtag(req.Key, req.ETag, req.Options.Concurrency) + if err != nil { return err } // step3: do really set + bt, isBinary, err := store.marshal(req.Value) + if err != nil { + return err + } + // this operation won't fail - store.doSet(req.Key, b, req.ETag, ttlInSeconds) + store.doSet(req.Key, bt, ttlInSeconds, isBinary) return nil } func (store *inMemoryStore) doSetValidateParameters(req *state.SetRequest) (int, error) { err := state.CheckRequestOptions(req.Options) if err != nil { - return -1, err + return 0, err } ttlInSeconds, err := doParseTTLInSeconds(req.Metadata) if err != nil { - return -1, err + return 0, err } return ttlInSeconds, nil @@ -253,19 +301,26 @@ func doParseTTLInSeconds(metadata map[string]string) (int, error) { return i, nil } -func (store *inMemoryStore) doSet(key string, data []byte, etag *string, ttlInSeconds int) { - store.items[key] = &inMemStateStoreItem{ - data: data, - etag: etag, - expire: time.Now().UnixMilli() + int64(ttlInSeconds)*1000, +func (store *inMemoryStore) doSet(key string, data []byte, ttlInSeconds int, isBinary bool) { + etag := uuid.New().String() + el := &inMemStateStoreItem{ + data: data, + etag: &etag, + isBinary: isBinary, } + if ttlInSeconds > 0 { + el.expire = ptr.Of(time.Now().UnixMilli() + int64(ttlInSeconds)*1000) + } + + store.items[key] = el } // innerSetRequest is only used to pass ttlInSeconds and data with SetRequest. type innerSetRequest struct { - req state.SetRequest - ttlInSeconds int - data []byte + req state.SetRequest + ttl int + data []byte + isBinary bool } func (store *inMemoryStore) BulkSet(req []state.SetRequest) error { @@ -281,11 +336,15 @@ func (store *inMemoryStore) BulkSet(req []state.SetRequest) error { return err } - b, _ := marshal(req[i].Value) + bt, isBinary, err := store.marshal(req[i].Value) + if err != nil { + return err + } innerSetRequest := &innerSetRequest{ - req: req[i], - ttlInSeconds: ttlInSeconds, - data: b, + req: req[i], + ttl: ttlInSeconds, + data: bt, + isBinary: isBinary, } innerSetRequestList = append(innerSetRequestList, innerSetRequest) } @@ -305,7 +364,7 @@ func (store *inMemoryStore) BulkSet(req []state.SetRequest) error { // step3: do really set // these operations won't fail for _, innerSetRequest := range innerSetRequestList { - store.doSet(innerSetRequest.req.Key, innerSetRequest.data, innerSetRequest.req.ETag, innerSetRequest.ttlInSeconds) + store.doSet(innerSetRequest.req.Key, innerSetRequest.data, innerSetRequest.ttl, innerSetRequest.isBinary) } return nil } @@ -316,24 +375,28 @@ func (store *inMemoryStore) Multi(request *state.TransactionalStateRequest) erro } // step1: validate parameters - for _, o := range request.Operations { + for i, o := range request.Operations { if o.Operation == state.Upsert { s := o.Request.(state.SetRequest) ttlInSeconds, err := store.doSetValidateParameters(&s) if err != nil { return err } - b, _ := marshal(s.Value) + bt, isBinary, err := store.marshal(s.Value) + if err != nil { + return err + } innerSetRequest := &innerSetRequest{ - req: s, - ttlInSeconds: ttlInSeconds, - data: b, + req: s, + ttl: ttlInSeconds, + data: bt, + isBinary: isBinary, } // replace with innerSetRequest - o.Request = innerSetRequest + request.Operations[i].Request = innerSetRequest } else if o.Operation == state.Delete { d := o.Request.(state.DeleteRequest) - err := store.doDeleteValidateParameters(&d) + err := state.CheckRequestOptions(&d) if err != nil { return err } @@ -347,7 +410,7 @@ func (store *inMemoryStore) Multi(request *state.TransactionalStateRequest) erro // step2: validate etag if needed for _, o := range request.Operations { if o.Operation == state.Upsert { - s := o.Request.(innerSetRequest) + s := o.Request.(*innerSetRequest) err := store.doValidateEtag(s.req.Key, s.req.ETag, s.req.Options.Concurrency) if err != nil { return err @@ -365,8 +428,8 @@ func (store *inMemoryStore) Multi(request *state.TransactionalStateRequest) erro // these operations won't fail for _, o := range request.Operations { if o.Operation == state.Upsert { - s := o.Request.(innerSetRequest) - store.doSet(s.req.Key, s.data, s.req.ETag, s.ttlInSeconds) + s := o.Request.(*innerSetRequest) + store.doSet(s.req.Key, s.data, s.ttl, s.isBinary) } else if o.Operation == state.Delete { d := o.Request.(state.DeleteRequest) store.doDelete(d.Key) @@ -375,20 +438,6 @@ func (store *inMemoryStore) Multi(request *state.TransactionalStateRequest) erro return nil } -func marshal(value interface{}) ([]byte, error) { - v, _ := jsoniter.MarshalToString(value) - - return []byte(v), nil -} - -func unmarshal(val interface{}) []byte { - var output string - - jsoniter.UnmarshalFromString(string(val.([]byte)), &output) - - return []byte(output) -} - func (store *inMemoryStore) startCleanThread() { for { select { @@ -405,7 +454,7 @@ func (store *inMemoryStore) doCleanExpiredItems() { defer store.lock.Unlock() for key, item := range store.items { - if isExpired(item.expire) { + if item.expire != nil && isExpired(item) { store.doDelete(key) } } diff --git a/state/in-memory/in_memory_test.go b/state/in-memory/in_memory_test.go index 23625279e..88d801eb7 100644 --- a/state/in-memory/in_memory_test.go +++ b/state/in-memory/in_memory_test.go @@ -21,7 +21,6 @@ import ( "github.com/stretchr/testify/assert" "github.com/dapr/kit/logger" - "github.com/dapr/kit/ptr" "github.com/dapr/components-contrib/state" ) @@ -41,18 +40,19 @@ func TestReadAndWrite(t *testing.T) { setReq := &state.SetRequest{ Key: keyA, Value: valueA, - ETag: ptr.Of("the etag"), } err := store.Set(setReq) - assert.Nil(t, err) + assert.NoError(t, err) // get after set getReq := &state.GetRequest{ Key: keyA, } resp, err := store.Get(getReq) - assert.Nil(t, err) + assert.NoError(t, err) assert.NotNil(t, resp) - assert.Equal(t, valueA, string(resp.Data)) + assert.Equal(t, `"`+valueA+`"`, string(resp.Data)) + _ = assert.NotNil(t, resp.ETag) && + assert.NotEmpty(t, *resp.ETag) }) t.Run("get nothing when expired", func(t *testing.T) { @@ -63,7 +63,7 @@ func TestReadAndWrite(t *testing.T) { Metadata: map[string]string{"ttlInSeconds": "1"}, } err := store.Set(setReq) - assert.Nil(t, err) + assert.NoError(t, err) // simulate expiration time.Sleep(2 * time.Second) // get @@ -71,7 +71,7 @@ func TestReadAndWrite(t *testing.T) { Key: keyA, } resp, err := store.Get(getReq) - assert.Nil(t, err) + assert.NoError(t, err) assert.NotNil(t, resp) assert.Nil(t, resp.Data) assert.Nil(t, resp.ETag) @@ -81,31 +81,30 @@ func TestReadAndWrite(t *testing.T) { // set setReq := &state.SetRequest{ Key: "theSecondKey", - Value: "1234", - ETag: ptr.Of("the etag"), + Value: 1234, } err := store.Set(setReq) - assert.Nil(t, err) + assert.NoError(t, err) // get getReq := &state.GetRequest{ Key: "theSecondKey", } resp, err := store.Get(getReq) - assert.Nil(t, err) + assert.NoError(t, err) assert.NotNil(t, resp) - assert.Equal(t, "1234", string(resp.Data)) + assert.Equal(t, `1234`, string(resp.Data)) }) t.Run("BulkSet two keys", func(t *testing.T) { err := store.BulkSet([]state.SetRequest{{ Key: "theFirstKey", - Value: "666", + Value: "42", }, { Key: "theSecondKey", - Value: "777", + Value: "84", }}) - assert.Nil(t, err) + assert.NoError(t, err) }) t.Run("BulkGet fails when not supported", func(t *testing.T) { @@ -115,7 +114,7 @@ func TestReadAndWrite(t *testing.T) { Key: "theSecondKey", }}) - assert.Nil(t, err) + assert.NoError(t, err) assert.Equal(t, false, supportBulk) }) @@ -124,6 +123,6 @@ func TestReadAndWrite(t *testing.T) { Key: "theFirstKey", } err := store.Delete(req) - assert.Nil(t, err) + assert.NoError(t, err) }) } diff --git a/tests/config/state/in-memory/statestore.yaml b/tests/config/state/in-memory/statestore.yaml new file mode 100644 index 000000000..af0008cf5 --- /dev/null +++ b/tests/config/state/in-memory/statestore.yaml @@ -0,0 +1,8 @@ +apiVersion: dapr.io/v1alpha1 +kind: Component +metadata: + name: statestore +spec: + type: state.in-memory + version: v1 + metadata: [] \ No newline at end of file diff --git a/tests/config/state/tests.yml b/tests/config/state/tests.yml index d211c5021..cdd8e5ea3 100644 --- a/tests/config/state/tests.yml +++ b/tests/config/state/tests.yml @@ -43,3 +43,6 @@ components: - component: rethinkdb allOperations: false operations: [ "set", "get", "delete", "bulkset", "bulkdelete"] + - component: in-memory + allOperations: false + operations: [ "set", "get", "delete", "bulkset", "bulkdelete", "transaction", "etag", "first-write", "ttl" ] diff --git a/tests/conformance/common.go b/tests/conformance/common.go index 2229f0a9f..b19ce661d 100644 --- a/tests/conformance/common.go +++ b/tests/conformance/common.go @@ -74,6 +74,7 @@ import ( s_azuretablestorage "github.com/dapr/components-contrib/state/azure/tablestorage" s_cassandra "github.com/dapr/components-contrib/state/cassandra" s_cockroachdb "github.com/dapr/components-contrib/state/cockroachdb" + s_inmemory "github.com/dapr/components-contrib/state/in-memory" s_memcached "github.com/dapr/components-contrib/state/memcached" s_mongodb "github.com/dapr/components-contrib/state/mongodb" s_mysql "github.com/dapr/components-contrib/state/mysql" @@ -463,6 +464,8 @@ func loadStateStore(tc TestComponent) state.Store { store = s_memcached.NewMemCacheStateStore(testLogger) case "rethinkdb": store = s_rethinkdb.NewRethinkDBStateStore(testLogger) + case "in-memory": + store = s_inmemory.NewInMemoryStateStore(testLogger) default: return nil } From 7d5c06bc8df7b69ecc9aea5761357805f3751469 Mon Sep 17 00:00:00 2001 From: Bernd Verst <4535280+berndverst@users.noreply.github.com> Date: Wed, 23 Nov 2022 01:43:24 +0000 Subject: [PATCH 65/87] Make blob metadata case insensitive Signed-off-by: Bernd Verst <4535280+berndverst@users.noreply.github.com> --- .../component/azure/blobstorage/request.go | 43 +++++++++++-------- 1 file changed, 25 insertions(+), 18 deletions(-) diff --git a/internal/component/azure/blobstorage/request.go b/internal/component/azure/blobstorage/request.go index 38f017bbc..2d3dade3d 100644 --- a/internal/component/azure/blobstorage/request.go +++ b/internal/component/azure/blobstorage/request.go @@ -16,6 +16,7 @@ package blobstorage import ( b64 "encoding/base64" "fmt" + "strings" "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/blob" @@ -23,19 +24,25 @@ import ( ) const ( - contentTypeKey = "ContentType" - contentMD5Key = "ContentMD5" - contentEncodingKey = "ContentEncoding" - contentLanguageKey = "ContentLanguage" - contentDispositionKey = "ContentDisposition" - cacheControlKey = "CacheControl" + contentTypeKey = "contenttype" + contentMD5Key = "contentmd5" + contentEncodingKey = "contentencoding" + contentLanguageKey = "contentlanguage" + contentDispositionKey = "contentdisposition" + cacheControlKey = "cachecontrol" ) func CreateBlobHTTPHeadersFromRequest(meta map[string]string, contentType *string, log logger.Logger) (blob.HTTPHeaders, error) { + // build map to support arbitrary case + caseMap := make(map[string]string) + for k := range meta { + caseMap[strings.ToLower(k)] = k + } + blobHTTPHeaders := blob.HTTPHeaders{} - if val, ok := meta[contentTypeKey]; ok && val != "" { + if val, ok := meta[caseMap[contentTypeKey]]; ok && val != "" { blobHTTPHeaders.BlobContentType = &val - delete(meta, contentTypeKey) + delete(meta, caseMap[contentTypeKey]) } if contentType != nil { @@ -45,29 +52,29 @@ func CreateBlobHTTPHeadersFromRequest(meta map[string]string, contentType *strin blobHTTPHeaders.BlobContentType = contentType } - if val, ok := meta[contentMD5Key]; ok && val != "" { + if val, ok := meta[caseMap[contentMD5Key]]; ok && val != "" { sDec, err := b64.StdEncoding.DecodeString(val) if err != nil || len(sDec) != 16 { return blob.HTTPHeaders{}, fmt.Errorf("the MD5 value specified in Content MD5 is invalid, MD5 value must be 128 bits and base64 encoded") } blobHTTPHeaders.BlobContentMD5 = sDec - delete(meta, contentMD5Key) + delete(meta, caseMap[contentMD5Key]) } - if val, ok := meta[contentEncodingKey]; ok && val != "" { + if val, ok := meta[caseMap[contentEncodingKey]]; ok && val != "" { blobHTTPHeaders.BlobContentEncoding = &val - delete(meta, contentEncodingKey) + delete(meta, caseMap[contentEncodingKey]) } - if val, ok := meta[contentLanguageKey]; ok && val != "" { + if val, ok := meta[caseMap[contentLanguageKey]]; ok && val != "" { blobHTTPHeaders.BlobContentLanguage = &val - delete(meta, contentLanguageKey) + delete(meta, caseMap[contentLanguageKey]) } - if val, ok := meta[contentDispositionKey]; ok && val != "" { + if val, ok := meta[caseMap[contentDispositionKey]]; ok && val != "" { blobHTTPHeaders.BlobContentDisposition = &val - delete(meta, contentDispositionKey) + delete(meta, caseMap[contentDispositionKey]) } - if val, ok := meta[cacheControlKey]; ok && val != "" { + if val, ok := meta[caseMap[cacheControlKey]]; ok && val != "" { blobHTTPHeaders.BlobCacheControl = &val - delete(meta, cacheControlKey) + delete(meta, caseMap[cacheControlKey]) } return blobHTTPHeaders, nil } From 868daa4aef6630a60e8975fd50295d07351ff286 Mon Sep 17 00:00:00 2001 From: Shubham Sharma Date: Wed, 23 Nov 2022 08:08:43 +0530 Subject: [PATCH 66/87] More enhancements Signed-off-by: Shubham Sharma --- .github/scripts/dapr_bot.js | 30 +++++++++++++++++++++++------- .github/workflows/dapr-bot.yml | 2 ++ 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/.github/scripts/dapr_bot.js b/.github/scripts/dapr_bot.js index c0e646fbc..32e335c7f 100644 --- a/.github/scripts/dapr_bot.js +++ b/.github/scripts/dapr_bot.js @@ -30,11 +30,18 @@ const docsIssueBodyTpl = (issueNumber) => `This issue was automatically created was added to dapr/components-contrib#${issueNumber}. \n\n\ TODO: Add more details as per [this template](.github/ISSUE_TEMPLATE/new-content-needed.md).`; +const newComponentBodyTpl = (issueNumber) => `This issue was automatically created by \ +[Dapr Bot](https://github.com/dapr/dapr/blob/master/.github/workflows/dapr-bot.yml) because a \"new component\" label \ +was added to dapr/components-contrib#${issueNumber}. \n\n\ + +Please register the component in [cmd/daprd/components](https://github.com/dapr/dapr/tree/master/cmd/daprd/components), \ +similar to the ones in the folder (one file per component).`; + module.exports = async ({ github, context }) => { if (context.eventName == "issue_comment" && context.payload.action == "created") { await handleIssueCommentCreate({ github, context }); - } else if (context.eventName == "issues" && context.payload.action == "labeled") { - await handleIssueLabeled({ github, context }); + } else if ((context.eventName == "issues" || context.eventName == "pull_request") && context.payload.action == "labeled") { + await handleIssueOrPrLabeled({ github, context }); } else { console.log(`[main] event ${context.eventName} not supported, exiting.`); } @@ -84,23 +91,23 @@ async function handleIssueCommentCreate({ github, context }) { /** - * Handle issue labeled event. + * Handle issue or PR labeled event. */ -async function handleIssueLabeled({ github, context }) { +async function handleIssueOrPrLabeled({ github, context }) { const payload = context.payload; const label = payload.label.name; const issueNumber = payload.issue.number; // This should not run in forks. if (context.repo.owner !== "dapr") { - console.log("[handleIssueLabeled] not running in dapr repo, exiting."); + console.log("[handleIssueOrPrLabeled] not running in dapr repo, exiting."); return; } // Authorization is not required here because it's triggered by an issue label event. // Only authorized users can add labels to issues. if (label == "documentation required") { - // Open a new issue + // Open a new docs issue await github.issues.create({ owner: "dapr", repo: "docs", @@ -108,8 +115,17 @@ async function handleIssueLabeled({ github, context }) { labels: ["content/missing-information", "created-by/dapr-bot"], body: docsIssueBodyTpl(issueNumber), }); + } else if (label == "new component") { + // Open a new dapr issue + await github.issues.create({ + owner: "dapr", + repo: "dapr", + title: `Component registration for dapr/components-contrib#${issueNumber}`, + labels: ["area/components", "created-by/dapr-bot"], + body: newComponentBodyTpl(issueNumber), + }); } else { - console.log(`[handleIssueLabeled] label ${label} not supported, exiting.`); + console.log(`[handleIssueOrPrLabeled] label ${label} not supported, exiting.`); } } diff --git a/.github/workflows/dapr-bot.yml b/.github/workflows/dapr-bot.yml index 0604b723c..feead1f9c 100644 --- a/.github/workflows/dapr-bot.yml +++ b/.github/workflows/dapr-bot.yml @@ -18,6 +18,8 @@ on: types: [created] issues: types: [labeled] + pull_request: + types: [labeled] jobs: daprbot: From a6289ccff2ec91c6c46e56dbbcb4554ddc789c79 Mon Sep 17 00:00:00 2001 From: Deepanshu Agarwal Date: Thu, 24 Nov 2022 18:36:44 +0530 Subject: [PATCH 67/87] Ack Retained Message too Signed-off-by: Deepanshu Agarwal --- pubsub/mqtt/mqtt.go | 5 ----- 1 file changed, 5 deletions(-) diff --git a/pubsub/mqtt/mqtt.go b/pubsub/mqtt/mqtt.go index 3e56d0f57..f3c12f769 100644 --- a/pubsub/mqtt/mqtt.go +++ b/pubsub/mqtt/mqtt.go @@ -249,11 +249,6 @@ func (m *mqttPubSub) onMessage(ctx context.Context) func(client mqtt.Client, mqt return func(client mqtt.Client, mqttMsg mqtt.Message) { ack := false defer func() { - // Do not send N/ACKs on retained messages - if mqttMsg.Retained() { - return - } - // MQTT does not support NACK's, so in case of error we need to re-enqueue the message and then send a positive ACK for this message // Note that if the connection drops before the message is explicitly ACK'd below, then it's automatically re-sent (assuming QoS is 1 or greater, which is the default). So we do not risk losing messages. // Problem with this approach is that if the service crashes between the time the message is re-enqueued and when the ACK is sent, the message may be delivered twice From 9d6f1e0ded5de318da47b285dee5035c9620c50a Mon Sep 17 00:00:00 2001 From: Tiago Alves Macambira Date: Fri, 25 Nov 2022 18:58:17 -0800 Subject: [PATCH 68/87] Additional tests for Hashicorp Vaul Secret Store certification. * This PR adds additional tests to complete vault certification. A detailed test plann is added to its README. * Fixes a vault behaviour regarding its multiple key-values per secret behaviour when its `valueType` flag is set to `text`. This is a follow up to dapr/components-contrib#2140. Closes #1926. Signed-off-by: Tiago Alves Macambira --- .../setup-hashicorp-vault-secrets.sh | 2 + .../docker-compose-hashicorp-vault.yml | 3 +- secretstores/README.md | 2 +- secretstores/hashicorp/vault/vault.go | 6 +- secretstores/hashicorp/vault/vault_test.go | 45 +- .../secretstores/hashicorp/vault/README.md | 128 ++- .../vault/components/caFamily/Makefile | 48 ++ .../vault/components/caFamily/README.md | 26 + .../docker-compose-hashicorp-vault.yml | 46 ++ .../caFamily/badCaCert/hashicorp-vault.yml | 20 + .../docker-compose-hashicorp-vault.yml | 46 ++ .../hashicorp-vault.yml | 20 + .../docker-compose-hashicorp-vault.yml | 46 ++ .../badTlsServerName/hashicorp-vault.yml | 20 + .../caCert/docker-compose-hashicorp-vault.yml | 46 ++ .../caFamily/caCert/hashicorp-vault.yml | 20 + .../caPath/docker-compose-hashicorp-vault.yml | 46 ++ .../caFamily/caPath/hashicorp-vault.yml | 20 + .../caPem/docker-compose-hashicorp-vault.yml | 46 ++ .../caFamily/caPem/hashicorp-vault.yml | 59 ++ .../caPem/hashicorp-vault.yml.template | 20 + .../components/caFamily/certificates/cert.pem | 34 + .../certificates/incorrect-ca-cert.pem | 34 + .../certificates/incorrect-ca-key.pem | 52 ++ .../components/caFamily/certificates/key.pem | 52 ++ .../caFamily/vaultConfig/vault_server.hcl | 15 + .../docker-compose-hashicorp-vault.yml | 37 + .../customSecretsPath/hashicorp-vault.yml | 15 + .../setup-hashicorp-vault-secrets.sh | 31 + .../enginePath/secret/hashicorp-vault.yml | 15 + .../docker-compose-hashicorp-vault.yml | 38 + .../vaultAddr/missing/hashicorp-vault.yml | 19 + .../docker-compose-hashicorp-vault.yml | 38 + .../hashicorp-vault.yml | 19 + .../docker-compose-hashicorp-vault.yml | 36 + .../vaultAddr/nonStdPort/hashicorp-vault.yml | 14 + .../wrongAddress/hashicorp-vault.yml | 13 + .../vaultKVPrefix/hashicorp-vault.yml | 15 + .../vaultKVUsePrefixFalse/hashicorp-vault.yml | 15 + .../badVaultToken/hashicorp-vault.yml | 14 + .../both/hashicorp-vault.yml | 16 + .../neither/hashicorp-vault.yml | 13 + .../hashicorp-vault.yml | 15 + .../vault_token_file.txt | 1 + .../hashicorp-vault.yml | 14 + .../vaultValueTypeText/hashicorp-vault.yml | 15 + .../docker-compose-hashicorp-vault.yml | 37 + .../components/versioning/hashicorp-vault.yml | 13 + .../seed-secret-with-multiple-versions.sh | 34 + .../hashicorp/vault/vault_test.go | 750 +++++++++++++++--- 50 files changed, 2014 insertions(+), 115 deletions(-) create mode 100644 tests/certification/secretstores/hashicorp/vault/components/caFamily/Makefile create mode 100644 tests/certification/secretstores/hashicorp/vault/components/caFamily/README.md create mode 100644 tests/certification/secretstores/hashicorp/vault/components/caFamily/badCaCert/docker-compose-hashicorp-vault.yml create mode 100644 tests/certification/secretstores/hashicorp/vault/components/caFamily/badCaCert/hashicorp-vault.yml create mode 100644 tests/certification/secretstores/hashicorp/vault/components/caFamily/badCaCertAndSkipVerify/docker-compose-hashicorp-vault.yml create mode 100644 tests/certification/secretstores/hashicorp/vault/components/caFamily/badCaCertAndSkipVerify/hashicorp-vault.yml create mode 100644 tests/certification/secretstores/hashicorp/vault/components/caFamily/badTlsServerName/docker-compose-hashicorp-vault.yml create mode 100644 tests/certification/secretstores/hashicorp/vault/components/caFamily/badTlsServerName/hashicorp-vault.yml create mode 100644 tests/certification/secretstores/hashicorp/vault/components/caFamily/caCert/docker-compose-hashicorp-vault.yml create mode 100644 tests/certification/secretstores/hashicorp/vault/components/caFamily/caCert/hashicorp-vault.yml create mode 100644 tests/certification/secretstores/hashicorp/vault/components/caFamily/caPath/docker-compose-hashicorp-vault.yml create mode 100644 tests/certification/secretstores/hashicorp/vault/components/caFamily/caPath/hashicorp-vault.yml create mode 100644 tests/certification/secretstores/hashicorp/vault/components/caFamily/caPem/docker-compose-hashicorp-vault.yml create mode 100644 tests/certification/secretstores/hashicorp/vault/components/caFamily/caPem/hashicorp-vault.yml create mode 100644 tests/certification/secretstores/hashicorp/vault/components/caFamily/caPem/hashicorp-vault.yml.template create mode 100644 tests/certification/secretstores/hashicorp/vault/components/caFamily/certificates/cert.pem create mode 100644 tests/certification/secretstores/hashicorp/vault/components/caFamily/certificates/incorrect-ca-cert.pem create mode 100644 tests/certification/secretstores/hashicorp/vault/components/caFamily/certificates/incorrect-ca-key.pem create mode 100644 tests/certification/secretstores/hashicorp/vault/components/caFamily/certificates/key.pem create mode 100644 tests/certification/secretstores/hashicorp/vault/components/caFamily/vaultConfig/vault_server.hcl create mode 100644 tests/certification/secretstores/hashicorp/vault/components/enginePath/customSecretsPath/docker-compose-hashicorp-vault.yml create mode 100644 tests/certification/secretstores/hashicorp/vault/components/enginePath/customSecretsPath/hashicorp-vault.yml create mode 100755 tests/certification/secretstores/hashicorp/vault/components/enginePath/customSecretsPath/setup-hashicorp-vault-secrets.sh create mode 100644 tests/certification/secretstores/hashicorp/vault/components/enginePath/secret/hashicorp-vault.yml create mode 100644 tests/certification/secretstores/hashicorp/vault/components/vaultAddr/missing/docker-compose-hashicorp-vault.yml create mode 100644 tests/certification/secretstores/hashicorp/vault/components/vaultAddr/missing/hashicorp-vault.yml create mode 100644 tests/certification/secretstores/hashicorp/vault/components/vaultAddr/missingSkipVerifyFalse/docker-compose-hashicorp-vault.yml create mode 100644 tests/certification/secretstores/hashicorp/vault/components/vaultAddr/missingSkipVerifyFalse/hashicorp-vault.yml create mode 100644 tests/certification/secretstores/hashicorp/vault/components/vaultAddr/nonStdPort/docker-compose-hashicorp-vault.yml create mode 100644 tests/certification/secretstores/hashicorp/vault/components/vaultAddr/nonStdPort/hashicorp-vault.yml create mode 100644 tests/certification/secretstores/hashicorp/vault/components/vaultAddr/wrongAddress/hashicorp-vault.yml create mode 100644 tests/certification/secretstores/hashicorp/vault/components/vaultKVPrefix/hashicorp-vault.yml create mode 100644 tests/certification/secretstores/hashicorp/vault/components/vaultKVUsePrefixFalse/hashicorp-vault.yml create mode 100644 tests/certification/secretstores/hashicorp/vault/components/vaultTokenAndTokenMountPath/badVaultToken/hashicorp-vault.yml create mode 100644 tests/certification/secretstores/hashicorp/vault/components/vaultTokenAndTokenMountPath/both/hashicorp-vault.yml create mode 100644 tests/certification/secretstores/hashicorp/vault/components/vaultTokenAndTokenMountPath/neither/hashicorp-vault.yml create mode 100644 tests/certification/secretstores/hashicorp/vault/components/vaultTokenAndTokenMountPath/tokenMountPathHappyCase/hashicorp-vault.yml create mode 100644 tests/certification/secretstores/hashicorp/vault/components/vaultTokenAndTokenMountPath/tokenMountPathHappyCase/vault_token_file.txt create mode 100644 tests/certification/secretstores/hashicorp/vault/components/vaultTokenAndTokenMountPath/tokenMountPathPointsToBrokenPath/hashicorp-vault.yml create mode 100644 tests/certification/secretstores/hashicorp/vault/components/vaultValueTypeText/hashicorp-vault.yml create mode 100644 tests/certification/secretstores/hashicorp/vault/components/versioning/docker-compose-hashicorp-vault.yml create mode 100644 tests/certification/secretstores/hashicorp/vault/components/versioning/hashicorp-vault.yml create mode 100755 tests/certification/secretstores/hashicorp/vault/components/versioning/seed-secret-with-multiple-versions.sh diff --git a/.github/infrastructure/conformance/hashicorp/setup-hashicorp-vault-secrets.sh b/.github/infrastructure/conformance/hashicorp/setup-hashicorp-vault-secrets.sh index 35ad267d0..00c004528 100755 --- a/.github/infrastructure/conformance/hashicorp/setup-hashicorp-vault-secrets.sh +++ b/.github/infrastructure/conformance/hashicorp/setup-hashicorp-vault-secrets.sh @@ -16,6 +16,8 @@ for attempt in `seq $MAX_ATTEMPTS`; do if vault status && vault kv put secret/dapr/conftestsecret conftestsecret=abcd && vault kv put secret/dapr/secondsecret secondsecret=efgh && + vault kv put secret/secretWithNoPrefix noPrefixKey=noProblem && + vault kv put secret/alternativePrefix/secretUnderAlternativePrefix altPrefixKey=altPrefixValue && vault kv put secret/dapr/multiplekeyvaluessecret first=1 second=2 third=3; then echo ✅ secrets set; diff --git a/.github/infrastructure/docker-compose-hashicorp-vault.yml b/.github/infrastructure/docker-compose-hashicorp-vault.yml index 7d5cc7de0..eafd2cef8 100644 --- a/.github/infrastructure/docker-compose-hashicorp-vault.yml +++ b/.github/infrastructure/docker-compose-hashicorp-vault.yml @@ -1,8 +1,9 @@ version: '3.9' # Use a YAML reference to define VAULT_TOKEN and DOCKER_IMAGE only once -x-common-vaues: +x-common-values: # This should match tests/config/secrestore/hashicorp/vault/hashicorp-vault.yaml + # This should match .github/infrastructure/conformance/hashicorp/vault_token_file.txt vault_token: &VAULT_TOKEN "vault-dev-root-token-id" # Reuse the same docker image to save on resources and because the base vault image # has everything we need for seeding the initial key values too. diff --git a/secretstores/README.md b/secretstores/README.md index 66725a685..3631ceb65 100644 --- a/secretstores/README.md +++ b/secretstores/README.md @@ -4,4 +4,4 @@ Secret Stores provide a common way to interact with different secret stores, clo ## Implementing a new Secret Store -A compliant secret store needs to implement the `SecretStore` inteface included in the [`secret_store.go`](secret_store.go) file. +A compliant secret store needs to implement the `SecretStore` interface included in the [`secret_store.go`](secret_store.go) file. diff --git a/secretstores/hashicorp/vault/vault.go b/secretstores/hashicorp/vault/vault.go index da029b9fa..0d540c2ee 100644 --- a/secretstores/hashicorp/vault/vault.go +++ b/secretstores/hashicorp/vault/vault.go @@ -508,5 +508,9 @@ func readCertificateFolder(certPool *x509.CertPool, path string) error { // Features returns the features available in this secret store. func (v *vaultSecretStore) Features() []secretstores.Feature { - return []secretstores.Feature{secretstores.FeatureMultipleKeyValuesPerSecret} + if v.vaultValueType == valueTypeText { + return []secretstores.Feature{} + } else { + return []secretstores.Feature{secretstores.FeatureMultipleKeyValuesPerSecret} + } } diff --git a/secretstores/hashicorp/vault/vault_test.go b/secretstores/hashicorp/vault/vault_test.go index 0fc662e84..093667d53 100644 --- a/secretstores/hashicorp/vault/vault_test.go +++ b/secretstores/hashicorp/vault/vault_test.go @@ -409,10 +409,49 @@ func getCertificate() []byte { } func TestGetFeatures(t *testing.T) { - s := NewHashiCorpVaultSecretStore(logger.NewLogger("test")) - // Yes, we are skipping initialization as feature retrieval doesn't depend on it. - t.Run("Vault supports MULTIPLE_KEY_VALUES_PER_SECRET", func(t *testing.T) { + initVaultWithVaultValueType := func(vaultValueType string) secretstores.SecretStore { + properties := map[string]string{ + "vaultToken": expectedTok, + "skipVerify": "true", + "vaultValueType": vaultValueType, + } + + m := secretstores.Metadata{ + Base: metadata.Base{Properties: properties}, + } + + target := &vaultSecretStore{ + client: nil, + logger: nil, + } + + // This call will throw an error on Windows systems because of the of + // the call x509.SystemCertPool() because system root pool is not + // available on Windows so ignore the error for when the tests are run + // on the Windows platform during CI + _ = target.Init(m) + + return target + } + + t.Run("Vault supports MULTIPLE_KEY_VALUES_PER_SECRET by default", func(t *testing.T) { + // Yes, we are skipping initialization as feature retrieval doesn't depend on it for the default value + s := NewHashiCorpVaultSecretStore(logger.NewLogger("test")) f := s.Features() assert.True(t, secretstores.FeatureMultipleKeyValuesPerSecret.IsPresent(f)) }) + + t.Run("Vault supports MULTIPLE_KEY_VALUES_PER_SECRET if configured with vaultValueType=map", func(t *testing.T) { + // Yes, we are skipping initialization as feature retrieval doesn't depend on it for the default value + s := initVaultWithVaultValueType("text") + f := s.Features() + assert.False(t, secretstores.FeatureMultipleKeyValuesPerSecret.IsPresent(f)) + }) + + t.Run("Vault does not support MULTIPLE_KEY_VALUES_PER_SECRET if configured with vaultValueType=text", func(t *testing.T) { + // Yes, we are skipping initialization as feature retrieval doesn't depend on it for the default value + s := initVaultWithVaultValueType("text") + f := s.Features() + assert.False(t, secretstores.FeatureMultipleKeyValuesPerSecret.IsPresent(f)) + }) } diff --git a/tests/certification/secretstores/hashicorp/vault/README.md b/tests/certification/secretstores/hashicorp/vault/README.md index 480417e4b..b4ee693f5 100644 --- a/tests/certification/secretstores/hashicorp/vault/README.md +++ b/tests/certification/secretstores/hashicorp/vault/README.md @@ -16,17 +16,118 @@ This secret store [supports the following features][features]: ## Test network instability 1. Vault component does not expose a time out configuration option. For this test, let's assume a 1 minute timeout. 2. Retrieve a key to show the connection is fine. -3. Interrupt the network (Vault port, 8200) for longer than the established timeout value. +3. Interrupt the network on Vault's port (8200) for longer than the established timeout value. 4. Wait a few seconds (less than the timeout value). 5. Try to read the key from step 2 and assert it is still there. ## Test support for multiple keys under the same secret -1. Test retrieval of secrets with multiple keys under it +1. Test retrieval of secrets with multiple keys under it. + +## Tests for metadata fields + +### Tests for `vaultKVPrefix`, `vaultKVUsePrefix` and `vaultValueTypeText` + +1. Verify `vaultKVPrefix` is used + * set field to to non default value + * run dapr application with component + * component should successfully initialize + * component should advertise `multipleKeyValuesPerSecret` feature + * retrieval of key under registered under new prefix should succeed + * keys under default and empty prefixes should be missing +1. Verify `vaultKVUsePrefix` is used + * set field to `false` (non default value) + * run dapr application with component + * component should successfully initialize + * component should advertise `multipleKeyValuesPerSecret` feature + * retrieval of key registered without (empty) prefix should succeed + * keys under default and non-default prefix from step above should be missing +1. Verify `vaultValueTypeText` is used + * set field to to non default value `text` + * run dapr application with component + * component should successfully initialize + * component should **not** advertise `multipleKeyValuesPerSecret` feature + * retrieval of key under registered under new prefix should succeed + * keys under default and empty prefixes should be missing + + +### Tests for `vaultToken` and `vaultTokenMountPath` + +1. Verify `vaultToken` is used (happy case) + * The baseline fo this test is all the previous test are using a known-to-work value that matches what our docker-compose environment sets up. +1. Verify failure when we use a `vaultToken` value that does not match what our environment sets up +1. Verify `vaultTokenMountPath` is used (happy case) +1. Verify failure when `vaultTokenMountPath` points to a broken path +1. Verify failure when both `vaultToken` and `vaultTokenMountPath` are missing +1. Verify failure when both `vaultToken` and `vaultTokenMountPath` are present + + +### Tests for vaultAddr + +1. Verify `vaultAddr` is used (happy case) + * The baseline fo this test is all the previous test are using this flag with a known-to-work value that matches what our docker-compose environment sets up and is **not the default**. +1. Verify initialization and operation success when `vaultAddr` is missing `skipVerify` is `true` + * Start a vault instance using a self-signed HTTPS certificate. + * Component configuration lacks `vaultAddr` and defaults to address `https://127.0.0.1:8200` + * Due to `skipVerify` the component accepts the self-signed certificate +1. Verify initialization success but operation failure when `vaultAddr` is missing `skipVerify` is `false` + * Start a vault instance using a self-signed HTTPS certificate. + * Component configuration lacks `vaultAddr` and defaults to address `https://127.0.0.1:8200` + * Since `skipVerify` is disable the component requires a valid TLS certificate and refuses to connect to our vault instance, failing requests. +1. Verify `vaultAddr` is used when it points to a non-std port + * Start a vault instance in dev-mode (HTTP) but listening on a non-std port + * Modify component configuration to use this non-std port + * Ensure component initialization success and successful retrieval of secrets +1. Verify successful initialization but secret retrieval failure when `vaultAddr` points to an address not served by a Vault + * Start a vault instance in dev-mode (HTTP) listening on std port + * Modify component configuration to use a distinct (non-std) port + * Ensure component initialization success but secret retrieval failure + + +### Tests for enginePath + +1. Verify that setting `enginePath` to an explicit default value works +1. Verify that setting `enginePath` to a custom value (`TestEnginePathCustomSecretsPath`) works + * Start a vault instance in dev-mode + * In the companion shell script that seeds the vault instance with secrets, + 1. Create a new **path** named `customSecretsPath` that uses the KV engine version 2 (`-version=2 kv` or `kv-v2`) + * We cannot use version 1 as the vault component lacks support for non-versioned engines. + 2. Seeds this path with a secret specific for this test (to avoid the risk of false-positive tests) + * Verify that the custom path has secrets under it using BulkList (this is a sanity check) + * Verify that the custom path-specific secret is found + + +### Tests for CA and other certificate-related parameters + +TODO: Should we add code to enforce that only one of these is provided? + +1. Verify happy-case behavior when `caPem` is set to valid CA certificate and `tlsServerName` matches the server name and `skipVerify` is false. +1. Verify happy-case behavior when `caPath` is set to valid CA certificate and `tlsServerName` matches the server name and `skipVerify` is false. +1. Verify happy-case behavior when `caCert` is set to valid CA certificate and `tlsServerName` matches the server name and `skipVerify` is false. +1. Verify successful initialization but secret retrieval failure when `caPem` is set to a valid server certificate (baseline) but `tlsServerName` does not match the server name and `skipVerify` is false. +1. Verify successful initialization but secret retrieval failure when `caPem` is set to an invalid server certificate (flag under test) despite `tlsServerName` matching the server name and `skipVerify` is false. + +1. Same as the one above but `skipVerify` is true and we should observe happy-case behavior. + +1. skipVerify + * We also tested before with the vault-generated self-signed cert while testing for `vaultAddr` + + +#### Versioning + +1. Verify success on retrieval of a past version of a secret + * Start a vault instance in dev-mode (HTTP) + * Seed vault instance with multiple versions of a single secret + * Use standard component configuration + * Ensure component initialization success + * Ensure successful retrieval of latest version of the secret + * Ensure successful retrieval of an specific version of the secret ## Out of scope +1. Verifying how vault component handles engines that do not support versioning, like KV version 1 + * Vault component only handles engines with version support (Bug?) 1. Tests verifying writing and updating a secret since secret stores do not expose this functionality. @@ -34,8 +135,24 @@ This secret store [supports the following features][features]: Under the current directory run: +```shell +GOLANG_PROTOBUF_REGISTRATION_CONFLICT=warn go test -v vault_test.go ``` -go test -v vault_test.go + +To run an specific test run (replacing `TestVersioning` with the name of the test method): + +```shell +GOLANG_PROTOBUF_REGISTRATION_CONFLICT=warn go test -run TestVersioning -v vault_test.go +``` + +### Docker-compose + +You might need to verify if docker-compose is doing what you think it is doing: seeding the right secrets or even booting up properly. + +Head to the directory hosting the `docker-compose-hashicorp-vault.yml` file and run: + +```shell +docker-compose -f docker-compose-hashicorp-vault.yml up --remove-orphans ``` # References: @@ -44,7 +161,10 @@ go test -v vault_test.go * [List of secret store components and their features][features] * [PR with Conformance tests for Hashicorp Vault][conformance] * [HashiCorp Vault API reference](https://www.vaultproject.io/api-docs) +* [Vault Official Docker image documentation][vault-docker] + [HashiCorp Vault Secret Store]: https://docs.dapr.io/reference/components-reference/supported-secret-stores/hashicorp-vault/ [features]: https://docs.dapr.io/reference/components-reference/supported-secret-stores/ -[conformance]: https://github.com/dapr/components-contrib/pull/2031 \ No newline at end of file +[conformance]: https://github.com/dapr/components-contrib/pull/2031 +[vault-docker]: https://hub.docker.com/_/vault/ \ No newline at end of file diff --git a/tests/certification/secretstores/hashicorp/vault/components/caFamily/Makefile b/tests/certification/secretstores/hashicorp/vault/components/caFamily/Makefile new file mode 100644 index 000000000..548a7edfc --- /dev/null +++ b/tests/certification/secretstores/hashicorp/vault/components/caFamily/Makefile @@ -0,0 +1,48 @@ + +TARGETS = certificates/key.pem certificates/cert.pem caPem/hashicorp-vault.yml certificates/incorrect-ca-key.pem certificates/incorrect-ca-cert.pem + +all: $(TARGETS) + +# Create cert and key lasting 10 years, no password, no prompt for +# subject details. Also set subjectAltName so we avoid the +# "x509: certificate relies on legacy Common Name field" errors + +certificates/key.pem certificates/cert.pem: + openssl req -x509 -newkey rsa:4096 \ + -keyout certificates/key.pem \ + -out certificates/cert.pem \ + -sha256 -days 3650 \ + -nodes \ + -addext "subjectAltName = DNS:hashicorp_vault,DNS:localhost,IP:127.0.0.1" \ + -subj "/C=CA/ST=BC/L=Vancouver/O=Dapr Testing/OU=Org/CN=www.dapr.io" + chmod -v 644 certificates/key.pem certificates/cert.pem + +# We use this for negative tests that ensure we reject connecting to +# a server using a distinct Certificate Authority -- despite the server certificate +# having all the right identifiers +certificates/incorrect-ca-key.pem certificates/incorrect-ca-cert.pem: + openssl req -x509 -newkey rsa:4096 \ + -keyout certificates/incorrect-ca-key.pem \ + -out certificates/incorrect-ca-cert.pem \ + -sha256 -days 3650 \ + -nodes \ + -addext "subjectAltName = DNS:hashicorp_vault,DNS:localhost,IP:127.0.0.1" \ + -subj "/C=CA/ST=BC/L=Vancouver/O=Dapr Testing/OU=Org/CN=www.dapr.io" + chmod -v 644 certificates/incorrect-ca-key.pem certificates/incorrect-ca-cert.pem + + +caPem/hashicorp-vault.yml: caPem/hashicorp-vault.yml.template certificates/cert.pem + set -e; \ + echo "#\n# THIS FILE IS AUTO-GENERATED - DO NOT EDIT\n#\n\n" > $@.tmp; \ + cat caPem/hashicorp-vault.yml.template >> $@.tmp;\ + sed 's/^/ /' certificates/cert.pem >> $@.tmp; \ + mv -f $@.tmp $@ + +# %: .tmp.% +# mv $< $@ + +clean: + rm -f -v $(TARGETS) + +.PHONY: clean +.PHONY: all \ No newline at end of file diff --git a/tests/certification/secretstores/hashicorp/vault/components/caFamily/README.md b/tests/certification/secretstores/hashicorp/vault/components/caFamily/README.md new file mode 100644 index 000000000..708bd2bd7 --- /dev/null +++ b/tests/certification/secretstores/hashicorp/vault/components/caFamily/README.md @@ -0,0 +1,26 @@ +# Certificate-related tests + +These tests are particularly tricky to setup- so a little README in case you decide to change +this in the future and things break. + +# vault, `-dev-tls` and its default port + +To make our testing easier we start vault with `-dev-tls`. We do this: +* to keep the development behavior on, +* to force vault to start with a default TLS listener with its own self-signed TLS cert. We will + use this listener for our negative tests (for `skipValidation` and `tlsServerName`). + +To keep the rest of the test setup consistent and similar to other tests, we move this listener to a non-default port. + + +# Using and generating our very own certificate and key + +Besides `-dev-tls`, we also instruct vault to use a configuration that defines another listener using `-config /vault/config/vault_server.hcl`. This listener, defined in the `config/vault_server.hcl` is configured use a certificate-key pair we generated ourselves. It also binds this listener to the default vault port - to make the keep some sort of consistency in the test setup. + +We use this certificate we generated to assist with the validation of `caPem`, `caCert`, `caPath`, `skipValidate` and `tlsServerName` flags. All of these refer to the same certificate. Testing `caPem` is a bit special in that it needs the certificate inlined in the component YAML file. + +A Makefile is included here in order to document and to ease re-generation of the certificate and keys. It will also re-generate the `caPem`-dependent component YAML, so one does not have to remember updating it whenever the certificate is updated or regenerated. + +# Misc. references + +For how to configure the vault docker image we are using check https://hub.docker.com/_/vault/ \ No newline at end of file diff --git a/tests/certification/secretstores/hashicorp/vault/components/caFamily/badCaCert/docker-compose-hashicorp-vault.yml b/tests/certification/secretstores/hashicorp/vault/components/caFamily/badCaCert/docker-compose-hashicorp-vault.yml new file mode 100644 index 000000000..50f41bee7 --- /dev/null +++ b/tests/certification/secretstores/hashicorp/vault/components/caFamily/badCaCert/docker-compose-hashicorp-vault.yml @@ -0,0 +1,46 @@ +version: '3.9' + +# Use a YAML reference to define VAULT_TOKEN and DOCKER_IMAGE only once +x-common-values: + # This should match tests/config/secrestore/hashicorp/vault/hashicorp-vault.yaml + # This should match .github/infrastructure/conformance/hashicorp/vault_token_file.txt + vault_token: &VAULT_TOKEN "vault-dev-root-token-id" + # Reuse the same docker image to save on resources and because the base vault image + # has everything we need for seeding the initial key values too. + vault_docker_image: &VAULT_DOCKER_IMAGE vault:1.12.1 + +services: + hashicorp_vault: + image: *VAULT_DOCKER_IMAGE + ports: + - '8200:8200' + cap_add: + - IPC_LOCK + environment: + # Move vault's dev-mode self-signed TLS listener to another port so we can use the default one for + # our own listener with our own self-signed certificate. + VAULT_DEV_LISTEN_ADDRESS: "0.0.0.0:7200" + VAULT_DEV_ROOT_TOKEN_ID: *VAULT_TOKEN + volumes: + - ../vaultConfig:/vault/config/:ro + - ../certificates:/certificates:ro + # Force vault to use TLS/HTTPS in dev mode + entrypoint: vault server -dev-tls -config /vault/config/vault_server.hcl + + # We define a aux. service to seed the expected conformance secrets to vault + seed_conformance_secrets: + image: *VAULT_DOCKER_IMAGE + depends_on: + - hashicorp_vault + environment: + VAULT_TOKEN : *VAULT_TOKEN + # We are using HTTPS + VAULT_ADDR: https://hashicorp_vault:8200/ + # Force the server to use our own certificate + VAULT_SKIP_VERIFY: 'false' + VAULT_CACERT: /certificates/cert.pem + volumes: + - ../../../../../../../../.github/infrastructure/conformance/hashicorp:/setup:ro + - ../certificates:/certificates:ro + entrypoint: /setup/setup-hashicorp-vault-secrets.sh + diff --git a/tests/certification/secretstores/hashicorp/vault/components/caFamily/badCaCert/hashicorp-vault.yml b/tests/certification/secretstores/hashicorp/vault/components/caFamily/badCaCert/hashicorp-vault.yml new file mode 100644 index 000000000..8b734f73f --- /dev/null +++ b/tests/certification/secretstores/hashicorp/vault/components/caFamily/badCaCert/hashicorp-vault.yml @@ -0,0 +1,20 @@ +apiVersion: dapr.io/v1alpha1 +kind: Component +metadata: + name: my-hashicorp-vault-TestCaFamilyOfFields-badCaCert + namespace: default +spec: + type: secretstores.hashicorp.vault + version: v1 + metadata: + - name: vaultAddr + value: "https://127.0.0.1:8200" + # Enforce TLS verification because this test is all about this + - name: skipVerify + value: false + - name: vaultToken # Matches docker compose VAULT_DEV_ROOT_TOKEN_ID env. var. + value: "vault-dev-root-token-id" + - name: tlsServerName + value: hashicorp_vault + - name: caCert + value: components/caFamily/certificates/incorrect-ca-cert.pem # <<<<< We should fail authentication \ No newline at end of file diff --git a/tests/certification/secretstores/hashicorp/vault/components/caFamily/badCaCertAndSkipVerify/docker-compose-hashicorp-vault.yml b/tests/certification/secretstores/hashicorp/vault/components/caFamily/badCaCertAndSkipVerify/docker-compose-hashicorp-vault.yml new file mode 100644 index 000000000..50f41bee7 --- /dev/null +++ b/tests/certification/secretstores/hashicorp/vault/components/caFamily/badCaCertAndSkipVerify/docker-compose-hashicorp-vault.yml @@ -0,0 +1,46 @@ +version: '3.9' + +# Use a YAML reference to define VAULT_TOKEN and DOCKER_IMAGE only once +x-common-values: + # This should match tests/config/secrestore/hashicorp/vault/hashicorp-vault.yaml + # This should match .github/infrastructure/conformance/hashicorp/vault_token_file.txt + vault_token: &VAULT_TOKEN "vault-dev-root-token-id" + # Reuse the same docker image to save on resources and because the base vault image + # has everything we need for seeding the initial key values too. + vault_docker_image: &VAULT_DOCKER_IMAGE vault:1.12.1 + +services: + hashicorp_vault: + image: *VAULT_DOCKER_IMAGE + ports: + - '8200:8200' + cap_add: + - IPC_LOCK + environment: + # Move vault's dev-mode self-signed TLS listener to another port so we can use the default one for + # our own listener with our own self-signed certificate. + VAULT_DEV_LISTEN_ADDRESS: "0.0.0.0:7200" + VAULT_DEV_ROOT_TOKEN_ID: *VAULT_TOKEN + volumes: + - ../vaultConfig:/vault/config/:ro + - ../certificates:/certificates:ro + # Force vault to use TLS/HTTPS in dev mode + entrypoint: vault server -dev-tls -config /vault/config/vault_server.hcl + + # We define a aux. service to seed the expected conformance secrets to vault + seed_conformance_secrets: + image: *VAULT_DOCKER_IMAGE + depends_on: + - hashicorp_vault + environment: + VAULT_TOKEN : *VAULT_TOKEN + # We are using HTTPS + VAULT_ADDR: https://hashicorp_vault:8200/ + # Force the server to use our own certificate + VAULT_SKIP_VERIFY: 'false' + VAULT_CACERT: /certificates/cert.pem + volumes: + - ../../../../../../../../.github/infrastructure/conformance/hashicorp:/setup:ro + - ../certificates:/certificates:ro + entrypoint: /setup/setup-hashicorp-vault-secrets.sh + diff --git a/tests/certification/secretstores/hashicorp/vault/components/caFamily/badCaCertAndSkipVerify/hashicorp-vault.yml b/tests/certification/secretstores/hashicorp/vault/components/caFamily/badCaCertAndSkipVerify/hashicorp-vault.yml new file mode 100644 index 000000000..480d33284 --- /dev/null +++ b/tests/certification/secretstores/hashicorp/vault/components/caFamily/badCaCertAndSkipVerify/hashicorp-vault.yml @@ -0,0 +1,20 @@ +apiVersion: dapr.io/v1alpha1 +kind: Component +metadata: + name: my-hashicorp-vault-TestCaFamilyOfFields-badCaCertAndSkipVerify + namespace: default +spec: + type: secretstores.hashicorp.vault + version: v1 + metadata: + - name: vaultAddr + value: "https://127.0.0.1:8200" + # Enforce TLS verification because this test is all about this + - name: skipVerify + value: true # <<< flag under test + - name: vaultToken # Matches docker compose VAULT_DEV_ROOT_TOKEN_ID env. var. + value: "vault-dev-root-token-id" + - name: tlsServerName + value: hashicorp_vault + - name: caCert + value: components/caFamily/certificates/incorrect-ca-cert.pem # <<<<< We would fail authentication if it wasn't for skipVerify \ No newline at end of file diff --git a/tests/certification/secretstores/hashicorp/vault/components/caFamily/badTlsServerName/docker-compose-hashicorp-vault.yml b/tests/certification/secretstores/hashicorp/vault/components/caFamily/badTlsServerName/docker-compose-hashicorp-vault.yml new file mode 100644 index 000000000..50f41bee7 --- /dev/null +++ b/tests/certification/secretstores/hashicorp/vault/components/caFamily/badTlsServerName/docker-compose-hashicorp-vault.yml @@ -0,0 +1,46 @@ +version: '3.9' + +# Use a YAML reference to define VAULT_TOKEN and DOCKER_IMAGE only once +x-common-values: + # This should match tests/config/secrestore/hashicorp/vault/hashicorp-vault.yaml + # This should match .github/infrastructure/conformance/hashicorp/vault_token_file.txt + vault_token: &VAULT_TOKEN "vault-dev-root-token-id" + # Reuse the same docker image to save on resources and because the base vault image + # has everything we need for seeding the initial key values too. + vault_docker_image: &VAULT_DOCKER_IMAGE vault:1.12.1 + +services: + hashicorp_vault: + image: *VAULT_DOCKER_IMAGE + ports: + - '8200:8200' + cap_add: + - IPC_LOCK + environment: + # Move vault's dev-mode self-signed TLS listener to another port so we can use the default one for + # our own listener with our own self-signed certificate. + VAULT_DEV_LISTEN_ADDRESS: "0.0.0.0:7200" + VAULT_DEV_ROOT_TOKEN_ID: *VAULT_TOKEN + volumes: + - ../vaultConfig:/vault/config/:ro + - ../certificates:/certificates:ro + # Force vault to use TLS/HTTPS in dev mode + entrypoint: vault server -dev-tls -config /vault/config/vault_server.hcl + + # We define a aux. service to seed the expected conformance secrets to vault + seed_conformance_secrets: + image: *VAULT_DOCKER_IMAGE + depends_on: + - hashicorp_vault + environment: + VAULT_TOKEN : *VAULT_TOKEN + # We are using HTTPS + VAULT_ADDR: https://hashicorp_vault:8200/ + # Force the server to use our own certificate + VAULT_SKIP_VERIFY: 'false' + VAULT_CACERT: /certificates/cert.pem + volumes: + - ../../../../../../../../.github/infrastructure/conformance/hashicorp:/setup:ro + - ../certificates:/certificates:ro + entrypoint: /setup/setup-hashicorp-vault-secrets.sh + diff --git a/tests/certification/secretstores/hashicorp/vault/components/caFamily/badTlsServerName/hashicorp-vault.yml b/tests/certification/secretstores/hashicorp/vault/components/caFamily/badTlsServerName/hashicorp-vault.yml new file mode 100644 index 000000000..b366f7047 --- /dev/null +++ b/tests/certification/secretstores/hashicorp/vault/components/caFamily/badTlsServerName/hashicorp-vault.yml @@ -0,0 +1,20 @@ +apiVersion: dapr.io/v1alpha1 +kind: Component +metadata: + name: my-hashicorp-vault-TestCaFamilyOfFields-badTlsServerName + namespace: default +spec: + type: secretstores.hashicorp.vault + version: v1 + metadata: + - name: vaultAddr + value: "https://127.0.0.1:8200" + # Enforce TLS verification because this test is all about this + - name: skipVerify + value: false + - name: vaultToken # Matches docker compose VAULT_DEV_ROOT_TOKEN_ID env. var. + value: "vault-dev-root-token-id" + - name: tlsServerName + value: badTlsServerName # <<<<< Ooops, this won't match our cert. + - name: caCert + value: components/caFamily/certificates/cert.pem \ No newline at end of file diff --git a/tests/certification/secretstores/hashicorp/vault/components/caFamily/caCert/docker-compose-hashicorp-vault.yml b/tests/certification/secretstores/hashicorp/vault/components/caFamily/caCert/docker-compose-hashicorp-vault.yml new file mode 100644 index 000000000..50f41bee7 --- /dev/null +++ b/tests/certification/secretstores/hashicorp/vault/components/caFamily/caCert/docker-compose-hashicorp-vault.yml @@ -0,0 +1,46 @@ +version: '3.9' + +# Use a YAML reference to define VAULT_TOKEN and DOCKER_IMAGE only once +x-common-values: + # This should match tests/config/secrestore/hashicorp/vault/hashicorp-vault.yaml + # This should match .github/infrastructure/conformance/hashicorp/vault_token_file.txt + vault_token: &VAULT_TOKEN "vault-dev-root-token-id" + # Reuse the same docker image to save on resources and because the base vault image + # has everything we need for seeding the initial key values too. + vault_docker_image: &VAULT_DOCKER_IMAGE vault:1.12.1 + +services: + hashicorp_vault: + image: *VAULT_DOCKER_IMAGE + ports: + - '8200:8200' + cap_add: + - IPC_LOCK + environment: + # Move vault's dev-mode self-signed TLS listener to another port so we can use the default one for + # our own listener with our own self-signed certificate. + VAULT_DEV_LISTEN_ADDRESS: "0.0.0.0:7200" + VAULT_DEV_ROOT_TOKEN_ID: *VAULT_TOKEN + volumes: + - ../vaultConfig:/vault/config/:ro + - ../certificates:/certificates:ro + # Force vault to use TLS/HTTPS in dev mode + entrypoint: vault server -dev-tls -config /vault/config/vault_server.hcl + + # We define a aux. service to seed the expected conformance secrets to vault + seed_conformance_secrets: + image: *VAULT_DOCKER_IMAGE + depends_on: + - hashicorp_vault + environment: + VAULT_TOKEN : *VAULT_TOKEN + # We are using HTTPS + VAULT_ADDR: https://hashicorp_vault:8200/ + # Force the server to use our own certificate + VAULT_SKIP_VERIFY: 'false' + VAULT_CACERT: /certificates/cert.pem + volumes: + - ../../../../../../../../.github/infrastructure/conformance/hashicorp:/setup:ro + - ../certificates:/certificates:ro + entrypoint: /setup/setup-hashicorp-vault-secrets.sh + diff --git a/tests/certification/secretstores/hashicorp/vault/components/caFamily/caCert/hashicorp-vault.yml b/tests/certification/secretstores/hashicorp/vault/components/caFamily/caCert/hashicorp-vault.yml new file mode 100644 index 000000000..50c53eec2 --- /dev/null +++ b/tests/certification/secretstores/hashicorp/vault/components/caFamily/caCert/hashicorp-vault.yml @@ -0,0 +1,20 @@ +apiVersion: dapr.io/v1alpha1 +kind: Component +metadata: + name: my-hashicorp-vault-TestCaFamilyOfFields-caCert + namespace: default +spec: + type: secretstores.hashicorp.vault + version: v1 + metadata: + - name: vaultAddr + value: "https://127.0.0.1:8200" + # Enforce TLS verification because this test is all about this + - name: skipVerify + value: false + - name: vaultToken # Matches docker compose VAULT_DEV_ROOT_TOKEN_ID env. var. + value: "vault-dev-root-token-id" + - name: tlsServerName + value: hashicorp_vault + - name: caCert + value: components/caFamily/certificates/cert.pem \ No newline at end of file diff --git a/tests/certification/secretstores/hashicorp/vault/components/caFamily/caPath/docker-compose-hashicorp-vault.yml b/tests/certification/secretstores/hashicorp/vault/components/caFamily/caPath/docker-compose-hashicorp-vault.yml new file mode 100644 index 000000000..50f41bee7 --- /dev/null +++ b/tests/certification/secretstores/hashicorp/vault/components/caFamily/caPath/docker-compose-hashicorp-vault.yml @@ -0,0 +1,46 @@ +version: '3.9' + +# Use a YAML reference to define VAULT_TOKEN and DOCKER_IMAGE only once +x-common-values: + # This should match tests/config/secrestore/hashicorp/vault/hashicorp-vault.yaml + # This should match .github/infrastructure/conformance/hashicorp/vault_token_file.txt + vault_token: &VAULT_TOKEN "vault-dev-root-token-id" + # Reuse the same docker image to save on resources and because the base vault image + # has everything we need for seeding the initial key values too. + vault_docker_image: &VAULT_DOCKER_IMAGE vault:1.12.1 + +services: + hashicorp_vault: + image: *VAULT_DOCKER_IMAGE + ports: + - '8200:8200' + cap_add: + - IPC_LOCK + environment: + # Move vault's dev-mode self-signed TLS listener to another port so we can use the default one for + # our own listener with our own self-signed certificate. + VAULT_DEV_LISTEN_ADDRESS: "0.0.0.0:7200" + VAULT_DEV_ROOT_TOKEN_ID: *VAULT_TOKEN + volumes: + - ../vaultConfig:/vault/config/:ro + - ../certificates:/certificates:ro + # Force vault to use TLS/HTTPS in dev mode + entrypoint: vault server -dev-tls -config /vault/config/vault_server.hcl + + # We define a aux. service to seed the expected conformance secrets to vault + seed_conformance_secrets: + image: *VAULT_DOCKER_IMAGE + depends_on: + - hashicorp_vault + environment: + VAULT_TOKEN : *VAULT_TOKEN + # We are using HTTPS + VAULT_ADDR: https://hashicorp_vault:8200/ + # Force the server to use our own certificate + VAULT_SKIP_VERIFY: 'false' + VAULT_CACERT: /certificates/cert.pem + volumes: + - ../../../../../../../../.github/infrastructure/conformance/hashicorp:/setup:ro + - ../certificates:/certificates:ro + entrypoint: /setup/setup-hashicorp-vault-secrets.sh + diff --git a/tests/certification/secretstores/hashicorp/vault/components/caFamily/caPath/hashicorp-vault.yml b/tests/certification/secretstores/hashicorp/vault/components/caFamily/caPath/hashicorp-vault.yml new file mode 100644 index 000000000..5d2e51e81 --- /dev/null +++ b/tests/certification/secretstores/hashicorp/vault/components/caFamily/caPath/hashicorp-vault.yml @@ -0,0 +1,20 @@ +apiVersion: dapr.io/v1alpha1 +kind: Component +metadata: + name: my-hashicorp-vault-TestCaFamilyOfFields-caPath + namespace: default +spec: + type: secretstores.hashicorp.vault + version: v1 + metadata: + - name: vaultAddr + value: "https://127.0.0.1:8200" + # Enforce TLS verification because this test is all about this + - name: skipVerify + value: false + - name: vaultToken # Matches docker compose VAULT_DEV_ROOT_TOKEN_ID env. var. + value: "vault-dev-root-token-id" + - name: tlsServerName + value: hashicorp_vault + - name: caPath + value: components/caFamily/certificates/ \ No newline at end of file diff --git a/tests/certification/secretstores/hashicorp/vault/components/caFamily/caPem/docker-compose-hashicorp-vault.yml b/tests/certification/secretstores/hashicorp/vault/components/caFamily/caPem/docker-compose-hashicorp-vault.yml new file mode 100644 index 000000000..50f41bee7 --- /dev/null +++ b/tests/certification/secretstores/hashicorp/vault/components/caFamily/caPem/docker-compose-hashicorp-vault.yml @@ -0,0 +1,46 @@ +version: '3.9' + +# Use a YAML reference to define VAULT_TOKEN and DOCKER_IMAGE only once +x-common-values: + # This should match tests/config/secrestore/hashicorp/vault/hashicorp-vault.yaml + # This should match .github/infrastructure/conformance/hashicorp/vault_token_file.txt + vault_token: &VAULT_TOKEN "vault-dev-root-token-id" + # Reuse the same docker image to save on resources and because the base vault image + # has everything we need for seeding the initial key values too. + vault_docker_image: &VAULT_DOCKER_IMAGE vault:1.12.1 + +services: + hashicorp_vault: + image: *VAULT_DOCKER_IMAGE + ports: + - '8200:8200' + cap_add: + - IPC_LOCK + environment: + # Move vault's dev-mode self-signed TLS listener to another port so we can use the default one for + # our own listener with our own self-signed certificate. + VAULT_DEV_LISTEN_ADDRESS: "0.0.0.0:7200" + VAULT_DEV_ROOT_TOKEN_ID: *VAULT_TOKEN + volumes: + - ../vaultConfig:/vault/config/:ro + - ../certificates:/certificates:ro + # Force vault to use TLS/HTTPS in dev mode + entrypoint: vault server -dev-tls -config /vault/config/vault_server.hcl + + # We define a aux. service to seed the expected conformance secrets to vault + seed_conformance_secrets: + image: *VAULT_DOCKER_IMAGE + depends_on: + - hashicorp_vault + environment: + VAULT_TOKEN : *VAULT_TOKEN + # We are using HTTPS + VAULT_ADDR: https://hashicorp_vault:8200/ + # Force the server to use our own certificate + VAULT_SKIP_VERIFY: 'false' + VAULT_CACERT: /certificates/cert.pem + volumes: + - ../../../../../../../../.github/infrastructure/conformance/hashicorp:/setup:ro + - ../certificates:/certificates:ro + entrypoint: /setup/setup-hashicorp-vault-secrets.sh + diff --git a/tests/certification/secretstores/hashicorp/vault/components/caFamily/caPem/hashicorp-vault.yml b/tests/certification/secretstores/hashicorp/vault/components/caFamily/caPem/hashicorp-vault.yml new file mode 100644 index 000000000..9f9884e43 --- /dev/null +++ b/tests/certification/secretstores/hashicorp/vault/components/caFamily/caPem/hashicorp-vault.yml @@ -0,0 +1,59 @@ +# +# THIS FILE IS AUTO-GENERATED - DO NOT EDIT +# + + +apiVersion: dapr.io/v1alpha1 +kind: Component +metadata: + name: my-hashicorp-vault-TestCaFamilyOfFields-caPem + namespace: default +spec: + type: secretstores.hashicorp.vault + version: v1 + metadata: + - name: vaultAddr + value: "https://127.0.0.1:8200" + # Enforce TLS verification because this test is all about this + - name: skipVerify + value: false + - name: vaultToken # Matches docker compose VAULT_DEV_ROOT_TOKEN_ID env. var. + value: "vault-dev-root-token-id" + - name: tlsServerName + value: hashicorp_vault + - name: caPem + value: |- + -----BEGIN CERTIFICATE----- + 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 + LFXkjVxkrXK8v2vNPR2KvyXleKFk + -----END CERTIFICATE----- diff --git a/tests/certification/secretstores/hashicorp/vault/components/caFamily/caPem/hashicorp-vault.yml.template b/tests/certification/secretstores/hashicorp/vault/components/caFamily/caPem/hashicorp-vault.yml.template new file mode 100644 index 000000000..2e41d366f --- /dev/null +++ b/tests/certification/secretstores/hashicorp/vault/components/caFamily/caPem/hashicorp-vault.yml.template @@ -0,0 +1,20 @@ +apiVersion: dapr.io/v1alpha1 +kind: Component +metadata: + name: my-hashicorp-vault-TestCaFamilyOfFields-caPem + namespace: default +spec: + type: secretstores.hashicorp.vault + version: v1 + metadata: + - name: vaultAddr + value: "https://127.0.0.1:8200" + # Enforce TLS verification because this test is all about this + - name: skipVerify + value: false + - name: vaultToken # Matches docker compose VAULT_DEV_ROOT_TOKEN_ID env. var. + value: "vault-dev-root-token-id" + - name: tlsServerName + value: hashicorp_vault + - name: caPem + value: |- diff --git a/tests/certification/secretstores/hashicorp/vault/components/caFamily/certificates/cert.pem b/tests/certification/secretstores/hashicorp/vault/components/caFamily/certificates/cert.pem new file mode 100644 index 000000000..b6d963737 --- /dev/null +++ b/tests/certification/secretstores/hashicorp/vault/components/caFamily/certificates/cert.pem @@ -0,0 +1,34 @@ +-----BEGIN CERTIFICATE----- +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 +LFXkjVxkrXK8v2vNPR2KvyXleKFk +-----END CERTIFICATE----- diff --git a/tests/certification/secretstores/hashicorp/vault/components/caFamily/certificates/incorrect-ca-cert.pem b/tests/certification/secretstores/hashicorp/vault/components/caFamily/certificates/incorrect-ca-cert.pem new file mode 100644 index 000000000..1bdae2e7a --- /dev/null +++ b/tests/certification/secretstores/hashicorp/vault/components/caFamily/certificates/incorrect-ca-cert.pem @@ -0,0 +1,34 @@ +-----BEGIN CERTIFICATE----- +MIIF4TCCA8mgAwIBAgIUSrQ0syOfHO5v4Jl7gqdachXf1o8wDQYJKoZIhvcNAQEL +BQAwaTELMAkGA1UEBhMCQ0ExCzAJBgNVBAgMAkJDMRIwEAYDVQQHDAlWYW5jb3V2 +ZXIxFTATBgNVBAoMDERhcHIgVGVzdGluZzEMMAoGA1UECwwDT3JnMRQwEgYDVQQD +DAt3d3cuZGFwci5pbzAeFw0yMjExMjUxOTQ0MDJaFw0zMjExMjIxOTQ0MDJaMGkx +CzAJBgNVBAYTAkNBMQswCQYDVQQIDAJCQzESMBAGA1UEBwwJVmFuY291dmVyMRUw +EwYDVQQKDAxEYXByIFRlc3RpbmcxDDAKBgNVBAsMA09yZzEUMBIGA1UEAwwLd3d3 +LmRhcHIuaW8wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDCdxTPbiMc +Gx7l/6cBI8nuvrX0AA+OZNoxNRSa/Y5LNXOdIFbMvBHgK4spQKN2RXVjLB9PZ6Tz +rNxlQNgMlF3dOVGxFVBLhjt1acDPXjeDYeCrq6lj5NnqBUJGE7Weau8KIAh1iDfp +pFT5Sa7spVwdFpVcgS/WUvB7LMIqZJgCvydMw1DMM8iE7KbuHBeGO0dkELDt1b28 +sYAB2LV1pesr4yIVeBcqDmZJhHhKyXeNi0RxYwVR+c5/AIcy4oz3AwGaj00xCSRS +tbUZYT3wtKuFWajLVaFhhWspqnEgDfGaYgRWMBhybLUBJSkTi1y6XfGPbJg5p9cr +rXuLNeqwavJqi3/ow7N6ybCC+gpZFGtotUIVe6G9Gw4puPtpL8dXRt5UGI77lUMA +cjaRTql4RZG9yiWxvkppbJohYzZj39buVVtnfK4h6fVeOsIrotjq6A07PmrC9IZG +tYyShDc0lk0ns08PuaFxUEWDFSNgPXzZh7jVXykBRqWkqsAVUhve8NYBB0GyEIJ3 +fl/Nbb0ODqQXrknvD2af9jRrd0yC3NSg3+3pW9bMLe1qA28GiisGREhIV2I7WIm8 +nDQX/sxE1WOVlL5QQP5mnkZEJJIOQoq5AT+orFquvbCUYhyqf5VVM07+H3A/C6Au +AZ0EBBzBKdF15UvPA68Nqef/OX4jCs584wIDAQABo4GAMH4wHQYDVR0OBBYEFHUA +p2sagqDSpNEfGHXLQTQPCsC6MB8GA1UdIwQYMBaAFHUAp2sagqDSpNEfGHXLQTQP +CsC6MA8GA1UdEwEB/wQFMAMBAf8wKwYDVR0RBCQwIoIPaGFzaGljb3JwX3ZhdWx0 +gglsb2NhbGhvc3SHBH8AAAEwDQYJKoZIhvcNAQELBQADggIBAG/8gN+7C+ROZrDS +fWHYA68jwdQWqe5+5SlZ4sMEbboA7+++csptBi27oQEtCdsTMx/4eC8/Topsz1// +OcHPo+/pQQW5VWo1Ny0Nfq9TJ+CZ9NuEoizSnLvVWhEBclA7bhkGvp3cqXTa6XqH +EDSur0ltQRhs0F+zFRPuPqEIJziLv54BEnt1iM2ydv3yVi0dF9Xz8BE92pB93ONd +PnnvCjFhvZn9X2oogBgf0HaMTQDj02mm25q86NVZ5qSEBuc+NI/8l7s5ruo+HXcY +q2WqAgwnQfmYUrNqHNmB0zj0+NygZytWmPYb1GVSi+3PcgVKW08EsQ7i8MI00CCY +/J2Pb/wHcu1VSRjX3ijhcp4MDfHQmFAnRyaey/ocHdUrBiTtWzNszD5DQhMPOKGx +ksItrRDExgDkVZspqli72oFnZyF3V4NEAo/ZDk2k5o91huyc7d/sQ4mc2ghJfNCT +aMWsHbYF7oUkwvun4K8duePB0M1JZS4qXG0kmQrEfUSocS3U8AWItvVQ9H0DCbpT +pcQFBqCuaj3ehuzsExbKLKI6+VrqTXZi8ZPozyxbkWuXnXSPFdG5wn5eQrFQxGnt +jFjrzTFeo9kzp3a7fYVveR70xYF3hdtHbPRhxt18k8BZB1vLrb08v9df0LAFfcd2 +vljYnSZYxz/14hzgCxFSQq6D92/E +-----END CERTIFICATE----- diff --git a/tests/certification/secretstores/hashicorp/vault/components/caFamily/certificates/incorrect-ca-key.pem b/tests/certification/secretstores/hashicorp/vault/components/caFamily/certificates/incorrect-ca-key.pem new file mode 100644 index 000000000..0d0003c60 --- /dev/null +++ b/tests/certification/secretstores/hashicorp/vault/components/caFamily/certificates/incorrect-ca-key.pem @@ -0,0 +1,52 @@ +-----BEGIN PRIVATE KEY----- +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 +WG6Z5JfRpAOCbhDnmIuc1NxwhVyG8c3q +-----END PRIVATE KEY----- diff --git a/tests/certification/secretstores/hashicorp/vault/components/caFamily/certificates/key.pem b/tests/certification/secretstores/hashicorp/vault/components/caFamily/certificates/key.pem new file mode 100644 index 000000000..239be4c7c --- /dev/null +++ b/tests/certification/secretstores/hashicorp/vault/components/caFamily/certificates/key.pem @@ -0,0 +1,52 @@ +-----BEGIN PRIVATE KEY----- +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 +JpgsDDiLHGcoVG2ei6PE1GFlSixtFvI= +-----END PRIVATE KEY----- diff --git a/tests/certification/secretstores/hashicorp/vault/components/caFamily/vaultConfig/vault_server.hcl b/tests/certification/secretstores/hashicorp/vault/components/caFamily/vaultConfig/vault_server.hcl new file mode 100644 index 000000000..4326d60bb --- /dev/null +++ b/tests/certification/secretstores/hashicorp/vault/components/caFamily/vaultConfig/vault_server.hcl @@ -0,0 +1,15 @@ +listener "tcp" { + address = "0.0.0.0:8200" + tls_disable = "false" + tls_cert_file = "/certificates/cert.pem" + tls_key_file = "/certificates/key.pem" +} + +api_addr = "https://127.0.0.1:8201" + +#backend "file" { +# path = "/vault/file" +#} + +#default_lease_ttl = "168h" +#max_lease_ttl = "720h" diff --git a/tests/certification/secretstores/hashicorp/vault/components/enginePath/customSecretsPath/docker-compose-hashicorp-vault.yml b/tests/certification/secretstores/hashicorp/vault/components/enginePath/customSecretsPath/docker-compose-hashicorp-vault.yml new file mode 100644 index 000000000..83a405fb3 --- /dev/null +++ b/tests/certification/secretstores/hashicorp/vault/components/enginePath/customSecretsPath/docker-compose-hashicorp-vault.yml @@ -0,0 +1,37 @@ +version: '3.9' + +# Use a YAML reference to define VAULT_TOKEN and DOCKER_IMAGE only once +x-common-values: + # This should match tests/config/secrestore/hashicorp/vault/hashicorp-vault.yaml + # This should match .github/infrastructure/conformance/hashicorp/vault_token_file.txt + vault_token: &VAULT_TOKEN "vault-dev-root-token-id" + # Reuse the same docker image to save on resources and because the base vault image + # has everything we need for seeding the initial key values too. + vault_docker_image: &VAULT_DOCKER_IMAGE vault:1.12.1 + +services: + hashicorp_vault: + image: *VAULT_DOCKER_IMAGE + ports: + - '8200:8200' + cap_add: + - IPC_LOCK + environment: + VAULT_DEV_LISTEN_ADDRESS: "0.0.0.0:8200" + VAULT_DEV_ROOT_TOKEN_ID: *VAULT_TOKEN + + + # We define a aux. service to seed the expected conformance secrets to vault + seed_conformance_secrets: + image: *VAULT_DOCKER_IMAGE + depends_on: + - hashicorp_vault + environment: + VAULT_TOKEN : *VAULT_TOKEN + # We are using HTTPS + VAULT_ADDR: http://hashicorp_vault:8200/ + VAULT_SKIP_VERIFY: 'true' + volumes: + - .:/setup:ro + entrypoint: /setup/setup-hashicorp-vault-secrets.sh + diff --git a/tests/certification/secretstores/hashicorp/vault/components/enginePath/customSecretsPath/hashicorp-vault.yml b/tests/certification/secretstores/hashicorp/vault/components/enginePath/customSecretsPath/hashicorp-vault.yml new file mode 100644 index 000000000..d35fc0ee7 --- /dev/null +++ b/tests/certification/secretstores/hashicorp/vault/components/enginePath/customSecretsPath/hashicorp-vault.yml @@ -0,0 +1,15 @@ +apiVersion: dapr.io/v1alpha1 +kind: Component +metadata: + name: my-hashicorp-vault-TestEnginePath-customSecretsPath + namespace: default +spec: + type: secretstores.hashicorp.vault + version: v1 + metadata: + - name: vaultAddr + value: "http://127.0.0.1:8200" + - name: vaultToken # Matches docker compose VAULT_DEV_ROOT_TOKEN_ID env. var. + value: "vault-dev-root-token-id" + - name: enginePath + value: customSecretsPath \ No newline at end of file diff --git a/tests/certification/secretstores/hashicorp/vault/components/enginePath/customSecretsPath/setup-hashicorp-vault-secrets.sh b/tests/certification/secretstores/hashicorp/vault/components/enginePath/customSecretsPath/setup-hashicorp-vault-secrets.sh new file mode 100755 index 000000000..546dae349 --- /dev/null +++ b/tests/certification/secretstores/hashicorp/vault/components/enginePath/customSecretsPath/setup-hashicorp-vault-secrets.sh @@ -0,0 +1,31 @@ +#!/bin/sh + +# Notice that while hashicorp supports multiple keys in a secret, +# our confirmance tests needs to go for the common demominator +# which is a secret store that only has name/value semantic. +# Hence we setup secret containing a single key with the their +# same name. + +set -eu + +MAX_ATTEMPTS=30 + +for attempt in `seq $MAX_ATTEMPTS`; do + # Test connectivity to vault server and create secrets to match + # conformance tests / contents from tests/conformance/secrets.json + if vault status && + vault secrets enable -path=customSecretsPath kv-v2 && # Enable this path with kv/version2 engine + vault kv put customSecretsPath/dapr/secretUnderCustomPath the=trick was=the path=parameter && + vault kv get customSecretsPath/dapr/secretUnderCustomPath ; + then + echo ✅ secrets set; + sleep 1; + exit 0; + else + echo "⏰ vault not available, waiting... - attempt $attempt of $MAX_ATTEMPTS"; + sleep 1; + fi +done; + +echo ❌ Failed to set secrets; +exit 1 diff --git a/tests/certification/secretstores/hashicorp/vault/components/enginePath/secret/hashicorp-vault.yml b/tests/certification/secretstores/hashicorp/vault/components/enginePath/secret/hashicorp-vault.yml new file mode 100644 index 000000000..aa953d973 --- /dev/null +++ b/tests/certification/secretstores/hashicorp/vault/components/enginePath/secret/hashicorp-vault.yml @@ -0,0 +1,15 @@ +apiVersion: dapr.io/v1alpha1 +kind: Component +metadata: + name: my-hashicorp-vault-TestEnginePath-secret + namespace: default +spec: + type: secretstores.hashicorp.vault + version: v1 + metadata: + - name: vaultAddr + value: "http://127.0.0.1:8200" + - name: vaultToken # Matches docker compose VAULT_DEV_ROOT_TOKEN_ID env. var. + value: "vault-dev-root-token-id" + - name: enginePath + value: secret \ No newline at end of file diff --git a/tests/certification/secretstores/hashicorp/vault/components/vaultAddr/missing/docker-compose-hashicorp-vault.yml b/tests/certification/secretstores/hashicorp/vault/components/vaultAddr/missing/docker-compose-hashicorp-vault.yml new file mode 100644 index 000000000..90f3992be --- /dev/null +++ b/tests/certification/secretstores/hashicorp/vault/components/vaultAddr/missing/docker-compose-hashicorp-vault.yml @@ -0,0 +1,38 @@ +version: '3.9' + +# Use a YAML reference to define VAULT_TOKEN and DOCKER_IMAGE only once +x-common-values: + # This should match tests/config/secrestore/hashicorp/vault/hashicorp-vault.yaml + # This should match .github/infrastructure/conformance/hashicorp/vault_token_file.txt + vault_token: &VAULT_TOKEN "vault-dev-root-token-id" + # Reuse the same docker image to save on resources and because the base vault image + # has everything we need for seeding the initial key values too. + vault_docker_image: &VAULT_DOCKER_IMAGE vault:1.12.1 + +services: + hashicorp_vault: + image: *VAULT_DOCKER_IMAGE + ports: + - '8200:8200' + cap_add: + - IPC_LOCK + environment: + VAULT_DEV_LISTEN_ADDRESS: "0.0.0.0:8200" + VAULT_DEV_ROOT_TOKEN_ID: *VAULT_TOKEN + # Force vault to use TLS/HTTPS in dev mode + entrypoint: vault server -dev-tls=true + + # We define a aux. service to seed the expected conformance secrets to vault + seed_conformance_secrets: + image: *VAULT_DOCKER_IMAGE + depends_on: + - hashicorp_vault + environment: + VAULT_TOKEN : *VAULT_TOKEN + # We are using HTTPS + VAULT_ADDR: https://hashicorp_vault:8200/ + VAULT_SKIP_VERIFY: 'true' + volumes: + - ../../../../../../../../.github/infrastructure/conformance/hashicorp:/setup:ro + entrypoint: /setup/setup-hashicorp-vault-secrets.sh + diff --git a/tests/certification/secretstores/hashicorp/vault/components/vaultAddr/missing/hashicorp-vault.yml b/tests/certification/secretstores/hashicorp/vault/components/vaultAddr/missing/hashicorp-vault.yml new file mode 100644 index 000000000..d60a34d05 --- /dev/null +++ b/tests/certification/secretstores/hashicorp/vault/components/vaultAddr/missing/hashicorp-vault.yml @@ -0,0 +1,19 @@ +apiVersion: dapr.io/v1alpha1 +kind: Component +metadata: + name: my-hashicorp-vault-TestVaultAddr-missing + namespace: default +spec: + type: secretstores.hashicorp.vault + version: v1 + metadata: + # Yes, we commented out vaultAddr. + # Default value should kick in: https://127.0.0.1:8200. Notice: HTTPS (TLS) + # - name: vaultAddr + # value: "http://127.0.0.1:8200" + # Do not perform TLS verification since e are starting vault in development + # mode with a self-signed certificate + - name: skipVerify + value: true + - name: vaultToken # Matches docker compose VAULT_DEV_ROOT_TOKEN_ID env. var. + value: "vault-dev-root-token-id" \ No newline at end of file diff --git a/tests/certification/secretstores/hashicorp/vault/components/vaultAddr/missingSkipVerifyFalse/docker-compose-hashicorp-vault.yml b/tests/certification/secretstores/hashicorp/vault/components/vaultAddr/missingSkipVerifyFalse/docker-compose-hashicorp-vault.yml new file mode 100644 index 000000000..90f3992be --- /dev/null +++ b/tests/certification/secretstores/hashicorp/vault/components/vaultAddr/missingSkipVerifyFalse/docker-compose-hashicorp-vault.yml @@ -0,0 +1,38 @@ +version: '3.9' + +# Use a YAML reference to define VAULT_TOKEN and DOCKER_IMAGE only once +x-common-values: + # This should match tests/config/secrestore/hashicorp/vault/hashicorp-vault.yaml + # This should match .github/infrastructure/conformance/hashicorp/vault_token_file.txt + vault_token: &VAULT_TOKEN "vault-dev-root-token-id" + # Reuse the same docker image to save on resources and because the base vault image + # has everything we need for seeding the initial key values too. + vault_docker_image: &VAULT_DOCKER_IMAGE vault:1.12.1 + +services: + hashicorp_vault: + image: *VAULT_DOCKER_IMAGE + ports: + - '8200:8200' + cap_add: + - IPC_LOCK + environment: + VAULT_DEV_LISTEN_ADDRESS: "0.0.0.0:8200" + VAULT_DEV_ROOT_TOKEN_ID: *VAULT_TOKEN + # Force vault to use TLS/HTTPS in dev mode + entrypoint: vault server -dev-tls=true + + # We define a aux. service to seed the expected conformance secrets to vault + seed_conformance_secrets: + image: *VAULT_DOCKER_IMAGE + depends_on: + - hashicorp_vault + environment: + VAULT_TOKEN : *VAULT_TOKEN + # We are using HTTPS + VAULT_ADDR: https://hashicorp_vault:8200/ + VAULT_SKIP_VERIFY: 'true' + volumes: + - ../../../../../../../../.github/infrastructure/conformance/hashicorp:/setup:ro + entrypoint: /setup/setup-hashicorp-vault-secrets.sh + diff --git a/tests/certification/secretstores/hashicorp/vault/components/vaultAddr/missingSkipVerifyFalse/hashicorp-vault.yml b/tests/certification/secretstores/hashicorp/vault/components/vaultAddr/missingSkipVerifyFalse/hashicorp-vault.yml new file mode 100644 index 000000000..83b5d7fdf --- /dev/null +++ b/tests/certification/secretstores/hashicorp/vault/components/vaultAddr/missingSkipVerifyFalse/hashicorp-vault.yml @@ -0,0 +1,19 @@ +apiVersion: dapr.io/v1alpha1 +kind: Component +metadata: + name: my-hashicorp-vault-TestVaultAddr-missingSkipVerifyFalse + namespace: default +spec: + type: secretstores.hashicorp.vault + version: v1 + metadata: + # Yes, we commented out vaultAddr. + # Default value should kick in: https://127.0.0.1:8200. Notice: HTTPS (TLS) + # - name: vaultAddr + # value: "http://127.0.0.1:8200" + # Do not perform TLS verification since e are starting vault in development + # mode with a self-signed certificate + - name: skipVerify + value: false + - name: vaultToken # Matches docker compose VAULT_DEV_ROOT_TOKEN_ID env. var. + value: "vault-dev-root-token-id" \ No newline at end of file diff --git a/tests/certification/secretstores/hashicorp/vault/components/vaultAddr/nonStdPort/docker-compose-hashicorp-vault.yml b/tests/certification/secretstores/hashicorp/vault/components/vaultAddr/nonStdPort/docker-compose-hashicorp-vault.yml new file mode 100644 index 000000000..0a8514409 --- /dev/null +++ b/tests/certification/secretstores/hashicorp/vault/components/vaultAddr/nonStdPort/docker-compose-hashicorp-vault.yml @@ -0,0 +1,36 @@ +version: '3.9' + +# Use a YAML reference to define VAULT_TOKEN and DOCKER_IMAGE only once +x-common-values: + # This should match tests/config/secrestore/hashicorp/vault/hashicorp-vault.yaml + # This should match .github/infrastructure/conformance/hashicorp/vault_token_file.txt + vault_token: &VAULT_TOKEN "vault-dev-root-token-id" + # Reuse the same docker image to save on resources and because the base vault image + # has everything we need for seeding the initial key values too. + vault_docker_image: &VAULT_DOCKER_IMAGE vault:1.12.1 + +services: + hashicorp_vault: + image: *VAULT_DOCKER_IMAGE + ports: + - '11200:11200' + cap_add: + - IPC_LOCK + environment: + VAULT_DEV_LISTEN_ADDRESS: "0.0.0.0:11200" + VAULT_DEV_ROOT_TOKEN_ID: *VAULT_TOKEN + + # We define a aux. service to seed the expected conformance secrets to vault + seed_conformance_secrets: + image: *VAULT_DOCKER_IMAGE + depends_on: + - hashicorp_vault + environment: + VAULT_TOKEN : *VAULT_TOKEN + # We are using HTTPS + VAULT_ADDR: http://hashicorp_vault:11200/ + VAULT_SKIP_VERIFY: 'true' + volumes: + - ../../../../../../../../.github/infrastructure/conformance/hashicorp:/setup:ro + entrypoint: /setup/setup-hashicorp-vault-secrets.sh + diff --git a/tests/certification/secretstores/hashicorp/vault/components/vaultAddr/nonStdPort/hashicorp-vault.yml b/tests/certification/secretstores/hashicorp/vault/components/vaultAddr/nonStdPort/hashicorp-vault.yml new file mode 100644 index 000000000..f5c3d3264 --- /dev/null +++ b/tests/certification/secretstores/hashicorp/vault/components/vaultAddr/nonStdPort/hashicorp-vault.yml @@ -0,0 +1,14 @@ +apiVersion: dapr.io/v1alpha1 +kind: Component +metadata: + name: my-hashicorp-vault-TestVaultAddr-nonStdPort + namespace: default +spec: + type: secretstores.hashicorp.vault + version: v1 + metadata: + # Use non-standard port + - name: vaultAddr + value: "http://127.0.0.1:11200" + - name: vaultToken # Matches docker compose VAULT_DEV_ROOT_TOKEN_ID env. var. + value: "vault-dev-root-token-id" \ No newline at end of file diff --git a/tests/certification/secretstores/hashicorp/vault/components/vaultAddr/wrongAddress/hashicorp-vault.yml b/tests/certification/secretstores/hashicorp/vault/components/vaultAddr/wrongAddress/hashicorp-vault.yml new file mode 100644 index 000000000..5c4a548a9 --- /dev/null +++ b/tests/certification/secretstores/hashicorp/vault/components/vaultAddr/wrongAddress/hashicorp-vault.yml @@ -0,0 +1,13 @@ +apiVersion: dapr.io/v1alpha1 +kind: Component +metadata: + name: my-hashicorp-vault-TestVaultAddr-wrongAddress + namespace: default +spec: + type: secretstores.hashicorp.vault + version: v1 + metadata: + - name: vaultAddr + value: "http://127.0.0.1:28234" # yeah.. let's hope no one starts a Vault here + - name: vaultToken # Matches docker compose VAULT_DEV_ROOT_TOKEN_ID env. var. + value: "vault-dev-root-token-id" \ No newline at end of file diff --git a/tests/certification/secretstores/hashicorp/vault/components/vaultKVPrefix/hashicorp-vault.yml b/tests/certification/secretstores/hashicorp/vault/components/vaultKVPrefix/hashicorp-vault.yml new file mode 100644 index 000000000..7d0b663e6 --- /dev/null +++ b/tests/certification/secretstores/hashicorp/vault/components/vaultKVPrefix/hashicorp-vault.yml @@ -0,0 +1,15 @@ +apiVersion: dapr.io/v1alpha1 +kind: Component +metadata: + name: my-hashicorp-vault + namespace: default +spec: + type: secretstores.hashicorp.vault + version: v1 + metadata: + - name: vaultAddr + value: "http://127.0.0.1:8200" + - name: vaultToken # Matches docker compose VAULT_DEV_ROOT_TOKEN_ID env. var. + value: "vault-dev-root-token-id" + - name: vaultKVPrefix + value: alternativePrefix \ No newline at end of file diff --git a/tests/certification/secretstores/hashicorp/vault/components/vaultKVUsePrefixFalse/hashicorp-vault.yml b/tests/certification/secretstores/hashicorp/vault/components/vaultKVUsePrefixFalse/hashicorp-vault.yml new file mode 100644 index 000000000..8179b6ee2 --- /dev/null +++ b/tests/certification/secretstores/hashicorp/vault/components/vaultKVUsePrefixFalse/hashicorp-vault.yml @@ -0,0 +1,15 @@ +apiVersion: dapr.io/v1alpha1 +kind: Component +metadata: + name: my-hashicorp-vault + namespace: default +spec: + type: secretstores.hashicorp.vault + version: v1 + metadata: + - name: vaultAddr + value: "http://127.0.0.1:8200" + - name: vaultToken # Matches docker compose VAULT_DEV_ROOT_TOKEN_ID env. var. + value: "vault-dev-root-token-id" + - name: vaultKVUsePrefix + value: false \ No newline at end of file diff --git a/tests/certification/secretstores/hashicorp/vault/components/vaultTokenAndTokenMountPath/badVaultToken/hashicorp-vault.yml b/tests/certification/secretstores/hashicorp/vault/components/vaultTokenAndTokenMountPath/badVaultToken/hashicorp-vault.yml new file mode 100644 index 000000000..34bfb0c29 --- /dev/null +++ b/tests/certification/secretstores/hashicorp/vault/components/vaultTokenAndTokenMountPath/badVaultToken/hashicorp-vault.yml @@ -0,0 +1,14 @@ +apiVersion: dapr.io/v1alpha1 +kind: Component +metadata: + name: my-hashicorp-vault-TestTokenAndTokenMountPath-badVaultToken + namespace: default +spec: + type: secretstores.hashicorp.vault + version: v1 + ignoreErrors: true # This component will fail to load but we don't want Dapr to FATAL because of it. + metadata: + - name: vaultAddr + value: "http://127.0.0.1:8200" + - name: vaultToken + value: "this-is-not-the-correct-vault-token-to-talk-to-our-server" \ No newline at end of file diff --git a/tests/certification/secretstores/hashicorp/vault/components/vaultTokenAndTokenMountPath/both/hashicorp-vault.yml b/tests/certification/secretstores/hashicorp/vault/components/vaultTokenAndTokenMountPath/both/hashicorp-vault.yml new file mode 100644 index 000000000..b747c743c --- /dev/null +++ b/tests/certification/secretstores/hashicorp/vault/components/vaultTokenAndTokenMountPath/both/hashicorp-vault.yml @@ -0,0 +1,16 @@ +apiVersion: dapr.io/v1alpha1 +kind: Component +metadata: + name: my-hashicorp-vault-TestTokenAndTokenMountPath-both + namespace: default +spec: + type: secretstores.hashicorp.vault + version: v1 + ignoreErrors: true # This component will fail to load but we don't want Dapr to FATAL because of it. + metadata: + - name: vaultAddr + value: "http://127.0.0.1:8200" + - name: vaultToken + value: "vault-dev-root-token-id" + - name: vaultTokenMountPath + value: /tmp/vaultToken.txt \ No newline at end of file diff --git a/tests/certification/secretstores/hashicorp/vault/components/vaultTokenAndTokenMountPath/neither/hashicorp-vault.yml b/tests/certification/secretstores/hashicorp/vault/components/vaultTokenAndTokenMountPath/neither/hashicorp-vault.yml new file mode 100644 index 000000000..08e74811f --- /dev/null +++ b/tests/certification/secretstores/hashicorp/vault/components/vaultTokenAndTokenMountPath/neither/hashicorp-vault.yml @@ -0,0 +1,13 @@ +apiVersion: dapr.io/v1alpha1 +kind: Component +metadata: + name: my-hashicorp-vault-TestTokenAndTokenMountPath-neither + namespace: default +spec: + type: secretstores.hashicorp.vault + version: v1 + ignoreErrors: true # This component will fail to load but we don't want Dapr to FATAL because of it. + metadata: + - name: vaultAddr + value: "http://127.0.0.1:8200" + # no vaultToken or vaultTokenMountPath \ No newline at end of file diff --git a/tests/certification/secretstores/hashicorp/vault/components/vaultTokenAndTokenMountPath/tokenMountPathHappyCase/hashicorp-vault.yml b/tests/certification/secretstores/hashicorp/vault/components/vaultTokenAndTokenMountPath/tokenMountPathHappyCase/hashicorp-vault.yml new file mode 100644 index 000000000..cf26809b2 --- /dev/null +++ b/tests/certification/secretstores/hashicorp/vault/components/vaultTokenAndTokenMountPath/tokenMountPathHappyCase/hashicorp-vault.yml @@ -0,0 +1,15 @@ +apiVersion: dapr.io/v1alpha1 +kind: Component +metadata: + name: my-hashicorp-vault-TestTokenAndTokenMountPath-tokenMountPathHappyCase + namespace: default +spec: + type: secretstores.hashicorp.vault + version: v1 + ignoreErrors: true # This component will fail to load but we don't want Dapr to FATAL because of it. + metadata: + - name: vaultAddr + value: "http://127.0.0.1:8200" + - name: vaultTokenMountPath + # This is a long path but this file is in current directory ;) + value: components/vaultTokenAndTokenMountPath/tokenMountPathHappyCase/vault_token_file.txt \ No newline at end of file diff --git a/tests/certification/secretstores/hashicorp/vault/components/vaultTokenAndTokenMountPath/tokenMountPathHappyCase/vault_token_file.txt b/tests/certification/secretstores/hashicorp/vault/components/vaultTokenAndTokenMountPath/tokenMountPathHappyCase/vault_token_file.txt new file mode 100644 index 000000000..0fc2ab7bd --- /dev/null +++ b/tests/certification/secretstores/hashicorp/vault/components/vaultTokenAndTokenMountPath/tokenMountPathHappyCase/vault_token_file.txt @@ -0,0 +1 @@ +vault-dev-root-token-id \ No newline at end of file diff --git a/tests/certification/secretstores/hashicorp/vault/components/vaultTokenAndTokenMountPath/tokenMountPathPointsToBrokenPath/hashicorp-vault.yml b/tests/certification/secretstores/hashicorp/vault/components/vaultTokenAndTokenMountPath/tokenMountPathPointsToBrokenPath/hashicorp-vault.yml new file mode 100644 index 000000000..9f0b65be2 --- /dev/null +++ b/tests/certification/secretstores/hashicorp/vault/components/vaultTokenAndTokenMountPath/tokenMountPathPointsToBrokenPath/hashicorp-vault.yml @@ -0,0 +1,14 @@ +apiVersion: dapr.io/v1alpha1 +kind: Component +metadata: + name: my-hashicorp-vault-TestTokenAndTokenMountPath-tokenMountPathPointsToBrokenPath + namespace: default +spec: + type: secretstores.hashicorp.vault + version: v1 + ignoreErrors: true # This component will fail to load but we don't want Dapr to FATAL because of it. + metadata: + - name: vaultAddr + value: "http://127.0.0.1:8200" + - name: vaultTokenMountPath + value: /this/path/does/not/exist/vaultToken.txt \ No newline at end of file diff --git a/tests/certification/secretstores/hashicorp/vault/components/vaultValueTypeText/hashicorp-vault.yml b/tests/certification/secretstores/hashicorp/vault/components/vaultValueTypeText/hashicorp-vault.yml new file mode 100644 index 000000000..94362ca78 --- /dev/null +++ b/tests/certification/secretstores/hashicorp/vault/components/vaultValueTypeText/hashicorp-vault.yml @@ -0,0 +1,15 @@ +apiVersion: dapr.io/v1alpha1 +kind: Component +metadata: + name: my-hashicorp-vault + namespace: default +spec: + type: secretstores.hashicorp.vault + version: v1 + metadata: + - name: vaultAddr + value: "http://127.0.0.1:8200" + - name: vaultToken # Matches docker compose VAULT_DEV_ROOT_TOKEN_ID env. var. + value: "vault-dev-root-token-id" + - name: vaultValueType + value: text # Turns Vault into a secret store with name/value semantics. \ No newline at end of file diff --git a/tests/certification/secretstores/hashicorp/vault/components/versioning/docker-compose-hashicorp-vault.yml b/tests/certification/secretstores/hashicorp/vault/components/versioning/docker-compose-hashicorp-vault.yml new file mode 100644 index 000000000..fd7620371 --- /dev/null +++ b/tests/certification/secretstores/hashicorp/vault/components/versioning/docker-compose-hashicorp-vault.yml @@ -0,0 +1,37 @@ +version: '3.9' + +# Use a YAML reference to define VAULT_TOKEN and DOCKER_IMAGE only once +x-common-values: + # This should match tests/config/secrestore/hashicorp/vault/hashicorp-vault.yaml + # This should match .github/infrastructure/conformance/hashicorp/vault_token_file.txt + vault_token: &VAULT_TOKEN "vault-dev-root-token-id" + # Reuse the same docker image to save on resources and because the base vault image + # has everything we need for seeding the initial key values too. + vault_docker_image: &VAULT_DOCKER_IMAGE vault:1.12.1 + +services: + hashicorp_vault: + image: *VAULT_DOCKER_IMAGE + ports: + - '8200:8200' + cap_add: + - IPC_LOCK + environment: + VAULT_DEV_LISTEN_ADDRESS: "0.0.0.0:8200" + VAULT_DEV_ROOT_TOKEN_ID: *VAULT_TOKEN + + + # We define a aux. service to seed the expected conformance secrets to vault + seed_conformance_secrets: + image: *VAULT_DOCKER_IMAGE + depends_on: + - hashicorp_vault + environment: + VAULT_TOKEN : *VAULT_TOKEN + # We are using HTTPS + VAULT_ADDR: http://hashicorp_vault:8200/ + VAULT_SKIP_VERIFY: 'true' + volumes: + - .:/setup:ro + entrypoint: /setup/seed-secret-with-multiple-versions.sh + diff --git a/tests/certification/secretstores/hashicorp/vault/components/versioning/hashicorp-vault.yml b/tests/certification/secretstores/hashicorp/vault/components/versioning/hashicorp-vault.yml new file mode 100644 index 000000000..74ce6249a --- /dev/null +++ b/tests/certification/secretstores/hashicorp/vault/components/versioning/hashicorp-vault.yml @@ -0,0 +1,13 @@ +apiVersion: dapr.io/v1alpha1 +kind: Component +metadata: + name: my-hashicorp-vault-TestVersioning + namespace: default +spec: + type: secretstores.hashicorp.vault + version: v1 + metadata: + - name: vaultAddr + value: "http://127.0.0.1:8200" + - name: vaultToken # Matches docker compose VAULT_DEV_ROOT_TOKEN_ID env. var. + value: "vault-dev-root-token-id" \ No newline at end of file diff --git a/tests/certification/secretstores/hashicorp/vault/components/versioning/seed-secret-with-multiple-versions.sh b/tests/certification/secretstores/hashicorp/vault/components/versioning/seed-secret-with-multiple-versions.sh new file mode 100755 index 000000000..50a6f280d --- /dev/null +++ b/tests/certification/secretstores/hashicorp/vault/components/versioning/seed-secret-with-multiple-versions.sh @@ -0,0 +1,34 @@ +#!/bin/sh + +# Notice that while hashicorp supports multiple keys in a secret, +# our confirmance tests needs to go for the common demominator +# which is a secret store that only has name/value semantic. +# Hence we setup secret containing a single key with the their +# same name. + +set -eu + +MAX_ATTEMPTS=30 + +for attempt in `seq $MAX_ATTEMPTS`; do + # Test connectivity to vault server and create secrets to match + # conformance tests / contents from tests/conformance/secrets.json + if vault status && + vault kv put secret/dapr/secretUnderTest versionedKey=initialVersion && + vault kv put secret/dapr/secretUnderTest versionedKey=secondVersion && + vault kv put secret/dapr/secretUnderTest versionedKey=v3 && + vault kv put secret/dapr/secretUnderTest versionedKey=v4 && + vault kv put secret/dapr/secretUnderTest versionedKey=latestValue && + vault kv get secret/dapr/secretUnderTest ; + then + echo ✅ secrets set; + sleep 1; + exit 0; + else + echo "⏰ vault not available, waiting... - attempt $attempt of $MAX_ATTEMPTS"; + sleep 1; + fi +done; + +echo ❌ Failed to set secrets; +exit 1 diff --git a/tests/certification/secretstores/hashicorp/vault/vault_test.go b/tests/certification/secretstores/hashicorp/vault/vault_test.go index 148416a28..338e32d7b 100644 --- a/tests/certification/secretstores/hashicorp/vault/vault_test.go +++ b/tests/certification/secretstores/hashicorp/vault/vault_test.go @@ -14,8 +14,14 @@ limitations under the License. package vault_test import ( + "bufio" + "bytes" "context" "fmt" + "io" + "os" + "path/filepath" + "strings" "testing" "time" @@ -37,11 +43,10 @@ import ( ) const ( - sidecarName = "hashicorp-vault-sidecar" - dockerComposeClusterYAML = "../../../../../.github/infrastructure/docker-compose-hashicorp-vault.yml" - dockerComposeProjectName = "hashicorp-vault" - secretStoreComponentPath = "./components/default" - secretStoreName = "my-hashicorp-vault" // as set in the component YAML + sidecarName = "hashicorp-vault-sidecar" + defaultDockerComposeClusterYAML = "../../../../../.github/infrastructure/docker-compose-hashicorp-vault.yml" + dockerComposeProjectName = "hashicorp-vault" + // secretStoreName = "my-hashicorp-vault" // as set in the component YAML networkInstabilityTime = 1 * time.Minute waitAfterInstabilityTime = networkInstabilityTime / 4 @@ -49,47 +54,25 @@ const ( ) func TestBasicSecretRetrieval(t *testing.T) { - ports, err := dapr_testing.GetFreePorts(2) - assert.NoError(t, err) + const ( + secretStoreComponentPath = "./components/default" + secretStoreName = "my-hashicorp-vault" // as set in the component YAML + ) - currentGrpcPort := ports[0] - currentHttpPort := ports[1] + currentGrpcPort, currentHttpPort := GetCurrentGRPCAndHTTPPort(t) - testGetKnownSecret := func(ctx flow.Context) error { - client, err := client.NewClientWithPort(fmt.Sprint(currentGrpcPort)) - if err != nil { - panic(err) - } - defer client.Close() + // This test reuses the HashiCorp Vault's conformance test resources created using + // .github/infrastructure/docker-compose-hashicorp-vault.yml, + // so it reuses the tests/conformance/secretstores/secretstores.go test secrets. + testGetKnownSecret := testKeyValuesInSecret(currentGrpcPort, secretStoreName, + "secondsecret", map[string]string{ + "secondsecret": "efgh", + }) - emptyOpt := map[string]string{} - - // This test reuses the HashiCorp Vault's conformance test resources created using - // .github/infrastructure/docker-compose-hashicorp-vault.yml, - // so it reuses the tests/conformance/secretstores/secretstores.go test secrets. - res, err := client.GetSecret(ctx, secretStoreName, "secondsecret", emptyOpt) - assert.NoError(t, err) - assert.Equal(t, "efgh", res["secondsecret"]) - return nil - } - - testGetMissingSecret := func(ctx flow.Context) error { - client, err := client.NewClientWithPort(fmt.Sprint(currentGrpcPort)) - if err != nil { - panic(err) - } - defer client.Close() - - emptyOpt := map[string]string{} - - _, getErr := client.GetSecret(ctx, secretStoreName, "this_secret_is_not_there", emptyOpt) - assert.Error(t, getErr) - - return nil - } + testGetMissingSecret := testSecretIsNotFound(currentGrpcPort, secretStoreName, "this_secret_is_not_there") flow.New(t, "Test component is up and we can retrieve some secrets"). - Step(dockercompose.Run(dockerComposeProjectName, dockerComposeClusterYAML)). + Step(dockercompose.Run(dockerComposeProjectName, defaultDockerComposeClusterYAML)). Step("Waiting for component to start...", flow.Sleep(5*time.Second)). Step(sidecar.Run(sidecarName, embedded.WithoutApp(), @@ -99,47 +82,28 @@ func TestBasicSecretRetrieval(t *testing.T) { componentRuntimeOptions(), )). Step("Waiting for component to load...", flow.Sleep(5*time.Second)). - Step("Verify component is registered", testComponentFound(t, secretStoreName, currentGrpcPort)). + Step("Verify component is registered", testComponentFound(secretStoreName, currentGrpcPort)). + Step("Verify no errors regarding component initialization", assertNoInitializationErrorsForComponent(secretStoreComponentPath)). Step("Run basic secret retrieval test", testGetKnownSecret). Step("Test retrieval of secret that does not exist", testGetMissingSecret). Step("Interrupt network for 1 minute", network.InterruptNetwork(networkInstabilityTime, nil, nil, servicePortToInterrupt)). Step("Wait for component to recover", flow.Sleep(waitAfterInstabilityTime)). Step("Run basic test again to verify reconnection occurred", testGetKnownSecret). - Step("Stop HashiCorp Vault server", dockercompose.Stop(dockerComposeProjectName, dockerComposeClusterYAML)). + Step("Stop HashiCorp Vault server", dockercompose.Stop(dockerComposeProjectName, defaultDockerComposeClusterYAML)). Run() } func TestMultipleKVRetrieval(t *testing.T) { - ports, err := dapr_testing.GetFreePorts(2) - assert.NoError(t, err) + const ( + secretStoreComponentPath = "./components/default" + secretStoreName = "my-hashicorp-vault" // as set in the component YAML + ) - currentGrpcPort := ports[0] - currentHttpPort := ports[1] - - testGetMultipleKeyValuesFromSecret := func(ctx flow.Context) error { - client, err := client.NewClientWithPort(fmt.Sprint(currentGrpcPort)) - if err != nil { - panic(err) - } - defer client.Close() - - emptyOpt := map[string]string{} - - // This test reuses the HashiCorp Vault's conformance test resources created using - // .github/infrastructure/docker-compose-hashicorp-vault.yml, - // so it reuses the tests/conformance/secretstores/secretstores.go test secrets. - res, err := client.GetSecret(ctx, secretStoreName, "multiplekeyvaluessecret", emptyOpt) - assert.NoError(t, err) - assert.NotNil(t, res) - assert.Equal(t, "1", res["first"]) - assert.Equal(t, "2", res["second"]) - assert.Equal(t, "3", res["third"]) - return nil - } + currentGrpcPort, currentHttpPort := GetCurrentGRPCAndHTTPPort(t) flow.New(t, "Test retrieving multiple key values from a secret"). - Step(dockercompose.Run(dockerComposeProjectName, dockerComposeClusterYAML)). + Step(dockercompose.Run(dockerComposeProjectName, defaultDockerComposeClusterYAML)). Step("Waiting for component to start...", flow.Sleep(5*time.Second)). Step(sidecar.Run(sidecarName, embedded.WithoutApp(), @@ -149,44 +113,356 @@ func TestMultipleKVRetrieval(t *testing.T) { componentRuntimeOptions(), )). Step("Waiting for component to load...", flow.Sleep(5*time.Second)). - Step("Verify component is registered", testComponentFound(t, secretStoreName, currentGrpcPort)). + Step("Verify component is registered", testComponentFound(secretStoreName, currentGrpcPort)). + Step("Verify no errors regarding component initialization", assertNoInitializationErrorsForComponent(secretStoreComponentPath)). Step("Verify component has support for multiple key-values under the same secret", - testComponentHasFeature(t, secretStoreName, string(secretstores.FeatureMultipleKeyValuesPerSecret), currentGrpcPort)). - Step("Test retrieval of a secret with multiple key-values", testGetMultipleKeyValuesFromSecret). + testComponentHasFeature(currentGrpcPort, secretStoreName, secretstores.FeatureMultipleKeyValuesPerSecret)). + Step("Test retrieval of a secret with multiple key-values", + testKeyValuesInSecret(currentGrpcPort, secretStoreName, "multiplekeyvaluessecret", map[string]string{ + "first": "1", + "second": "2", + "third": "3", + })). + Step("Test secret registered under a non-default vaultKVPrefix cannot be found", + testSecretIsNotFound(currentGrpcPort, secretStoreName, "secretUnderAlternativePrefix")). + Step("Test secret registered with no prefix cannot be found", testSecretIsNotFound(currentGrpcPort, secretStoreName, "secretWithNoPrefix")). + Step("Stop HashiCorp Vault server", dockercompose.Stop(dockerComposeProjectName, defaultDockerComposeClusterYAML)). + Run() +} + +func TestVaultKVPrefix(t *testing.T) { + const ( + secretStoreComponentPath = "./components/vaultKVPrefix" + secretStoreName = "my-hashicorp-vault" // as set in the component YAML + ) + + currentGrpcPort, currentHttpPort := GetCurrentGRPCAndHTTPPort(t) + + flow.New(t, "Test setting a non-default vaultKVPrefix value"). + Step(dockercompose.Run(dockerComposeProjectName, defaultDockerComposeClusterYAML)). + Step("Waiting for component to start...", flow.Sleep(5*time.Second)). + Step(sidecar.Run(sidecarName, + embedded.WithoutApp(), + embedded.WithComponentsPath(secretStoreComponentPath), + embedded.WithDaprGRPCPort(currentGrpcPort), + embedded.WithDaprHTTPPort(currentHttpPort), + componentRuntimeOptions(), + )). + Step("Waiting for component to load...", flow.Sleep(5*time.Second)). + Step("Verify component is registered", testComponentFound(secretStoreName, currentGrpcPort)). + Step("Verify no errors regarding component initialization", assertNoInitializationErrorsForComponent(secretStoreComponentPath)). + Step("Verify component has support for multiple key-values under the same secret", + testComponentHasFeature(currentGrpcPort, secretStoreName, secretstores.FeatureMultipleKeyValuesPerSecret)). + Step("Test retrieval of a secret under a non-default vaultKVPrefix", + testKeyValuesInSecret(currentGrpcPort, secretStoreName, "secretUnderAlternativePrefix", map[string]string{ + "altPrefixKey": "altPrefixValue", + })). + Step("Test secret registered with no prefix cannot be found", testSecretIsNotFound(currentGrpcPort, secretStoreName, "secretWithNoPrefix")). + Step("Stop HashiCorp Vault server", dockercompose.Stop(dockerComposeProjectName, defaultDockerComposeClusterYAML)). + Run() +} + +func TestVaultKVUsePrefixFalse(t *testing.T) { + const ( + secretStoreComponentPath = "./components/vaultKVUsePrefixFalse" + secretStoreName = "my-hashicorp-vault" // as set in the component YAML + ) + + currentGrpcPort, currentHttpPort := GetCurrentGRPCAndHTTPPort(t) + + flow.New(t, "Test using an empty vaultKVPrefix value"). + Step(dockercompose.Run(dockerComposeProjectName, defaultDockerComposeClusterYAML)). + Step("Waiting for component to start...", flow.Sleep(5*time.Second)). + Step(sidecar.Run(sidecarName, + embedded.WithoutApp(), + embedded.WithComponentsPath(secretStoreComponentPath), + embedded.WithDaprGRPCPort(currentGrpcPort), + embedded.WithDaprHTTPPort(currentHttpPort), + componentRuntimeOptions(), + )). + Step("Waiting for component to load...", flow.Sleep(5*time.Second)). + Step("Verify component is registered", testComponentFound(secretStoreName, currentGrpcPort)). + Step("Verify no errors regarding component initialization", assertNoInitializationErrorsForComponent(secretStoreComponentPath)). + Step("Verify component has support for multiple key-values under the same secret", + testComponentHasFeature(currentGrpcPort, secretStoreName, secretstores.FeatureMultipleKeyValuesPerSecret)). + Step("Test retrieval of a secret registered with no prefix and assuming vaultKVUsePrefix=false", + testKeyValuesInSecret(currentGrpcPort, secretStoreName, "secretWithNoPrefix", map[string]string{ + "noPrefixKey": "noProblem", + })). + Step("Test secret registered under the default vaultKVPrefix cannot be found", + testSecretIsNotFound(currentGrpcPort, secretStoreName, "multiplekeyvaluessecret")). + Step("Test secret registered under a non-default vaultKVPrefix cannot be found", + testSecretIsNotFound(currentGrpcPort, secretStoreName, "secretUnderAlternativePrefix")). + Step("Stop HashiCorp Vault server", dockercompose.Stop(dockerComposeProjectName, defaultDockerComposeClusterYAML)). + Run() +} + +func TestVaultValueTypeText(t *testing.T) { + const ( + secretStoreComponentPath = "./components/vaultValueTypeText" + secretStoreName = "my-hashicorp-vault" // as set in the component YAML + ) + + currentGrpcPort, currentHttpPort := GetCurrentGRPCAndHTTPPort(t) + + flow.New(t, "Test setting vaultValueType=text should cause it to behave with single-value semantics"). + Step(dockercompose.Run(dockerComposeProjectName, defaultDockerComposeClusterYAML)). + Step("Waiting for component to start...", flow.Sleep(5*time.Second)). + Step(sidecar.Run(sidecarName, + embedded.WithoutApp(), + embedded.WithComponentsPath(secretStoreComponentPath), + embedded.WithDaprGRPCPort(currentGrpcPort), + embedded.WithDaprHTTPPort(currentHttpPort), + componentRuntimeOptions(), + )). + Step("Waiting for component to load...", flow.Sleep(5*time.Second)). + Step("Verify component is registered", testComponentFound(secretStoreName, currentGrpcPort)). + Step("Verify no errors regarding component initialization", assertNoInitializationErrorsForComponent(secretStoreComponentPath)). + Step("Verify component DOES NOT support multiple key-values under the same secret", + testComponentDoesNotHaveFeature(currentGrpcPort, secretStoreName, secretstores.FeatureMultipleKeyValuesPerSecret)). + Step("Test secret store presents name/value semantics for secrets", + // result has a single key with tha same name as the secret and a JSON-like content + testKeyValuesInSecret(currentGrpcPort, secretStoreName, "secondsecret", map[string]string{ + "secondsecret": "{\"secondsecret\":\"efgh\"}", + })). + Step("Test secret registered under a non-default vaultKVPrefix cannot be found", + testSecretIsNotFound(currentGrpcPort, secretStoreName, "secretUnderAlternativePrefix")). + Step("Test secret registered with no prefix cannot be found", testSecretIsNotFound(currentGrpcPort, secretStoreName, "secretWithNoPrefix")). + Step("Stop HashiCorp Vault server", dockercompose.Stop(dockerComposeProjectName, defaultDockerComposeClusterYAML)). + Run() +} + +func TestTokenAndTokenMountPath(t *testing.T) { + fs := NewFlowSettings(t) + fs.secretStoreComponentPathBase = "./components/vaultTokenAndTokenMountPath/" + fs.componentNamePrefix = "my-hashicorp-vault-TestTokenAndTokenMountPath-" + + createNegativeTestFlow(fs, + "Verify component initialization failure when BOTH vaultToken and vaultTokenMountPath are present", + "both", + "token mount path and token both set") + + createNegativeTestFlow(fs, + "Verify component initialization failure when NEITHER vaultToken nor vaultTokenMountPath are present", + "neither", + "token mount path and token not set") + + createNegativeTestFlow(fs, + "Verify component initialization failure when vaultTokenPath points to a non-existing file", + "tokenMountPathPointsToBrokenPath", + "couldn't read vault token from mount path") + + createInitSucceedsButComponentFailsFlow(fs, + "Verify failure when vaultToken value does not match our servers's value", + "badVaultToken", + false) + + createPositiveTestFlow(fs, + "Verify success when vaultTokenPath points to an existing file matching the configured secret we have for our secret seeder", + "tokenMountPathHappyCase", + false) +} + +func TestVaultAddr(t *testing.T) { + fs := NewFlowSettings(t) + fs.secretStoreComponentPathBase = "./components/vaultAddr/" + fs.componentNamePrefix = "my-hashicorp-vault-TestVaultAddr-" + + createInitSucceedsButComponentFailsFlow(fs, + "Verify initialization success but use failure when vaultAddr does not point to a valid vault server address", + "wrongAddress", + false) + + createPositiveTestFlow(fs, + "Verify success when vaultAddr is missing and skipVerify is true and vault is using a self-signed certificate", + "missing", + true) + + createPositiveTestFlow(fs, + "Verify success when vaultAddr points to a non-standard port", + "nonStdPort", + true) + + createInitSucceedsButComponentFailsFlow(fs, + "Verify initialization success but use failure when vaultAddr is missing and skipVerify is true and vault is using its own self-signed certificate", + "missingSkipVerifyFalse", + true) +} + +func TestEnginePathCustomSecretsPath(t *testing.T) { + const ( + secretStoreComponentPathBase = "./components/enginePath/" + componentNamePrefix = "my-hashicorp-vault-TestEnginePath-" + componentSuffix = "customSecretsPath" + componentName = componentNamePrefix + componentSuffix + ) + + currentGrpcPort, currentHttpPort := GetCurrentGRPCAndHTTPPort(t) + + componentPath := filepath.Join(secretStoreComponentPathBase, componentSuffix) + dockerComposeClusterYAML := filepath.Join(componentPath, "docker-compose-hashicorp-vault.yml") + + flow.New(t, "Verify success when we set enginePath to a non-std value"). + Step(dockercompose.Run(dockerComposeProjectName, dockerComposeClusterYAML)). + Step("Waiting for component to start...", flow.Sleep(5*time.Second)). + Step(sidecar.Run(sidecarName, + embedded.WithoutApp(), + embedded.WithComponentsPath(componentPath), + embedded.WithDaprGRPCPort(currentGrpcPort), + embedded.WithDaprHTTPPort(currentHttpPort), + // Dapr log-level debug? + componentRuntimeOptions(), + )). + Step("Waiting for component to load...", flow.Sleep(5*time.Second)). + Step("✅Verify component is registered", testComponentFound(componentName, currentGrpcPort)). + Step("Verify no errors regarding component initialization", assertNoInitializationErrorsForComponent(componentPath)). + Step("Verify that the custom path has secrets under it", testGetBulkSecretsWorksAndFoundKeys(currentGrpcPort, componentName)). + Step("Verify that the custom path-specific secret is found", testKeyValuesInSecret(currentGrpcPort, componentName, + "secretUnderCustomPath", map[string]string{ + "the": "trick", + "was": "the", + "path": "parameter", + })). Step("Stop HashiCorp Vault server", dockercompose.Stop(dockerComposeProjectName, dockerComposeClusterYAML)). Run() } -func testComponentFound(t *testing.T, targetComponentName string, currentGrpcPort int) flow.Runnable { +func TestEnginePathSecrets(t *testing.T) { + fs := NewFlowSettings(t) + fs.secretStoreComponentPathBase = "./components/enginePath/" + fs.componentNamePrefix = "my-hashicorp-vault-TestEnginePath-" + + createPositiveTestFlow(fs, + "Verify success when vaultEngine explicitly uses the secrets engine", + "secret", false) +} + +func TestCaFamilyOfFields(t *testing.T) { + fs := NewFlowSettings(t) + fs.secretStoreComponentPathBase = "./components/caFamily/" + fs.componentNamePrefix = "my-hashicorp-vault-TestCaFamilyOfFields-" + + createPositiveTestFlow(fs, + "Verify success when using a caCert to talk to vault with tlsServerName and enforceVerify", + "caCert", true) + + createPositiveTestFlow(fs, + "Verify success when using a caPath to talk to vault with tlsServerName and enforceVerify", + "caCert", true) + + createPositiveTestFlow(fs, + "Verify success when using a caPem to talk to vault with tlsServerName and enforceVerify", + "caPem", true) + + createInitSucceedsButComponentFailsFlow(fs, + "Verify successful initialization but secret retrieval failure when `caPem` is set to a valid server certificate (baseline) but `tlsServerName` does not match the server name", + "badTlsServerName", true) + + createInitSucceedsButComponentFailsFlow(fs, + "Verify successful initialization but secret retrieval failure when `caPem` is set to an invalid server certificate (flag under test) despite `tlsServerName` matching the server name ", + "badCaCert", true) + + createPositiveTestFlow(fs, + "Verify success when using a caPem is invalid but skipVerify is on", + "badCaCertAndSkipVerify", true) +} + +func TestVersioning(t *testing.T) { + const ( + componentPath = "./components/versioning/" + componentName = "my-hashicorp-vault-TestVersioning" + ) + dockerComposeClusterYAML := filepath.Join(componentPath, "docker-compose-hashicorp-vault.yml") + + currentGrpcPort, currentHttpPort := GetCurrentGRPCAndHTTPPort(t) + + flow.New(t, "Verify success on retrieval of a past version of a secret"). + Step(dockercompose.Run(dockerComposeProjectName, dockerComposeClusterYAML)). + Step("Waiting for component to start...", flow.Sleep(5*time.Second)). + Step(sidecar.Run(sidecarName, + embedded.WithoutApp(), + embedded.WithComponentsPath(componentPath), + embedded.WithDaprGRPCPort(currentGrpcPort), + embedded.WithDaprHTTPPort(currentHttpPort), + // Dapr log-level debug? + componentRuntimeOptions(), + )). + Step("Waiting for component to load...", flow.Sleep(5*time.Second)). + Step("✅Verify component is registered", testComponentFound(componentName, currentGrpcPort)). + Step("Verify no errors regarding component initialization", assertNoInitializationErrorsForComponent(componentPath)). + Step("Verify that we can list secrets", testGetBulkSecretsWorksAndFoundKeys(currentGrpcPort, componentName)). + Step("Verify that the latest version of the secret is there", testKeyValuesInSecret(currentGrpcPort, componentName, + "secretUnderTest", map[string]string{ + "versionedKey": "latestValue", + })). + Step("Verify that a past version of the secret is there", testKeyValuesInSecret(currentGrpcPort, componentName, + "secretUnderTest", map[string]string{ + "versionedKey": "secondVersion", + }, "2")). + Step("Stop HashiCorp Vault server", dockercompose.Stop(dockerComposeProjectName, dockerComposeClusterYAML)). + Run() +} + +// +// Aux. functions for testing key presence +// + +func testKeyValuesInSecret(currentGrpcPort int, secretStoreName string, secretName string, keyValueMap map[string]string, maybeVersionID ...string) flow.Runnable { return func(ctx flow.Context) error { - client, err := client.NewClientWithPort(fmt.Sprint(currentGrpcPort)) + daprClient, err := client.NewClientWithPort(fmt.Sprint(currentGrpcPort)) if err != nil { panic(err) } - defer client.Close() + defer daprClient.Close() - clientCtx := context.Background() - - resp, err := client.GrpcClient().GetMetadata(clientCtx, &empty.Empty{}) - assert.NoError(t, err) - assert.NotNil(t, resp) - assert.NotNil(t, resp.GetRegisteredComponents()) - - // Find the component - componentFound := false - for _, component := range resp.GetRegisteredComponents() { - if component.GetName() == targetComponentName { - componentFound = true - break - } + metadata := map[string]string{} + if len(maybeVersionID) > 0 { + metadata["version_id"] = maybeVersionID[0] } - assert.True(t, componentFound) + + res, err := daprClient.GetSecret(ctx, secretStoreName, secretName, metadata) + assert.NoError(ctx.T, err) + assert.NotNil(ctx.T, res) + + for key, valueExpected := range keyValueMap { + valueInSecret, exists := res[key] + assert.True(ctx.T, exists, "expected key not found in key") + assert.Equal(ctx.T, valueExpected, valueInSecret) + } + return nil + } +} + +func testSecretIsNotFound(currentGrpcPort int, secretStoreName string, secretName string) flow.Runnable { + return func(ctx flow.Context) error { + daprClient, err := client.NewClientWithPort(fmt.Sprint(currentGrpcPort)) + if err != nil { + panic(err) + } + defer daprClient.Close() + + emptyOpt := map[string]string{} + + _, err = daprClient.GetSecret(ctx, secretStoreName, secretName, emptyOpt) + assert.Error(ctx.T, err) return nil } } -func testComponentHasFeature(t *testing.T, targetComponentName string, targetCapability string, currentGrpcPort int) flow.Runnable { +func testDefaultSecretIsFound(currentGrpcPort int, secretStoreName string) flow.Runnable { + return testKeyValuesInSecret(currentGrpcPort, secretStoreName, "multiplekeyvaluessecret", map[string]string{ + "first": "1", + "second": "2", + "third": "3", + }) +} + +func testComponentIsNotWorking(targetComponentName string, currentGrpcPort int) flow.Runnable { + return testSecretIsNotFound(currentGrpcPort, targetComponentName, "multiplekeyvaluessecret") +} + +func testGetBulkSecretsWorksAndFoundKeys(currentGrpcPort int, secretStoreName string) flow.Runnable { return func(ctx flow.Context) error { client, err := client.NewClientWithPort(fmt.Sprint(currentGrpcPort)) if err != nil { @@ -194,37 +470,108 @@ func testComponentHasFeature(t *testing.T, targetComponentName string, targetCap } defer client.Close() - clientCtx := context.Background() + emptyOpt := map[string]string{} - resp, err := client.GrpcClient().GetMetadata(clientCtx, &empty.Empty{}) - assert.NoError(t, err) - assert.NotNil(t, resp) - assert.NotNil(t, resp.GetRegisteredComponents()) + res, err := client.GetBulkSecret(ctx, secretStoreName, emptyOpt) + assert.NoError(ctx.T, err) + assert.NotNil(ctx.T, res) + assert.NotEmpty(ctx.T, res) - // Find the component - var capabilities []string = []string{} - for _, component := range resp.GetRegisteredComponents() { - if component.GetName() == targetComponentName { - capabilities = component.GetCapabilities() - break + for k, v := range res { + ctx.Logf("💡 %s", k) + for i, j := range v { + ctx.Logf("💡\t %s : %s", i, j) } } - assert.NotEmpty(t, capabilities) + return nil + } +} + +// +// Helper methods for checking component registration and availability of its features +// + +func testComponentFound(targetComponentName string, currentGrpcPort int) flow.Runnable { + return func(ctx flow.Context) error { + componentFound, _ := getComponentCapabilities(ctx, currentGrpcPort, targetComponentName) + assert.True(ctx.T, componentFound, "Component was expected to be found but it was missing.") + return nil + } +} + +// Due to https://github.com/dapr/dapr/issues/5487 we cannot perform negative tests +// for the component presence against the metadata registry. +// Instead, we turned testComponentNotFound into a simpler negative test that ensures a good key cannot be found +func testComponentNotFound(targetComponentName string, currentGrpcPort int) flow.Runnable { + // TODO(tmacam) once https://github.com/dapr/dapr/issues/5487 is fixed, uncomment the code bellow + return testSecretIsNotFound(currentGrpcPort, targetComponentName, "multiplekeyvaluessecret") + + //return func(ctx flow.Context) error { + // // Find the component + // componentFound, _ := getComponentCapabilities(ctx, currentGrpcPort, targetComponentName) + // assert.False(ctx.T, componentFound, "Component was expected to be missing but it was found.") + // return nil + //} +} + +func testComponentDoesNotHaveFeature(currentGrpcPort int, targetComponentName string, targetCapability secretstores.Feature) flow.Runnable { + return testComponentAndFeaturePresence(currentGrpcPort, targetComponentName, targetCapability, false) +} + +func testComponentHasFeature(currentGrpcPort int, targetComponentName string, targetCapability secretstores.Feature) flow.Runnable { + return testComponentAndFeaturePresence(currentGrpcPort, targetComponentName, targetCapability, true) +} + +func testComponentAndFeaturePresence(currentGrpcPort int, targetComponentName string, targetCapability secretstores.Feature, expectedToBeFound bool) flow.Runnable { + return func(ctx flow.Context) error { + componentFound, capabilities := getComponentCapabilities(ctx, currentGrpcPort, targetComponentName) + + assert.True(ctx.T, componentFound, "Component was expected to be found but it was missing.") + + targetCapabilityAsString := string(targetCapability) // Find capability capabilityFound := false for _, cap := range capabilities { - if cap == targetCapability { + if cap == targetCapabilityAsString { capabilityFound = true break } } - assert.True(t, capabilityFound) + assert.Equal(ctx.T, expectedToBeFound, capabilityFound) return nil } } +func getComponentCapabilities(ctx flow.Context, currentGrpcPort int, targetComponentName string) (found bool, capabilities []string) { + daprClient, err := client.NewClientWithPort(fmt.Sprint(currentGrpcPort)) + if err != nil { + panic(err) + } + defer daprClient.Close() + + clientCtx := context.Background() + + resp, err := daprClient.GrpcClient().GetMetadata(clientCtx, &empty.Empty{}) + assert.NoError(ctx.T, err) + assert.NotNil(ctx.T, resp) + assert.NotNil(ctx.T, resp.GetRegisteredComponents()) + + // Find the component + for _, component := range resp.GetRegisteredComponents() { + if component.GetName() == targetComponentName { + ctx.Logf("🩺 component found=%s", component) + return true, component.GetCapabilities() + } + } + return false, []string{} +} + +// +// Flow and test setup helpers +// + func componentRuntimeOptions() []runtime.Option { log := logger.NewLogger("dapr.components") @@ -236,3 +583,196 @@ func componentRuntimeOptions() []runtime.Option { runtime.WithSecretStores(secretStoreRegistry), } } + +func GetCurrentGRPCAndHTTPPort(t *testing.T) (int, int) { + ports, err := dapr_testing.GetFreePorts(2) + assert.NoError(t, err) + + currentGrpcPort := ports[0] + currentHttpPort := ports[1] + + return currentGrpcPort, currentHttpPort +} + +// +// Helper functions for asserting error messages during component initialization +// +// These can be exported to their own module. +// Do notice that they have side effects: using more than one in a single +// flow will cause only the latest to work. Perhaps this functionality +// (dapr.runtime log capture) could be baked into flows themselves? +// +// Also: this is not thread-safe nor concurrent safe: only one test +// can be run at a time to ensure deterministic capture of dapr.runtime output. + +type initErrorChecker func(ctx flow.Context, errorLine string) error + +func captureLogsAndCheckInitErrors(checker initErrorChecker) flow.Runnable { + // Setup log capture + logCaptor := &bytes.Buffer{} + runtimeLogger := logger.NewLogger("dapr.runtime") + runtimeLogger.SetOutput(io.MultiWriter(os.Stdout, logCaptor)) + + // Stop log capture, reset buffer just for good mesure + cleanup := func() { + logCaptor.Reset() + runtimeLogger.SetOutput(os.Stdout) + } + + grepInitErrorFromLogs := func() (string, error) { + errorMarker := []byte("INIT_COMPONENT_FAILURE") + scanner := bufio.NewScanner(logCaptor) + for scanner.Scan() { + if err := scanner.Err(); err != nil { + return "", err + } + if bytes.Contains(scanner.Bytes(), errorMarker) { + return scanner.Text(), nil + } + } + return "", scanner.Err() + } + + // Wraps the our initErrorChecker with cleanup and error-grepping logic so we only care about the + // log error + return func(ctx flow.Context) error { + defer cleanup() + + errorLine, err := grepInitErrorFromLogs() + if err != nil { + return err + } + ctx.Logf("👀 errorLine: %s", errorLine) + + return checker(ctx, errorLine) + } +} + +func assertNoInitializationErrorsForComponent(componentName string) flow.Runnable { + checker := func(ctx flow.Context, errorLine string) error { + componentFailedToInitialize := strings.Contains(errorLine, componentName) + assert.False(ctx.T, componentFailedToInitialize, + "Found component name mentioned in an component initialization error message: %s", errorLine) + + return nil + } + + return captureLogsAndCheckInitErrors(checker) +} + +func assertInitializationFailedWithErrorsForComponent(componentName string, additionalSubStringsToMatch ...string) flow.Runnable { + checker := func(ctx flow.Context, errorLine string) error { + assert.NotEmpty(ctx.T, errorLine, "Expected a component initialization error message but none found") + assert.Contains(ctx.T, errorLine, componentName, + "Expected to find component '%s' mentioned in error message but found none: %s", componentName, errorLine) + + for _, subString := range additionalSubStringsToMatch { + assert.Contains(ctx.T, errorLine, subString, + "Expected to find '%s' mentioned in error message but found none: %s", componentName, errorLine) + } + + return nil + } + + return captureLogsAndCheckInitErrors(checker) +} + +// +// Helper functions for common tests for happy case, init-but-does-not-work and fails-initialization tests +// These test re-use the same seed secrets. They aim to check how certain flags break or keep vault working +// instead of verifying some specific tha change key retrieval behavior. +// +// Those tests require a `/` structure. + +type commonFlowSettings struct { + t *testing.T + currentGrpcPort int + currentHttpPort int + secretStoreComponentPathBase string + componentNamePrefix string +} + +func NewFlowSettings(t *testing.T) *commonFlowSettings { + res := commonFlowSettings{} + res.t = t + res.currentGrpcPort, res.currentHttpPort = GetCurrentGRPCAndHTTPPort(t) + return &res +} + +func createPositiveTestFlow(fs *commonFlowSettings, flowDescription string, componentSuffix string, useCustomDockerCompose bool) { + componentPath := filepath.Join(fs.secretStoreComponentPathBase, componentSuffix) + componentName := fs.componentNamePrefix + componentSuffix + + dockerComposeClusterYAML := defaultDockerComposeClusterYAML + if useCustomDockerCompose { + dockerComposeClusterYAML = filepath.Join(componentPath, "docker-compose-hashicorp-vault.yml") + } + + flow.New(fs.t, flowDescription). + Step(dockercompose.Run(dockerComposeProjectName, dockerComposeClusterYAML)). + Step("Waiting for component to start...", flow.Sleep(5*time.Second)). + Step(sidecar.Run(sidecarName, + embedded.WithoutApp(), + embedded.WithComponentsPath(componentPath), + embedded.WithDaprGRPCPort(fs.currentGrpcPort), + embedded.WithDaprHTTPPort(fs.currentHttpPort), + componentRuntimeOptions(), + )). + Step("Waiting for component to load...", flow.Sleep(5*time.Second)). + Step("Verify component is registered", testComponentFound(componentName, fs.currentGrpcPort)). + Step("Verify no errors regarding component initialization", assertNoInitializationErrorsForComponent(componentPath)). + Step("Test that the default secret is found", testDefaultSecretIsFound(fs.currentGrpcPort, componentName)). + Step("Stop HashiCorp Vault server", dockercompose.Stop(dockerComposeProjectName, dockerComposeClusterYAML)). + Run() +} + +func createInitSucceedsButComponentFailsFlow(fs *commonFlowSettings, flowDescription string, componentSuffix string, useCustomDockerCompose bool, initErrorCodes ...string) { + componentPath := filepath.Join(fs.secretStoreComponentPathBase, componentSuffix) + componentName := fs.componentNamePrefix + componentSuffix + + dockerComposeClusterYAML := defaultDockerComposeClusterYAML + if useCustomDockerCompose { + dockerComposeClusterYAML = filepath.Join(componentPath, "docker-compose-hashicorp-vault.yml") + } + + flow.New(fs.t, flowDescription). + Step(dockercompose.Run(dockerComposeProjectName, dockerComposeClusterYAML)). + Step("Waiting for component to start...", flow.Sleep(5*time.Second)). + Step(sidecar.Run(sidecarName, + embedded.WithoutApp(), + embedded.WithComponentsPath(componentPath), + embedded.WithDaprGRPCPort(fs.currentGrpcPort), + embedded.WithDaprHTTPPort(fs.currentHttpPort), + componentRuntimeOptions(), + )). + Step("Waiting for component to load...", flow.Sleep(5*time.Second)). + Step("✅Verify component is registered", testComponentFound(componentName, fs.currentGrpcPort)). + Step("Verify no errors regarding component initialization", assertNoInitializationErrorsForComponent(componentPath)). + Step("🛑Verify component does not work", testComponentIsNotWorking(componentName, fs.currentGrpcPort)). + Step("Stop HashiCorp Vault server", dockercompose.Stop(dockerComposeProjectName, dockerComposeClusterYAML)). + Run() +} + +func createNegativeTestFlow(fs *commonFlowSettings, flowDescription string, componentSuffix string, initErrorCodes ...string) { + componentPath := filepath.Join(fs.secretStoreComponentPathBase, componentSuffix) + componentName := fs.componentNamePrefix + componentSuffix + dockerComposeClusterYAML := defaultDockerComposeClusterYAML + + flow.New(fs.t, flowDescription). + Step(dockercompose.Run(dockerComposeProjectName, dockerComposeClusterYAML)). + Step("Waiting for component to start...", flow.Sleep(5*time.Second)). + Step(sidecar.Run(sidecarName, + embedded.WithoutApp(), + embedded.WithComponentsPath(componentPath), + embedded.WithDaprGRPCPort(fs.currentGrpcPort), + embedded.WithDaprHTTPPort(fs.currentHttpPort), + componentRuntimeOptions(), + )). + Step("Waiting for component to load...", flow.Sleep(5*time.Second)). + // TODO(tmacam) FIX https://github.com/dapr/dapr/issues/5487 + Step("🛑Verify component is NOT registered", testComponentNotFound(componentName, fs.currentGrpcPort)). + Step("Verify initialization error reported for component", assertInitializationFailedWithErrorsForComponent(componentName, initErrorCodes...)). + Step("🐞😱 Bug dependant behavior - test component is actually registered", testComponentFound(componentName, fs.currentGrpcPort)). + Step("Stop HashiCorp Vault server", dockercompose.Stop(dockerComposeProjectName, dockerComposeClusterYAML)). + Run() +} From c736bcc50620d8f709dfc38e836a4a179b32a96a Mon Sep 17 00:00:00 2001 From: Ryan Lettieri Date: Mon, 28 Nov 2022 14:35:31 -0700 Subject: [PATCH 69/87] Hotfix for StateTransactionRequest with etag crash Signed-off-by: Ryan Lettieri --- state/azure/cosmosdb/cosmosdb.go | 2 +- .../state/azure/cosmosdb/cosmosdb_test.go | 63 +++++++++++++++---- 2 files changed, 52 insertions(+), 13 deletions(-) diff --git a/state/azure/cosmosdb/cosmosdb.go b/state/azure/cosmosdb/cosmosdb.go index ba8a775e2..7be95a330 100644 --- a/state/azure/cosmosdb/cosmosdb.go +++ b/state/azure/cosmosdb/cosmosdb.go @@ -366,7 +366,7 @@ func (c *StateStore) Multi(request *state.TransactionalStateRequest) (err error) numOperations := 0 // Loop through the list of operations. Create and add the operation to the batch for _, o := range request.Operations { - var options *azcosmos.TransactionalBatchItemOptions + options := &azcosmos.TransactionalBatchItemOptions{} if o.Operation == state.Upsert { req := o.Request.(state.SetRequest) diff --git a/tests/certification/state/azure/cosmosdb/cosmosdb_test.go b/tests/certification/state/azure/cosmosdb/cosmosdb_test.go index ade9638b8..0c1b1eba7 100644 --- a/tests/certification/state/azure/cosmosdb/cosmosdb_test.go +++ b/tests/certification/state/azure/cosmosdb/cosmosdb_test.go @@ -23,12 +23,12 @@ import ( "github.com/dapr/go-sdk/client" secretstore_env "github.com/dapr/components-contrib/secretstores/local/env" - secretstores_loader "github.com/dapr/dapr/pkg/components/secretstores" - "github.com/dapr/components-contrib/tests/certification/flow/sidecar" + secretstores_loader "github.com/dapr/dapr/pkg/components/secretstores" state_loader "github.com/dapr/dapr/pkg/components/state" "github.com/dapr/dapr/pkg/runtime" dapr_testing "github.com/dapr/dapr/pkg/testing" + daprClient "github.com/dapr/go-sdk/client" "github.com/dapr/kit/logger" "github.com/stretchr/testify/assert" ) @@ -73,6 +73,34 @@ func TestAzureCosmosDBStorage(t *testing.T) { } } + transactionsTest := func(statestore string) func(ctx flow.Context) error { + return func(ctx flow.Context) error { + client, err := client.NewClientWithPort(fmt.Sprint(currentGrpcPort)) + if err != nil { + panic(err) + } + defer client.Close() + + err = client.ExecuteStateTransaction(ctx, statestore, nil, []*daprClient.StateOperation{ + { + Type: daprClient.StateOperationTypeUpsert, + Item: &daprClient.SetStateItem{ + Key: "reqKey1", + Value: []byte("reqVal1"), + Etag: &daprClient.ETag{ + Value: "test", + }, + Metadata: map[string]string{ + "ttlInSeconds": "-1", + }, + }, + }, + }) + assert.NoError(t, err) + + return nil + } + } partitionTest := func(statestore string) flow.Runnable { return func(ctx flow.Context) error { client, err := client.NewClientWithPort(fmt.Sprint(currentGrpcPort)) @@ -133,6 +161,17 @@ func TestAzureCosmosDBStorage(t *testing.T) { Step("Run basic test with master key", basicTest("statestore-basic")). Run() + flow.New(t, "Test etag operations"). + // Run the Dapr sidecar with azure CosmosDB storage. + Step(sidecar.Run(sidecarNamePrefix, + embedded.WithoutApp(), + embedded.WithDaprGRPCPort(currentGrpcPort), + embedded.WithDaprHTTPPort(currentHTTPPort), + embedded.WithComponentsPath("./components/basictest"), + componentRuntimeOptions())). + Step("Run basic test with master key", transactionsTest("statestore-basic")). + Run() + flow.New(t, "Test basic operations with different partition keys"). // Run the Dapr sidecar with azure CosmosDB storage. Step(sidecar.Run(sidecarNamePrefix, @@ -144,16 +183,16 @@ func TestAzureCosmosDBStorage(t *testing.T) { Step("Run basic test with multiple parition keys", partitionTest("statestore-basic")). Run() - flow.New(t, "Test AAD authentication"). - // Run the Dapr sidecar with azure CosmosDB storage. - Step(sidecar.Run(sidecarNamePrefix, - embedded.WithoutApp(), - embedded.WithDaprGRPCPort(currentGrpcPort), - embedded.WithDaprHTTPPort(currentHTTPPort), - embedded.WithComponentsPath("./components/aadtest"), - componentRuntimeOptions())). - Step("Run basic test with Azure AD Authentication", basicTest("statestore-aad")). - Run() + // flow.New(t, "Test AAD authentication"). + // // Run the Dapr sidecar with azure CosmosDB storage. + // Step(sidecar.Run(sidecarNamePrefix, + // embedded.WithoutApp(), + // embedded.WithDaprGRPCPort(currentGrpcPort), + // embedded.WithDaprHTTPPort(currentHTTPPort), + // embedded.WithComponentsPath("./components/aadtest"), + // componentRuntimeOptions())). + // Step("Run basic test with Azure AD Authentication", basicTest("statestore-aad")). + // Run() } func componentRuntimeOptions() []runtime.Option { From f54046568956daa4d70c4582ef81ccd33ed8cfdd Mon Sep 17 00:00:00 2001 From: Ryan Lettieri Date: Mon, 28 Nov 2022 14:42:02 -0700 Subject: [PATCH 70/87] Cleaning up cosmosdb statestore test Signed-off-by: Ryan Lettieri --- .../state/azure/cosmosdb/cosmosdb_test.go | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/tests/certification/state/azure/cosmosdb/cosmosdb_test.go b/tests/certification/state/azure/cosmosdb/cosmosdb_test.go index 0c1b1eba7..fcc77ab5a 100644 --- a/tests/certification/state/azure/cosmosdb/cosmosdb_test.go +++ b/tests/certification/state/azure/cosmosdb/cosmosdb_test.go @@ -161,7 +161,7 @@ func TestAzureCosmosDBStorage(t *testing.T) { Step("Run basic test with master key", basicTest("statestore-basic")). Run() - flow.New(t, "Test etag operations"). + flow.New(t, "Test transaction operations"). // Run the Dapr sidecar with azure CosmosDB storage. Step(sidecar.Run(sidecarNamePrefix, embedded.WithoutApp(), @@ -169,7 +169,7 @@ func TestAzureCosmosDBStorage(t *testing.T) { embedded.WithDaprHTTPPort(currentHTTPPort), embedded.WithComponentsPath("./components/basictest"), componentRuntimeOptions())). - Step("Run basic test with master key", transactionsTest("statestore-basic")). + Step("Run transaction test with etag present", transactionsTest("statestore-basic")). Run() flow.New(t, "Test basic operations with different partition keys"). @@ -183,16 +183,16 @@ func TestAzureCosmosDBStorage(t *testing.T) { Step("Run basic test with multiple parition keys", partitionTest("statestore-basic")). Run() - // flow.New(t, "Test AAD authentication"). - // // Run the Dapr sidecar with azure CosmosDB storage. - // Step(sidecar.Run(sidecarNamePrefix, - // embedded.WithoutApp(), - // embedded.WithDaprGRPCPort(currentGrpcPort), - // embedded.WithDaprHTTPPort(currentHTTPPort), - // embedded.WithComponentsPath("./components/aadtest"), - // componentRuntimeOptions())). - // Step("Run basic test with Azure AD Authentication", basicTest("statestore-aad")). - // Run() + flow.New(t, "Test AAD authentication"). + // Run the Dapr sidecar with azure CosmosDB storage. + Step(sidecar.Run(sidecarNamePrefix, + embedded.WithoutApp(), + embedded.WithDaprGRPCPort(currentGrpcPort), + embedded.WithDaprHTTPPort(currentHTTPPort), + embedded.WithComponentsPath("./components/aadtest"), + componentRuntimeOptions())). + Step("Run basic test with Azure AD Authentication", basicTest("statestore-aad")). + Run() } func componentRuntimeOptions() []runtime.Option { From 385c6b79b67039ece5507ab31f796483049fd47e Mon Sep 17 00:00:00 2001 From: Bernd Verst <4535280+berndverst@users.noreply.github.com> Date: Mon, 28 Nov 2022 15:51:03 -0800 Subject: [PATCH 71/87] remove unnecessary reader close() Signed-off-by: Bernd Verst <4535280+berndverst@users.noreply.github.com> --- bindings/azure/blobstorage/blobstorage.go | 4 ---- 1 file changed, 4 deletions(-) diff --git a/bindings/azure/blobstorage/blobstorage.go b/bindings/azure/blobstorage/blobstorage.go index 582de9878..3724a7e0f 100644 --- a/bindings/azure/blobstorage/blobstorage.go +++ b/bindings/azure/blobstorage/blobstorage.go @@ -194,10 +194,6 @@ func (a *AzureBlobStorage) get(ctx context.Context, req *bindings.InvokeRequest) if err != nil { return nil, fmt.Errorf("error reading az blob: %w", err) } - err = reader.Close() - if err != nil { - return nil, fmt.Errorf("error closing az blob reader: %w", err) - } var metadata map[string]string fetchMetadata, err := req.GetMetadataAsBool(metadataKeyIncludeMetadata) From f39a071e456c03e32b40e093287bb750ca2ea74f Mon Sep 17 00:00:00 2001 From: Bernd Verst <4535280+berndverst@users.noreply.github.com> Date: Mon, 28 Nov 2022 15:59:19 -0800 Subject: [PATCH 72/87] Fix kubernetes secretstore conformance test Signed-off-by: Bernd Verst <4535280+berndverst@users.noreply.github.com> --- .github/workflows/conformance.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/conformance.yml b/.github/workflows/conformance.yml index b5d7d19a9..a7ae42f69 100644 --- a/.github/workflows/conformance.yml +++ b/.github/workflows/conformance.yml @@ -334,7 +334,7 @@ jobs: if: contains(matrix.component, 'mysql.mariadb') - name: Start KinD - uses: helm/kind-action@v1.0.0 + uses: helm/kind-action@v1.4.0 if: contains(matrix.component, 'kubernetes') - name: Start postgresql From 97bb296ffcbda33dfc7bdd936a528acac0826cb4 Mon Sep 17 00:00:00 2001 From: Tiago Alves Macambira Date: Mon, 28 Nov 2022 17:08:03 -0800 Subject: [PATCH 73/87] Fixes in response to code review. * Removes emojis from output * Auto-generate certificates on the fly * Move helper methods out of vault_test.go and into helper files. Signed-off-by: Tiago Alves Macambira --- secretstores/hashicorp/vault/vault.go | 4 +- .../secretstores/hashicorp/vault/README.md | 4 +- .../hashicorp/vault/capture_logs.go | 109 +++++ .../vault/components/caFamily/Makefile | 9 +- .../caFamily/caPem/hashicorp-vault.yml | 59 --- .../components/caFamily/certificates/cert.pem | 34 -- .../certificates/incorrect-ca-cert.pem | 34 -- .../certificates/incorrect-ca-key.pem | 52 --- .../components/caFamily/certificates/key.pem | 52 --- .../caFamily/vaultConfig/vault_server.hcl | 11 +- .../hashicorp/vault/flow_helpers.go | 157 +++++++ .../hashicorp/vault/metadata_helpers.go | 105 +++++ .../hashicorp/vault/secret_helpers.go | 106 +++++ .../hashicorp/vault/vault_test.go | 421 +----------------- 14 files changed, 512 insertions(+), 645 deletions(-) create mode 100644 tests/certification/secretstores/hashicorp/vault/capture_logs.go delete mode 100644 tests/certification/secretstores/hashicorp/vault/components/caFamily/caPem/hashicorp-vault.yml delete mode 100644 tests/certification/secretstores/hashicorp/vault/components/caFamily/certificates/cert.pem delete mode 100644 tests/certification/secretstores/hashicorp/vault/components/caFamily/certificates/incorrect-ca-cert.pem delete mode 100644 tests/certification/secretstores/hashicorp/vault/components/caFamily/certificates/incorrect-ca-key.pem delete mode 100644 tests/certification/secretstores/hashicorp/vault/components/caFamily/certificates/key.pem create mode 100644 tests/certification/secretstores/hashicorp/vault/flow_helpers.go create mode 100644 tests/certification/secretstores/hashicorp/vault/metadata_helpers.go create mode 100644 tests/certification/secretstores/hashicorp/vault/secret_helpers.go diff --git a/secretstores/hashicorp/vault/vault.go b/secretstores/hashicorp/vault/vault.go index 0d540c2ee..ede97a2c0 100644 --- a/secretstores/hashicorp/vault/vault.go +++ b/secretstores/hashicorp/vault/vault.go @@ -510,7 +510,7 @@ func readCertificateFolder(certPool *x509.CertPool, path string) error { func (v *vaultSecretStore) Features() []secretstores.Feature { if v.vaultValueType == valueTypeText { return []secretstores.Feature{} - } else { - return []secretstores.Feature{secretstores.FeatureMultipleKeyValuesPerSecret} } + + return []secretstores.Feature{secretstores.FeatureMultipleKeyValuesPerSecret} } diff --git a/tests/certification/secretstores/hashicorp/vault/README.md b/tests/certification/secretstores/hashicorp/vault/README.md index b4ee693f5..9f4f9c2f3 100644 --- a/tests/certification/secretstores/hashicorp/vault/README.md +++ b/tests/certification/secretstores/hashicorp/vault/README.md @@ -136,13 +136,13 @@ TODO: Should we add code to enforce that only one of these is provided? Under the current directory run: ```shell -GOLANG_PROTOBUF_REGISTRATION_CONFLICT=warn go test -v vault_test.go +GOLANG_PROTOBUF_REGISTRATION_CONFLICT=warn go test -v . ``` To run an specific test run (replacing `TestVersioning` with the name of the test method): ```shell -GOLANG_PROTOBUF_REGISTRATION_CONFLICT=warn go test -run TestVersioning -v vault_test.go +GOLANG_PROTOBUF_REGISTRATION_CONFLICT=warn go test -run TestVersioning -v . ``` ### Docker-compose diff --git a/tests/certification/secretstores/hashicorp/vault/capture_logs.go b/tests/certification/secretstores/hashicorp/vault/capture_logs.go new file mode 100644 index 000000000..3a44d288c --- /dev/null +++ b/tests/certification/secretstores/hashicorp/vault/capture_logs.go @@ -0,0 +1,109 @@ +/* +Copyright 2021 The Dapr Authors +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package vault_test + +import ( + "bufio" + "bytes" + "io" + "os" + "strings" + + "github.com/dapr/components-contrib/tests/certification/flow" + "github.com/dapr/kit/logger" + "github.com/stretchr/testify/assert" +) + +// +// Helper functions for asserting error messages during component initialization +// +// These can be exported to their own module. +// Do notice that they have side effects: using more than one in a single +// flow will cause only the latest to work. Perhaps this functionality +// (dapr.runtime log capture) could be baked into flows themselves? +// +// Also: this is not thread-safe nor concurrent safe: only one test +// can be run at a time to ensure deterministic capture of dapr.runtime output. + +type InitErrorChecker func(ctx flow.Context, errorLine string) error + +func CaptureLogsAndCheckInitErrors(checker InitErrorChecker) flow.Runnable { + // Setup log capture + logCaptor := &bytes.Buffer{} + runtimeLogger := logger.NewLogger("dapr.runtime") + runtimeLogger.SetOutput(io.MultiWriter(os.Stdout, logCaptor)) + + // Stop log capture, reset buffer just for good mesure + cleanup := func() { + logCaptor.Reset() + runtimeLogger.SetOutput(os.Stdout) + } + + grepInitErrorFromLogs := func() (string, error) { + errorMarker := []byte("INIT_COMPONENT_FAILURE") + scanner := bufio.NewScanner(logCaptor) + for scanner.Scan() { + if err := scanner.Err(); err != nil { + return "", err + } + if bytes.Contains(scanner.Bytes(), errorMarker) { + return scanner.Text(), nil + } + } + return "", scanner.Err() + } + + // Wraps our InitErrorChecker with cleanup and error-grepping logic so we only care about the + // log error + return func(ctx flow.Context) error { + defer cleanup() + + errorLine, err := grepInitErrorFromLogs() + if err != nil { + return err + } + ctx.Logf("captured errorLine: %s", errorLine) + + return checker(ctx, errorLine) + } +} + +func AssertNoInitializationErrorsForComponent(componentName string) flow.Runnable { + checker := func(ctx flow.Context, errorLine string) error { + componentFailedToInitialize := strings.Contains(errorLine, componentName) + assert.False(ctx.T, componentFailedToInitialize, + "Found component name mentioned in an component initialization error message: %s", errorLine) + + return nil + } + + return CaptureLogsAndCheckInitErrors(checker) +} + +func AssertInitializationFailedWithErrorsForComponent(componentName string, additionalSubStringsToMatch ...string) flow.Runnable { + checker := func(ctx flow.Context, errorLine string) error { + assert.NotEmpty(ctx.T, errorLine, "Expected a component initialization error message but none found") + assert.Contains(ctx.T, errorLine, componentName, + "Expected to find component '%s' mentioned in error message but found none: %s", componentName, errorLine) + + for _, subString := range additionalSubStringsToMatch { + assert.Contains(ctx.T, errorLine, subString, + "Expected to find '%s' mentioned in error message but found none: %s", componentName, errorLine) + } + + return nil + } + + return CaptureLogsAndCheckInitErrors(checker) +} diff --git a/tests/certification/secretstores/hashicorp/vault/components/caFamily/Makefile b/tests/certification/secretstores/hashicorp/vault/components/caFamily/Makefile index 548a7edfc..58e877255 100644 --- a/tests/certification/secretstores/hashicorp/vault/components/caFamily/Makefile +++ b/tests/certification/secretstores/hashicorp/vault/components/caFamily/Makefile @@ -8,26 +8,30 @@ all: $(TARGETS) # "x509: certificate relies on legacy Common Name field" errors certificates/key.pem certificates/cert.pem: + set -e; \ + mkdir -v -p certificates; \ openssl req -x509 -newkey rsa:4096 \ -keyout certificates/key.pem \ -out certificates/cert.pem \ -sha256 -days 3650 \ -nodes \ -addext "subjectAltName = DNS:hashicorp_vault,DNS:localhost,IP:127.0.0.1" \ - -subj "/C=CA/ST=BC/L=Vancouver/O=Dapr Testing/OU=Org/CN=www.dapr.io" + -subj "/C=CA/ST=BC/L=Vancouver/O=Dapr Testing/OU=Org/CN=www.dapr.io"; \ chmod -v 644 certificates/key.pem certificates/cert.pem # We use this for negative tests that ensure we reject connecting to # a server using a distinct Certificate Authority -- despite the server certificate # having all the right identifiers certificates/incorrect-ca-key.pem certificates/incorrect-ca-cert.pem: + set -e; \ + mkdir -v -p certificates; \ openssl req -x509 -newkey rsa:4096 \ -keyout certificates/incorrect-ca-key.pem \ -out certificates/incorrect-ca-cert.pem \ -sha256 -days 3650 \ -nodes \ -addext "subjectAltName = DNS:hashicorp_vault,DNS:localhost,IP:127.0.0.1" \ - -subj "/C=CA/ST=BC/L=Vancouver/O=Dapr Testing/OU=Org/CN=www.dapr.io" + -subj "/C=CA/ST=BC/L=Vancouver/O=Dapr Testing/OU=Org/CN=www.dapr.io" ; \ chmod -v 644 certificates/incorrect-ca-key.pem certificates/incorrect-ca-cert.pem @@ -43,6 +47,7 @@ caPem/hashicorp-vault.yml: caPem/hashicorp-vault.yml.template certificates/cert. clean: rm -f -v $(TARGETS) + rmdir certificates .PHONY: clean .PHONY: all \ No newline at end of file diff --git a/tests/certification/secretstores/hashicorp/vault/components/caFamily/caPem/hashicorp-vault.yml b/tests/certification/secretstores/hashicorp/vault/components/caFamily/caPem/hashicorp-vault.yml deleted file mode 100644 index 9f9884e43..000000000 --- a/tests/certification/secretstores/hashicorp/vault/components/caFamily/caPem/hashicorp-vault.yml +++ /dev/null @@ -1,59 +0,0 @@ -# -# THIS FILE IS AUTO-GENERATED - DO NOT EDIT -# - - -apiVersion: dapr.io/v1alpha1 -kind: Component -metadata: - name: my-hashicorp-vault-TestCaFamilyOfFields-caPem - namespace: default -spec: - type: secretstores.hashicorp.vault - version: v1 - metadata: - - name: vaultAddr - value: "https://127.0.0.1:8200" - # Enforce TLS verification because this test is all about this - - name: skipVerify - value: false - - name: vaultToken # Matches docker compose VAULT_DEV_ROOT_TOKEN_ID env. var. - value: "vault-dev-root-token-id" - - name: tlsServerName - value: hashicorp_vault - - name: caPem - value: |- - -----BEGIN CERTIFICATE----- - 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 - LFXkjVxkrXK8v2vNPR2KvyXleKFk - -----END CERTIFICATE----- diff --git a/tests/certification/secretstores/hashicorp/vault/components/caFamily/certificates/cert.pem b/tests/certification/secretstores/hashicorp/vault/components/caFamily/certificates/cert.pem deleted file mode 100644 index b6d963737..000000000 --- a/tests/certification/secretstores/hashicorp/vault/components/caFamily/certificates/cert.pem +++ /dev/null @@ -1,34 +0,0 @@ ------BEGIN CERTIFICATE----- -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 -LFXkjVxkrXK8v2vNPR2KvyXleKFk ------END CERTIFICATE----- diff --git a/tests/certification/secretstores/hashicorp/vault/components/caFamily/certificates/incorrect-ca-cert.pem b/tests/certification/secretstores/hashicorp/vault/components/caFamily/certificates/incorrect-ca-cert.pem deleted file mode 100644 index 1bdae2e7a..000000000 --- a/tests/certification/secretstores/hashicorp/vault/components/caFamily/certificates/incorrect-ca-cert.pem +++ /dev/null @@ -1,34 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIF4TCCA8mgAwIBAgIUSrQ0syOfHO5v4Jl7gqdachXf1o8wDQYJKoZIhvcNAQEL -BQAwaTELMAkGA1UEBhMCQ0ExCzAJBgNVBAgMAkJDMRIwEAYDVQQHDAlWYW5jb3V2 -ZXIxFTATBgNVBAoMDERhcHIgVGVzdGluZzEMMAoGA1UECwwDT3JnMRQwEgYDVQQD -DAt3d3cuZGFwci5pbzAeFw0yMjExMjUxOTQ0MDJaFw0zMjExMjIxOTQ0MDJaMGkx -CzAJBgNVBAYTAkNBMQswCQYDVQQIDAJCQzESMBAGA1UEBwwJVmFuY291dmVyMRUw -EwYDVQQKDAxEYXByIFRlc3RpbmcxDDAKBgNVBAsMA09yZzEUMBIGA1UEAwwLd3d3 -LmRhcHIuaW8wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDCdxTPbiMc -Gx7l/6cBI8nuvrX0AA+OZNoxNRSa/Y5LNXOdIFbMvBHgK4spQKN2RXVjLB9PZ6Tz -rNxlQNgMlF3dOVGxFVBLhjt1acDPXjeDYeCrq6lj5NnqBUJGE7Weau8KIAh1iDfp -pFT5Sa7spVwdFpVcgS/WUvB7LMIqZJgCvydMw1DMM8iE7KbuHBeGO0dkELDt1b28 -sYAB2LV1pesr4yIVeBcqDmZJhHhKyXeNi0RxYwVR+c5/AIcy4oz3AwGaj00xCSRS -tbUZYT3wtKuFWajLVaFhhWspqnEgDfGaYgRWMBhybLUBJSkTi1y6XfGPbJg5p9cr -rXuLNeqwavJqi3/ow7N6ybCC+gpZFGtotUIVe6G9Gw4puPtpL8dXRt5UGI77lUMA -cjaRTql4RZG9yiWxvkppbJohYzZj39buVVtnfK4h6fVeOsIrotjq6A07PmrC9IZG -tYyShDc0lk0ns08PuaFxUEWDFSNgPXzZh7jVXykBRqWkqsAVUhve8NYBB0GyEIJ3 -fl/Nbb0ODqQXrknvD2af9jRrd0yC3NSg3+3pW9bMLe1qA28GiisGREhIV2I7WIm8 -nDQX/sxE1WOVlL5QQP5mnkZEJJIOQoq5AT+orFquvbCUYhyqf5VVM07+H3A/C6Au -AZ0EBBzBKdF15UvPA68Nqef/OX4jCs584wIDAQABo4GAMH4wHQYDVR0OBBYEFHUA -p2sagqDSpNEfGHXLQTQPCsC6MB8GA1UdIwQYMBaAFHUAp2sagqDSpNEfGHXLQTQP -CsC6MA8GA1UdEwEB/wQFMAMBAf8wKwYDVR0RBCQwIoIPaGFzaGljb3JwX3ZhdWx0 -gglsb2NhbGhvc3SHBH8AAAEwDQYJKoZIhvcNAQELBQADggIBAG/8gN+7C+ROZrDS -fWHYA68jwdQWqe5+5SlZ4sMEbboA7+++csptBi27oQEtCdsTMx/4eC8/Topsz1// -OcHPo+/pQQW5VWo1Ny0Nfq9TJ+CZ9NuEoizSnLvVWhEBclA7bhkGvp3cqXTa6XqH -EDSur0ltQRhs0F+zFRPuPqEIJziLv54BEnt1iM2ydv3yVi0dF9Xz8BE92pB93ONd -PnnvCjFhvZn9X2oogBgf0HaMTQDj02mm25q86NVZ5qSEBuc+NI/8l7s5ruo+HXcY -q2WqAgwnQfmYUrNqHNmB0zj0+NygZytWmPYb1GVSi+3PcgVKW08EsQ7i8MI00CCY -/J2Pb/wHcu1VSRjX3ijhcp4MDfHQmFAnRyaey/ocHdUrBiTtWzNszD5DQhMPOKGx -ksItrRDExgDkVZspqli72oFnZyF3V4NEAo/ZDk2k5o91huyc7d/sQ4mc2ghJfNCT -aMWsHbYF7oUkwvun4K8duePB0M1JZS4qXG0kmQrEfUSocS3U8AWItvVQ9H0DCbpT -pcQFBqCuaj3ehuzsExbKLKI6+VrqTXZi8ZPozyxbkWuXnXSPFdG5wn5eQrFQxGnt -jFjrzTFeo9kzp3a7fYVveR70xYF3hdtHbPRhxt18k8BZB1vLrb08v9df0LAFfcd2 -vljYnSZYxz/14hzgCxFSQq6D92/E ------END CERTIFICATE----- diff --git a/tests/certification/secretstores/hashicorp/vault/components/caFamily/certificates/incorrect-ca-key.pem b/tests/certification/secretstores/hashicorp/vault/components/caFamily/certificates/incorrect-ca-key.pem deleted file mode 100644 index 0d0003c60..000000000 --- a/tests/certification/secretstores/hashicorp/vault/components/caFamily/certificates/incorrect-ca-key.pem +++ /dev/null @@ -1,52 +0,0 @@ ------BEGIN PRIVATE KEY----- -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 -WG6Z5JfRpAOCbhDnmIuc1NxwhVyG8c3q ------END PRIVATE KEY----- diff --git a/tests/certification/secretstores/hashicorp/vault/components/caFamily/certificates/key.pem b/tests/certification/secretstores/hashicorp/vault/components/caFamily/certificates/key.pem deleted file mode 100644 index 239be4c7c..000000000 --- a/tests/certification/secretstores/hashicorp/vault/components/caFamily/certificates/key.pem +++ /dev/null @@ -1,52 +0,0 @@ ------BEGIN PRIVATE KEY----- -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 -JpgsDDiLHGcoVG2ei6PE1GFlSixtFvI= ------END PRIVATE KEY----- diff --git a/tests/certification/secretstores/hashicorp/vault/components/caFamily/vaultConfig/vault_server.hcl b/tests/certification/secretstores/hashicorp/vault/components/caFamily/vaultConfig/vault_server.hcl index 4326d60bb..8d18bad85 100644 --- a/tests/certification/secretstores/hashicorp/vault/components/caFamily/vaultConfig/vault_server.hcl +++ b/tests/certification/secretstores/hashicorp/vault/components/caFamily/vaultConfig/vault_server.hcl @@ -3,13 +3,4 @@ listener "tcp" { tls_disable = "false" tls_cert_file = "/certificates/cert.pem" tls_key_file = "/certificates/key.pem" -} - -api_addr = "https://127.0.0.1:8201" - -#backend "file" { -# path = "/vault/file" -#} - -#default_lease_ttl = "168h" -#max_lease_ttl = "720h" +} \ No newline at end of file diff --git a/tests/certification/secretstores/hashicorp/vault/flow_helpers.go b/tests/certification/secretstores/hashicorp/vault/flow_helpers.go new file mode 100644 index 000000000..62034e384 --- /dev/null +++ b/tests/certification/secretstores/hashicorp/vault/flow_helpers.go @@ -0,0 +1,157 @@ +/* +Copyright 2021 The Dapr Authors +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package vault_test + +import ( + "path/filepath" + "testing" + "time" + + "github.com/dapr/components-contrib/secretstores/hashicorp/vault" + "github.com/dapr/components-contrib/tests/certification/embedded" + "github.com/dapr/components-contrib/tests/certification/flow" + "github.com/dapr/components-contrib/tests/certification/flow/dockercompose" + "github.com/dapr/components-contrib/tests/certification/flow/sidecar" + secretstores_loader "github.com/dapr/dapr/pkg/components/secretstores" + "github.com/dapr/dapr/pkg/runtime" + dapr_testing "github.com/dapr/dapr/pkg/testing" + "github.com/dapr/kit/logger" + "github.com/stretchr/testify/assert" +) + +// +// Flow and test setup helpers +// + +func componentRuntimeOptions() []runtime.Option { + log := logger.NewLogger("dapr.components") + + secretStoreRegistry := secretstores_loader.NewRegistry() + secretStoreRegistry.Logger = log + secretStoreRegistry.RegisterComponent(vault.NewHashiCorpVaultSecretStore, "hashicorp.vault") + + return []runtime.Option{ + runtime.WithSecretStores(secretStoreRegistry), + } +} + +func GetCurrentGRPCAndHTTPPort(t *testing.T) (int, int) { + ports, err := dapr_testing.GetFreePorts(2) + assert.NoError(t, err) + + currentGrpcPort := ports[0] + currentHttpPort := ports[1] + + return currentGrpcPort, currentHttpPort +} + +// +// Helper functions for common tests for happy case, init-but-does-not-work and fails-initialization tests +// These test re-use the same seed secrets. They aim to check how certain flags break or keep vault working +// instead of verifying some specific tha change key retrieval behavior. +// +// Those tests require a `/` structure. + +type commonFlowSettings struct { + t *testing.T + currentGrpcPort int + currentHttpPort int + secretStoreComponentPathBase string + componentNamePrefix string +} + +func NewFlowSettings(t *testing.T) *commonFlowSettings { + res := commonFlowSettings{} + res.t = t + res.currentGrpcPort, res.currentHttpPort = GetCurrentGRPCAndHTTPPort(t) + return &res +} + +func createPositiveTestFlow(fs *commonFlowSettings, flowDescription string, componentSuffix string, useCustomDockerCompose bool) { + componentPath := filepath.Join(fs.secretStoreComponentPathBase, componentSuffix) + componentName := fs.componentNamePrefix + componentSuffix + + dockerComposeClusterYAML := defaultDockerComposeClusterYAML + if useCustomDockerCompose { + dockerComposeClusterYAML = filepath.Join(componentPath, "docker-compose-hashicorp-vault.yml") + } + + flow.New(fs.t, flowDescription). + Step(dockercompose.Run(dockerComposeProjectName, dockerComposeClusterYAML)). + Step("Waiting for component to start...", flow.Sleep(5*time.Second)). + Step(sidecar.Run(sidecarName, + embedded.WithoutApp(), + embedded.WithComponentsPath(componentPath), + embedded.WithDaprGRPCPort(fs.currentGrpcPort), + embedded.WithDaprHTTPPort(fs.currentHttpPort), + componentRuntimeOptions(), + )). + Step("Waiting for component to load...", flow.Sleep(5*time.Second)). + Step("Verify component is registered", testComponentFound(componentName, fs.currentGrpcPort)). + Step("Verify no errors regarding component initialization", AssertNoInitializationErrorsForComponent(componentPath)). + Step("Test that the default secret is found", testDefaultSecretIsFound(fs.currentGrpcPort, componentName)). + Step("Stop HashiCorp Vault server", dockercompose.Stop(dockerComposeProjectName, dockerComposeClusterYAML)). + Run() +} + +func createInitSucceedsButComponentFailsFlow(fs *commonFlowSettings, flowDescription string, componentSuffix string, useCustomDockerCompose bool, initErrorCodes ...string) { + componentPath := filepath.Join(fs.secretStoreComponentPathBase, componentSuffix) + componentName := fs.componentNamePrefix + componentSuffix + + dockerComposeClusterYAML := defaultDockerComposeClusterYAML + if useCustomDockerCompose { + dockerComposeClusterYAML = filepath.Join(componentPath, "docker-compose-hashicorp-vault.yml") + } + + flow.New(fs.t, flowDescription). + Step(dockercompose.Run(dockerComposeProjectName, dockerComposeClusterYAML)). + Step("Waiting for component to start...", flow.Sleep(5*time.Second)). + Step(sidecar.Run(sidecarName, + embedded.WithoutApp(), + embedded.WithComponentsPath(componentPath), + embedded.WithDaprGRPCPort(fs.currentGrpcPort), + embedded.WithDaprHTTPPort(fs.currentHttpPort), + componentRuntimeOptions(), + )). + Step("Waiting for component to load...", flow.Sleep(5*time.Second)). + Step("Verify component is registered", testComponentFound(componentName, fs.currentGrpcPort)). + Step("Verify no errors regarding component initialization", AssertNoInitializationErrorsForComponent(componentPath)). + Step("Verify component does not work", testComponentIsNotWorking(componentName, fs.currentGrpcPort)). + Step("Stop HashiCorp Vault server", dockercompose.Stop(dockerComposeProjectName, dockerComposeClusterYAML)). + Run() +} + +func createNegativeTestFlow(fs *commonFlowSettings, flowDescription string, componentSuffix string, initErrorCodes ...string) { + componentPath := filepath.Join(fs.secretStoreComponentPathBase, componentSuffix) + componentName := fs.componentNamePrefix + componentSuffix + dockerComposeClusterYAML := defaultDockerComposeClusterYAML + + flow.New(fs.t, flowDescription). + Step(dockercompose.Run(dockerComposeProjectName, dockerComposeClusterYAML)). + Step("Waiting for component to start...", flow.Sleep(5*time.Second)). + Step(sidecar.Run(sidecarName, + embedded.WithoutApp(), + embedded.WithComponentsPath(componentPath), + embedded.WithDaprGRPCPort(fs.currentGrpcPort), + embedded.WithDaprHTTPPort(fs.currentHttpPort), + componentRuntimeOptions(), + )). + Step("Waiting for component to load...", flow.Sleep(5*time.Second)). + // TODO(tmacam) FIX https://github.com/dapr/dapr/issues/5487 + Step("Verify component is NOT registered", testComponentNotFound(componentName, fs.currentGrpcPort)). + Step("Verify initialization error reported for component", AssertInitializationFailedWithErrorsForComponent(componentName, initErrorCodes...)). + Step(" Bug dependant behavior - test component is actually registered", testComponentFound(componentName, fs.currentGrpcPort)). + Step("Stop HashiCorp Vault server", dockercompose.Stop(dockerComposeProjectName, dockerComposeClusterYAML)). + Run() +} diff --git a/tests/certification/secretstores/hashicorp/vault/metadata_helpers.go b/tests/certification/secretstores/hashicorp/vault/metadata_helpers.go new file mode 100644 index 000000000..29b3b4160 --- /dev/null +++ b/tests/certification/secretstores/hashicorp/vault/metadata_helpers.go @@ -0,0 +1,105 @@ +/* +Copyright 2021 The Dapr Authors +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package vault_test + +import ( + "context" + "fmt" + + "github.com/dapr/components-contrib/secretstores" + "github.com/dapr/components-contrib/tests/certification/flow" + "github.com/dapr/go-sdk/client" + "github.com/golang/protobuf/ptypes/empty" + "github.com/stretchr/testify/assert" +) + +// +// Helper methods for checking component registration and availability of its features +// + +func testComponentFound(targetComponentName string, currentGrpcPort int) flow.Runnable { + return func(ctx flow.Context) error { + componentFound, _ := getComponentCapabilities(ctx, currentGrpcPort, targetComponentName) + assert.True(ctx.T, componentFound, "Component was expected to be found but it was missing.") + return nil + } +} + +// Due to https://github.com/dapr/dapr/issues/5487 we cannot perform negative tests +// for the component presence against the metadata registry. +// Instead, we turned testComponentNotFound into a simpler negative test that ensures a good key cannot be found +func testComponentNotFound(targetComponentName string, currentGrpcPort int) flow.Runnable { + // TODO(tmacam) once https://github.com/dapr/dapr/issues/5487 is fixed, uncomment the code bellow + return testSecretIsNotFound(currentGrpcPort, targetComponentName, "multiplekeyvaluessecret") + + //return func(ctx flow.Context) error { + // // Find the component + // componentFound, _ := getComponentCapabilities(ctx, currentGrpcPort, targetComponentName) + // assert.False(ctx.T, componentFound, "Component was expected to be missing but it was found.") + // return nil + //} +} + +func testComponentDoesNotHaveFeature(currentGrpcPort int, targetComponentName string, targetCapability secretstores.Feature) flow.Runnable { + return testComponentAndFeaturePresence(currentGrpcPort, targetComponentName, targetCapability, false) +} + +func testComponentHasFeature(currentGrpcPort int, targetComponentName string, targetCapability secretstores.Feature) flow.Runnable { + return testComponentAndFeaturePresence(currentGrpcPort, targetComponentName, targetCapability, true) +} + +func testComponentAndFeaturePresence(currentGrpcPort int, targetComponentName string, targetCapability secretstores.Feature, expectedToBeFound bool) flow.Runnable { + return func(ctx flow.Context) error { + componentFound, capabilities := getComponentCapabilities(ctx, currentGrpcPort, targetComponentName) + + assert.True(ctx.T, componentFound, "Component was expected to be found but it was missing.") + + targetCapabilityAsString := string(targetCapability) + // Find capability + capabilityFound := false + for _, cap := range capabilities { + if cap == targetCapabilityAsString { + capabilityFound = true + break + } + } + assert.Equal(ctx.T, expectedToBeFound, capabilityFound) + + return nil + } +} + +func getComponentCapabilities(ctx flow.Context, currentGrpcPort int, targetComponentName string) (found bool, capabilities []string) { + daprClient, err := client.NewClientWithPort(fmt.Sprint(currentGrpcPort)) + if err != nil { + panic(err) + } + defer daprClient.Close() + + clientCtx := context.Background() + + resp, err := daprClient.GrpcClient().GetMetadata(clientCtx, &empty.Empty{}) + assert.NoError(ctx.T, err) + assert.NotNil(ctx.T, resp) + assert.NotNil(ctx.T, resp.GetRegisteredComponents()) + + // Find the component + for _, component := range resp.GetRegisteredComponents() { + if component.GetName() == targetComponentName { + ctx.Logf("component found=%s", component) + return true, component.GetCapabilities() + } + } + return false, []string{} +} diff --git a/tests/certification/secretstores/hashicorp/vault/secret_helpers.go b/tests/certification/secretstores/hashicorp/vault/secret_helpers.go new file mode 100644 index 000000000..61e6bf027 --- /dev/null +++ b/tests/certification/secretstores/hashicorp/vault/secret_helpers.go @@ -0,0 +1,106 @@ +/* +Copyright 2021 The Dapr Authors +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package vault_test + +import ( + "fmt" + "github.com/dapr/components-contrib/tests/certification/flow" + "github.com/dapr/go-sdk/client" + "github.com/stretchr/testify/assert" +) + +// +// Aux. functions for testing key presence +// + +func testKeyValuesInSecret(currentGrpcPort int, secretStoreName string, secretName string, keyValueMap map[string]string, maybeVersionID ...string) flow.Runnable { + return func(ctx flow.Context) error { + daprClient, err := client.NewClientWithPort(fmt.Sprint(currentGrpcPort)) + if err != nil { + panic(err) + } + defer daprClient.Close() + + metadata := map[string]string{} + if len(maybeVersionID) > 0 { + metadata["version_id"] = maybeVersionID[0] + } + + res, err := daprClient.GetSecret(ctx, secretStoreName, secretName, metadata) + assert.NoError(ctx.T, err) + assert.NotNil(ctx.T, res) + + for key, valueExpected := range keyValueMap { + valueInSecret, exists := res[key] + assert.True(ctx.T, exists, "expected key not found in key") + assert.Equal(ctx.T, valueExpected, valueInSecret) + } + return nil + } +} + +func testSecretIsNotFound(currentGrpcPort int, secretStoreName string, secretName string) flow.Runnable { + return func(ctx flow.Context) error { + daprClient, err := client.NewClientWithPort(fmt.Sprint(currentGrpcPort)) + if err != nil { + panic(err) + } + defer daprClient.Close() + + emptyOpt := map[string]string{} + + _, err = daprClient.GetSecret(ctx, secretStoreName, secretName, emptyOpt) + assert.Error(ctx.T, err) + + return nil + } +} + +func testDefaultSecretIsFound(currentGrpcPort int, secretStoreName string) flow.Runnable { + return testKeyValuesInSecret(currentGrpcPort, secretStoreName, "multiplekeyvaluessecret", map[string]string{ + "first": "1", + "second": "2", + "third": "3", + }) +} + +func testComponentIsNotWorking(targetComponentName string, currentGrpcPort int) flow.Runnable { + return testSecretIsNotFound(currentGrpcPort, targetComponentName, "multiplekeyvaluessecret") +} + +func testGetBulkSecretsWorksAndFoundKeys(currentGrpcPort int, secretStoreName string) flow.Runnable { + return func(ctx flow.Context) error { + client, err := client.NewClientWithPort(fmt.Sprint(currentGrpcPort)) + if err != nil { + panic(err) + } + defer client.Close() + + emptyOpt := map[string]string{} + + res, err := client.GetBulkSecret(ctx, secretStoreName, emptyOpt) + assert.NoError(ctx.T, err) + assert.NotNil(ctx.T, res) + assert.NotEmpty(ctx.T, res) + + for k, v := range res { + ctx.Logf("💡 %s", k) + for i, j := range v { + ctx.Logf("💡\t %s : %s", i, j) + } + } + + return nil + } +} diff --git a/tests/certification/secretstores/hashicorp/vault/vault_test.go b/tests/certification/secretstores/hashicorp/vault/vault_test.go index 338e32d7b..467e8a8a2 100644 --- a/tests/certification/secretstores/hashicorp/vault/vault_test.go +++ b/tests/certification/secretstores/hashicorp/vault/vault_test.go @@ -14,32 +14,18 @@ limitations under the License. package vault_test import ( - "bufio" - "bytes" "context" - "fmt" - "io" - "os" + "os/exec" "path/filepath" - "strings" "testing" "time" "github.com/dapr/components-contrib/secretstores" - "github.com/dapr/components-contrib/secretstores/hashicorp/vault" "github.com/dapr/components-contrib/tests/certification/embedded" "github.com/dapr/components-contrib/tests/certification/flow" "github.com/dapr/components-contrib/tests/certification/flow/dockercompose" "github.com/dapr/components-contrib/tests/certification/flow/network" "github.com/dapr/components-contrib/tests/certification/flow/sidecar" - secretstores_loader "github.com/dapr/dapr/pkg/components/secretstores" - "github.com/dapr/dapr/pkg/runtime" - dapr_testing "github.com/dapr/dapr/pkg/testing" - "github.com/dapr/go-sdk/client" - "github.com/dapr/kit/logger" - "github.com/stretchr/testify/assert" - - "github.com/golang/protobuf/ptypes/empty" ) const ( @@ -83,7 +69,7 @@ func TestBasicSecretRetrieval(t *testing.T) { )). Step("Waiting for component to load...", flow.Sleep(5*time.Second)). Step("Verify component is registered", testComponentFound(secretStoreName, currentGrpcPort)). - Step("Verify no errors regarding component initialization", assertNoInitializationErrorsForComponent(secretStoreComponentPath)). + Step("Verify no errors regarding component initialization", AssertNoInitializationErrorsForComponent(secretStoreComponentPath)). Step("Run basic secret retrieval test", testGetKnownSecret). Step("Test retrieval of secret that does not exist", testGetMissingSecret). Step("Interrupt network for 1 minute", @@ -114,7 +100,7 @@ func TestMultipleKVRetrieval(t *testing.T) { )). Step("Waiting for component to load...", flow.Sleep(5*time.Second)). Step("Verify component is registered", testComponentFound(secretStoreName, currentGrpcPort)). - Step("Verify no errors regarding component initialization", assertNoInitializationErrorsForComponent(secretStoreComponentPath)). + Step("Verify no errors regarding component initialization", AssertNoInitializationErrorsForComponent(secretStoreComponentPath)). Step("Verify component has support for multiple key-values under the same secret", testComponentHasFeature(currentGrpcPort, secretStoreName, secretstores.FeatureMultipleKeyValuesPerSecret)). Step("Test retrieval of a secret with multiple key-values", @@ -150,7 +136,7 @@ func TestVaultKVPrefix(t *testing.T) { )). Step("Waiting for component to load...", flow.Sleep(5*time.Second)). Step("Verify component is registered", testComponentFound(secretStoreName, currentGrpcPort)). - Step("Verify no errors regarding component initialization", assertNoInitializationErrorsForComponent(secretStoreComponentPath)). + Step("Verify no errors regarding component initialization", AssertNoInitializationErrorsForComponent(secretStoreComponentPath)). Step("Verify component has support for multiple key-values under the same secret", testComponentHasFeature(currentGrpcPort, secretStoreName, secretstores.FeatureMultipleKeyValuesPerSecret)). Step("Test retrieval of a secret under a non-default vaultKVPrefix", @@ -182,7 +168,7 @@ func TestVaultKVUsePrefixFalse(t *testing.T) { )). Step("Waiting for component to load...", flow.Sleep(5*time.Second)). Step("Verify component is registered", testComponentFound(secretStoreName, currentGrpcPort)). - Step("Verify no errors regarding component initialization", assertNoInitializationErrorsForComponent(secretStoreComponentPath)). + Step("Verify no errors regarding component initialization", AssertNoInitializationErrorsForComponent(secretStoreComponentPath)). Step("Verify component has support for multiple key-values under the same secret", testComponentHasFeature(currentGrpcPort, secretStoreName, secretstores.FeatureMultipleKeyValuesPerSecret)). Step("Test retrieval of a secret registered with no prefix and assuming vaultKVUsePrefix=false", @@ -217,7 +203,7 @@ func TestVaultValueTypeText(t *testing.T) { )). Step("Waiting for component to load...", flow.Sleep(5*time.Second)). Step("Verify component is registered", testComponentFound(secretStoreName, currentGrpcPort)). - Step("Verify no errors regarding component initialization", assertNoInitializationErrorsForComponent(secretStoreComponentPath)). + Step("Verify no errors regarding component initialization", AssertNoInitializationErrorsForComponent(secretStoreComponentPath)). Step("Verify component DOES NOT support multiple key-values under the same secret", testComponentDoesNotHaveFeature(currentGrpcPort, secretStoreName, secretstores.FeatureMultipleKeyValuesPerSecret)). Step("Test secret store presents name/value semantics for secrets", @@ -314,8 +300,8 @@ func TestEnginePathCustomSecretsPath(t *testing.T) { componentRuntimeOptions(), )). Step("Waiting for component to load...", flow.Sleep(5*time.Second)). - Step("✅Verify component is registered", testComponentFound(componentName, currentGrpcPort)). - Step("Verify no errors regarding component initialization", assertNoInitializationErrorsForComponent(componentPath)). + Step("Verify component is registered", testComponentFound(componentName, currentGrpcPort)). + Step("Verify no errors regarding component initialization", AssertNoInitializationErrorsForComponent(componentPath)). Step("Verify that the custom path has secrets under it", testGetBulkSecretsWorksAndFoundKeys(currentGrpcPort, componentName)). Step("Verify that the custom path-specific secret is found", testKeyValuesInSecret(currentGrpcPort, componentName, "secretUnderCustomPath", map[string]string{ @@ -342,6 +328,19 @@ func TestCaFamilyOfFields(t *testing.T) { fs.secretStoreComponentPathBase = "./components/caFamily/" fs.componentNamePrefix = "my-hashicorp-vault-TestCaFamilyOfFields-" + // Generate certificates and caPem/hashicorp-vault.yml + ctx, cancel := context.WithTimeout(context.Background(), 1*time.Minute) + defer cancel() + makeCmd := exec.CommandContext(ctx, "make", + // Change to components/caFamily directory so files are generated relative to that directory + "-C", fs.secretStoreComponentPathBase, + ) + + if out, err := makeCmd.CombinedOutput(); err != nil { + t.Logf("Make exited with error %s", out) + t.Fatal(err) + } + createPositiveTestFlow(fs, "Verify success when using a caCert to talk to vault with tlsServerName and enforceVerify", "caCert", true) @@ -388,8 +387,8 @@ func TestVersioning(t *testing.T) { componentRuntimeOptions(), )). Step("Waiting for component to load...", flow.Sleep(5*time.Second)). - Step("✅Verify component is registered", testComponentFound(componentName, currentGrpcPort)). - Step("Verify no errors regarding component initialization", assertNoInitializationErrorsForComponent(componentPath)). + Step("Verify component is registered", testComponentFound(componentName, currentGrpcPort)). + Step("Verify no errors regarding component initialization", AssertNoInitializationErrorsForComponent(componentPath)). Step("Verify that we can list secrets", testGetBulkSecretsWorksAndFoundKeys(currentGrpcPort, componentName)). Step("Verify that the latest version of the secret is there", testKeyValuesInSecret(currentGrpcPort, componentName, "secretUnderTest", map[string]string{ @@ -402,377 +401,3 @@ func TestVersioning(t *testing.T) { Step("Stop HashiCorp Vault server", dockercompose.Stop(dockerComposeProjectName, dockerComposeClusterYAML)). Run() } - -// -// Aux. functions for testing key presence -// - -func testKeyValuesInSecret(currentGrpcPort int, secretStoreName string, secretName string, keyValueMap map[string]string, maybeVersionID ...string) flow.Runnable { - return func(ctx flow.Context) error { - daprClient, err := client.NewClientWithPort(fmt.Sprint(currentGrpcPort)) - if err != nil { - panic(err) - } - defer daprClient.Close() - - metadata := map[string]string{} - if len(maybeVersionID) > 0 { - metadata["version_id"] = maybeVersionID[0] - } - - res, err := daprClient.GetSecret(ctx, secretStoreName, secretName, metadata) - assert.NoError(ctx.T, err) - assert.NotNil(ctx.T, res) - - for key, valueExpected := range keyValueMap { - valueInSecret, exists := res[key] - assert.True(ctx.T, exists, "expected key not found in key") - assert.Equal(ctx.T, valueExpected, valueInSecret) - } - return nil - } -} - -func testSecretIsNotFound(currentGrpcPort int, secretStoreName string, secretName string) flow.Runnable { - return func(ctx flow.Context) error { - daprClient, err := client.NewClientWithPort(fmt.Sprint(currentGrpcPort)) - if err != nil { - panic(err) - } - defer daprClient.Close() - - emptyOpt := map[string]string{} - - _, err = daprClient.GetSecret(ctx, secretStoreName, secretName, emptyOpt) - assert.Error(ctx.T, err) - - return nil - } -} - -func testDefaultSecretIsFound(currentGrpcPort int, secretStoreName string) flow.Runnable { - return testKeyValuesInSecret(currentGrpcPort, secretStoreName, "multiplekeyvaluessecret", map[string]string{ - "first": "1", - "second": "2", - "third": "3", - }) -} - -func testComponentIsNotWorking(targetComponentName string, currentGrpcPort int) flow.Runnable { - return testSecretIsNotFound(currentGrpcPort, targetComponentName, "multiplekeyvaluessecret") -} - -func testGetBulkSecretsWorksAndFoundKeys(currentGrpcPort int, secretStoreName string) flow.Runnable { - return func(ctx flow.Context) error { - client, err := client.NewClientWithPort(fmt.Sprint(currentGrpcPort)) - if err != nil { - panic(err) - } - defer client.Close() - - emptyOpt := map[string]string{} - - res, err := client.GetBulkSecret(ctx, secretStoreName, emptyOpt) - assert.NoError(ctx.T, err) - assert.NotNil(ctx.T, res) - assert.NotEmpty(ctx.T, res) - - for k, v := range res { - ctx.Logf("💡 %s", k) - for i, j := range v { - ctx.Logf("💡\t %s : %s", i, j) - } - } - - return nil - } -} - -// -// Helper methods for checking component registration and availability of its features -// - -func testComponentFound(targetComponentName string, currentGrpcPort int) flow.Runnable { - return func(ctx flow.Context) error { - componentFound, _ := getComponentCapabilities(ctx, currentGrpcPort, targetComponentName) - assert.True(ctx.T, componentFound, "Component was expected to be found but it was missing.") - return nil - } -} - -// Due to https://github.com/dapr/dapr/issues/5487 we cannot perform negative tests -// for the component presence against the metadata registry. -// Instead, we turned testComponentNotFound into a simpler negative test that ensures a good key cannot be found -func testComponentNotFound(targetComponentName string, currentGrpcPort int) flow.Runnable { - // TODO(tmacam) once https://github.com/dapr/dapr/issues/5487 is fixed, uncomment the code bellow - return testSecretIsNotFound(currentGrpcPort, targetComponentName, "multiplekeyvaluessecret") - - //return func(ctx flow.Context) error { - // // Find the component - // componentFound, _ := getComponentCapabilities(ctx, currentGrpcPort, targetComponentName) - // assert.False(ctx.T, componentFound, "Component was expected to be missing but it was found.") - // return nil - //} -} - -func testComponentDoesNotHaveFeature(currentGrpcPort int, targetComponentName string, targetCapability secretstores.Feature) flow.Runnable { - return testComponentAndFeaturePresence(currentGrpcPort, targetComponentName, targetCapability, false) -} - -func testComponentHasFeature(currentGrpcPort int, targetComponentName string, targetCapability secretstores.Feature) flow.Runnable { - return testComponentAndFeaturePresence(currentGrpcPort, targetComponentName, targetCapability, true) -} - -func testComponentAndFeaturePresence(currentGrpcPort int, targetComponentName string, targetCapability secretstores.Feature, expectedToBeFound bool) flow.Runnable { - return func(ctx flow.Context) error { - componentFound, capabilities := getComponentCapabilities(ctx, currentGrpcPort, targetComponentName) - - assert.True(ctx.T, componentFound, "Component was expected to be found but it was missing.") - - targetCapabilityAsString := string(targetCapability) - // Find capability - capabilityFound := false - for _, cap := range capabilities { - if cap == targetCapabilityAsString { - capabilityFound = true - break - } - } - assert.Equal(ctx.T, expectedToBeFound, capabilityFound) - - return nil - } -} - -func getComponentCapabilities(ctx flow.Context, currentGrpcPort int, targetComponentName string) (found bool, capabilities []string) { - daprClient, err := client.NewClientWithPort(fmt.Sprint(currentGrpcPort)) - if err != nil { - panic(err) - } - defer daprClient.Close() - - clientCtx := context.Background() - - resp, err := daprClient.GrpcClient().GetMetadata(clientCtx, &empty.Empty{}) - assert.NoError(ctx.T, err) - assert.NotNil(ctx.T, resp) - assert.NotNil(ctx.T, resp.GetRegisteredComponents()) - - // Find the component - for _, component := range resp.GetRegisteredComponents() { - if component.GetName() == targetComponentName { - ctx.Logf("🩺 component found=%s", component) - return true, component.GetCapabilities() - } - } - return false, []string{} -} - -// -// Flow and test setup helpers -// - -func componentRuntimeOptions() []runtime.Option { - log := logger.NewLogger("dapr.components") - - secretStoreRegistry := secretstores_loader.NewRegistry() - secretStoreRegistry.Logger = log - secretStoreRegistry.RegisterComponent(vault.NewHashiCorpVaultSecretStore, "hashicorp.vault") - - return []runtime.Option{ - runtime.WithSecretStores(secretStoreRegistry), - } -} - -func GetCurrentGRPCAndHTTPPort(t *testing.T) (int, int) { - ports, err := dapr_testing.GetFreePorts(2) - assert.NoError(t, err) - - currentGrpcPort := ports[0] - currentHttpPort := ports[1] - - return currentGrpcPort, currentHttpPort -} - -// -// Helper functions for asserting error messages during component initialization -// -// These can be exported to their own module. -// Do notice that they have side effects: using more than one in a single -// flow will cause only the latest to work. Perhaps this functionality -// (dapr.runtime log capture) could be baked into flows themselves? -// -// Also: this is not thread-safe nor concurrent safe: only one test -// can be run at a time to ensure deterministic capture of dapr.runtime output. - -type initErrorChecker func(ctx flow.Context, errorLine string) error - -func captureLogsAndCheckInitErrors(checker initErrorChecker) flow.Runnable { - // Setup log capture - logCaptor := &bytes.Buffer{} - runtimeLogger := logger.NewLogger("dapr.runtime") - runtimeLogger.SetOutput(io.MultiWriter(os.Stdout, logCaptor)) - - // Stop log capture, reset buffer just for good mesure - cleanup := func() { - logCaptor.Reset() - runtimeLogger.SetOutput(os.Stdout) - } - - grepInitErrorFromLogs := func() (string, error) { - errorMarker := []byte("INIT_COMPONENT_FAILURE") - scanner := bufio.NewScanner(logCaptor) - for scanner.Scan() { - if err := scanner.Err(); err != nil { - return "", err - } - if bytes.Contains(scanner.Bytes(), errorMarker) { - return scanner.Text(), nil - } - } - return "", scanner.Err() - } - - // Wraps the our initErrorChecker with cleanup and error-grepping logic so we only care about the - // log error - return func(ctx flow.Context) error { - defer cleanup() - - errorLine, err := grepInitErrorFromLogs() - if err != nil { - return err - } - ctx.Logf("👀 errorLine: %s", errorLine) - - return checker(ctx, errorLine) - } -} - -func assertNoInitializationErrorsForComponent(componentName string) flow.Runnable { - checker := func(ctx flow.Context, errorLine string) error { - componentFailedToInitialize := strings.Contains(errorLine, componentName) - assert.False(ctx.T, componentFailedToInitialize, - "Found component name mentioned in an component initialization error message: %s", errorLine) - - return nil - } - - return captureLogsAndCheckInitErrors(checker) -} - -func assertInitializationFailedWithErrorsForComponent(componentName string, additionalSubStringsToMatch ...string) flow.Runnable { - checker := func(ctx flow.Context, errorLine string) error { - assert.NotEmpty(ctx.T, errorLine, "Expected a component initialization error message but none found") - assert.Contains(ctx.T, errorLine, componentName, - "Expected to find component '%s' mentioned in error message but found none: %s", componentName, errorLine) - - for _, subString := range additionalSubStringsToMatch { - assert.Contains(ctx.T, errorLine, subString, - "Expected to find '%s' mentioned in error message but found none: %s", componentName, errorLine) - } - - return nil - } - - return captureLogsAndCheckInitErrors(checker) -} - -// -// Helper functions for common tests for happy case, init-but-does-not-work and fails-initialization tests -// These test re-use the same seed secrets. They aim to check how certain flags break or keep vault working -// instead of verifying some specific tha change key retrieval behavior. -// -// Those tests require a `/` structure. - -type commonFlowSettings struct { - t *testing.T - currentGrpcPort int - currentHttpPort int - secretStoreComponentPathBase string - componentNamePrefix string -} - -func NewFlowSettings(t *testing.T) *commonFlowSettings { - res := commonFlowSettings{} - res.t = t - res.currentGrpcPort, res.currentHttpPort = GetCurrentGRPCAndHTTPPort(t) - return &res -} - -func createPositiveTestFlow(fs *commonFlowSettings, flowDescription string, componentSuffix string, useCustomDockerCompose bool) { - componentPath := filepath.Join(fs.secretStoreComponentPathBase, componentSuffix) - componentName := fs.componentNamePrefix + componentSuffix - - dockerComposeClusterYAML := defaultDockerComposeClusterYAML - if useCustomDockerCompose { - dockerComposeClusterYAML = filepath.Join(componentPath, "docker-compose-hashicorp-vault.yml") - } - - flow.New(fs.t, flowDescription). - Step(dockercompose.Run(dockerComposeProjectName, dockerComposeClusterYAML)). - Step("Waiting for component to start...", flow.Sleep(5*time.Second)). - Step(sidecar.Run(sidecarName, - embedded.WithoutApp(), - embedded.WithComponentsPath(componentPath), - embedded.WithDaprGRPCPort(fs.currentGrpcPort), - embedded.WithDaprHTTPPort(fs.currentHttpPort), - componentRuntimeOptions(), - )). - Step("Waiting for component to load...", flow.Sleep(5*time.Second)). - Step("Verify component is registered", testComponentFound(componentName, fs.currentGrpcPort)). - Step("Verify no errors regarding component initialization", assertNoInitializationErrorsForComponent(componentPath)). - Step("Test that the default secret is found", testDefaultSecretIsFound(fs.currentGrpcPort, componentName)). - Step("Stop HashiCorp Vault server", dockercompose.Stop(dockerComposeProjectName, dockerComposeClusterYAML)). - Run() -} - -func createInitSucceedsButComponentFailsFlow(fs *commonFlowSettings, flowDescription string, componentSuffix string, useCustomDockerCompose bool, initErrorCodes ...string) { - componentPath := filepath.Join(fs.secretStoreComponentPathBase, componentSuffix) - componentName := fs.componentNamePrefix + componentSuffix - - dockerComposeClusterYAML := defaultDockerComposeClusterYAML - if useCustomDockerCompose { - dockerComposeClusterYAML = filepath.Join(componentPath, "docker-compose-hashicorp-vault.yml") - } - - flow.New(fs.t, flowDescription). - Step(dockercompose.Run(dockerComposeProjectName, dockerComposeClusterYAML)). - Step("Waiting for component to start...", flow.Sleep(5*time.Second)). - Step(sidecar.Run(sidecarName, - embedded.WithoutApp(), - embedded.WithComponentsPath(componentPath), - embedded.WithDaprGRPCPort(fs.currentGrpcPort), - embedded.WithDaprHTTPPort(fs.currentHttpPort), - componentRuntimeOptions(), - )). - Step("Waiting for component to load...", flow.Sleep(5*time.Second)). - Step("✅Verify component is registered", testComponentFound(componentName, fs.currentGrpcPort)). - Step("Verify no errors regarding component initialization", assertNoInitializationErrorsForComponent(componentPath)). - Step("🛑Verify component does not work", testComponentIsNotWorking(componentName, fs.currentGrpcPort)). - Step("Stop HashiCorp Vault server", dockercompose.Stop(dockerComposeProjectName, dockerComposeClusterYAML)). - Run() -} - -func createNegativeTestFlow(fs *commonFlowSettings, flowDescription string, componentSuffix string, initErrorCodes ...string) { - componentPath := filepath.Join(fs.secretStoreComponentPathBase, componentSuffix) - componentName := fs.componentNamePrefix + componentSuffix - dockerComposeClusterYAML := defaultDockerComposeClusterYAML - - flow.New(fs.t, flowDescription). - Step(dockercompose.Run(dockerComposeProjectName, dockerComposeClusterYAML)). - Step("Waiting for component to start...", flow.Sleep(5*time.Second)). - Step(sidecar.Run(sidecarName, - embedded.WithoutApp(), - embedded.WithComponentsPath(componentPath), - embedded.WithDaprGRPCPort(fs.currentGrpcPort), - embedded.WithDaprHTTPPort(fs.currentHttpPort), - componentRuntimeOptions(), - )). - Step("Waiting for component to load...", flow.Sleep(5*time.Second)). - // TODO(tmacam) FIX https://github.com/dapr/dapr/issues/5487 - Step("🛑Verify component is NOT registered", testComponentNotFound(componentName, fs.currentGrpcPort)). - Step("Verify initialization error reported for component", assertInitializationFailedWithErrorsForComponent(componentName, initErrorCodes...)). - Step("🐞😱 Bug dependant behavior - test component is actually registered", testComponentFound(componentName, fs.currentGrpcPort)). - Step("Stop HashiCorp Vault server", dockercompose.Stop(dockerComposeProjectName, dockerComposeClusterYAML)). - Run() -} From cdac8123f3805eddb43d2d75291a68e0c19b1643 Mon Sep 17 00:00:00 2001 From: Tiago Alves Macambira Date: Mon, 28 Nov 2022 17:39:59 -0800 Subject: [PATCH 74/87] Small fixes (documentation, comments) Signed-off-by: Tiago Alves Macambira --- .../hashicorp/vault/components/caFamily/README.md | 1 + .../customSecretsPath/docker-compose-hashicorp-vault.yml | 4 +--- .../components/versioning/docker-compose-hashicorp-vault.yml | 5 +---- .../secretstores/hashicorp/vault/secret_helpers.go | 5 +++-- 4 files changed, 6 insertions(+), 9 deletions(-) diff --git a/tests/certification/secretstores/hashicorp/vault/components/caFamily/README.md b/tests/certification/secretstores/hashicorp/vault/components/caFamily/README.md index 708bd2bd7..830a668ba 100644 --- a/tests/certification/secretstores/hashicorp/vault/components/caFamily/README.md +++ b/tests/certification/secretstores/hashicorp/vault/components/caFamily/README.md @@ -20,6 +20,7 @@ Besides `-dev-tls`, we also instruct vault to use a configuration that defines a We use this certificate we generated to assist with the validation of `caPem`, `caCert`, `caPath`, `skipValidate` and `tlsServerName` flags. All of these refer to the same certificate. Testing `caPem` is a bit special in that it needs the certificate inlined in the component YAML file. A Makefile is included here in order to document and to ease re-generation of the certificate and keys. It will also re-generate the `caPem`-dependent component YAML, so one does not have to remember updating it whenever the certificate is updated or regenerated. +As a matter of fact, our code does not ship with any of these certificates. Instead, this Makefile is invoked at the begging on `TestCaFamilyOfFields` test. # Misc. references diff --git a/tests/certification/secretstores/hashicorp/vault/components/enginePath/customSecretsPath/docker-compose-hashicorp-vault.yml b/tests/certification/secretstores/hashicorp/vault/components/enginePath/customSecretsPath/docker-compose-hashicorp-vault.yml index 83a405fb3..ef4244434 100644 --- a/tests/certification/secretstores/hashicorp/vault/components/enginePath/customSecretsPath/docker-compose-hashicorp-vault.yml +++ b/tests/certification/secretstores/hashicorp/vault/components/enginePath/customSecretsPath/docker-compose-hashicorp-vault.yml @@ -28,10 +28,8 @@ services: - hashicorp_vault environment: VAULT_TOKEN : *VAULT_TOKEN - # We are using HTTPS VAULT_ADDR: http://hashicorp_vault:8200/ - VAULT_SKIP_VERIFY: 'true' volumes: - .:/setup:ro - entrypoint: /setup/setup-hashicorp-vault-secrets.sh + entrypoint: /setup/setup-hashicorp-vault-secrets.sh # <<< Use our custom secret seeder for the enginePath/customSecretsPath diff --git a/tests/certification/secretstores/hashicorp/vault/components/versioning/docker-compose-hashicorp-vault.yml b/tests/certification/secretstores/hashicorp/vault/components/versioning/docker-compose-hashicorp-vault.yml index fd7620371..bdcf03479 100644 --- a/tests/certification/secretstores/hashicorp/vault/components/versioning/docker-compose-hashicorp-vault.yml +++ b/tests/certification/secretstores/hashicorp/vault/components/versioning/docker-compose-hashicorp-vault.yml @@ -20,7 +20,6 @@ services: VAULT_DEV_LISTEN_ADDRESS: "0.0.0.0:8200" VAULT_DEV_ROOT_TOKEN_ID: *VAULT_TOKEN - # We define a aux. service to seed the expected conformance secrets to vault seed_conformance_secrets: image: *VAULT_DOCKER_IMAGE @@ -28,10 +27,8 @@ services: - hashicorp_vault environment: VAULT_TOKEN : *VAULT_TOKEN - # We are using HTTPS VAULT_ADDR: http://hashicorp_vault:8200/ - VAULT_SKIP_VERIFY: 'true' volumes: - .:/setup:ro - entrypoint: /setup/seed-secret-with-multiple-versions.sh + entrypoint: /setup/seed-secret-with-multiple-versions.sh # <<< Use our custom secret seeder for the versioning test diff --git a/tests/certification/secretstores/hashicorp/vault/secret_helpers.go b/tests/certification/secretstores/hashicorp/vault/secret_helpers.go index 61e6bf027..94435f7fd 100644 --- a/tests/certification/secretstores/hashicorp/vault/secret_helpers.go +++ b/tests/certification/secretstores/hashicorp/vault/secret_helpers.go @@ -15,6 +15,7 @@ package vault_test import ( "fmt" + "github.com/dapr/components-contrib/tests/certification/flow" "github.com/dapr/go-sdk/client" "github.com/stretchr/testify/assert" @@ -95,9 +96,9 @@ func testGetBulkSecretsWorksAndFoundKeys(currentGrpcPort int, secretStoreName st assert.NotEmpty(ctx.T, res) for k, v := range res { - ctx.Logf("💡 %s", k) + ctx.Logf("Secret %s", k) for i, j := range v { - ctx.Logf("💡\t %s : %s", i, j) + ctx.Logf("\t key-value pair: %s : %s", i, j) } } From 46fabfa0fec06a51f479c948325e35a234536aa3 Mon Sep 17 00:00:00 2001 From: Ryan Lettieri <67934986+RyanLettieri@users.noreply.github.com> Date: Tue, 29 Nov 2022 10:35:48 -0700 Subject: [PATCH 75/87] Creation of Certification Test for CockroachDB (#2222) * First commit of cockroachDB cert test but it has some errors when stopping/starting container Signed-off-by: Ryan Lettieri * Creation of CockroachDB certification test Signed-off-by: Ryan Lettieri * Removing ping function from cockroachDB deleteValue func Signed-off-by: Ryan Lettieri * Spelling mistake and moving Ping function in cockroachDB into Init method Signed-off-by: Ryan Lettieri * First set of updates for cockroachDB cert PR Signed-off-by: Ryan Lettieri * More updates to cockroachDB cert test Signed-off-by: Ryan Lettieri * Lint fix for cockrochdb Signed-off-by: Ryan Lettieri * Fixes to go.mod and go.som files for cockroachDB Signed-off-by: Ryan Lettieri * Renaming variable for number of connection retry attempts Signed-off-by: Ryan Lettieri * Removing ttl from cockroach metadata in test Signed-off-by: Ryan Lettieri * Updating go.mod files to master and updating retry in cockroachDB Signed-off-by: Ryan Lettieri Signed-off-by: Ryan Lettieri Co-authored-by: Ryan Lettieri Co-authored-by: Bernd Verst <4535280+berndverst@users.noreply.github.com> Co-authored-by: Dapr Bot <56698301+dapr-bot@users.noreply.github.com> --- .github/workflows/certification.yml | 1 + state/cockroachdb/cockroachdb_access.go | 45 +- .../bindings/alicloud/dubbo/go.mod | 3 +- .../bindings/alicloud/dubbo/go.sum | 1 + .../bindings/alicloud/nacos/go.mod | 3 +- .../bindings/alicloud/nacos/go.sum | 1 + .../bindings/azure/blobstorage/go.mod | 3 +- .../bindings/azure/blobstorage/go.sum | 1 + .../bindings/azure/cosmosdb/go.mod | 3 +- .../bindings/azure/cosmosdb/go.sum | 1 + .../bindings/azure/eventhubs/go.mod | 3 +- .../bindings/azure/eventhubs/go.sum | 1 + .../bindings/azure/servicebusqueues/go.mod | 3 +- .../bindings/azure/servicebusqueues/go.sum | 1 + .../bindings/azure/storagequeues/go.mod | 3 +- .../bindings/azure/storagequeues/go.sum | 1 + tests/certification/bindings/kafka/go.mod | 3 +- tests/certification/bindings/kafka/go.sum | 1 + .../bindings/localstorage/go.mod | 3 +- .../bindings/localstorage/go.sum | 1 + tests/certification/bindings/postgres/go.mod | 3 +- tests/certification/bindings/postgres/go.sum | 1 + tests/certification/bindings/rabbitmq/go.mod | 3 +- tests/certification/bindings/rabbitmq/go.sum | 1 + tests/certification/bindings/redis/go.mod | 3 +- tests/certification/bindings/redis/go.sum | 1 + tests/certification/embedded/embedded.go | 4 +- tests/certification/go.mod | 3 +- tests/certification/go.sum | 1 + .../pubsub/azure/eventhubs/go.mod | 3 +- .../pubsub/azure/eventhubs/go.sum | 1 + .../pubsub/azure/servicebus/topics/go.mod | 3 +- .../pubsub/azure/servicebus/topics/go.sum | 1 + tests/certification/pubsub/kafka/go.mod | 3 +- tests/certification/pubsub/kafka/go.sum | 1 + tests/certification/pubsub/mqtt/go.mod | 3 +- tests/certification/pubsub/mqtt/go.sum | 1 + tests/certification/pubsub/rabbitmq/go.mod | 3 +- tests/certification/pubsub/rabbitmq/go.sum | 1 + .../secretstores/azure/keyvault/go.mod | 3 +- .../secretstores/azure/keyvault/go.sum | 1 + .../secretstores/hashicorp/vault/go.mod | 3 +- .../secretstores/hashicorp/vault/go.sum | 1 + .../secretstores/local/env/go.mod | 3 +- .../secretstores/local/env/go.sum | 1 + .../secretstores/local/file/go.mod | 3 +- .../secretstores/local/file/go.sum | 1 + .../state/azure/blobstorage/go.mod | 3 +- .../state/azure/blobstorage/go.sum | 1 + .../certification/state/azure/cosmosdb/go.mod | 3 +- .../certification/state/azure/cosmosdb/go.sum | 1 + .../state/azure/tablestorage/go.mod | 3 +- .../state/azure/tablestorage/go.sum | 1 + tests/certification/state/cassandra/go.mod | 3 +- tests/certification/state/cassandra/go.sum | 1 + .../certification/state/cockroachdb/README.md | 42 + .../state/cockroachdb/cockroachdb_test.go | 271 ++++++ .../components/standard/cockroachdb.yaml | 17 + .../state/cockroachdb/config.yaml | 6 + .../state/cockroachdb/docker-compose.yml | 21 + tests/certification/state/cockroachdb/go.mod | 146 +++ tests/certification/state/cockroachdb/go.sum | 917 ++++++++++++++++++ tests/certification/state/memcached/go.mod | 3 +- tests/certification/state/memcached/go.sum | 1 + tests/certification/state/mongodb/go.mod | 3 +- tests/certification/state/mongodb/go.sum | 1 + tests/certification/state/mysql/go.mod | 3 +- tests/certification/state/mysql/go.sum | 1 + tests/certification/state/postgresql/go.mod | 3 +- tests/certification/state/postgresql/go.sum | 1 + .../state/postgresql/postgresql_test.go | 5 +- tests/certification/state/redis/go.mod | 3 +- tests/certification/state/redis/go.sum | 1 + tests/certification/state/sqlserver/go.mod | 3 +- tests/certification/state/sqlserver/go.sum | 1 + 75 files changed, 1561 insertions(+), 42 deletions(-) create mode 100644 tests/certification/state/cockroachdb/README.md create mode 100644 tests/certification/state/cockroachdb/cockroachdb_test.go create mode 100644 tests/certification/state/cockroachdb/components/standard/cockroachdb.yaml create mode 100644 tests/certification/state/cockroachdb/config.yaml create mode 100644 tests/certification/state/cockroachdb/docker-compose.yml create mode 100644 tests/certification/state/cockroachdb/go.mod create mode 100644 tests/certification/state/cockroachdb/go.sum diff --git a/.github/workflows/certification.yml b/.github/workflows/certification.yml index dfa2228dc..80f4dd140 100644 --- a/.github/workflows/certification.yml +++ b/.github/workflows/certification.yml @@ -53,6 +53,7 @@ jobs: - pubsub.mqtt - state.mongodb - state.redis + - state.cockroachdb - state.postgresql - state.cassandra - state.memcached diff --git a/state/cockroachdb/cockroachdb_access.go b/state/cockroachdb/cockroachdb_access.go index 6fdb454fc..b05553341 100644 --- a/state/cockroachdb/cockroachdb_access.go +++ b/state/cockroachdb/cockroachdb_access.go @@ -15,11 +15,13 @@ package cockroachdb import ( "database/sql" + "database/sql/driver" "encoding/base64" "encoding/json" "errors" "fmt" "strconv" + "time" "github.com/dapr/components-contrib/metadata" "github.com/dapr/components-contrib/state" @@ -27,15 +29,17 @@ import ( "github.com/dapr/components-contrib/state/utils" "github.com/dapr/kit/logger" "github.com/dapr/kit/ptr" + "github.com/dapr/kit/retry" // Blank import for the underlying PostgreSQL driver. _ "github.com/jackc/pgx/v5/stdlib" ) const ( - connectionStringKey = "connectionString" - errMissingConnectionString = "missing connection string" - tableName = "state" + connectionStringKey = "connectionString" + errMissingConnectionString = "missing connection string" + tableName = "state" + defaultMaxConnectionAttempts = 5 // A bad driver connection error can occur inside the sql code so this essentially allows for more retries since the sql code does not allow that to be changed ) // cockroachDBAccess implements dbaccess. @@ -47,8 +51,9 @@ type cockroachDBAccess struct { } type cockroachDBMetadata struct { - ConnectionString string - TableName string + ConnectionString string + TableName string + MaxConnectionAttempts *int } // newCockroachDBAccess creates a new instance of cockroachDBAccess. @@ -109,6 +114,12 @@ func (p *cockroachDBAccess) Init(metadata state.Metadata) error { return err } + // Ensure that a connection to the database is actually established + err = p.Ping() + if err != nil { + return err + } + return nil } @@ -188,6 +199,7 @@ func (p *cockroachDBAccess) BulkSet(req []state.SetRequest) error { // Get returns data from the database. If data does not exist for the key an empty state.GetResponse will be returned. func (p *cockroachDBAccess) Get(req *state.GetRequest) (*state.GetResponse, error) { p.logger.Debug("Getting state value from CockroachDB") + if req.Key == "" { return nil, fmt.Errorf("missing key in get operation") } @@ -236,6 +248,7 @@ func (p *cockroachDBAccess) Get(req *state.GetRequest) (*state.GetResponse, erro // Delete removes an item from the state store. func (p *cockroachDBAccess) Delete(req *state.DeleteRequest) error { p.logger.Debug("Deleting state value from CockroachDB") + if req.Key == "" { return fmt.Errorf("missing key in delete operation") } @@ -386,7 +399,27 @@ func (p *cockroachDBAccess) Query(req *state.QueryRequest) (*state.QueryResponse // Ping implements database ping. func (p *cockroachDBAccess) Ping() error { - return p.db.Ping() + retryCount := defaultMaxConnectionAttempts + if p.metadata.MaxConnectionAttempts != nil && *p.metadata.MaxConnectionAttempts >= 0 { + retryCount = *p.metadata.MaxConnectionAttempts + } + config := retry.DefaultConfig() + config.Policy = retry.PolicyExponential + config.MaxInterval = 100 * time.Millisecond + config.MaxRetries = int64(retryCount) + backoff := config.NewBackOff() + + return retry.NotifyRecover(func() error { + err := p.db.Ping() + if errors.Is(err, driver.ErrBadConn) { + return fmt.Errorf("error when attempting to establish connection with cockroachDB: %v", err) + } + return nil + }, backoff, func(err error, _ time.Duration) { + p.logger.Debugf("Could not establish connection with cockroachDB. Retrying...: %v", err) + }, func() { + p.logger.Debug("Successfully established connection with cockroachDB after it previously failed") + }) } // Close implements io.Close. diff --git a/tests/certification/bindings/alicloud/dubbo/go.mod b/tests/certification/bindings/alicloud/dubbo/go.mod index 3f16003fa..c642f6f20 100644 --- a/tests/certification/bindings/alicloud/dubbo/go.mod +++ b/tests/certification/bindings/alicloud/dubbo/go.mod @@ -7,7 +7,7 @@ require ( github.com/apache/dubbo-go-hessian2 v1.11.3 github.com/dapr/components-contrib v1.9.1-0.20221025205611-e38369028650 github.com/dapr/components-contrib/tests/certification v0.0.0-20211026011813-36b75e9ae272 - github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e + github.com/dapr/dapr v1.9.4-0.20221121055721-6683f7582ac4 github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f github.com/stretchr/testify v1.8.1 @@ -103,6 +103,7 @@ require ( github.com/opentracing/opentracing-go v1.2.0 // indirect github.com/openzipkin/zipkin-go v0.4.1 // indirect github.com/pelletier/go-toml v1.9.4 // indirect + github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/prometheus/client_golang v1.13.0 // indirect diff --git a/tests/certification/bindings/alicloud/dubbo/go.sum b/tests/certification/bindings/alicloud/dubbo/go.sum index 29228ce8d..ef135aca1 100644 --- a/tests/certification/bindings/alicloud/dubbo/go.sum +++ b/tests/certification/bindings/alicloud/dubbo/go.sum @@ -696,6 +696,7 @@ github.com/pelletier/go-toml v1.9.4 h1:tjENF6MfZAg8e4ZmZTeWaWiT2vXtsoO6+iuOjFhEC github.com/pelletier/go-toml v1.9.4/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 h1:Ii+DKncOVM8Cu1Hc+ETb5K+23HdAMvESYE3ZJ5b5cMI= +github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE= github.com/philhofer/fwd v1.1.1/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= diff --git a/tests/certification/bindings/alicloud/nacos/go.mod b/tests/certification/bindings/alicloud/nacos/go.mod index 085f76367..13774365e 100644 --- a/tests/certification/bindings/alicloud/nacos/go.mod +++ b/tests/certification/bindings/alicloud/nacos/go.mod @@ -5,7 +5,7 @@ go 1.19 require ( github.com/dapr/components-contrib v1.9.1-0.20221025205611-e38369028650 github.com/dapr/components-contrib/tests/certification v0.0.0-20211026011813-36b75e9ae272 - github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e + github.com/dapr/dapr v1.9.4-0.20221121055721-6683f7582ac4 github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f github.com/nacos-group/nacos-sdk-go/v2 v2.1.2 @@ -78,6 +78,7 @@ require ( github.com/modern-go/reflect2 v1.0.2 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/openzipkin/zipkin-go v0.4.1 // indirect + github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/prometheus/client_golang v1.13.0 // indirect diff --git a/tests/certification/bindings/alicloud/nacos/go.sum b/tests/certification/bindings/alicloud/nacos/go.sum index ff48f8312..1bc9fceda 100644 --- a/tests/certification/bindings/alicloud/nacos/go.sum +++ b/tests/certification/bindings/alicloud/nacos/go.sum @@ -397,6 +397,7 @@ github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FI github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 h1:Ii+DKncOVM8Cu1Hc+ETb5K+23HdAMvESYE3ZJ5b5cMI= +github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= diff --git a/tests/certification/bindings/azure/blobstorage/go.mod b/tests/certification/bindings/azure/blobstorage/go.mod index 39df468c9..9e9befe77 100644 --- a/tests/certification/bindings/azure/blobstorage/go.mod +++ b/tests/certification/bindings/azure/blobstorage/go.mod @@ -6,7 +6,7 @@ require ( github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v0.5.1 github.com/dapr/components-contrib v1.9.1-0.20221025205611-e38369028650 github.com/dapr/components-contrib/tests/certification v0.0.0-20211130185200-4918900c09e1 - github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e + github.com/dapr/dapr v1.9.4-0.20221121055721-6683f7582ac4 github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f github.com/stretchr/testify v1.8.1 @@ -96,6 +96,7 @@ require ( github.com/modern-go/reflect2 v1.0.2 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/openzipkin/zipkin-go v0.4.1 // indirect + github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 // indirect github.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect diff --git a/tests/certification/bindings/azure/blobstorage/go.sum b/tests/certification/bindings/azure/blobstorage/go.sum index 0200c2d33..d394b07e3 100644 --- a/tests/certification/bindings/azure/blobstorage/go.sum +++ b/tests/certification/bindings/azure/blobstorage/go.sum @@ -454,6 +454,7 @@ github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FI github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 h1:Ii+DKncOVM8Cu1Hc+ETb5K+23HdAMvESYE3ZJ5b5cMI= +github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE= github.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4 h1:Qj1ukM4GlMWXNdMBuXcXfz/Kw9s1qm0CLY32QxuSImI= github.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4/go.mod h1:N6UoU20jOqggOuDwUaBQpluzLNDqif3kq9z2wpdYEfQ= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= diff --git a/tests/certification/bindings/azure/cosmosdb/go.mod b/tests/certification/bindings/azure/cosmosdb/go.mod index 886fc97c8..d4982bd3b 100644 --- a/tests/certification/bindings/azure/cosmosdb/go.mod +++ b/tests/certification/bindings/azure/cosmosdb/go.mod @@ -6,7 +6,7 @@ require ( github.com/a8m/documentdb v1.3.1-0.20220405205223-5b41ba0aaeb1 github.com/dapr/components-contrib v1.9.1-0.20221025205611-e38369028650 github.com/dapr/components-contrib/tests/certification v0.0.0-20211130185200-4918900c09e1 - github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e + github.com/dapr/dapr v1.9.4-0.20221121055721-6683f7582ac4 github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f github.com/google/uuid v1.3.0 @@ -98,6 +98,7 @@ require ( github.com/modern-go/reflect2 v1.0.2 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/openzipkin/zipkin-go v0.4.1 // indirect + github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 // indirect github.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect diff --git a/tests/certification/bindings/azure/cosmosdb/go.sum b/tests/certification/bindings/azure/cosmosdb/go.sum index 82ff71cf6..0e0926256 100644 --- a/tests/certification/bindings/azure/cosmosdb/go.sum +++ b/tests/certification/bindings/azure/cosmosdb/go.sum @@ -459,6 +459,7 @@ github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FI github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 h1:Ii+DKncOVM8Cu1Hc+ETb5K+23HdAMvESYE3ZJ5b5cMI= +github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE= github.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4 h1:Qj1ukM4GlMWXNdMBuXcXfz/Kw9s1qm0CLY32QxuSImI= github.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4/go.mod h1:N6UoU20jOqggOuDwUaBQpluzLNDqif3kq9z2wpdYEfQ= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= diff --git a/tests/certification/bindings/azure/eventhubs/go.mod b/tests/certification/bindings/azure/eventhubs/go.mod index e700c189c..0b4cbbe0a 100644 --- a/tests/certification/bindings/azure/eventhubs/go.mod +++ b/tests/certification/bindings/azure/eventhubs/go.mod @@ -5,7 +5,7 @@ go 1.19 require ( github.com/dapr/components-contrib v1.9.1-0.20221025205611-e38369028650 github.com/dapr/components-contrib/tests/certification v0.0.0-20211026011813-36b75e9ae272 - github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e + github.com/dapr/dapr v1.9.4-0.20221121055721-6683f7582ac4 github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f github.com/google/uuid v1.3.0 @@ -104,6 +104,7 @@ require ( github.com/modern-go/reflect2 v1.0.2 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/openzipkin/zipkin-go v0.4.1 // indirect + github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 // indirect github.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect diff --git a/tests/certification/bindings/azure/eventhubs/go.sum b/tests/certification/bindings/azure/eventhubs/go.sum index 2ffcf1e77..01b5653a3 100644 --- a/tests/certification/bindings/azure/eventhubs/go.sum +++ b/tests/certification/bindings/azure/eventhubs/go.sum @@ -479,6 +479,7 @@ github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FI github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 h1:Ii+DKncOVM8Cu1Hc+ETb5K+23HdAMvESYE3ZJ5b5cMI= +github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE= github.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4 h1:Qj1ukM4GlMWXNdMBuXcXfz/Kw9s1qm0CLY32QxuSImI= github.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4/go.mod h1:N6UoU20jOqggOuDwUaBQpluzLNDqif3kq9z2wpdYEfQ= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= diff --git a/tests/certification/bindings/azure/servicebusqueues/go.mod b/tests/certification/bindings/azure/servicebusqueues/go.mod index 3f276e42d..02fd6594c 100644 --- a/tests/certification/bindings/azure/servicebusqueues/go.mod +++ b/tests/certification/bindings/azure/servicebusqueues/go.mod @@ -5,7 +5,7 @@ go 1.19 require ( github.com/dapr/components-contrib v1.9.1-0.20221025205611-e38369028650 github.com/dapr/components-contrib/tests/certification v0.0.0-20211026011813-36b75e9ae272 - github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e + github.com/dapr/dapr v1.9.4-0.20221121055721-6683f7582ac4 github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f github.com/stretchr/testify v1.8.1 @@ -100,6 +100,7 @@ require ( github.com/modern-go/reflect2 v1.0.2 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/openzipkin/zipkin-go v0.4.1 // indirect + github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 // indirect github.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect diff --git a/tests/certification/bindings/azure/servicebusqueues/go.sum b/tests/certification/bindings/azure/servicebusqueues/go.sum index aab8e8327..75fb02275 100644 --- a/tests/certification/bindings/azure/servicebusqueues/go.sum +++ b/tests/certification/bindings/azure/servicebusqueues/go.sum @@ -462,6 +462,7 @@ github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FI github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 h1:Ii+DKncOVM8Cu1Hc+ETb5K+23HdAMvESYE3ZJ5b5cMI= +github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE= github.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4 h1:Qj1ukM4GlMWXNdMBuXcXfz/Kw9s1qm0CLY32QxuSImI= github.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4/go.mod h1:N6UoU20jOqggOuDwUaBQpluzLNDqif3kq9z2wpdYEfQ= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= diff --git a/tests/certification/bindings/azure/storagequeues/go.mod b/tests/certification/bindings/azure/storagequeues/go.mod index 6698ef29e..38daa144c 100644 --- a/tests/certification/bindings/azure/storagequeues/go.mod +++ b/tests/certification/bindings/azure/storagequeues/go.mod @@ -5,7 +5,7 @@ go 1.19 require ( github.com/dapr/components-contrib v1.9.1-0.20221025205611-e38369028650 github.com/dapr/components-contrib/tests/certification v0.0.0-20211026011813-36b75e9ae272 - github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e + github.com/dapr/dapr v1.9.4-0.20221121055721-6683f7582ac4 github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f github.com/stretchr/testify v1.8.1 @@ -97,6 +97,7 @@ require ( github.com/modern-go/reflect2 v1.0.2 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/openzipkin/zipkin-go v0.4.1 // indirect + github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 // indirect github.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect diff --git a/tests/certification/bindings/azure/storagequeues/go.sum b/tests/certification/bindings/azure/storagequeues/go.sum index 9776a9019..3ff221002 100644 --- a/tests/certification/bindings/azure/storagequeues/go.sum +++ b/tests/certification/bindings/azure/storagequeues/go.sum @@ -454,6 +454,7 @@ github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FI github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 h1:Ii+DKncOVM8Cu1Hc+ETb5K+23HdAMvESYE3ZJ5b5cMI= +github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE= github.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4 h1:Qj1ukM4GlMWXNdMBuXcXfz/Kw9s1qm0CLY32QxuSImI= github.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4/go.mod h1:N6UoU20jOqggOuDwUaBQpluzLNDqif3kq9z2wpdYEfQ= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= diff --git a/tests/certification/bindings/kafka/go.mod b/tests/certification/bindings/kafka/go.mod index 39c70e7c5..d72b3a0c8 100644 --- a/tests/certification/bindings/kafka/go.mod +++ b/tests/certification/bindings/kafka/go.mod @@ -7,7 +7,7 @@ require ( github.com/cenkalti/backoff/v4 v4.1.3 github.com/dapr/components-contrib v1.9.1-0.20221025205611-e38369028650 github.com/dapr/components-contrib/tests/certification v0.0.0-20220519061249-c2cb1dad5bb0 - github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e + github.com/dapr/dapr v1.9.4-0.20221121055721-6683f7582ac4 github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f github.com/google/uuid v1.3.0 @@ -87,6 +87,7 @@ require ( github.com/modern-go/reflect2 v1.0.2 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/openzipkin/zipkin-go v0.4.1 // indirect + github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 // indirect github.com/pierrec/lz4/v4 v4.1.17 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect diff --git a/tests/certification/bindings/kafka/go.sum b/tests/certification/bindings/kafka/go.sum index 1f2b81f1d..b44b743f2 100644 --- a/tests/certification/bindings/kafka/go.sum +++ b/tests/certification/bindings/kafka/go.sum @@ -409,6 +409,7 @@ github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FI github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 h1:Ii+DKncOVM8Cu1Hc+ETb5K+23HdAMvESYE3ZJ5b5cMI= +github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE= github.com/pierrec/lz4/v4 v4.1.17 h1:kV4Ip+/hUBC+8T6+2EgburRtkE9ef4nbY3f4dFhGjMc= github.com/pierrec/lz4/v4 v4.1.17/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= diff --git a/tests/certification/bindings/localstorage/go.mod b/tests/certification/bindings/localstorage/go.mod index ee5a3a95d..db673b92b 100644 --- a/tests/certification/bindings/localstorage/go.mod +++ b/tests/certification/bindings/localstorage/go.mod @@ -5,7 +5,7 @@ go 1.19 require ( github.com/dapr/components-contrib v1.9.1-0.20221025205611-e38369028650 github.com/dapr/components-contrib/tests/certification v0.0.0-00010101000000-000000000000 - github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e + github.com/dapr/dapr v1.9.4-0.20221121055721-6683f7582ac4 github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f github.com/stretchr/testify v1.8.1 @@ -75,6 +75,7 @@ require ( github.com/modern-go/reflect2 v1.0.2 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/openzipkin/zipkin-go v0.4.1 // indirect + github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/prometheus/client_golang v1.13.0 // indirect diff --git a/tests/certification/bindings/localstorage/go.sum b/tests/certification/bindings/localstorage/go.sum index 0d8e9d344..e3d0de29b 100644 --- a/tests/certification/bindings/localstorage/go.sum +++ b/tests/certification/bindings/localstorage/go.sum @@ -381,6 +381,7 @@ github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FI github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 h1:Ii+DKncOVM8Cu1Hc+ETb5K+23HdAMvESYE3ZJ5b5cMI= +github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= diff --git a/tests/certification/bindings/postgres/go.mod b/tests/certification/bindings/postgres/go.mod index 42f2f4519..288a7e0aa 100644 --- a/tests/certification/bindings/postgres/go.mod +++ b/tests/certification/bindings/postgres/go.mod @@ -5,7 +5,7 @@ go 1.19 require ( github.com/dapr/components-contrib v1.9.1-0.20221025205611-e38369028650 github.com/dapr/components-contrib/tests/certification v0.0.0-20220526162429-d03aeba3e0d6 - github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e + github.com/dapr/dapr v1.9.4-0.20221121055721-6683f7582ac4 github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f github.com/lib/pq v1.10.7 @@ -79,6 +79,7 @@ require ( github.com/modern-go/reflect2 v1.0.2 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/openzipkin/zipkin-go v0.4.1 // indirect + github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/prometheus/client_golang v1.13.0 // indirect diff --git a/tests/certification/bindings/postgres/go.sum b/tests/certification/bindings/postgres/go.sum index 752fd2a1e..d147d6e19 100644 --- a/tests/certification/bindings/postgres/go.sum +++ b/tests/certification/bindings/postgres/go.sum @@ -389,6 +389,7 @@ github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FI github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 h1:Ii+DKncOVM8Cu1Hc+ETb5K+23HdAMvESYE3ZJ5b5cMI= +github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= diff --git a/tests/certification/bindings/rabbitmq/go.mod b/tests/certification/bindings/rabbitmq/go.mod index 075e437e5..852cd314f 100644 --- a/tests/certification/bindings/rabbitmq/go.mod +++ b/tests/certification/bindings/rabbitmq/go.mod @@ -5,7 +5,7 @@ go 1.19 require ( github.com/dapr/components-contrib v1.9.1-0.20221025205611-e38369028650 github.com/dapr/components-contrib/tests/certification v0.0.0-20211130185200-4918900c09e1 - github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e + github.com/dapr/dapr v1.9.4-0.20221121055721-6683f7582ac4 github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f github.com/rabbitmq/amqp091-go v1.5.0 @@ -77,6 +77,7 @@ require ( github.com/modern-go/reflect2 v1.0.2 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/openzipkin/zipkin-go v0.4.1 // indirect + github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/prometheus/client_golang v1.13.0 // indirect diff --git a/tests/certification/bindings/rabbitmq/go.sum b/tests/certification/bindings/rabbitmq/go.sum index a4eff7e01..84bbe9fbe 100644 --- a/tests/certification/bindings/rabbitmq/go.sum +++ b/tests/certification/bindings/rabbitmq/go.sum @@ -381,6 +381,7 @@ github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FI github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 h1:Ii+DKncOVM8Cu1Hc+ETb5K+23HdAMvESYE3ZJ5b5cMI= +github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= diff --git a/tests/certification/bindings/redis/go.mod b/tests/certification/bindings/redis/go.mod index 40e8b93ba..eff24118a 100644 --- a/tests/certification/bindings/redis/go.mod +++ b/tests/certification/bindings/redis/go.mod @@ -5,7 +5,7 @@ go 1.19 require ( github.com/dapr/components-contrib v1.9.1-0.20221025205611-e38369028650 github.com/dapr/components-contrib/tests/certification v0.0.0-20220908221803-2b5650c2faa4 - github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e + github.com/dapr/dapr v1.9.4-0.20221121055721-6683f7582ac4 github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f github.com/go-redis/redis/v8 v8.11.5 @@ -76,6 +76,7 @@ require ( github.com/modern-go/reflect2 v1.0.2 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/openzipkin/zipkin-go v0.4.1 // indirect + github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/prometheus/client_golang v1.13.0 // indirect diff --git a/tests/certification/bindings/redis/go.sum b/tests/certification/bindings/redis/go.sum index eb9fe226b..657d19e28 100644 --- a/tests/certification/bindings/redis/go.sum +++ b/tests/certification/bindings/redis/go.sum @@ -385,6 +385,7 @@ github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FI github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 h1:Ii+DKncOVM8Cu1Hc+ETb5K+23HdAMvESYE3ZJ5b5cMI= +github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= diff --git a/tests/certification/embedded/embedded.go b/tests/certification/embedded/embedded.go index 4a66187a7..071cafb57 100644 --- a/tests/certification/embedded/embedded.go +++ b/tests/certification/embedded/embedded.go @@ -22,13 +22,13 @@ import ( global_config "github.com/dapr/dapr/pkg/config" env "github.com/dapr/dapr/pkg/config/env" "github.com/dapr/dapr/pkg/cors" - "github.com/dapr/dapr/pkg/grpc" "github.com/dapr/dapr/pkg/modes" "github.com/dapr/dapr/pkg/operator/client" "github.com/dapr/dapr/pkg/resiliency" "github.com/dapr/dapr/pkg/runtime" "github.com/dapr/dapr/pkg/runtime/security" "github.com/dapr/kit/logger" + "github.com/phayes/freeport" ) const ( @@ -138,7 +138,7 @@ func NewRuntime(appID string, opts ...Option) (*runtime.DaprRuntime, *runtime.Co } if runtimeConfig.InternalGRPCPort == 0 { - if runtimeConfig.InternalGRPCPort, err = grpc.GetFreePort(); err != nil { + if runtimeConfig.InternalGRPCPort, err = freeport.GetFreePort(); err != nil { return nil, nil, err } } diff --git a/tests/certification/go.mod b/tests/certification/go.mod index bb8662ceb..f620600f5 100644 --- a/tests/certification/go.mod +++ b/tests/certification/go.mod @@ -4,7 +4,7 @@ go 1.19 require ( github.com/dapr/components-contrib v1.9.1-0.20221025205611-e38369028650 - github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e + github.com/dapr/dapr v1.9.4-0.20221121055721-6683f7582ac4 github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f github.com/google/go-cmp v0.5.9 @@ -134,6 +134,7 @@ require ( require ( github.com/cenkalti/backoff/v4 v4.1.3 + github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 github.com/tylertreat/comcast v1.0.1 ) diff --git a/tests/certification/go.sum b/tests/certification/go.sum index 113c706b3..e06085a52 100644 --- a/tests/certification/go.sum +++ b/tests/certification/go.sum @@ -381,6 +381,7 @@ github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FI github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 h1:Ii+DKncOVM8Cu1Hc+ETb5K+23HdAMvESYE3ZJ5b5cMI= +github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= diff --git a/tests/certification/pubsub/azure/eventhubs/go.mod b/tests/certification/pubsub/azure/eventhubs/go.mod index a49ec755b..ee7111901 100644 --- a/tests/certification/pubsub/azure/eventhubs/go.mod +++ b/tests/certification/pubsub/azure/eventhubs/go.mod @@ -5,7 +5,7 @@ go 1.19 require ( github.com/dapr/components-contrib v1.9.1-0.20221025205611-e38369028650 github.com/dapr/components-contrib/tests/certification v1.4.0-rc2 - github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e + github.com/dapr/dapr v1.9.4-0.20221121055721-6683f7582ac4 github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f github.com/google/uuid v1.3.0 @@ -104,6 +104,7 @@ require ( github.com/modern-go/reflect2 v1.0.2 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/openzipkin/zipkin-go v0.4.1 // indirect + github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 // indirect github.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect diff --git a/tests/certification/pubsub/azure/eventhubs/go.sum b/tests/certification/pubsub/azure/eventhubs/go.sum index bba9d03a7..c03b2f154 100644 --- a/tests/certification/pubsub/azure/eventhubs/go.sum +++ b/tests/certification/pubsub/azure/eventhubs/go.sum @@ -479,6 +479,7 @@ github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FI github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 h1:Ii+DKncOVM8Cu1Hc+ETb5K+23HdAMvESYE3ZJ5b5cMI= +github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE= github.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4 h1:Qj1ukM4GlMWXNdMBuXcXfz/Kw9s1qm0CLY32QxuSImI= github.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4/go.mod h1:N6UoU20jOqggOuDwUaBQpluzLNDqif3kq9z2wpdYEfQ= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= diff --git a/tests/certification/pubsub/azure/servicebus/topics/go.mod b/tests/certification/pubsub/azure/servicebus/topics/go.mod index eaf00930e..e52b273f0 100644 --- a/tests/certification/pubsub/azure/servicebus/topics/go.mod +++ b/tests/certification/pubsub/azure/servicebus/topics/go.mod @@ -5,7 +5,7 @@ go 1.19 require ( github.com/dapr/components-contrib v1.9.1-0.20221025205611-e38369028650 github.com/dapr/components-contrib/tests/certification v0.0.0-20211026011813-36b75e9ae272 - github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e + github.com/dapr/dapr v1.9.4-0.20221121055721-6683f7582ac4 github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f github.com/google/uuid v1.3.0 @@ -100,6 +100,7 @@ require ( github.com/modern-go/reflect2 v1.0.2 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/openzipkin/zipkin-go v0.4.1 // indirect + github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 // indirect github.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect diff --git a/tests/certification/pubsub/azure/servicebus/topics/go.sum b/tests/certification/pubsub/azure/servicebus/topics/go.sum index aab8e8327..75fb02275 100644 --- a/tests/certification/pubsub/azure/servicebus/topics/go.sum +++ b/tests/certification/pubsub/azure/servicebus/topics/go.sum @@ -462,6 +462,7 @@ github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FI github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 h1:Ii+DKncOVM8Cu1Hc+ETb5K+23HdAMvESYE3ZJ5b5cMI= +github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE= github.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4 h1:Qj1ukM4GlMWXNdMBuXcXfz/Kw9s1qm0CLY32QxuSImI= github.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4/go.mod h1:N6UoU20jOqggOuDwUaBQpluzLNDqif3kq9z2wpdYEfQ= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= diff --git a/tests/certification/pubsub/kafka/go.mod b/tests/certification/pubsub/kafka/go.mod index 270a76518..e5bbc93e0 100644 --- a/tests/certification/pubsub/kafka/go.mod +++ b/tests/certification/pubsub/kafka/go.mod @@ -7,7 +7,7 @@ require ( github.com/cenkalti/backoff/v4 v4.1.3 github.com/dapr/components-contrib v1.9.1-0.20221025205611-e38369028650 github.com/dapr/components-contrib/tests/certification v0.0.0-20220519061249-c2cb1dad5bb0 - github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e + github.com/dapr/dapr v1.9.4-0.20221121055721-6683f7582ac4 github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f github.com/google/uuid v1.3.0 @@ -87,6 +87,7 @@ require ( github.com/modern-go/reflect2 v1.0.2 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/openzipkin/zipkin-go v0.4.1 // indirect + github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 // indirect github.com/pierrec/lz4/v4 v4.1.17 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect diff --git a/tests/certification/pubsub/kafka/go.sum b/tests/certification/pubsub/kafka/go.sum index 1f2b81f1d..b44b743f2 100644 --- a/tests/certification/pubsub/kafka/go.sum +++ b/tests/certification/pubsub/kafka/go.sum @@ -409,6 +409,7 @@ github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FI github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 h1:Ii+DKncOVM8Cu1Hc+ETb5K+23HdAMvESYE3ZJ5b5cMI= +github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE= github.com/pierrec/lz4/v4 v4.1.17 h1:kV4Ip+/hUBC+8T6+2EgburRtkE9ef4nbY3f4dFhGjMc= github.com/pierrec/lz4/v4 v4.1.17/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= diff --git a/tests/certification/pubsub/mqtt/go.mod b/tests/certification/pubsub/mqtt/go.mod index d05b98913..a62f8408f 100644 --- a/tests/certification/pubsub/mqtt/go.mod +++ b/tests/certification/pubsub/mqtt/go.mod @@ -6,7 +6,7 @@ require ( github.com/cenkalti/backoff/v4 v4.1.3 github.com/dapr/components-contrib v1.9.1-0.20221025205611-e38369028650 github.com/dapr/components-contrib/tests/certification v1.4.0-rc2 - github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e + github.com/dapr/dapr v1.9.4-0.20221121055721-6683f7582ac4 github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f github.com/eclipse/paho.mqtt.golang v1.4.2 @@ -79,6 +79,7 @@ require ( github.com/modern-go/reflect2 v1.0.2 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/openzipkin/zipkin-go v0.4.1 // indirect + github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/prometheus/client_golang v1.13.0 // indirect diff --git a/tests/certification/pubsub/mqtt/go.sum b/tests/certification/pubsub/mqtt/go.sum index b8ad6725c..b856fb9cc 100644 --- a/tests/certification/pubsub/mqtt/go.sum +++ b/tests/certification/pubsub/mqtt/go.sum @@ -388,6 +388,7 @@ github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FI github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 h1:Ii+DKncOVM8Cu1Hc+ETb5K+23HdAMvESYE3ZJ5b5cMI= +github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= diff --git a/tests/certification/pubsub/rabbitmq/go.mod b/tests/certification/pubsub/rabbitmq/go.mod index 8135796bf..7ed2b6880 100644 --- a/tests/certification/pubsub/rabbitmq/go.mod +++ b/tests/certification/pubsub/rabbitmq/go.mod @@ -6,7 +6,7 @@ require ( github.com/cenkalti/backoff/v4 v4.1.3 github.com/dapr/components-contrib v1.9.1-0.20221025205611-e38369028650 github.com/dapr/components-contrib/tests/certification v0.0.0-20211130185200-4918900c09e1 - github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e + github.com/dapr/dapr v1.9.4-0.20221121055721-6683f7582ac4 github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f github.com/rabbitmq/amqp091-go v1.5.0 @@ -77,6 +77,7 @@ require ( github.com/modern-go/reflect2 v1.0.2 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/openzipkin/zipkin-go v0.4.1 // indirect + github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/prometheus/client_golang v1.13.0 // indirect diff --git a/tests/certification/pubsub/rabbitmq/go.sum b/tests/certification/pubsub/rabbitmq/go.sum index a4eff7e01..84bbe9fbe 100644 --- a/tests/certification/pubsub/rabbitmq/go.sum +++ b/tests/certification/pubsub/rabbitmq/go.sum @@ -381,6 +381,7 @@ github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FI github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 h1:Ii+DKncOVM8Cu1Hc+ETb5K+23HdAMvESYE3ZJ5b5cMI= +github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= diff --git a/tests/certification/secretstores/azure/keyvault/go.mod b/tests/certification/secretstores/azure/keyvault/go.mod index 50595d243..ae8ce1a62 100644 --- a/tests/certification/secretstores/azure/keyvault/go.mod +++ b/tests/certification/secretstores/azure/keyvault/go.mod @@ -5,7 +5,7 @@ go 1.19 require ( github.com/dapr/components-contrib v1.9.1-0.20221025205611-e38369028650 github.com/dapr/components-contrib/tests/certification v0.0.0-20211130185200-4918900c09e1 - github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e + github.com/dapr/dapr v1.9.4-0.20221121055721-6683f7582ac4 github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f github.com/stretchr/testify v1.8.1 @@ -97,6 +97,7 @@ require ( github.com/modern-go/reflect2 v1.0.2 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/openzipkin/zipkin-go v0.4.1 // indirect + github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 // indirect github.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect diff --git a/tests/certification/secretstores/azure/keyvault/go.sum b/tests/certification/secretstores/azure/keyvault/go.sum index 4fa12be75..f04fccff0 100644 --- a/tests/certification/secretstores/azure/keyvault/go.sum +++ b/tests/certification/secretstores/azure/keyvault/go.sum @@ -456,6 +456,7 @@ github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FI github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 h1:Ii+DKncOVM8Cu1Hc+ETb5K+23HdAMvESYE3ZJ5b5cMI= +github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE= github.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4 h1:Qj1ukM4GlMWXNdMBuXcXfz/Kw9s1qm0CLY32QxuSImI= github.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4/go.mod h1:N6UoU20jOqggOuDwUaBQpluzLNDqif3kq9z2wpdYEfQ= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= diff --git a/tests/certification/secretstores/hashicorp/vault/go.mod b/tests/certification/secretstores/hashicorp/vault/go.mod index c35b32c21..80a65c5aa 100644 --- a/tests/certification/secretstores/hashicorp/vault/go.mod +++ b/tests/certification/secretstores/hashicorp/vault/go.mod @@ -5,7 +5,7 @@ go 1.18 require ( github.com/dapr/components-contrib v1.9.1-0.20221025205611-e38369028650 github.com/dapr/components-contrib/tests/certification v0.0.0-20220526162429-d03aeba3e0d6 - github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e // We require dapr/dapr#5208 merged + github.com/dapr/dapr v1.9.4-0.20221121055721-6683f7582ac4 // We require dapr/dapr#5208 merged github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f github.com/golang/protobuf v1.5.2 @@ -74,6 +74,7 @@ require ( github.com/modern-go/reflect2 v1.0.2 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/openzipkin/zipkin-go v0.4.1 // indirect + github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/prometheus/client_golang v1.13.0 // indirect diff --git a/tests/certification/secretstores/hashicorp/vault/go.sum b/tests/certification/secretstores/hashicorp/vault/go.sum index 551dc9dff..b7055998c 100644 --- a/tests/certification/secretstores/hashicorp/vault/go.sum +++ b/tests/certification/secretstores/hashicorp/vault/go.sum @@ -379,6 +379,7 @@ github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FI github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 h1:Ii+DKncOVM8Cu1Hc+ETb5K+23HdAMvESYE3ZJ5b5cMI= +github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= diff --git a/tests/certification/secretstores/local/env/go.mod b/tests/certification/secretstores/local/env/go.mod index 7eb46dd7c..8884d561c 100644 --- a/tests/certification/secretstores/local/env/go.mod +++ b/tests/certification/secretstores/local/env/go.mod @@ -5,7 +5,7 @@ go 1.19 require ( github.com/dapr/components-contrib v1.9.1-0.20221025205611-e38369028650 github.com/dapr/components-contrib/tests/certification v0.0.0-20211130185200-4918900c09e1 - github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e + github.com/dapr/dapr v1.9.4-0.20221121055721-6683f7582ac4 github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f github.com/stretchr/testify v1.8.1 @@ -74,6 +74,7 @@ require ( github.com/modern-go/reflect2 v1.0.2 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/openzipkin/zipkin-go v0.4.1 // indirect + github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/prometheus/client_golang v1.13.0 // indirect diff --git a/tests/certification/secretstores/local/env/go.sum b/tests/certification/secretstores/local/env/go.sum index 823b0c866..434e7f2ae 100644 --- a/tests/certification/secretstores/local/env/go.sum +++ b/tests/certification/secretstores/local/env/go.sum @@ -379,6 +379,7 @@ github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FI github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 h1:Ii+DKncOVM8Cu1Hc+ETb5K+23HdAMvESYE3ZJ5b5cMI= +github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= diff --git a/tests/certification/secretstores/local/file/go.mod b/tests/certification/secretstores/local/file/go.mod index daaabeafd..f2e519b71 100644 --- a/tests/certification/secretstores/local/file/go.mod +++ b/tests/certification/secretstores/local/file/go.mod @@ -5,7 +5,7 @@ go 1.19 require ( github.com/dapr/components-contrib v1.9.1-0.20221025205611-e38369028650 github.com/dapr/components-contrib/tests/certification v0.0.0-20211130185200-4918900c09e1 - github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e + github.com/dapr/dapr v1.9.4-0.20221121055721-6683f7582ac4 github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f github.com/stretchr/testify v1.8.1 @@ -74,6 +74,7 @@ require ( github.com/modern-go/reflect2 v1.0.2 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/openzipkin/zipkin-go v0.4.1 // indirect + github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/prometheus/client_golang v1.13.0 // indirect diff --git a/tests/certification/secretstores/local/file/go.sum b/tests/certification/secretstores/local/file/go.sum index 823b0c866..434e7f2ae 100644 --- a/tests/certification/secretstores/local/file/go.sum +++ b/tests/certification/secretstores/local/file/go.sum @@ -379,6 +379,7 @@ github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FI github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 h1:Ii+DKncOVM8Cu1Hc+ETb5K+23HdAMvESYE3ZJ5b5cMI= +github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= diff --git a/tests/certification/state/azure/blobstorage/go.mod b/tests/certification/state/azure/blobstorage/go.mod index 1caa631ff..381e48ec6 100644 --- a/tests/certification/state/azure/blobstorage/go.mod +++ b/tests/certification/state/azure/blobstorage/go.mod @@ -5,7 +5,7 @@ go 1.19 require ( github.com/dapr/components-contrib v1.9.1-0.20221025205611-e38369028650 github.com/dapr/components-contrib/tests/certification v0.0.0-20211026011813-36b75e9ae272 - github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e + github.com/dapr/dapr v1.9.4-0.20221121055721-6683f7582ac4 github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f github.com/stretchr/testify v1.8.1 @@ -96,6 +96,7 @@ require ( github.com/modern-go/reflect2 v1.0.2 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/openzipkin/zipkin-go v0.4.1 // indirect + github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 // indirect github.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect diff --git a/tests/certification/state/azure/blobstorage/go.sum b/tests/certification/state/azure/blobstorage/go.sum index 0200c2d33..d394b07e3 100644 --- a/tests/certification/state/azure/blobstorage/go.sum +++ b/tests/certification/state/azure/blobstorage/go.sum @@ -454,6 +454,7 @@ github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FI github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 h1:Ii+DKncOVM8Cu1Hc+ETb5K+23HdAMvESYE3ZJ5b5cMI= +github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE= github.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4 h1:Qj1ukM4GlMWXNdMBuXcXfz/Kw9s1qm0CLY32QxuSImI= github.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4/go.mod h1:N6UoU20jOqggOuDwUaBQpluzLNDqif3kq9z2wpdYEfQ= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= diff --git a/tests/certification/state/azure/cosmosdb/go.mod b/tests/certification/state/azure/cosmosdb/go.mod index 44f1f6f01..074aade1a 100644 --- a/tests/certification/state/azure/cosmosdb/go.mod +++ b/tests/certification/state/azure/cosmosdb/go.mod @@ -5,7 +5,7 @@ go 1.19 require ( github.com/dapr/components-contrib v1.9.1-0.20221025205611-e38369028650 github.com/dapr/components-contrib/tests/certification v0.0.0-20211026011813-36b75e9ae272 - github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e + github.com/dapr/dapr v1.9.4-0.20221121055721-6683f7582ac4 github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f github.com/stretchr/testify v1.8.1 @@ -97,6 +97,7 @@ require ( github.com/modern-go/reflect2 v1.0.2 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/openzipkin/zipkin-go v0.4.1 // indirect + github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 // indirect github.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect diff --git a/tests/certification/state/azure/cosmosdb/go.sum b/tests/certification/state/azure/cosmosdb/go.sum index e1969c129..cceb78629 100644 --- a/tests/certification/state/azure/cosmosdb/go.sum +++ b/tests/certification/state/azure/cosmosdb/go.sum @@ -456,6 +456,7 @@ github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FI github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 h1:Ii+DKncOVM8Cu1Hc+ETb5K+23HdAMvESYE3ZJ5b5cMI= +github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE= github.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4 h1:Qj1ukM4GlMWXNdMBuXcXfz/Kw9s1qm0CLY32QxuSImI= github.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4/go.mod h1:N6UoU20jOqggOuDwUaBQpluzLNDqif3kq9z2wpdYEfQ= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= diff --git a/tests/certification/state/azure/tablestorage/go.mod b/tests/certification/state/azure/tablestorage/go.mod index b6a64984a..03fe8f8c3 100644 --- a/tests/certification/state/azure/tablestorage/go.mod +++ b/tests/certification/state/azure/tablestorage/go.mod @@ -5,7 +5,7 @@ go 1.19 require ( github.com/dapr/components-contrib v1.9.1-0.20221025205611-e38369028650 github.com/dapr/components-contrib/tests/certification v0.0.0-20211026011813-36b75e9ae272 - github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e + github.com/dapr/dapr v1.9.4-0.20221121055721-6683f7582ac4 github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f github.com/stretchr/testify v1.8.1 @@ -96,6 +96,7 @@ require ( github.com/modern-go/reflect2 v1.0.2 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/openzipkin/zipkin-go v0.4.1 // indirect + github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 // indirect github.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect diff --git a/tests/certification/state/azure/tablestorage/go.sum b/tests/certification/state/azure/tablestorage/go.sum index 658835afc..54bfe7f73 100644 --- a/tests/certification/state/azure/tablestorage/go.sum +++ b/tests/certification/state/azure/tablestorage/go.sum @@ -454,6 +454,7 @@ github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FI github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 h1:Ii+DKncOVM8Cu1Hc+ETb5K+23HdAMvESYE3ZJ5b5cMI= +github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE= github.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4 h1:Qj1ukM4GlMWXNdMBuXcXfz/Kw9s1qm0CLY32QxuSImI= github.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4/go.mod h1:N6UoU20jOqggOuDwUaBQpluzLNDqif3kq9z2wpdYEfQ= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= diff --git a/tests/certification/state/cassandra/go.mod b/tests/certification/state/cassandra/go.mod index 7d7293273..a40f94f60 100644 --- a/tests/certification/state/cassandra/go.mod +++ b/tests/certification/state/cassandra/go.mod @@ -5,7 +5,7 @@ go 1.19 require ( github.com/dapr/components-contrib v1.9.1-0.20221025205611-e38369028650 github.com/dapr/components-contrib/tests/certification v0.0.0-20211026011813-36b75e9ae272 - github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e + github.com/dapr/dapr v1.9.4-0.20221121055721-6683f7582ac4 github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f github.com/stretchr/testify v1.8.1 @@ -77,6 +77,7 @@ require ( github.com/modern-go/reflect2 v1.0.2 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/openzipkin/zipkin-go v0.4.1 // indirect + github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/prometheus/client_golang v1.13.0 // indirect diff --git a/tests/certification/state/cassandra/go.sum b/tests/certification/state/cassandra/go.sum index e9734c081..4fd9c7ee9 100644 --- a/tests/certification/state/cassandra/go.sum +++ b/tests/certification/state/cassandra/go.sum @@ -391,6 +391,7 @@ github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FI github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 h1:Ii+DKncOVM8Cu1Hc+ETb5K+23HdAMvESYE3ZJ5b5cMI= +github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= diff --git a/tests/certification/state/cockroachdb/README.md b/tests/certification/state/cockroachdb/README.md new file mode 100644 index 000000000..41fc558a8 --- /dev/null +++ b/tests/certification/state/cockroachdb/README.md @@ -0,0 +1,42 @@ +# CockroachDB State Store Certification + +The purpose of this module is to provide tests that certify the CockroachDB State Store as a stable component. + +## Test plan + +## Connection Test +* Verify the connection is established to CockroachDB. + * Create component spec. + * Run the component with docker-compose + * Run dapr application with component. + * Ensure that you have access to the queue and connection to the queue is established. + +## Basic Operations Test +* Verify that cockroachDB can save, retrieve, and delete states + * Save basic state information with a specified key + * Perform a Get Operation with that same key and ensure the the data previously written is retrieved + * Delete the state item + * Perform another Get Operation and verify that the data retreived is a nil byte array + + +## ETAG Test +* Verify cockroachDB Etag behavior + * Save state without an etag and ensure default etag (value of 1) is created + * Save state with a new, previously unsused etag and ensure that no item is updated + * Get state with etag of 1 and verify that our first written data is retrieved + * Overwrite the initial data through a Set operation with an etag value of 1 + * Run a Get Operation and verify that the previous Set operation was successful + +## Transactions Test +* Verify that cockroachDB can handle multiple opperations in a single request + * Save basic state information with a specified key + * Perform a Get Operation with that same key and ensure the the data previously written is retrieved + * Run a suite of set and delete requests + * Run a Get Operation on the data that should've been deleted from the Delete operation in the multi command and verify that the data no longer exists + * Retrieve data written from set requests and verify the data was correctly written + +## Restart Test +* Verify that cockroachDB can have state data persist after a restart + * Stop cockroachDB by calling a dockercompose stop command + * Start cockroachDB by calling a dockercompose start command + * Perform a Get Operation using a previously inserted key and verify that the data previously saved before the restart is returned \ No newline at end of file diff --git a/tests/certification/state/cockroachdb/cockroachdb_test.go b/tests/certification/state/cockroachdb/cockroachdb_test.go new file mode 100644 index 000000000..fbb7cda18 --- /dev/null +++ b/tests/certification/state/cockroachdb/cockroachdb_test.go @@ -0,0 +1,271 @@ +/* +Copyright 2021 The Dapr Authors +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package cockroachdb_test + +import ( + "fmt" + "strings" + "testing" + "time" + + "github.com/dapr/components-contrib/state" + state_cockroach "github.com/dapr/components-contrib/state/cockroachdb" + "github.com/dapr/components-contrib/tests/certification/embedded" + "github.com/dapr/components-contrib/tests/certification/flow" + "github.com/dapr/components-contrib/tests/certification/flow/dockercompose" + "github.com/dapr/components-contrib/tests/certification/flow/sidecar" + state_loader "github.com/dapr/dapr/pkg/components/state" + "github.com/dapr/dapr/pkg/runtime" + dapr_testing "github.com/dapr/dapr/pkg/testing" + goclient "github.com/dapr/go-sdk/client" + "github.com/dapr/kit/logger" + "github.com/google/uuid" + "github.com/stretchr/testify/assert" +) + +const ( + sidecarNamePrefix = "cockroach-sidecar-" + dockerComposeYAML = "docker-compose.yml" + stateStoreName = "statestore" + certificationTestPrefix = "stable-certification-" + stateStoreNoConfigError = "error saving state: rpc error: code = FailedPrecondition desc = state store is not configured" +) + +func TestCockroach(t *testing.T) { + log := logger.NewLogger("dapr.components") + + stateStore := state_cockroach.New(log).(*state_cockroach.CockroachDB) + ports, err := dapr_testing.GetFreePorts(3) + assert.NoError(t, err) + + stateRegistry := state_loader.NewRegistry() + stateRegistry.Logger = log + stateRegistry.RegisterComponent(func(l logger.Logger) state.Store { + return stateStore + }, "cockroachdb") + + currentGrpcPort := ports[0] + currentHTTPPort := ports[1] + + // Generate a unique value for the key being inserted to ensure no conflicts occur + keyOne := uuid.New() + keyOneString := strings.Replace(keyOne.String(), "-", "", -1) + + basicTest := func(ctx flow.Context) error { + client, err := goclient.NewClientWithPort(fmt.Sprint(currentGrpcPort)) + if err != nil { + panic(err) + } + defer client.Close() + + err = stateStore.Ping() + assert.Equal(t, nil, err) + + err = client.SaveState(ctx, stateStoreName, certificationTestPrefix+"key1", []byte("certificationdata"), nil) + assert.NoError(t, err) + + // get state + item, err := client.GetState(ctx, stateStoreName, certificationTestPrefix+"key1", nil) + assert.NoError(t, err) + assert.Equal(t, "certificationdata", string(item.Value)) + + errUpdate := client.SaveState(ctx, stateStoreName, certificationTestPrefix+"key1", []byte("cockroachCertUpdate"), nil) + assert.NoError(t, errUpdate) + item, errUpdatedGet := client.GetState(ctx, stateStoreName, certificationTestPrefix+"key1", nil) + assert.NoError(t, errUpdatedGet) + assert.Equal(t, "cockroachCertUpdate", string(item.Value)) + + // delete state + err = client.DeleteState(ctx, stateStoreName, certificationTestPrefix+"key1", nil) + assert.NoError(t, err) + + // get state + item, errUpdatedGet = client.GetState(ctx, stateStoreName, certificationTestPrefix+"key1", nil) + assert.NoError(t, errUpdatedGet) + assert.Equal(t, []byte(nil), item.Value) + return nil + } + + // Check if TCP port is actually open + testGetAfterCockroachdbRestart := func(ctx flow.Context) error { + client, err := goclient.NewClientWithPort(fmt.Sprint(currentGrpcPort)) + if err != nil { + panic(err) + } + defer client.Close() + + err = stateStore.Ping() + assert.Equal(t, nil, err) + + resp, err := stateStore.Get(&state.GetRequest{ + Key: keyOneString, + }) + assert.NoError(t, err) + assert.Equal(t, "2", *resp.ETag) // 2 is returned since the previous etag value of "1" was incremented by 1 when the update occurred + assert.Equal(t, "\"Overwrite Success\"", string(resp.Data)) + + return nil + } + + //ETag test + eTagTest := func(ctx flow.Context) error { + etag1 := "1" + etag100 := "100" + + // Setting with nil etag will insert an item with an etag value of 1 unless there is a conflict + err := stateStore.Set(&state.SetRequest{ + Key: keyOneString, + Value: "v1", + }) + assert.NoError(t, err) + + // Setting with an etag wil do an update, not an insert so an error is expected since the etag of 100 is not present + err = stateStore.Set(&state.SetRequest{ + Key: keyOneString, + Value: "v3", + ETag: &etag100, + }) + assert.Equal(t, fmt.Errorf("no item was updated"), err) + + resp, err := stateStore.Get(&state.GetRequest{ + Key: keyOneString, + }) + assert.NoError(t, err) + assert.Equal(t, etag1, *resp.ETag) //1 is returned since the default when the new data is written is a value of 1 + assert.Equal(t, "\"v1\"", string(resp.Data)) //v1 is returned since it was the only item successfully inserted with the key of keyOneString + + // This will update the value stored in key K with "Overwrite Success" since the previously created etag has a value of 1 + // It will also increment the etag stored by a value of 1 + err = stateStore.Set(&state.SetRequest{ + Key: keyOneString, + Value: "Overwrite Success", + ETag: &etag1, + }) + assert.NoError(t, err) + + resp, err = stateStore.Get(&state.GetRequest{ + Key: keyOneString, + }) + assert.NoError(t, err) + assert.Equal(t, "2", *resp.ETag) //2 is returned since the previous etag value of "1" was incremented by 1 when the update occurred + assert.Equal(t, "\"Overwrite Success\"", string(resp.Data)) + + return nil + } + + // Transaction related test - also for Multi + transactionsTest := func(ctx flow.Context) error { + + // Set state to allow for a delete operation inside the multi list + err = stateStore.Set(&state.SetRequest{Key: certificationTestPrefix + "key1", Value: []byte("certificationdata")}) + assert.NoError(t, err) + + // get state + item, errUpdatedGet := stateStore.Get(&state.GetRequest{Key: certificationTestPrefix + "key1"}) + assert.NoError(t, errUpdatedGet) + assert.Equal(t, []byte("certificationdata"), item.Data) + + err = stateStore.Multi(&state.TransactionalStateRequest{ + Operations: []state.TransactionalStateOperation{ + { + Operation: state.Upsert, + Request: state.SetRequest{ + Key: "reqKey1", + Value: "reqVal1", + Metadata: map[string]string{}, + }, + }, + { + Operation: state.Upsert, + Request: state.SetRequest{ + Key: "reqKey2", + Value: "reqVal2", + Metadata: map[string]string{}, + }, + }, + { + Operation: state.Upsert, + Request: state.SetRequest{ + Key: "reqKey3", + Value: "reqVal3", + }, + }, + { + Operation: state.Upsert, + Request: state.SetRequest{ + Key: "reqKey1", + Value: "reqVal101", + Metadata: map[string]string{}, + }, + }, + { + Operation: state.Upsert, + Request: state.SetRequest{ + Key: "reqKey3", + Value: "reqVal103", + Metadata: map[string]string{}, + }, + }, + { + Operation: state.Delete, + Request: state.DeleteRequest{ + Key: certificationTestPrefix + "key1", + Metadata: map[string]string{}, + }, + }, + }, + }) + assert.Equal(t, nil, err) + + // get state + item, errUpdatedGet = stateStore.Get(&state.GetRequest{Key: certificationTestPrefix + "key1"}) + assert.NoError(t, errUpdatedGet) + assert.Equal(t, []byte(nil), item.Data) + + resp1, err := stateStore.Get(&state.GetRequest{ + Key: "reqKey1", + }) + assert.NoError(t, err) + assert.Equal(t, "2", *resp1.ETag) + assert.Equal(t, "\"reqVal101\"", string(resp1.Data)) + + resp3, err := stateStore.Get(&state.GetRequest{ + Key: "reqKey3", + }) + assert.NoError(t, err) + assert.Equal(t, "2", *resp3.ETag) + assert.Equal(t, "\"reqVal103\"", string(resp3.Data)) + return nil + } + + flow.New(t, "Connecting cockroachdb And Verifying majority of the tests here"). + Step(dockercompose.Run("cockroachdb", dockerComposeYAML)). + Step("Waiting for cockroachdb readiness", flow.Sleep(30*time.Second)). + Step(sidecar.Run(sidecarNamePrefix+"dockerDefault", + embedded.WithoutApp(), + embedded.WithDaprGRPCPort(currentGrpcPort), + embedded.WithDaprHTTPPort(currentHTTPPort), + embedded.WithComponentsPath("components/standard"), + runtime.WithStates(stateRegistry), + )). + Step("Run basic test", basicTest). + Step("Run eTag test", eTagTest). + Step("Run transactions test", transactionsTest). + Step("Stop cockroachdb server", dockercompose.Stop("cockroachdb", dockerComposeYAML, "cockroachdb")). + Step("Sleep after dockercompose stop", flow.Sleep(10*time.Second)). + Step("Start cockroachdb server", dockercompose.Start("cockroachdb", dockerComposeYAML, "cockroachdb")). + Step("wait for component to start", flow.Sleep(10*time.Second)). + Step("Get Values Saved Earlier And Not Expired, after cockroachdb restart", testGetAfterCockroachdbRestart). + Run() +} diff --git a/tests/certification/state/cockroachdb/components/standard/cockroachdb.yaml b/tests/certification/state/cockroachdb/components/standard/cockroachdb.yaml new file mode 100644 index 000000000..a1087752e --- /dev/null +++ b/tests/certification/state/cockroachdb/components/standard/cockroachdb.yaml @@ -0,0 +1,17 @@ +apiVersion: dapr.io/v1alpha1 +kind: Component +metadata: + name: statestore +spec: + type: state.cockroachdb + metadata: + - name: cockroachdbHost + value: localhost:26257 + - name: cockroachdbPassword + value: "" + - name: initTimeout + value: 5m + - name: timeout + value: 20s + - name: connectionString + value: "host=localhost user=root port=26257 connect_timeout=10 database=dapr_test" \ No newline at end of file diff --git a/tests/certification/state/cockroachdb/config.yaml b/tests/certification/state/cockroachdb/config.yaml new file mode 100644 index 000000000..6c95e632f --- /dev/null +++ b/tests/certification/state/cockroachdb/config.yaml @@ -0,0 +1,6 @@ +apiVersion: dapr.io/v1alpha1 +kind: Configuration +metadata: + name: keyvaultconfig +spec: + features: diff --git a/tests/certification/state/cockroachdb/docker-compose.yml b/tests/certification/state/cockroachdb/docker-compose.yml new file mode 100644 index 000000000..b8f3a7d27 --- /dev/null +++ b/tests/certification/state/cockroachdb/docker-compose.yml @@ -0,0 +1,21 @@ +version: '3.5' +services: + cockroachdb: + image: cockroachdb/cockroach:v21.2.3 + hostname: cockroachdb + command: start-single-node --cluster-name=single-node --logtostderr=WARNING --log-file-verbosity=WARNING --insecure + restart: always + security_opt: + - no-new-privileges + ports: + - "26257:26257" + + cockroachdb-init: + hostname: cockroachdb-init + image: timveil/cockroachdb-remote-client:latest + environment: + - COCKROACH_HOST=cockroachdb:26257 + - COCKROACH_INSECURE=true + - DATABASE_NAME=dapr_test + depends_on: + - cockroachdb diff --git a/tests/certification/state/cockroachdb/go.mod b/tests/certification/state/cockroachdb/go.mod new file mode 100644 index 000000000..9941f5365 --- /dev/null +++ b/tests/certification/state/cockroachdb/go.mod @@ -0,0 +1,146 @@ +module github.com/dapr/components-contrib/tests/certification/state/cockroachdb + +go 1.19 + +require ( + github.com/dapr/components-contrib v1.9.1 + github.com/dapr/components-contrib/tests/certification v0.0.0-20221111215803-c92827c3defc + github.com/dapr/dapr v1.9.4-0.20221121055721-6683f7582ac4 + github.com/dapr/go-sdk v1.6.0 + github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f + github.com/google/uuid v1.3.0 + github.com/stretchr/testify v1.8.1 +) + +require ( + contrib.go.opencensus.io/exporter/prometheus v0.4.2 // indirect + github.com/AdhityaRamadhanus/fasthttpcors v0.0.0-20170121111917-d4c07198763a // indirect + github.com/PuerkitoBio/purell v1.2.0 // indirect + github.com/andybalholm/brotli v1.0.4 // indirect + github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20220418222510-f25a4f6275ed // indirect + github.com/armon/go-metrics v0.4.1 // indirect + github.com/benbjohnson/clock v1.3.0 // indirect + github.com/beorn7/perks v1.0.1 // indirect + github.com/cenkalti/backoff v2.2.1+incompatible // indirect + github.com/cenkalti/backoff/v4 v4.1.3 // indirect + github.com/cespare/xxhash/v2 v2.1.2 // indirect + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/emicklei/go-restful/v3 v3.8.0 // indirect + github.com/evanphx/json-patch/v5 v5.6.0 // indirect + github.com/fasthttp/router v1.4.12 // indirect + github.com/fatih/color v1.13.0 // indirect + github.com/fsnotify/fsnotify v1.6.0 // indirect + github.com/ghodss/yaml v1.0.0 // indirect + github.com/go-kit/log v0.2.1 // indirect + github.com/go-logfmt/logfmt v0.5.1 // indirect + github.com/go-logr/logr v1.2.3 // indirect + github.com/go-logr/stdr v1.2.2 // indirect + github.com/go-openapi/jsonpointer v0.19.5 // indirect + github.com/go-openapi/jsonreference v0.19.5 // indirect + github.com/go-openapi/swag v0.19.14 // indirect + github.com/gogo/protobuf v1.3.2 // indirect + github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect + github.com/golang/mock v1.6.0 // indirect + github.com/golang/protobuf v1.5.2 // indirect + github.com/google/cel-go v0.12.5 // indirect + github.com/google/gnostic v0.5.7-v3refs // indirect + github.com/google/go-cmp v0.5.9 // indirect + github.com/google/gofuzz v1.2.0 // indirect + github.com/grandcat/zeroconf v1.0.0 // indirect + github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0 // indirect + github.com/hashicorp/consul/api v1.13.0 // indirect + github.com/hashicorp/errwrap v1.1.0 // indirect + github.com/hashicorp/go-cleanhttp v0.5.2 // indirect + github.com/hashicorp/go-hclog v1.3.1 // indirect + github.com/hashicorp/go-immutable-radix v1.3.1 // indirect + github.com/hashicorp/go-multierror v1.1.1 // indirect + github.com/hashicorp/go-rootcerts v1.0.2 // indirect + github.com/hashicorp/golang-lru v0.5.4 // indirect + github.com/hashicorp/serf v0.9.7 // indirect + github.com/imdario/mergo v0.3.12 // indirect + github.com/jackc/pgpassfile v1.0.0 // indirect + github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b // indirect + github.com/jackc/pgx/v5 v5.0.4 // indirect + github.com/jhump/protoreflect v1.13.0 // indirect + github.com/josharian/intern v1.0.0 // indirect + github.com/json-iterator/go v1.1.12 // indirect + github.com/klauspost/compress v1.15.11 // indirect + github.com/mailru/easyjson v0.7.7 // indirect + github.com/mattn/go-colorable v0.1.13 // indirect + github.com/mattn/go-isatty v0.0.16 // indirect + github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 // indirect + github.com/miekg/dns v1.1.50 // indirect + github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 // indirect + github.com/mitchellh/go-homedir v1.1.0 // indirect + github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 // indirect + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect + github.com/modern-go/reflect2 v1.0.2 // indirect + github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect + github.com/openzipkin/zipkin-go v0.4.1 // indirect + github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/prometheus/client_golang v1.13.0 // indirect + github.com/prometheus/client_model v0.3.0 // indirect + github.com/prometheus/common v0.37.0 // indirect + github.com/prometheus/procfs v0.8.0 // indirect + github.com/prometheus/statsd_exporter v0.22.7 // indirect + github.com/savsgio/gotils v0.0.0-20220530130905-52f3993e8d6d // indirect + github.com/sirupsen/logrus v1.9.0 // indirect + github.com/sony/gobreaker v0.5.0 // indirect + github.com/spf13/pflag v1.0.5 // indirect + github.com/stoewer/go-strcase v1.2.0 // indirect + github.com/stretchr/objx v0.5.0 // indirect + github.com/tidwall/transform v0.0.0-20201103190739-32f242e2dbde // indirect + github.com/valyala/bytebufferpool v1.0.0 // indirect + github.com/valyala/fasthttp v1.41.0 // indirect + go.opencensus.io v0.23.0 // indirect + go.opentelemetry.io/otel v1.11.1 // indirect + go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.11.1 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.11.1 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.11.1 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.11.1 // indirect + go.opentelemetry.io/otel/exporters/zipkin v1.11.1 // indirect + go.opentelemetry.io/otel/sdk v1.11.1 // indirect + go.opentelemetry.io/otel/trace v1.11.1 // indirect + go.opentelemetry.io/proto/otlp v0.19.0 // indirect + go.uber.org/atomic v1.10.0 // indirect + golang.org/x/crypto v0.1.0 // indirect + golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f // indirect + golang.org/x/mod v0.6.0 // indirect + golang.org/x/net v0.1.0 // indirect + golang.org/x/oauth2 v0.1.0 // indirect + golang.org/x/sync v0.1.0 // indirect + golang.org/x/sys v0.1.0 // indirect + golang.org/x/term v0.1.0 // indirect + golang.org/x/text v0.4.0 // indirect + golang.org/x/time v0.0.0-20220922220347-f3bd1da661af // indirect + golang.org/x/tools v0.2.0 // indirect + gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect + google.golang.org/appengine v1.6.7 // indirect + google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c // indirect + google.golang.org/grpc v1.50.1 // indirect + google.golang.org/protobuf v1.28.1 // indirect + gopkg.in/inf.v0 v0.9.1 // indirect + gopkg.in/yaml.v2 v2.4.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect + k8s.io/api v0.25.3 // indirect + k8s.io/apiextensions-apiserver v0.25.3 // indirect + k8s.io/apimachinery v0.25.3 // indirect + k8s.io/client-go v0.25.3 // indirect + k8s.io/component-base v0.25.3 // indirect + k8s.io/klog/v2 v2.80.1 // indirect + k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1 // indirect + k8s.io/utils v0.0.0-20221012122500-cfd413dd9e85 // indirect + sigs.k8s.io/controller-runtime v0.13.0 // indirect + sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 // indirect + sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect + sigs.k8s.io/yaml v1.3.0 // indirect +) + +replace github.com/dapr/components-contrib/tests/certification => ../../ + +// replace github.com/dapr/dapr => github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0 + +replace github.com/dapr/components-contrib => ../../../../ diff --git a/tests/certification/state/cockroachdb/go.sum b/tests/certification/state/cockroachdb/go.sum new file mode 100644 index 000000000..af8ef31de --- /dev/null +++ b/tests/certification/state/cockroachdb/go.sum @@ -0,0 +1,917 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= +cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= +cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= +cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= +cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= +cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= +cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= +cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= +cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= +cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= +cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= +cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= +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/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/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/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= +contrib.go.opencensus.io/exporter/prometheus v0.4.2 h1:sqfsYl5GIY/L570iT+l93ehxaWJs2/OwXtiWwew3oAg= +contrib.go.opencensus.io/exporter/prometheus v0.4.2/go.mod h1:dvEHbiKmgvbr5pjaF9fpw1KeYcjrnC1J8B+JKjsZyRQ= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +github.com/AdhityaRamadhanus/fasthttpcors v0.0.0-20170121111917-d4c07198763a h1:XVdatQFSP2YhJGjqLLIfW8QBk4loz/SCe/PxkXDiW+s= +github.com/AdhityaRamadhanus/fasthttpcors v0.0.0-20170121111917-d4c07198763a/go.mod h1:C0A1KeiVHs+trY6gUTPhhGammbrZ30ZfXRW/nuT7HLw= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/DATA-DOG/go-sqlmock v1.5.0 h1:Shsta01QNfFxHCfpW6YH2STWB0MudeXXEWMr20OEh60= +github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= +github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= +github.com/PuerkitoBio/purell v1.2.0 h1:/Jdm5QfyM8zdlqT6WVZU4cfP23sot6CEHA4CS49Ezig= +github.com/PuerkitoBio/purell v1.2.0/go.mod h1:OhLRTaaIzhvIyofkJfB24gokC7tM42Px5UhoT32THBk= +github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= +github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= +github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE= +github.com/andybalholm/brotli v1.0.4 h1:V7DdXeJtZscaqfNuAdSRuRFzuiKlHSC/Zh3zl9qY3JY= +github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= +github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= +github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20220418222510-f25a4f6275ed h1:ue9pVfIcP+QMEjfgo/Ez4ZjNZfonGgR6NgjMaJMu1Cg= +github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20220418222510-f25a4f6275ed/go.mod h1:F7bn7fEU90QkQ3tnmaTx3LTKLEDqnwWODIYppRQ5hnY= +github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= +github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= +github.com/armon/go-metrics v0.4.1 h1:hR91U9KYmb6bLBYLQjyM+3j+rcd/UhE+G78SFnF8gJA= +github.com/armon/go-metrics v0.4.1/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4= +github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= +github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= +github.com/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A= +github.com/benbjohnson/clock v1.3.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= +github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= +github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= +github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= +github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= +github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= +github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= +github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= +github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= +github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= +github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= +github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= +github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/dapr/dapr v1.9.4-0.20221121055721-6683f7582ac4 h1:WbME5tjM4LJybkpsgT9zpccX07N1cFhH2ShbeSUwynM= +github.com/dapr/dapr v1.9.4-0.20221121055721-6683f7582ac4/go.mod h1:noFtU2Oo1/YfAgiqbU1/JVG81+20b/mOs3Ziwq/fMrU= +github.com/dapr/go-sdk v1.6.0 h1:jg5A2khSCHF8bGZsig5RWN/gD0jjitszc2V6Uq2pPdY= +github.com/dapr/go-sdk v1.6.0/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= +github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= +github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f/go.mod h1:i9t09QZw346M2RbuK7oJhssOP0HCAQObz61U4SBNJSU= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= +github.com/emicklei/go-restful/v3 v3.8.0 h1:eCZ8ulSerjdAiaNpF7GxXIE7ZCMo1moN1qX+S609eVw= +github.com/emicklei/go-restful/v3 v3.8.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= +github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/evanphx/json-patch v0.5.2/go.mod h1:ZWS5hhDbVDyob71nXKNL0+PWn6ToqBHMikGIFbs31qQ= +github.com/evanphx/json-patch v4.12.0+incompatible h1:4onqiflcdA9EOZ4RxV643DvftH5pOlLGNtQ5lPWQu84= +github.com/evanphx/json-patch/v5 v5.6.0 h1:b91NhWfaz02IuVxO9faSllyAtNXHMPkC5J8sJCLunww= +github.com/evanphx/json-patch/v5 v5.6.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= +github.com/fasthttp/router v1.4.12 h1:QEgK+UKARaC1bAzJgnIhdUMay6nwp+YFq6VGPlyKN1o= +github.com/fasthttp/router v1.4.12/go.mod h1:41Qdc4Z4T2pWVVtATHCnoUnOtxdBoeKEYJTXhHwbxCQ= +github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= +github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= +github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= +github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= +github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= +github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= +github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= +github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU= +github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= +github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= +github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= +github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= +github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA= +github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= +github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= +github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= +github.com/go-logr/zapr v1.2.3 h1:a9vnzlIBPQBBkeaR9IuMUfmVOrQlkoC4YfPoFkX3T7A= +github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= +github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY= +github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= +github.com/go-openapi/jsonreference v0.19.5 h1:1WJP/wi4OjB4iV8KVbH73rQaoialJrqv8gitZLxGLtM= +github.com/go-openapi/jsonreference v0.19.5/go.mod h1:RdybgQwPxbL4UEjuAruzK1x3nE69AqPYEJeo/TWfEeg= +github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= +github.com/go-openapi/swag v0.19.14 h1:gm3vOOXfiuw5i9p5N9xJvfjvuofpyvLA9Wr6QfK5Fng= +github.com/go-openapi/swag v0.19.14/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= +github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/glog v1.0.0 h1:nfP3RFugxnNRyKgeWd4oI1nYvXpxrx8ck8ZrcizshdQ= +github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= +github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= +github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= +github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= +github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4= +github.com/google/cel-go v0.12.5 h1:DmzaiSgoaqGCjtpPQWl26/gND+yRpim56H1jCVev6d8= +github.com/google/cel-go v0.12.5/go.mod h1:Jk7ljRzLBhkmiAwBoUxB1sZSCVBAzkqPF25olK/iRDw= +github.com/google/gnostic v0.5.7-v3refs h1:FhTMOKj2VhjpouxvWJAV1TL304uMlb9zcDqkl6cEI54= +github.com/google/gnostic v0.5.7-v3refs/go.mod h1:73MKFl6jIHelAJNaBGFzt3SPtZULs9dYrGFt8OiIsHQ= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= +github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= +github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= +github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= +github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/grandcat/zeroconf v1.0.0 h1:uHhahLBKqwWBV6WZUDAT71044vwOTL+McW0mBJvo6kE= +github.com/grandcat/zeroconf v1.0.0/go.mod h1:lTKmG1zh86XyCoUeIHSA4FJMBwCJiQmGfcP2PdzytEs= +github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 h1:+9834+KizmvFV7pXQGSXQTsaWhq2GjuNUt0aUU0YBYw= +github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y= +github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0 h1:BZHcxBETFHIdVyhyEfOvn/RdU/QGdLI4y34qQGjGWO0= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0/go.mod h1:hgWBS7lorOAVIJEQMi4ZsPv9hVvWI6+ch50m39Pf2Ks= +github.com/hashicorp/consul/api v1.13.0 h1:2hnLQ0GjQvw7f3O61jMO8gbasZviZTrt9R8WzgiirHc= +github.com/hashicorp/consul/api v1.13.0/go.mod h1:ZlVrynguJKcYr54zGaDbaL3fOvKC9m72FhPvA8T35KQ= +github.com/hashicorp/consul/sdk v0.8.0 h1:OJtKBtEjboEZvG6AOUdh4Z1Zbyu0WcxQ0qatRrZHTVU= +github.com/hashicorp/consul/sdk v0.8.0/go.mod h1:GBvyrGALthsZObzUGsfgHZQDXjg4lOjagTIwIR1vPms= +github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= +github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= +github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= +github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= +github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= +github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= +github.com/hashicorp/go-hclog v1.3.1 h1:vDwF1DFNZhntP4DAjuTpOw3uEgMUpXh1pB5fW9DqHpo= +github.com/hashicorp/go-hclog v1.3.1/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= +github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJFeZnpfm2KLowc= +github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= +github.com/hashicorp/go-msgpack v1.1.5 h1:9byZdVjKTe5mce63pRVNP1L7UAmdHOTEMGehn6KvJWs= +github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= +github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= +github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= +github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= +github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= +github.com/hashicorp/go-rootcerts v1.0.2 h1:jzhAVGtqPKbwpyCPELlgNWhE1znq+qwJtW5Oi2viEzc= +github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= +github.com/hashicorp/go-sockaddr v1.0.0 h1:GeH6tui99pF4NJgfnhp+L6+FfobzVW3Ah46sLo0ICXs= +github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= +github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= +github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.3 h1:2gKiV6YVmrJ1i2CKKa9obLvRieoRGviZFL26PcT/Co8= +github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc= +github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= +github.com/hashicorp/mdns v1.0.4/go.mod h1:mtBihi+LeNXGtG8L9dX59gAEa12BDtBQSp4v/YAJqrc= +github.com/hashicorp/memberlist v0.3.0 h1:8+567mCcFDnS5ADl7lrpxPMWiFCElyUEeW0gtj34fMA= +github.com/hashicorp/memberlist v0.3.0/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= +github.com/hashicorp/serf v0.9.6/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= +github.com/hashicorp/serf v0.9.7 h1:hkdgbqizGQHuU5IPqYM1JdSMV8nKfpuOnZYXssk9muY= +github.com/hashicorp/serf v0.9.7/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= +github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/imdario/mergo v0.3.12 h1:b6R2BslTbIEToALKP7LxUvijTsNI9TAe80pLWN2g/HU= +github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= +github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM= +github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= +github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b h1:C8S2+VttkHFdOOCXJe+YGfa4vHYwlt4Zx+IVXQ97jYg= +github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b/go.mod h1:vsD4gTJCa9TptPL8sPkXrLZ+hDuNrZCnj29CQpr4X1E= +github.com/jackc/pgx/v5 v5.0.4 h1:r5O6y84qHX/z/HZV40JBdx2obsHz7/uRj5b+CcYEdeY= +github.com/jackc/pgx/v5 v5.0.4/go.mod h1:U0ynklHtgg43fue9Ly30w3OCSTDPlXjig9ghrNGaguQ= +github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= +github.com/jhump/gopoet v0.0.0-20190322174617-17282ff210b3/go.mod h1:me9yfT6IJSlOL3FCfrg+L6yzUEZ+5jW6WHt4Sk+UPUI= +github.com/jhump/gopoet v0.1.0/go.mod h1:me9yfT6IJSlOL3FCfrg+L6yzUEZ+5jW6WHt4Sk+UPUI= +github.com/jhump/goprotoc v0.5.0/go.mod h1:VrbvcYrQOrTi3i0Vf+m+oqQWk9l72mjkJCYo7UvLHRQ= +github.com/jhump/protoreflect v1.11.0/go.mod h1:U7aMIjN0NWq9swDP7xDdoMfRHb35uiuTd3Z9nFXJf5E= +github.com/jhump/protoreflect v1.13.0 h1:zrrZqa7JAc2YGgPSzZZkmUXJ5G6NRPdxOg/9t7ISImA= +github.com/jhump/protoreflect v1.13.0/go.mod h1:JytZfP5d0r8pVNLZvai7U/MCuTWITgrI4tTg7puQFKI= +github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= +github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= +github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= +github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= +github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= +github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= +github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= +github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= +github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/compress v1.15.0/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= +github.com/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= +github.com/klauspost/compress v1.15.11 h1:Lcadnb3RKGin4FYM/orgq0qde+nc15E5Cbqg4B9Sx9c= +github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +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.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= +github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= +github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= +github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= +github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= +github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= +github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= +github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI= +github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= +github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= +github.com/miekg/dns v1.1.27/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM= +github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= +github.com/miekg/dns v1.1.50 h1:DQUfb9uc6smULcREF09Uc+/Gd46YWqJd5DbpPE9xkcA= +github.com/miekg/dns v1.1.50/go.mod h1:e3IlAVfNqAllflbibAZEWOXOQ+Ynzk/dDozDxY7XnME= +github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 h1:lYpkrQH5ajf0OXOcUbGjvZxxijuBwbbmlSxLiuofa+g= +github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ= +github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI= +github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= +github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-testing-interface v1.0.0 h1:fzU/JVNcaqHQEcVFAKeR41fkiLdIPrefOvVG1VZ96U0= +github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= +github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 h1:BpfhmLKZf+SjVanKKhCgf3bg+511DmU9eDQTen7LLbY= +github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= +github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= +github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= +github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= +github.com/onsi/ginkgo/v2 v2.1.6 h1:Fx2POJZfKRQcM1pH49qSZiYeu319wji004qX+GDovrU= +github.com/onsi/gomega v1.20.1 h1:PA/3qinGoukvymdIDV8pii6tiZgC8kbmJO6Z5+b002Q= +github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/openzipkin/zipkin-go v0.4.1 h1:kNd/ST2yLLWhaWrkgchya40TJabe8Hioj9udfPcEO5A= +github.com/openzipkin/zipkin-go v0.4.1/go.mod h1:qY0VqDSN1pOBN94dBc6w2GJlWLiovAyg7Qt6/I9HecM= +github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= +github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 h1:Ii+DKncOVM8Cu1Hc+ETb5K+23HdAMvESYE3ZJ5b5cMI= +github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE= +github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= +github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= +github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= +github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= +github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= +github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= +github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= +github.com/prometheus/client_golang v1.12.2/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= +github.com/prometheus/client_golang v1.13.0 h1:b71QUfeo5M8gq2+evJdTPfZhYMAU0uKPkyPJ7TPsloU= +github.com/prometheus/client_golang v1.13.0/go.mod h1:vTeo+zgvILHsnnj/39Ou/1fPN5nJFOEMgftOUOmlvYQ= +github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.3.0 h1:UBgGFHqYdG/TPFD1B1ogZywDqEkwp3fBMvqdiQ7Xew4= +github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w= +github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= +github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= +github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= +github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= +github.com/prometheus/common v0.35.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= +github.com/prometheus/common v0.37.0 h1:ccBbHCgIiT9uSoFY0vX8H3zsNR5eLt17/RQLUvn8pXE= +github.com/prometheus/common v0.37.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= +github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= +github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= +github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= +github.com/prometheus/procfs v0.8.0 h1:ODq8ZFEaYeCaZOJlZZdJA2AbQR98dSHSM1KW/You5mo= +github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4= +github.com/prometheus/statsd_exporter v0.22.7 h1:7Pji/i2GuhK6Lu7DHrtTkFmNBCudCPT1pX2CziuyQR0= +github.com/prometheus/statsd_exporter v0.22.7/go.mod h1:N/TevpjkIh9ccs6nuzY3jQn9dFqnUakOjnEuMPJJJnI= +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/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= +github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= +github.com/savsgio/gotils v0.0.0-20220530130905-52f3993e8d6d h1:Q+gqLBOPkFGHyCJxXMRqtUgUbTjI8/Ze8vu8GGyNFwo= +github.com/savsgio/gotils v0.0.0-20220530130905-52f3993e8d6d/go.mod h1:Gy+0tqhJvgGlqnTF8CVGP0AaGRjwBtXs/a5PA0Y3+A4= +github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I= +github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= +github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= +github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= +github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= +github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= +github.com/sony/gobreaker v0.5.0 h1:dRCvqm0P490vZPmy7ppEk2qCnCieBooFJ+YoXGYB+yg= +github.com/sony/gobreaker v0.5.0/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/stoewer/go-strcase v1.2.0 h1:Z2iHWqGXH00XYgqDmNgQbIBxf3wrNq0F3feEy0ainaU= +github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stvp/go-udp-testing v0.0.0-20201019212854-469649b16807/go.mod h1:7jxmlfBCDBXRzr0eAQJ48XC1hBu1np4CS5+cHEYfwpc= +github.com/tidwall/transform v0.0.0-20201103190739-32f242e2dbde h1:AMNpJRc7P+GTwVbl8DkK2I9I8BBUzNiHuH/tlxrpan0= +github.com/tidwall/transform v0.0.0-20201103190739-32f242e2dbde/go.mod h1:MvrEmduDUz4ST5pGZ7CABCnOU5f3ZiOAZzT6b1A6nX8= +github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= +github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= +github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= +github.com/valyala/fasthttp v1.40.0/go.mod h1:t/G+3rLek+CyY9bnIE+YlMRddxVAAGjhxndDB4i4C0I= +github.com/valyala/fasthttp v1.41.0 h1:zeR0Z1my1wDHTRiamBCXVglQdbUwgb9uWG3k1HQz6jY= +github.com/valyala/fasthttp v1.41.0/go.mod h1:f6VbjjoI3z1NDOZOv17o6RvtRSWxC77seBFc2uWtgiY= +github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7FwZEA7Ioqkc= +github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= +go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= +go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.23.0 h1:gqCw0LfLxScz8irSi8exQc7fyQ0fKQU/qnC/X8+V/1M= +go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= +go.opentelemetry.io/otel v1.11.1 h1:4WLLAmcfkmDk2ukNXJyq3/kiz/3UzCaYq6PskJsaou4= +go.opentelemetry.io/otel v1.11.1/go.mod h1:1nNhXBbWSD0nsL38H6btgnFN2k4i0sNLHNNMZMSbUGE= +go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.11.1 h1:X2GndnMCsUPh6CiY2a+frAbNsXaPLbB0soHRYhAZ5Ig= +go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.11.1/go.mod h1:i8vjiSzbiUC7wOQplijSXMYUpNM93DtlS5CbUT+C6oQ= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.11.1 h1:MEQNafcNCB0uQIti/oHgU7CZpUMYQ7qigBwMVKycHvc= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.11.1/go.mod h1:19O5I2U5iys38SsmT2uDJja/300woyzE1KPIQxEUBUc= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.11.1 h1:LYyG/f1W/jzAix16jbksJfMQFpOH/Ma6T639pVPMgfI= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.11.1/go.mod h1:QrRRQiY3kzAoYPNLP0W/Ikg0gR6V3LMc+ODSxr7yyvg= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.11.1 h1:tFl63cpAAcD9TOU6U8kZU7KyXuSRYAZlbx1C61aaB74= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.11.1/go.mod h1:X620Jww3RajCJXw/unA+8IRTgxkdS7pi+ZwK9b7KUJk= +go.opentelemetry.io/otel/exporters/zipkin v1.11.1 h1:JlJ3/oQoyqlrPDCfsSVFcHgGeHvZq+hr1VPWtiYCXTo= +go.opentelemetry.io/otel/exporters/zipkin v1.11.1/go.mod h1:T4S6aVwIS1+MHA+dJHCcPROtZe6ORwnv5vMKPRapsFw= +go.opentelemetry.io/otel/sdk v1.11.1 h1:F7KmQgoHljhUuJyA+9BiU+EkJfyX5nVVF4wyzWZpKxs= +go.opentelemetry.io/otel/sdk v1.11.1/go.mod h1:/l3FE4SupHJ12TduVjUkZtlfFqDCQJlOlithYrdktys= +go.opentelemetry.io/otel/trace v1.11.1 h1:ofxdnzsNrGBYXbP7t7zpUK281+go5rF7dvdIZXF8gdQ= +go.opentelemetry.io/otel/trace v1.11.1/go.mod h1:f/Q9G7vzk5u91PhbmKbg1Qn0rzH1LJ4vbPHFGkTPtOk= +go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= +go.opentelemetry.io/proto/otlp v0.19.0 h1:IVN6GR+mhC4s5yfcTbmzHYODqvWAp3ZedA2SJPI1Nnw= +go.opentelemetry.io/proto/otlp v0.19.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= +go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= +go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= +go.uber.org/goleak v1.2.0 h1:xqgm/S+aQvhWFTtR0XK3Jvg7z8kGV8P4X14IzwN3Eqk= +go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= +go.uber.org/multierr v1.7.0 h1:zaiO/rmgFjbmCXdSYJWQcdvOCsthmdaHfr3Gm2Kx4Ec= +go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +go.uber.org/zap v1.21.0 h1:WefMeulhovoZ2sYXz7st6K0sLj7bBhpiFaud4r4zST8= +golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.1.0 h1:MDRAIl0xIo9Io2xV565hzXHw3zVseKrJKodhohM5CjU= +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= +golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= +golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= +golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= +golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= +golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f h1:Al51T6tzvuh3oiwX11vex3QgJ2XTedFPGmbEVh8cdoc= +golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= +golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= +golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= +golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= +golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= +golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= +golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +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-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8= +golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210726213435-c6fcb2dbf985/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220906165146-f3363e06e74c/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= +golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.1.0 h1:isLCZuhj4v+tYv7eskaN4v/TM+A1begWWgyVJDdl1+Y= +golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A= +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= +golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +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.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= +golang.org/x/sync v0.1.0/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= +golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +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-20220708085239-5a0f0661e09d/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-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220908164124-27713097b956/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-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.1.0 h1:g6Z6vPFA9dYBAF7DWcH6sCcOntplXsDKcliusYijMlw= +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= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3/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/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-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20220922220347-f3bd1da661af h1:Yx9k8YCG3dvF87UAn2tu2HQLf2dt/eR1bXxpLMWeH+Y= +golang.org/x/time v0.0.0-20220922220347-f3bd1da661af/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191216052735-49a3e744a425/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +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= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +gomodules.xyz/jsonpatch/v2 v2.2.0 h1:4pT439QV83L+G9FkcCriY6EkpcK6r6bK+A5FBUMI7qY= +gomodules.xyz/jsonpatch/v2 v2.2.0/go.mod h1:WXp+iVDkoLQqPudfQ9GBlwB2eZ5DKOnjQZCYdOS8GPY= +google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= +google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= +google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= +google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= +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= +google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= +google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= +google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= +google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= +google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201019141844-1ed22bb0c154/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c h1:QgY/XxIAIeccR+Ca/rDdKubLIU9rcJ3xfy1DC/Wd2Oo= +google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c/go.mod h1:CGI5F/G+E5bKwmfYo09AXuVN4dD894kIKUFmVbP2/Fo= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= +google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= +google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= +google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= +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/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= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= +google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= +google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/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/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= +gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= +honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +k8s.io/api v0.25.3 h1:Q1v5UFfYe87vi5H7NU0p4RXC26PPMT8KOpr1TLQbCMQ= +k8s.io/api v0.25.3/go.mod h1:o42gKscFrEVjHdQnyRenACrMtbuJsVdP+WVjqejfzmI= +k8s.io/apiextensions-apiserver v0.25.3 h1:bfI4KS31w2f9WM1KLGwnwuVlW3RSRPuIsfNF/3HzR0k= +k8s.io/apiextensions-apiserver v0.25.3/go.mod h1:ZJqwpCkxIx9itilmZek7JgfUAM0dnTsA48I4krPqRmo= +k8s.io/apimachinery v0.25.3 h1:7o9ium4uyUOM76t6aunP0nZuex7gDf8VGwkR5RcJnQc= +k8s.io/apimachinery v0.25.3/go.mod h1:jaF9C/iPNM1FuLl7Zuy5b9v+n35HGSh6AQ4HYRkCqwo= +k8s.io/client-go v0.25.3 h1:oB4Dyl8d6UbfDHD8Bv8evKylzs3BXzzufLiO27xuPs0= +k8s.io/client-go v0.25.3/go.mod h1:t39LPczAIMwycjcXkVc+CB+PZV69jQuNx4um5ORDjQA= +k8s.io/component-base v0.25.3 h1:UrsxciGdrCY03ULT1h/S/gXFCOPnLhUVwSyx+hM/zq4= +k8s.io/component-base v0.25.3/go.mod h1:WYoS8L+IlTZgU7rhAl5Ctpw0WdMxDfCC5dkxcEFa/TI= +k8s.io/klog/v2 v2.80.1 h1:atnLQ121W371wYYFawwYx1aEY2eUfs4l3J72wtgAwV4= +k8s.io/klog/v2 v2.80.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= +k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1 h1:MQ8BAZPZlWk3S9K4a9NCkIFQtZShWqoha7snGixVgEA= +k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1/go.mod h1:C/N6wCaBHeBHkHUesQOQy2/MZqGgMAFPqGsGQLdbZBU= +k8s.io/utils v0.0.0-20221012122500-cfd413dd9e85 h1:cTdVh7LYu82xeClmfzGtgyspNh6UxpwLWGi8R4sspNo= +k8s.io/utils v0.0.0-20221012122500-cfd413dd9e85/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= +rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= +sigs.k8s.io/controller-runtime v0.13.0 h1:iqa5RNciy7ADWnIc8QxCbOX5FEKVR3uxVxKHRMc2WIQ= +sigs.k8s.io/controller-runtime v0.13.0/go.mod h1:Zbz+el8Yg31jubvAEyglRZGdLAjplZl+PgtYNI6WNTI= +sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 h1:iXTIw73aPyC+oRdyqqvVJuloN1p0AC/kzH07hu3NE+k= +sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= +sigs.k8s.io/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE= +sigs.k8s.io/structured-merge-diff/v4 v4.2.3/go.mod h1:qjx8mGObPmV2aSZepjQjbmb2ihdVs8cGKBraizNC69E= +sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= +sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= diff --git a/tests/certification/state/memcached/go.mod b/tests/certification/state/memcached/go.mod index 0aca607b4..60d0c9482 100644 --- a/tests/certification/state/memcached/go.mod +++ b/tests/certification/state/memcached/go.mod @@ -5,7 +5,7 @@ go 1.18 require ( github.com/dapr/components-contrib v1.9.1-0.20221025205611-e38369028650 github.com/dapr/components-contrib/tests/certification v0.0.0-20220526162429-d03aeba3e0d6 - github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e + github.com/dapr/dapr v1.9.4-0.20221121055721-6683f7582ac4 github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f github.com/stretchr/testify v1.8.1 @@ -75,6 +75,7 @@ require ( github.com/modern-go/reflect2 v1.0.2 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/openzipkin/zipkin-go v0.4.1 // indirect + github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/prometheus/client_golang v1.13.0 // indirect diff --git a/tests/certification/state/memcached/go.sum b/tests/certification/state/memcached/go.sum index 16bbfd64f..1f7d070ad 100644 --- a/tests/certification/state/memcached/go.sum +++ b/tests/certification/state/memcached/go.sum @@ -381,6 +381,7 @@ github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FI github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 h1:Ii+DKncOVM8Cu1Hc+ETb5K+23HdAMvESYE3ZJ5b5cMI= +github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= diff --git a/tests/certification/state/mongodb/go.mod b/tests/certification/state/mongodb/go.mod index 319c56b9c..a71aa5812 100644 --- a/tests/certification/state/mongodb/go.mod +++ b/tests/certification/state/mongodb/go.mod @@ -5,7 +5,7 @@ go 1.19 require ( github.com/dapr/components-contrib v1.9.1-0.20221025205611-e38369028650 github.com/dapr/components-contrib/tests/certification v0.0.0-20220526162429-d03aeba3e0d6 - github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e + github.com/dapr/dapr v1.9.4-0.20221121055721-6683f7582ac4 github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f github.com/stretchr/testify v1.8.1 @@ -76,6 +76,7 @@ require ( github.com/montanaflynn/stats v0.6.6 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/openzipkin/zipkin-go v0.4.1 // indirect + github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/prometheus/client_golang v1.13.0 // indirect diff --git a/tests/certification/state/mongodb/go.sum b/tests/certification/state/mongodb/go.sum index c4ec85592..606f14894 100644 --- a/tests/certification/state/mongodb/go.sum +++ b/tests/certification/state/mongodb/go.sum @@ -387,6 +387,7 @@ github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FI github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 h1:Ii+DKncOVM8Cu1Hc+ETb5K+23HdAMvESYE3ZJ5b5cMI= +github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= diff --git a/tests/certification/state/mysql/go.mod b/tests/certification/state/mysql/go.mod index acc2457b8..9cd3102df 100644 --- a/tests/certification/state/mysql/go.mod +++ b/tests/certification/state/mysql/go.mod @@ -5,7 +5,7 @@ go 1.19 require ( github.com/dapr/components-contrib v1.9.1-0.20221025205611-e38369028650 github.com/dapr/components-contrib/tests/certification v0.0.0-20220526162429-d03aeba3e0d6 - github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e + github.com/dapr/dapr v1.9.4-0.20221121055721-6683f7582ac4 github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f github.com/stretchr/testify v1.8.1 @@ -75,6 +75,7 @@ require ( github.com/modern-go/reflect2 v1.0.2 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/openzipkin/zipkin-go v0.4.1 // indirect + github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/prometheus/client_golang v1.13.0 // indirect diff --git a/tests/certification/state/mysql/go.sum b/tests/certification/state/mysql/go.sum index fdf8cd1b8..9f63889be 100644 --- a/tests/certification/state/mysql/go.sum +++ b/tests/certification/state/mysql/go.sum @@ -382,6 +382,7 @@ github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FI github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 h1:Ii+DKncOVM8Cu1Hc+ETb5K+23HdAMvESYE3ZJ5b5cMI= +github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= diff --git a/tests/certification/state/postgresql/go.mod b/tests/certification/state/postgresql/go.mod index c362c0938..41af005a3 100644 --- a/tests/certification/state/postgresql/go.mod +++ b/tests/certification/state/postgresql/go.mod @@ -5,7 +5,7 @@ go 1.19 require ( github.com/dapr/components-contrib v1.9.1-0.20221025205611-e38369028650 github.com/dapr/components-contrib/tests/certification v0.0.0-20220526162429-d03aeba3e0d6 - github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e + github.com/dapr/dapr v1.9.4-0.20221121055721-6683f7582ac4 github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f github.com/stretchr/testify v1.8.1 @@ -77,6 +77,7 @@ require ( github.com/modern-go/reflect2 v1.0.2 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/openzipkin/zipkin-go v0.4.1 // indirect + github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/prometheus/client_golang v1.13.0 // indirect diff --git a/tests/certification/state/postgresql/go.sum b/tests/certification/state/postgresql/go.sum index 0ba906b62..8254bf310 100644 --- a/tests/certification/state/postgresql/go.sum +++ b/tests/certification/state/postgresql/go.sum @@ -386,6 +386,7 @@ github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FI github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 h1:Ii+DKncOVM8Cu1Hc+ETb5K+23HdAMvESYE3ZJ5b5cMI= +github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= diff --git a/tests/certification/state/postgresql/postgresql_test.go b/tests/certification/state/postgresql/postgresql_test.go index 7868fa5fb..29ccdb61b 100644 --- a/tests/certification/state/postgresql/postgresql_test.go +++ b/tests/certification/state/postgresql/postgresql_test.go @@ -184,7 +184,8 @@ func TestPostgreSQL(t *testing.T) { }, }, }) - assert.Equal(t, nil, err) + require.NoError(t, err) + resp1, err := stateStore.Get(&state.GetRequest{ Key: "reqKey1", }) @@ -206,7 +207,7 @@ func TestPostgreSQL(t *testing.T) { // save state _, err = client.GetState(ctx, stateStoreName, certificationTestPrefix+"key1", nil) - assert.NoError(t, err) + require.NoError(t, err) return nil } diff --git a/tests/certification/state/redis/go.mod b/tests/certification/state/redis/go.mod index 919e983e8..fe78b1bca 100644 --- a/tests/certification/state/redis/go.mod +++ b/tests/certification/state/redis/go.mod @@ -5,7 +5,7 @@ go 1.19 require ( github.com/dapr/components-contrib v1.9.1-0.20221025205611-e38369028650 github.com/dapr/components-contrib/tests/certification v0.0.0-20220526162429-d03aeba3e0d6 - github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e + github.com/dapr/dapr v1.9.4-0.20221121055721-6683f7582ac4 github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f github.com/stretchr/testify v1.8.1 @@ -77,6 +77,7 @@ require ( github.com/modern-go/reflect2 v1.0.2 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/openzipkin/zipkin-go v0.4.1 // indirect + github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/prometheus/client_golang v1.13.0 // indirect diff --git a/tests/certification/state/redis/go.sum b/tests/certification/state/redis/go.sum index eb9fe226b..657d19e28 100644 --- a/tests/certification/state/redis/go.sum +++ b/tests/certification/state/redis/go.sum @@ -385,6 +385,7 @@ github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FI github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 h1:Ii+DKncOVM8Cu1Hc+ETb5K+23HdAMvESYE3ZJ5b5cMI= +github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= diff --git a/tests/certification/state/sqlserver/go.mod b/tests/certification/state/sqlserver/go.mod index a7372193c..3cb0d6b4e 100644 --- a/tests/certification/state/sqlserver/go.mod +++ b/tests/certification/state/sqlserver/go.mod @@ -5,7 +5,7 @@ go 1.19 require ( github.com/dapr/components-contrib v1.9.1-0.20221025205611-e38369028650 github.com/dapr/components-contrib/tests/certification v0.0.0-20211130185200-4918900c09e1 - github.com/dapr/dapr v1.9.1-0.20221101183153-7e3635f1491e + github.com/dapr/dapr v1.9.4-0.20221121055721-6683f7582ac4 github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f github.com/stretchr/testify v1.8.1 @@ -77,6 +77,7 @@ require ( github.com/modern-go/reflect2 v1.0.2 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/openzipkin/zipkin-go v0.4.1 // indirect + github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/prometheus/client_golang v1.13.0 // indirect diff --git a/tests/certification/state/sqlserver/go.sum b/tests/certification/state/sqlserver/go.sum index 0b3a8dd5e..d6c5d2e07 100644 --- a/tests/certification/state/sqlserver/go.sum +++ b/tests/certification/state/sqlserver/go.sum @@ -390,6 +390,7 @@ github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FI github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 h1:Ii+DKncOVM8Cu1Hc+ETb5K+23HdAMvESYE3ZJ5b5cMI= +github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE= github.com/pkg/browser v0.0.0-20180916011732-0a3d74bf9ce4/go.mod h1:4OwLy04Bl9Ef3GJJCoec+30X3LQs/0/m4HFRt/2LUSA= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= From 47b0d7367657cd7ee6d41e58bcbcfa04574d8201 Mon Sep 17 00:00:00 2001 From: thielepaul Date: Tue, 29 Nov 2022 19:06:20 +0100 Subject: [PATCH 76/87] Add mqtt retained information to pubsub message metadata (#2299) Signed-off-by: Paul Thiele Signed-off-by: Paul Thiele Co-authored-by: Bernd Verst <4535280+berndverst@users.noreply.github.com> Co-authored-by: Alessandro (Ale) Segala <43508+ItalyPaleAle@users.noreply.github.com> Co-authored-by: Dapr Bot <56698301+dapr-bot@users.noreply.github.com> --- pubsub/mqtt/mqtt.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/pubsub/mqtt/mqtt.go b/pubsub/mqtt/mqtt.go index f3c12f769..fec6dc77b 100644 --- a/pubsub/mqtt/mqtt.go +++ b/pubsub/mqtt/mqtt.go @@ -22,6 +22,7 @@ import ( "fmt" "net/url" "regexp" + "strconv" "strings" "sync" "time" @@ -276,8 +277,9 @@ func (m *mqttPubSub) onMessage(ctx context.Context) func(client mqtt.Client, mqt }() msg := pubsub.NewMessage{ - Topic: mqttMsg.Topic(), - Data: mqttMsg.Payload(), + Topic: mqttMsg.Topic(), + Data: mqttMsg.Payload(), + Metadata: map[string]string{"retained": strconv.FormatBool(mqttMsg.Retained())}, } topicHandler := m.handlerForTopic(msg.Topic) From 9e9d7086e171ee0c99ba295ddf445287effd62f7 Mon Sep 17 00:00:00 2001 From: John Ewart Date: Tue, 29 Nov 2022 13:36:49 -0800 Subject: [PATCH 77/87] Allow HTTP binding to not error on non-200 responses Signed-off-by: John Ewart --- bindings/http/http.go | 30 ++++++++++++++---- bindings/http/http_test.go | 63 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 87 insertions(+), 6 deletions(-) diff --git a/bindings/http/http.go b/bindings/http/http.go index fac33aacd..ccf629f6d 100644 --- a/bindings/http/http.go +++ b/bindings/http/http.go @@ -28,6 +28,7 @@ import ( "github.com/mitchellh/mapstructure" "github.com/dapr/components-contrib/bindings" + "github.com/dapr/components-contrib/internal/utils" "github.com/dapr/kit/logger" ) @@ -35,10 +36,10 @@ import ( // //revive:disable-next-line type HTTPSource struct { - metadata httpMetadata - client *http.Client - - logger logger.Logger + metadata httpMetadata + client *http.Client + errorIfNot2XX bool + logger logger.Logger } type httpMetadata struct { @@ -70,6 +71,13 @@ func (h *HTTPSource) Init(metadata bindings.Metadata) error { Transport: netTransport, } + if val, ok := metadata.Properties["errorIfNot2XX"]; ok { + h.errorIfNot2XX = utils.IsTruthy(val) + } else { + // Default behavior + h.errorIfNot2XX = true + } + return nil } @@ -91,6 +99,9 @@ func (h *HTTPSource) Operations() []bindings.OperationKind { // Invoke performs an HTTP request to the configured HTTP endpoint. func (h *HTTPSource) Invoke(ctx context.Context, req *bindings.InvokeRequest) (*bindings.InvokeResponse, error) { u := h.metadata.URL + + errorIfNot2XX := h.errorIfNot2XX // Default to the component config (default is true) + if req.Metadata != nil { if path, ok := req.Metadata["path"]; ok { // Simplicity and no "../../.." type exploits. @@ -99,6 +110,13 @@ func (h *HTTPSource) Invoke(ctx context.Context, req *bindings.InvokeRequest) (* return nil, fmt.Errorf("invalid path: %s", path) } } + + if _, ok := req.Metadata["errorIfNot2XX"]; ok { + errorIfNot2XX = utils.IsTruthy(req.Metadata["errorIfNot2XX"]) + } + } else { + // Prevent things below from failing if req.Metadata is nil. + req.Metadata = make(map[string]string) } var body io.Reader @@ -164,8 +182,8 @@ func (h *HTTPSource) Invoke(ctx context.Context, req *bindings.InvokeRequest) (* metadata[key] = strings.Join(values, ", ") } - // Create an error for non-200 status codes. - if resp.StatusCode/100 != 2 { + // Create an error for non-200 status codes unless suppressed. + if errorIfNot2XX && resp.StatusCode/100 != 2 { err = fmt.Errorf("received status code %d", resp.StatusCode) } diff --git a/bindings/http/http_test.go b/bindings/http/http_test.go index 746fc052a..fe6d374e3 100644 --- a/bindings/http/http_test.go +++ b/bindings/http/http_test.go @@ -172,6 +172,69 @@ func TestInit(t *testing.T) { path: "/", err: "received status code 500", }, + "internal server error suppressed": { + input: "internal server error", // trigger 500 + operation: "post", + metadata: map[string]string{"path": "/", "errorIfNot2XX": "false"}, + path: "/", + err: "", + }, + } + + for name, tc := range tests { + t.Run(name, func(t *testing.T) { + response, err := hs.Invoke(context.TODO(), &bindings.InvokeRequest{ + Data: []byte(tc.input), + Metadata: tc.metadata, + Operation: bindings.OperationKind(tc.operation), + }) + if tc.err == "" { + require.NoError(t, err) + assert.Equal(t, tc.path, path) + assert.Equal(t, strings.ToUpper(tc.input), string(response.Data)) + assert.Equal(t, "text/plain", response.Metadata["Content-Type"]) + } else { + require.Error(t, err) + assert.Equal(t, tc.err, err.Error()) + } + }) + } + + // Test with errorIfNot2XX set to false + hs = bindingHttp.NewHTTP(logger.NewLogger("test")) + m.Properties["errorIfNot2XX"] = "false" + + initErr := hs.Init(m) + require.NoError(t, initErr) + + tests = map[string]struct { + input string + operation string + metadata map[string]string + path string + err string + }{ + "internal server error": { + input: "internal server error", + operation: "post", + metadata: map[string]string{"path": "/"}, + path: "/", + err: "", + }, + "internal server error overridden": { + input: "internal server error", + operation: "post", + metadata: map[string]string{"path": "/", "errorIfNot2XX": "true"}, + path: "/", + err: "received status code 500", + }, + "internal server error suppressed by request and component": { + input: "internal server error", // trigger 500 + operation: "post", + metadata: map[string]string{"path": "/", "errorIfNot2XX": "false"}, + path: "/", + err: "", + }, } for name, tc := range tests { From 4227cf7716aeb51572614ac39a5d0857fa2cc60f Mon Sep 17 00:00:00 2001 From: John Ewart Date: Tue, 29 Nov 2022 13:24:32 -0800 Subject: [PATCH 78/87] Update tests to be a little more isolated Signed-off-by: John Ewart --- bindings/http/http_test.go | 431 +++++++++++++++++++++++-------------- 1 file changed, 271 insertions(+), 160 deletions(-) diff --git a/bindings/http/http_test.go b/bindings/http/http_test.go index fe6d374e3..55e6ec800 100644 --- a/bindings/http/http_test.go +++ b/bindings/http/http_test.go @@ -18,6 +18,7 @@ import ( "io" "net/http" "net/http/httptest" + "strconv" "strings" "testing" @@ -45,209 +46,319 @@ func TestOperations(t *testing.T) { }, opers) } -func TestInit(t *testing.T) { - var path string +type TestCase struct { + input string + operation string + metadata map[string]string + path string + err string + statusCode int +} - s := httptest.NewServer( - http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { - path = req.URL.Path - input := req.Method - if req.Body != nil { - defer req.Body.Close() - b, _ := io.ReadAll(req.Body) - if len(b) > 0 { - input = string(b) - } - } - inputFromHeader := req.Header.Get("X-Input") - if inputFromHeader != "" { - input = inputFromHeader - } - w.Header().Set("Content-Type", "text/plain") - if input == "internal server error" { - w.WriteHeader(http.StatusInternalServerError) - } - w.Write([]byte(strings.ToUpper(input))) - }), - ) - defer s.Close() +func (tc TestCase) ToInvokeRequest() bindings.InvokeRequest { + + requestMetadata := tc.metadata + + if requestMetadata == nil { + requestMetadata = map[string]string{} + } + + requestMetadata["X-Status-Code"] = strconv.Itoa(tc.statusCode) + + return bindings.InvokeRequest{ + Data: []byte(tc.input), + Metadata: requestMetadata, + Operation: bindings.OperationKind(tc.operation), + } +} + +type HttpHandler struct { + Path string +} + +func (h *HttpHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) { + h.Path = req.URL.Path + + input := req.Method + if req.Body != nil { + defer req.Body.Close() + b, _ := io.ReadAll(req.Body) + if len(b) > 0 { + input = string(b) + } + } + inputFromHeader := req.Header.Get("X-Input") + if inputFromHeader != "" { + input = inputFromHeader + } + + w.Header().Set("Content-Type", "text/plain") + + statusCode := req.Header.Get("X-Status-Code") + if statusCode != "" { + code, _ := strconv.Atoi(statusCode) + w.WriteHeader(code) + } + + w.Write([]byte(strings.ToUpper(input))) +} + +func NewHttpHandler() *HttpHandler { + return &HttpHandler{ + Path: "/", + } +} + +func InitBinding(s *httptest.Server, extraProps map[string]string) (bindings.OutputBinding, error) { m := bindings.Metadata{Base: metadata.Base{ Properties: map[string]string{ "url": s.URL, }, }} + + if extraProps != nil { + for k, v := range extraProps { + m.Properties[k] = v + } + } + hs := bindingHttp.NewHTTP(logger.NewLogger("test")) err := hs.Init(m) + return hs, err +} + +func TestInit(t *testing.T) { + handler := NewHttpHandler() + s := httptest.NewServer(handler) + defer s.Close() + + _, err := InitBinding(s, nil) + require.NoError(t, err) +} + +func TestDefaultBehavior(t *testing.T) { + handler := NewHttpHandler() + s := httptest.NewServer(handler) + defer s.Close() + + hs, err := InitBinding(s, nil) require.NoError(t, err) - tests := map[string]struct { - input string - operation string - metadata map[string]string - path string - err string - }{ + tests := map[string]TestCase{ "get": { - input: "GET", - operation: "get", - metadata: nil, - path: "/", - err: "", + input: "GET", + operation: "get", + metadata: nil, + path: "/", + err: "", + statusCode: 200, }, "request headers": { - input: "OVERRIDE", - operation: "get", - metadata: map[string]string{"X-Input": "override"}, - path: "/", - err: "", + input: "OVERRIDE", + operation: "get", + metadata: map[string]string{"X-Input": "override"}, + path: "/", + err: "", + statusCode: 200, }, "post": { - input: "expected", - operation: "post", - metadata: map[string]string{"path": "/test"}, - path: "/test", - err: "", + input: "expected", + operation: "post", + metadata: map[string]string{"path": "/test"}, + path: "/test", + err: "", + statusCode: 201, }, "put": { - input: "expected", - operation: "put", - metadata: map[string]string{"path": "/test"}, - path: "/test", - err: "", + input: "expected", + operation: "put", + statusCode: 204, + metadata: map[string]string{"path": "/test"}, + path: "/test", + err: "", }, "patch": { - input: "expected", - operation: "patch", - metadata: map[string]string{"path": "/test"}, - path: "/test", - err: "", + input: "expected", + operation: "patch", + metadata: map[string]string{"path": "/test"}, + path: "/test", + err: "", + statusCode: 206, }, "delete": { - input: "DELETE", - operation: "delete", - metadata: nil, - path: "/", - err: "", + input: "DELETE", + operation: "delete", + metadata: nil, + path: "/", + err: "", + statusCode: 200, }, "options": { - input: "OPTIONS", - operation: "options", - metadata: nil, - path: "/", - err: "", + input: "OPTIONS", + operation: "options", + metadata: nil, + path: "/", + err: "", + statusCode: 200, }, "trace": { - input: "TRACE", - operation: "trace", - metadata: nil, - path: "/", - err: "", + input: "TRACE", + operation: "trace", + metadata: nil, + path: "/", + err: "", + statusCode: 200, }, "backward compatibility": { - input: "expected", - operation: "create", - metadata: map[string]string{"path": "/test"}, - path: "/test", - err: "", + input: "expected", + operation: "create", + metadata: map[string]string{"path": "/test"}, + path: "/test", + err: "", + statusCode: 200, }, "invalid path": { - input: "expected", - operation: "POST", - metadata: map[string]string{"path": "/../test"}, - path: "", - err: "invalid path: /../test", + input: "expected", + operation: "POST", + metadata: map[string]string{"path": "/../test"}, + path: "", + err: "invalid path: /../test", + statusCode: 400, }, "invalid operation": { - input: "notvalid", - operation: "notvalid", - metadata: map[string]string{"path": "/test"}, - path: "/test", - err: "invalid operation: notvalid", + input: "notvalid", + operation: "notvalid", + metadata: map[string]string{"path": "/test"}, + path: "/test", + err: "invalid operation: notvalid", + statusCode: 400, }, "internal server error": { - input: "internal server error", - operation: "post", - metadata: map[string]string{"path": "/"}, - path: "/", - err: "received status code 500", + input: "internal server error", + operation: "post", + metadata: map[string]string{"path": "/"}, + path: "/", + err: "received status code 500", + statusCode: 500, }, "internal server error suppressed": { - input: "internal server error", // trigger 500 - operation: "post", - metadata: map[string]string{"path": "/", "errorIfNot2XX": "false"}, - path: "/", - err: "", + input: "internal server error", // trigger 500 downstream + operation: "post", + metadata: map[string]string{"path": "/", "errorIfNot2XX": "false"}, + path: "/", + err: "", + statusCode: 500, + }, + "redirect should not yield an error": { + input: "show me the treasure!", + operation: "post", + metadata: map[string]string{"path": "/", "errorIfNot2XX": "false"}, + path: "/", + err: "", + statusCode: 302, + }, + "redirect results in an error if not suppressed": { + input: "show me the treasure!", + operation: "post", + metadata: map[string]string{"path": "/"}, + path: "/", + err: "received status code 302", + statusCode: 302, }, } for name, tc := range tests { t.Run(name, func(t *testing.T) { - response, err := hs.Invoke(context.TODO(), &bindings.InvokeRequest{ - Data: []byte(tc.input), - Metadata: tc.metadata, - Operation: bindings.OperationKind(tc.operation), - }) + req := tc.ToInvokeRequest() + response, err := hs.Invoke(context.TODO(), &req) if tc.err == "" { require.NoError(t, err) - assert.Equal(t, tc.path, path) - assert.Equal(t, strings.ToUpper(tc.input), string(response.Data)) - assert.Equal(t, "text/plain", response.Metadata["Content-Type"]) - } else { - require.Error(t, err) - assert.Equal(t, tc.err, err.Error()) - } - }) - } - - // Test with errorIfNot2XX set to false - hs = bindingHttp.NewHTTP(logger.NewLogger("test")) - m.Properties["errorIfNot2XX"] = "false" - - initErr := hs.Init(m) - require.NoError(t, initErr) - - tests = map[string]struct { - input string - operation string - metadata map[string]string - path string - err string - }{ - "internal server error": { - input: "internal server error", - operation: "post", - metadata: map[string]string{"path": "/"}, - path: "/", - err: "", - }, - "internal server error overridden": { - input: "internal server error", - operation: "post", - metadata: map[string]string{"path": "/", "errorIfNot2XX": "true"}, - path: "/", - err: "received status code 500", - }, - "internal server error suppressed by request and component": { - input: "internal server error", // trigger 500 - operation: "post", - metadata: map[string]string{"path": "/", "errorIfNot2XX": "false"}, - path: "/", - err: "", - }, - } - - for name, tc := range tests { - t.Run(name, func(t *testing.T) { - response, err := hs.Invoke(context.TODO(), &bindings.InvokeRequest{ - Data: []byte(tc.input), - Metadata: tc.metadata, - Operation: bindings.OperationKind(tc.operation), - }) - if tc.err == "" { - require.NoError(t, err) - assert.Equal(t, tc.path, path) - assert.Equal(t, strings.ToUpper(tc.input), string(response.Data)) + assert.Equal(t, tc.path, handler.Path) + if tc.statusCode != 204 { + // 204 will return no content, so we should skip checking + assert.Equal(t, strings.ToUpper(tc.input), string(response.Data)) + } + assert.Equal(t, "text/plain", response.Metadata["Content-Type"]) + } else { + require.Error(t, err) + assert.Equal(t, tc.err, err.Error()) + } + }) + } +} + +func TestNon2XXErrorsSuppressed(t *testing.T) { + + handler := NewHttpHandler() + s := httptest.NewServer(handler) + defer s.Close() + + hs, err := InitBinding(s, map[string]string{"errorIfNot2XX": "false"}) + require.NoError(t, err) + + tests := map[string]TestCase{ + "internal server error": { + input: "internal server error", + operation: "post", + metadata: map[string]string{"path": "/"}, + path: "/", + err: "", + statusCode: 500, + }, + "internal server error overridden": { + input: "internal server error", + operation: "post", + metadata: map[string]string{"path": "/", "errorIfNot2XX": "true"}, + path: "/", + err: "received status code 500", + statusCode: 500, + }, + "internal server error suppressed by request and component": { + input: "internal server error", // trigger 500 + operation: "post", + metadata: map[string]string{"path": "/", "errorIfNot2XX": "false"}, + path: "/", + err: "", + statusCode: 500, + }, + "trace": { + input: "TRACE", + operation: "trace", + metadata: nil, + path: "/", + err: "", + statusCode: 200, + }, + "backward compatibility": { + input: "expected", + operation: "create", + metadata: map[string]string{"path": "/test"}, + path: "/test", + err: "", + statusCode: 200, + }, + "invalid path": { + input: "expected", + operation: "POST", + metadata: map[string]string{"path": "/../test"}, + path: "", + err: "invalid path: /../test", + statusCode: 400, + }, + } + + for name, tc := range tests { + t.Run(name, func(t *testing.T) { + req := tc.ToInvokeRequest() + response, err := hs.Invoke(context.TODO(), &req) + if tc.err == "" { + require.NoError(t, err) + assert.Equal(t, tc.path, handler.Path) + if tc.statusCode != 204 { + // 204 will return no content, so we should skip checking + assert.Equal(t, strings.ToUpper(tc.input), string(response.Data)) + } assert.Equal(t, "text/plain", response.Metadata["Content-Type"]) } else { require.Error(t, err) From 49bdf702e9e08aeac13e17cbe24d1ad467801c4b Mon Sep 17 00:00:00 2001 From: John Ewart Date: Tue, 29 Nov 2022 13:51:56 -0800 Subject: [PATCH 79/87] gofumpt'd Signed-off-by: John Ewart --- bindings/http/http_test.go | 3 --- 1 file changed, 3 deletions(-) diff --git a/bindings/http/http_test.go b/bindings/http/http_test.go index 55e6ec800..4ea8d959f 100644 --- a/bindings/http/http_test.go +++ b/bindings/http/http_test.go @@ -56,7 +56,6 @@ type TestCase struct { } func (tc TestCase) ToInvokeRequest() bindings.InvokeRequest { - requestMetadata := tc.metadata if requestMetadata == nil { @@ -110,7 +109,6 @@ func NewHttpHandler() *HttpHandler { } func InitBinding(s *httptest.Server, extraProps map[string]string) (bindings.OutputBinding, error) { - m := bindings.Metadata{Base: metadata.Base{ Properties: map[string]string{ "url": s.URL, @@ -289,7 +287,6 @@ func TestDefaultBehavior(t *testing.T) { } func TestNon2XXErrorsSuppressed(t *testing.T) { - handler := NewHttpHandler() s := httptest.NewServer(handler) defer s.Close() From aef7ec77dc2252da978aba1aa76d2b27cd49914c Mon Sep 17 00:00:00 2001 From: John Ewart Date: Tue, 29 Nov 2022 14:56:06 -0800 Subject: [PATCH 80/87] Fix naming to make ci-linter happy Signed-off-by: John Ewart --- bindings/http/http_test.go | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/bindings/http/http_test.go b/bindings/http/http_test.go index 4ea8d959f..d88e8aad4 100644 --- a/bindings/http/http_test.go +++ b/bindings/http/http_test.go @@ -71,11 +71,11 @@ func (tc TestCase) ToInvokeRequest() bindings.InvokeRequest { } } -type HttpHandler struct { +type HTTPHandler struct { Path string } -func (h *HttpHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) { +func (h *HTTPHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) { h.Path = req.URL.Path input := req.Method @@ -102,8 +102,8 @@ func (h *HttpHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) { w.Write([]byte(strings.ToUpper(input))) } -func NewHttpHandler() *HttpHandler { - return &HttpHandler{ +func NewHTTPHandler() *HTTPHandler { + return &HTTPHandler{ Path: "/", } } @@ -127,7 +127,7 @@ func InitBinding(s *httptest.Server, extraProps map[string]string) (bindings.Out } func TestInit(t *testing.T) { - handler := NewHttpHandler() + handler := NewHTTPHandler() s := httptest.NewServer(handler) defer s.Close() @@ -136,7 +136,7 @@ func TestInit(t *testing.T) { } func TestDefaultBehavior(t *testing.T) { - handler := NewHttpHandler() + handler := NewHTTPHandler() s := httptest.NewServer(handler) defer s.Close() @@ -287,7 +287,7 @@ func TestDefaultBehavior(t *testing.T) { } func TestNon2XXErrorsSuppressed(t *testing.T) { - handler := NewHttpHandler() + handler := NewHTTPHandler() s := httptest.NewServer(handler) defer s.Close() From b4c65ed195882444294196c1958915ee0f4066cc Mon Sep 17 00:00:00 2001 From: Tiago Alves Macambira Date: Tue, 29 Nov 2022 16:49:32 -0800 Subject: [PATCH 81/87] Enforce error checking for Vault component initialization on tests. Tests in vault_test.go had the following : ```go // This call will throw an error on Windows systems because of the of // the call x509.SystemCertPool() because system root pool is not // available on Windows so ignore the error for when the tests are run // on the Windows platform during CI _ = target.Init(m) ``` As of Go 1.18 this is not the case for Windows anymore and we can instead enforce error checking. References: * https://github.com/golang/go/issues/16736 * https://github.com/golang/go/issues/18609 * https://github.com/rancher/system-agent/pull/84 * https://github.com/jaegertracing/jaeger/pull/2756 Given Dapr depends on Go 1.19, we can enforce tests on `Init` result and remove this comment. While enforcing error checking we notice that the code above was actually hiding errors in the test setup. Component initialization was ending prematurely due to those errors and the test code was wrongfully testing for the behavior of a component that has not been successfully initialized. This is also addressed in this PR. Closes #2330. Signed-off-by: Tiago Alves Macambira --- secretstores/hashicorp/vault/vault_test.go | 117 ++++++++++----------- 1 file changed, 58 insertions(+), 59 deletions(-) diff --git a/secretstores/hashicorp/vault/vault_test.go b/secretstores/hashicorp/vault/vault_test.go index 0fc662e84..fff233445 100644 --- a/secretstores/hashicorp/vault/vault_test.go +++ b/secretstores/hashicorp/vault/vault_test.go @@ -28,49 +28,53 @@ import ( const ( // base64 encoded certificate. - certificate = "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURVakNDQWpvQ0NRRFlZdzdMeXN4VXRUQU5CZ2txaGtpRzl3MEJBUXNGQURCck1Rc3dDUVlEVlFRR0V3SkQKUVRFWk1CY0dBMVVFQ0F3UVFuSnBkR2x6YUNCRGIyeDFiV0pwWVRFU01CQUdBMVVFQnd3SlZtRnVZMjkxZG1WeQpNUk13RVFZRFZRUUtEQXB0YVhOb2NtRmpiM0p3TVJnd0ZnWURWUVFEREE5MllYVnNkSEJ5YjJwbFkzUXVhVzh3CkhoY05NVGt4TVRBeE1UQTBPREV5V2hjTk1qQXhNRE14TVRBME9ERXlXakJyTVFzd0NRWURWUVFHRXdKRFFURVoKTUJjR0ExVUVDQXdRUW5KcGRHbHphQ0JEYjJ4MWJXSnBZVEVTTUJBR0ExVUVCd3dKVm1GdVkyOTFkbVZ5TVJNdwpFUVlEVlFRS0RBcHRhWE5vY21GamIzSndNUmd3RmdZRFZRUUREQTkyWVhWc2RIQnliMnBsWTNRdWFXOHdnZ0VpCk1BMEdDU3FHU0liM0RRRUJBUVVBQTRJQkR3QXdnZ0VLQW9JQkFRQ3JtaitTTmtGUHEvK2FXUFV1MlpFamtSK3AKTm1PeEVNSnZZcGhHNkJvRFAySE9ZbGRzdk9FWkRkbTBpWFlmeFIwZm5rUmtTMWEzSlZiYmhINWJnTElKb0dxcwo5aWpzN2hyQ0Rrdk9uRWxpUEZuc05pQ2NWNDNxNkZYaFMvNFpoNGpOMnlyUkU2UmZiS1BEeUw0a282NkFhSld1CnVkTldKVWpzSFZBSWowZHlnTXFKYm0rT29iSzk5ckUxcDg5Z3RNUStJdzFkWnUvUFF4SjlYOStMeXdxZUxPckQKOWhpNWkxajNFUUp2RXQxSVUzclEwc2E0NU5zZkt4YzEwZjdhTjJuSDQzSnhnMVRiZXNPOWYrcWlyeDBHYmVSYQpyVmNaazNVaFc2cHZmam9XbDBEc0NwNTJwZDBQN05rUmhmak44b2RMN0h3bFVIc1NqemlSYytsTG5YREJBZ01CCkFBRXdEUVlKS29aSWh2Y05BUUVMQlFBRGdnRUJBSVdKdmRPZ01PUnQxWk53SENkNTNieTlkMlBkcW5tWHFZZ20KNDZHK2Fvb1dSeTJKMEMwS3ZOVGZGbEJFOUlydzNXUTVNMnpqY25qSUp5bzNLRUM5TDdPMnQ1WC9LTGVDck5ZVgpIc1d4cU5BTVBGY2VBa09HT0I1TThGVllkdjJTaVV2UDJjMEZQSzc2WFVzcVNkdnRsWGFkTk5ENzE3T0NTNm0yCnBIVjh1NWJNd1VmR2NCVFpEV2o4bjIzRVdHaXdnYkJkdDc3Z3h3YWc5NTROZkM2Ny9nSUc5ZlRrTTQ4aVJCUzEKc0NGYVBjMkFIT3hiMSs0ajVCMVY2Z29iZDZYWkFvbHdNaTNHUUtkbEM1NXZNeTNwK09WbDNNbEc3RWNTVUpMdApwZ2ZKaWw3L3dTWWhpUnhJU3hrYkk5cWhvNEwzZm5PZVB3clFVd2FzU1ZiL1lxbHZ2WHM9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" - expectedTok = "myRootToken" - expectedTokMountPath = "./vault.txt" + certificate = "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURVakNDQWpvQ0NRRFlZdzdMeXN4VXRUQU5CZ2txaGtpRzl3MEJBUXNGQURCck1Rc3dDUVlEVlFRR0V3SkQKUVRFWk1CY0dBMVVFQ0F3UVFuSnBkR2x6YUNCRGIyeDFiV0pwWVRFU01CQUdBMVVFQnd3SlZtRnVZMjkxZG1WeQpNUk13RVFZRFZRUUtEQXB0YVhOb2NtRmpiM0p3TVJnd0ZnWURWUVFEREE5MllYVnNkSEJ5YjJwbFkzUXVhVzh3CkhoY05NVGt4TVRBeE1UQTBPREV5V2hjTk1qQXhNRE14TVRBME9ERXlXakJyTVFzd0NRWURWUVFHRXdKRFFURVoKTUJjR0ExVUVDQXdRUW5KcGRHbHphQ0JEYjJ4MWJXSnBZVEVTTUJBR0ExVUVCd3dKVm1GdVkyOTFkbVZ5TVJNdwpFUVlEVlFRS0RBcHRhWE5vY21GamIzSndNUmd3RmdZRFZRUUREQTkyWVhWc2RIQnliMnBsWTNRdWFXOHdnZ0VpCk1BMEdDU3FHU0liM0RRRUJBUVVBQTRJQkR3QXdnZ0VLQW9JQkFRQ3JtaitTTmtGUHEvK2FXUFV1MlpFamtSK3AKTm1PeEVNSnZZcGhHNkJvRFAySE9ZbGRzdk9FWkRkbTBpWFlmeFIwZm5rUmtTMWEzSlZiYmhINWJnTElKb0dxcwo5aWpzN2hyQ0Rrdk9uRWxpUEZuc05pQ2NWNDNxNkZYaFMvNFpoNGpOMnlyUkU2UmZiS1BEeUw0a282NkFhSld1CnVkTldKVWpzSFZBSWowZHlnTXFKYm0rT29iSzk5ckUxcDg5Z3RNUStJdzFkWnUvUFF4SjlYOStMeXdxZUxPckQKOWhpNWkxajNFUUp2RXQxSVUzclEwc2E0NU5zZkt4YzEwZjdhTjJuSDQzSnhnMVRiZXNPOWYrcWlyeDBHYmVSYQpyVmNaazNVaFc2cHZmam9XbDBEc0NwNTJwZDBQN05rUmhmak44b2RMN0h3bFVIc1NqemlSYytsTG5YREJBZ01CCkFBRXdEUVlKS29aSWh2Y05BUUVMQlFBRGdnRUJBSVdKdmRPZ01PUnQxWk53SENkNTNieTlkMlBkcW5tWHFZZ20KNDZHK2Fvb1dSeTJKMEMwS3ZOVGZGbEJFOUlydzNXUTVNMnpqY25qSUp5bzNLRUM5TDdPMnQ1WC9LTGVDck5ZVgpIc1d4cU5BTVBGY2VBa09HT0I1TThGVllkdjJTaVV2UDJjMEZQSzc2WFVzcVNkdnRsWGFkTk5ENzE3T0NTNm0yCnBIVjh1NWJNd1VmR2NCVFpEV2o4bjIzRVdHaXdnYkJkdDc3Z3h3YWc5NTROZkM2Ny9nSUc5ZlRrTTQ4aVJCUzEKc0NGYVBjMkFIT3hiMSs0ajVCMVY2Z29iZDZYWkFvbHdNaTNHUUtkbEM1NXZNeTNwK09WbDNNbEc3RWNTVUpMdApwZ2ZKaWw3L3dTWWhpUnhJU3hrYkk5cWhvNEwzZm5PZVB3clFVd2FzU1ZiL1lxbHZ2WHM9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + expectedTok = "myRootToken" + expectedTokenMountFileContents = "Hey! TokenMountFile contents here!" ) +func createTempFileWithContent(t *testing.T, contents string) (fileName string, cleanUpFunc func()) { + dir := os.TempDir() + f, err := os.CreateTemp(dir, "vault-token") + assert.NoError(t, err) + fileName = f.Name() + cleanUpFunc = func() { + os.Remove(fileName) + } + + _, err = f.WriteString(contents) + assert.NoError(t, err) + + return fileName, cleanUpFunc +} + +func createTokenMountPathFile(t *testing.T) (fileName string, cleanUpFunc func()) { + return createTempFileWithContent(t, expectedTokenMountFileContents) +} + func TestReadVaultToken(t *testing.T) { + tokenString := "This-IS-TheRootToken" + tmpFileName, cleanUpFunc := createTempFileWithContent(t, tokenString) + defer cleanUpFunc() + t.Run("read correct token", func(t *testing.T) { - dir := os.TempDir() - f, err := os.CreateTemp(dir, "vault-token") - assert.NoError(t, err) - fileName := f.Name() - defer os.Remove(fileName) - - tokenString := "thisisnottheroottoken" - _, err = f.WriteString(tokenString) - assert.NoError(t, err) - v := vaultSecretStore{ - vaultTokenMountPath: f.Name(), + vaultTokenMountPath: tmpFileName, } - err = v.initVaultToken() + err := v.initVaultToken() assert.Nil(t, err) assert.Equal(t, tokenString, v.vaultToken) }) t.Run("read incorrect token", func(t *testing.T) { - dir := os.TempDir() - f, err := os.CreateTemp(dir, "vault-token") - assert.NoError(t, err) - fileName := f.Name() - defer os.Remove(fileName) - - tokenString := "thisisnottheroottoken" - _, err = f.WriteString(tokenString) - assert.NoError(t, err) - v := vaultSecretStore{ - vaultTokenMountPath: f.Name(), + vaultTokenMountPath: tmpFileName, } - err = v.initVaultToken() + + err := v.initVaultToken() assert.Nil(t, err) - assert.NotEqual(t, "thisistheroottoken", v.vaultToken) + assert.NotEqual(t, "ThisIs-NOT-TheRootToken", v.vaultToken) }) t.Run("read token from vaultToken", func(t *testing.T) { @@ -126,6 +130,9 @@ func TestVaultEnginePath(t *testing.T) { } func TestVaultTokenPrefix(t *testing.T) { + expectedTokMountPath, cleanUpFunc := createTokenMountPathFile(t) + defer cleanUpFunc() + t.Run("default value of vaultKVUsePrefix is true to emulate previous behaviour", func(t *testing.T) { properties := map[string]string{ componentVaultToken: expectedTok, @@ -140,11 +147,9 @@ func TestVaultTokenPrefix(t *testing.T) { logger: nil, } - // This call will throw an error on Windows systems because of the of - // the call x509.SystemCertPool() because system root pool is not - // available on Windows so ignore the error for when the tests are run - // on the Windows platform during CI - _ = target.Init(m) + if err := target.Init(m); err != nil { + t.Fatal(err) + } assert.Equal(t, defaultVaultKVPrefix, target.vaultKVPrefix) }) @@ -165,11 +170,9 @@ func TestVaultTokenPrefix(t *testing.T) { logger: nil, } - // This call will throw an error on Windows systems because of the of - // the call x509.SystemCertPool() because system root pool is not - // available on Windows so ignore the error for when the tests are run - // on the Windows platform during CI - _ = target.Init(m) + if err := target.Init(m); err != nil { + t.Fatal(err) + } assert.Equal(t, "", target.vaultKVPrefix) }) @@ -190,10 +193,6 @@ func TestVaultTokenPrefix(t *testing.T) { logger: nil, } - // This call will throw an error on Windows systems because of the of - // the call x509.SystemCertPool() because system root pool is not - // available on Windows so ignore the error for when the tests are run - // on the Windows platform during CI err := target.Init(m) assert.NotNil(t, err) @@ -201,6 +200,9 @@ func TestVaultTokenPrefix(t *testing.T) { } func TestVaultTokenMountPathOrVaultTokenRequired(t *testing.T) { + expectedTokMountPath, cleanUpFunc := createTokenMountPathFile(t) + defer cleanUpFunc() + t.Run("without vaultTokenMount or vaultToken", func(t *testing.T) { properties := map[string]string{} @@ -235,13 +237,11 @@ func TestVaultTokenMountPathOrVaultTokenRequired(t *testing.T) { logger: nil, } - // This call will throw an error on Windows systems because of the of - // the call x509.SystemCertPool() because system root pool is not - // available on Windows so ignore the error for when the tests are run - // on the Windows platform during CI - _ = target.Init(m) + if err := target.Init(m); err != nil { + t.Fatal(err) + } - assert.Equal(t, "", target.vaultToken) + assert.Equal(t, expectedTokenMountFileContents, target.vaultToken) assert.Equal(t, expectedTokMountPath, target.vaultTokenMountPath) }) @@ -259,11 +259,9 @@ func TestVaultTokenMountPathOrVaultTokenRequired(t *testing.T) { logger: nil, } - // This call will throw an error on Windows systems because of the of - // the call x509.SystemCertPool() because system root pool is not - // available on Windows so ignore the error for when the tests are run - // on the Windows platform during CI - _ = target.Init(m) + if err := target.Init(m); err != nil { + t.Fatal(err) + } assert.Equal(t, "", target.vaultTokenMountPath) assert.Equal(t, expectedTok, target.vaultToken) @@ -294,9 +292,12 @@ func TestVaultTokenMountPathOrVaultTokenRequired(t *testing.T) { } func TestDefaultVaultAddress(t *testing.T) { + expectedTokMountPath, cleanUpFunc := createTokenMountPathFile(t) + defer cleanUpFunc() + t.Run("with blank vaultAddr", func(t *testing.T) { properties := map[string]string{ - "vaultTokenMountPath": "./vault.txt", + "vaultTokenMountPath": expectedTokMountPath, } m := secretstores.Metadata{ @@ -308,11 +309,9 @@ func TestDefaultVaultAddress(t *testing.T) { logger: nil, } - // This call will throw an error on Windows systems because of the of - // the call x509.SystemCertPool() because system root pool is not - // available on Windows so ignore the error for when the tests are run - // on the Windows platform during CI - _ = target.Init(m) + if err := target.Init(m); err != nil { + t.Fatal(err) + } assert.Equal(t, defaultVaultAddress, target.vaultAddress, "default was not set") }) From 86cf34ef8f5c12c8fab45ad4b3bf8615c3ecdf29 Mon Sep 17 00:00:00 2001 From: Tomasz Pietrek Date: Wed, 30 Nov 2022 19:46:15 +0100 Subject: [PATCH 82/87] Add missing filter subject in Jetstream pubsub (#2312) Signed-off-by: Tomasz Pietrek Signed-off-by: Tomasz Pietrek Co-authored-by: Bernd Verst <4535280+berndverst@users.noreply.github.com> Co-authored-by: Dapr Bot <56698301+dapr-bot@users.noreply.github.com> --- pubsub/jetstream/jetstream.go | 1 + 1 file changed, 1 insertion(+) diff --git a/pubsub/jetstream/jetstream.go b/pubsub/jetstream/jetstream.go index 37e2a610d..65a516760 100644 --- a/pubsub/jetstream/jetstream.go +++ b/pubsub/jetstream/jetstream.go @@ -162,6 +162,7 @@ func (js *jetstreamPubSub) Subscribe(ctx context.Context, req pubsub.SubscribeRe if js.meta.hearbeat != 0 { consumerConfig.Heartbeat = js.meta.hearbeat } + consumerConfig.FilterSubject = req.Topic natsHandler := func(m *nats.Msg) { jsm, err := m.Metadata() From f63301b7a02315d5bd05694c7788895b1176eb62 Mon Sep 17 00:00:00 2001 From: Bernd Verst <4535280+berndverst@users.noreply.github.com> Date: Wed, 30 Nov 2022 16:17:42 -0800 Subject: [PATCH 83/87] standardize secretstore metadata parsing Signed-off-by: Bernd Verst <4535280+berndverst@users.noreply.github.com> --- .../alicloud/parameterstore/parameterstore.go | 29 ++++---- .../aws/parameterstore/parameterstore.go | 31 ++++----- .../aws/secretmanager/secretmanager.go | 17 +++-- secretstores/azure/keyvault/keyvault.go | 39 +++++++---- .../gcp/secretmanager/secretmanager.go | 51 +++++++------- secretstores/hashicorp/vault/vault.go | 68 +++++++++++++------ secretstores/hashicorp/vault/vault_test.go | 6 +- secretstores/huaweicloud/csms/csms.go | 34 +++++++--- secretstores/kubernetes/kubernetes.go | 10 +++ secretstores/local/env/envstore.go | 10 +++ secretstores/local/file/filestore.go | 13 +++- secretstores/secret_store.go | 2 + secretstores/tencentcloud/ssm/ssm.go | 41 ++++++----- 13 files changed, 227 insertions(+), 124 deletions(-) diff --git a/secretstores/alicloud/parameterstore/parameterstore.go b/secretstores/alicloud/parameterstore/parameterstore.go index 6563883fb..cfee8c2e3 100644 --- a/secretstores/alicloud/parameterstore/parameterstore.go +++ b/secretstores/alicloud/parameterstore/parameterstore.go @@ -15,8 +15,8 @@ package parameterstore import ( "context" - "encoding/json" "fmt" + "reflect" "strconv" "time" @@ -25,6 +25,7 @@ import ( util "github.com/alibabacloud-go/tea-utils/service" "github.com/alibabacloud-go/tea/tea" + "github.com/dapr/components-contrib/metadata" "github.com/dapr/components-contrib/secretstores" "github.com/dapr/kit/logger" ) @@ -42,7 +43,7 @@ func NewParameterStore(logger logger.Logger) secretstores.SecretStore { return &oosSecretStore{logger: logger} } -type parameterStoreMetaData struct { +type ParameterStoreMetaData struct { RegionID *string `json:"regionId"` AccessKeyID *string `json:"accessKeyId"` AccessKeySecret *string `json:"accessKeySecret"` @@ -151,7 +152,7 @@ func (o *oosSecretStore) BulkGetSecret(ctx context.Context, req secretstores.Bul return response, nil } -func (o *oosSecretStore) getClient(metadata *parameterStoreMetaData) (*oos.Client, error) { +func (o *oosSecretStore) getClient(metadata *ParameterStoreMetaData) (*oos.Client, error) { config := &client.Config{ RegionId: metadata.RegionID, AccessKeyId: metadata.AccessKeyID, @@ -161,18 +162,9 @@ func (o *oosSecretStore) getClient(metadata *parameterStoreMetaData) (*oos.Clien return oos.NewClient(config) } -func (o *oosSecretStore) getParameterStoreMetadata(spec secretstores.Metadata) (*parameterStoreMetaData, error) { - b, err := json.Marshal(spec.Properties) - if err != nil { - return nil, err - } - - var meta parameterStoreMetaData - err = json.Unmarshal(b, &meta) - if err != nil { - return nil, err - } - +func (o *oosSecretStore) getParameterStoreMetadata(spec secretstores.Metadata) (*ParameterStoreMetaData, error) { + meta := ParameterStoreMetaData{} + metadata.DecodeMetadata(spec.Properties, &meta) return &meta, nil } @@ -204,3 +196,10 @@ func (o *oosSecretStore) getPathFromMetadata(metadata map[string]string) *string func (o *oosSecretStore) Features() []secretstores.Feature { return []secretstores.Feature{} // No Feature supported. } + +func (o *oosSecretStore) GetComponentMetadata() map[string]string { + metadataStruct := ParameterStoreMetaData{} + metadataInfo := map[string]string{} + metadata.GetMetadataInfoFromStructType(reflect.TypeOf(metadataStruct), &metadataInfo) + return metadataInfo +} diff --git a/secretstores/aws/parameterstore/parameterstore.go b/secretstores/aws/parameterstore/parameterstore.go index dfc84119f..6b81ae67b 100644 --- a/secretstores/aws/parameterstore/parameterstore.go +++ b/secretstores/aws/parameterstore/parameterstore.go @@ -15,14 +15,15 @@ package parameterstore import ( "context" - "encoding/json" "fmt" + "reflect" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/service/ssm" "github.com/aws/aws-sdk-go/service/ssm/ssmiface" awsAuth "github.com/dapr/components-contrib/internal/authentication/aws" + "github.com/dapr/components-contrib/metadata" "github.com/dapr/components-contrib/secretstores" "github.com/dapr/kit/logger" ) @@ -39,7 +40,7 @@ func NewParameterStore(logger logger.Logger) secretstores.SecretStore { return &ssmSecretStore{logger: logger} } -type parameterStoreMetaData struct { +type ParameterStoreMetaData struct { Region string `json:"region"` AccessKey string `json:"accessKey"` SecretKey string `json:"secretKey"` @@ -151,7 +152,7 @@ func (s *ssmSecretStore) BulkGetSecret(ctx context.Context, req secretstores.Bul return resp, nil } -func (s *ssmSecretStore) getClient(metadata *parameterStoreMetaData) (*ssm.SSM, error) { +func (s *ssmSecretStore) getClient(metadata *ParameterStoreMetaData) (*ssm.SSM, error) { sess, err := awsAuth.GetClient(metadata.AccessKey, metadata.SecretKey, metadata.SessionToken, metadata.Region, "") if err != nil { return nil, err @@ -160,22 +161,20 @@ func (s *ssmSecretStore) getClient(metadata *parameterStoreMetaData) (*ssm.SSM, return ssm.New(sess), nil } -func (s *ssmSecretStore) getSecretManagerMetadata(spec secretstores.Metadata) (*parameterStoreMetaData, error) { - b, err := json.Marshal(spec.Properties) - if err != nil { - return nil, err - } - - var meta parameterStoreMetaData - err = json.Unmarshal(b, &meta) - if err != nil { - return nil, err - } - - return &meta, nil +func (s *ssmSecretStore) getSecretManagerMetadata(spec secretstores.Metadata) (*ParameterStoreMetaData, error) { + meta := ParameterStoreMetaData{} + err := metadata.DecodeMetadata(spec.Properties, &meta) + return &meta, err } // Features returns the features available in this secret store. func (s *ssmSecretStore) Features() []secretstores.Feature { return []secretstores.Feature{} // No Feature supported. } + +func (s *ssmSecretStore) GetComponentMetadata() map[string]string { + metadataStruct := ParameterStoreMetaData{} + metadataInfo := map[string]string{} + metadata.GetMetadataInfoFromStructType(reflect.TypeOf(metadataStruct), &metadataInfo) + return metadataInfo +} diff --git a/secretstores/aws/secretmanager/secretmanager.go b/secretstores/aws/secretmanager/secretmanager.go index 70707447c..1318940c2 100644 --- a/secretstores/aws/secretmanager/secretmanager.go +++ b/secretstores/aws/secretmanager/secretmanager.go @@ -17,11 +17,13 @@ import ( "context" "encoding/json" "fmt" + "reflect" "github.com/aws/aws-sdk-go/service/secretsmanager" "github.com/aws/aws-sdk-go/service/secretsmanager/secretsmanageriface" awsAuth "github.com/dapr/components-contrib/internal/authentication/aws" + "github.com/dapr/components-contrib/metadata" "github.com/dapr/components-contrib/secretstores" "github.com/dapr/kit/logger" ) @@ -38,7 +40,7 @@ func NewSecretManager(logger logger.Logger) secretstores.SecretStore { return &smSecretStore{logger: logger} } -type secretManagerMetaData struct { +type SecretManagerMetaData struct { Region string `json:"region"` AccessKey string `json:"accessKey"` SecretKey string `json:"secretKey"` @@ -134,7 +136,7 @@ func (s *smSecretStore) BulkGetSecret(ctx context.Context, req secretstores.Bulk return resp, nil } -func (s *smSecretStore) getClient(metadata *secretManagerMetaData) (*secretsmanager.SecretsManager, error) { +func (s *smSecretStore) getClient(metadata *SecretManagerMetaData) (*secretsmanager.SecretsManager, error) { sess, err := awsAuth.GetClient(metadata.AccessKey, metadata.SecretKey, metadata.SessionToken, metadata.Region, "") if err != nil { return nil, err @@ -143,13 +145,13 @@ func (s *smSecretStore) getClient(metadata *secretManagerMetaData) (*secretsmana return secretsmanager.New(sess), nil } -func (s *smSecretStore) getSecretManagerMetadata(spec secretstores.Metadata) (*secretManagerMetaData, error) { +func (s *smSecretStore) getSecretManagerMetadata(spec secretstores.Metadata) (*SecretManagerMetaData, error) { b, err := json.Marshal(spec.Properties) if err != nil { return nil, err } - var meta secretManagerMetaData + var meta SecretManagerMetaData err = json.Unmarshal(b, &meta) if err != nil { return nil, err @@ -162,3 +164,10 @@ func (s *smSecretStore) getSecretManagerMetadata(spec secretstores.Metadata) (*s func (s *smSecretStore) Features() []secretstores.Feature { return []secretstores.Feature{} // No Feature supported. } + +func (s *smSecretStore) GetComponentMetadata() map[string]string { + metadataStruct := SecretManagerMetaData{} + metadataInfo := map[string]string{} + metadata.GetMetadataInfoFromStructType(reflect.TypeOf(metadataStruct), &metadataInfo) + return metadataInfo +} diff --git a/secretstores/azure/keyvault/keyvault.go b/secretstores/azure/keyvault/keyvault.go index 9a3440007..f77d2eb27 100644 --- a/secretstores/azure/keyvault/keyvault.go +++ b/secretstores/azure/keyvault/keyvault.go @@ -16,6 +16,7 @@ package keyvault import ( "context" "fmt" + "reflect" "strconv" "strings" @@ -24,6 +25,7 @@ import ( "github.com/Azure/azure-sdk-for-go/sdk/keyvault/azsecrets" azauth "github.com/dapr/components-contrib/internal/authentication/azure" + "github.com/dapr/components-contrib/metadata" "github.com/dapr/components-contrib/secretstores" "github.com/dapr/kit/logger" ) @@ -31,7 +33,6 @@ import ( // Keyvault secret store component metadata properties // This is in addition to what's defined in authentication/azure. const ( - componentVaultName = "vaultName" VersionID = "version_id" secretItemIDPrefix = "/secrets/" ) @@ -46,6 +47,10 @@ type keyvaultSecretStore struct { logger logger.Logger } +type KeyvaultMetadata struct { + VaultName string +} + // NewAzureKeyvaultSecretStore returns a new Azure Key Vault secret store. func NewAzureKeyvaultSecretStore(logger logger.Logger) secretstores.SecretStore { return &keyvaultSecretStore{ @@ -56,10 +61,14 @@ func NewAzureKeyvaultSecretStore(logger logger.Logger) secretstores.SecretStore } // Init creates a Azure Key Vault client. -func (k *keyvaultSecretStore) Init(metadata secretstores.Metadata) error { +func (k *keyvaultSecretStore) Init(meta secretstores.Metadata) error { + m := KeyvaultMetadata{} + if err := metadata.DecodeMetadata(meta.Properties, &m); err != nil { + return err + } // Fix for maintaining backwards compatibility with a change introduced in 1.3 that allowed specifying an Azure environment by setting a FQDN for vault name // This should be considered deprecated and users should rely the "azureEnvironment" metadata instead, but it's maintained here for backwards-compatibility - if vaultName, ok := metadata.Properties[componentVaultName]; ok { + if m.VaultName != "" { keyVaultSuffixToEnvironment := map[string]string{ ".vault.azure.net": "AZUREPUBLICCLOUD", ".vault.azure.cn": "AZURECHINACLOUD", @@ -67,26 +76,25 @@ func (k *keyvaultSecretStore) Init(metadata secretstores.Metadata) error { ".vault.microsoftazure.de": "AZUREGERMANCLOUD", } for suffix, environment := range keyVaultSuffixToEnvironment { - if strings.HasSuffix(vaultName, suffix) { - metadata.Properties["azureEnvironment"] = environment - vaultName = strings.TrimSuffix(vaultName, suffix) - if strings.HasPrefix(vaultName, "https://") { - vaultName = strings.TrimPrefix(vaultName, "https://") + if strings.HasSuffix(m.VaultName, suffix) { + meta.Properties["azureEnvironment"] = environment + m.VaultName = strings.TrimSuffix(m.VaultName, suffix) + if strings.HasPrefix(m.VaultName, "https://") { + m.VaultName = strings.TrimPrefix(m.VaultName, "https://") } - metadata.Properties[componentVaultName] = vaultName - + k.vaultName = m.VaultName break } } } // Initialization code - settings, err := azauth.NewEnvironmentSettings("keyvault", metadata.Properties) + settings, err := azauth.NewEnvironmentSettings("keyvault", meta.Properties) if err != nil { return err } - k.vaultName = settings.Values[componentVaultName] + k.vaultName = m.VaultName k.vaultDNSSuffix = settings.AzureEnvironment.KeyVaultDNSSuffix cred, err := settings.GetTokenCredential() @@ -201,3 +209,10 @@ func (k *keyvaultSecretStore) getMaxResultsFromMetadata(metadata map[string]stri func (k *keyvaultSecretStore) Features() []secretstores.Feature { return []secretstores.Feature{} // No Feature supported. } + +func (k *keyvaultSecretStore) GetComponentMetadata() map[string]string { + metadataStruct := KeyvaultMetadata{} + metadataInfo := map[string]string{} + metadata.GetMetadataInfoFromStructType(reflect.TypeOf(metadataStruct), &metadataInfo) + return metadataInfo +} diff --git a/secretstores/gcp/secretmanager/secretmanager.go b/secretstores/gcp/secretmanager/secretmanager.go index 79e50fb98..c818461fa 100644 --- a/secretstores/gcp/secretmanager/secretmanager.go +++ b/secretstores/gcp/secretmanager/secretmanager.go @@ -17,12 +17,14 @@ import ( "context" "encoding/json" "fmt" + "reflect" secretmanager "cloud.google.com/go/secretmanager/apiv1" "cloud.google.com/go/secretmanager/apiv1/secretmanagerpb" "google.golang.org/api/iterator" "google.golang.org/api/option" + "github.com/dapr/components-contrib/metadata" "github.com/dapr/components-contrib/secretstores" "github.com/dapr/kit/logger" @@ -31,21 +33,17 @@ import ( const VersionID = "version_id" -type gcpCredentials struct { - Type string `json:"type"` - ProjectID string `json:"project_id"` - PrivateKey string `json:"private_key"` - ClientEmail string `json:"client_email"` - PrivateKeyID string `json:"private_key_id"` - ClientID string `json:"client_id"` - AuthURI string `json:"auth_uri"` - TokenURI string `json:"token_uri"` - AuthProviderCertURL string `json:"auth_provider_x509_cert_url"` - ClientCertURL string `json:"client_x509_cert_url"` -} - -type secretManagerMetadata struct { - gcpCredentials +type GcpSecretManagerMetadata struct { + Type string `mapstructure:"type" json:"type"` + ProjectID string `mapstructure:"project_id" json:"project_id"` + PrivateKey string `mapstructure:"private_key" json:"private_key"` + ClientEmail string `mapstructure:"client_email" json:"client_email"` + PrivateKeyID string `mapstructure:"private_key_id" json:"private_key_id"` + ClientID string `mapstructure:"client_id" json:"client_id"` + AuthURI string `mapstructure:"auth_uri" json:"auth_uri"` + TokenURI string `mapstructure:"token_uri" json:"token_uri"` + AuthProviderCertURL string `mapstructure:"auth_provider_x509_cert_url" json:"auth_provider_x509_cert_url"` + ClientCertURL string `mapstructure:"client_x509_cert_url" json:"client_x509_cert_url"` } type gcpSecretemanagerClient interface { @@ -87,7 +85,7 @@ func (s *Store) Init(metadataRaw secretstores.Metadata) error { return nil } -func (s *Store) getClient(metadata *secretManagerMetadata) (*secretmanager.Client, error) { +func (s *Store) getClient(metadata *GcpSecretManagerMetadata) (*secretmanager.Client, error) { b, _ := json.Marshal(metadata) clientOptions := option.WithCredentialsJSON(b) ctx := context.Background() @@ -177,17 +175,9 @@ func (s *Store) getSecret(ctx context.Context, secretName string, versionID stri return &secret, nil } -func (s *Store) parseSecretManagerMetadata(metadataRaw secretstores.Metadata) (*secretManagerMetadata, error) { - b, err := json.Marshal(metadataRaw.Properties) - if err != nil { - return nil, err - } - - var meta secretManagerMetadata - err = json.Unmarshal(b, &meta) - if err != nil { - return nil, err - } +func (s *Store) parseSecretManagerMetadata(metadataRaw secretstores.Metadata) (*GcpSecretManagerMetadata, error) { + meta := GcpSecretManagerMetadata{} + metadata.DecodeMetadata(metadataRaw.Properties, &meta) if meta.Type == "" { return nil, fmt.Errorf("missing property `type` in metadata") @@ -213,3 +203,10 @@ func (s *Store) Close() error { func (s *Store) Features() []secretstores.Feature { return []secretstores.Feature{} // No Feature supported. } + +func (s *Store) GetComponentMetadata() map[string]string { + metadataStruct := GcpSecretManagerMetadata{} + metadataInfo := map[string]string{} + metadata.GetMetadataInfoFromStructType(reflect.TypeOf(metadataStruct), &metadataInfo) + return metadataInfo +} diff --git a/secretstores/hashicorp/vault/vault.go b/secretstores/hashicorp/vault/vault.go index ede97a2c0..655e3435b 100644 --- a/secretstores/hashicorp/vault/vault.go +++ b/secretstores/hashicorp/vault/vault.go @@ -25,12 +25,14 @@ import ( "net/http" "os" "path/filepath" + "reflect" "strconv" "strings" jsoniter "github.com/json-iterator/go" "golang.org/x/net/http2" + "github.com/dapr/components-contrib/metadata" "github.com/dapr/components-contrib/secretstores" "github.com/dapr/kit/logger" ) @@ -88,6 +90,21 @@ type vaultSecretStore struct { logger logger.Logger } +type VaultMetadata struct { + CaCert string + CaPath string + CaPem string + SkipVerify string + TLSServerName string + VaultAddr string + VaultKVPrefix string + VaultKVUsePrefix string + VaultToken string + VaultTokenMountPath string + EnginePath string + VaultValueType string +} + // tlsConfig is TLS configuration to interact with HashiCorp Vault. type tlsConfig struct { vaultCAPem string @@ -121,11 +138,15 @@ func NewHashiCorpVaultSecretStore(logger logger.Logger) secretstores.SecretStore } // Init creates a HashiCorp Vault client. -func (v *vaultSecretStore) Init(metadata secretstores.Metadata) error { - props := metadata.Properties +func (v *vaultSecretStore) Init(meta secretstores.Metadata) error { + m := VaultMetadata{} + err := metadata.DecodeMetadata(meta.Properties, &m) + if err != nil { + return err + } // Get Vault address - address := props[componentVaultAddress] + address := m.VaultAddr if address == "" { address = defaultVaultAddress } @@ -133,33 +154,33 @@ func (v *vaultSecretStore) Init(metadata secretstores.Metadata) error { v.vaultAddress = address v.vaultEnginePath = defaultVaultEnginePath - if val, ok := props[vaultEnginePath]; ok && val != "" { - v.vaultEnginePath = val + if m.EnginePath != "" { + v.vaultEnginePath = m.EnginePath } v.vaultValueType = valueTypeMap - if val, found := props[vaultValueType]; found && val != "" { - switch valueType(val) { + if m.VaultValueType != "" { + switch valueType(m.VaultValueType) { case valueTypeMap: case valueTypeText: v.vaultValueType = valueTypeText default: - return fmt.Errorf("vault init error, invalid value type %s, accepted values are map or text", val) + return fmt.Errorf("vault init error, invalid value type %s, accepted values are map or text", m.VaultValueType) } } - v.vaultToken = props[componentVaultToken] - v.vaultTokenMountPath = props[componentVaultTokenMountPath] + v.vaultToken = m.VaultToken + v.vaultTokenMountPath = m.VaultTokenMountPath initErr := v.initVaultToken() if initErr != nil { return initErr } - vaultKVUsePrefix := props[componentVaultKVUsePrefix] - vaultKVPrefix := props[componentVaultKVPrefix] + vaultKVUsePrefix := m.VaultKVUsePrefix + vaultKVPrefix := m.VaultKVPrefix convertedVaultKVUsePrefix := true if vaultKVUsePrefix != "" { - if v, err := strconv.ParseBool(vaultKVUsePrefix); err == nil { + if v, parseErr := strconv.ParseBool(vaultKVUsePrefix); parseErr == nil { convertedVaultKVUsePrefix = v } else if err != nil { return fmt.Errorf("unable to convert Use Prefix to boolean") @@ -175,7 +196,7 @@ func (v *vaultSecretStore) Init(metadata secretstores.Metadata) error { v.vaultKVPrefix = vaultKVPrefix // Generate TLS config - tlsConf := metadataToTLSConfig(props) + tlsConf := metadataToTLSConfig(&m) client, err := v.createHTTPClient(tlsConf) if err != nil { @@ -187,20 +208,20 @@ func (v *vaultSecretStore) Init(metadata secretstores.Metadata) error { return nil } -func metadataToTLSConfig(props map[string]string) *tlsConfig { +func metadataToTLSConfig(meta *VaultMetadata) *tlsConfig { tlsConf := tlsConfig{} // Configure TLS settings - skipVerify := props[componentSkipVerify] + skipVerify := meta.SkipVerify tlsConf.vaultSkipVerify = false if skipVerify == "true" { tlsConf.vaultSkipVerify = true } - tlsConf.vaultCACert = props[componentCaCert] - tlsConf.vaultCAPem = props[componentCaPem] - tlsConf.vaultCAPath = props[componentCaPath] - tlsConf.vaultServerName = props[componentTLSServerName] + tlsConf.vaultCACert = meta.CaCert + tlsConf.vaultCAPem = meta.CaPem + tlsConf.vaultCAPath = meta.CaPath + tlsConf.vaultServerName = meta.TLSServerName return &tlsConf } @@ -514,3 +535,10 @@ func (v *vaultSecretStore) Features() []secretstores.Feature { return []secretstores.Feature{secretstores.FeatureMultipleKeyValuesPerSecret} } + +func (v *vaultSecretStore) GetComponentMetadata() map[string]string { + metadataStruct := VaultMetadata{} + metadataInfo := map[string]string{} + metadata.GetMetadataInfoFromStructType(reflect.TypeOf(metadataStruct), &metadataInfo) + return metadataInfo +} diff --git a/secretstores/hashicorp/vault/vault_test.go b/secretstores/hashicorp/vault/vault_test.go index 0e272b18e..a35dd19ec 100644 --- a/secretstores/hashicorp/vault/vault_test.go +++ b/secretstores/hashicorp/vault/vault_test.go @@ -102,7 +102,11 @@ func TestVaultTLSConfig(t *testing.T) { Base: metadata.Base{Properties: properties}, } - tlsConfig := metadataToTLSConfig(m.Properties) + meta := VaultMetadata{} + err := metadata.DecodeMetadata(m.Properties, &meta) + assert.NoError(t, err) + + tlsConfig := metadataToTLSConfig(&meta) skipVerify, err := strconv.ParseBool(properties["skipVerify"]) assert.Nil(t, err) assert.Equal(t, properties["caCert"], tlsConfig.vaultCACert) diff --git a/secretstores/huaweicloud/csms/csms.go b/secretstores/huaweicloud/csms/csms.go index b57882f2e..b218d3ccc 100644 --- a/secretstores/huaweicloud/csms/csms.go +++ b/secretstores/huaweicloud/csms/csms.go @@ -15,23 +15,22 @@ package csms import ( "context" + "reflect" "github.com/huaweicloud/huaweicloud-sdk-go-v3/core/auth/basic" csms "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/csms/v1" "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/csms/v1/model" csmsRegion "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/csms/v1/region" + "github.com/dapr/components-contrib/metadata" "github.com/dapr/components-contrib/secretstores" "github.com/dapr/kit/logger" ) const ( - region string = "region" - accessKey string = "accessKey" - secretAccessKey string = "secretAccessKey" - pageLimit string = "100" - latestVersion string = "latest" - versionID string = "version_id" + pageLimit string = "100" + latestVersion string = "latest" + versionID string = "version_id" ) type csmsClient interface { @@ -46,21 +45,29 @@ type csmsSecretStore struct { logger logger.Logger } +type CsmsSecretStoreMetadata struct { + Region string + AccessKey string + SecretAccessKey string +} + // NewHuaweiCsmsSecretStore returns a new Huawei csms secret store. func NewHuaweiCsmsSecretStore(logger logger.Logger) secretstores.SecretStore { return &csmsSecretStore{logger: logger} } // Init creates a Huawei csms client. -func (c *csmsSecretStore) Init(metadata secretstores.Metadata) error { +func (c *csmsSecretStore) Init(meta secretstores.Metadata) error { + m := CsmsSecretStoreMetadata{} + metadata.DecodeMetadata(meta.Properties, &m) auth := basic.NewCredentialsBuilder(). - WithAk(metadata.Properties[accessKey]). - WithSk(metadata.Properties[secretAccessKey]). + WithAk(m.AccessKey). + WithSk(m.SecretAccessKey). Build() c.client = csms.NewCsmsClient( csms.CsmsClientBuilder(). - WithRegion(csmsRegion.ValueOf(metadata.Properties[region])). + WithRegion(csmsRegion.ValueOf(m.Region)). WithCredential(auth). Build()) @@ -149,3 +156,10 @@ func (c *csmsSecretStore) getSecretNames(ctx context.Context, marker *string) ([ func (c *csmsSecretStore) Features() []secretstores.Feature { return []secretstores.Feature{} // No Feature supported. } + +func (c *csmsSecretStore) GetComponentMetadata() map[string]string { + metadataStruct := CsmsSecretStoreMetadata{} + metadataInfo := map[string]string{} + metadata.GetMetadataInfoFromStructType(reflect.TypeOf(metadataStruct), &metadataInfo) + return metadataInfo +} diff --git a/secretstores/kubernetes/kubernetes.go b/secretstores/kubernetes/kubernetes.go index e7a199397..34a111e87 100644 --- a/secretstores/kubernetes/kubernetes.go +++ b/secretstores/kubernetes/kubernetes.go @@ -18,11 +18,13 @@ import ( "context" "errors" "os" + "reflect" meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/kubernetes" kubeclient "github.com/dapr/components-contrib/internal/authentication/kubernetes" + "github.com/dapr/components-contrib/metadata" "github.com/dapr/components-contrib/secretstores" "github.com/dapr/kit/logger" ) @@ -114,3 +116,11 @@ func (k *kubernetesSecretStore) getNamespaceFromMetadata(metadata map[string]str func (k *kubernetesSecretStore) Features() []secretstores.Feature { return []secretstores.Feature{} } + +func (k *kubernetesSecretStore) GetComponentMetadata() map[string]string { + type unusedMetadataStruct struct{} + metadataStruct := unusedMetadataStruct{} + metadataInfo := map[string]string{} + metadata.GetMetadataInfoFromStructType(reflect.TypeOf(metadataStruct), &metadataInfo) + return metadataInfo +} diff --git a/secretstores/local/env/envstore.go b/secretstores/local/env/envstore.go index d2ce3377f..232d7a3b4 100644 --- a/secretstores/local/env/envstore.go +++ b/secretstores/local/env/envstore.go @@ -16,8 +16,10 @@ package env import ( "context" "os" + "reflect" "strings" + "github.com/dapr/components-contrib/metadata" "github.com/dapr/components-contrib/secretstores" "github.com/dapr/kit/logger" ) @@ -67,3 +69,11 @@ func (s *envSecretStore) BulkGetSecret(ctx context.Context, req secretstores.Bul func (s *envSecretStore) Features() []secretstores.Feature { return []secretstores.Feature{} // No Feature supported. } + +func (s *envSecretStore) GetComponentMetadata() map[string]string { + type unusedMetadataStruct struct{} + metadataStruct := unusedMetadataStruct{} + metadataInfo := map[string]string{} + metadata.GetMetadataInfoFromStructType(reflect.TypeOf(metadataStruct), &metadataInfo) + return metadataInfo +} diff --git a/secretstores/local/file/filestore.go b/secretstores/local/file/filestore.go index 32515ed7c..4acbace13 100644 --- a/secretstores/local/file/filestore.go +++ b/secretstores/local/file/filestore.go @@ -30,9 +30,9 @@ import ( ) type localSecretStoreMetaData struct { - SecretsFile string `mapstructure:"secretsFile"` - NestedSeparator string `mapstructure:"nestedSeparator"` - MultiValued bool `mapstructure:"multiValued"` + SecretsFile string + NestedSeparator string + MultiValued bool } var _ secretstores.SecretStore = (*localSecretStore)(nil) @@ -276,3 +276,10 @@ func (j *localSecretStore) readLocalFile(secretsFile string) (map[string]interfa func (j *localSecretStore) Features() []secretstores.Feature { return j.features } + +func (j *localSecretStore) GetComponentMetadata() map[string]string { + metadataStruct := localSecretStoreMetaData{} + metadataInfo := map[string]string{} + metadata.GetMetadataInfoFromStructType(reflect.TypeOf(metadataStruct), &metadataInfo) + return metadataInfo +} diff --git a/secretstores/secret_store.go b/secretstores/secret_store.go index 331d3f688..3df22fa38 100644 --- a/secretstores/secret_store.go +++ b/secretstores/secret_store.go @@ -30,6 +30,8 @@ type SecretStore interface { BulkGetSecret(ctx context.Context, req BulkGetSecretRequest) (BulkGetSecretResponse, error) // Features lists the features supported by the secret store. Features() []Feature + // GetComponentMetadata returns the metadata options for the secret store. + GetComponentMetadata() map[string]string } func Ping(secretStore SecretStore) error { diff --git a/secretstores/tencentcloud/ssm/ssm.go b/secretstores/tencentcloud/ssm/ssm.go index 336709e49..865aed829 100644 --- a/secretstores/tencentcloud/ssm/ssm.go +++ b/secretstores/tencentcloud/ssm/ssm.go @@ -16,21 +16,19 @@ package ssm import ( "context" "errors" + "reflect" "strconv" "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile" ssm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssm/v20190923" + "github.com/dapr/components-contrib/metadata" "github.com/dapr/components-contrib/secretstores" "github.com/dapr/kit/logger" ) const ( - SecretID = "SecretID" - SecretKey = "SecretKey" - Token = "Token" - Region = "Region" VersionID = "VersionID" RequestID = "RequestID" ValueType = "SecretValueType" @@ -56,6 +54,13 @@ type ssmSecretStore struct { logger logger.Logger } +type SsmMetadata struct { + SecretID string + SecretKey string + Token string + Region string +} + // NewSSM returns a new TencentCloud ssm secret store. func NewSSM(logger logger.Logger) secretstores.SecretStore { return &ssmSecretStore{ @@ -64,22 +69,19 @@ func NewSSM(logger logger.Logger) secretstores.SecretStore { } // Init creates a TencentCloud ssm client. -func (s *ssmSecretStore) Init(metadata secretstores.Metadata) error { - var ( - err error - region string - ) +func (s *ssmSecretStore) Init(meta secretstores.Metadata) error { + m := SsmMetadata{} + err := metadata.DecodeMetadata(meta.Properties, &m) + if err != nil { + return err + } - secretID := metadata.Properties[SecretID] - secretKey := metadata.Properties[SecretKey] - token := metadata.Properties[Token] - region = metadata.Properties[Region] - if secretID == "" || secretKey == "" { + if m.SecretID == "" || m.SecretKey == "" { return errors.New("secret params are empty") } - credential := common.NewTokenCredential(secretID, secretKey, token) - s.client, err = ssm.NewClient(credential, region, profile.NewClientProfile()) + credential := common.NewTokenCredential(m.SecretID, m.SecretKey, m.Token) + s.client, err = ssm.NewClient(credential, m.Region, profile.NewClientProfile()) if err != nil { return err } @@ -190,3 +192,10 @@ func (s *ssmSecretStore) getSecretNames(ctx context.Context, offset *uint64) ([] func (s *ssmSecretStore) Features() []secretstores.Feature { return []secretstores.Feature{} // No Feature supported. } + +func (s *ssmSecretStore) GetComponentMetadata() map[string]string { + metadataStruct := SsmMetadata{} + metadataInfo := map[string]string{} + metadata.GetMetadataInfoFromStructType(reflect.TypeOf(metadataStruct), &metadataInfo) + return metadataInfo +} From 9fed3a802efbfe76b8331c7f80c4b6a99c3eeb60 Mon Sep 17 00:00:00 2001 From: Adrian Cole Date: Thu, 1 Dec 2022 11:09:30 +0800 Subject: [PATCH 84/87] deps: updates wazero to 1.0.0-pre.4 This updates [wazero](https://wazero.io/) to [1.0.0-pre.4](https://github.com/tetratelabs/wazero/releases/tag/v1.0.0-pre.4). Notably, v1.0.0-pre.4: * improves module initialization speed * supports listeners in the compiler engine * supports WASI `fd_pread`, `fd_readdir` and `path_filestat_get` * breaks GoModuleFunc API Signed-off-by: Adrian Cole --- go.mod | 4 ++-- go.sum | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/go.mod b/go.mod index ca7e935c9..a115f9000 100644 --- a/go.mod +++ b/go.mod @@ -70,7 +70,7 @@ require ( github.com/hashicorp/go-multierror v1.1.1 github.com/hashicorp/golang-lru v0.5.4 github.com/hazelcast/hazelcast-go-client v0.0.0-20190530123621-6cf767c2f31a - github.com/http-wasm/http-wasm-host-go v0.1.0 + github.com/http-wasm/http-wasm-host-go v0.2.0 github.com/huaweicloud/huaweicloud-sdk-go-obs v3.21.12+incompatible github.com/huaweicloud/huaweicloud-sdk-go-v3 v0.1.6 github.com/influxdata/influxdb-client-go v1.4.0 @@ -101,7 +101,7 @@ require ( github.com/supplyon/gremcos v0.1.38 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.527 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssm v1.0.527 - github.com/tetratelabs/wazero v1.0.0-pre.3 + github.com/tetratelabs/wazero v1.0.0-pre.4 github.com/valyala/fasthttp v1.41.0 github.com/vmware/vmware-go-kcl v1.5.0 github.com/xdg-go/scram v1.1.1 diff --git a/go.sum b/go.sum index 615004ee0..3789a3aa4 100644 --- a/go.sum +++ b/go.sum @@ -880,8 +880,8 @@ github.com/hashicorp/yamux v0.0.0-20181012175058-2f1d1f20f75d/go.mod h1:+NfK9FKe github.com/hazelcast/hazelcast-go-client v0.0.0-20190530123621-6cf767c2f31a h1:j6SSiw7fWemWfrJL801xiQ6xRT7ZImika50xvmPN+tg= github.com/hazelcast/hazelcast-go-client v0.0.0-20190530123621-6cf767c2f31a/go.mod h1:VhwtcZ7sg3xq7REqGzEy7ylSWGKz4jZd05eCJropNzI= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/http-wasm/http-wasm-host-go v0.1.0 h1:UAFh62U/9s6jyK0SFj1BfuKX9A1uYMKTipuy7CkJpf4= -github.com/http-wasm/http-wasm-host-go v0.1.0/go.mod h1:wzJRRVIN1Xzdlb/aXbShe9MiOO0BKA9jFVH7lSqKFTs= +github.com/http-wasm/http-wasm-host-go v0.2.0 h1:BEu3SsCtx8JwVTCdITsvod5XlgjF9UQVJ8TxjFQJNs8= +github.com/http-wasm/http-wasm-host-go v0.2.0/go.mod h1:OTNlRT3nkPc+WpuxZe1lgZ+X31GaoghBg01SQkPKMjs= github.com/huaweicloud/huaweicloud-sdk-go-obs v3.21.12+incompatible h1:tANYIteuFrosKbRYUk1Yo/OGJjbt4x3OVg211Qc60M0= github.com/huaweicloud/huaweicloud-sdk-go-obs v3.21.12+incompatible/go.mod h1:l7VUhRbTKCzdOacdT4oWCwATKyvZqUOlOqr0Ous3k4s= github.com/huaweicloud/huaweicloud-sdk-go-v3 v0.1.6 h1:18ZrfdnOMi2tx59TioYV5zFuCfD4YzoEz62ktQBOEeU= @@ -1411,8 +1411,8 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.527 h1:hpZM github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.527/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y= github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssm v1.0.527 h1:WdSZURoWsFkpnMPyOZortjaL2z6jjk1erNPVdFB319o= github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssm v1.0.527/go.mod h1:nzU/d/X/76YkHxzwfQY9+DtH53Wegy2ZZQ52W3nnMZE= -github.com/tetratelabs/wazero v1.0.0-pre.3 h1:Z5fbogMUGcERzaQb9mQU8+yJSy0bVvv2ce3dfR4wcZg= -github.com/tetratelabs/wazero v1.0.0-pre.3/go.mod h1:M8UDNECGm/HVjOfq0EOe4QfCY9Les1eq54IChMLETbc= +github.com/tetratelabs/wazero v1.0.0-pre.4 h1:RBJQT5OzmORkSp6MmZDWoFEr0zXjk4pmvMKAdeUnsaI= +github.com/tetratelabs/wazero v1.0.0-pre.4/go.mod h1:u8wrFmpdrykiFK0DFPiFm5a4+0RzsdmXYVtijBKqUVo= github.com/tevid/gohamcrest v1.1.1/go.mod h1:3UvtWlqm8j5JbwYZh80D/PVBt0mJ1eJiYgZMibh0H/k= github.com/tidwall/gjson v1.2.1/go.mod h1:c/nTNbUr0E0OrXEhq1pwa8iEgc2DOt4ZZqAt1HtCkPA= github.com/tidwall/gjson v1.13.0 h1:3TFY9yxOQShrvmjdM76K+jc66zJeT6D3/VFFYCGQf7M= From e8305115d075794d966ec3622712e919854ecea6 Mon Sep 17 00:00:00 2001 From: Bernd Verst <4535280+berndverst@users.noreply.github.com> Date: Thu, 1 Dec 2022 14:00:16 -0800 Subject: [PATCH 85/87] Fix up hashicorp vault Signed-off-by: Bernd Verst <4535280+berndverst@users.noreply.github.com> --- secretstores/hashicorp/vault/vault.go | 20 +++++--------------- secretstores/hashicorp/vault/vault_test.go | 12 ++++-------- 2 files changed, 9 insertions(+), 23 deletions(-) diff --git a/secretstores/hashicorp/vault/vault.go b/secretstores/hashicorp/vault/vault.go index 655e3435b..a598037e4 100644 --- a/secretstores/hashicorp/vault/vault.go +++ b/secretstores/hashicorp/vault/vault.go @@ -26,7 +26,6 @@ import ( "os" "path/filepath" "reflect" - "strconv" "strings" jsoniter "github.com/json-iterator/go" @@ -98,7 +97,7 @@ type VaultMetadata struct { TLSServerName string VaultAddr string VaultKVPrefix string - VaultKVUsePrefix string + VaultKVUsePrefix bool VaultToken string VaultTokenMountPath string EnginePath string @@ -139,7 +138,9 @@ func NewHashiCorpVaultSecretStore(logger logger.Logger) secretstores.SecretStore // Init creates a HashiCorp Vault client. func (v *vaultSecretStore) Init(meta secretstores.Metadata) error { - m := VaultMetadata{} + m := VaultMetadata{ + VaultKVUsePrefix: true, + } err := metadata.DecodeMetadata(meta.Properties, &m) if err != nil { return err @@ -176,23 +177,12 @@ func (v *vaultSecretStore) Init(meta secretstores.Metadata) error { return initErr } - vaultKVUsePrefix := m.VaultKVUsePrefix vaultKVPrefix := m.VaultKVPrefix - convertedVaultKVUsePrefix := true - if vaultKVUsePrefix != "" { - if v, parseErr := strconv.ParseBool(vaultKVUsePrefix); parseErr == nil { - convertedVaultKVUsePrefix = v - } else if err != nil { - return fmt.Errorf("unable to convert Use Prefix to boolean") - } - } - - if !convertedVaultKVUsePrefix { + if !m.VaultKVUsePrefix { vaultKVPrefix = "" } else if vaultKVPrefix == "" { vaultKVPrefix = defaultVaultKVPrefix } - v.vaultKVPrefix = vaultKVPrefix // Generate TLS config diff --git a/secretstores/hashicorp/vault/vault_test.go b/secretstores/hashicorp/vault/vault_test.go index a35dd19ec..99dca5fd3 100644 --- a/secretstores/hashicorp/vault/vault_test.go +++ b/secretstores/hashicorp/vault/vault_test.go @@ -181,7 +181,7 @@ func TestVaultTokenPrefix(t *testing.T) { assert.Equal(t, "", target.vaultKVPrefix) }) - t.Run("if vaultKVUsePrefix is not castable to bool return error", func(t *testing.T) { + t.Run("if vaultKVUsePrefix is not castable to bool we treat it as False", func(t *testing.T) { properties := map[string]string{ "vaultKVPrefix": "myCustomString", "vaultKVUsePrefix": "invalidSetting", @@ -192,14 +192,10 @@ func TestVaultTokenPrefix(t *testing.T) { Base: metadata.Base{Properties: properties}, } - target := &vaultSecretStore{ - client: nil, - logger: nil, - } + meta := VaultMetadata{} + metadata.DecodeMetadata(m.Properties, &meta) - err := target.Init(m) - - assert.NotNil(t, err) + assert.False(t, meta.VaultKVUsePrefix) }) } From 0e0cf8fe588b1eb02ba5d4c5adf1c222d02539fe Mon Sep 17 00:00:00 2001 From: Sarthak Sharma Date: Fri, 2 Dec 2022 16:00:01 +0530 Subject: [PATCH 86/87] Add certification tests for Cron Binding (#2191) * fix typos Signed-off-by: Sarthak Sharma * add basic tests Signed-off-by: Sarthak Sharma * update tests Signed-off-by: Sarthak Sharma * add Readme Signed-off-by: Sarthak Sharma * update mod file Signed-off-by: Sarthak Sharma * add entry in workflow Signed-off-by: Sarthak Sharma * add conformance test Signed-off-by: Sarthak Sharma * add conformance tests to workflow Signed-off-by: Sarthak Sharma * use watcher to assert Signed-off-by: Sarthak Sharma * update readme Signed-off-by: Sarthak Sharma * fix linting Signed-off-by: Sarthak Sharma * Apply suggestions from code review Co-authored-by: Shubham Sharma Signed-off-by: Bernd Verst <4535280+berndverst@users.noreply.github.com> * change to dapr/go-sdk from hunter007/dapr-go-sdk Signed-off-by: Sarthak Sharma * fix cron delete operation Signed-off-by: Sarthak Sharma * add check if cron not triggered after delete Signed-off-by: Sarthak Sharma * update README Signed-off-by: Sarthak Sharma * parameterise application and assertions Signed-off-by: Sarthak Sharma * use mock clock for cron Signed-off-by: Sarthak Sharma * change cron to input only binding Signed-off-by: Sarthak Sharma * add forked cron library to internal/cron Signed-off-by: Sarthak Sharma * use cron internal fork for binding Signed-off-by: Sarthak Sharma * resolve comments Signed-off-by: Sarthak Sharma * resolve comments Signed-off-by: Sarthak Sharma * add test matrix to test various schedules Signed-off-by: Sarthak Sharma * add cron init unit tests Signed-off-by: Sarthak Sharma * resolve comments Signed-off-by: Sarthak Sharma * fix linting Signed-off-by: Sarthak Sharma * fix linting Signed-off-by: Sarthak Sharma * go modtidy all Signed-off-by: Sarthak Sharma * go modtidy Signed-off-by: Sarthak Sharma * move cron fork to dapr/kit Signed-off-by: Sarthak Sharma * use pinned v0.0.3 for dapr/kit Signed-off-by: Sarthak Sharma Signed-off-by: Sarthak Sharma Signed-off-by: Bernd Verst <4535280+berndverst@users.noreply.github.com> Co-authored-by: Bernd Verst <4535280+berndverst@users.noreply.github.com> Co-authored-by: Shubham Sharma Co-authored-by: Dapr Bot <56698301+dapr-bot@users.noreply.github.com> --- .github/workflows/certification.yml | 1 + .github/workflows/conformance.yml | 1 + bindings/cron/cron.go | 69 +- bindings/cron/cron_test.go | 120 ++- go.mod | 6 +- go.sum | 12 +- .../bindings/alicloud/dubbo/go.mod | 4 +- .../bindings/alicloud/dubbo/go.sum | 10 +- .../bindings/alicloud/nacos/go.mod | 4 +- .../bindings/alicloud/nacos/go.sum | 10 +- .../bindings/azure/blobstorage/go.mod | 4 +- .../bindings/azure/blobstorage/go.sum | 8 +- .../bindings/azure/cosmosdb/go.mod | 4 +- .../bindings/azure/cosmosdb/go.sum | 8 +- .../bindings/azure/eventhubs/go.mod | 4 +- .../bindings/azure/eventhubs/go.sum | 8 +- .../bindings/azure/servicebusqueues/go.mod | 4 +- .../bindings/azure/servicebusqueues/go.sum | 8 +- .../bindings/azure/storagequeues/go.mod | 4 +- .../bindings/azure/storagequeues/go.sum | 8 +- tests/certification/bindings/cron/README.md | 15 + .../bindings/cron/components/cron15m.yaml | 11 + .../bindings/cron/components/cron1s.yaml | 12 + .../bindings/cron/components/cron3s.yaml | 12 + .../bindings/cron/components/cron6h.yaml | 11 + .../bindings/cron/components/cronMonthly.yaml | 11 + .../cron/components_sameroute/cron.yaml | 15 + .../cron/components_sameroute/cron3s.yaml | 15 + tests/certification/bindings/cron/config.yaml | 4 + .../certification/bindings/cron/cron_test.go | 293 ++++++ tests/certification/bindings/cron/go.mod | 152 +++ tests/certification/bindings/cron/go.sum | 925 ++++++++++++++++++ tests/certification/bindings/kafka/go.mod | 4 +- tests/certification/bindings/kafka/go.sum | 8 +- .../bindings/localstorage/README.md | 4 +- .../bindings/localstorage/go.mod | 4 +- .../bindings/localstorage/go.sum | 8 +- tests/certification/bindings/postgres/go.mod | 4 +- tests/certification/bindings/postgres/go.sum | 8 +- tests/certification/bindings/rabbitmq/go.mod | 4 +- tests/certification/bindings/rabbitmq/go.sum | 8 +- tests/certification/bindings/redis/README.md | 2 +- tests/certification/bindings/redis/go.mod | 4 +- tests/certification/bindings/redis/go.sum | 8 +- tests/certification/go.mod | 4 +- tests/certification/go.sum | 8 +- .../pubsub/azure/eventhubs/go.mod | 4 +- .../pubsub/azure/eventhubs/go.sum | 8 +- .../pubsub/azure/servicebus/topics/go.mod | 4 +- .../pubsub/azure/servicebus/topics/go.sum | 8 +- tests/certification/pubsub/kafka/go.mod | 4 +- tests/certification/pubsub/kafka/go.sum | 8 +- tests/certification/pubsub/mqtt/go.mod | 4 +- tests/certification/pubsub/mqtt/go.sum | 8 +- tests/certification/pubsub/rabbitmq/go.mod | 4 +- tests/certification/pubsub/rabbitmq/go.sum | 8 +- .../secretstores/azure/keyvault/go.mod | 4 +- .../secretstores/azure/keyvault/go.sum | 8 +- .../secretstores/hashicorp/vault/go.mod | 4 +- .../secretstores/hashicorp/vault/go.sum | 8 +- .../secretstores/local/env/go.mod | 4 +- .../secretstores/local/env/go.sum | 8 +- .../secretstores/local/file/go.mod | 4 +- .../secretstores/local/file/go.sum | 8 +- .../state/azure/blobstorage/go.mod | 4 +- .../state/azure/blobstorage/go.sum | 8 +- .../certification/state/azure/cosmosdb/go.mod | 4 +- .../certification/state/azure/cosmosdb/go.sum | 8 +- .../state/azure/tablestorage/go.mod | 4 +- .../state/azure/tablestorage/go.sum | 8 +- tests/certification/state/cassandra/go.mod | 4 +- tests/certification/state/cassandra/go.sum | 8 +- tests/certification/state/cockroachdb/go.mod | 4 +- tests/certification/state/cockroachdb/go.sum | 8 +- tests/certification/state/memcached/go.mod | 4 +- tests/certification/state/memcached/go.sum | 8 +- tests/certification/state/mongodb/go.mod | 4 +- tests/certification/state/mongodb/go.sum | 8 +- tests/certification/state/mysql/go.mod | 4 +- tests/certification/state/mysql/go.sum | 8 +- tests/certification/state/postgresql/go.mod | 4 +- tests/certification/state/postgresql/go.sum | 8 +- tests/certification/state/redis/go.mod | 4 +- tests/certification/state/redis/go.sum | 8 +- tests/certification/state/sqlserver/go.mod | 4 +- tests/certification/state/sqlserver/go.sum | 8 +- tests/config/bindings/cron/bindings.yaml | 12 + tests/config/bindings/tests.yml | 2 + tests/conformance/common.go | 3 + tests/e2e/pubsub/jetstream/go.mod | 4 +- tests/e2e/pubsub/jetstream/go.sum | 8 +- 91 files changed, 1797 insertions(+), 323 deletions(-) create mode 100644 tests/certification/bindings/cron/README.md create mode 100644 tests/certification/bindings/cron/components/cron15m.yaml create mode 100644 tests/certification/bindings/cron/components/cron1s.yaml create mode 100644 tests/certification/bindings/cron/components/cron3s.yaml create mode 100644 tests/certification/bindings/cron/components/cron6h.yaml create mode 100644 tests/certification/bindings/cron/components/cronMonthly.yaml create mode 100644 tests/certification/bindings/cron/components_sameroute/cron.yaml create mode 100644 tests/certification/bindings/cron/components_sameroute/cron3s.yaml create mode 100644 tests/certification/bindings/cron/config.yaml create mode 100644 tests/certification/bindings/cron/cron_test.go create mode 100644 tests/certification/bindings/cron/go.mod create mode 100644 tests/certification/bindings/cron/go.sum create mode 100644 tests/config/bindings/cron/bindings.yaml diff --git a/.github/workflows/certification.yml b/.github/workflows/certification.yml index 80f4dd140..1265cb398 100644 --- a/.github/workflows/certification.yml +++ b/.github/workflows/certification.yml @@ -61,6 +61,7 @@ jobs: - bindings.alicloud.dubbo - bindings.kafka - bindings.redis + - bindings.cron - secretstores.local.env - secretstores.local.file - secretstores.hashicorp.vault diff --git a/.github/workflows/conformance.yml b/.github/workflows/conformance.yml index a7ae42f69..7a898acbb 100644 --- a/.github/workflows/conformance.yml +++ b/.github/workflows/conformance.yml @@ -48,6 +48,7 @@ jobs: id: pr-components run: | PR_COMPONENTS=$(yq -I0 --tojson eval - << EOF + - bindings.cron - bindings.http - bindings.influx - bindings.kafka-wurstmeister diff --git a/bindings/cron/cron.go b/bindings/cron/cron.go index 036c2b9f3..24549cdea 100644 --- a/bindings/cron/cron.go +++ b/bindings/cron/cron.go @@ -18,8 +18,10 @@ import ( "fmt" "time" + "github.com/benbjohnson/clock" "github.com/pkg/errors" - cron "github.com/robfig/cron/v3" + + cron "github.com/dapr/kit/cron" "github.com/dapr/components-contrib/bindings" "github.com/dapr/kit/logger" @@ -27,18 +29,22 @@ import ( // Binding represents Cron input binding. type Binding struct { - logger logger.Logger - name string - schedule string - parser cron.Parser - runningCtx context.Context - runningCancel context.CancelFunc + logger logger.Logger + name string + schedule string + parser cron.Parser + clk clock.Clock } // NewCron returns a new Cron event input binding. -func NewCron(logger logger.Logger) bindings.InputOutputBinding { +func NewCron(logger logger.Logger) bindings.InputBinding { + return NewCronWithClock(logger, clock.New()) +} + +func NewCronWithClock(logger logger.Logger, clk clock.Clock) bindings.InputBinding { return &Binding{ logger: logger, + clk: clk, parser: cron.NewParser( cron.SecondOptional | cron.Minute | cron.Hour | cron.Dom | cron.Month | cron.Dow | cron.Descriptor, ), @@ -62,14 +68,12 @@ func (b *Binding) Init(metadata bindings.Metadata) error { } b.schedule = s - b.resetContext() - return nil } // Read triggers the Cron scheduler. func (b *Binding) Read(ctx context.Context, handler bindings.Handler) error { - c := cron.New(cron.WithParser(b.parser)) + c := cron.New(cron.WithParser(b.parser), cron.WithClock(b.clk)) id, err := c.AddFunc(b.schedule, func() { b.logger.Debugf("name: %s, schedule fired: %v", b.name, time.Now()) handler(ctx, &bindings.ReadResponse{ @@ -86,50 +90,11 @@ func (b *Binding) Read(ctx context.Context, handler bindings.Handler) error { b.logger.Debugf("name: %s, next run: %v", b.name, time.Until(c.Entry(id).Next)) go func() { - // Wait for a context to be canceled - select { - case <-b.runningCtx.Done(): - // Do nothing - case <-ctx.Done(): - b.resetContext() - } + // Wait for context to be canceled + <-ctx.Done() b.logger.Debugf("name: %s, stopping schedule: %s", b.name, b.schedule) c.Stop() }() return nil } - -// Invoke exposes way to stop previously started cron. -func (b *Binding) Invoke(ctx context.Context, req *bindings.InvokeRequest) (*bindings.InvokeResponse, error) { - b.logger.Debugf("name: %s, operation: %v", b.name, req.Operation) - - switch req.Operation { - case bindings.DeleteOperation: - b.resetContext() - return &bindings.InvokeResponse{ - Metadata: map[string]string{ - "schedule": b.schedule, - "stopTimeUTC": time.Now().UTC().String(), - }, - }, nil - default: - return nil, fmt.Errorf("invalid operation: '%v', only '%v' supported", - req.Operation, bindings.DeleteOperation) - } -} - -// Operations method returns the supported operations by this binding. -func (b *Binding) Operations() []bindings.OperationKind { - return []bindings.OperationKind{ - bindings.DeleteOperation, - } -} - -// Resets the runningCtx -func (b *Binding) resetContext() { - if b.runningCancel != nil { - b.runningCancel() - } - b.runningCtx, b.runningCancel = context.WithCancel(context.Background()) -} diff --git a/bindings/cron/cron_test.go b/bindings/cron/cron_test.go index 1a4ce5f71..a37b5459f 100644 --- a/bindings/cron/cron_test.go +++ b/bindings/cron/cron_test.go @@ -19,6 +19,7 @@ import ( "testing" "time" + "github.com/benbjohnson/clock" "github.com/stretchr/testify/assert" "github.com/dapr/components-contrib/bindings" @@ -35,90 +36,103 @@ func getTestMetadata(schedule string) bindings.Metadata { } func getNewCron() *Binding { + clk := clock.New() + return getNewCronWithClock(clk) +} + +func getNewCronWithClock(clk clock.Clock) *Binding { l := logger.NewLogger("cron") if os.Getenv("DEBUG") != "" { l.SetOutputLevel(logger.DebugLevel) } - - return NewCron(l).(*Binding) + return NewCronWithClock(l, clk).(*Binding) } // go test -v -timeout 15s -count=1 ./bindings/cron/. +// +//nolint:dupword func TestCronInitSuccess(t *testing.T) { - c := getNewCron() - err := c.Init(getTestMetadata("@every 1h")) - assert.NoErrorf(t, err, "error initializing valid schedule") -} + initTests := []struct { + schedule string + errorExpected bool + }{ + { + schedule: "@every 1s", // macro cron format + errorExpected: false, + }, + { + schedule: "*/3 * * * * *", // non standard cron format + errorExpected: false, + }, + { + schedule: "*/15 * * * *", // standard cron format + errorExpected: false, + }, + { + schedule: "0 0 1 * *", // standard cron format + errorExpected: false, + }, + { + schedule: "0 0 */6 ? * *", // quartz cron format + errorExpected: false, + }, + { + schedule: "INVALID_SCHEDULE", // invalid cron format + errorExpected: true, + }, + } -func TestCronInitWithSeconds(t *testing.T) { - c := getNewCron() - err := c.Init(getTestMetadata("15 * * * * *")) - assert.NoErrorf(t, err, "error initializing schedule with seconds") -} - -func TestCronInitFailure(t *testing.T) { - c := getNewCron() - err := c.Init(getTestMetadata("invalid schedule")) - assert.Errorf(t, err, "no error while initializing invalid schedule") + for _, test := range initTests { + c := getNewCron() + err := c.Init(getTestMetadata(test.schedule)) + if test.errorExpected { + assert.Errorf(t, err, "Got no error while initializing an invalid schedule: %s", test.schedule) + } else { + assert.NoErrorf(t, err, "error initializing valid schedule: %s", test.schedule) + } + } } // TestLongRead // go test -v -count=1 -timeout 15s -run TestLongRead ./bindings/cron/. -func TestCronReadWithDeleteInvoke(t *testing.T) { - c := getNewCron() +func TestCronRead(t *testing.T) { + clk := clock.NewMock() + c := getNewCronWithClock(clk) schedule := "@every 1s" assert.NoErrorf(t, c.Init(getTestMetadata(schedule)), "error initializing valid schedule") - testsNum := 3 - i := 0 + expectedCount := 5 + observedCount := 0 err := c.Read(context.Background(), func(ctx context.Context, res *bindings.ReadResponse) ([]byte, error) { assert.NotNil(t, res) - assert.LessOrEqualf(t, i, testsNum, "Invoke didn't stop the schedule") - i++ - if i == testsNum { - resp, err := c.Invoke(context.Background(), &bindings.InvokeRequest{ - Operation: bindings.DeleteOperation, - }) - assert.NoError(t, err) - scheduleVal, exists := resp.Metadata["schedule"] - assert.Truef(t, exists, "Response metadata doesn't include the expected 'schedule' key") - assert.Equal(t, schedule, scheduleVal) - } - + observedCount++ return nil, nil }) - time.Sleep(time.Duration(testsNum+3) * time.Second) - assert.Equal(t, testsNum, i) + // Check if cron triggers 5 times in 5 seconds + clk.Add(5 * time.Second) + assert.Equal(t, expectedCount, observedCount, "Cron did not trigger expected number of times, expected %d, got %d", expectedCount, observedCount) assert.NoErrorf(t, err, "error on read") } func TestCronReadWithContextCancellation(t *testing.T) { - c := getNewCron() + clk := clock.NewMock() + c := getNewCronWithClock(clk) schedule := "@every 1s" assert.NoErrorf(t, c.Init(getTestMetadata(schedule)), "error initializing valid schedule") - testsNum := 3 - i := 0 + expectedCount := 5 + observedCount := 0 ctx, cancel := context.WithCancel(context.Background()) err := c.Read(ctx, func(ctx context.Context, res *bindings.ReadResponse) ([]byte, error) { assert.NotNil(t, res) - assert.LessOrEqualf(t, i, testsNum, "Invoke didn't stop the schedule") - i++ - if i == testsNum { + assert.LessOrEqualf(t, observedCount, expectedCount, "Invoke didn't stop the schedule") + observedCount++ + if observedCount == expectedCount { + // Cancel context after 5 triggers cancel() } - return nil, nil }) - time.Sleep(time.Duration(testsNum+3) * time.Second) - assert.Equal(t, testsNum, i) + // Check if cron triggers only 5 times in 10 seconds since context should be cancelled after 5 triggers + clk.Add(10 * time.Second) + assert.Equal(t, expectedCount, observedCount, "Cron did not trigger expected number of times, expected %d, got %d", expectedCount, observedCount) assert.NoErrorf(t, err, "error on read") } - -func TestCronInvokeInvalidOperation(t *testing.T) { - c := getNewCron() - initErr := c.Init(getTestMetadata("@every 1s")) - assert.NoErrorf(t, initErr, "Error on Init") - _, err := c.Invoke(context.Background(), &bindings.InvokeRequest{ - Operation: bindings.CreateOperation, - }) - assert.Error(t, err) -} diff --git a/go.mod b/go.mod index a115f9000..0acd6409a 100644 --- a/go.mod +++ b/go.mod @@ -42,14 +42,15 @@ require ( github.com/apache/pulsar-client-go v0.9.0 github.com/apache/rocketmq-client-go/v2 v2.1.0 github.com/aws/aws-sdk-go v1.44.128 + github.com/benbjohnson/clock v1.3.0 github.com/bradfitz/gomemcache v0.0.0-20221031212613-62deef7fc822 github.com/camunda/zeebe/clients/go/v8 v8.1.3 - github.com/cenkalti/backoff/v4 v4.1.3 + github.com/cenkalti/backoff/v4 v4.2.0 github.com/cinience/go_rocketmq v0.0.2 github.com/coreos/go-oidc v2.2.1+incompatible github.com/cyphar/filepath-securejoin v0.2.3 github.com/dancannon/gorethink v4.0.0+incompatible - github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f + github.com/dapr/kit v0.0.3 github.com/denisenkom/go-mssqldb v0.12.3 github.com/dghubble/go-twitter v0.0.0-20221024160433-0cc1e72ed6d8 github.com/dghubble/oauth1 v0.7.1 @@ -93,7 +94,6 @@ require ( github.com/patrickmn/go-cache v2.1.0+incompatible github.com/pkg/errors v0.9.1 github.com/rabbitmq/amqp091-go v1.5.0 - github.com/robfig/cron/v3 v3.0.1 github.com/samuel/go-zookeeper v0.0.0-20201211165307-7117e9ea2414 github.com/sendgrid/sendgrid-go v3.12.0+incompatible github.com/sijms/go-ora/v2 v2.5.3 diff --git a/go.sum b/go.sum index 3789a3aa4..d1ba277ba 100644 --- a/go.sum +++ b/go.sum @@ -325,8 +325,9 @@ github.com/aws/smithy-go v1.8.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAm github.com/awslabs/kinesis-aggregation/go v0.0.0-20210630091500-54e17340d32f h1:Pf0BjJDga7C98f0vhw+Ip5EaiE07S3lTKpIYPNS0nMo= github.com/awslabs/kinesis-aggregation/go v0.0.0-20210630091500-54e17340d32f/go.mod h1:SghidfnxvX7ribW6nHI7T+IBbc9puZ9kk5Tx/88h8P4= github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuPk= -github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= +github.com/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A= +github.com/benbjohnson/clock v1.3.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= @@ -353,8 +354,8 @@ github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n github.com/cenkalti/backoff v2.0.0+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= -github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= -github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/cenkalti/backoff/v4 v4.2.0 h1:HN5dHm3WBOgndBH6E8V0q2jIYIR3s9yglV8k/+MN3u4= +github.com/cenkalti/backoff/v4 v4.2.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/certifi/gocertifi v0.0.0-20191021191039-0944d244cd40/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA= @@ -418,8 +419,8 @@ github.com/dancannon/gorethink v4.0.0+incompatible h1:KFV7Gha3AuqT+gr0B/eKvGhbjm github.com/dancannon/gorethink v4.0.0+incompatible/go.mod h1:BLvkat9KmZc1efyYwhz3WnybhRZtgF1K929FD8z1avU= github.com/danieljoos/wincred v1.1.2 h1:QLdCxFs1/Yl4zduvBdcHB8goaYk9RARS2SgLLRuAyr0= github.com/danieljoos/wincred v1.1.2/go.mod h1:GijpziifJoIBfYh+S7BbkdUTU4LfM+QnGqR5Vl2tAx0= -github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= -github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f/go.mod h1:i9t09QZw346M2RbuK7oJhssOP0HCAQObz61U4SBNJSU= +github.com/dapr/kit v0.0.3 h1:1FCnWjIuAS3OJzJhOlUKNzLxoazYhYIS4oCOOULmWBA= +github.com/dapr/kit v0.0.3/go.mod h1:+vh2UIRT0KzFm5YJWfj7az4XVSdodys1OCz1WzNe1Eo= github.com/dave/jennifer v1.4.0/go.mod h1:fIb+770HOpJ2fmN9EPPKOqm1vMGhB+TwXKMZhrIygKg= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= @@ -1291,7 +1292,6 @@ github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqn github.com/rhnvrm/simples3 v0.6.1/go.mod h1:Y+3vYm2V7Y4VijFoJHHTrja6OgPrJ2cBti8dPGkC3sA= github.com/robfig/cron v1.2.0 h1:ZjScXvvxeQ63Dbyxy76Fj3AT3Ut0aKsyd2/tl3DTMuQ= github.com/robfig/cron v1.2.0/go.mod h1:JGuDeoQd7Z6yL4zQhZ3OPEVHB7fL6Ka6skscFHfmt2k= -github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs= github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= 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= diff --git a/tests/certification/bindings/alicloud/dubbo/go.mod b/tests/certification/bindings/alicloud/dubbo/go.mod index c642f6f20..2514842b7 100644 --- a/tests/certification/bindings/alicloud/dubbo/go.mod +++ b/tests/certification/bindings/alicloud/dubbo/go.mod @@ -9,7 +9,7 @@ require ( github.com/dapr/components-contrib/tests/certification v0.0.0-20211026011813-36b75e9ae272 github.com/dapr/dapr v1.9.4-0.20221121055721-6683f7582ac4 github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 - github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f + github.com/dapr/kit v0.0.3 github.com/stretchr/testify v1.8.1 ) @@ -29,7 +29,7 @@ require ( github.com/beorn7/perks v1.0.1 // indirect github.com/bits-and-blooms/bitset v1.2.0 // indirect github.com/cenkalti/backoff v2.2.1+incompatible // indirect - github.com/cenkalti/backoff/v4 v4.1.3 // indirect + github.com/cenkalti/backoff/v4 v4.2.0 // indirect github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/creasty/defaults v1.5.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect diff --git a/tests/certification/bindings/alicloud/dubbo/go.sum b/tests/certification/bindings/alicloud/dubbo/go.sum index ef135aca1..8251a42e3 100644 --- a/tests/certification/bindings/alicloud/dubbo/go.sum +++ b/tests/certification/bindings/alicloud/dubbo/go.sum @@ -109,8 +109,8 @@ github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.3.2/go.mod h1:72H github.com/aws/aws-sdk-go-v2/service/sso v1.4.2/go.mod h1:NBvT9R1MEF+Ud6ApJKM0G+IkPchKS7p7c2YPKwHmBOk= github.com/aws/aws-sdk-go-v2/service/sts v1.7.2/go.mod h1:8EzeIqfWt2wWT4rJVu3f21TfrhJ8AEMzVybRNSb/b4g= github.com/aws/smithy-go v1.8.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E= -github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= +github.com/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= @@ -126,8 +126,8 @@ github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx2 github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= -github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= -github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/cenkalti/backoff/v4 v4.2.0 h1:HN5dHm3WBOgndBH6E8V0q2jIYIR3s9yglV8k/+MN3u4= +github.com/cenkalti/backoff/v4 v4.2.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/certifi/gocertifi v0.0.0-20191021191039-0944d244cd40/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= @@ -173,8 +173,8 @@ github.com/creasty/defaults v1.5.2 h1:/VfB6uxpyp6h0fr7SPp7n8WJBoV8jfxQXPCnkVSjyl github.com/creasty/defaults v1.5.2/go.mod h1:FPZ+Y0WNrbqOVw+c6av63eyHUAl6pMHZwqLPvXUZGfY= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= -github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= -github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f/go.mod h1:i9t09QZw346M2RbuK7oJhssOP0HCAQObz61U4SBNJSU= +github.com/dapr/kit v0.0.3 h1:1FCnWjIuAS3OJzJhOlUKNzLxoazYhYIS4oCOOULmWBA= +github.com/dapr/kit v0.0.3/go.mod h1:+vh2UIRT0KzFm5YJWfj7az4XVSdodys1OCz1WzNe1Eo= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= diff --git a/tests/certification/bindings/alicloud/nacos/go.mod b/tests/certification/bindings/alicloud/nacos/go.mod index 13774365e..f97e80a78 100644 --- a/tests/certification/bindings/alicloud/nacos/go.mod +++ b/tests/certification/bindings/alicloud/nacos/go.mod @@ -7,7 +7,7 @@ require ( github.com/dapr/components-contrib/tests/certification v0.0.0-20211026011813-36b75e9ae272 github.com/dapr/dapr v1.9.4-0.20221121055721-6683f7582ac4 github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 - github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f + github.com/dapr/kit v0.0.3 github.com/nacos-group/nacos-sdk-go/v2 v2.1.2 github.com/stretchr/testify v1.8.1 ) @@ -23,7 +23,7 @@ require ( github.com/beorn7/perks v1.0.1 // indirect github.com/buger/jsonparser v1.1.1 // indirect github.com/cenkalti/backoff v2.2.1+incompatible // indirect - github.com/cenkalti/backoff/v4 v4.1.3 // indirect + github.com/cenkalti/backoff/v4 v4.2.0 // indirect github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/emicklei/go-restful/v3 v3.8.0 // indirect diff --git a/tests/certification/bindings/alicloud/nacos/go.sum b/tests/certification/bindings/alicloud/nacos/go.sum index 1bc9fceda..ca9c78fb5 100644 --- a/tests/certification/bindings/alicloud/nacos/go.sum +++ b/tests/certification/bindings/alicloud/nacos/go.sum @@ -63,8 +63,8 @@ github.com/armon/go-metrics v0.4.1 h1:hR91U9KYmb6bLBYLQjyM+3j+rcd/UhE+G78SFnF8gJ github.com/armon/go-metrics v0.4.1/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= -github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= +github.com/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= @@ -76,8 +76,8 @@ github.com/buger/jsonparser v1.1.1 h1:2PnMjfWD7wBILjqQbt530v576A/cAbQvEW9gGIpYMU github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= -github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= -github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/cenkalti/backoff/v4 v4.2.0 h1:HN5dHm3WBOgndBH6E8V0q2jIYIR3s9yglV8k/+MN3u4= +github.com/cenkalti/backoff/v4 v4.2.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= @@ -100,8 +100,8 @@ github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWH github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= -github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= -github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f/go.mod h1:i9t09QZw346M2RbuK7oJhssOP0HCAQObz61U4SBNJSU= +github.com/dapr/kit v0.0.3 h1:1FCnWjIuAS3OJzJhOlUKNzLxoazYhYIS4oCOOULmWBA= +github.com/dapr/kit v0.0.3/go.mod h1:+vh2UIRT0KzFm5YJWfj7az4XVSdodys1OCz1WzNe1Eo= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= diff --git a/tests/certification/bindings/azure/blobstorage/go.mod b/tests/certification/bindings/azure/blobstorage/go.mod index 9e9befe77..0c4616177 100644 --- a/tests/certification/bindings/azure/blobstorage/go.mod +++ b/tests/certification/bindings/azure/blobstorage/go.mod @@ -8,7 +8,7 @@ require ( github.com/dapr/components-contrib/tests/certification v0.0.0-20211130185200-4918900c09e1 github.com/dapr/dapr v1.9.4-0.20221121055721-6683f7582ac4 github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 - github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f + github.com/dapr/kit v0.0.3 github.com/stretchr/testify v1.8.1 ) @@ -37,7 +37,7 @@ require ( github.com/armon/go-metrics v0.4.1 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/cenkalti/backoff v2.2.1+incompatible // indirect - github.com/cenkalti/backoff/v4 v4.1.3 // indirect + github.com/cenkalti/backoff/v4 v4.2.0 // indirect github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/dimchansky/utfbom v1.1.1 // indirect diff --git a/tests/certification/bindings/azure/blobstorage/go.sum b/tests/certification/bindings/azure/blobstorage/go.sum index d394b07e3..e8ad93714 100644 --- a/tests/certification/bindings/azure/blobstorage/go.sum +++ b/tests/certification/bindings/azure/blobstorage/go.sum @@ -123,8 +123,8 @@ github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0/go.mod h1:2Vqy6l github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= -github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= -github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/cenkalti/backoff/v4 v4.2.0 h1:HN5dHm3WBOgndBH6E8V0q2jIYIR3s9yglV8k/+MN3u4= +github.com/cenkalti/backoff/v4 v4.2.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= @@ -146,8 +146,8 @@ github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWH github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= -github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= -github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f/go.mod h1:i9t09QZw346M2RbuK7oJhssOP0HCAQObz61U4SBNJSU= +github.com/dapr/kit v0.0.3 h1:1FCnWjIuAS3OJzJhOlUKNzLxoazYhYIS4oCOOULmWBA= +github.com/dapr/kit v0.0.3/go.mod h1:+vh2UIRT0KzFm5YJWfj7az4XVSdodys1OCz1WzNe1Eo= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= diff --git a/tests/certification/bindings/azure/cosmosdb/go.mod b/tests/certification/bindings/azure/cosmosdb/go.mod index d4982bd3b..ea39b3483 100644 --- a/tests/certification/bindings/azure/cosmosdb/go.mod +++ b/tests/certification/bindings/azure/cosmosdb/go.mod @@ -8,7 +8,7 @@ require ( github.com/dapr/components-contrib/tests/certification v0.0.0-20211130185200-4918900c09e1 github.com/dapr/dapr v1.9.4-0.20221121055721-6683f7582ac4 github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 - github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f + github.com/dapr/kit v0.0.3 github.com/google/uuid v1.3.0 github.com/stretchr/testify v1.8.1 ) @@ -40,7 +40,7 @@ require ( github.com/armon/go-metrics v0.4.1 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/cenkalti/backoff v2.2.1+incompatible // indirect - github.com/cenkalti/backoff/v4 v4.1.3 // indirect + github.com/cenkalti/backoff/v4 v4.2.0 // indirect github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/dimchansky/utfbom v1.1.1 // indirect diff --git a/tests/certification/bindings/azure/cosmosdb/go.sum b/tests/certification/bindings/azure/cosmosdb/go.sum index 0e0926256..5cd249665 100644 --- a/tests/certification/bindings/azure/cosmosdb/go.sum +++ b/tests/certification/bindings/azure/cosmosdb/go.sum @@ -127,8 +127,8 @@ github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0/go.mod h1:2Vqy6l github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= -github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= -github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/cenkalti/backoff/v4 v4.2.0 h1:HN5dHm3WBOgndBH6E8V0q2jIYIR3s9yglV8k/+MN3u4= +github.com/cenkalti/backoff/v4 v4.2.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= @@ -150,8 +150,8 @@ github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWH github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= -github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= -github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f/go.mod h1:i9t09QZw346M2RbuK7oJhssOP0HCAQObz61U4SBNJSU= +github.com/dapr/kit v0.0.3 h1:1FCnWjIuAS3OJzJhOlUKNzLxoazYhYIS4oCOOULmWBA= +github.com/dapr/kit v0.0.3/go.mod h1:+vh2UIRT0KzFm5YJWfj7az4XVSdodys1OCz1WzNe1Eo= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= diff --git a/tests/certification/bindings/azure/eventhubs/go.mod b/tests/certification/bindings/azure/eventhubs/go.mod index 0b4cbbe0a..177eaf013 100644 --- a/tests/certification/bindings/azure/eventhubs/go.mod +++ b/tests/certification/bindings/azure/eventhubs/go.mod @@ -7,7 +7,7 @@ require ( github.com/dapr/components-contrib/tests/certification v0.0.0-20211026011813-36b75e9ae272 github.com/dapr/dapr v1.9.4-0.20221121055721-6683f7582ac4 github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 - github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f + github.com/dapr/kit v0.0.3 github.com/google/uuid v1.3.0 github.com/stretchr/testify v1.8.1 go.uber.org/multierr v1.8.0 @@ -43,7 +43,7 @@ require ( github.com/armon/go-metrics v0.4.1 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/cenkalti/backoff v2.2.1+incompatible // indirect - github.com/cenkalti/backoff/v4 v4.1.3 // indirect + github.com/cenkalti/backoff/v4 v4.2.0 // indirect github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/devigned/tab v0.1.1 // indirect diff --git a/tests/certification/bindings/azure/eventhubs/go.sum b/tests/certification/bindings/azure/eventhubs/go.sum index 01b5653a3..51cd3782d 100644 --- a/tests/certification/bindings/azure/eventhubs/go.sum +++ b/tests/certification/bindings/azure/eventhubs/go.sum @@ -139,8 +139,8 @@ github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0/go.mod h1:2Vqy6l github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= -github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= -github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/cenkalti/backoff/v4 v4.2.0 h1:HN5dHm3WBOgndBH6E8V0q2jIYIR3s9yglV8k/+MN3u4= +github.com/cenkalti/backoff/v4 v4.2.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= @@ -162,8 +162,8 @@ github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWH github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= -github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= -github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f/go.mod h1:i9t09QZw346M2RbuK7oJhssOP0HCAQObz61U4SBNJSU= +github.com/dapr/kit v0.0.3 h1:1FCnWjIuAS3OJzJhOlUKNzLxoazYhYIS4oCOOULmWBA= +github.com/dapr/kit v0.0.3/go.mod h1:+vh2UIRT0KzFm5YJWfj7az4XVSdodys1OCz1WzNe1Eo= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= diff --git a/tests/certification/bindings/azure/servicebusqueues/go.mod b/tests/certification/bindings/azure/servicebusqueues/go.mod index 02fd6594c..1b8632288 100644 --- a/tests/certification/bindings/azure/servicebusqueues/go.mod +++ b/tests/certification/bindings/azure/servicebusqueues/go.mod @@ -7,7 +7,7 @@ require ( github.com/dapr/components-contrib/tests/certification v0.0.0-20211026011813-36b75e9ae272 github.com/dapr/dapr v1.9.4-0.20221121055721-6683f7582ac4 github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 - github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f + github.com/dapr/kit v0.0.3 github.com/stretchr/testify v1.8.1 go.uber.org/multierr v1.8.0 ) @@ -40,7 +40,7 @@ require ( github.com/armon/go-metrics v0.4.1 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/cenkalti/backoff v2.2.1+incompatible // indirect - github.com/cenkalti/backoff/v4 v4.1.3 // indirect + github.com/cenkalti/backoff/v4 v4.2.0 // indirect github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/dimchansky/utfbom v1.1.1 // indirect diff --git a/tests/certification/bindings/azure/servicebusqueues/go.sum b/tests/certification/bindings/azure/servicebusqueues/go.sum index 75fb02275..dfd1ae069 100644 --- a/tests/certification/bindings/azure/servicebusqueues/go.sum +++ b/tests/certification/bindings/azure/servicebusqueues/go.sum @@ -127,8 +127,8 @@ github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0/go.mod h1:2Vqy6l github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= -github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= -github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/cenkalti/backoff/v4 v4.2.0 h1:HN5dHm3WBOgndBH6E8V0q2jIYIR3s9yglV8k/+MN3u4= +github.com/cenkalti/backoff/v4 v4.2.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= @@ -150,8 +150,8 @@ github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWH github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= -github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= -github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f/go.mod h1:i9t09QZw346M2RbuK7oJhssOP0HCAQObz61U4SBNJSU= +github.com/dapr/kit v0.0.3 h1:1FCnWjIuAS3OJzJhOlUKNzLxoazYhYIS4oCOOULmWBA= +github.com/dapr/kit v0.0.3/go.mod h1:+vh2UIRT0KzFm5YJWfj7az4XVSdodys1OCz1WzNe1Eo= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= diff --git a/tests/certification/bindings/azure/storagequeues/go.mod b/tests/certification/bindings/azure/storagequeues/go.mod index 38daa144c..61804277b 100644 --- a/tests/certification/bindings/azure/storagequeues/go.mod +++ b/tests/certification/bindings/azure/storagequeues/go.mod @@ -7,7 +7,7 @@ require ( github.com/dapr/components-contrib/tests/certification v0.0.0-20211026011813-36b75e9ae272 github.com/dapr/dapr v1.9.4-0.20221121055721-6683f7582ac4 github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 - github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f + github.com/dapr/kit v0.0.3 github.com/stretchr/testify v1.8.1 go.uber.org/multierr v1.8.0 ) @@ -37,7 +37,7 @@ require ( github.com/armon/go-metrics v0.4.1 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/cenkalti/backoff v2.2.1+incompatible // indirect - github.com/cenkalti/backoff/v4 v4.1.3 // indirect + github.com/cenkalti/backoff/v4 v4.2.0 // indirect github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/dimchansky/utfbom v1.1.1 // indirect diff --git a/tests/certification/bindings/azure/storagequeues/go.sum b/tests/certification/bindings/azure/storagequeues/go.sum index 3ff221002..4a0f12caa 100644 --- a/tests/certification/bindings/azure/storagequeues/go.sum +++ b/tests/certification/bindings/azure/storagequeues/go.sum @@ -121,8 +121,8 @@ github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0/go.mod h1:2Vqy6l github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= -github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= -github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/cenkalti/backoff/v4 v4.2.0 h1:HN5dHm3WBOgndBH6E8V0q2jIYIR3s9yglV8k/+MN3u4= +github.com/cenkalti/backoff/v4 v4.2.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= @@ -144,8 +144,8 @@ github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWH github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= -github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= -github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f/go.mod h1:i9t09QZw346M2RbuK7oJhssOP0HCAQObz61U4SBNJSU= +github.com/dapr/kit v0.0.3 h1:1FCnWjIuAS3OJzJhOlUKNzLxoazYhYIS4oCOOULmWBA= +github.com/dapr/kit v0.0.3/go.mod h1:+vh2UIRT0KzFm5YJWfj7az4XVSdodys1OCz1WzNe1Eo= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= diff --git a/tests/certification/bindings/cron/README.md b/tests/certification/bindings/cron/README.md new file mode 100644 index 000000000..c2f9f7f53 --- /dev/null +++ b/tests/certification/bindings/cron/README.md @@ -0,0 +1,15 @@ +# Cron certification testing + +This project aims to test the cron component under various conditions. + +## Test plan + +* Test cron triggers with different schedules and written in different cron formats within deadline limits +> Example: a cron trigger with a schedule `@every 1s` should trigger 10 times in the next 10 seconds +> Test cron triggers with schedule written in the standard crontab format `*/15 * * * *`, non-standard format `*/3 * * * * *`, quartz format `0 0 */6 ?* *` and macro format `@every 3s` +* Test cron triggers having same route +> Check if two cron triggers having different schedules of `@every 1s` and `@every 3s` respectively and having same app route `/cron` should both trigger the app correctly +* Test cron trigger on app restart +> Check if cron will still trigger the app in case the app listening to cron trigger crashes and restarts +* Test cron trigger on sidecar restart +> Check if the app is still triggered by cron in case of dapr sidecar restart. \ No newline at end of file diff --git a/tests/certification/bindings/cron/components/cron15m.yaml b/tests/certification/bindings/cron/components/cron15m.yaml new file mode 100644 index 000000000..1b7deb72d --- /dev/null +++ b/tests/certification/bindings/cron/components/cron15m.yaml @@ -0,0 +1,11 @@ +apiVersion: dapr.io/v1alpha1 +kind: Component +metadata: + name: cron15m +spec: + type: bindings.cron + version: v1 + metadata: + - name: schedule + # test standard crontab format + value: "*/15 * * * *" \ No newline at end of file diff --git a/tests/certification/bindings/cron/components/cron1s.yaml b/tests/certification/bindings/cron/components/cron1s.yaml new file mode 100644 index 000000000..1b41d60da --- /dev/null +++ b/tests/certification/bindings/cron/components/cron1s.yaml @@ -0,0 +1,12 @@ + +apiVersion: dapr.io/v1alpha1 +kind: Component +metadata: + name: cron1s +spec: + type: bindings.cron + version: v1 + metadata: + - name: schedule + # test non-standard macro format + value: "@every 1s" \ No newline at end of file diff --git a/tests/certification/bindings/cron/components/cron3s.yaml b/tests/certification/bindings/cron/components/cron3s.yaml new file mode 100644 index 000000000..1ff513a76 --- /dev/null +++ b/tests/certification/bindings/cron/components/cron3s.yaml @@ -0,0 +1,12 @@ + +apiVersion: dapr.io/v1alpha1 +kind: Component +metadata: + name: cron3s +spec: + type: bindings.cron + version: v1 + metadata: + - name: schedule + # test non-standard crontab format + value: "*/3 * * * * *" \ No newline at end of file diff --git a/tests/certification/bindings/cron/components/cron6h.yaml b/tests/certification/bindings/cron/components/cron6h.yaml new file mode 100644 index 000000000..7f6b1a85f --- /dev/null +++ b/tests/certification/bindings/cron/components/cron6h.yaml @@ -0,0 +1,11 @@ +apiVersion: dapr.io/v1alpha1 +kind: Component +metadata: + name: cron6h +spec: + type: bindings.cron + version: v1 + metadata: + - name: schedule + # test quartz crontab format + value: "0 0 */6 ? * *" \ No newline at end of file diff --git a/tests/certification/bindings/cron/components/cronMonthly.yaml b/tests/certification/bindings/cron/components/cronMonthly.yaml new file mode 100644 index 000000000..3cfc31fa0 --- /dev/null +++ b/tests/certification/bindings/cron/components/cronMonthly.yaml @@ -0,0 +1,11 @@ +apiVersion: dapr.io/v1alpha1 +kind: Component +metadata: + name: cronMonthly +spec: + type: bindings.cron + version: v1 + metadata: + - name: schedule + # test standard crontab format + value: "0 0 1 * *" \ No newline at end of file diff --git a/tests/certification/bindings/cron/components_sameroute/cron.yaml b/tests/certification/bindings/cron/components_sameroute/cron.yaml new file mode 100644 index 000000000..d08ca6101 --- /dev/null +++ b/tests/certification/bindings/cron/components_sameroute/cron.yaml @@ -0,0 +1,15 @@ + +# Testing two cron bindings with different schedule and same route +apiVersion: dapr.io/v1alpha1 +kind: Component +metadata: + name: cron +spec: + type: bindings.cron + version: v1 + metadata: + - name: schedule + # test non-standard macro format + value: "@every 1s" + - name: route + value: /cron \ No newline at end of file diff --git a/tests/certification/bindings/cron/components_sameroute/cron3s.yaml b/tests/certification/bindings/cron/components_sameroute/cron3s.yaml new file mode 100644 index 000000000..3ff25799f --- /dev/null +++ b/tests/certification/bindings/cron/components_sameroute/cron3s.yaml @@ -0,0 +1,15 @@ + +# Testing two cron bindings with different schedule and same route +apiVersion: dapr.io/v1alpha1 +kind: Component +metadata: + name: cron3s +spec: + type: bindings.cron + version: v1 + metadata: + - name: schedule + # test non-standard crontab format + value: "*/3 * * * * *" + - name: route + value: /cron \ No newline at end of file diff --git a/tests/certification/bindings/cron/config.yaml b/tests/certification/bindings/cron/config.yaml new file mode 100644 index 000000000..3a2e2b30c --- /dev/null +++ b/tests/certification/bindings/cron/config.yaml @@ -0,0 +1,4 @@ +apiVersion: dapr.io/v1alpha1 +kind: Configuration +metadata: + name: cronbindingconfig \ No newline at end of file diff --git a/tests/certification/bindings/cron/cron_test.go b/tests/certification/bindings/cron/cron_test.go new file mode 100644 index 000000000..91e095850 --- /dev/null +++ b/tests/certification/bindings/cron/cron_test.go @@ -0,0 +1,293 @@ +/* +Copyright 2021 The Dapr Authors +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package cron_test + +import ( + "context" + "fmt" + "testing" + "time" + + "github.com/benbjohnson/clock" + "github.com/stretchr/testify/require" + + "github.com/dapr/components-contrib/bindings" + "github.com/dapr/components-contrib/bindings/cron" + "github.com/dapr/dapr/pkg/runtime" + "github.com/dapr/go-sdk/service/common" + "github.com/dapr/kit/logger" + + // Certification testing runnables + "github.com/dapr/components-contrib/tests/certification/embedded" + "github.com/dapr/components-contrib/tests/certification/flow" + "github.com/dapr/components-contrib/tests/certification/flow/app" + "github.com/dapr/components-contrib/tests/certification/flow/sidecar" + + bindings_loader "github.com/dapr/dapr/pkg/components/bindings" + dapr_testing "github.com/dapr/dapr/pkg/testing" +) + +type cronTest struct { + cronName string // name of the cron binding + schedule string // cron schedule + expectedTriggerCount int // expected number of triggers within the deadline + timeoutToObserveTriggers time.Duration // time to add to the mock clock to observe triggers + clk *clock.Mock // mock clock +} + +// Test cron triggers with different schedules +// +//nolint:dupword +func TestCronBindingTrigger(t *testing.T) { + appName := "cronapp" + sidecarName := "cron-sidecar" + + // starting time for the mock clock + startTime := time.Date(2022, time.January, 1, 0, 0, 0, 0, time.UTC) + + testMatrix := []cronTest{ + { + cronName: "cron1s", + schedule: "@every 1s", // Test macro cron format + expectedTriggerCount: 10, + timeoutToObserveTriggers: time.Second * 10, + }, + { + cronName: "cron3s", + schedule: "*/3 * * * * *", // Test non-standard crontab format + expectedTriggerCount: 5, + timeoutToObserveTriggers: time.Second * 15, + }, + { + cronName: "cron15m", + schedule: "*/15 * * * *", // Test standard crontab format + expectedTriggerCount: 4, + timeoutToObserveTriggers: time.Hour * 1, + }, + { + cronName: "cron6h", + schedule: "0 0 */6 ? * *", // Test quartz cron format + expectedTriggerCount: 4, + timeoutToObserveTriggers: time.Hour * 24, + }, + { + cronName: "cronMonthly", + schedule: "0 0 1 * *", // Test standard cron format + expectedTriggerCount: 1, + timeoutToObserveTriggers: time.Hour * 24 * 31, // Add 31 days to the mock clock + }, + } + + for _, cronTest := range testMatrix { + cronTest.clk = clock.NewMock() + cronTest.clk.Set(startTime) + + ports, _ := dapr_testing.GetFreePorts(3) + grpcPort := ports[0] + httpPort := ports[1] + appPort := ports[2] + + // total times cron is triggered + observedTriggerCount := 0 + + flow.New(t, "test cron trigger with different schedules"). + Step(app.Run(appName, fmt.Sprintf(":%d", appPort), appWithTriggerCounter(t, cronTest.cronName, &observedTriggerCount))). + Step(sidecar.Run(sidecarName, + embedded.WithComponentsPath("./components"), + embedded.WithDaprGRPCPort(grpcPort), + embedded.WithAppProtocol(runtime.HTTPProtocol, appPort), + embedded.WithDaprHTTPPort(httpPort), + componentRuntimeOptions(cronTest.clk), + )). + Step("advance the clock time", addTimeToMockClock(cronTest.clk, cronTest.timeoutToObserveTriggers)). + Step("assert cron triggered within deadline", assertTriggerCount(t, cronTest.expectedTriggerCount, &observedTriggerCount)). + Step("stop sidecar", sidecar.Stop(sidecarName)). + Step("stop app", app.Stop(appName)). + Run() + } +} + +// Test two cron bindings having different schedules @every 1s and @every 3s triggering the same app route +func TestCronBindingsWithSameRoute(t *testing.T) { + ports, _ := dapr_testing.GetFreePorts(3) + grpcPort := ports[0] + httpPort := ports[1] + appPort := ports[2] + + cronName := "cron" + appName := "cronapp" + sidecarName := "cron-sidecar" + + // check if cron triggers 20 times within 15 seconds (15 times from @every 1s binding and 5 times from @every 3s binding) + expectedTriggerCount := 20 + // total times cron is triggered + observedTriggerCount := 0 + // total time for all triggers to be observed + timeoutToObserveTriggers := time.Second * 15 + + clk := clock.NewMock() + + flow.New(t, "test cron bindings with different schedules and same route"). + Step(app.Run(appName, fmt.Sprintf(":%d", appPort), appWithTriggerCounter(t, cronName, &observedTriggerCount))). + Step(sidecar.Run(sidecarName, + embedded.WithComponentsPath("./components_sameroute"), + embedded.WithDaprGRPCPort(grpcPort), + embedded.WithAppProtocol(runtime.HTTPProtocol, appPort), + embedded.WithDaprHTTPPort(httpPort), + componentRuntimeOptions(clk), + )). + Step("advance the clock time", addTimeToMockClock(clk, timeoutToObserveTriggers)). + Step("assert cron triggered within deadline", assertTriggerCount(t, expectedTriggerCount, &observedTriggerCount)). + Step("stop sidecar", sidecar.Stop(sidecarName)). + Step("stop app", app.Stop(appName)). + Run() +} + +// For cron component with trigger @every 3s, check if the app is invoked correctly on app restart +func TestCronBindingWithAppRestart(t *testing.T) { + ports, _ := dapr_testing.GetFreePorts(3) + grpcPort := ports[0] + httpPort := ports[1] + appPort := ports[2] + + cronName := "cron3s" + appName := "cronapp3s" + sidecarName := "cron-sidecar" + + // check if cron triggers 5 times within 15 seconds + expectedTriggerCount := 5 + // total times cron is triggered + observedTriggerCount := 0 + // total time for all triggers to be observed + timeoutToObserveTriggers := time.Second * 15 + // allow cron to trigger once before stopping the app + waitBeforeAppStop := time.Second * 5 + // wait for some time after the app has stopped, before restarting the app + waitBeforeAppRestart := time.Second * 5 + + clk := clock.NewMock() + + flow.New(t, "test cron trigger schedule @every3s with app restart"). + Step(app.Run(appName, fmt.Sprintf(":%d", appPort), appWithTriggerCounter(t, cronName, &observedTriggerCount))). + Step(sidecar.Run(sidecarName, + embedded.WithComponentsPath("./components"), + embedded.WithDaprGRPCPort(grpcPort), + embedded.WithAppProtocol(runtime.HTTPProtocol, appPort), + embedded.WithDaprHTTPPort(httpPort), + componentRuntimeOptions(clk), + )). + Step("allow cron to trigger once", addTimeToMockClock(clk, waitBeforeAppStop), flow.Sleep(waitBeforeAppStop)). + Step("stop app", app.Stop(appName)). + Step("wait before app restart", addTimeToMockClock(clk, waitBeforeAppRestart), flow.Sleep(waitBeforeAppRestart)). + Step(app.Run(appName, fmt.Sprintf(":%d", appPort), appWithTriggerCounter(t, cronName, &observedTriggerCount))). + Step("advance the clock time", addTimeToMockClock(clk, timeoutToObserveTriggers)). + Step("assert cron triggered within deadline", assertTriggerCount(t, expectedTriggerCount, &observedTriggerCount)). + Step("stop sidecar", sidecar.Stop(sidecarName)). + Step("stop app", app.Stop(appName)). + Run() +} + +// For cron component with trigger @every 3s, check if the app is invoked correctly on sidecar restart +func TestCronBindingWithSidecarRestart(t *testing.T) { + ports, _ := dapr_testing.GetFreePorts(3) + grpcPort := ports[0] + httpPort := ports[1] + appPort := ports[2] + + cronName := "cron3s" + appName := "cronapp3s" + sidecarName := "cron-sidecar" + + // check if cron triggers 5 times within 15 seconds + expectedTriggerCount := 5 + // total times cron is triggered + observedTriggerCount := 0 + // total time for all triggers to be observed + timeoutToObserveTriggers := time.Second * 15 + // allow cron to trigger once before stopping the sidecar + waitBeforeSidecarStop := time.Second * 5 + // wait for some time after the app has stopped, before restarting the sidecar + waitBeforeSidecarRestart := time.Second * 5 + + clk := clock.NewMock() + + flow.New(t, "test cron trigger schedule @every 3s with sidecar restart"). + Step(app.Run(appName, fmt.Sprintf(":%d", appPort), appWithTriggerCounter(t, cronName, &observedTriggerCount))). + Step(sidecar.Run(sidecarName, + embedded.WithComponentsPath("./components"), + embedded.WithDaprGRPCPort(grpcPort), + embedded.WithAppProtocol(runtime.HTTPProtocol, appPort), + embedded.WithDaprHTTPPort(httpPort), + componentRuntimeOptions(clk), + )). + Step("allow cron to trigger once", addTimeToMockClock(clk, waitBeforeSidecarStop), flow.Sleep(waitBeforeSidecarStop)). + Step("stop sidecar", sidecar.Stop(sidecarName)). + Step("wait before sidecar restart", addTimeToMockClock(clk, waitBeforeSidecarRestart), flow.Sleep(waitBeforeSidecarRestart)). + Step(sidecar.Run(sidecarName, + embedded.WithComponentsPath("./components"), + embedded.WithDaprGRPCPort(grpcPort), + embedded.WithAppProtocol(runtime.HTTPProtocol, appPort), + embedded.WithDaprHTTPPort(httpPort), + componentRuntimeOptions(clk), + )). + Step("advance the clock time", addTimeToMockClock(clk, timeoutToObserveTriggers)). + Step("assert cron triggered within deadline", assertTriggerCount(t, expectedTriggerCount, &observedTriggerCount)). + Step("stop sidecar", sidecar.Stop(sidecarName)). + Step("stop app", app.Stop(appName)). + Run() +} + +func appWithTriggerCounter(t *testing.T, cronName string, triggeredCount *int) func(ctx flow.Context, s common.Service) error { + return func(ctx flow.Context, s common.Service) error { + // Setup the input binding endpoint + err := s.AddBindingInvocationHandler(cronName, func(_ context.Context, in *common.BindingEvent) ([]byte, error) { + ctx.Logf("Cron triggered at %s", time.Now().String()) + (*triggeredCount)++ + return []byte("{}"), nil + }) + require.NoError(t, err) + return err + } +} + +func addTimeToMockClock(clk *clock.Mock, timeToAdd time.Duration) func(ctx flow.Context) error { + return func(ctx flow.Context) error { + clk.Add(timeToAdd) + return nil + } +} + +func assertTriggerCount(t *testing.T, expectedTriggerCount int, observedTriggerCount *int) func(ctx flow.Context) error { + return func(ctx flow.Context) error { + // allow up to 1 extra trigger to account for additional timeout(@schedule interval of cron trigger) provided in the tests + if *observedTriggerCount != expectedTriggerCount && *observedTriggerCount != expectedTriggerCount+1 { + t.Errorf("expected %d triggers, got %d", expectedTriggerCount, *observedTriggerCount) + } + return nil + } +} + +func componentRuntimeOptions(clk clock.Clock) []runtime.Option { + log := logger.NewLogger("dapr.components") + + bindingsRegistry := bindings_loader.NewRegistry() + bindingsRegistry.Logger = log + + bindingsRegistry.RegisterInputBinding(func(l logger.Logger) bindings.InputBinding { + return cron.NewCronWithClock(l, clk) + }, "cron") + return []runtime.Option{ + runtime.WithBindings(bindingsRegistry), + } +} diff --git a/tests/certification/bindings/cron/go.mod b/tests/certification/bindings/cron/go.mod new file mode 100644 index 000000000..43a381177 --- /dev/null +++ b/tests/certification/bindings/cron/go.mod @@ -0,0 +1,152 @@ +module github.com/dapr/components-contrib/tests/certification/bindings/cron + +go 1.19 + +require ( + github.com/benbjohnson/clock v1.3.0 + github.com/dapr/components-contrib v1.9.1-0.20221025205611-e38369028650 + github.com/dapr/components-contrib/tests/certification v0.0.0-20220519061249-c2cb1dad5bb0 + github.com/dapr/dapr v1.9.4-0.20221121055721-6683f7582ac4 + github.com/dapr/go-sdk v1.6.0 + github.com/dapr/kit v0.0.3 + github.com/stretchr/testify v1.8.1 +) + +require ( + github.com/cenkalti/backoff/v4 v4.2.0 // indirect + github.com/emicklei/go-restful/v3 v3.9.0 // indirect + github.com/evanphx/json-patch/v5 v5.6.0 // indirect + github.com/go-openapi/jsonpointer v0.19.5 // indirect + github.com/go-openapi/jsonreference v0.20.0 // indirect + github.com/go-openapi/swag v0.22.3 // indirect + github.com/google/gnostic v0.6.9 // indirect + github.com/google/uuid v1.3.0 // indirect + github.com/jhump/protoreflect v1.13.0 // indirect + github.com/josharian/intern v1.0.0 // indirect + github.com/mailru/easyjson v0.7.7 // indirect + github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect + github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 // indirect + github.com/tidwall/transform v0.0.0-20201103190739-32f242e2dbde // indirect + golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f // indirect + golang.org/x/sync v0.1.0 // indirect +) + +require ( + contrib.go.opencensus.io/exporter/prometheus v0.4.2 // indirect + github.com/AdhityaRamadhanus/fasthttpcors v0.0.0-20170121111917-d4c07198763a // indirect + github.com/PuerkitoBio/purell v1.2.0 // indirect + github.com/andybalholm/brotli v1.0.4 // indirect + github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20220418222510-f25a4f6275ed // indirect + github.com/armon/go-metrics v0.4.1 // indirect + github.com/beorn7/perks v1.0.1 // indirect + github.com/cenkalti/backoff v2.2.1+incompatible // indirect + github.com/cespare/xxhash/v2 v2.1.2 // indirect + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/fasthttp/router v1.4.12 // indirect + github.com/fatih/color v1.13.0 // indirect + github.com/fsnotify/fsnotify v1.6.0 // indirect + github.com/ghodss/yaml v1.0.0 // indirect + github.com/go-kit/log v0.2.1 // indirect + github.com/go-logfmt/logfmt v0.5.1 // indirect + github.com/go-logr/logr v1.2.3 // indirect + github.com/go-logr/stdr v1.2.2 // indirect + github.com/gogo/protobuf v1.3.2 // indirect + github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect + github.com/golang/mock v1.6.0 // indirect + github.com/golang/protobuf v1.5.2 // indirect + github.com/google/cel-go v0.12.5 // indirect + github.com/google/go-cmp v0.5.9 // indirect + github.com/google/gofuzz v1.2.0 // indirect + github.com/gorilla/mux v1.8.0 // indirect + github.com/grandcat/zeroconf v1.0.0 // indirect + github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0 // indirect + github.com/hashicorp/consul/api v1.15.2 // indirect + github.com/hashicorp/errwrap v1.1.0 // indirect + github.com/hashicorp/go-cleanhttp v0.5.2 // indirect + github.com/hashicorp/go-hclog v1.3.1 // indirect + github.com/hashicorp/go-immutable-radix v1.3.1 // indirect + github.com/hashicorp/go-multierror v1.1.1 // indirect + github.com/hashicorp/go-rootcerts v1.0.2 // indirect + github.com/hashicorp/golang-lru v0.5.4 // indirect + github.com/hashicorp/serf v0.10.1 // indirect + github.com/imdario/mergo v0.3.13 // indirect + github.com/json-iterator/go v1.1.12 // indirect + github.com/klauspost/compress v1.15.11 // indirect + github.com/kr/pretty v0.3.0 // indirect + github.com/mattn/go-colorable v0.1.13 // indirect + github.com/mattn/go-isatty v0.0.16 // indirect + github.com/matttproud/golang_protobuf_extensions v1.0.2 // indirect + github.com/miekg/dns v1.1.50 // indirect + github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 // indirect + github.com/mitchellh/go-homedir v1.1.0 // indirect + github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 // indirect + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect + github.com/modern-go/reflect2 v1.0.2 // indirect + github.com/openzipkin/zipkin-go v0.4.1 // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/prometheus/client_golang v1.13.0 // indirect + github.com/prometheus/client_model v0.3.0 // indirect + github.com/prometheus/common v0.37.0 // indirect + github.com/prometheus/procfs v0.8.0 // indirect + github.com/prometheus/statsd_exporter v0.22.8 // indirect + github.com/savsgio/gotils v0.0.0-20220530130905-52f3993e8d6d // indirect + github.com/sirupsen/logrus v1.9.0 // indirect + github.com/sony/gobreaker v0.5.0 // indirect + github.com/spf13/pflag v1.0.5 // indirect + github.com/stoewer/go-strcase v1.2.0 // indirect + github.com/stretchr/objx v0.5.0 // indirect; indirec + github.com/valyala/bytebufferpool v1.0.0 // indirect + github.com/valyala/fasthttp v1.41.0 // indirect + go.opencensus.io v0.23.0 // indirect + go.opentelemetry.io/otel v1.11.1 // indirect + go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.11.1 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.11.1 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.11.1 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.11.1 // indirect + go.opentelemetry.io/otel/exporters/zipkin v1.11.1 // indirect + go.opentelemetry.io/otel/sdk v1.11.1 // indirect + go.opentelemetry.io/otel/trace v1.11.1 // indirect + go.opentelemetry.io/proto/otlp v0.19.0 // indirect + go.uber.org/atomic v1.10.0 // indirect + golang.org/x/mod v0.6.0 // indirect + golang.org/x/net v0.1.0 // indirect + golang.org/x/oauth2 v0.1.0 // indirect + golang.org/x/sys v0.1.0 // indirect + golang.org/x/term v0.1.0 // indirect + golang.org/x/text v0.4.0 // indirect + golang.org/x/time v0.0.0-20220922220347-f3bd1da661af // indirect + golang.org/x/tools v0.2.0 // indirect + gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect + google.golang.org/appengine v1.6.7 // indirect + google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c // indirect + google.golang.org/grpc v1.50.1 // indirect + google.golang.org/protobuf v1.28.1 // indirect + gopkg.in/inf.v0 v0.9.1 // indirect + gopkg.in/yaml.v2 v2.4.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect + k8s.io/api v0.25.3 // indirect + k8s.io/apiextensions-apiserver v0.25.3 // indirect + k8s.io/apimachinery v0.25.3 // indirect + k8s.io/client-go v0.25.3 // indirect + k8s.io/component-base v0.25.3 // indirect + k8s.io/klog/v2 v2.80.1 // indirect + k8s.io/kube-openapi v0.0.0-20220928191237-829ce0c27909 // indirect + k8s.io/utils v0.0.0-20221012122500-cfd413dd9e85 // indirect + sigs.k8s.io/controller-runtime v0.13.0 // indirect + sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 // indirect + sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect + sigs.k8s.io/yaml v1.3.0 // indirect +) + +replace github.com/dapr/dapr => github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0 + +replace github.com/dapr/components-contrib/tests/certification => ../../ + +replace github.com/dapr/components-contrib => ../../../../ + +// Uncomment for local development for testing with changes +// in the Dapr runtime. Don't commit with this uncommented! +// +// replace github.com/dapr/dapr => ../../../../../dapr diff --git a/tests/certification/bindings/cron/go.sum b/tests/certification/bindings/cron/go.sum new file mode 100644 index 000000000..190b7fb8b --- /dev/null +++ b/tests/certification/bindings/cron/go.sum @@ -0,0 +1,925 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= +cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= +cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= +cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= +cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= +cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= +cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= +cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= +cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= +cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= +cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= +cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= +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/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/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/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= +contrib.go.opencensus.io/exporter/prometheus v0.4.2 h1:sqfsYl5GIY/L570iT+l93ehxaWJs2/OwXtiWwew3oAg= +contrib.go.opencensus.io/exporter/prometheus v0.4.2/go.mod h1:dvEHbiKmgvbr5pjaF9fpw1KeYcjrnC1J8B+JKjsZyRQ= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +github.com/AdhityaRamadhanus/fasthttpcors v0.0.0-20170121111917-d4c07198763a h1:XVdatQFSP2YhJGjqLLIfW8QBk4loz/SCe/PxkXDiW+s= +github.com/AdhityaRamadhanus/fasthttpcors v0.0.0-20170121111917-d4c07198763a/go.mod h1:C0A1KeiVHs+trY6gUTPhhGammbrZ30ZfXRW/nuT7HLw= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= +github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +github.com/PuerkitoBio/purell v1.2.0 h1:/Jdm5QfyM8zdlqT6WVZU4cfP23sot6CEHA4CS49Ezig= +github.com/PuerkitoBio/purell v1.2.0/go.mod h1:OhLRTaaIzhvIyofkJfB24gokC7tM42Px5UhoT32THBk= +github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= +github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE= +github.com/andybalholm/brotli v1.0.4 h1:V7DdXeJtZscaqfNuAdSRuRFzuiKlHSC/Zh3zl9qY3JY= +github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= +github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= +github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20220418222510-f25a4f6275ed h1:ue9pVfIcP+QMEjfgo/Ez4ZjNZfonGgR6NgjMaJMu1Cg= +github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20220418222510-f25a4f6275ed/go.mod h1:F7bn7fEU90QkQ3tnmaTx3LTKLEDqnwWODIYppRQ5hnY= +github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= +github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= +github.com/armon/go-metrics v0.3.10/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= +github.com/armon/go-metrics v0.4.1 h1:hR91U9KYmb6bLBYLQjyM+3j+rcd/UhE+G78SFnF8gJA= +github.com/armon/go-metrics v0.4.1/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4= +github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= +github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= +github.com/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A= +github.com/benbjohnson/clock v1.3.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= +github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= +github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= +github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= +github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0 h1:DHv0Odl7nn296mOlv9HiqANeSywCLVLdoPeNY/t18x0= +github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0/go.mod h1:2Vqy6l1G2eq24stXXRqTE+Do9p+pAISrgGJ1BPknok8= +github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= +github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0= +github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= +github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= +github.com/cenkalti/backoff/v4 v4.2.0 h1:HN5dHm3WBOgndBH6E8V0q2jIYIR3s9yglV8k/+MN3u4= +github.com/cenkalti/backoff/v4 v4.2.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= +github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= +github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= +github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= +github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/dapr/go-sdk v1.6.0 h1:jg5A2khSCHF8bGZsig5RWN/gD0jjitszc2V6Uq2pPdY= +github.com/dapr/go-sdk v1.6.0/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= +github.com/dapr/kit v0.0.3 h1:1FCnWjIuAS3OJzJhOlUKNzLxoazYhYIS4oCOOULmWBA= +github.com/dapr/kit v0.0.3/go.mod h1:+vh2UIRT0KzFm5YJWfj7az4XVSdodys1OCz1WzNe1Eo= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= +github.com/emicklei/go-restful/v3 v3.9.0 h1:XwGDlfxEnQZzuopoqxwSEllNcCOM9DhhFyhFIIGKwxE= +github.com/emicklei/go-restful/v3 v3.9.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= +github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/evanphx/json-patch v0.5.2/go.mod h1:ZWS5hhDbVDyob71nXKNL0+PWn6ToqBHMikGIFbs31qQ= +github.com/evanphx/json-patch v4.12.0+incompatible h1:4onqiflcdA9EOZ4RxV643DvftH5pOlLGNtQ5lPWQu84= +github.com/evanphx/json-patch/v5 v5.6.0 h1:b91NhWfaz02IuVxO9faSllyAtNXHMPkC5J8sJCLunww= +github.com/evanphx/json-patch/v5 v5.6.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= +github.com/fasthttp/router v1.4.12 h1:QEgK+UKARaC1bAzJgnIhdUMay6nwp+YFq6VGPlyKN1o= +github.com/fasthttp/router v1.4.12/go.mod h1:41Qdc4Z4T2pWVVtATHCnoUnOtxdBoeKEYJTXhHwbxCQ= +github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= +github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= +github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= +github.com/flowstack/go-jsonschema v0.1.1/go.mod h1:yL7fNggx1o8rm9RlgXv7hTBWxdBM0rVwpMwimd3F3N0= +github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= +github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= +github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= +github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= +github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU= +github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= +github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= +github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= +github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= +github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA= +github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= +github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= +github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= +github.com/go-logr/zapr v1.2.3 h1:a9vnzlIBPQBBkeaR9IuMUfmVOrQlkoC4YfPoFkX3T7A= +github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= +github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY= +github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= +github.com/go-openapi/jsonreference v0.20.0 h1:MYlu0sBgChmCfJxxUKZ8g1cPWFOB37YSZqewK7OKeyA= +github.com/go-openapi/jsonreference v0.20.0/go.mod h1:Ag74Ico3lPc+zR+qjn4XBUmXymS4zJbYVCZmcgkasdo= +github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= +github.com/go-openapi/swag v0.22.3 h1:yMBqmnQ0gyZvEb/+KzuWZOXgllrXT4SADYbvDaXHv/g= +github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= +github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/glog v1.0.0 h1:nfP3RFugxnNRyKgeWd4oI1nYvXpxrx8ck8ZrcizshdQ= +github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= +github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= +github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= +github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= +github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4= +github.com/google/cel-go v0.12.5 h1:DmzaiSgoaqGCjtpPQWl26/gND+yRpim56H1jCVev6d8= +github.com/google/cel-go v0.12.5/go.mod h1:Jk7ljRzLBhkmiAwBoUxB1sZSCVBAzkqPF25olK/iRDw= +github.com/google/gnostic v0.6.9 h1:ZK/5VhkoX835RikCHpSUJV9a+S3e1zLh59YnyWeBW+0= +github.com/google/gnostic v0.6.9/go.mod h1:Nm8234We1lq6iB9OmlgNv3nH91XLLVZHCDayfA3xq+E= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= +github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= +github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= +github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= +github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= +github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= +github.com/grandcat/zeroconf v1.0.0 h1:uHhahLBKqwWBV6WZUDAT71044vwOTL+McW0mBJvo6kE= +github.com/grandcat/zeroconf v1.0.0/go.mod h1:lTKmG1zh86XyCoUeIHSA4FJMBwCJiQmGfcP2PdzytEs= +github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 h1:+9834+KizmvFV7pXQGSXQTsaWhq2GjuNUt0aUU0YBYw= +github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y= +github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0 h1:BZHcxBETFHIdVyhyEfOvn/RdU/QGdLI4y34qQGjGWO0= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0/go.mod h1:hgWBS7lorOAVIJEQMi4ZsPv9hVvWI6+ch50m39Pf2Ks= +github.com/hashicorp/consul/api v1.15.2 h1:3Q/pDqvJ7udgt/60QOOW/p/PeKioQN+ncYzzCdN2av0= +github.com/hashicorp/consul/api v1.15.2/go.mod h1:v6nvB10borjOuIwNRZYPZiHKrTM/AyrGtd0WVVodKM8= +github.com/hashicorp/consul/sdk v0.11.0 h1:HRzj8YSCln2yGgCumN5CL8lYlD3gBurnervJRJAZyC4= +github.com/hashicorp/consul/sdk v0.11.0/go.mod h1:yPkX5Q6CsxTFMjQQDJwzeNmUUF5NUGGbrDsv9wTb8cw= +github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= +github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= +github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= +github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= +github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= +github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= +github.com/hashicorp/go-hclog v0.14.1/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= +github.com/hashicorp/go-hclog v1.3.1 h1:vDwF1DFNZhntP4DAjuTpOw3uEgMUpXh1pB5fW9DqHpo= +github.com/hashicorp/go-hclog v1.3.1/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= +github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-immutable-radix v1.3.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJFeZnpfm2KLowc= +github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= +github.com/hashicorp/go-msgpack v0.5.5/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= +github.com/hashicorp/go-msgpack v1.1.5 h1:9byZdVjKTe5mce63pRVNP1L7UAmdHOTEMGehn6KvJWs= +github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= +github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= +github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= +github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= +github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= +github.com/hashicorp/go-rootcerts v1.0.2 h1:jzhAVGtqPKbwpyCPELlgNWhE1znq+qwJtW5Oi2viEzc= +github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= +github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= +github.com/hashicorp/go-sockaddr v1.0.2 h1:ztczhD1jLxIRjVejw8gFomI1BQZOe2WoVOu0SyteCQc= +github.com/hashicorp/go-sockaddr v1.0.2/go.mod h1:rB4wwRAUzs07qva3c5SdrY/NEtAUjGlgmH/UkBUC97A= +github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= +github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.3 h1:2gKiV6YVmrJ1i2CKKa9obLvRieoRGviZFL26PcT/Co8= +github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc= +github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= +github.com/hashicorp/mdns v1.0.4/go.mod h1:mtBihi+LeNXGtG8L9dX59gAEa12BDtBQSp4v/YAJqrc= +github.com/hashicorp/memberlist v0.3.0/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= +github.com/hashicorp/memberlist v0.3.1/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= +github.com/hashicorp/memberlist v0.5.0 h1:EtYPN8DpAURiapus508I4n9CzHs2W+8NZGbmmR/prTM= +github.com/hashicorp/memberlist v0.5.0/go.mod h1:yvyXLpo0QaGE59Y7hDTsTzDD25JYBZ4mHgHUZ8lrOI0= +github.com/hashicorp/serf v0.9.7/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= +github.com/hashicorp/serf v0.10.1 h1:Z1H2J60yRKvfDYAOZLd2MU0ND4AH/WDz7xYHDWQsIPY= +github.com/hashicorp/serf v0.10.1/go.mod h1:yL2t6BqATOLGc5HF7qbFkTfXoPIY0WZdWHfEvMqbG+4= +github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/imdario/mergo v0.3.13 h1:lFzP57bqS/wsqKssCGmtLAb8A0wKjLGrve2q3PPVcBk= +github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK2O4oXg= +github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= +github.com/jhump/gopoet v0.0.0-20190322174617-17282ff210b3/go.mod h1:me9yfT6IJSlOL3FCfrg+L6yzUEZ+5jW6WHt4Sk+UPUI= +github.com/jhump/gopoet v0.1.0/go.mod h1:me9yfT6IJSlOL3FCfrg+L6yzUEZ+5jW6WHt4Sk+UPUI= +github.com/jhump/goprotoc v0.5.0/go.mod h1:VrbvcYrQOrTi3i0Vf+m+oqQWk9l72mjkJCYo7UvLHRQ= +github.com/jhump/protoreflect v1.11.0/go.mod h1:U7aMIjN0NWq9swDP7xDdoMfRHb35uiuTd3Z9nFXJf5E= +github.com/jhump/protoreflect v1.13.0 h1:zrrZqa7JAc2YGgPSzZZkmUXJ5G6NRPdxOg/9t7ISImA= +github.com/jhump/protoreflect v1.13.0/go.mod h1:JytZfP5d0r8pVNLZvai7U/MCuTWITgrI4tTg7puQFKI= +github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= +github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= +github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= +github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= +github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= +github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= +github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= +github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= +github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/compress v1.15.0/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= +github.com/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= +github.com/klauspost/compress v1.15.11 h1:Lcadnb3RKGin4FYM/orgq0qde+nc15E5Cbqg4B9Sx9c= +github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +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/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= +github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= +github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= +github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= +github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= +github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= +github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= +github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= +github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/matttproud/golang_protobuf_extensions v1.0.2 h1:hAHbPm5IJGijwng3PWk09JkG9WeqChjprR5s9bBZ+OM= +github.com/matttproud/golang_protobuf_extensions v1.0.2/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= +github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= +github.com/miekg/dns v1.1.27/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM= +github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= +github.com/miekg/dns v1.1.50 h1:DQUfb9uc6smULcREF09Uc+/Gd46YWqJd5DbpPE9xkcA= +github.com/miekg/dns v1.1.50/go.mod h1:e3IlAVfNqAllflbibAZEWOXOQ+Ynzk/dDozDxY7XnME= +github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 h1:lYpkrQH5ajf0OXOcUbGjvZxxijuBwbbmlSxLiuofa+g= +github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ= +github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= +github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI= +github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= +github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= +github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 h1:BpfhmLKZf+SjVanKKhCgf3bg+511DmU9eDQTen7LLbY= +github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= +github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= +github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= +github.com/onsi/ginkgo/v2 v2.1.6 h1:Fx2POJZfKRQcM1pH49qSZiYeu319wji004qX+GDovrU= +github.com/onsi/gomega v1.20.1 h1:PA/3qinGoukvymdIDV8pii6tiZgC8kbmJO6Z5+b002Q= +github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/openzipkin/zipkin-go v0.4.1 h1:kNd/ST2yLLWhaWrkgchya40TJabe8Hioj9udfPcEO5A= +github.com/openzipkin/zipkin-go v0.4.1/go.mod h1:qY0VqDSN1pOBN94dBc6w2GJlWLiovAyg7Qt6/I9HecM= +github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= +github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 h1:Ii+DKncOVM8Cu1Hc+ETb5K+23HdAMvESYE3ZJ5b5cMI= +github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE= +github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= +github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= +github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= +github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= +github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= +github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= +github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= +github.com/prometheus/client_golang v1.12.2/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= +github.com/prometheus/client_golang v1.13.0 h1:b71QUfeo5M8gq2+evJdTPfZhYMAU0uKPkyPJ7TPsloU= +github.com/prometheus/client_golang v1.13.0/go.mod h1:vTeo+zgvILHsnnj/39Ou/1fPN5nJFOEMgftOUOmlvYQ= +github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.3.0 h1:UBgGFHqYdG/TPFD1B1ogZywDqEkwp3fBMvqdiQ7Xew4= +github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w= +github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= +github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= +github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= +github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= +github.com/prometheus/common v0.35.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= +github.com/prometheus/common v0.37.0 h1:ccBbHCgIiT9uSoFY0vX8H3zsNR5eLt17/RQLUvn8pXE= +github.com/prometheus/common v0.37.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= +github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= +github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= +github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= +github.com/prometheus/procfs v0.8.0 h1:ODq8ZFEaYeCaZOJlZZdJA2AbQR98dSHSM1KW/You5mo= +github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4= +github.com/prometheus/statsd_exporter v0.22.7/go.mod h1:N/TevpjkIh9ccs6nuzY3jQn9dFqnUakOjnEuMPJJJnI= +github.com/prometheus/statsd_exporter v0.22.8 h1:Qo2D9ZzaQG+id9i5NYNGmbf1aa/KxKbB9aKfMS+Yib0= +github.com/prometheus/statsd_exporter v0.22.8/go.mod h1:/DzwbTEaFTE0Ojz5PqcSk6+PFHOPWGxdXVr6yC8eFOM= +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/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= +github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= +github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= +github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= +github.com/savsgio/gotils v0.0.0-20220530130905-52f3993e8d6d h1:Q+gqLBOPkFGHyCJxXMRqtUgUbTjI8/Ze8vu8GGyNFwo= +github.com/savsgio/gotils v0.0.0-20220530130905-52f3993e8d6d/go.mod h1:Gy+0tqhJvgGlqnTF8CVGP0AaGRjwBtXs/a5PA0Y3+A4= +github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I= +github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= +github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= +github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= +github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= +github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= +github.com/sony/gobreaker v0.5.0 h1:dRCvqm0P490vZPmy7ppEk2qCnCieBooFJ+YoXGYB+yg= +github.com/sony/gobreaker v0.5.0/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/stoewer/go-strcase v1.2.0 h1:Z2iHWqGXH00XYgqDmNgQbIBxf3wrNq0F3feEy0ainaU= +github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stvp/go-udp-testing v0.0.0-20201019212854-469649b16807/go.mod h1:7jxmlfBCDBXRzr0eAQJ48XC1hBu1np4CS5+cHEYfwpc= +github.com/tidwall/transform v0.0.0-20201103190739-32f242e2dbde h1:AMNpJRc7P+GTwVbl8DkK2I9I8BBUzNiHuH/tlxrpan0= +github.com/tidwall/transform v0.0.0-20201103190739-32f242e2dbde/go.mod h1:MvrEmduDUz4ST5pGZ7CABCnOU5f3ZiOAZzT6b1A6nX8= +github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= +github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= +github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= +github.com/valyala/fasthttp v1.40.0/go.mod h1:t/G+3rLek+CyY9bnIE+YlMRddxVAAGjhxndDB4i4C0I= +github.com/valyala/fasthttp v1.41.0 h1:zeR0Z1my1wDHTRiamBCXVglQdbUwgb9uWG3k1HQz6jY= +github.com/valyala/fasthttp v1.41.0/go.mod h1:f6VbjjoI3z1NDOZOv17o6RvtRSWxC77seBFc2uWtgiY= +github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7FwZEA7Ioqkc= +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 v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= +github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= +go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= +go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.23.0 h1:gqCw0LfLxScz8irSi8exQc7fyQ0fKQU/qnC/X8+V/1M= +go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= +go.opentelemetry.io/otel v1.11.1 h1:4WLLAmcfkmDk2ukNXJyq3/kiz/3UzCaYq6PskJsaou4= +go.opentelemetry.io/otel v1.11.1/go.mod h1:1nNhXBbWSD0nsL38H6btgnFN2k4i0sNLHNNMZMSbUGE= +go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.11.1 h1:X2GndnMCsUPh6CiY2a+frAbNsXaPLbB0soHRYhAZ5Ig= +go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.11.1/go.mod h1:i8vjiSzbiUC7wOQplijSXMYUpNM93DtlS5CbUT+C6oQ= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.11.1 h1:MEQNafcNCB0uQIti/oHgU7CZpUMYQ7qigBwMVKycHvc= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.11.1/go.mod h1:19O5I2U5iys38SsmT2uDJja/300woyzE1KPIQxEUBUc= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.11.1 h1:LYyG/f1W/jzAix16jbksJfMQFpOH/Ma6T639pVPMgfI= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.11.1/go.mod h1:QrRRQiY3kzAoYPNLP0W/Ikg0gR6V3LMc+ODSxr7yyvg= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.11.1 h1:tFl63cpAAcD9TOU6U8kZU7KyXuSRYAZlbx1C61aaB74= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.11.1/go.mod h1:X620Jww3RajCJXw/unA+8IRTgxkdS7pi+ZwK9b7KUJk= +go.opentelemetry.io/otel/exporters/zipkin v1.11.1 h1:JlJ3/oQoyqlrPDCfsSVFcHgGeHvZq+hr1VPWtiYCXTo= +go.opentelemetry.io/otel/exporters/zipkin v1.11.1/go.mod h1:T4S6aVwIS1+MHA+dJHCcPROtZe6ORwnv5vMKPRapsFw= +go.opentelemetry.io/otel/sdk v1.11.1 h1:F7KmQgoHljhUuJyA+9BiU+EkJfyX5nVVF4wyzWZpKxs= +go.opentelemetry.io/otel/sdk v1.11.1/go.mod h1:/l3FE4SupHJ12TduVjUkZtlfFqDCQJlOlithYrdktys= +go.opentelemetry.io/otel/trace v1.11.1 h1:ofxdnzsNrGBYXbP7t7zpUK281+go5rF7dvdIZXF8gdQ= +go.opentelemetry.io/otel/trace v1.11.1/go.mod h1:f/Q9G7vzk5u91PhbmKbg1Qn0rzH1LJ4vbPHFGkTPtOk= +go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= +go.opentelemetry.io/proto/otlp v0.19.0 h1:IVN6GR+mhC4s5yfcTbmzHYODqvWAp3ZedA2SJPI1Nnw= +go.opentelemetry.io/proto/otlp v0.19.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= +go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= +go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= +go.uber.org/goleak v1.2.0 h1:xqgm/S+aQvhWFTtR0XK3Jvg7z8kGV8P4X14IzwN3Eqk= +go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= +go.uber.org/multierr v1.7.0 h1:zaiO/rmgFjbmCXdSYJWQcdvOCsthmdaHfr3Gm2Kx4Ec= +go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +go.uber.org/zap v1.21.0 h1:WefMeulhovoZ2sYXz7st6K0sLj7bBhpiFaud4r4zST8= +golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +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= +golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= +golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= +golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= +golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= +golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f h1:Al51T6tzvuh3oiwX11vex3QgJ2XTedFPGmbEVh8cdoc= +golang.org/x/exp v0.0.0-20221028150844-83b7d23a625f/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= +golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= +golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= +golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= +golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= +golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= +golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +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-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8= +golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210726213435-c6fcb2dbf985/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/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= +golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220906165146-f3363e06e74c/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= +golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.1.0 h1:isLCZuhj4v+tYv7eskaN4v/TM+A1begWWgyVJDdl1+Y= +golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A= +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= +golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +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.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= +golang.org/x/sync v0.1.0/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= +golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +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-20220708085239-5a0f0661e09d/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-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220908164124-27713097b956/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-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.1.0 h1:g6Z6vPFA9dYBAF7DWcH6sCcOntplXsDKcliusYijMlw= +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= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3/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/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-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20220922220347-f3bd1da661af h1:Yx9k8YCG3dvF87UAn2tu2HQLf2dt/eR1bXxpLMWeH+Y= +golang.org/x/time v0.0.0-20220922220347-f3bd1da661af/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191216052735-49a3e744a425/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +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= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +gomodules.xyz/jsonpatch/v2 v2.2.0 h1:4pT439QV83L+G9FkcCriY6EkpcK6r6bK+A5FBUMI7qY= +gomodules.xyz/jsonpatch/v2 v2.2.0/go.mod h1:WXp+iVDkoLQqPudfQ9GBlwB2eZ5DKOnjQZCYdOS8GPY= +google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= +google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= +google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= +google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= +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= +google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= +google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= +google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= +google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= +google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220107163113-42d7afdf6368/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c h1:QgY/XxIAIeccR+Ca/rDdKubLIU9rcJ3xfy1DC/Wd2Oo= +google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c/go.mod h1:CGI5F/G+E5bKwmfYo09AXuVN4dD894kIKUFmVbP2/Fo= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= +google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= +google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= +google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= +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/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= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= +google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= +google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/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-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= +gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= +honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +k8s.io/api v0.25.3 h1:Q1v5UFfYe87vi5H7NU0p4RXC26PPMT8KOpr1TLQbCMQ= +k8s.io/api v0.25.3/go.mod h1:o42gKscFrEVjHdQnyRenACrMtbuJsVdP+WVjqejfzmI= +k8s.io/apiextensions-apiserver v0.25.3 h1:bfI4KS31w2f9WM1KLGwnwuVlW3RSRPuIsfNF/3HzR0k= +k8s.io/apiextensions-apiserver v0.25.3/go.mod h1:ZJqwpCkxIx9itilmZek7JgfUAM0dnTsA48I4krPqRmo= +k8s.io/apimachinery v0.25.3 h1:7o9ium4uyUOM76t6aunP0nZuex7gDf8VGwkR5RcJnQc= +k8s.io/apimachinery v0.25.3/go.mod h1:jaF9C/iPNM1FuLl7Zuy5b9v+n35HGSh6AQ4HYRkCqwo= +k8s.io/client-go v0.25.3 h1:oB4Dyl8d6UbfDHD8Bv8evKylzs3BXzzufLiO27xuPs0= +k8s.io/client-go v0.25.3/go.mod h1:t39LPczAIMwycjcXkVc+CB+PZV69jQuNx4um5ORDjQA= +k8s.io/component-base v0.25.3 h1:UrsxciGdrCY03ULT1h/S/gXFCOPnLhUVwSyx+hM/zq4= +k8s.io/component-base v0.25.3/go.mod h1:WYoS8L+IlTZgU7rhAl5Ctpw0WdMxDfCC5dkxcEFa/TI= +k8s.io/klog/v2 v2.80.1 h1:atnLQ121W371wYYFawwYx1aEY2eUfs4l3J72wtgAwV4= +k8s.io/klog/v2 v2.80.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= +k8s.io/kube-openapi v0.0.0-20220928191237-829ce0c27909 h1:q/70bz7C1/LGuQu/JBX7Fpi55CwcCts/wbvlehe0RRo= +k8s.io/kube-openapi v0.0.0-20220928191237-829ce0c27909/go.mod h1:+Axhij7bCpeqhklhUTe3xmOn6bWxolyZEeyaFpjGtl4= +k8s.io/utils v0.0.0-20221012122500-cfd413dd9e85 h1:cTdVh7LYu82xeClmfzGtgyspNh6UxpwLWGi8R4sspNo= +k8s.io/utils v0.0.0-20221012122500-cfd413dd9e85/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= +rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= +sigs.k8s.io/controller-runtime v0.13.0 h1:iqa5RNciy7ADWnIc8QxCbOX5FEKVR3uxVxKHRMc2WIQ= +sigs.k8s.io/controller-runtime v0.13.0/go.mod h1:Zbz+el8Yg31jubvAEyglRZGdLAjplZl+PgtYNI6WNTI= +sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 h1:iXTIw73aPyC+oRdyqqvVJuloN1p0AC/kzH07hu3NE+k= +sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= +sigs.k8s.io/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE= +sigs.k8s.io/structured-merge-diff/v4 v4.2.3/go.mod h1:qjx8mGObPmV2aSZepjQjbmb2ihdVs8cGKBraizNC69E= +sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= +sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= diff --git a/tests/certification/bindings/kafka/go.mod b/tests/certification/bindings/kafka/go.mod index d72b3a0c8..72f94828f 100644 --- a/tests/certification/bindings/kafka/go.mod +++ b/tests/certification/bindings/kafka/go.mod @@ -4,12 +4,12 @@ go 1.19 require ( github.com/Shopify/sarama v1.37.2 - github.com/cenkalti/backoff/v4 v4.1.3 + github.com/cenkalti/backoff/v4 v4.2.0 github.com/dapr/components-contrib v1.9.1-0.20221025205611-e38369028650 github.com/dapr/components-contrib/tests/certification v0.0.0-20220519061249-c2cb1dad5bb0 github.com/dapr/dapr v1.9.4-0.20221121055721-6683f7582ac4 github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 - github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f + github.com/dapr/kit v0.0.3 github.com/google/uuid v1.3.0 github.com/stretchr/testify v1.8.1 go.uber.org/multierr v1.8.0 diff --git a/tests/certification/bindings/kafka/go.sum b/tests/certification/bindings/kafka/go.sum index b44b743f2..9526e4193 100644 --- a/tests/certification/bindings/kafka/go.sum +++ b/tests/certification/bindings/kafka/go.sum @@ -72,8 +72,8 @@ github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0/go.mod h1:2Vqy6l github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= -github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= -github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/cenkalti/backoff/v4 v4.2.0 h1:HN5dHm3WBOgndBH6E8V0q2jIYIR3s9yglV8k/+MN3u4= +github.com/cenkalti/backoff/v4 v4.2.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= @@ -95,8 +95,8 @@ github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWH github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= -github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= -github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f/go.mod h1:i9t09QZw346M2RbuK7oJhssOP0HCAQObz61U4SBNJSU= +github.com/dapr/kit v0.0.3 h1:1FCnWjIuAS3OJzJhOlUKNzLxoazYhYIS4oCOOULmWBA= +github.com/dapr/kit v0.0.3/go.mod h1:+vh2UIRT0KzFm5YJWfj7az4XVSdodys1OCz1WzNe1Eo= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= diff --git a/tests/certification/bindings/localstorage/README.md b/tests/certification/bindings/localstorage/README.md index a15fc774f..f9b52c4d0 100644 --- a/tests/certification/bindings/localstorage/README.md +++ b/tests/certification/bindings/localstorage/README.md @@ -1,8 +1,8 @@ -# LocalStorage certifcation testing +# LocalStorage certification testing This project aims to test the LocalStorage component under various conditions. -## Test plain +## Test plan - Invocation - create file and get data success diff --git a/tests/certification/bindings/localstorage/go.mod b/tests/certification/bindings/localstorage/go.mod index db673b92b..ae9ad8e9d 100644 --- a/tests/certification/bindings/localstorage/go.mod +++ b/tests/certification/bindings/localstorage/go.mod @@ -7,7 +7,7 @@ require ( github.com/dapr/components-contrib/tests/certification v0.0.0-00010101000000-000000000000 github.com/dapr/dapr v1.9.4-0.20221121055721-6683f7582ac4 github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 - github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f + github.com/dapr/kit v0.0.3 github.com/stretchr/testify v1.8.1 ) @@ -20,7 +20,7 @@ require ( github.com/armon/go-metrics v0.4.1 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/cenkalti/backoff v2.2.1+incompatible // indirect - github.com/cenkalti/backoff/v4 v4.1.3 // indirect + github.com/cenkalti/backoff/v4 v4.2.0 // indirect github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/cyphar/filepath-securejoin v0.2.3 // indirect github.com/davecgh/go-spew v1.1.1 // indirect diff --git a/tests/certification/bindings/localstorage/go.sum b/tests/certification/bindings/localstorage/go.sum index e3d0de29b..649491f64 100644 --- a/tests/certification/bindings/localstorage/go.sum +++ b/tests/certification/bindings/localstorage/go.sum @@ -69,8 +69,8 @@ github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0/go.mod h1:2Vqy6l github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= -github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= -github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/cenkalti/backoff/v4 v4.2.0 h1:HN5dHm3WBOgndBH6E8V0q2jIYIR3s9yglV8k/+MN3u4= +github.com/cenkalti/backoff/v4 v4.2.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= @@ -94,8 +94,8 @@ github.com/cyphar/filepath-securejoin v0.2.3 h1:YX6ebbZCZP7VkM3scTTokDgBL2TY741X github.com/cyphar/filepath-securejoin v0.2.3/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= -github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= -github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f/go.mod h1:i9t09QZw346M2RbuK7oJhssOP0HCAQObz61U4SBNJSU= +github.com/dapr/kit v0.0.3 h1:1FCnWjIuAS3OJzJhOlUKNzLxoazYhYIS4oCOOULmWBA= +github.com/dapr/kit v0.0.3/go.mod h1:+vh2UIRT0KzFm5YJWfj7az4XVSdodys1OCz1WzNe1Eo= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= diff --git a/tests/certification/bindings/postgres/go.mod b/tests/certification/bindings/postgres/go.mod index 288a7e0aa..5621e8674 100644 --- a/tests/certification/bindings/postgres/go.mod +++ b/tests/certification/bindings/postgres/go.mod @@ -7,7 +7,7 @@ require ( github.com/dapr/components-contrib/tests/certification v0.0.0-20220526162429-d03aeba3e0d6 github.com/dapr/dapr v1.9.4-0.20221121055721-6683f7582ac4 github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 - github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f + github.com/dapr/kit v0.0.3 github.com/lib/pq v1.10.7 github.com/stretchr/testify v1.8.1 ) @@ -21,7 +21,7 @@ require ( github.com/armon/go-metrics v0.4.1 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/cenkalti/backoff v2.2.1+incompatible // indirect - github.com/cenkalti/backoff/v4 v4.1.3 // indirect + github.com/cenkalti/backoff/v4 v4.2.0 // indirect github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/emicklei/go-restful/v3 v3.8.0 // indirect diff --git a/tests/certification/bindings/postgres/go.sum b/tests/certification/bindings/postgres/go.sum index d147d6e19..00bbe0e1f 100644 --- a/tests/certification/bindings/postgres/go.sum +++ b/tests/certification/bindings/postgres/go.sum @@ -69,8 +69,8 @@ github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0/go.mod h1:2Vqy6l github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= -github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= -github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/cenkalti/backoff/v4 v4.2.0 h1:HN5dHm3WBOgndBH6E8V0q2jIYIR3s9yglV8k/+MN3u4= +github.com/cenkalti/backoff/v4 v4.2.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= @@ -92,8 +92,8 @@ github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWH github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= -github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= -github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f/go.mod h1:i9t09QZw346M2RbuK7oJhssOP0HCAQObz61U4SBNJSU= +github.com/dapr/kit v0.0.3 h1:1FCnWjIuAS3OJzJhOlUKNzLxoazYhYIS4oCOOULmWBA= +github.com/dapr/kit v0.0.3/go.mod h1:+vh2UIRT0KzFm5YJWfj7az4XVSdodys1OCz1WzNe1Eo= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= diff --git a/tests/certification/bindings/rabbitmq/go.mod b/tests/certification/bindings/rabbitmq/go.mod index 852cd314f..ae38adc54 100644 --- a/tests/certification/bindings/rabbitmq/go.mod +++ b/tests/certification/bindings/rabbitmq/go.mod @@ -7,7 +7,7 @@ require ( github.com/dapr/components-contrib/tests/certification v0.0.0-20211130185200-4918900c09e1 github.com/dapr/dapr v1.9.4-0.20221121055721-6683f7582ac4 github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 - github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f + github.com/dapr/kit v0.0.3 github.com/rabbitmq/amqp091-go v1.5.0 github.com/stretchr/testify v1.8.1 go.uber.org/multierr v1.8.0 @@ -22,7 +22,7 @@ require ( github.com/armon/go-metrics v0.4.1 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/cenkalti/backoff v2.2.1+incompatible // indirect - github.com/cenkalti/backoff/v4 v4.1.3 // indirect + github.com/cenkalti/backoff/v4 v4.2.0 // indirect github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/emicklei/go-restful/v3 v3.8.0 // indirect diff --git a/tests/certification/bindings/rabbitmq/go.sum b/tests/certification/bindings/rabbitmq/go.sum index 84bbe9fbe..c019349ad 100644 --- a/tests/certification/bindings/rabbitmq/go.sum +++ b/tests/certification/bindings/rabbitmq/go.sum @@ -69,8 +69,8 @@ github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0/go.mod h1:2Vqy6l github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= -github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= -github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/cenkalti/backoff/v4 v4.2.0 h1:HN5dHm3WBOgndBH6E8V0q2jIYIR3s9yglV8k/+MN3u4= +github.com/cenkalti/backoff/v4 v4.2.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= @@ -92,8 +92,8 @@ github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWH github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= -github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= -github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f/go.mod h1:i9t09QZw346M2RbuK7oJhssOP0HCAQObz61U4SBNJSU= +github.com/dapr/kit v0.0.3 h1:1FCnWjIuAS3OJzJhOlUKNzLxoazYhYIS4oCOOULmWBA= +github.com/dapr/kit v0.0.3/go.mod h1:+vh2UIRT0KzFm5YJWfj7az4XVSdodys1OCz1WzNe1Eo= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= diff --git a/tests/certification/bindings/redis/README.md b/tests/certification/bindings/redis/README.md index c5d48a21f..29a4a5f26 100644 --- a/tests/certification/bindings/redis/README.md +++ b/tests/certification/bindings/redis/README.md @@ -1,4 +1,4 @@ -# RabbitMQ Binding Certification +# Redis Binding Certification The purpose of this module is to provide tests that certify the Redis Binding as a stable component. diff --git a/tests/certification/bindings/redis/go.mod b/tests/certification/bindings/redis/go.mod index eff24118a..ea3622e73 100644 --- a/tests/certification/bindings/redis/go.mod +++ b/tests/certification/bindings/redis/go.mod @@ -7,7 +7,7 @@ require ( github.com/dapr/components-contrib/tests/certification v0.0.0-20220908221803-2b5650c2faa4 github.com/dapr/dapr v1.9.4-0.20221121055721-6683f7582ac4 github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 - github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f + github.com/dapr/kit v0.0.3 github.com/go-redis/redis/v8 v8.11.5 github.com/stretchr/testify v1.8.1 ) @@ -21,7 +21,7 @@ require ( github.com/armon/go-metrics v0.4.1 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/cenkalti/backoff v2.2.1+incompatible // indirect - github.com/cenkalti/backoff/v4 v4.1.3 // indirect + github.com/cenkalti/backoff/v4 v4.2.0 // indirect github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect diff --git a/tests/certification/bindings/redis/go.sum b/tests/certification/bindings/redis/go.sum index 657d19e28..ed35fd0e0 100644 --- a/tests/certification/bindings/redis/go.sum +++ b/tests/certification/bindings/redis/go.sum @@ -71,8 +71,8 @@ github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0/go.mod h1:2Vqy6l github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= -github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= -github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/cenkalti/backoff/v4 v4.2.0 h1:HN5dHm3WBOgndBH6E8V0q2jIYIR3s9yglV8k/+MN3u4= +github.com/cenkalti/backoff/v4 v4.2.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= @@ -94,8 +94,8 @@ github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWH github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= -github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= -github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f/go.mod h1:i9t09QZw346M2RbuK7oJhssOP0HCAQObz61U4SBNJSU= +github.com/dapr/kit v0.0.3 h1:1FCnWjIuAS3OJzJhOlUKNzLxoazYhYIS4oCOOULmWBA= +github.com/dapr/kit v0.0.3/go.mod h1:+vh2UIRT0KzFm5YJWfj7az4XVSdodys1OCz1WzNe1Eo= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= diff --git a/tests/certification/go.mod b/tests/certification/go.mod index f620600f5..a97ef6e74 100644 --- a/tests/certification/go.mod +++ b/tests/certification/go.mod @@ -6,7 +6,7 @@ require ( github.com/dapr/components-contrib v1.9.1-0.20221025205611-e38369028650 github.com/dapr/dapr v1.9.4-0.20221121055721-6683f7582ac4 github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 - github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f + github.com/dapr/kit v0.0.3 github.com/google/go-cmp v0.5.9 github.com/pkg/errors v0.9.1 github.com/stretchr/testify v1.8.1 @@ -133,7 +133,7 @@ require ( ) require ( - github.com/cenkalti/backoff/v4 v4.1.3 + github.com/cenkalti/backoff/v4 v4.2.0 github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 github.com/tylertreat/comcast v1.0.1 diff --git a/tests/certification/go.sum b/tests/certification/go.sum index e06085a52..ab4791840 100644 --- a/tests/certification/go.sum +++ b/tests/certification/go.sum @@ -69,8 +69,8 @@ github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0/go.mod h1:2Vqy6l github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= -github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= -github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/cenkalti/backoff/v4 v4.2.0 h1:HN5dHm3WBOgndBH6E8V0q2jIYIR3s9yglV8k/+MN3u4= +github.com/cenkalti/backoff/v4 v4.2.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= @@ -92,8 +92,8 @@ github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWH github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= -github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= -github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f/go.mod h1:i9t09QZw346M2RbuK7oJhssOP0HCAQObz61U4SBNJSU= +github.com/dapr/kit v0.0.3 h1:1FCnWjIuAS3OJzJhOlUKNzLxoazYhYIS4oCOOULmWBA= +github.com/dapr/kit v0.0.3/go.mod h1:+vh2UIRT0KzFm5YJWfj7az4XVSdodys1OCz1WzNe1Eo= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= diff --git a/tests/certification/pubsub/azure/eventhubs/go.mod b/tests/certification/pubsub/azure/eventhubs/go.mod index ee7111901..766cc456e 100644 --- a/tests/certification/pubsub/azure/eventhubs/go.mod +++ b/tests/certification/pubsub/azure/eventhubs/go.mod @@ -7,7 +7,7 @@ require ( github.com/dapr/components-contrib/tests/certification v1.4.0-rc2 github.com/dapr/dapr v1.9.4-0.20221121055721-6683f7582ac4 github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 - github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f + github.com/dapr/kit v0.0.3 github.com/google/uuid v1.3.0 github.com/stretchr/testify v1.8.1 go.uber.org/multierr v1.8.0 @@ -43,7 +43,7 @@ require ( github.com/armon/go-metrics v0.4.1 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/cenkalti/backoff v2.2.1+incompatible // indirect - github.com/cenkalti/backoff/v4 v4.1.3 // indirect + github.com/cenkalti/backoff/v4 v4.2.0 // indirect github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/devigned/tab v0.1.1 // indirect diff --git a/tests/certification/pubsub/azure/eventhubs/go.sum b/tests/certification/pubsub/azure/eventhubs/go.sum index c03b2f154..1e405d84f 100644 --- a/tests/certification/pubsub/azure/eventhubs/go.sum +++ b/tests/certification/pubsub/azure/eventhubs/go.sum @@ -139,8 +139,8 @@ github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0/go.mod h1:2Vqy6l github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= -github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= -github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/cenkalti/backoff/v4 v4.2.0 h1:HN5dHm3WBOgndBH6E8V0q2jIYIR3s9yglV8k/+MN3u4= +github.com/cenkalti/backoff/v4 v4.2.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= @@ -162,8 +162,8 @@ github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWH github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= -github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= -github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f/go.mod h1:i9t09QZw346M2RbuK7oJhssOP0HCAQObz61U4SBNJSU= +github.com/dapr/kit v0.0.3 h1:1FCnWjIuAS3OJzJhOlUKNzLxoazYhYIS4oCOOULmWBA= +github.com/dapr/kit v0.0.3/go.mod h1:+vh2UIRT0KzFm5YJWfj7az4XVSdodys1OCz1WzNe1Eo= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= diff --git a/tests/certification/pubsub/azure/servicebus/topics/go.mod b/tests/certification/pubsub/azure/servicebus/topics/go.mod index e52b273f0..b3bdf7aa5 100644 --- a/tests/certification/pubsub/azure/servicebus/topics/go.mod +++ b/tests/certification/pubsub/azure/servicebus/topics/go.mod @@ -7,7 +7,7 @@ require ( github.com/dapr/components-contrib/tests/certification v0.0.0-20211026011813-36b75e9ae272 github.com/dapr/dapr v1.9.4-0.20221121055721-6683f7582ac4 github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 - github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f + github.com/dapr/kit v0.0.3 github.com/google/uuid v1.3.0 github.com/stretchr/testify v1.8.1 go.uber.org/multierr v1.8.0 @@ -41,7 +41,7 @@ require ( github.com/armon/go-metrics v0.4.1 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/cenkalti/backoff v2.2.1+incompatible // indirect - github.com/cenkalti/backoff/v4 v4.1.3 // indirect + github.com/cenkalti/backoff/v4 v4.2.0 // indirect github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/dimchansky/utfbom v1.1.1 // indirect diff --git a/tests/certification/pubsub/azure/servicebus/topics/go.sum b/tests/certification/pubsub/azure/servicebus/topics/go.sum index 75fb02275..dfd1ae069 100644 --- a/tests/certification/pubsub/azure/servicebus/topics/go.sum +++ b/tests/certification/pubsub/azure/servicebus/topics/go.sum @@ -127,8 +127,8 @@ github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0/go.mod h1:2Vqy6l github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= -github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= -github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/cenkalti/backoff/v4 v4.2.0 h1:HN5dHm3WBOgndBH6E8V0q2jIYIR3s9yglV8k/+MN3u4= +github.com/cenkalti/backoff/v4 v4.2.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= @@ -150,8 +150,8 @@ github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWH github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= -github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= -github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f/go.mod h1:i9t09QZw346M2RbuK7oJhssOP0HCAQObz61U4SBNJSU= +github.com/dapr/kit v0.0.3 h1:1FCnWjIuAS3OJzJhOlUKNzLxoazYhYIS4oCOOULmWBA= +github.com/dapr/kit v0.0.3/go.mod h1:+vh2UIRT0KzFm5YJWfj7az4XVSdodys1OCz1WzNe1Eo= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= diff --git a/tests/certification/pubsub/kafka/go.mod b/tests/certification/pubsub/kafka/go.mod index e5bbc93e0..396459626 100644 --- a/tests/certification/pubsub/kafka/go.mod +++ b/tests/certification/pubsub/kafka/go.mod @@ -4,12 +4,12 @@ go 1.19 require ( github.com/Shopify/sarama v1.37.2 - github.com/cenkalti/backoff/v4 v4.1.3 + github.com/cenkalti/backoff/v4 v4.2.0 github.com/dapr/components-contrib v1.9.1-0.20221025205611-e38369028650 github.com/dapr/components-contrib/tests/certification v0.0.0-20220519061249-c2cb1dad5bb0 github.com/dapr/dapr v1.9.4-0.20221121055721-6683f7582ac4 github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 - github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f + github.com/dapr/kit v0.0.3 github.com/google/uuid v1.3.0 github.com/stretchr/testify v1.8.1 go.uber.org/multierr v1.8.0 diff --git a/tests/certification/pubsub/kafka/go.sum b/tests/certification/pubsub/kafka/go.sum index b44b743f2..9526e4193 100644 --- a/tests/certification/pubsub/kafka/go.sum +++ b/tests/certification/pubsub/kafka/go.sum @@ -72,8 +72,8 @@ github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0/go.mod h1:2Vqy6l github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= -github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= -github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/cenkalti/backoff/v4 v4.2.0 h1:HN5dHm3WBOgndBH6E8V0q2jIYIR3s9yglV8k/+MN3u4= +github.com/cenkalti/backoff/v4 v4.2.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= @@ -95,8 +95,8 @@ github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWH github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= -github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= -github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f/go.mod h1:i9t09QZw346M2RbuK7oJhssOP0HCAQObz61U4SBNJSU= +github.com/dapr/kit v0.0.3 h1:1FCnWjIuAS3OJzJhOlUKNzLxoazYhYIS4oCOOULmWBA= +github.com/dapr/kit v0.0.3/go.mod h1:+vh2UIRT0KzFm5YJWfj7az4XVSdodys1OCz1WzNe1Eo= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= diff --git a/tests/certification/pubsub/mqtt/go.mod b/tests/certification/pubsub/mqtt/go.mod index a62f8408f..1d385a223 100644 --- a/tests/certification/pubsub/mqtt/go.mod +++ b/tests/certification/pubsub/mqtt/go.mod @@ -3,12 +3,12 @@ module github.com/dapr/components-contrib/tests/certification/pubsub/mqtt go 1.19 require ( - github.com/cenkalti/backoff/v4 v4.1.3 + github.com/cenkalti/backoff/v4 v4.2.0 github.com/dapr/components-contrib v1.9.1-0.20221025205611-e38369028650 github.com/dapr/components-contrib/tests/certification v1.4.0-rc2 github.com/dapr/dapr v1.9.4-0.20221121055721-6683f7582ac4 github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 - github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f + github.com/dapr/kit v0.0.3 github.com/eclipse/paho.mqtt.golang v1.4.2 github.com/stretchr/testify v1.8.1 go.uber.org/multierr v1.8.0 diff --git a/tests/certification/pubsub/mqtt/go.sum b/tests/certification/pubsub/mqtt/go.sum index b856fb9cc..d13b5e796 100644 --- a/tests/certification/pubsub/mqtt/go.sum +++ b/tests/certification/pubsub/mqtt/go.sum @@ -71,8 +71,8 @@ github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0/go.mod h1:2Vqy6l github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= -github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= -github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/cenkalti/backoff/v4 v4.2.0 h1:HN5dHm3WBOgndBH6E8V0q2jIYIR3s9yglV8k/+MN3u4= +github.com/cenkalti/backoff/v4 v4.2.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= @@ -94,8 +94,8 @@ github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWH github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= -github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= -github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f/go.mod h1:i9t09QZw346M2RbuK7oJhssOP0HCAQObz61U4SBNJSU= +github.com/dapr/kit v0.0.3 h1:1FCnWjIuAS3OJzJhOlUKNzLxoazYhYIS4oCOOULmWBA= +github.com/dapr/kit v0.0.3/go.mod h1:+vh2UIRT0KzFm5YJWfj7az4XVSdodys1OCz1WzNe1Eo= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= diff --git a/tests/certification/pubsub/rabbitmq/go.mod b/tests/certification/pubsub/rabbitmq/go.mod index 7ed2b6880..5d06ed426 100644 --- a/tests/certification/pubsub/rabbitmq/go.mod +++ b/tests/certification/pubsub/rabbitmq/go.mod @@ -3,12 +3,12 @@ module github.com/dapr/components-contrib/tests/certification/pubsub/rabbitmq go 1.19 require ( - github.com/cenkalti/backoff/v4 v4.1.3 + github.com/cenkalti/backoff/v4 v4.2.0 github.com/dapr/components-contrib v1.9.1-0.20221025205611-e38369028650 github.com/dapr/components-contrib/tests/certification v0.0.0-20211130185200-4918900c09e1 github.com/dapr/dapr v1.9.4-0.20221121055721-6683f7582ac4 github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 - github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f + github.com/dapr/kit v0.0.3 github.com/rabbitmq/amqp091-go v1.5.0 github.com/stretchr/testify v1.8.1 go.uber.org/multierr v1.8.0 diff --git a/tests/certification/pubsub/rabbitmq/go.sum b/tests/certification/pubsub/rabbitmq/go.sum index 84bbe9fbe..c019349ad 100644 --- a/tests/certification/pubsub/rabbitmq/go.sum +++ b/tests/certification/pubsub/rabbitmq/go.sum @@ -69,8 +69,8 @@ github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0/go.mod h1:2Vqy6l github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= -github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= -github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/cenkalti/backoff/v4 v4.2.0 h1:HN5dHm3WBOgndBH6E8V0q2jIYIR3s9yglV8k/+MN3u4= +github.com/cenkalti/backoff/v4 v4.2.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= @@ -92,8 +92,8 @@ github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWH github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= -github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= -github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f/go.mod h1:i9t09QZw346M2RbuK7oJhssOP0HCAQObz61U4SBNJSU= +github.com/dapr/kit v0.0.3 h1:1FCnWjIuAS3OJzJhOlUKNzLxoazYhYIS4oCOOULmWBA= +github.com/dapr/kit v0.0.3/go.mod h1:+vh2UIRT0KzFm5YJWfj7az4XVSdodys1OCz1WzNe1Eo= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= diff --git a/tests/certification/secretstores/azure/keyvault/go.mod b/tests/certification/secretstores/azure/keyvault/go.mod index ae8ce1a62..60de6e455 100644 --- a/tests/certification/secretstores/azure/keyvault/go.mod +++ b/tests/certification/secretstores/azure/keyvault/go.mod @@ -7,7 +7,7 @@ require ( github.com/dapr/components-contrib/tests/certification v0.0.0-20211130185200-4918900c09e1 github.com/dapr/dapr v1.9.4-0.20221121055721-6683f7582ac4 github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 - github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f + github.com/dapr/kit v0.0.3 github.com/stretchr/testify v1.8.1 ) @@ -38,7 +38,7 @@ require ( github.com/armon/go-metrics v0.4.1 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/cenkalti/backoff v2.2.1+incompatible // indirect - github.com/cenkalti/backoff/v4 v4.1.3 // indirect + github.com/cenkalti/backoff/v4 v4.2.0 // indirect github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/dimchansky/utfbom v1.1.1 // indirect diff --git a/tests/certification/secretstores/azure/keyvault/go.sum b/tests/certification/secretstores/azure/keyvault/go.sum index f04fccff0..eec18e7ca 100644 --- a/tests/certification/secretstores/azure/keyvault/go.sum +++ b/tests/certification/secretstores/azure/keyvault/go.sum @@ -125,8 +125,8 @@ github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0/go.mod h1:2Vqy6l github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= -github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= -github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/cenkalti/backoff/v4 v4.2.0 h1:HN5dHm3WBOgndBH6E8V0q2jIYIR3s9yglV8k/+MN3u4= +github.com/cenkalti/backoff/v4 v4.2.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= @@ -148,8 +148,8 @@ github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWH github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= -github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= -github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f/go.mod h1:i9t09QZw346M2RbuK7oJhssOP0HCAQObz61U4SBNJSU= +github.com/dapr/kit v0.0.3 h1:1FCnWjIuAS3OJzJhOlUKNzLxoazYhYIS4oCOOULmWBA= +github.com/dapr/kit v0.0.3/go.mod h1:+vh2UIRT0KzFm5YJWfj7az4XVSdodys1OCz1WzNe1Eo= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= diff --git a/tests/certification/secretstores/hashicorp/vault/go.mod b/tests/certification/secretstores/hashicorp/vault/go.mod index 80a65c5aa..24f579c08 100644 --- a/tests/certification/secretstores/hashicorp/vault/go.mod +++ b/tests/certification/secretstores/hashicorp/vault/go.mod @@ -7,7 +7,7 @@ require ( github.com/dapr/components-contrib/tests/certification v0.0.0-20220526162429-d03aeba3e0d6 github.com/dapr/dapr v1.9.4-0.20221121055721-6683f7582ac4 // We require dapr/dapr#5208 merged github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 - github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f + github.com/dapr/kit v0.0.3 github.com/golang/protobuf v1.5.2 github.com/stretchr/testify v1.8.1 ) @@ -21,7 +21,7 @@ require ( github.com/armon/go-metrics v0.4.1 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/cenkalti/backoff v2.2.1+incompatible // indirect - github.com/cenkalti/backoff/v4 v4.1.3 // indirect + github.com/cenkalti/backoff/v4 v4.2.0 // indirect github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/emicklei/go-restful/v3 v3.8.0 // indirect diff --git a/tests/certification/secretstores/hashicorp/vault/go.sum b/tests/certification/secretstores/hashicorp/vault/go.sum index b7055998c..d93d48619 100644 --- a/tests/certification/secretstores/hashicorp/vault/go.sum +++ b/tests/certification/secretstores/hashicorp/vault/go.sum @@ -69,8 +69,8 @@ github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0/go.mod h1:2Vqy6l github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= -github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= -github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/cenkalti/backoff/v4 v4.2.0 h1:HN5dHm3WBOgndBH6E8V0q2jIYIR3s9yglV8k/+MN3u4= +github.com/cenkalti/backoff/v4 v4.2.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= @@ -92,8 +92,8 @@ github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWH github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= -github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= -github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f/go.mod h1:i9t09QZw346M2RbuK7oJhssOP0HCAQObz61U4SBNJSU= +github.com/dapr/kit v0.0.3 h1:1FCnWjIuAS3OJzJhOlUKNzLxoazYhYIS4oCOOULmWBA= +github.com/dapr/kit v0.0.3/go.mod h1:+vh2UIRT0KzFm5YJWfj7az4XVSdodys1OCz1WzNe1Eo= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= diff --git a/tests/certification/secretstores/local/env/go.mod b/tests/certification/secretstores/local/env/go.mod index 8884d561c..e1de1be64 100644 --- a/tests/certification/secretstores/local/env/go.mod +++ b/tests/certification/secretstores/local/env/go.mod @@ -7,7 +7,7 @@ require ( github.com/dapr/components-contrib/tests/certification v0.0.0-20211130185200-4918900c09e1 github.com/dapr/dapr v1.9.4-0.20221121055721-6683f7582ac4 github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 - github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f + github.com/dapr/kit v0.0.3 github.com/stretchr/testify v1.8.1 ) @@ -20,7 +20,7 @@ require ( github.com/armon/go-metrics v0.4.1 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/cenkalti/backoff v2.2.1+incompatible // indirect - github.com/cenkalti/backoff/v4 v4.1.3 // indirect + github.com/cenkalti/backoff/v4 v4.2.0 // indirect github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/emicklei/go-restful/v3 v3.8.0 // indirect diff --git a/tests/certification/secretstores/local/env/go.sum b/tests/certification/secretstores/local/env/go.sum index 434e7f2ae..709655e3a 100644 --- a/tests/certification/secretstores/local/env/go.sum +++ b/tests/certification/secretstores/local/env/go.sum @@ -69,8 +69,8 @@ github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0/go.mod h1:2Vqy6l github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= -github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= -github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/cenkalti/backoff/v4 v4.2.0 h1:HN5dHm3WBOgndBH6E8V0q2jIYIR3s9yglV8k/+MN3u4= +github.com/cenkalti/backoff/v4 v4.2.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= @@ -92,8 +92,8 @@ github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWH github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= -github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= -github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f/go.mod h1:i9t09QZw346M2RbuK7oJhssOP0HCAQObz61U4SBNJSU= +github.com/dapr/kit v0.0.3 h1:1FCnWjIuAS3OJzJhOlUKNzLxoazYhYIS4oCOOULmWBA= +github.com/dapr/kit v0.0.3/go.mod h1:+vh2UIRT0KzFm5YJWfj7az4XVSdodys1OCz1WzNe1Eo= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= diff --git a/tests/certification/secretstores/local/file/go.mod b/tests/certification/secretstores/local/file/go.mod index f2e519b71..8b524666f 100644 --- a/tests/certification/secretstores/local/file/go.mod +++ b/tests/certification/secretstores/local/file/go.mod @@ -7,7 +7,7 @@ require ( github.com/dapr/components-contrib/tests/certification v0.0.0-20211130185200-4918900c09e1 github.com/dapr/dapr v1.9.4-0.20221121055721-6683f7582ac4 github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 - github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f + github.com/dapr/kit v0.0.3 github.com/stretchr/testify v1.8.1 ) @@ -20,7 +20,7 @@ require ( github.com/armon/go-metrics v0.4.1 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/cenkalti/backoff v2.2.1+incompatible // indirect - github.com/cenkalti/backoff/v4 v4.1.3 // indirect + github.com/cenkalti/backoff/v4 v4.2.0 // indirect github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/emicklei/go-restful/v3 v3.8.0 // indirect diff --git a/tests/certification/secretstores/local/file/go.sum b/tests/certification/secretstores/local/file/go.sum index 434e7f2ae..709655e3a 100644 --- a/tests/certification/secretstores/local/file/go.sum +++ b/tests/certification/secretstores/local/file/go.sum @@ -69,8 +69,8 @@ github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0/go.mod h1:2Vqy6l github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= -github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= -github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/cenkalti/backoff/v4 v4.2.0 h1:HN5dHm3WBOgndBH6E8V0q2jIYIR3s9yglV8k/+MN3u4= +github.com/cenkalti/backoff/v4 v4.2.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= @@ -92,8 +92,8 @@ github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWH github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= -github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= -github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f/go.mod h1:i9t09QZw346M2RbuK7oJhssOP0HCAQObz61U4SBNJSU= +github.com/dapr/kit v0.0.3 h1:1FCnWjIuAS3OJzJhOlUKNzLxoazYhYIS4oCOOULmWBA= +github.com/dapr/kit v0.0.3/go.mod h1:+vh2UIRT0KzFm5YJWfj7az4XVSdodys1OCz1WzNe1Eo= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= diff --git a/tests/certification/state/azure/blobstorage/go.mod b/tests/certification/state/azure/blobstorage/go.mod index 381e48ec6..e64a70484 100644 --- a/tests/certification/state/azure/blobstorage/go.mod +++ b/tests/certification/state/azure/blobstorage/go.mod @@ -7,7 +7,7 @@ require ( github.com/dapr/components-contrib/tests/certification v0.0.0-20211026011813-36b75e9ae272 github.com/dapr/dapr v1.9.4-0.20221121055721-6683f7582ac4 github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 - github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f + github.com/dapr/kit v0.0.3 github.com/stretchr/testify v1.8.1 ) @@ -37,7 +37,7 @@ require ( github.com/armon/go-metrics v0.4.1 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/cenkalti/backoff v2.2.1+incompatible // indirect - github.com/cenkalti/backoff/v4 v4.1.3 // indirect + github.com/cenkalti/backoff/v4 v4.2.0 // indirect github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/dimchansky/utfbom v1.1.1 // indirect diff --git a/tests/certification/state/azure/blobstorage/go.sum b/tests/certification/state/azure/blobstorage/go.sum index d394b07e3..e8ad93714 100644 --- a/tests/certification/state/azure/blobstorage/go.sum +++ b/tests/certification/state/azure/blobstorage/go.sum @@ -123,8 +123,8 @@ github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0/go.mod h1:2Vqy6l github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= -github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= -github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/cenkalti/backoff/v4 v4.2.0 h1:HN5dHm3WBOgndBH6E8V0q2jIYIR3s9yglV8k/+MN3u4= +github.com/cenkalti/backoff/v4 v4.2.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= @@ -146,8 +146,8 @@ github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWH github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= -github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= -github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f/go.mod h1:i9t09QZw346M2RbuK7oJhssOP0HCAQObz61U4SBNJSU= +github.com/dapr/kit v0.0.3 h1:1FCnWjIuAS3OJzJhOlUKNzLxoazYhYIS4oCOOULmWBA= +github.com/dapr/kit v0.0.3/go.mod h1:+vh2UIRT0KzFm5YJWfj7az4XVSdodys1OCz1WzNe1Eo= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= diff --git a/tests/certification/state/azure/cosmosdb/go.mod b/tests/certification/state/azure/cosmosdb/go.mod index 074aade1a..61283790a 100644 --- a/tests/certification/state/azure/cosmosdb/go.mod +++ b/tests/certification/state/azure/cosmosdb/go.mod @@ -7,7 +7,7 @@ require ( github.com/dapr/components-contrib/tests/certification v0.0.0-20211026011813-36b75e9ae272 github.com/dapr/dapr v1.9.4-0.20221121055721-6683f7582ac4 github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 - github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f + github.com/dapr/kit v0.0.3 github.com/stretchr/testify v1.8.1 ) @@ -38,7 +38,7 @@ require ( github.com/armon/go-metrics v0.4.1 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/cenkalti/backoff v2.2.1+incompatible // indirect - github.com/cenkalti/backoff/v4 v4.1.3 // indirect + github.com/cenkalti/backoff/v4 v4.2.0 // indirect github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/dimchansky/utfbom v1.1.1 // indirect diff --git a/tests/certification/state/azure/cosmosdb/go.sum b/tests/certification/state/azure/cosmosdb/go.sum index cceb78629..7823d3037 100644 --- a/tests/certification/state/azure/cosmosdb/go.sum +++ b/tests/certification/state/azure/cosmosdb/go.sum @@ -125,8 +125,8 @@ github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0/go.mod h1:2Vqy6l github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= -github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= -github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/cenkalti/backoff/v4 v4.2.0 h1:HN5dHm3WBOgndBH6E8V0q2jIYIR3s9yglV8k/+MN3u4= +github.com/cenkalti/backoff/v4 v4.2.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= @@ -148,8 +148,8 @@ github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWH github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= -github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= -github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f/go.mod h1:i9t09QZw346M2RbuK7oJhssOP0HCAQObz61U4SBNJSU= +github.com/dapr/kit v0.0.3 h1:1FCnWjIuAS3OJzJhOlUKNzLxoazYhYIS4oCOOULmWBA= +github.com/dapr/kit v0.0.3/go.mod h1:+vh2UIRT0KzFm5YJWfj7az4XVSdodys1OCz1WzNe1Eo= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= diff --git a/tests/certification/state/azure/tablestorage/go.mod b/tests/certification/state/azure/tablestorage/go.mod index 03fe8f8c3..448a2b969 100644 --- a/tests/certification/state/azure/tablestorage/go.mod +++ b/tests/certification/state/azure/tablestorage/go.mod @@ -7,7 +7,7 @@ require ( github.com/dapr/components-contrib/tests/certification v0.0.0-20211026011813-36b75e9ae272 github.com/dapr/dapr v1.9.4-0.20221121055721-6683f7582ac4 github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 - github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f + github.com/dapr/kit v0.0.3 github.com/stretchr/testify v1.8.1 ) @@ -37,7 +37,7 @@ require ( github.com/armon/go-metrics v0.4.1 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/cenkalti/backoff v2.2.1+incompatible // indirect - github.com/cenkalti/backoff/v4 v4.1.3 // indirect + github.com/cenkalti/backoff/v4 v4.2.0 // indirect github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/dimchansky/utfbom v1.1.1 // indirect diff --git a/tests/certification/state/azure/tablestorage/go.sum b/tests/certification/state/azure/tablestorage/go.sum index 54bfe7f73..05bc8f0ce 100644 --- a/tests/certification/state/azure/tablestorage/go.sum +++ b/tests/certification/state/azure/tablestorage/go.sum @@ -123,8 +123,8 @@ github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0/go.mod h1:2Vqy6l github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= -github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= -github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/cenkalti/backoff/v4 v4.2.0 h1:HN5dHm3WBOgndBH6E8V0q2jIYIR3s9yglV8k/+MN3u4= +github.com/cenkalti/backoff/v4 v4.2.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= @@ -146,8 +146,8 @@ github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWH github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= -github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= -github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f/go.mod h1:i9t09QZw346M2RbuK7oJhssOP0HCAQObz61U4SBNJSU= +github.com/dapr/kit v0.0.3 h1:1FCnWjIuAS3OJzJhOlUKNzLxoazYhYIS4oCOOULmWBA= +github.com/dapr/kit v0.0.3/go.mod h1:+vh2UIRT0KzFm5YJWfj7az4XVSdodys1OCz1WzNe1Eo= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= diff --git a/tests/certification/state/cassandra/go.mod b/tests/certification/state/cassandra/go.mod index a40f94f60..668c5eef5 100644 --- a/tests/certification/state/cassandra/go.mod +++ b/tests/certification/state/cassandra/go.mod @@ -7,7 +7,7 @@ require ( github.com/dapr/components-contrib/tests/certification v0.0.0-20211026011813-36b75e9ae272 github.com/dapr/dapr v1.9.4-0.20221121055721-6683f7582ac4 github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 - github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f + github.com/dapr/kit v0.0.3 github.com/stretchr/testify v1.8.1 ) @@ -20,7 +20,7 @@ require ( github.com/armon/go-metrics v0.4.1 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/cenkalti/backoff v2.2.1+incompatible // indirect - github.com/cenkalti/backoff/v4 v4.1.3 // indirect + github.com/cenkalti/backoff/v4 v4.2.0 // indirect github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/emicklei/go-restful/v3 v3.8.0 // indirect diff --git a/tests/certification/state/cassandra/go.sum b/tests/certification/state/cassandra/go.sum index 4fd9c7ee9..25e18dca6 100644 --- a/tests/certification/state/cassandra/go.sum +++ b/tests/certification/state/cassandra/go.sum @@ -73,8 +73,8 @@ github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 h1:DDGfHa7BWjL4Yn github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= -github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= -github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/cenkalti/backoff/v4 v4.2.0 h1:HN5dHm3WBOgndBH6E8V0q2jIYIR3s9yglV8k/+MN3u4= +github.com/cenkalti/backoff/v4 v4.2.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= @@ -96,8 +96,8 @@ github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWH github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= -github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= -github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f/go.mod h1:i9t09QZw346M2RbuK7oJhssOP0HCAQObz61U4SBNJSU= +github.com/dapr/kit v0.0.3 h1:1FCnWjIuAS3OJzJhOlUKNzLxoazYhYIS4oCOOULmWBA= +github.com/dapr/kit v0.0.3/go.mod h1:+vh2UIRT0KzFm5YJWfj7az4XVSdodys1OCz1WzNe1Eo= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= diff --git a/tests/certification/state/cockroachdb/go.mod b/tests/certification/state/cockroachdb/go.mod index 9941f5365..44516fc65 100644 --- a/tests/certification/state/cockroachdb/go.mod +++ b/tests/certification/state/cockroachdb/go.mod @@ -7,7 +7,7 @@ require ( github.com/dapr/components-contrib/tests/certification v0.0.0-20221111215803-c92827c3defc github.com/dapr/dapr v1.9.4-0.20221121055721-6683f7582ac4 github.com/dapr/go-sdk v1.6.0 - github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f + github.com/dapr/kit v0.0.3 github.com/google/uuid v1.3.0 github.com/stretchr/testify v1.8.1 ) @@ -22,7 +22,7 @@ require ( github.com/benbjohnson/clock v1.3.0 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/cenkalti/backoff v2.2.1+incompatible // indirect - github.com/cenkalti/backoff/v4 v4.1.3 // indirect + github.com/cenkalti/backoff/v4 v4.2.0 // indirect github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/emicklei/go-restful/v3 v3.8.0 // indirect diff --git a/tests/certification/state/cockroachdb/go.sum b/tests/certification/state/cockroachdb/go.sum index af8ef31de..ba3b0ce2c 100644 --- a/tests/certification/state/cockroachdb/go.sum +++ b/tests/certification/state/cockroachdb/go.sum @@ -70,8 +70,8 @@ github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6r github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= -github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= -github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/cenkalti/backoff/v4 v4.2.0 h1:HN5dHm3WBOgndBH6E8V0q2jIYIR3s9yglV8k/+MN3u4= +github.com/cenkalti/backoff/v4 v4.2.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= @@ -95,8 +95,8 @@ github.com/dapr/dapr v1.9.4-0.20221121055721-6683f7582ac4 h1:WbME5tjM4LJybkpsgT9 github.com/dapr/dapr v1.9.4-0.20221121055721-6683f7582ac4/go.mod h1:noFtU2Oo1/YfAgiqbU1/JVG81+20b/mOs3Ziwq/fMrU= github.com/dapr/go-sdk v1.6.0 h1:jg5A2khSCHF8bGZsig5RWN/gD0jjitszc2V6Uq2pPdY= github.com/dapr/go-sdk v1.6.0/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= -github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= -github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f/go.mod h1:i9t09QZw346M2RbuK7oJhssOP0HCAQObz61U4SBNJSU= +github.com/dapr/kit v0.0.3 h1:1FCnWjIuAS3OJzJhOlUKNzLxoazYhYIS4oCOOULmWBA= +github.com/dapr/kit v0.0.3/go.mod h1:+vh2UIRT0KzFm5YJWfj7az4XVSdodys1OCz1WzNe1Eo= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= diff --git a/tests/certification/state/memcached/go.mod b/tests/certification/state/memcached/go.mod index 60d0c9482..74f6e9035 100644 --- a/tests/certification/state/memcached/go.mod +++ b/tests/certification/state/memcached/go.mod @@ -7,7 +7,7 @@ require ( github.com/dapr/components-contrib/tests/certification v0.0.0-20220526162429-d03aeba3e0d6 github.com/dapr/dapr v1.9.4-0.20221121055721-6683f7582ac4 github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 - github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f + github.com/dapr/kit v0.0.3 github.com/stretchr/testify v1.8.1 ) @@ -21,7 +21,7 @@ require ( github.com/beorn7/perks v1.0.1 // indirect github.com/bradfitz/gomemcache v0.0.0-20221031212613-62deef7fc822 // indirect github.com/cenkalti/backoff v2.2.1+incompatible // indirect - github.com/cenkalti/backoff/v4 v4.1.3 // indirect + github.com/cenkalti/backoff/v4 v4.2.0 // indirect github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/emicklei/go-restful/v3 v3.8.0 // indirect diff --git a/tests/certification/state/memcached/go.sum b/tests/certification/state/memcached/go.sum index 1f7d070ad..6fc8f37dd 100644 --- a/tests/certification/state/memcached/go.sum +++ b/tests/certification/state/memcached/go.sum @@ -71,8 +71,8 @@ github.com/bradfitz/gomemcache v0.0.0-20221031212613-62deef7fc822 h1:hjXJeBcAMS1 github.com/bradfitz/gomemcache v0.0.0-20221031212613-62deef7fc822/go.mod h1:H0wQNHz2YrLsuXOZozoeDmnHXkNCRmMW0gwFWDfEZDA= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= -github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= -github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/cenkalti/backoff/v4 v4.2.0 h1:HN5dHm3WBOgndBH6E8V0q2jIYIR3s9yglV8k/+MN3u4= +github.com/cenkalti/backoff/v4 v4.2.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= @@ -94,8 +94,8 @@ github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWH github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= -github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= -github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f/go.mod h1:i9t09QZw346M2RbuK7oJhssOP0HCAQObz61U4SBNJSU= +github.com/dapr/kit v0.0.3 h1:1FCnWjIuAS3OJzJhOlUKNzLxoazYhYIS4oCOOULmWBA= +github.com/dapr/kit v0.0.3/go.mod h1:+vh2UIRT0KzFm5YJWfj7az4XVSdodys1OCz1WzNe1Eo= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= diff --git a/tests/certification/state/mongodb/go.mod b/tests/certification/state/mongodb/go.mod index a71aa5812..19839d11b 100644 --- a/tests/certification/state/mongodb/go.mod +++ b/tests/certification/state/mongodb/go.mod @@ -7,7 +7,7 @@ require ( github.com/dapr/components-contrib/tests/certification v0.0.0-20220526162429-d03aeba3e0d6 github.com/dapr/dapr v1.9.4-0.20221121055721-6683f7582ac4 github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 - github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f + github.com/dapr/kit v0.0.3 github.com/stretchr/testify v1.8.1 ) @@ -20,7 +20,7 @@ require ( github.com/armon/go-metrics v0.4.1 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/cenkalti/backoff v2.2.1+incompatible // indirect - github.com/cenkalti/backoff/v4 v4.1.3 // indirect + github.com/cenkalti/backoff/v4 v4.2.0 // indirect github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/emicklei/go-restful/v3 v3.8.0 // indirect diff --git a/tests/certification/state/mongodb/go.sum b/tests/certification/state/mongodb/go.sum index 606f14894..7fe0e3182 100644 --- a/tests/certification/state/mongodb/go.sum +++ b/tests/certification/state/mongodb/go.sum @@ -69,8 +69,8 @@ github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0/go.mod h1:2Vqy6l github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= -github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= -github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/cenkalti/backoff/v4 v4.2.0 h1:HN5dHm3WBOgndBH6E8V0q2jIYIR3s9yglV8k/+MN3u4= +github.com/cenkalti/backoff/v4 v4.2.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= @@ -92,8 +92,8 @@ github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWH github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= -github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= -github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f/go.mod h1:i9t09QZw346M2RbuK7oJhssOP0HCAQObz61U4SBNJSU= +github.com/dapr/kit v0.0.3 h1:1FCnWjIuAS3OJzJhOlUKNzLxoazYhYIS4oCOOULmWBA= +github.com/dapr/kit v0.0.3/go.mod h1:+vh2UIRT0KzFm5YJWfj7az4XVSdodys1OCz1WzNe1Eo= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= diff --git a/tests/certification/state/mysql/go.mod b/tests/certification/state/mysql/go.mod index 9cd3102df..dd112555a 100644 --- a/tests/certification/state/mysql/go.mod +++ b/tests/certification/state/mysql/go.mod @@ -7,7 +7,7 @@ require ( github.com/dapr/components-contrib/tests/certification v0.0.0-20220526162429-d03aeba3e0d6 github.com/dapr/dapr v1.9.4-0.20221121055721-6683f7582ac4 github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 - github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f + github.com/dapr/kit v0.0.3 github.com/stretchr/testify v1.8.1 ) @@ -20,7 +20,7 @@ require ( github.com/armon/go-metrics v0.4.1 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/cenkalti/backoff v2.2.1+incompatible // indirect - github.com/cenkalti/backoff/v4 v4.1.3 // indirect + github.com/cenkalti/backoff/v4 v4.2.0 // indirect github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/emicklei/go-restful/v3 v3.8.0 // indirect diff --git a/tests/certification/state/mysql/go.sum b/tests/certification/state/mysql/go.sum index 9f63889be..6203cde48 100644 --- a/tests/certification/state/mysql/go.sum +++ b/tests/certification/state/mysql/go.sum @@ -70,8 +70,8 @@ github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0/go.mod h1:2Vqy6l github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= -github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= -github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/cenkalti/backoff/v4 v4.2.0 h1:HN5dHm3WBOgndBH6E8V0q2jIYIR3s9yglV8k/+MN3u4= +github.com/cenkalti/backoff/v4 v4.2.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= @@ -93,8 +93,8 @@ github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWH github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= -github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= -github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f/go.mod h1:i9t09QZw346M2RbuK7oJhssOP0HCAQObz61U4SBNJSU= +github.com/dapr/kit v0.0.3 h1:1FCnWjIuAS3OJzJhOlUKNzLxoazYhYIS4oCOOULmWBA= +github.com/dapr/kit v0.0.3/go.mod h1:+vh2UIRT0KzFm5YJWfj7az4XVSdodys1OCz1WzNe1Eo= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= diff --git a/tests/certification/state/postgresql/go.mod b/tests/certification/state/postgresql/go.mod index 41af005a3..147ae017e 100644 --- a/tests/certification/state/postgresql/go.mod +++ b/tests/certification/state/postgresql/go.mod @@ -7,7 +7,7 @@ require ( github.com/dapr/components-contrib/tests/certification v0.0.0-20220526162429-d03aeba3e0d6 github.com/dapr/dapr v1.9.4-0.20221121055721-6683f7582ac4 github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 - github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f + github.com/dapr/kit v0.0.3 github.com/stretchr/testify v1.8.1 ) @@ -20,7 +20,7 @@ require ( github.com/armon/go-metrics v0.4.1 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/cenkalti/backoff v2.2.1+incompatible // indirect - github.com/cenkalti/backoff/v4 v4.1.3 // indirect + github.com/cenkalti/backoff/v4 v4.2.0 // indirect github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/emicklei/go-restful/v3 v3.8.0 // indirect diff --git a/tests/certification/state/postgresql/go.sum b/tests/certification/state/postgresql/go.sum index 8254bf310..f0904232a 100644 --- a/tests/certification/state/postgresql/go.sum +++ b/tests/certification/state/postgresql/go.sum @@ -70,8 +70,8 @@ github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0/go.mod h1:2Vqy6l github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= -github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= -github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/cenkalti/backoff/v4 v4.2.0 h1:HN5dHm3WBOgndBH6E8V0q2jIYIR3s9yglV8k/+MN3u4= +github.com/cenkalti/backoff/v4 v4.2.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= @@ -93,8 +93,8 @@ github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWH github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= -github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= -github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f/go.mod h1:i9t09QZw346M2RbuK7oJhssOP0HCAQObz61U4SBNJSU= +github.com/dapr/kit v0.0.3 h1:1FCnWjIuAS3OJzJhOlUKNzLxoazYhYIS4oCOOULmWBA= +github.com/dapr/kit v0.0.3/go.mod h1:+vh2UIRT0KzFm5YJWfj7az4XVSdodys1OCz1WzNe1Eo= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= diff --git a/tests/certification/state/redis/go.mod b/tests/certification/state/redis/go.mod index fe78b1bca..ebe1f6fd0 100644 --- a/tests/certification/state/redis/go.mod +++ b/tests/certification/state/redis/go.mod @@ -7,7 +7,7 @@ require ( github.com/dapr/components-contrib/tests/certification v0.0.0-20220526162429-d03aeba3e0d6 github.com/dapr/dapr v1.9.4-0.20221121055721-6683f7582ac4 github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 - github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f + github.com/dapr/kit v0.0.3 github.com/stretchr/testify v1.8.1 ) @@ -22,7 +22,7 @@ require ( github.com/armon/go-metrics v0.4.1 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/cenkalti/backoff v2.2.1+incompatible // indirect - github.com/cenkalti/backoff/v4 v4.1.3 // indirect + github.com/cenkalti/backoff/v4 v4.2.0 // indirect github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect diff --git a/tests/certification/state/redis/go.sum b/tests/certification/state/redis/go.sum index 657d19e28..ed35fd0e0 100644 --- a/tests/certification/state/redis/go.sum +++ b/tests/certification/state/redis/go.sum @@ -71,8 +71,8 @@ github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0/go.mod h1:2Vqy6l github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= -github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= -github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/cenkalti/backoff/v4 v4.2.0 h1:HN5dHm3WBOgndBH6E8V0q2jIYIR3s9yglV8k/+MN3u4= +github.com/cenkalti/backoff/v4 v4.2.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= @@ -94,8 +94,8 @@ github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWH github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= -github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= -github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f/go.mod h1:i9t09QZw346M2RbuK7oJhssOP0HCAQObz61U4SBNJSU= +github.com/dapr/kit v0.0.3 h1:1FCnWjIuAS3OJzJhOlUKNzLxoazYhYIS4oCOOULmWBA= +github.com/dapr/kit v0.0.3/go.mod h1:+vh2UIRT0KzFm5YJWfj7az4XVSdodys1OCz1WzNe1Eo= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= diff --git a/tests/certification/state/sqlserver/go.mod b/tests/certification/state/sqlserver/go.mod index 3cb0d6b4e..0f2b83511 100644 --- a/tests/certification/state/sqlserver/go.mod +++ b/tests/certification/state/sqlserver/go.mod @@ -7,7 +7,7 @@ require ( github.com/dapr/components-contrib/tests/certification v0.0.0-20211130185200-4918900c09e1 github.com/dapr/dapr v1.9.4-0.20221121055721-6683f7582ac4 github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 - github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f + github.com/dapr/kit v0.0.3 github.com/stretchr/testify v1.8.1 ) @@ -20,7 +20,7 @@ require ( github.com/armon/go-metrics v0.4.1 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/cenkalti/backoff v2.2.1+incompatible // indirect - github.com/cenkalti/backoff/v4 v4.1.3 // indirect + github.com/cenkalti/backoff/v4 v4.2.0 // indirect github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/denisenkom/go-mssqldb v0.12.3 // indirect diff --git a/tests/certification/state/sqlserver/go.sum b/tests/certification/state/sqlserver/go.sum index d6c5d2e07..31d855114 100644 --- a/tests/certification/state/sqlserver/go.sum +++ b/tests/certification/state/sqlserver/go.sum @@ -72,8 +72,8 @@ github.com/berndverst/dapr v1.1.3-0.20221105062638-159383e4fac0/go.mod h1:2Vqy6l github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= -github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= -github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/cenkalti/backoff/v4 v4.2.0 h1:HN5dHm3WBOgndBH6E8V0q2jIYIR3s9yglV8k/+MN3u4= +github.com/cenkalti/backoff/v4 v4.2.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= @@ -95,8 +95,8 @@ github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWH github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721 h1:EXY9Z1GtR0MC3tQzlYsKryT2HcipE79LhF7u/njeOzM= github.com/dapr/go-sdk v1.5.1-0.20221004175845-b465b1fa0721/go.mod h1:KLQBltoD9K0w5hKTihdcyg9Epob9gypwL5dYcQzPro4= -github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= -github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f/go.mod h1:i9t09QZw346M2RbuK7oJhssOP0HCAQObz61U4SBNJSU= +github.com/dapr/kit v0.0.3 h1:1FCnWjIuAS3OJzJhOlUKNzLxoazYhYIS4oCOOULmWBA= +github.com/dapr/kit v0.0.3/go.mod h1:+vh2UIRT0KzFm5YJWfj7az4XVSdodys1OCz1WzNe1Eo= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= diff --git a/tests/config/bindings/cron/bindings.yaml b/tests/config/bindings/cron/bindings.yaml new file mode 100644 index 000000000..e40149281 --- /dev/null +++ b/tests/config/bindings/cron/bindings.yaml @@ -0,0 +1,12 @@ + +apiVersion: dapr.io/v1alpha1 +kind: Component +metadata: + name: cron-binding + namespace: default +spec: + type: bindings.cron + version: v1 + metadata: + - name: schedule + value: "@every 1s" \ No newline at end of file diff --git a/tests/config/bindings/tests.yml b/tests/config/bindings/tests.yml index d57614c04..4898822ea 100644 --- a/tests/config/bindings/tests.yml +++ b/tests/config/bindings/tests.yml @@ -33,6 +33,8 @@ components: operations: ["create", "operations", "read"] - component: azure.servicebusqueues operations: ["create", "operations", "read"] + - component: cron + operations: ["read"] - component: kafka profile: wurstmeister operations: ["create", "operations"] diff --git a/tests/conformance/common.go b/tests/conformance/common.go index b19ce661d..4faff0db2 100644 --- a/tests/conformance/common.go +++ b/tests/conformance/common.go @@ -42,6 +42,7 @@ import ( b_azure_eventhubs "github.com/dapr/components-contrib/bindings/azure/eventhubs" b_azure_servicebusqueues "github.com/dapr/components-contrib/bindings/azure/servicebusqueues" b_azure_storagequeues "github.com/dapr/components-contrib/bindings/azure/storagequeues" + b_cron "github.com/dapr/components-contrib/bindings/cron" b_http "github.com/dapr/components-contrib/bindings/http" b_influx "github.com/dapr/components-contrib/bindings/influx" b_kafka "github.com/dapr/components-contrib/bindings/kafka" @@ -522,6 +523,8 @@ func loadInputBindings(tc TestComponent) bindings.InputBinding { binding = b_azure_storagequeues.NewAzureStorageQueues(testLogger) case "azure.eventgrid": binding = b_azure_eventgrid.NewAzureEventGrid(testLogger) + case "cron": + binding = b_cron.NewCron(testLogger) case eventhubs: binding = b_azure_eventhubs.NewAzureEventHubs(testLogger) case kafka: diff --git a/tests/e2e/pubsub/jetstream/go.mod b/tests/e2e/pubsub/jetstream/go.mod index 345cf91fe..cf5196d96 100644 --- a/tests/e2e/pubsub/jetstream/go.mod +++ b/tests/e2e/pubsub/jetstream/go.mod @@ -4,11 +4,11 @@ go 1.19 require ( github.com/dapr/components-contrib v1.5.1 - github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f + github.com/dapr/kit v0.0.3 ) require ( - github.com/cenkalti/backoff/v4 v4.1.3 // indirect + github.com/cenkalti/backoff/v4 v4.2.0 // indirect github.com/google/uuid v1.3.0 // indirect github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 // indirect github.com/nats-io/nats.go v1.19.1 // indirect diff --git a/tests/e2e/pubsub/jetstream/go.sum b/tests/e2e/pubsub/jetstream/go.sum index 3853b1782..435619a48 100644 --- a/tests/e2e/pubsub/jetstream/go.sum +++ b/tests/e2e/pubsub/jetstream/go.sum @@ -1,7 +1,7 @@ -github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= -github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= -github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f h1:K6XJz+p6bQwqqI+GyQP/jjjqfsdjK0Loe2ZYQ5gXut4= -github.com/dapr/kit v0.0.3-0.20221102045011-c213121f0b4f/go.mod h1:i9t09QZw346M2RbuK7oJhssOP0HCAQObz61U4SBNJSU= +github.com/cenkalti/backoff/v4 v4.2.0 h1:HN5dHm3WBOgndBH6E8V0q2jIYIR3s9yglV8k/+MN3u4= +github.com/cenkalti/backoff/v4 v4.2.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= +github.com/dapr/kit v0.0.3 h1:1FCnWjIuAS3OJzJhOlUKNzLxoazYhYIS4oCOOULmWBA= +github.com/dapr/kit v0.0.3/go.mod h1:+vh2UIRT0KzFm5YJWfj7az4XVSdodys1OCz1WzNe1Eo= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= From a4b27ae49b7c99820c6e921d3891f03334692714 Mon Sep 17 00:00:00 2001 From: Sarthak Sharma Date: Sun, 4 Dec 2022 03:29:42 +0530 Subject: [PATCH 87/87] fix flaky tests (#2338) --- bindings/cron/cron_test.go | 13 ++++- .../certification/bindings/cron/cron_test.go | 49 ++++++++++--------- 2 files changed, 38 insertions(+), 24 deletions(-) diff --git a/bindings/cron/cron_test.go b/bindings/cron/cron_test.go index a37b5459f..f48fb8415 100644 --- a/bindings/cron/cron_test.go +++ b/bindings/cron/cron_test.go @@ -108,7 +108,12 @@ func TestCronRead(t *testing.T) { return nil, nil }) // Check if cron triggers 5 times in 5 seconds - clk.Add(5 * time.Second) + for i := 0; i < expectedCount; i++ { + // Add time to mock clock in 1 second intervals using loop to allow cron go routine to run + clk.Add(time.Second) + } + // Wait for 1 second after adding the last second to mock clock to allow cron to finish triggering + time.Sleep(1 * time.Second) assert.Equal(t, expectedCount, observedCount, "Cron did not trigger expected number of times, expected %d, got %d", expectedCount, observedCount) assert.NoErrorf(t, err, "error on read") } @@ -132,7 +137,11 @@ func TestCronReadWithContextCancellation(t *testing.T) { return nil, nil }) // Check if cron triggers only 5 times in 10 seconds since context should be cancelled after 5 triggers - clk.Add(10 * time.Second) + for i := 0; i < 10; i++ { + // Add time to mock clock in 1 second intervals using loop to allow cron go routine to run + clk.Add(time.Second) + } + time.Sleep(1 * time.Second) assert.Equal(t, expectedCount, observedCount, "Cron did not trigger expected number of times, expected %d, got %d", expectedCount, observedCount) assert.NoErrorf(t, err, "error on read") } diff --git a/tests/certification/bindings/cron/cron_test.go b/tests/certification/bindings/cron/cron_test.go index 91e095850..6c1381468 100644 --- a/tests/certification/bindings/cron/cron_test.go +++ b/tests/certification/bindings/cron/cron_test.go @@ -46,6 +46,9 @@ type cronTest struct { clk *clock.Mock // mock clock } +// starting time for the mock clock +var startTime = time.Date(2022, time.January, 1, 0, 0, 0, 0, time.UTC) + // Test cron triggers with different schedules // //nolint:dupword @@ -53,9 +56,6 @@ func TestCronBindingTrigger(t *testing.T) { appName := "cronapp" sidecarName := "cron-sidecar" - // starting time for the mock clock - startTime := time.Date(2022, time.January, 1, 0, 0, 0, 0, time.UTC) - testMatrix := []cronTest{ { cronName: "cron1s", @@ -66,26 +66,26 @@ func TestCronBindingTrigger(t *testing.T) { { cronName: "cron3s", schedule: "*/3 * * * * *", // Test non-standard crontab format - expectedTriggerCount: 5, - timeoutToObserveTriggers: time.Second * 15, + expectedTriggerCount: 10, + timeoutToObserveTriggers: time.Second * 30, }, { cronName: "cron15m", schedule: "*/15 * * * *", // Test standard crontab format - expectedTriggerCount: 4, - timeoutToObserveTriggers: time.Hour * 1, + expectedTriggerCount: 12, + timeoutToObserveTriggers: time.Hour * 3, }, { cronName: "cron6h", schedule: "0 0 */6 ? * *", // Test quartz cron format - expectedTriggerCount: 4, - timeoutToObserveTriggers: time.Hour * 24, + expectedTriggerCount: 12, + timeoutToObserveTriggers: time.Hour * 24 * 3, }, { cronName: "cronMonthly", schedule: "0 0 1 * *", // Test standard cron format - expectedTriggerCount: 1, - timeoutToObserveTriggers: time.Hour * 24 * 31, // Add 31 days to the mock clock + expectedTriggerCount: 10, + timeoutToObserveTriggers: time.Hour * 24 * 31 * 10, // Add 10 months to the mock clock }, } @@ -102,7 +102,7 @@ func TestCronBindingTrigger(t *testing.T) { observedTriggerCount := 0 flow.New(t, "test cron trigger with different schedules"). - Step(app.Run(appName, fmt.Sprintf(":%d", appPort), appWithTriggerCounter(t, cronTest.cronName, &observedTriggerCount))). + Step(app.Run(appName, fmt.Sprintf(":%d", appPort), appWithTriggerCounter(t, cronTest.clk, cronTest.cronName, &observedTriggerCount))). Step(sidecar.Run(sidecarName, embedded.WithComponentsPath("./components"), embedded.WithDaprGRPCPort(grpcPort), @@ -137,9 +137,10 @@ func TestCronBindingsWithSameRoute(t *testing.T) { timeoutToObserveTriggers := time.Second * 15 clk := clock.NewMock() + clk.Set(startTime) flow.New(t, "test cron bindings with different schedules and same route"). - Step(app.Run(appName, fmt.Sprintf(":%d", appPort), appWithTriggerCounter(t, cronName, &observedTriggerCount))). + Step(app.Run(appName, fmt.Sprintf(":%d", appPort), appWithTriggerCounter(t, clk, cronName, &observedTriggerCount))). Step(sidecar.Run(sidecarName, embedded.WithComponentsPath("./components_sameroute"), embedded.WithDaprGRPCPort(grpcPort), @@ -177,9 +178,10 @@ func TestCronBindingWithAppRestart(t *testing.T) { waitBeforeAppRestart := time.Second * 5 clk := clock.NewMock() + clk.Set(startTime) flow.New(t, "test cron trigger schedule @every3s with app restart"). - Step(app.Run(appName, fmt.Sprintf(":%d", appPort), appWithTriggerCounter(t, cronName, &observedTriggerCount))). + Step(app.Run(appName, fmt.Sprintf(":%d", appPort), appWithTriggerCounter(t, clk, cronName, &observedTriggerCount))). Step(sidecar.Run(sidecarName, embedded.WithComponentsPath("./components"), embedded.WithDaprGRPCPort(grpcPort), @@ -189,8 +191,8 @@ func TestCronBindingWithAppRestart(t *testing.T) { )). Step("allow cron to trigger once", addTimeToMockClock(clk, waitBeforeAppStop), flow.Sleep(waitBeforeAppStop)). Step("stop app", app.Stop(appName)). - Step("wait before app restart", addTimeToMockClock(clk, waitBeforeAppRestart), flow.Sleep(waitBeforeAppRestart)). - Step(app.Run(appName, fmt.Sprintf(":%d", appPort), appWithTriggerCounter(t, cronName, &observedTriggerCount))). + Step("wait before app restart", flow.Sleep(waitBeforeAppRestart)). + Step(app.Run(appName, fmt.Sprintf(":%d", appPort), appWithTriggerCounter(t, clk, cronName, &observedTriggerCount))). Step("advance the clock time", addTimeToMockClock(clk, timeoutToObserveTriggers)). Step("assert cron triggered within deadline", assertTriggerCount(t, expectedTriggerCount, &observedTriggerCount)). Step("stop sidecar", sidecar.Stop(sidecarName)). @@ -221,9 +223,10 @@ func TestCronBindingWithSidecarRestart(t *testing.T) { waitBeforeSidecarRestart := time.Second * 5 clk := clock.NewMock() + clk.Set(startTime) flow.New(t, "test cron trigger schedule @every 3s with sidecar restart"). - Step(app.Run(appName, fmt.Sprintf(":%d", appPort), appWithTriggerCounter(t, cronName, &observedTriggerCount))). + Step(app.Run(appName, fmt.Sprintf(":%d", appPort), appWithTriggerCounter(t, clk, cronName, &observedTriggerCount))). Step(sidecar.Run(sidecarName, embedded.WithComponentsPath("./components"), embedded.WithDaprGRPCPort(grpcPort), @@ -233,7 +236,7 @@ func TestCronBindingWithSidecarRestart(t *testing.T) { )). Step("allow cron to trigger once", addTimeToMockClock(clk, waitBeforeSidecarStop), flow.Sleep(waitBeforeSidecarStop)). Step("stop sidecar", sidecar.Stop(sidecarName)). - Step("wait before sidecar restart", addTimeToMockClock(clk, waitBeforeSidecarRestart), flow.Sleep(waitBeforeSidecarRestart)). + Step("wait before sidecar restart", flow.Sleep(waitBeforeSidecarRestart)). Step(sidecar.Run(sidecarName, embedded.WithComponentsPath("./components"), embedded.WithDaprGRPCPort(grpcPort), @@ -248,11 +251,11 @@ func TestCronBindingWithSidecarRestart(t *testing.T) { Run() } -func appWithTriggerCounter(t *testing.T, cronName string, triggeredCount *int) func(ctx flow.Context, s common.Service) error { +func appWithTriggerCounter(t *testing.T, clk *clock.Mock, cronName string, triggeredCount *int) func(ctx flow.Context, s common.Service) error { return func(ctx flow.Context, s common.Service) error { // Setup the input binding endpoint err := s.AddBindingInvocationHandler(cronName, func(_ context.Context, in *common.BindingEvent) ([]byte, error) { - ctx.Logf("Cron triggered at %s", time.Now().String()) + ctx.Logf("Cron triggered at %s", clk.Now().String()) (*triggeredCount)++ return []byte("{}"), nil }) @@ -264,14 +267,16 @@ func appWithTriggerCounter(t *testing.T, cronName string, triggeredCount *int) f func addTimeToMockClock(clk *clock.Mock, timeToAdd time.Duration) func(ctx flow.Context) error { return func(ctx flow.Context) error { clk.Add(timeToAdd) + // Wait for 1 second after adding time to mock clock to allow cron goroutine to run + time.Sleep(time.Second) return nil } } func assertTriggerCount(t *testing.T, expectedTriggerCount int, observedTriggerCount *int) func(ctx flow.Context) error { return func(ctx flow.Context) error { - // allow up to 1 extra trigger to account for additional timeout(@schedule interval of cron trigger) provided in the tests - if *observedTriggerCount != expectedTriggerCount && *observedTriggerCount != expectedTriggerCount+1 { + // allow up to 1 less or extra trigger to account for additional timeout(@schedule interval of cron trigger) provided in the tests or if unable to observe up to 1 trigger during app or sidecar restart + if !(*observedTriggerCount >= expectedTriggerCount-1 && *observedTriggerCount <= expectedTriggerCount+1) { t.Errorf("expected %d triggers, got %d", expectedTriggerCount, *observedTriggerCount) } return nil