mirror of
				https://github.com/imgproxy/imgproxy.git
				synced 2025-10-30 23:08:02 +02:00 
			
		
		
		
	Tests and minor fixes for transports
This commit is contained in:
		
							
								
								
									
										4
									
								
								go.mod
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								go.mod
									
									
									
									
									
								
							| @@ -3,7 +3,7 @@ module github.com/imgproxy/imgproxy/v3 | ||||
| go 1.16 | ||||
|  | ||||
| require ( | ||||
| 	cloud.google.com/go/storage v1.21.0 | ||||
| 	cloud.google.com/go/storage v1.22.0 | ||||
| 	github.com/Azure/azure-storage-blob-go v0.14.0 | ||||
| 	github.com/Microsoft/go-winio v0.5.2 // indirect | ||||
| 	github.com/StackExchange/wmi v1.2.1 // indirect | ||||
| @@ -11,10 +11,12 @@ require ( | ||||
| 	github.com/aws/aws-sdk-go v1.43.33 | ||||
| 	github.com/benesch/cgosymbolizer v0.0.0-20190515212042-bec6fe6e597b | ||||
| 	github.com/bugsnag/bugsnag-go/v2 v2.1.2 | ||||
| 	github.com/fsouza/fake-gcs-server v1.37.10-0.20220407170115-d717316ed8a8 | ||||
| 	github.com/getsentry/sentry-go v0.13.0 | ||||
| 	github.com/go-ole/go-ole v1.2.6 // indirect | ||||
| 	github.com/honeybadger-io/honeybadger-go v0.5.0 | ||||
| 	github.com/ianlancetaylor/cgosymbolizer v0.0.0-20220405231054-a1ae3e4bba26 // indirect | ||||
| 	github.com/johannesboyne/gofakes3 v0.0.0-20220314170512-33c13122505e | ||||
| 	github.com/matoous/go-nanoid/v2 v2.0.0 | ||||
| 	github.com/ncw/swift/v2 v2.0.1 | ||||
| 	github.com/newrelic/go-agent/v3 v3.15.2 | ||||
|   | ||||
							
								
								
									
										61
									
								
								go.sum
									
									
									
									
									
								
							
							
						
						
									
										61
									
								
								go.sum
									
									
									
									
									
								
							| @@ -37,26 +37,32 @@ cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUM | ||||
| 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/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow= | ||||
| cloud.google.com/go/compute v1.2.0/go.mod h1:xlogom/6gr8RJGBe7nT2eGsQYAFUbbv8dbC29qE3Xmw= | ||||
| 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/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/iam v0.1.1 h1:4CapQyNFjiksks1/x7jsvsygFPhihslYk5GptIrlX68= | ||||
| cloud.google.com/go/iam v0.1.0/go.mod h1:vcUNEa0pEm0qRVpmWepWaFMIAI8/hjB9mO8rNCJtF6c= | ||||
| cloud.google.com/go/iam v0.1.1/go.mod h1:CKqrcnI/suGpybEHxZ7BMehL0oA4LpdyJdUlTl9jVMw= | ||||
| 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.1.0 h1:1yc4rLqCkVDS9Zvc7m+3mJ47kw0Uo5Q5+sMjcmUVUeM= | ||||
| cloud.google.com/go/kms v1.1.0/go.mod h1:WdbppnCDMDpOvoYBMn1+gNmOeEoZYqAv+HeuKARGCXI= | ||||
| 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.4.0/go.mod h1:LFrqilwgdw4X2cJS9ALgzYmMu+ULyrUN6IHV3CPK4TM= | ||||
| cloud.google.com/go/pubsub v1.19.0 h1:WZy66ga6/tqmZiwv1jwKVgqV8FuEuAmPR5CEJHNVCZk= | ||||
| cloud.google.com/go/pubsub v1.19.0/go.mod h1:/O9kmSe9bb9KRnIAWkzmqhPjHo6LtzGOBYd/kr06XSs= | ||||
| cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= | ||||
| cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= | ||||
| cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= | ||||
| cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= | ||||
| cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= | ||||
| cloud.google.com/go/storage v1.21.0 h1:HwnT2u2D309SFDHQII6m18HlrCi3jAXhUMTLOWXYH14= | ||||
| cloud.google.com/go/storage v1.21.0/go.mod h1:XmRlxkgPjlBONznT2dDUU/5XlpU2OjMnKuqnZI01LAA= | ||||
| cloud.google.com/go/storage v1.21.1-0.20220301044418-a34503bc0f0b/go.mod h1:LV51ZfTtzeoeXb0mKg4HgywiJ4PFR11jFNtQwUzhg8U= | ||||
| cloud.google.com/go/storage v1.22.0 h1:NUV0NNp9nkBuW66BFRLuMgldN60C57ET3dhbwLIYio8= | ||||
| cloud.google.com/go/storage v1.22.0/go.mod h1:GbaLEoMqbVm6sx3Z0R++gSiBlgMv6yUi2q1DeGFKQgE= | ||||
| dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= | ||||
| github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= | ||||
| github.com/Azure/azure-pipeline-go v0.2.3 h1:7U9HBg1JFK3jHl5qmo4CTZKFTVgMwdFHMVtCdfBE21U= | ||||
| @@ -142,6 +148,7 @@ github.com/armon/go-metrics v0.3.0/go.mod h1:zXjbSimjXTd7vOpY8B0/2LpvNvDoXBuplAD | ||||
| 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/astaxie/beego v1.12.3/go.mod h1:p3qIm0Ryx7zeBHLljmd7omloyca1s4yu1a8kM1FkpIA= | ||||
| github.com/aws/aws-sdk-go v1.17.4/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= | ||||
| github.com/aws/aws-sdk-go v1.20.6/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= | ||||
| github.com/aws/aws-sdk-go v1.25.37/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= | ||||
| github.com/aws/aws-sdk-go v1.34.28/go.mod h1:H7NKnBqNVzoTJpGfLrQkkD+ytBA93eiDYi/+8rV9s48= | ||||
| @@ -276,6 +283,9 @@ github.com/evanphx/json-patch/v5 v5.5.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2Vvl | ||||
| 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/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 h1:+nS9g82KMXccJ/wp0zyRW9ZBHFETmMGtkk+2CTTrW4o= | ||||
| 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 h1:TcekIExNqud5crz4xD2pavyTgWiPvpYe4Xau31I0PRk= | ||||
| github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= | ||||
| @@ -284,6 +294,8 @@ github.com/frankban/quicktest v1.13.0/go.mod h1:qLE0fzW0VuyUAJgPU19zByoIr0HtCHN/ | ||||
| github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= | ||||
| github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= | ||||
| github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= | ||||
| github.com/fsouza/fake-gcs-server v1.37.10-0.20220407170115-d717316ed8a8 h1:ZUFfzWVIf8ynwiJ0CbVPcjj0q8ZyRnrwVxplRaztlJ4= | ||||
| github.com/fsouza/fake-gcs-server v1.37.10-0.20220407170115-d717316ed8a8/go.mod h1:1cHY4gNBYsFwmqOI1M/FevWPT9UwqOkf1D0WNibK7kI= | ||||
| github.com/garyburd/redigo v1.6.3/go.mod h1:rTb6epsqigu3kYKBnaF028A7Tf/Aw5s0cqA47doKKqw= | ||||
| github.com/gavv/httpexpect v2.0.0+incompatible/go.mod h1:x+9tiU1YnrOvnB725RkpoLv1M62hOWzwo5OXotisrKc= | ||||
| github.com/getsentry/sentry-go v0.13.0 h1:20dgTiUSfxRB/EhMPtxcL9ZEbM1ZdR+W/7f7NWD+xWo= | ||||
| @@ -387,8 +399,9 @@ github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfU | ||||
| github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/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 h1:1r7pUrabqp18hOBcwBwiTsbnFeTZHV9eER/QT5JVZxY= | ||||
| 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= | ||||
| @@ -482,10 +495,16 @@ github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0 | ||||
| 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.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= | ||||
| github.com/googleapis/go-type-adapters v1.0.0 h1:9XdMn+d/G57qq1s8dNc5IesGCXHf6V2HZ2JwRxfA2tA= | ||||
| github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= | ||||
| github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= | ||||
| github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= | ||||
| github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= | ||||
| github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= | ||||
| github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= | ||||
| github.com/gorilla/mux v1.5.0/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= | ||||
| github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= | ||||
| github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= | ||||
| github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= | ||||
| github.com/graph-gophers/graphql-go v1.3.0/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc= | ||||
| github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= | ||||
| @@ -630,6 +649,8 @@ github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHW | ||||
| 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/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks= | ||||
| github.com/johannesboyne/gofakes3 v0.0.0-20220314170512-33c13122505e h1:vyS7N0o/a00uLggd0QtEh3sGlK1Uhuu/YyVczES6/sw= | ||||
| github.com/johannesboyne/gofakes3 v0.0.0-20220314170512-33c13122505e/go.mod h1:LIAXxPvcUXwOcTIj9LSNSUpE9/eMHalTWxsP/kmWxQI= | ||||
| github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= | ||||
| github.com/jonboulle/clockwork v0.2.2 h1:UOGuzwb1PwsrDAObMuhUnj0p5ULPj8V/xJ7Kx9qUBdQ= | ||||
| github.com/jonboulle/clockwork v0.2.2/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8= | ||||
| @@ -840,6 +861,8 @@ github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE | ||||
| github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= | ||||
| github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= | ||||
| github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= | ||||
| github.com/pkg/xattr v0.4.6 h1:0vqthLIMxQKA9VscyMcxjvAUGvyfzlk009vwLE8OZJg= | ||||
| github.com/pkg/xattr v0.4.6/go.mod h1:sBD3RAqlr8Q+RC3FutZcikpT8nyDrIEEBw2J744gVWs= | ||||
| github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= | ||||
| github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= | ||||
| github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= | ||||
| @@ -888,11 +911,15 @@ github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR | ||||
| 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/ryszard/goskiplist v0.0.0-20150312221310-2dfbae5fcf46 h1:GHRpF1pTW19a8tTFrMLUcfWwyC0pnifVo2ClaLq+hP8= | ||||
| github.com/ryszard/goskiplist v0.0.0-20150312221310-2dfbae5fcf46/go.mod h1:uAQ5PCi+MFsC7HjREoAz1BU+Mq60+05gifQSsHSDG/8= | ||||
| github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= | ||||
| github.com/schollz/closestmatch v2.1.0+incompatible/go.mod h1:RtP1ddjLong6gTkbtmuhtR2uUrrJOpYzYRvbcPAid+g= | ||||
| github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= | ||||
| github.com/segmentio/kafka-go v0.4.29/go.mod h1:m1lXeqJtIFYZayv0shM/tjrAFljvWLTprxBHd+3PnaU= | ||||
| github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= | ||||
| github.com/shabbyrobe/gocovmerge v0.0.0-20180507124511-f6ea450bfb63 h1:J6qvD6rbmOil46orKqJaRPG+zTpoGlBTUdyv8ki63L0= | ||||
| github.com/shabbyrobe/gocovmerge v0.0.0-20180507124511-f6ea450bfb63/go.mod h1:n+VKSARF5y/tS9XFSP7vWDfS+GUC5vs/YT7M5XDTUEM= | ||||
| github.com/shiena/ansicolor v0.0.0-20151119151921-a422bbe96644/go.mod h1:nkxAfR/5quYxwPZhyDxgasBMnRtBZd0FCEpawpjMUFg= | ||||
| github.com/shirou/gopsutil v2.20.9+incompatible h1:msXs2frUV+O/JLva9EDLpuJ84PrFsdCTCQex8PUdtkQ= | ||||
| github.com/shirou/gopsutil v2.20.9+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= | ||||
| @@ -921,6 +948,7 @@ github.com/smartystreets/gunit v1.0.0/go.mod h1:qwPWnhz6pn0NnRBP++URONOVyNkPyr4S | ||||
| github.com/smartystreets/gunit v1.1.3/go.mod h1:EH5qMBab2UclzXUcpR8b93eHsIlp9u+pDQIRp5DZNzQ= | ||||
| github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= | ||||
| github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= | ||||
| github.com/spf13/afero v1.2.1/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= | ||||
| 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/cobra v0.0.2-0.20171109065643-2da4a54c5cee/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= | ||||
| @@ -1023,6 +1051,7 @@ github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1 | ||||
| github.com/yuin/gopher-lua v0.0.0-20171031051903-609c9cd26973/go.mod h1:aEV29XrmTYFr3CiRxZeGHpkvbwq+prZduBqMaascyCU= | ||||
| github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q= | ||||
| github.com/zenazn/goji v1.0.1/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q= | ||||
| go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= | ||||
| go.mongodb.org/mongo-driver v1.5.1/go.mod h1:gRXCHX4Jo7J0IJ1oDQyUxF7jfy19UfxniMS4xxMmUqw= | ||||
| go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= | ||||
| go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= | ||||
| @@ -1138,6 +1167,7 @@ golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73r | ||||
| 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-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | ||||
| golang.org/x/net v0.0.0-20190310074541-c10a0554eabf/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-20190327091125-710a502c58a2/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= | ||||
| golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= | ||||
| @@ -1220,6 +1250,7 @@ golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJ | ||||
| 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 h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ= | ||||
| golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | ||||
| golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= | ||||
| golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= | ||||
| @@ -1284,6 +1315,7 @@ golang.org/x/sys v0.0.0-20200826173525-f9321e4c35a6/go.mod h1:h1NjWce9XRLGQEsW7w | ||||
| golang.org/x/sys v0.0.0-20200828194041-157a740278f4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20201101102859-da207088b7d1/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-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| @@ -1307,6 +1339,7 @@ golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBc | ||||
| golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/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-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||
| golang.org/x/sys v0.0.0-20210917161153-d61c044b1678/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-20211103235746-7861aae1554b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||
| @@ -1350,6 +1383,7 @@ golang.org/x/tools v0.0.0-20181221001348-537d06c36207/go.mod h1:n7NCudcB/nEzxVGm | ||||
| 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= | ||||
| golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= | ||||
| golang.org/x/tools v0.0.0-20190308174544-00c44ba9c14f/go.mod h1:25r3+/G6/xytQM8iWZKq3Hn0kr0rgFKPUNVEL/dr3z4= | ||||
| 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= | ||||
| @@ -1412,6 +1446,7 @@ 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.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= | ||||
| golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= | ||||
| golang.org/x/tools v0.1.5 h1:ouewzE6p+/VEB31YYnTbEJdi8pFqKp4P4n85vwo3DHA= | ||||
| golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= | ||||
| golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= | ||||
| golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= | ||||
| @@ -1455,12 +1490,11 @@ 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.58.0/go.mod h1:cAbP2FsxoGVNwtgNAmmn3y5G1TWAiVYRmg4yku3lv+E= | ||||
| 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.64.0/go.mod h1:931CdxA8Rm4t6zqTFGSsgwbAEZ2+GMYurbndwSimebM= | ||||
| google.golang.org/api v0.66.0/go.mod h1:I1dmXYpX7HGwz/ejRxwQp2qj5bFAz93HiCU1C1oYd9M= | ||||
| google.golang.org/api v0.67.0/go.mod h1:ShHKP8E60yPsKNw/w8w+VYaj9H6buA5UqDp8dhbQZ6g= | ||||
| google.golang.org/api v0.69.0/go.mod h1:boanBiw+h5c3s+tBPgEzLDRHfFLWV0qXxRHz3ws7C80= | ||||
| 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= | ||||
| @@ -1515,6 +1549,7 @@ 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= | ||||
| @@ -1531,25 +1566,24 @@ google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEc | ||||
| google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= | ||||
| 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-20210917145530-b395a37504d4/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= | ||||
| google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= | ||||
| google.golang.org/genproto v0.0.0-20211018162055-cf77aa76bad2/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-20211223182754-3ac035c7e7cb/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= | ||||
| google.golang.org/genproto v0.0.0-20220111164026-67b88f271998/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= | ||||
| google.golang.org/genproto v0.0.0-20220114231437-d2e6a121cae0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= | ||||
| google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= | ||||
| google.golang.org/genproto v0.0.0-20220201184016-50beb8ab5c44/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= | ||||
| google.golang.org/genproto v0.0.0-20220207164111-0872dc986b00/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= | ||||
| google.golang.org/genproto v0.0.0-20220211171837-173942840c17/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= | ||||
| google.golang.org/genproto v0.0.0-20220216160803-4663080d8bc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= | ||||
| google.golang.org/genproto v0.0.0-20220218161850-94dd64e39d7c/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= | ||||
| google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= | ||||
| 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 h1:0m9wktIpOxGw+SSKmydXWB3Z3GTfcPP6+q75HCQa6HI= | ||||
| 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 v1.8.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= | ||||
| google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= | ||||
| google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= | ||||
| @@ -1597,8 +1631,9 @@ google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGj | ||||
| 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 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ= | ||||
| 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/DataDog/dd-trace-go.v1 v1.37.1 h1:rgO9oC3Mr7es0zKIsaooL50UY0qboUDdueP7MzH1fUI= | ||||
| gopkg.in/DataDog/dd-trace-go.v1 v1.37.1/go.mod h1:HMpV5TQ38YAfRJ8OlM7UfLyGg6D01MPNHRFwsnrGMB0= | ||||
| gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U= | ||||
|   | ||||
| @@ -1,7 +1,6 @@ | ||||
| package azure | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"fmt" | ||||
| 	"net/http" | ||||
| 	"net/url" | ||||
| @@ -41,7 +40,7 @@ func (t transport) RoundTrip(req *http.Request) (resp *http.Response, err error) | ||||
| 	containerURL := t.serviceURL.NewContainerURL(strings.ToLower(req.URL.Host)) | ||||
| 	blobURL := containerURL.NewBlockBlobURL(strings.TrimPrefix(req.URL.Path, "/")) | ||||
| 
 | ||||
| 	get, err := blobURL.Download(context.Background(), 0, azblob.CountToEnd, azblob.BlobAccessConditions{}, false, azblob.ClientProvidedKeyOptions{}) | ||||
| 	get, err := blobURL.Download(req.Context(), 0, azblob.CountToEnd, azblob.BlobAccessConditions{}, false, azblob.ClientProvidedKeyOptions{}) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
							
								
								
									
										96
									
								
								transport/azure/azure_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										96
									
								
								transport/azure/azure_test.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,96 @@ | ||||
| package azure | ||||
|  | ||||
| import ( | ||||
| 	"net/http" | ||||
| 	"net/http/httptest" | ||||
| 	"os" | ||||
| 	"testing" | ||||
|  | ||||
| 	"github.com/sirupsen/logrus" | ||||
| 	"github.com/stretchr/testify/require" | ||||
| 	"github.com/stretchr/testify/suite" | ||||
|  | ||||
| 	"github.com/imgproxy/imgproxy/v3/config" | ||||
| ) | ||||
|  | ||||
| type AzureTestSuite struct { | ||||
| 	suite.Suite | ||||
|  | ||||
| 	server    *httptest.Server | ||||
| 	transport http.RoundTripper | ||||
| 	etag      string | ||||
| } | ||||
|  | ||||
| func (s *AzureTestSuite) SetupSuite() { | ||||
| 	data := make([]byte, 32) | ||||
|  | ||||
| 	logrus.SetOutput(os.Stdout) | ||||
|  | ||||
| 	s.etag = "testetag" | ||||
|  | ||||
| 	s.server = httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, r *http.Request) { | ||||
| 		require.Equal(s.T(), "/test/foo/test.png", r.URL.Path) | ||||
|  | ||||
| 		rw.Header().Set("Etag", s.etag) | ||||
| 		rw.WriteHeader(200) | ||||
| 		rw.Write(data) | ||||
| 	})) | ||||
|  | ||||
| 	config.ABSEnabled = true | ||||
| 	config.ABSEndpoint = s.server.URL | ||||
| 	config.ABSName = "testname" | ||||
| 	config.ABSKey = "dGVzdGtleQ==" | ||||
|  | ||||
| 	var err error | ||||
| 	s.transport, err = New() | ||||
| 	require.Nil(s.T(), err) | ||||
| } | ||||
|  | ||||
| func (s *AzureTestSuite) TearDownSuite() { | ||||
| 	s.server.Close() | ||||
| } | ||||
|  | ||||
| func (s *AzureTestSuite) TestRoundTripWithETagDisabledReturns200() { | ||||
| 	config.ETagEnabled = false | ||||
| 	request, _ := http.NewRequest("GET", "abs://test/foo/test.png", nil) | ||||
|  | ||||
| 	response, err := s.transport.RoundTrip(request) | ||||
| 	require.Nil(s.T(), err) | ||||
| 	require.Equal(s.T(), 200, response.StatusCode) | ||||
| } | ||||
|  | ||||
| func (s *AzureTestSuite) TestRoundTripWithETagEnabled() { | ||||
| 	config.ETagEnabled = true | ||||
| 	request, _ := http.NewRequest("GET", "abs://test/foo/test.png", nil) | ||||
|  | ||||
| 	response, err := s.transport.RoundTrip(request) | ||||
| 	require.Nil(s.T(), err) | ||||
| 	require.Equal(s.T(), 200, response.StatusCode) | ||||
| 	require.Equal(s.T(), s.etag, response.Header.Get("ETag")) | ||||
| } | ||||
|  | ||||
| func (s *AzureTestSuite) TestRoundTripWithIfNoneMatchReturns304() { | ||||
| 	config.ETagEnabled = true | ||||
|  | ||||
| 	request, _ := http.NewRequest("GET", "abs://test/foo/test.png", nil) | ||||
| 	request.Header.Set("If-None-Match", s.etag) | ||||
|  | ||||
| 	response, err := s.transport.RoundTrip(request) | ||||
| 	require.Nil(s.T(), err) | ||||
| 	require.Equal(s.T(), http.StatusNotModified, response.StatusCode) | ||||
| } | ||||
|  | ||||
| func (s *AzureTestSuite) TestRoundTripWithUpdatedETagReturns200() { | ||||
| 	config.ETagEnabled = true | ||||
|  | ||||
| 	request, _ := http.NewRequest("GET", "abs://test/foo/test.png", nil) | ||||
| 	request.Header.Set("If-None-Match", s.etag+"_wrong") | ||||
|  | ||||
| 	response, err := s.transport.RoundTrip(request) | ||||
| 	require.Nil(s.T(), err) | ||||
| 	require.Equal(s.T(), http.StatusOK, response.StatusCode) | ||||
| } | ||||
|  | ||||
| func TestS3Transport(t *testing.T) { | ||||
| 	suite.Run(t, new(AzureTestSuite)) | ||||
| } | ||||
| @@ -41,6 +41,8 @@ func (t transport) RoundTrip(req *http.Request) (resp *http.Response, err error) | ||||
| 		header.Set("ETag", etag) | ||||
|  | ||||
| 		if etag == req.Header.Get("If-None-Match") { | ||||
| 			f.Close() | ||||
|  | ||||
| 			return &http.Response{ | ||||
| 				StatusCode:    http.StatusNotModified, | ||||
| 				Proto:         "HTTP/1.0", | ||||
|   | ||||
							
								
								
									
										78
									
								
								transport/fs/fs_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										78
									
								
								transport/fs/fs_test.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,78 @@ | ||||
| package fs | ||||
|  | ||||
| import ( | ||||
| 	"net/http" | ||||
| 	"os" | ||||
| 	"path/filepath" | ||||
| 	"testing" | ||||
|  | ||||
| 	"github.com/stretchr/testify/require" | ||||
| 	"github.com/stretchr/testify/suite" | ||||
|  | ||||
| 	"github.com/imgproxy/imgproxy/v3/config" | ||||
| ) | ||||
|  | ||||
| type FsTestSuite struct { | ||||
| 	suite.Suite | ||||
|  | ||||
| 	transport http.RoundTripper | ||||
| 	etag      string | ||||
| } | ||||
|  | ||||
| func (s *FsTestSuite) SetupSuite() { | ||||
| 	wd, err := os.Getwd() | ||||
| 	require.Nil(s.T(), err) | ||||
|  | ||||
| 	config.LocalFileSystemRoot = filepath.Join(wd, "..", "..", "testdata") | ||||
|  | ||||
| 	fi, err := os.Stat(filepath.Join(config.LocalFileSystemRoot, "test1.png")) | ||||
| 	require.Nil(s.T(), err) | ||||
|  | ||||
| 	s.etag = BuildEtag("/test1.png", fi) | ||||
| 	s.transport = New() | ||||
| } | ||||
|  | ||||
| func (s *FsTestSuite) TestRoundTripWithETagDisabledReturns200() { | ||||
| 	config.ETagEnabled = false | ||||
| 	request, _ := http.NewRequest("GET", "local:///test1.png", nil) | ||||
|  | ||||
| 	response, err := s.transport.RoundTrip(request) | ||||
| 	require.Nil(s.T(), err) | ||||
| 	require.Equal(s.T(), 200, response.StatusCode) | ||||
| } | ||||
|  | ||||
| func (s *FsTestSuite) TestRoundTripWithETagEnabled() { | ||||
| 	config.ETagEnabled = true | ||||
| 	request, _ := http.NewRequest("GET", "local:///test1.png", nil) | ||||
|  | ||||
| 	response, err := s.transport.RoundTrip(request) | ||||
| 	require.Nil(s.T(), err) | ||||
| 	require.Equal(s.T(), 200, response.StatusCode) | ||||
| 	require.Equal(s.T(), s.etag, response.Header.Get("ETag")) | ||||
| } | ||||
|  | ||||
| func (s *FsTestSuite) TestRoundTripWithIfNoneMatchReturns304() { | ||||
| 	config.ETagEnabled = true | ||||
|  | ||||
| 	request, _ := http.NewRequest("GET", "local:///test1.png", nil) | ||||
| 	request.Header.Set("If-None-Match", s.etag) | ||||
|  | ||||
| 	response, err := s.transport.RoundTrip(request) | ||||
| 	require.Nil(s.T(), err) | ||||
| 	require.Equal(s.T(), http.StatusNotModified, response.StatusCode) | ||||
| } | ||||
|  | ||||
| func (s *FsTestSuite) TestRoundTripWithUpdatedETagReturns200() { | ||||
| 	config.ETagEnabled = true | ||||
|  | ||||
| 	request, _ := http.NewRequest("GET", "local:///test1.png", nil) | ||||
| 	request.Header.Set("If-None-Match", s.etag+"_wrong") | ||||
|  | ||||
| 	response, err := s.transport.RoundTrip(request) | ||||
| 	require.Nil(s.T(), err) | ||||
| 	require.Equal(s.T(), http.StatusOK, response.StatusCode) | ||||
| } | ||||
|  | ||||
| func TestS3Transport(t *testing.T) { | ||||
| 	suite.Run(t, new(FsTestSuite)) | ||||
| } | ||||
							
								
								
									
										117
									
								
								transport/gcs/gcs_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										117
									
								
								transport/gcs/gcs_test.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,117 @@ | ||||
| package gcs | ||||
|  | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"net" | ||||
| 	"net/http" | ||||
| 	"testing" | ||||
|  | ||||
| 	"github.com/fsouza/fake-gcs-server/fakestorage" | ||||
| 	"github.com/stretchr/testify/require" | ||||
| 	"github.com/stretchr/testify/suite" | ||||
|  | ||||
| 	"github.com/imgproxy/imgproxy/v3/config" | ||||
| ) | ||||
|  | ||||
| func getFreePort() (int, error) { | ||||
| 	addr, err := net.ResolveTCPAddr("tcp", "localhost:0") | ||||
| 	if err != nil { | ||||
| 		return 0, err | ||||
| 	} | ||||
|  | ||||
| 	l, err := net.ListenTCP("tcp", addr) | ||||
| 	if err != nil { | ||||
| 		return 0, err | ||||
| 	} | ||||
| 	defer l.Close() | ||||
| 	return l.Addr().(*net.TCPAddr).Port, nil | ||||
| } | ||||
|  | ||||
| type GCSTestSuite struct { | ||||
| 	suite.Suite | ||||
|  | ||||
| 	server    *fakestorage.Server | ||||
| 	transport http.RoundTripper | ||||
| 	etag      string | ||||
| } | ||||
|  | ||||
| func (s *GCSTestSuite) SetupSuite() { | ||||
| 	noAuth = true | ||||
|  | ||||
| 	s.etag = "testetag" | ||||
|  | ||||
| 	port, err := getFreePort() | ||||
| 	require.Nil(s.T(), err) | ||||
|  | ||||
| 	s.server, err = fakestorage.NewServerWithOptions(fakestorage.Options{ | ||||
| 		Scheme:     "http", | ||||
| 		Port:       uint16(port), | ||||
| 		PublicHost: fmt.Sprintf("localhost:%d", port), | ||||
| 		InitialObjects: []fakestorage.Object{ | ||||
| 			{ | ||||
| 				ObjectAttrs: fakestorage.ObjectAttrs{ | ||||
| 					BucketName: "test", | ||||
| 					Name:       "foo/test.png", | ||||
| 					Etag:       s.etag, | ||||
| 				}, | ||||
| 				Content: make([]byte, 32), | ||||
| 			}, | ||||
| 		}, | ||||
| 	}) | ||||
| 	require.Nil(s.T(), err) | ||||
|  | ||||
| 	config.GCSEnabled = true | ||||
| 	config.GCSEndpoint = s.server.PublicURL() + "/storage/v1/" | ||||
|  | ||||
| 	s.transport, err = New() | ||||
| 	require.Nil(s.T(), err) | ||||
| } | ||||
|  | ||||
| func (s *GCSTestSuite) TearDownSuite() { | ||||
| 	s.server.Stop() | ||||
| } | ||||
|  | ||||
| func (s *GCSTestSuite) TestRoundTripWithETagDisabledReturns200() { | ||||
| 	config.ETagEnabled = false | ||||
| 	request, _ := http.NewRequest("GET", "gcs://test/foo/test.png", nil) | ||||
|  | ||||
| 	response, err := s.transport.RoundTrip(request) | ||||
| 	require.Nil(s.T(), err) | ||||
| 	require.Equal(s.T(), 200, response.StatusCode) | ||||
| } | ||||
|  | ||||
| func (s *GCSTestSuite) TestRoundTripWithETagEnabled() { | ||||
| 	config.ETagEnabled = true | ||||
| 	request, _ := http.NewRequest("GET", "gcs://test/foo/test.png", nil) | ||||
|  | ||||
| 	response, err := s.transport.RoundTrip(request) | ||||
| 	require.Nil(s.T(), err) | ||||
| 	require.Equal(s.T(), 200, response.StatusCode) | ||||
| 	require.Equal(s.T(), s.etag, response.Header.Get("ETag")) | ||||
| } | ||||
|  | ||||
| func (s *GCSTestSuite) TestRoundTripWithIfNoneMatchReturns304() { | ||||
| 	config.ETagEnabled = true | ||||
|  | ||||
| 	request, _ := http.NewRequest("GET", "gcs://test/foo/test.png", nil) | ||||
| 	request.Header.Set("If-None-Match", s.etag) | ||||
|  | ||||
| 	response, err := s.transport.RoundTrip(request) | ||||
| 	require.Nil(s.T(), err) | ||||
| 	require.Equal(s.T(), http.StatusNotModified, response.StatusCode) | ||||
| } | ||||
|  | ||||
| func (s *GCSTestSuite) TestRoundTripWithUpdatedETagReturns200() { | ||||
| 	config.ETagEnabled = true | ||||
|  | ||||
| 	request, _ := http.NewRequest("GET", "gcs://test/foo/test.png", nil) | ||||
| 	request.Header.Set("If-None-Match", s.etag+"_wrong") | ||||
|  | ||||
| 	response, err := s.transport.RoundTrip(request) | ||||
| 	require.Nil(s.T(), err) | ||||
| 	require.Equal(s.T(), http.StatusOK, response.StatusCode) | ||||
| } | ||||
|  | ||||
| func TestGCSTransport(t *testing.T) { | ||||
| 	suite.Run(t, new(GCSTestSuite)) | ||||
| } | ||||
							
								
								
									
										115
									
								
								transport/s3/s3_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										115
									
								
								transport/s3/s3_test.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,115 @@ | ||||
| package s3 | ||||
|  | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"net/http" | ||||
| 	"net/http/httptest" | ||||
| 	"os" | ||||
| 	"testing" | ||||
|  | ||||
| 	"github.com/aws/aws-sdk-go/aws" | ||||
| 	"github.com/aws/aws-sdk-go/service/s3" | ||||
| 	"github.com/johannesboyne/gofakes3" | ||||
| 	"github.com/johannesboyne/gofakes3/backend/s3mem" | ||||
| 	"github.com/stretchr/testify/require" | ||||
| 	"github.com/stretchr/testify/suite" | ||||
|  | ||||
| 	"github.com/imgproxy/imgproxy/v3/config" | ||||
| ) | ||||
|  | ||||
| type S3TestSuite struct { | ||||
| 	suite.Suite | ||||
|  | ||||
| 	server    *httptest.Server | ||||
| 	transport http.RoundTripper | ||||
| 	etag      string | ||||
| } | ||||
|  | ||||
| func (s *S3TestSuite) SetupSuite() { | ||||
| 	backend := s3mem.New() | ||||
| 	faker := gofakes3.New(backend) | ||||
| 	s.server = httptest.NewServer(faker.Server()) | ||||
|  | ||||
| 	config.S3Enabled = true | ||||
| 	config.S3Endpoint = s.server.URL | ||||
|  | ||||
| 	os.Setenv("AWS_REGION", "eu-central-1") | ||||
| 	os.Setenv("AWS_ACCESS_KEY_ID", "Foo") | ||||
| 	os.Setenv("AWS_SECRET_ACCESS_KEY", "Bar") | ||||
|  | ||||
| 	var err error | ||||
| 	s.transport, err = New() | ||||
| 	require.Nil(s.T(), err) | ||||
|  | ||||
| 	svc := s.transport.(transport).svc | ||||
|  | ||||
| 	_, err = svc.CreateBucket(&s3.CreateBucketInput{ | ||||
| 		Bucket: aws.String("test"), | ||||
| 	}) | ||||
| 	require.Nil(s.T(), err) | ||||
|  | ||||
| 	_, err = svc.PutObject(&s3.PutObjectInput{ | ||||
| 		Body:   bytes.NewReader(make([]byte, 32)), | ||||
| 		Bucket: aws.String("test"), | ||||
| 		Key:    aws.String("foo/test.png"), | ||||
| 	}) | ||||
| 	require.Nil(s.T(), err) | ||||
|  | ||||
| 	obj, err := svc.GetObject(&s3.GetObjectInput{ | ||||
| 		Bucket: aws.String("test"), | ||||
| 		Key:    aws.String("foo/test.png"), | ||||
| 	}) | ||||
| 	require.Nil(s.T(), err) | ||||
| 	defer obj.Body.Close() | ||||
|  | ||||
| 	s.etag = *obj.ETag | ||||
| } | ||||
|  | ||||
| func (s *S3TestSuite) TearDownSuite() { | ||||
| 	s.server.Close() | ||||
| } | ||||
|  | ||||
| func (s *S3TestSuite) TestRoundTripWithETagDisabledReturns200() { | ||||
| 	config.ETagEnabled = false | ||||
| 	request, _ := http.NewRequest("GET", "s3://test/foo/test.png", nil) | ||||
|  | ||||
| 	response, err := s.transport.RoundTrip(request) | ||||
| 	require.Nil(s.T(), err) | ||||
| 	require.Equal(s.T(), 200, response.StatusCode) | ||||
| } | ||||
|  | ||||
| func (s *S3TestSuite) TestRoundTripWithETagEnabled() { | ||||
| 	config.ETagEnabled = true | ||||
| 	request, _ := http.NewRequest("GET", "s3://test/foo/test.png", nil) | ||||
|  | ||||
| 	response, err := s.transport.RoundTrip(request) | ||||
| 	require.Nil(s.T(), err) | ||||
| 	require.Equal(s.T(), 200, response.StatusCode) | ||||
| 	require.Equal(s.T(), s.etag, response.Header.Get("ETag")) | ||||
| } | ||||
|  | ||||
| func (s *S3TestSuite) TestRoundTripWithIfNoneMatchReturns304() { | ||||
| 	config.ETagEnabled = true | ||||
|  | ||||
| 	request, _ := http.NewRequest("GET", "s3://test/foo/test.png", nil) | ||||
| 	request.Header.Set("If-None-Match", s.etag) | ||||
|  | ||||
| 	response, err := s.transport.RoundTrip(request) | ||||
| 	require.Nil(s.T(), err) | ||||
| 	require.Equal(s.T(), http.StatusNotModified, response.StatusCode) | ||||
| } | ||||
|  | ||||
| func (s *S3TestSuite) TestRoundTripWithUpdatedETagReturns200() { | ||||
| 	config.ETagEnabled = true | ||||
|  | ||||
| 	request, _ := http.NewRequest("GET", "s3://test/foo/test.png", nil) | ||||
| 	request.Header.Set("If-None-Match", s.etag+"_wrong") | ||||
|  | ||||
| 	response, err := s.transport.RoundTrip(request) | ||||
| 	require.Nil(s.T(), err) | ||||
| 	require.Equal(s.T(), http.StatusOK, response.StatusCode) | ||||
| } | ||||
|  | ||||
| func TestS3Transport(t *testing.T) { | ||||
| 	suite.Run(t, new(S3TestSuite)) | ||||
| } | ||||
| @@ -2,10 +2,7 @@ package swift | ||||
|  | ||||
| import ( | ||||
| 	"context" | ||||
| 	"io/ioutil" | ||||
| 	"net/http" | ||||
| 	"os" | ||||
| 	"path/filepath" | ||||
| 	"testing" | ||||
|  | ||||
| 	"github.com/ncw/swift/v2" | ||||
| @@ -67,11 +64,7 @@ func (s *SwiftTestSuite) setupTestFile() { | ||||
|  | ||||
| 	defer f.Close() | ||||
|  | ||||
| 	wd, err := os.Getwd() | ||||
| 	require.Nil(t, err) | ||||
|  | ||||
| 	data, err := ioutil.ReadFile(filepath.Join(wd, "..", "..", "testdata", "test1.png")) | ||||
| 	require.Nil(t, err, "failed to read testdata/test1.png") | ||||
| 	data := make([]byte, 32) | ||||
|  | ||||
| 	n, err := f.Write(data) | ||||
| 	require.Equal(t, n, len(data)) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user