From c1bfdd893fa3859302ecea1025a5e3a4e44052e7 Mon Sep 17 00:00:00 2001 From: Nick Craig-Wood Date: Tue, 8 Aug 2017 10:18:33 +0100 Subject: [PATCH] vendor: update qingstor dep ensure needed to do this, probably after various vendor merges --- Gopkg.lock | 18 +- .../{Sirupsen => sirupsen}/logrus/.gitignore | 0 .../{Sirupsen => sirupsen}/logrus/.travis.yml | 1 - .../logrus/CHANGELOG.md | 9 + .../{Sirupsen => sirupsen}/logrus/LICENSE | 0 .../{Sirupsen => sirupsen}/logrus/README.md | 31 +- .../{Sirupsen => sirupsen}/logrus/alt_exit.go | 0 .../logrus/alt_exit_test.go | 0 .../{Sirupsen => sirupsen}/logrus/doc.go | 0 .../{Sirupsen => sirupsen}/logrus/entry.go | 0 .../logrus/entry_test.go | 0 .../logrus/examples/basic/basic.go | 0 .../logrus/examples/hook/hook.go | 0 .../{Sirupsen => sirupsen}/logrus/exported.go | 2 +- .../logrus/formatter.go | 0 .../logrus/formatter_bench_test.go | 0 .../logrus/hook_test.go | 0 .../{Sirupsen => sirupsen}/logrus/hooks.go | 0 .../logrus/hooks/syslog/README.md | 0 .../logrus/hooks/syslog/syslog.go | 0 .../logrus/hooks/syslog/syslog_test.go | 0 .../logrus/hooks/test/test.go | 0 .../logrus/hooks/test/test_test.go | 0 .../logrus/json_formatter.go | 0 .../logrus/json_formatter_test.go | 0 .../{Sirupsen => sirupsen}/logrus/logger.go | 2 +- .../logrus/logger_bench_test.go | 0 .../{Sirupsen => sirupsen}/logrus/logrus.go | 0 .../logrus/logrus_test.go | 0 .../logrus/terminal_appengine.go | 0 .../logrus/terminal_bsd.go | 0 .../logrus/terminal_linux.go | 0 .../logrus/terminal_notwindows.go | 0 .../logrus/terminal_solaris.go | 0 .../logrus/terminal_windows.go | 0 .../logrus/text_formatter.go | 36 +- .../logrus/text_formatter_test.go | 78 ++- .../{Sirupsen => sirupsen}/logrus/writer.go | 0 .../yunify/qingstor-sdk-go/.travis.yml | 9 +- .../yunify/qingstor-sdk-go/CHANGELOG.md | 7 + .../yunify/qingstor-sdk-go/glide.lock | 11 +- .../yunify/qingstor-sdk-go/logger/logger.go | 2 +- .../yunify/qingstor-sdk-go/service/bucket.go | 110 ++-- .../yunify/qingstor-sdk-go/service/object.go | 102 ++-- .../qingstor-sdk-go/service/qingstor.go | 6 +- .../qingstor-sdk-go/template/service.tmpl | 4 + .../qingstor-sdk-go/template/shared.tmpl | 15 +- .../qingstor-sdk-go/template/sub_service.tmpl | 2 + .../yunify/qingstor-sdk-go/test/object.go | 559 +++++++++++++++--- .../yunify/qingstor-sdk-go/version.go | 2 +- 50 files changed, 777 insertions(+), 229 deletions(-) rename vendor/github.com/{Sirupsen => sirupsen}/logrus/.gitignore (100%) rename vendor/github.com/{Sirupsen => sirupsen}/logrus/.travis.yml (82%) rename vendor/github.com/{Sirupsen => sirupsen}/logrus/CHANGELOG.md (93%) rename vendor/github.com/{Sirupsen => sirupsen}/logrus/LICENSE (100%) rename vendor/github.com/{Sirupsen => sirupsen}/logrus/README.md (95%) rename vendor/github.com/{Sirupsen => sirupsen}/logrus/alt_exit.go (100%) rename vendor/github.com/{Sirupsen => sirupsen}/logrus/alt_exit_test.go (100%) rename vendor/github.com/{Sirupsen => sirupsen}/logrus/doc.go (100%) rename vendor/github.com/{Sirupsen => sirupsen}/logrus/entry.go (100%) rename vendor/github.com/{Sirupsen => sirupsen}/logrus/entry_test.go (100%) rename vendor/github.com/{Sirupsen => sirupsen}/logrus/examples/basic/basic.go (100%) rename vendor/github.com/{Sirupsen => sirupsen}/logrus/examples/hook/hook.go (100%) rename vendor/github.com/{Sirupsen => sirupsen}/logrus/exported.go (99%) rename vendor/github.com/{Sirupsen => sirupsen}/logrus/formatter.go (100%) rename vendor/github.com/{Sirupsen => sirupsen}/logrus/formatter_bench_test.go (100%) rename vendor/github.com/{Sirupsen => sirupsen}/logrus/hook_test.go (100%) rename vendor/github.com/{Sirupsen => sirupsen}/logrus/hooks.go (100%) rename vendor/github.com/{Sirupsen => sirupsen}/logrus/hooks/syslog/README.md (100%) rename vendor/github.com/{Sirupsen => sirupsen}/logrus/hooks/syslog/syslog.go (100%) rename vendor/github.com/{Sirupsen => sirupsen}/logrus/hooks/syslog/syslog_test.go (100%) rename vendor/github.com/{Sirupsen => sirupsen}/logrus/hooks/test/test.go (100%) rename vendor/github.com/{Sirupsen => sirupsen}/logrus/hooks/test/test_test.go (100%) rename vendor/github.com/{Sirupsen => sirupsen}/logrus/json_formatter.go (100%) rename vendor/github.com/{Sirupsen => sirupsen}/logrus/json_formatter_test.go (100%) rename vendor/github.com/{Sirupsen => sirupsen}/logrus/logger.go (99%) rename vendor/github.com/{Sirupsen => sirupsen}/logrus/logger_bench_test.go (100%) rename vendor/github.com/{Sirupsen => sirupsen}/logrus/logrus.go (100%) rename vendor/github.com/{Sirupsen => sirupsen}/logrus/logrus_test.go (100%) rename vendor/github.com/{Sirupsen => sirupsen}/logrus/terminal_appengine.go (100%) rename vendor/github.com/{Sirupsen => sirupsen}/logrus/terminal_bsd.go (100%) rename vendor/github.com/{Sirupsen => sirupsen}/logrus/terminal_linux.go (100%) rename vendor/github.com/{Sirupsen => sirupsen}/logrus/terminal_notwindows.go (100%) rename vendor/github.com/{Sirupsen => sirupsen}/logrus/terminal_solaris.go (100%) rename vendor/github.com/{Sirupsen => sirupsen}/logrus/terminal_windows.go (100%) rename vendor/github.com/{Sirupsen => sirupsen}/logrus/text_formatter.go (87%) rename vendor/github.com/{Sirupsen => sirupsen}/logrus/text_formatter_test.go (55%) rename vendor/github.com/{Sirupsen => sirupsen}/logrus/writer.go (100%) diff --git a/Gopkg.lock b/Gopkg.lock index 276ee7c59..ccdbde620 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -13,12 +13,6 @@ revision = "a5913b3f7deecba45e98ff33cefbac4fd204ddd7" version = "v0.10.0" -[[projects]] - name = "github.com/Sirupsen/logrus" - packages = ["."] - revision = "202f25545ea4cf9b191ff7f846df5d87c9382c2b" - version = "v1.0.0" - [[projects]] name = "github.com/Azure/azure-sdk-for-go" packages = ["storage"] @@ -199,6 +193,12 @@ packages = ["."] revision = "541ff5ee47f1dddf6a5281af78307d921524bcb5" +[[projects]] + name = "github.com/sirupsen/logrus" + packages = ["."] + revision = "a3f95b5c423586578a4e099b11a46c2479628cac" + version = "1.0.2" + [[projects]] branch = "master" name = "github.com/skratchdot/open-golang" @@ -232,8 +232,8 @@ [[projects]] name = "github.com/yunify/qingstor-sdk-go" packages = [".","config","logger","request","request/builder","request/data","request/errors","request/signer","request/unpacker","service","utils"] - revision = "26f2cc6f249f4c2a08ed89f1d7d566a463c1dfc2" - version = "v2.2.5" + revision = "68ce7c233bde780b2bbe1e1cf018db8e2df86361" + version = "v2.2.6" [[projects]] branch = "master" @@ -292,6 +292,6 @@ [solve-meta] analyzer-name = "dep" analyzer-version = 1 - inputs-digest = "904bc0ea1f770b0473b24560dc0d24c5c647971e959e58538799c5cad1eaa97e" + inputs-digest = "0b3a6116075cedb5990bd6edb0e5cfdaa04c7b28462a9c6cb02b8cbb63a2dab6" solver-name = "gps-cdcl" solver-version = 1 diff --git a/vendor/github.com/Sirupsen/logrus/.gitignore b/vendor/github.com/sirupsen/logrus/.gitignore similarity index 100% rename from vendor/github.com/Sirupsen/logrus/.gitignore rename to vendor/github.com/sirupsen/logrus/.gitignore diff --git a/vendor/github.com/Sirupsen/logrus/.travis.yml b/vendor/github.com/sirupsen/logrus/.travis.yml similarity index 82% rename from vendor/github.com/Sirupsen/logrus/.travis.yml rename to vendor/github.com/sirupsen/logrus/.travis.yml index 924f3c46b..ceace13bb 100644 --- a/vendor/github.com/Sirupsen/logrus/.travis.yml +++ b/vendor/github.com/sirupsen/logrus/.travis.yml @@ -10,4 +10,3 @@ install: - go get github.com/stretchr/testify/assert script: - go test -race -v . - - cd hooks/null && go test -race -v . diff --git a/vendor/github.com/Sirupsen/logrus/CHANGELOG.md b/vendor/github.com/sirupsen/logrus/CHANGELOG.md similarity index 93% rename from vendor/github.com/Sirupsen/logrus/CHANGELOG.md rename to vendor/github.com/sirupsen/logrus/CHANGELOG.md index 63d415e12..c443aed09 100644 --- a/vendor/github.com/Sirupsen/logrus/CHANGELOG.md +++ b/vendor/github.com/sirupsen/logrus/CHANGELOG.md @@ -1,3 +1,12 @@ +# 1.0.2 + +* bug: quote non-string values in text formatter (#583) +* Make (*Logger) SetLevel a public method + +# 1.0.1 + +* bug: fix escaping in text formatter (#575) + # 1.0.0 * Officially changed name to lower-case diff --git a/vendor/github.com/Sirupsen/logrus/LICENSE b/vendor/github.com/sirupsen/logrus/LICENSE similarity index 100% rename from vendor/github.com/Sirupsen/logrus/LICENSE rename to vendor/github.com/sirupsen/logrus/LICENSE diff --git a/vendor/github.com/Sirupsen/logrus/README.md b/vendor/github.com/sirupsen/logrus/README.md similarity index 95% rename from vendor/github.com/Sirupsen/logrus/README.md rename to vendor/github.com/sirupsen/logrus/README.md index cbe8b6962..82aeb4eef 100644 --- a/vendor/github.com/Sirupsen/logrus/README.md +++ b/vendor/github.com/sirupsen/logrus/README.md @@ -1,22 +1,24 @@ # Logrus :walrus: [![Build Status](https://travis-ci.org/sirupsen/logrus.svg?branch=master)](https://travis-ci.org/sirupsen/logrus) [![GoDoc](https://godoc.org/github.com/sirupsen/logrus?status.svg)](https://godoc.org/github.com/sirupsen/logrus) Logrus is a structured logger for Go (golang), completely API compatible with -the standard library logger. [Godoc][godoc]. **Please note the Logrus API is not -yet stable (pre 1.0). Logrus itself is completely stable and has been used in -many large deployments. The core API is unlikely to change much but please -version control your Logrus to make sure you aren't fetching latest `master` on -every build.** +the standard library logger. [Godoc][godoc]. -**Seeing weird case-sensitive problems?** Unfortunately, the author failed to -realize the consequences of renaming to lower-case. Due to the Go package -environment, this caused issues. Regretfully, there's no turning back now. +**Seeing weird case-sensitive problems?** It's in the past been possible to +import Logrus as both upper- and lower-case. Due to the Go package environment, +this caused issues in the community and we needed a standard. Some environments +experienced problems with the upper-case variant, so the lower-case was decided. Everything using `logrus` will need to use the lower-case: `github.com/sirupsen/logrus`. Any package that isn't, should be changed. -I am terribly sorry for this inconvenience. Logrus strives hard for backwards -compatibility, and the author failed to realize the cascading consequences of -such a name-change. To fix Glide, see [these +To fix Glide, see [these comments](https://github.com/sirupsen/logrus/issues/553#issuecomment-306591437). +For an in-depth explanation of the casing issue, see [this +comment](https://github.com/sirupsen/logrus/issues/570#issuecomment-313933276). + +**Are you interested in assisting in maintaining Logrus?** Currently I have a +lot of obligations, and I am unable to provide Logrus with the maintainership it +needs. If you'd like to help, please reach out to me at `simon at author's +username dot com`. Nicely color-coded in development (when a TTY is attached, otherwise just plain text): @@ -266,6 +268,7 @@ Note: Syslog hook also support connecting to local syslog (Ex. "/dev/log" or "/v | [Logrusly](https://github.com/sebest/logrusly) | Send logs to [Loggly](https://www.loggly.com/) | | [Logstash](https://github.com/bshuster-repo/logrus-logstash-hook) | Hook for logging to [Logstash](https://www.elastic.co/products/logstash) | | [Mail](https://github.com/zbindenren/logrus_mail) | Hook for sending exceptions via mail | +| [Mattermost](https://github.com/shuLhan/mattermost-integration/tree/master/hooks/logrus) | Hook for logging to [Mattermost](https://mattermost.com/) | | [Mongodb](https://github.com/weekface/mgorus) | Hook for logging to mongodb | | [NATS-Hook](https://github.com/rybit/nats_logrus_hook) | Hook for logging to [NATS](https://nats.io) | | [Octokit](https://github.com/dorajistyle/logrus-octokit-hook) | Hook for logging to github via octokit | @@ -280,7 +283,7 @@ Note: Syslog hook also support connecting to local syslog (Ex. "/dev/log" or "/v | [Slackrus](https://github.com/johntdyer/slackrus) | Hook for Slack chat. | | [Stackdriver](https://github.com/knq/sdhook) | Hook for logging to [Google Stackdriver](https://cloud.google.com/logging/) | | [Sumorus](https://github.com/doublefree/sumorus) | Hook for logging to [SumoLogic](https://www.sumologic.com/)| -| [Syslog](https://github.com/Sirupsen/logrus/blob/master/hooks/syslog/syslog.go) | Send errors to remote syslog server. Uses standard library `log/syslog` behind the scenes. | +| [Syslog](https://github.com/sirupsen/logrus/blob/master/hooks/syslog/syslog.go) | Send errors to remote syslog server. Uses standard library `log/syslog` behind the scenes. | | [Syslog TLS](https://github.com/shinji62/logrus-syslog-ng) | Send errors to remote syslog server with TLS support. | | [TraceView](https://github.com/evalphobia/logrus_appneta) | Hook for logging to [AppNeta TraceView](https://www.appneta.com/products/traceview/) | | [Typetalk](https://github.com/dragon3/logrus-typetalk-hook) | Hook for logging to [Typetalk](https://www.typetalk.in/) | @@ -449,13 +452,13 @@ Logrus has a built in facility for asserting the presence of log messages. This ```go import( "github.com/sirupsen/logrus" - "github.com/sirupsen/logrus/hooks/null" + "github.com/sirupsen/logrus/hooks/test" "github.com/stretchr/testify/assert" "testing" ) func TestSomething(t*testing.T){ - logger, hook := null.NewNullLogger() + logger, hook := test.NewNullLogger() logger.Error("Helloerror") assert.Equal(t, 1, len(hook.Entries)) diff --git a/vendor/github.com/Sirupsen/logrus/alt_exit.go b/vendor/github.com/sirupsen/logrus/alt_exit.go similarity index 100% rename from vendor/github.com/Sirupsen/logrus/alt_exit.go rename to vendor/github.com/sirupsen/logrus/alt_exit.go diff --git a/vendor/github.com/Sirupsen/logrus/alt_exit_test.go b/vendor/github.com/sirupsen/logrus/alt_exit_test.go similarity index 100% rename from vendor/github.com/Sirupsen/logrus/alt_exit_test.go rename to vendor/github.com/sirupsen/logrus/alt_exit_test.go diff --git a/vendor/github.com/Sirupsen/logrus/doc.go b/vendor/github.com/sirupsen/logrus/doc.go similarity index 100% rename from vendor/github.com/Sirupsen/logrus/doc.go rename to vendor/github.com/sirupsen/logrus/doc.go diff --git a/vendor/github.com/Sirupsen/logrus/entry.go b/vendor/github.com/sirupsen/logrus/entry.go similarity index 100% rename from vendor/github.com/Sirupsen/logrus/entry.go rename to vendor/github.com/sirupsen/logrus/entry.go diff --git a/vendor/github.com/Sirupsen/logrus/entry_test.go b/vendor/github.com/sirupsen/logrus/entry_test.go similarity index 100% rename from vendor/github.com/Sirupsen/logrus/entry_test.go rename to vendor/github.com/sirupsen/logrus/entry_test.go diff --git a/vendor/github.com/Sirupsen/logrus/examples/basic/basic.go b/vendor/github.com/sirupsen/logrus/examples/basic/basic.go similarity index 100% rename from vendor/github.com/Sirupsen/logrus/examples/basic/basic.go rename to vendor/github.com/sirupsen/logrus/examples/basic/basic.go diff --git a/vendor/github.com/Sirupsen/logrus/examples/hook/hook.go b/vendor/github.com/sirupsen/logrus/examples/hook/hook.go similarity index 100% rename from vendor/github.com/Sirupsen/logrus/examples/hook/hook.go rename to vendor/github.com/sirupsen/logrus/examples/hook/hook.go diff --git a/vendor/github.com/Sirupsen/logrus/exported.go b/vendor/github.com/sirupsen/logrus/exported.go similarity index 99% rename from vendor/github.com/Sirupsen/logrus/exported.go rename to vendor/github.com/sirupsen/logrus/exported.go index 1aeaa90ba..013183eda 100644 --- a/vendor/github.com/Sirupsen/logrus/exported.go +++ b/vendor/github.com/sirupsen/logrus/exported.go @@ -31,7 +31,7 @@ func SetFormatter(formatter Formatter) { func SetLevel(level Level) { std.mu.Lock() defer std.mu.Unlock() - std.setLevel(level) + std.SetLevel(level) } // GetLevel returns the standard logger level. diff --git a/vendor/github.com/Sirupsen/logrus/formatter.go b/vendor/github.com/sirupsen/logrus/formatter.go similarity index 100% rename from vendor/github.com/Sirupsen/logrus/formatter.go rename to vendor/github.com/sirupsen/logrus/formatter.go diff --git a/vendor/github.com/Sirupsen/logrus/formatter_bench_test.go b/vendor/github.com/sirupsen/logrus/formatter_bench_test.go similarity index 100% rename from vendor/github.com/Sirupsen/logrus/formatter_bench_test.go rename to vendor/github.com/sirupsen/logrus/formatter_bench_test.go diff --git a/vendor/github.com/Sirupsen/logrus/hook_test.go b/vendor/github.com/sirupsen/logrus/hook_test.go similarity index 100% rename from vendor/github.com/Sirupsen/logrus/hook_test.go rename to vendor/github.com/sirupsen/logrus/hook_test.go diff --git a/vendor/github.com/Sirupsen/logrus/hooks.go b/vendor/github.com/sirupsen/logrus/hooks.go similarity index 100% rename from vendor/github.com/Sirupsen/logrus/hooks.go rename to vendor/github.com/sirupsen/logrus/hooks.go diff --git a/vendor/github.com/Sirupsen/logrus/hooks/syslog/README.md b/vendor/github.com/sirupsen/logrus/hooks/syslog/README.md similarity index 100% rename from vendor/github.com/Sirupsen/logrus/hooks/syslog/README.md rename to vendor/github.com/sirupsen/logrus/hooks/syslog/README.md diff --git a/vendor/github.com/Sirupsen/logrus/hooks/syslog/syslog.go b/vendor/github.com/sirupsen/logrus/hooks/syslog/syslog.go similarity index 100% rename from vendor/github.com/Sirupsen/logrus/hooks/syslog/syslog.go rename to vendor/github.com/sirupsen/logrus/hooks/syslog/syslog.go diff --git a/vendor/github.com/Sirupsen/logrus/hooks/syslog/syslog_test.go b/vendor/github.com/sirupsen/logrus/hooks/syslog/syslog_test.go similarity index 100% rename from vendor/github.com/Sirupsen/logrus/hooks/syslog/syslog_test.go rename to vendor/github.com/sirupsen/logrus/hooks/syslog/syslog_test.go diff --git a/vendor/github.com/Sirupsen/logrus/hooks/test/test.go b/vendor/github.com/sirupsen/logrus/hooks/test/test.go similarity index 100% rename from vendor/github.com/Sirupsen/logrus/hooks/test/test.go rename to vendor/github.com/sirupsen/logrus/hooks/test/test.go diff --git a/vendor/github.com/Sirupsen/logrus/hooks/test/test_test.go b/vendor/github.com/sirupsen/logrus/hooks/test/test_test.go similarity index 100% rename from vendor/github.com/Sirupsen/logrus/hooks/test/test_test.go rename to vendor/github.com/sirupsen/logrus/hooks/test/test_test.go diff --git a/vendor/github.com/Sirupsen/logrus/json_formatter.go b/vendor/github.com/sirupsen/logrus/json_formatter.go similarity index 100% rename from vendor/github.com/Sirupsen/logrus/json_formatter.go rename to vendor/github.com/sirupsen/logrus/json_formatter.go diff --git a/vendor/github.com/Sirupsen/logrus/json_formatter_test.go b/vendor/github.com/sirupsen/logrus/json_formatter_test.go similarity index 100% rename from vendor/github.com/Sirupsen/logrus/json_formatter_test.go rename to vendor/github.com/sirupsen/logrus/json_formatter_test.go diff --git a/vendor/github.com/Sirupsen/logrus/logger.go b/vendor/github.com/sirupsen/logrus/logger.go similarity index 99% rename from vendor/github.com/Sirupsen/logrus/logger.go rename to vendor/github.com/sirupsen/logrus/logger.go index 370fff5d1..b44966f97 100644 --- a/vendor/github.com/Sirupsen/logrus/logger.go +++ b/vendor/github.com/sirupsen/logrus/logger.go @@ -312,6 +312,6 @@ func (logger *Logger) level() Level { return Level(atomic.LoadUint32((*uint32)(&logger.Level))) } -func (logger *Logger) setLevel(level Level) { +func (logger *Logger) SetLevel(level Level) { atomic.StoreUint32((*uint32)(&logger.Level), uint32(level)) } diff --git a/vendor/github.com/Sirupsen/logrus/logger_bench_test.go b/vendor/github.com/sirupsen/logrus/logger_bench_test.go similarity index 100% rename from vendor/github.com/Sirupsen/logrus/logger_bench_test.go rename to vendor/github.com/sirupsen/logrus/logger_bench_test.go diff --git a/vendor/github.com/Sirupsen/logrus/logrus.go b/vendor/github.com/sirupsen/logrus/logrus.go similarity index 100% rename from vendor/github.com/Sirupsen/logrus/logrus.go rename to vendor/github.com/sirupsen/logrus/logrus.go diff --git a/vendor/github.com/Sirupsen/logrus/logrus_test.go b/vendor/github.com/sirupsen/logrus/logrus_test.go similarity index 100% rename from vendor/github.com/Sirupsen/logrus/logrus_test.go rename to vendor/github.com/sirupsen/logrus/logrus_test.go diff --git a/vendor/github.com/Sirupsen/logrus/terminal_appengine.go b/vendor/github.com/sirupsen/logrus/terminal_appengine.go similarity index 100% rename from vendor/github.com/Sirupsen/logrus/terminal_appengine.go rename to vendor/github.com/sirupsen/logrus/terminal_appengine.go diff --git a/vendor/github.com/Sirupsen/logrus/terminal_bsd.go b/vendor/github.com/sirupsen/logrus/terminal_bsd.go similarity index 100% rename from vendor/github.com/Sirupsen/logrus/terminal_bsd.go rename to vendor/github.com/sirupsen/logrus/terminal_bsd.go diff --git a/vendor/github.com/Sirupsen/logrus/terminal_linux.go b/vendor/github.com/sirupsen/logrus/terminal_linux.go similarity index 100% rename from vendor/github.com/Sirupsen/logrus/terminal_linux.go rename to vendor/github.com/sirupsen/logrus/terminal_linux.go diff --git a/vendor/github.com/Sirupsen/logrus/terminal_notwindows.go b/vendor/github.com/sirupsen/logrus/terminal_notwindows.go similarity index 100% rename from vendor/github.com/Sirupsen/logrus/terminal_notwindows.go rename to vendor/github.com/sirupsen/logrus/terminal_notwindows.go diff --git a/vendor/github.com/Sirupsen/logrus/terminal_solaris.go b/vendor/github.com/sirupsen/logrus/terminal_solaris.go similarity index 100% rename from vendor/github.com/Sirupsen/logrus/terminal_solaris.go rename to vendor/github.com/sirupsen/logrus/terminal_solaris.go diff --git a/vendor/github.com/Sirupsen/logrus/terminal_windows.go b/vendor/github.com/sirupsen/logrus/terminal_windows.go similarity index 100% rename from vendor/github.com/Sirupsen/logrus/terminal_windows.go rename to vendor/github.com/sirupsen/logrus/terminal_windows.go diff --git a/vendor/github.com/Sirupsen/logrus/text_formatter.go b/vendor/github.com/sirupsen/logrus/text_formatter.go similarity index 87% rename from vendor/github.com/Sirupsen/logrus/text_formatter.go rename to vendor/github.com/sirupsen/logrus/text_formatter.go index ba8885406..6aa48cfb6 100644 --- a/vendor/github.com/Sirupsen/logrus/text_formatter.go +++ b/vendor/github.com/sirupsen/logrus/text_formatter.go @@ -14,7 +14,7 @@ const ( red = 31 green = 32 yellow = 33 - blue = 34 + blue = 36 gray = 37 ) @@ -153,7 +153,7 @@ func (f *TextFormatter) needsQuoting(text string) bool { if !((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') || (ch >= '0' && ch <= '9') || - ch == '-' || ch == '.') { + ch == '-' || ch == '.' || ch == '_' || ch == '/' || ch == '@' || ch == '^' || ch == '+') { return true } } @@ -169,21 +169,21 @@ func (f *TextFormatter) appendKeyValue(b *bytes.Buffer, key string, value interf } func (f *TextFormatter) appendValue(b *bytes.Buffer, value interface{}) { - switch value := value.(type) { - case string: - if !f.needsQuoting(value) { - b.WriteString(value) - } else { - fmt.Fprintf(b, "%s%v%s", f.QuoteCharacter, value, f.QuoteCharacter) - } - case error: - errmsg := value.Error() - if !f.needsQuoting(errmsg) { - b.WriteString(errmsg) - } else { - fmt.Fprintf(b, "%s%v%s", f.QuoteCharacter, errmsg, f.QuoteCharacter) - } - default: - fmt.Fprint(b, value) + stringVal, ok := value.(string) + if !ok { + stringVal = fmt.Sprint(value) + } + + if !f.needsQuoting(stringVal) { + b.WriteString(stringVal) + } else { + b.WriteString(f.quoteString(stringVal)) } } + +func (f *TextFormatter) quoteString(v string) string { + escapedQuote := fmt.Sprintf("\\%s", f.QuoteCharacter) + escapedValue := strings.Replace(v, f.QuoteCharacter, escapedQuote, -1) + + return fmt.Sprintf("%s%v%s", f.QuoteCharacter, escapedValue, f.QuoteCharacter) +} diff --git a/vendor/github.com/Sirupsen/logrus/text_formatter_test.go b/vendor/github.com/sirupsen/logrus/text_formatter_test.go similarity index 55% rename from vendor/github.com/Sirupsen/logrus/text_formatter_test.go rename to vendor/github.com/sirupsen/logrus/text_formatter_test.go index 9793b5f37..d7b3bcb14 100644 --- a/vendor/github.com/Sirupsen/logrus/text_formatter_test.go +++ b/vendor/github.com/sirupsen/logrus/text_formatter_test.go @@ -6,6 +6,7 @@ import ( "strings" "testing" "time" + "fmt" ) func TestQuoting(t *testing.T) { @@ -28,7 +29,13 @@ func TestQuoting(t *testing.T) { checkQuoting(false, "abcd") checkQuoting(false, "v1.0") checkQuoting(false, "1234567890") - checkQuoting(true, "/foobar") + checkQuoting(false, "/foobar") + checkQuoting(false, "foo_bar") + checkQuoting(false, "foo@bar") + checkQuoting(false, "foobar^") + checkQuoting(false, "+/-_^@f.oobar") + checkQuoting(true, "foobar$") + checkQuoting(true, "&foobar") checkQuoting(true, "x y") checkQuoting(true, "x,y") checkQuoting(false, errors.New("invalid")) @@ -38,7 +45,12 @@ func TestQuoting(t *testing.T) { tf.QuoteCharacter = "`" checkQuoting(false, "") checkQuoting(false, "abcd") - checkQuoting(true, "/foobar") + checkQuoting(false, "/foobar") + checkQuoting(false, "foo_bar") + checkQuoting(false, "foo@bar") + checkQuoting(false, "foobar^") + checkQuoting(true, "foobar$") + checkQuoting(true, "&foobar") checkQuoting(true, errors.New("invalid argument")) // Test for multi-character quotes. @@ -53,6 +65,68 @@ func TestQuoting(t *testing.T) { checkQuoting(true, errors.New("invalid argument")) } +func TestEscaping_DefaultQuoteCharacter(t *testing.T) { + tf := &TextFormatter{DisableColors: true} + + testCases := []struct { + value string + expected string + }{ + {`ba"r`, `ba\"r`}, + {`ba'r`, `ba'r`}, + } + + for _, tc := range testCases { + b, _ := tf.Format(WithField("test", tc.value)) + if !bytes.Contains(b, []byte(tc.expected)) { + t.Errorf("escaping expected for %q (result was %q instead of %q)", tc.value, string(b), tc.expected) + } + } +} + +func TestEscaping_Interface(t *testing.T) { + tf := &TextFormatter{DisableColors: true} + + ts := time.Now() + + testCases := []struct { + value interface{} + expected string + }{ + {ts, fmt.Sprintf("\"%s\"", ts.String())}, + {errors.New("error: something went wrong"), "\"error: something went wrong\""}, + } + + for _, tc := range testCases { + b, _ := tf.Format(WithField("test", tc.value)) + if !bytes.Contains(b, []byte(tc.expected)) { + t.Errorf("escaping expected for %q (result was %q instead of %q)", tc.value, string(b), tc.expected) + } + } +} + +func TestEscaping_CustomQuoteCharacter(t *testing.T) { + tf := &TextFormatter{DisableColors: true} + + testCases := []struct { + value string + expected string + quoteChar string + }{ + {`ba"r`, `ba"r`, `'`}, + {`ba'r`, `ba\'r`, `'`}, + {`ba'r`, `ba'r`, `^`}, + } + + for _, tc := range testCases { + tf.QuoteCharacter = tc.quoteChar + b, _ := tf.Format(WithField("test", tc.value)) + if !bytes.Contains(b, []byte(tc.expected)) { + t.Errorf("escaping expected for %q (result was %q instead of %q)", tc.value, string(b), tc.expected) + } + } +} + func TestTimestampFormat(t *testing.T) { checkTimeStr := func(format string) { customFormatter := &TextFormatter{DisableColors: true, TimestampFormat: format} diff --git a/vendor/github.com/Sirupsen/logrus/writer.go b/vendor/github.com/sirupsen/logrus/writer.go similarity index 100% rename from vendor/github.com/Sirupsen/logrus/writer.go rename to vendor/github.com/sirupsen/logrus/writer.go diff --git a/vendor/github.com/yunify/qingstor-sdk-go/.travis.yml b/vendor/github.com/yunify/qingstor-sdk-go/.travis.yml index 151a8dea6..ed5d7bf91 100644 --- a/vendor/github.com/yunify/qingstor-sdk-go/.travis.yml +++ b/vendor/github.com/yunify/qingstor-sdk-go/.travis.yml @@ -32,12 +32,19 @@ before_install: mv linux-amd64 glide-v0.12.3; fi - pushd glide-v0.12.3 && sudo cp glide /usr/local/bin && popd + - if [[ ! -d "./snips-v0.1.0" ]]; then + wget https://github.com/yunify/snips/releases/download/v0.1.0/snips-v0.1.0-linux_amd64.tar.gz && + mkdir snips-v0.1.0 && + pushd snips-v0.1.0 && + tar -vxzf ../snips-v0.1.0-linux_amd64.tar.gz && + popd; + fi + - pushd snips-v0.1.0 && sudo cp snips /usr/local/bin && popd - popd - /usr/local/bin/make --version - /usr/local/bin/glide --version install: - - go get -u github.com/yunify/snips - go get -u github.com/golang/lint/golint; - glide install diff --git a/vendor/github.com/yunify/qingstor-sdk-go/CHANGELOG.md b/vendor/github.com/yunify/qingstor-sdk-go/CHANGELOG.md index d327e7bbe..81b87fe3c 100644 --- a/vendor/github.com/yunify/qingstor-sdk-go/CHANGELOG.md +++ b/vendor/github.com/yunify/qingstor-sdk-go/CHANGELOG.md @@ -1,6 +1,12 @@ # Change Log All notable changes to QingStor SDK for Go will be documented in this file. +## [v2.2.6] - 2017-07-21 + +### Fixed + +- Fix concurrency issue in object related operations. + ## [v2.2.5] - 2017-05-22 ### Fixed @@ -94,6 +100,7 @@ All notable changes to QingStor SDK for Go will be documented in this file. - QingStor SDK for the Go programming language. +[v2.2.6]: https://github.com/yunify/qingstor-sdk-go/compare/v2.2.5...v2.2.6 [v2.2.5]: https://github.com/yunify/qingstor-sdk-go/compare/v2.2.4...v2.2.5 [v2.2.4]: https://github.com/yunify/qingstor-sdk-go/compare/v2.2.3...v2.2.4 [v2.2.3]: https://github.com/yunify/qingstor-sdk-go/compare/v2.2.2...v2.2.3 diff --git a/vendor/github.com/yunify/qingstor-sdk-go/glide.lock b/vendor/github.com/yunify/qingstor-sdk-go/glide.lock index ad29d5cd3..368c34faa 100644 --- a/vendor/github.com/yunify/qingstor-sdk-go/glide.lock +++ b/vendor/github.com/yunify/qingstor-sdk-go/glide.lock @@ -1,6 +1,11 @@ hash: 2e6b1ed4a2ee0638abc2e819ac3c247eaf80fa0f2053cfc41eecf883054c6032 -updated: 2017-05-22T14:58:58.927797848+08:00 +updated: 2017-07-20T20:14:05.143145325+08:00 imports: +- name: github.com/DATA-DOG/godog + version: 70f777599da0f5de682b8848d356611c1738b695 + subpackages: + - colors + - gherkin - name: github.com/pengsrc/go-shared version: 454950d6a0782c34427d4f29b46c6bf447256f20 subpackages: @@ -8,8 +13,8 @@ imports: - convert - json - yaml -- name: github.com/Sirupsen/logrus - version: d26492970760ca5d33129d2d799e34be5c4782eb +- name: github.com/sirupsen/logrus + version: 00386b3fbd637582f90cb17482dc3087646c0ac2 - name: golang.org/x/sys version: f3918c30c5c2cb527c0b071a27c35120a6c0719a repo: https://github.com/golang/sys.git diff --git a/vendor/github.com/yunify/qingstor-sdk-go/logger/logger.go b/vendor/github.com/yunify/qingstor-sdk-go/logger/logger.go index c04aba2d4..dfd372fcf 100644 --- a/vendor/github.com/yunify/qingstor-sdk-go/logger/logger.go +++ b/vendor/github.com/yunify/qingstor-sdk-go/logger/logger.go @@ -25,7 +25,7 @@ import ( "strings" "time" - "github.com/Sirupsen/logrus" + "github.com/sirupsen/logrus" ) var instance *logrus.Logger diff --git a/vendor/github.com/yunify/qingstor-sdk-go/service/bucket.go b/vendor/github.com/yunify/qingstor-sdk-go/service/bucket.go index addca536f..cd71ac3ef 100644 --- a/vendor/github.com/yunify/qingstor-sdk-go/service/bucket.go +++ b/vendor/github.com/yunify/qingstor-sdk-go/service/bucket.go @@ -19,6 +19,7 @@ package service import ( "fmt" "io" + "net/http" "time" "github.com/yunify/qingstor-sdk-go/config" @@ -29,6 +30,7 @@ import ( var _ fmt.State var _ io.Reader +var _ http.Header var _ time.Time var _ config.Config @@ -62,7 +64,7 @@ func (s *Bucket) Delete() (*DeleteBucketOutput, error) { return nil, err } - requestID := r.HTTPResponse.Header.Get("X-Qs-Request-Id") + requestID := r.HTTPResponse.Header.Get(http.CanonicalHeaderKey("X-QS-Request-ID")) x.RequestID = &requestID return x, err @@ -71,9 +73,11 @@ func (s *Bucket) Delete() (*DeleteBucketOutput, error) { // DeleteRequest creates request and output object of DeleteBucket. func (s *Bucket) DeleteRequest() (*request.Request, *DeleteBucketOutput, error) { + properties := *s.Properties + o := &data.Operation{ Config: s.Config, - Properties: s.Properties, + Properties: &properties, APIName: "DELETE Bucket", RequestMethod: "DELETE", RequestURI: "/", @@ -112,7 +116,7 @@ func (s *Bucket) DeleteCORS() (*DeleteBucketCORSOutput, error) { return nil, err } - requestID := r.HTTPResponse.Header.Get("X-Qs-Request-Id") + requestID := r.HTTPResponse.Header.Get(http.CanonicalHeaderKey("X-QS-Request-ID")) x.RequestID = &requestID return x, err @@ -121,9 +125,11 @@ func (s *Bucket) DeleteCORS() (*DeleteBucketCORSOutput, error) { // DeleteCORSRequest creates request and output object of DeleteBucketCORS. func (s *Bucket) DeleteCORSRequest() (*request.Request, *DeleteBucketCORSOutput, error) { + properties := *s.Properties + o := &data.Operation{ Config: s.Config, - Properties: s.Properties, + Properties: &properties, APIName: "DELETE Bucket CORS", RequestMethod: "DELETE", RequestURI: "/?cors", @@ -162,7 +168,7 @@ func (s *Bucket) DeleteExternalMirror() (*DeleteBucketExternalMirrorOutput, erro return nil, err } - requestID := r.HTTPResponse.Header.Get("X-Qs-Request-Id") + requestID := r.HTTPResponse.Header.Get(http.CanonicalHeaderKey("X-QS-Request-ID")) x.RequestID = &requestID return x, err @@ -171,9 +177,11 @@ func (s *Bucket) DeleteExternalMirror() (*DeleteBucketExternalMirrorOutput, erro // DeleteExternalMirrorRequest creates request and output object of DeleteBucketExternalMirror. func (s *Bucket) DeleteExternalMirrorRequest() (*request.Request, *DeleteBucketExternalMirrorOutput, error) { + properties := *s.Properties + o := &data.Operation{ Config: s.Config, - Properties: s.Properties, + Properties: &properties, APIName: "DELETE Bucket External Mirror", RequestMethod: "DELETE", RequestURI: "/?mirror", @@ -212,7 +220,7 @@ func (s *Bucket) DeletePolicy() (*DeleteBucketPolicyOutput, error) { return nil, err } - requestID := r.HTTPResponse.Header.Get("X-Qs-Request-Id") + requestID := r.HTTPResponse.Header.Get(http.CanonicalHeaderKey("X-QS-Request-ID")) x.RequestID = &requestID return x, err @@ -221,9 +229,11 @@ func (s *Bucket) DeletePolicy() (*DeleteBucketPolicyOutput, error) { // DeletePolicyRequest creates request and output object of DeleteBucketPolicy. func (s *Bucket) DeletePolicyRequest() (*request.Request, *DeleteBucketPolicyOutput, error) { + properties := *s.Properties + o := &data.Operation{ Config: s.Config, - Properties: s.Properties, + Properties: &properties, APIName: "DELETE Bucket Policy", RequestMethod: "DELETE", RequestURI: "/?policy", @@ -262,7 +272,7 @@ func (s *Bucket) DeleteMultipleObjects(input *DeleteMultipleObjectsInput) (*Dele return nil, err } - requestID := r.HTTPResponse.Header.Get("X-Qs-Request-Id") + requestID := r.HTTPResponse.Header.Get(http.CanonicalHeaderKey("X-QS-Request-ID")) x.RequestID = &requestID return x, err @@ -275,9 +285,11 @@ func (s *Bucket) DeleteMultipleObjectsRequest(input *DeleteMultipleObjectsInput) input = &DeleteMultipleObjectsInput{} } + properties := *s.Properties + o := &data.Operation{ Config: s.Config, - Properties: s.Properties, + Properties: &properties, APIName: "Delete Multiple Objects", RequestMethod: "POST", RequestURI: "/?delete", @@ -351,7 +363,7 @@ func (s *Bucket) GetACL() (*GetBucketACLOutput, error) { return nil, err } - requestID := r.HTTPResponse.Header.Get("X-Qs-Request-Id") + requestID := r.HTTPResponse.Header.Get(http.CanonicalHeaderKey("X-QS-Request-ID")) x.RequestID = &requestID return x, err @@ -360,9 +372,11 @@ func (s *Bucket) GetACL() (*GetBucketACLOutput, error) { // GetACLRequest creates request and output object of GetBucketACL. func (s *Bucket) GetACLRequest() (*request.Request, *GetBucketACLOutput, error) { + properties := *s.Properties + o := &data.Operation{ Config: s.Config, - Properties: s.Properties, + Properties: &properties, APIName: "GET Bucket ACL", RequestMethod: "GET", RequestURI: "/?acl", @@ -406,7 +420,7 @@ func (s *Bucket) GetCORS() (*GetBucketCORSOutput, error) { return nil, err } - requestID := r.HTTPResponse.Header.Get("X-Qs-Request-Id") + requestID := r.HTTPResponse.Header.Get(http.CanonicalHeaderKey("X-QS-Request-ID")) x.RequestID = &requestID return x, err @@ -415,9 +429,11 @@ func (s *Bucket) GetCORS() (*GetBucketCORSOutput, error) { // GetCORSRequest creates request and output object of GetBucketCORS. func (s *Bucket) GetCORSRequest() (*request.Request, *GetBucketCORSOutput, error) { + properties := *s.Properties + o := &data.Operation{ Config: s.Config, - Properties: s.Properties, + Properties: &properties, APIName: "GET Bucket CORS", RequestMethod: "GET", RequestURI: "/?cors", @@ -459,7 +475,7 @@ func (s *Bucket) GetExternalMirror() (*GetBucketExternalMirrorOutput, error) { return nil, err } - requestID := r.HTTPResponse.Header.Get("X-Qs-Request-Id") + requestID := r.HTTPResponse.Header.Get(http.CanonicalHeaderKey("X-QS-Request-ID")) x.RequestID = &requestID return x, err @@ -468,9 +484,11 @@ func (s *Bucket) GetExternalMirror() (*GetBucketExternalMirrorOutput, error) { // GetExternalMirrorRequest creates request and output object of GetBucketExternalMirror. func (s *Bucket) GetExternalMirrorRequest() (*request.Request, *GetBucketExternalMirrorOutput, error) { + properties := *s.Properties + o := &data.Operation{ Config: s.Config, - Properties: s.Properties, + Properties: &properties, APIName: "GET Bucket External Mirror", RequestMethod: "GET", RequestURI: "/?mirror", @@ -512,7 +530,7 @@ func (s *Bucket) GetPolicy() (*GetBucketPolicyOutput, error) { return nil, err } - requestID := r.HTTPResponse.Header.Get("X-Qs-Request-Id") + requestID := r.HTTPResponse.Header.Get(http.CanonicalHeaderKey("X-QS-Request-ID")) x.RequestID = &requestID return x, err @@ -521,9 +539,11 @@ func (s *Bucket) GetPolicy() (*GetBucketPolicyOutput, error) { // GetPolicyRequest creates request and output object of GetBucketPolicy. func (s *Bucket) GetPolicyRequest() (*request.Request, *GetBucketPolicyOutput, error) { + properties := *s.Properties + o := &data.Operation{ Config: s.Config, - Properties: s.Properties, + Properties: &properties, APIName: "GET Bucket Policy", RequestMethod: "GET", RequestURI: "/?policy", @@ -565,7 +585,7 @@ func (s *Bucket) GetStatistics() (*GetBucketStatisticsOutput, error) { return nil, err } - requestID := r.HTTPResponse.Header.Get("X-Qs-Request-Id") + requestID := r.HTTPResponse.Header.Get(http.CanonicalHeaderKey("X-QS-Request-ID")) x.RequestID = &requestID return x, err @@ -574,9 +594,11 @@ func (s *Bucket) GetStatistics() (*GetBucketStatisticsOutput, error) { // GetStatisticsRequest creates request and output object of GetBucketStatistics. func (s *Bucket) GetStatisticsRequest() (*request.Request, *GetBucketStatisticsOutput, error) { + properties := *s.Properties + o := &data.Operation{ Config: s.Config, - Properties: s.Properties, + Properties: &properties, APIName: "GET Bucket Statistics", RequestMethod: "GET", RequestURI: "/?stats", @@ -631,7 +653,7 @@ func (s *Bucket) Head() (*HeadBucketOutput, error) { return nil, err } - requestID := r.HTTPResponse.Header.Get("X-Qs-Request-Id") + requestID := r.HTTPResponse.Header.Get(http.CanonicalHeaderKey("X-QS-Request-ID")) x.RequestID = &requestID return x, err @@ -640,9 +662,11 @@ func (s *Bucket) Head() (*HeadBucketOutput, error) { // HeadRequest creates request and output object of HeadBucket. func (s *Bucket) HeadRequest() (*request.Request, *HeadBucketOutput, error) { + properties := *s.Properties + o := &data.Operation{ Config: s.Config, - Properties: s.Properties, + Properties: &properties, APIName: "HEAD Bucket", RequestMethod: "HEAD", RequestURI: "/", @@ -681,7 +705,7 @@ func (s *Bucket) ListMultipartUploads(input *ListMultipartUploadsInput) (*ListMu return nil, err } - requestID := r.HTTPResponse.Header.Get("X-Qs-Request-Id") + requestID := r.HTTPResponse.Header.Get(http.CanonicalHeaderKey("X-QS-Request-ID")) x.RequestID = &requestID return x, err @@ -694,9 +718,11 @@ func (s *Bucket) ListMultipartUploadsRequest(input *ListMultipartUploadsInput) ( input = &ListMultipartUploadsInput{} } + properties := *s.Properties + o := &data.Operation{ Config: s.Config, - Properties: s.Properties, + Properties: &properties, APIName: "List Multipart Uploads", RequestMethod: "GET", RequestURI: "/?uploads", @@ -770,7 +796,7 @@ func (s *Bucket) ListObjects(input *ListObjectsInput) (*ListObjectsOutput, error return nil, err } - requestID := r.HTTPResponse.Header.Get("X-Qs-Request-Id") + requestID := r.HTTPResponse.Header.Get(http.CanonicalHeaderKey("X-QS-Request-ID")) x.RequestID = &requestID return x, err @@ -783,9 +809,11 @@ func (s *Bucket) ListObjectsRequest(input *ListObjectsInput) (*request.Request, input = &ListObjectsInput{} } + properties := *s.Properties + o := &data.Operation{ Config: s.Config, - Properties: s.Properties, + Properties: &properties, APIName: "GET Bucket (List Objects)", RequestMethod: "GET", RequestURI: "/", @@ -861,7 +889,7 @@ func (s *Bucket) Put() (*PutBucketOutput, error) { return nil, err } - requestID := r.HTTPResponse.Header.Get("X-Qs-Request-Id") + requestID := r.HTTPResponse.Header.Get(http.CanonicalHeaderKey("X-QS-Request-ID")) x.RequestID = &requestID return x, err @@ -870,9 +898,11 @@ func (s *Bucket) Put() (*PutBucketOutput, error) { // PutRequest creates request and output object of PutBucket. func (s *Bucket) PutRequest() (*request.Request, *PutBucketOutput, error) { + properties := *s.Properties + o := &data.Operation{ Config: s.Config, - Properties: s.Properties, + Properties: &properties, APIName: "PUT Bucket", RequestMethod: "PUT", RequestURI: "/", @@ -911,7 +941,7 @@ func (s *Bucket) PutACL(input *PutBucketACLInput) (*PutBucketACLOutput, error) { return nil, err } - requestID := r.HTTPResponse.Header.Get("X-Qs-Request-Id") + requestID := r.HTTPResponse.Header.Get(http.CanonicalHeaderKey("X-QS-Request-ID")) x.RequestID = &requestID return x, err @@ -924,9 +954,11 @@ func (s *Bucket) PutACLRequest(input *PutBucketACLInput) (*request.Request, *Put input = &PutBucketACLInput{} } + properties := *s.Properties + o := &data.Operation{ Config: s.Config, - Properties: s.Properties, + Properties: &properties, APIName: "PUT Bucket ACL", RequestMethod: "PUT", RequestURI: "/?acl", @@ -993,7 +1025,7 @@ func (s *Bucket) PutCORS(input *PutBucketCORSInput) (*PutBucketCORSOutput, error return nil, err } - requestID := r.HTTPResponse.Header.Get("X-Qs-Request-Id") + requestID := r.HTTPResponse.Header.Get(http.CanonicalHeaderKey("X-QS-Request-ID")) x.RequestID = &requestID return x, err @@ -1006,9 +1038,11 @@ func (s *Bucket) PutCORSRequest(input *PutBucketCORSInput) (*request.Request, *P input = &PutBucketCORSInput{} } + properties := *s.Properties + o := &data.Operation{ Config: s.Config, - Properties: s.Properties, + Properties: &properties, APIName: "PUT Bucket CORS", RequestMethod: "PUT", RequestURI: "/?cors", @@ -1075,7 +1109,7 @@ func (s *Bucket) PutExternalMirror(input *PutBucketExternalMirrorInput) (*PutBuc return nil, err } - requestID := r.HTTPResponse.Header.Get("X-Qs-Request-Id") + requestID := r.HTTPResponse.Header.Get(http.CanonicalHeaderKey("X-QS-Request-ID")) x.RequestID = &requestID return x, err @@ -1088,9 +1122,11 @@ func (s *Bucket) PutExternalMirrorRequest(input *PutBucketExternalMirrorInput) ( input = &PutBucketExternalMirrorInput{} } + properties := *s.Properties + o := &data.Operation{ Config: s.Config, - Properties: s.Properties, + Properties: &properties, APIName: "PUT Bucket External Mirror", RequestMethod: "PUT", RequestURI: "/?mirror", @@ -1149,7 +1185,7 @@ func (s *Bucket) PutPolicy(input *PutBucketPolicyInput) (*PutBucketPolicyOutput, return nil, err } - requestID := r.HTTPResponse.Header.Get("X-Qs-Request-Id") + requestID := r.HTTPResponse.Header.Get(http.CanonicalHeaderKey("X-QS-Request-ID")) x.RequestID = &requestID return x, err @@ -1162,9 +1198,11 @@ func (s *Bucket) PutPolicyRequest(input *PutBucketPolicyInput) (*request.Request input = &PutBucketPolicyInput{} } + properties := *s.Properties + o := &data.Operation{ Config: s.Config, - Properties: s.Properties, + Properties: &properties, APIName: "PUT Bucket Policy", RequestMethod: "PUT", RequestURI: "/?policy", diff --git a/vendor/github.com/yunify/qingstor-sdk-go/service/object.go b/vendor/github.com/yunify/qingstor-sdk-go/service/object.go index 6cfae7791..2118548fc 100644 --- a/vendor/github.com/yunify/qingstor-sdk-go/service/object.go +++ b/vendor/github.com/yunify/qingstor-sdk-go/service/object.go @@ -19,6 +19,7 @@ package service import ( "fmt" "io" + "net/http" "time" "github.com/yunify/qingstor-sdk-go/config" @@ -29,6 +30,7 @@ import ( var _ fmt.State var _ io.Reader +var _ http.Header var _ time.Time var _ config.Config @@ -46,7 +48,7 @@ func (s *Bucket) AbortMultipartUpload(objectKey string, input *AbortMultipartUpl return nil, err } - requestID := r.HTTPResponse.Header.Get("X-Qs-Request-Id") + requestID := r.HTTPResponse.Header.Get(http.CanonicalHeaderKey("X-QS-Request-ID")) x.RequestID = &requestID return x, err @@ -59,9 +61,13 @@ func (s *Bucket) AbortMultipartUploadRequest(objectKey string, input *AbortMulti input = &AbortMultipartUploadInput{} } + properties := *s.Properties + + properties.ObjectKey = &objectKey + o := &data.Operation{ Config: s.Config, - Properties: s.Properties, + Properties: &properties, APIName: "Abort Multipart Upload", RequestMethod: "DELETE", RequestURI: "//", @@ -70,8 +76,6 @@ func (s *Bucket) AbortMultipartUploadRequest(objectKey string, input *AbortMulti }, } - s.Properties.ObjectKey = &objectKey - x := &AbortMultipartUploadOutput{} r, err := request.New(o, input, x) if err != nil { @@ -122,7 +126,7 @@ func (s *Bucket) CompleteMultipartUpload(objectKey string, input *CompleteMultip return nil, err } - requestID := r.HTTPResponse.Header.Get("X-Qs-Request-Id") + requestID := r.HTTPResponse.Header.Get(http.CanonicalHeaderKey("X-QS-Request-ID")) x.RequestID = &requestID return x, err @@ -135,9 +139,13 @@ func (s *Bucket) CompleteMultipartUploadRequest(objectKey string, input *Complet input = &CompleteMultipartUploadInput{} } + properties := *s.Properties + + properties.ObjectKey = &objectKey + o := &data.Operation{ Config: s.Config, - Properties: s.Properties, + Properties: &properties, APIName: "Complete multipart upload", RequestMethod: "POST", RequestURI: "//", @@ -146,8 +154,6 @@ func (s *Bucket) CompleteMultipartUploadRequest(objectKey string, input *Complet }, } - s.Properties.ObjectKey = &objectKey - x := &CompleteMultipartUploadOutput{} r, err := request.New(o, input, x) if err != nil { @@ -217,7 +223,7 @@ func (s *Bucket) DeleteObject(objectKey string) (*DeleteObjectOutput, error) { return nil, err } - requestID := r.HTTPResponse.Header.Get("X-Qs-Request-Id") + requestID := r.HTTPResponse.Header.Get(http.CanonicalHeaderKey("X-QS-Request-ID")) x.RequestID = &requestID return x, err @@ -226,9 +232,13 @@ func (s *Bucket) DeleteObject(objectKey string) (*DeleteObjectOutput, error) { // DeleteObjectRequest creates request and output object of DeleteObject. func (s *Bucket) DeleteObjectRequest(objectKey string) (*request.Request, *DeleteObjectOutput, error) { + properties := *s.Properties + + properties.ObjectKey = &objectKey + o := &data.Operation{ Config: s.Config, - Properties: s.Properties, + Properties: &properties, APIName: "DELETE Object", RequestMethod: "DELETE", RequestURI: "//", @@ -237,8 +247,6 @@ func (s *Bucket) DeleteObjectRequest(objectKey string) (*request.Request, *Delet }, } - s.Properties.ObjectKey = &objectKey - x := &DeleteObjectOutput{} r, err := request.New(o, nil, x) if err != nil { @@ -269,7 +277,7 @@ func (s *Bucket) GetObject(objectKey string, input *GetObjectInput) (*GetObjectO return nil, err } - requestID := r.HTTPResponse.Header.Get("X-Qs-Request-Id") + requestID := r.HTTPResponse.Header.Get(http.CanonicalHeaderKey("X-QS-Request-ID")) x.RequestID = &requestID return x, err @@ -282,9 +290,13 @@ func (s *Bucket) GetObjectRequest(objectKey string, input *GetObjectInput) (*req input = &GetObjectInput{} } + properties := *s.Properties + + properties.ObjectKey = &objectKey + o := &data.Operation{ Config: s.Config, - Properties: s.Properties, + Properties: &properties, APIName: "GET Object", RequestMethod: "GET", RequestURI: "//", @@ -296,8 +308,6 @@ func (s *Bucket) GetObjectRequest(objectKey string, input *GetObjectInput) (*req }, } - s.Properties.ObjectKey = &objectKey - x := &GetObjectOutput{} r, err := request.New(o, input, x) if err != nil { @@ -379,7 +389,7 @@ func (s *Bucket) HeadObject(objectKey string, input *HeadObjectInput) (*HeadObje return nil, err } - requestID := r.HTTPResponse.Header.Get("X-Qs-Request-Id") + requestID := r.HTTPResponse.Header.Get(http.CanonicalHeaderKey("X-QS-Request-ID")) x.RequestID = &requestID return x, err @@ -392,9 +402,13 @@ func (s *Bucket) HeadObjectRequest(objectKey string, input *HeadObjectInput) (*r input = &HeadObjectInput{} } + properties := *s.Properties + + properties.ObjectKey = &objectKey + o := &data.Operation{ Config: s.Config, - Properties: s.Properties, + Properties: &properties, APIName: "HEAD Object", RequestMethod: "HEAD", RequestURI: "//", @@ -403,8 +417,6 @@ func (s *Bucket) HeadObjectRequest(objectKey string, input *HeadObjectInput) (*r }, } - s.Properties.ObjectKey = &objectKey - x := &HeadObjectOutput{} r, err := request.New(o, input, x) if err != nil { @@ -469,7 +481,7 @@ func (s *Bucket) InitiateMultipartUpload(objectKey string, input *InitiateMultip return nil, err } - requestID := r.HTTPResponse.Header.Get("X-Qs-Request-Id") + requestID := r.HTTPResponse.Header.Get(http.CanonicalHeaderKey("X-QS-Request-ID")) x.RequestID = &requestID return x, err @@ -482,9 +494,13 @@ func (s *Bucket) InitiateMultipartUploadRequest(objectKey string, input *Initiat input = &InitiateMultipartUploadInput{} } + properties := *s.Properties + + properties.ObjectKey = &objectKey + o := &data.Operation{ Config: s.Config, - Properties: s.Properties, + Properties: &properties, APIName: "Initiate Multipart Upload", RequestMethod: "POST", RequestURI: "//?uploads", @@ -493,8 +509,6 @@ func (s *Bucket) InitiateMultipartUploadRequest(objectKey string, input *Initiat }, } - s.Properties.ObjectKey = &objectKey - x := &InitiateMultipartUploadOutput{} r, err := request.New(o, input, x) if err != nil { @@ -553,7 +567,7 @@ func (s *Bucket) ListMultipart(objectKey string, input *ListMultipartInput) (*Li return nil, err } - requestID := r.HTTPResponse.Header.Get("X-Qs-Request-Id") + requestID := r.HTTPResponse.Header.Get(http.CanonicalHeaderKey("X-QS-Request-ID")) x.RequestID = &requestID return x, err @@ -566,9 +580,13 @@ func (s *Bucket) ListMultipartRequest(objectKey string, input *ListMultipartInpu input = &ListMultipartInput{} } + properties := *s.Properties + + properties.ObjectKey = &objectKey + o := &data.Operation{ Config: s.Config, - Properties: s.Properties, + Properties: &properties, APIName: "List Multipart", RequestMethod: "GET", RequestURI: "//", @@ -577,8 +595,6 @@ func (s *Bucket) ListMultipartRequest(objectKey string, input *ListMultipartInpu }, } - s.Properties.ObjectKey = &objectKey - x := &ListMultipartOutput{} r, err := request.New(o, input, x) if err != nil { @@ -638,7 +654,7 @@ func (s *Bucket) OptionsObject(objectKey string, input *OptionsObjectInput) (*Op return nil, err } - requestID := r.HTTPResponse.Header.Get("X-Qs-Request-Id") + requestID := r.HTTPResponse.Header.Get(http.CanonicalHeaderKey("X-QS-Request-ID")) x.RequestID = &requestID return x, err @@ -651,9 +667,13 @@ func (s *Bucket) OptionsObjectRequest(objectKey string, input *OptionsObjectInpu input = &OptionsObjectInput{} } + properties := *s.Properties + + properties.ObjectKey = &objectKey + o := &data.Operation{ Config: s.Config, - Properties: s.Properties, + Properties: &properties, APIName: "OPTIONS Object", RequestMethod: "OPTIONS", RequestURI: "//", @@ -662,8 +682,6 @@ func (s *Bucket) OptionsObjectRequest(objectKey string, input *OptionsObjectInpu }, } - s.Properties.ObjectKey = &objectKey - x := &OptionsObjectOutput{} r, err := request.New(o, input, x) if err != nil { @@ -736,7 +754,7 @@ func (s *Bucket) PutObject(objectKey string, input *PutObjectInput) (*PutObjectO return nil, err } - requestID := r.HTTPResponse.Header.Get("X-Qs-Request-Id") + requestID := r.HTTPResponse.Header.Get(http.CanonicalHeaderKey("X-QS-Request-ID")) x.RequestID = &requestID return x, err @@ -749,9 +767,13 @@ func (s *Bucket) PutObjectRequest(objectKey string, input *PutObjectInput) (*req input = &PutObjectInput{} } + properties := *s.Properties + + properties.ObjectKey = &objectKey + o := &data.Operation{ Config: s.Config, - Properties: s.Properties, + Properties: &properties, APIName: "PUT Object", RequestMethod: "PUT", RequestURI: "//", @@ -760,8 +782,6 @@ func (s *Bucket) PutObjectRequest(objectKey string, input *PutObjectInput) (*req }, } - s.Properties.ObjectKey = &objectKey - x := &PutObjectOutput{} r, err := request.New(o, input, x) if err != nil { @@ -841,7 +861,7 @@ func (s *Bucket) UploadMultipart(objectKey string, input *UploadMultipartInput) return nil, err } - requestID := r.HTTPResponse.Header.Get("X-Qs-Request-Id") + requestID := r.HTTPResponse.Header.Get(http.CanonicalHeaderKey("X-QS-Request-ID")) x.RequestID = &requestID return x, err @@ -854,9 +874,13 @@ func (s *Bucket) UploadMultipartRequest(objectKey string, input *UploadMultipart input = &UploadMultipartInput{} } + properties := *s.Properties + + properties.ObjectKey = &objectKey + o := &data.Operation{ Config: s.Config, - Properties: s.Properties, + Properties: &properties, APIName: "Upload Multipart", RequestMethod: "PUT", RequestURI: "//", @@ -865,8 +889,6 @@ func (s *Bucket) UploadMultipartRequest(objectKey string, input *UploadMultipart }, } - s.Properties.ObjectKey = &objectKey - x := &UploadMultipartOutput{} r, err := request.New(o, input, x) if err != nil { diff --git a/vendor/github.com/yunify/qingstor-sdk-go/service/qingstor.go b/vendor/github.com/yunify/qingstor-sdk-go/service/qingstor.go index 7197b7816..c2ebe25c8 100644 --- a/vendor/github.com/yunify/qingstor-sdk-go/service/qingstor.go +++ b/vendor/github.com/yunify/qingstor-sdk-go/service/qingstor.go @@ -18,11 +18,15 @@ package service import ( + "net/http" + "github.com/yunify/qingstor-sdk-go/config" "github.com/yunify/qingstor-sdk-go/request" "github.com/yunify/qingstor-sdk-go/request/data" ) +var _ http.Header + // Service QingStor provides low-cost and reliable online storage service with unlimited storage space, high read and write performance, high reliability and data safety, fine-grained access control, and easy to use API. type Service struct { Config *config.Config @@ -47,7 +51,7 @@ func (s *Service) ListBuckets(input *ListBucketsInput) (*ListBucketsOutput, erro return nil, err } - requestID := r.HTTPResponse.Header.Get("X-Qs-Request-Id") + requestID := r.HTTPResponse.Header.Get(http.CanonicalHeaderKey("X-QS-Request-ID")) x.RequestID = &requestID return x, err diff --git a/vendor/github.com/yunify/qingstor-sdk-go/template/service.tmpl b/vendor/github.com/yunify/qingstor-sdk-go/template/service.tmpl index 30da61566..6e2fee2c9 100644 --- a/vendor/github.com/yunify/qingstor-sdk-go/template/service.tmpl +++ b/vendor/github.com/yunify/qingstor-sdk-go/template/service.tmpl @@ -20,11 +20,15 @@ package service import ( + "net/http" + "github.com/yunify/qingstor-sdk-go/config" "github.com/yunify/qingstor-sdk-go/request" "github.com/yunify/qingstor-sdk-go/request/data" ) +var _ http.Header + {{if $service.Description}}// Service {{$service.Description}}{{end}} type Service struct { Config *config.Config diff --git a/vendor/github.com/yunify/qingstor-sdk-go/template/shared.tmpl b/vendor/github.com/yunify/qingstor-sdk-go/template/shared.tmpl index 96c19dfaa..0acfff3fb 100644 --- a/vendor/github.com/yunify/qingstor-sdk-go/template/shared.tmpl +++ b/vendor/github.com/yunify/qingstor-sdk-go/template/shared.tmpl @@ -153,7 +153,7 @@ return nil, err } - requestID := r.HTTPResponse.Header.Get("X-Qs-Request-Id") + requestID := r.HTTPResponse.Header.Get(http.CanonicalHeaderKey("X-QS-Request-ID")) x.RequestID = &requestID return x, err @@ -186,10 +186,17 @@ {{$uri := replace $uri "}" ">" -1}} {{$uri := dashConnected $uri}} + {{- if ne $belongs "Service"}} + properties := *s.Properties + {{- end}} + {{if eq $service.Name "Object"}} + properties.ObjectKey = &objectKey + {{end}} + o := &data.Operation{ Config: s.Config, {{- if ne $belongs "Service"}} - Properties: s.Properties, + Properties: &properties, {{- end}} APIName: "{{$operation.Name}}", RequestMethod: "{{$operation.Request.Method}}", @@ -210,10 +217,6 @@ {{end -}} } - {{if eq $service.Name "Object"}} - s.Properties.ObjectKey = &objectKey - {{end}} - x := &{{$opID}}Output{} r, err := request.New(o, {{if $hasInput}}input{{else}}nil{{end}}, x) if err != nil { diff --git a/vendor/github.com/yunify/qingstor-sdk-go/template/sub_service.tmpl b/vendor/github.com/yunify/qingstor-sdk-go/template/sub_service.tmpl index 9184919bf..f999cff52 100644 --- a/vendor/github.com/yunify/qingstor-sdk-go/template/sub_service.tmpl +++ b/vendor/github.com/yunify/qingstor-sdk-go/template/sub_service.tmpl @@ -22,6 +22,7 @@ package service import ( "fmt" "io" + "net/http" "time" "github.com/yunify/qingstor-sdk-go/config" @@ -32,6 +33,7 @@ import ( var _ fmt.State var _ io.Reader +var _ http.Header var _ time.Time var _ config.Config diff --git a/vendor/github.com/yunify/qingstor-sdk-go/test/object.go b/vendor/github.com/yunify/qingstor-sdk-go/test/object.go index f7c84338e..7c308a4b9 100644 --- a/vendor/github.com/yunify/qingstor-sdk-go/test/object.go +++ b/vendor/github.com/yunify/qingstor-sdk-go/test/object.go @@ -25,6 +25,7 @@ import ( "net/http" "os" "os/exec" + "sync" "github.com/DATA-DOG/godog" @@ -66,7 +67,9 @@ func ObjectFeatureContext(s *godog.Suite) { } // -------------------------------------------------------------------------- -var putObjectOutput *qs.PutObjectOutput +const concurrency = 16 + +var putObjectOutputs [concurrency]*qs.PutObjectOutput func putObjectWithKey(objectKey string) error { _, err = exec.Command("dd", "if=/dev/zero", "of=/tmp/sdk_bin", "bs=1024", "count=1").Output() @@ -75,189 +78,557 @@ func putObjectWithKey(objectKey string) error { } defer os.Remove("/tmp/sdk_bin") - file, err := os.Open("/tmp/sdk_bin") - if err != nil { - return err + errChan := make(chan error, concurrency) + + wg := sync.WaitGroup{} + wg.Add(concurrency) + for i := 0; i < concurrency; i++ { + go func(index int, errChan chan<- error) { + wg.Done() + + file, err := os.Open("/tmp/sdk_bin") + if err != nil { + errChan <- err + return + } + defer file.Close() + + hash := md5.New() + _, err = io.Copy(hash, file) + if err != nil { + errChan <- err + return + } + hashInBytes := hash.Sum(nil)[:16] + md5String := hex.EncodeToString(hashInBytes) + + //file.Seek(0, io.SeekStart) + file.Seek(0, 0) + if len(objectKey) > 1000 { + objectKey = objectKey[:1000] + } + putObjectOutput, err := bucket.PutObject( + fmt.Sprintf("%s-%d", objectKey, index), + &qs.PutObjectInput{ + ContentType: qs.String("text/plain"), + ContentMD5: qs.String(md5String), + Body: file, + }, + ) + if err != nil { + errChan <- err + return + } + putObjectOutputs[index] = putObjectOutput + errChan <- nil + return + }(i, errChan) } - defer file.Close() + wg.Wait() - hash := md5.New() - _, err = io.Copy(hash, file) - hashInBytes := hash.Sum(nil)[:16] - md5String := hex.EncodeToString(hashInBytes) - - //file.Seek(0, io.SeekStart) - file.Seek(0, 0) - putObjectOutput, err = bucket.PutObject(objectKey, &qs.PutObjectInput{ - ContentType: qs.String("text/plain"), - ContentMD5: qs.String(md5String), - Body: file, - }) - return err + for i := 0; i < concurrency; i++ { + err = <-errChan + if err != nil { + return err + } + } + return nil } func putObjectStatusCodeIs(statusCode int) error { - return checkEqual(qs.IntValue(putObjectOutput.StatusCode), statusCode) + for _, output := range putObjectOutputs { + err = checkEqual(qs.IntValue(output.StatusCode), statusCode) + if err != nil { + return err + } + } + return nil } // -------------------------------------------------------------------------- -var copyObjectOutput *qs.PutObjectOutput +var copyObjectOutputs [concurrency]*qs.PutObjectOutput func copyObjectWithKey(objectKey string) error { - copyObjectKey := fmt.Sprintf(`%s_copy`, objectKey) - copyObjectOutput, err = bucket.PutObject(copyObjectKey, &qs.PutObjectInput{ - XQSCopySource: qs.String(fmt.Sprintf(`/%s/%s`, tc.BucketName, objectKey)), - }) - return err + errChan := make(chan error, concurrency) + + wg := sync.WaitGroup{} + wg.Add(concurrency) + for i := 0; i < concurrency; i++ { + go func(index int, errChan chan<- error) { + wg.Done() + + if len(objectKey) > 1000 { + objectKey = objectKey[:1000] + } + copyObjectOutput, err := bucket.PutObject( + fmt.Sprintf("%s-%d-copy", objectKey, index), + &qs.PutObjectInput{ + XQSCopySource: qs.String( + fmt.Sprintf("/%s/%s-%d", tc.BucketName, objectKey, index), + ), + }) + if err != nil { + errChan <- err + return + } + copyObjectOutputs[index] = copyObjectOutput + errChan <- nil + return + }(i, errChan) + } + wg.Wait() + + for i := 0; i < concurrency; i++ { + err = <-errChan + if err != nil { + return err + } + } + return nil } func copyObjectStatusCodeIs(statusCode int) error { - return checkEqual(qs.IntValue(copyObjectOutput.StatusCode), statusCode) + for _, output := range copyObjectOutputs { + err = checkEqual(qs.IntValue(output.StatusCode), statusCode) + if err != nil { + return err + } + } + return nil } // -------------------------------------------------------------------------- -var moveObjectOutput *qs.PutObjectOutput +var moveObjectOutputs [concurrency]*qs.PutObjectOutput func moveObjectWithKey(objectKey string) error { - copyObjectKey := fmt.Sprintf(`%s_copy`, objectKey) - moveObjectKey := fmt.Sprintf(`%s_move`, objectKey) - moveObjectOutput, err = bucket.PutObject(moveObjectKey, &qs.PutObjectInput{ - XQSMoveSource: qs.String(fmt.Sprintf(`/%s/%s`, tc.BucketName, copyObjectKey)), - }) - return err + errChan := make(chan error, concurrency) + + wg := sync.WaitGroup{} + wg.Add(concurrency) + for i := 0; i < concurrency; i++ { + go func(index int, errChan chan<- error) { + wg.Done() + + if len(objectKey) > 1000 { + objectKey = objectKey[:1000] + } + moveObjectOutput, err := bucket.PutObject( + fmt.Sprintf("%s-%d-move", objectKey, index), + &qs.PutObjectInput{ + XQSMoveSource: qs.String( + fmt.Sprintf(`/%s/%s-%d-copy`, tc.BucketName, objectKey, index), + ), + }) + if err != nil { + errChan <- err + return + } + moveObjectOutputs[index] = moveObjectOutput + errChan <- nil + return + }(i, errChan) + } + wg.Wait() + + for i := 0; i < concurrency; i++ { + err = <-errChan + if err != nil { + return err + } + } + return nil } func moveObjectStatusCodeIs(statusCode int) error { - return checkEqual(qs.IntValue(moveObjectOutput.StatusCode), statusCode) + for _, output := range moveObjectOutputs { + err = checkEqual(qs.IntValue(output.StatusCode), statusCode) + if err != nil { + return err + } + } + return nil } // -------------------------------------------------------------------------- -var getObjectOutput *qs.GetObjectOutput +var getObjectOutputs [concurrency]*qs.GetObjectOutput func getObjectWithKey(objectKey string) error { - getObjectOutput, err = bucket.GetObject(objectKey, nil) - return err + errChan := make(chan error, concurrency) + + wg := sync.WaitGroup{} + wg.Add(concurrency) + for i := 0; i < concurrency; i++ { + go func(index int, errChan chan<- error) { + wg.Done() + + if len(objectKey) > 1000 { + objectKey = objectKey[:1000] + } + getObjectOutput, err := bucket.GetObject( + fmt.Sprintf("%s-%d", objectKey, index), nil, + ) + if err != nil { + errChan <- err + return + } + getObjectOutputs[index] = getObjectOutput + errChan <- nil + return + }(i, errChan) + } + wg.Wait() + + for i := 0; i < concurrency; i++ { + err = <-errChan + if err != nil { + return err + } + } + return nil } func getObjectStatusCodeIs(statusCode int) error { - return checkEqual(qs.IntValue(getObjectOutput.StatusCode), statusCode) + for _, output := range getObjectOutputs { + err = checkEqual(qs.IntValue(output.StatusCode), statusCode) + if err != nil { + return err + } + } + return nil } func getObjectContentLengthIs(length int) error { buffer := &bytes.Buffer{} - buffer.ReadFrom(getObjectOutput.Body) - getObjectOutput.Body.Close() - return checkEqual(len(buffer.Bytes())*1024, length) + for _, output := range getObjectOutputs { + buffer.Truncate(0) + buffer.ReadFrom(output.Body) + err = checkEqual(len(buffer.Bytes())*1024, length) + if err != nil { + return err + } + } + return nil } // -------------------------------------------------------------------------- -var getObjectWithContentTypeRequest *request.Request +var getObjectWithContentTypeRequests [concurrency]*request.Request func getObjectWithContentType(objectKey, contentType string) error { - getObjectWithContentTypeRequest, _, err = bucket.GetObjectRequest( - objectKey, - &qs.GetObjectInput{ - ResponseContentType: qs.String(contentType), - }, - ) - if err != nil { - return err + errChan := make(chan error, concurrency) + + wg := sync.WaitGroup{} + wg.Add(concurrency) + for i := 0; i < concurrency; i++ { + go func(index int, errChan chan<- error) { + wg.Done() + + if len(objectKey) > 1000 { + objectKey = objectKey[:1000] + } + getObjectWithContentTypeRequest, _, err := bucket.GetObjectRequest( + fmt.Sprintf("%s-%d", objectKey, index), + &qs.GetObjectInput{ + ResponseContentType: qs.String(contentType), + }, + ) + if err != nil { + errChan <- err + return + } + err = getObjectWithContentTypeRequest.Send() + if err != nil { + errChan <- err + return + } + err = getObjectWithContentTypeRequest.Send() + if err != nil { + errChan <- err + return + } + getObjectWithContentTypeRequests[index] = getObjectWithContentTypeRequest + errChan <- nil + return + }(i, errChan) } - err = getObjectWithContentTypeRequest.Send() - if err != nil { - return err + wg.Wait() + + for i := 0; i < concurrency; i++ { + err = <-errChan + if err != nil { + return err + } } return nil } func getObjectContentTypeIs(contentType string) error { - return checkEqual(getObjectWithContentTypeRequest.HTTPResponse.Header.Get("Content-Type"), contentType) + for _, r := range getObjectWithContentTypeRequests { + err = checkEqual(r.HTTPResponse.Header.Get("Content-Type"), contentType) + if err != nil { + return err + } + } + return nil } // -------------------------------------------------------------------------- -var getObjectWithQuerySignatureURL string +var getObjectWithQuerySignatureURLs [concurrency]string func getObjectWithQuerySignature(objectKey string) error { - r, _, err := bucket.GetObjectRequest(objectKey, nil) - if err != nil { - return err - } + errChan := make(chan error, concurrency) - err = r.SignQuery(10) - if err != nil { - return err - } + wg := sync.WaitGroup{} + wg.Add(concurrency) + for i := 0; i < concurrency; i++ { + go func(index int, errChan chan<- error) { + wg.Done() - getObjectWithQuerySignatureURL = r.HTTPRequest.URL.String() + if len(objectKey) > 1000 { + objectKey = objectKey[:1000] + } + r, _, err := bucket.GetObjectRequest( + fmt.Sprintf("%s-%d", objectKey, index), nil, + ) + if err != nil { + errChan <- err + return + } + err = r.SignQuery(10) + if err != nil { + errChan <- err + return + } + + getObjectWithQuerySignatureURLs[index] = r.HTTPRequest.URL.String() + errChan <- nil + return + }(i, errChan) + } + wg.Wait() + + for i := 0; i < concurrency; i++ { + err = <-errChan + if err != nil { + return err + } + } return nil } func getObjectWithQuerySignatureContentLengthIs(length int) error { - out, err := http.Get(getObjectWithQuerySignatureURL) - if err != nil { - return err - } buffer := &bytes.Buffer{} - buffer.ReadFrom(out.Body) - out.Body.Close() - - return checkEqual(len(buffer.Bytes())*1024, length) + for _, url := range getObjectWithQuerySignatureURLs { + out, err := http.Get(url) + if err != nil { + return err + } + buffer.Truncate(0) + buffer.ReadFrom(out.Body) + out.Body.Close() + err = checkEqual(len(buffer.Bytes())*1024, length) + if err != nil { + return err + } + } + return nil } // -------------------------------------------------------------------------- -var headObjectOutput *qs.HeadObjectOutput +var headObjectOutputs [concurrency]*qs.HeadObjectOutput func headObjectWithKey(objectKey string) error { - headObjectOutput, err = bucket.HeadObject(objectKey, nil) - return err + errChan := make(chan error, concurrency) + + wg := sync.WaitGroup{} + wg.Add(concurrency) + for i := 0; i < concurrency; i++ { + go func(index int, errChan chan<- error) { + wg.Done() + + if len(objectKey) > 1000 { + objectKey = objectKey[:1000] + } + headObjectOutput, err := bucket.HeadObject( + fmt.Sprintf("%s-%d", objectKey, index), nil, + ) + if err != nil { + errChan <- err + return + } + headObjectOutputs[index] = headObjectOutput + errChan <- nil + return + }(i, errChan) + } + wg.Wait() + + for i := 0; i < concurrency; i++ { + err = <-errChan + if err != nil { + return err + } + } + return nil } func headObjectStatusCodeIs(statusCode int) error { - return checkEqual(qs.IntValue(headObjectOutput.StatusCode), statusCode) + for _, output := range headObjectOutputs { + err = checkEqual(qs.IntValue(output.StatusCode), statusCode) + if err != nil { + return err + } + } + return nil } // -------------------------------------------------------------------------- -var optionsObjectOutput *qs.OptionsObjectOutput +var optionsObjectOutputs [concurrency]*qs.OptionsObjectOutput func optionsObjectWithMethodAndOrigin(objectKey, method, origin string) error { - optionsObjectOutput, err = bucket.OptionsObject( - objectKey, - &qs.OptionsObjectInput{ - AccessControlRequestMethod: qs.String(method), - Origin: qs.String(origin), - }, - ) - return err + errChan := make(chan error, concurrency) + + wg := sync.WaitGroup{} + wg.Add(concurrency) + for i := 0; i < concurrency; i++ { + go func(index int, errChan chan<- error) { + wg.Done() + + if len(objectKey) > 1000 { + objectKey = objectKey[:1000] + } + optionsObjectOutput, err := bucket.OptionsObject( + fmt.Sprintf("%s-%d", objectKey, index), + &qs.OptionsObjectInput{ + AccessControlRequestMethod: qs.String(method), + Origin: qs.String(origin), + }, + ) + if err != nil { + errChan <- err + return + } + optionsObjectOutputs[index] = optionsObjectOutput + errChan <- nil + return + }(i, errChan) + } + wg.Wait() + + for i := 0; i < concurrency; i++ { + err = <-errChan + if err != nil { + return err + } + } + return nil } func optionsObjectStatusCodeIs(statusCode int) error { - return checkEqual(qs.IntValue(optionsObjectOutput.StatusCode), statusCode) + for _, output := range optionsObjectOutputs { + err = checkEqual(qs.IntValue(output.StatusCode), statusCode) + if err != nil { + return err + } + } + return nil } // -------------------------------------------------------------------------- -var deleteObjectOutput *qs.DeleteObjectOutput -var deleteTheMoveObjectOutput *qs.DeleteObjectOutput +var deleteObjectOutputs [concurrency]*qs.DeleteObjectOutput +var deleteTheMoveObjectOutputs [concurrency]*qs.DeleteObjectOutput func deleteObjectWithKey(objectKey string) error { - deleteObjectOutput, err = bucket.DeleteObject(objectKey) - return err + errChan := make(chan error, concurrency) + + wg := sync.WaitGroup{} + wg.Add(concurrency) + for i := 0; i < concurrency; i++ { + go func(index int, errChan chan<- error) { + wg.Done() + + if len(objectKey) > 1000 { + objectKey = objectKey[:1000] + } + deleteObjectOutput, err := bucket.DeleteObject( + fmt.Sprintf("%s-%d", objectKey, index), + ) + if err != nil { + errChan <- err + return + } + deleteObjectOutputs[index] = deleteObjectOutput + errChan <- nil + return + }(i, errChan) + } + wg.Wait() + + for i := 0; i < concurrency; i++ { + err = <-errChan + if err != nil { + return err + } + } + return nil } func deleteObjectStatusCodeIs(statusCode int) error { - return checkEqual(qs.IntValue(deleteObjectOutput.StatusCode), statusCode) + for _, output := range deleteObjectOutputs { + err = checkEqual(qs.IntValue(output.StatusCode), statusCode) + if err != nil { + return err + } + } + return nil } func deleteTheMoveObjectWithKey(objectKey string) error { - deleteTheMoveObjectOutput, err = bucket.DeleteObject(fmt.Sprintf(`%s_move`, objectKey)) - return err + errChan := make(chan error, concurrency) + + wg := sync.WaitGroup{} + wg.Add(concurrency) + for i := 0; i < concurrency; i++ { + go func(index int, errChan chan<- error) { + wg.Done() + + if len(objectKey) > 1000 { + objectKey = objectKey[:1000] + } + deleteTheMoveObjectOutput, err := bucket.DeleteObject( + fmt.Sprintf("%s-%d-move", objectKey, index), + ) + if err != nil { + errChan <- err + return + } + deleteTheMoveObjectOutputs[index] = deleteTheMoveObjectOutput + errChan <- nil + return + }(i, errChan) + } + wg.Wait() + + for i := 0; i < concurrency; i++ { + err = <-errChan + if err != nil { + return err + } + } + return nil } func deleteTheMoveObjectStatusCodeIs(statusCode int) error { - return checkEqual(qs.IntValue(deleteTheMoveObjectOutput.StatusCode), statusCode) + for _, output := range deleteTheMoveObjectOutputs { + err = checkEqual(qs.IntValue(output.StatusCode), statusCode) + if err != nil { + return err + } + } + return nil } diff --git a/vendor/github.com/yunify/qingstor-sdk-go/version.go b/vendor/github.com/yunify/qingstor-sdk-go/version.go index 9fb5ca468..74abe9ebf 100644 --- a/vendor/github.com/yunify/qingstor-sdk-go/version.go +++ b/vendor/github.com/yunify/qingstor-sdk-go/version.go @@ -20,4 +20,4 @@ package sdk // Version number. -const Version = "2.2.5" +const Version = "2.2.6"