mirror of
https://github.com/rclone/rclone.git
synced 2026-10-21 11:05:03 -04:00
vendor: update qingstor
dep ensure needed to do this, probably after various vendor merges
This commit is contained in:
1 parent
ec2ea37ad2
commit
c1bfdd893f
50 files changed
+777
-229
No files matched your search
Generated
+9
-9
@@ -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
|
||||
Generated
File renamed without changes.
Generated
Vendored
-1
@@ -10,4 +10,3 @@ install:
|
||||
- go get github.com/stretchr/testify/assert
|
||||
script:
|
||||
- go test -race -v .
|
||||
- cd hooks/null && go test -race -v .
|
||||
Generated
Vendored
+9
@@ -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
|
||||
Generated
Vendored
File renamed without changes.
Generated
Vendored
+17
-14
@@ -1,22 +1,24 @@
|
||||
# Logrus <img src="http://i.imgur.com/hTeVwmJ.png" width="40" height="40" alt=":walrus:" class="emoji" title=":walrus:"/> [](https://travis-ci.org/sirupsen/logrus) [](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))
|
||||
Generated
Vendored
File renamed without changes.
Generated
Vendored
File renamed without changes.
Generated
Vendored
File renamed without changes.
Generated
Vendored
File renamed without changes.
Generated
Vendored
File renamed without changes.
Generated
Vendored
File renamed without changes.
Generated
Vendored
File renamed without changes.
Generated
Vendored
+1
-1
@@ -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.
|
||||
Generated
Vendored
File renamed without changes.
Generated
Vendored
File renamed without changes.
Generated
Vendored
File renamed without changes.
Generated
Vendored
File renamed without changes.
Generated
Vendored
File renamed without changes.
Generated
Vendored
File renamed without changes.
Generated
Vendored
File renamed without changes.
Generated
Vendored
File renamed without changes.
Generated
Vendored
File renamed without changes.
Generated
Vendored
File renamed without changes.
Generated
Vendored
File renamed without changes.
Generated
Vendored
+1
-1
@@ -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))
|
||||
}
|
||||
Generated
Vendored
File renamed without changes.
Generated
Vendored
File renamed without changes.
Generated
Vendored
File renamed without changes.
Generated
Vendored
File renamed without changes.
Generated
Vendored
File renamed without changes.
Generated
Vendored
File renamed without changes.
Generated
Vendored
File renamed without changes.
Generated
Vendored
File renamed without changes.
Generated
Vendored
File renamed without changes.
Generated
Vendored
+18
-18
@@ -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)
|
||||
}
|
||||
Generated
Vendored
+76
-2
@@ -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}
|
||||
Generated
Vendored
File renamed without changes.
+8
-1
@@ -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
|
||||
|
||||
|
||||
+7
@@ -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
|
||||
|
||||
+8
-3
@@ -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
|
||||
|
||||
+1
-1
@@ -25,7 +25,7 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/Sirupsen/logrus"
|
||||
"github.com/sirupsen/logrus"
|
||||
)
|
||||
|
||||
var instance *logrus.Logger
|
||||
|
||||
+74
-36
@@ -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: "/<bucket-name>",
|
||||
@@ -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: "/<bucket-name>?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: "/<bucket-name>?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: "/<bucket-name>?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: "/<bucket-name>?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: "/<bucket-name>?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: "/<bucket-name>?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: "/<bucket-name>?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: "/<bucket-name>?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: "/<bucket-name>?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: "/<bucket-name>",
|
||||
@@ -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: "/<bucket-name>?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: "/<bucket-name>",
|
||||
@@ -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: "/<bucket-name>",
|
||||
@@ -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: "/<bucket-name>?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: "/<bucket-name>?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: "/<bucket-name>?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: "/<bucket-name>?policy",
|
||||
|
||||
+62
-40
@@ -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: "/<bucket-name>/<object-key>",
|
||||
@@ -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: "/<bucket-name>/<object-key>",
|
||||
@@ -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: "/<bucket-name>/<object-key>",
|
||||
@@ -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: "/<bucket-name>/<object-key>",
|
||||
@@ -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: "/<bucket-name>/<object-key>",
|
||||
@@ -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: "/<bucket-name>/<object-key>?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: "/<bucket-name>/<object-key>",
|
||||
@@ -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: "/<bucket-name>/<object-key>",
|
||||
@@ -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: "/<bucket-name>/<object-key>",
|
||||
@@ -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: "/<bucket-name>/<object-key>",
|
||||
@@ -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 {
|
||||
|
||||
+5
-1
@@ -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
|
||||
|
||||
+4
@@ -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
|
||||
|
||||
+9
-6
@@ -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 {
|
||||
|
||||
+2
@@ -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
|
||||
|
||||
|
||||
+465
-94
@@ -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
|
||||
}
|
||||
+1
-1
@@ -20,4 +20,4 @@
|
||||
package sdk
|
||||
|
||||
// Version number.
|
||||
const Version = "2.2.5"
|
||||
const Version = "2.2.6"
|
||||
Reference in new issue
Block a user