Skip to content

Commit 13bd912

Browse files
authored
Merge pull request #158 from agin719/cos-v4-dev
Cos v4 dev
2 parents 179621e + e9c0af3 commit 13bd912

File tree

6 files changed

+303
-50
lines changed

6 files changed

+303
-50
lines changed

auth.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ var ciParameters = map[string]bool{
6565
"imageview2/": true,
6666
}
6767

68+
// 非线程安全,只能在进程初始化(而不是Client初始化)时做设置
6869
func SetNeedSignHeaders(key string, val bool) {
6970
NeedSignHeaders[key] = val
7071
}

auth_test.go

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,11 @@ package cos
22

33
import (
44
"context"
5+
"fmt"
56
"net/http"
7+
"net/http/httptest"
8+
"strconv"
9+
"strings"
610
"testing"
711
"time"
812
)
@@ -52,3 +56,70 @@ func TestAuthorizationTransport(t *testing.T) {
5256
req, _ := http.NewRequest("GET", client.BaseURL.BucketURL.String(), nil)
5357
client.doAPI(context.Background(), req, nil, true)
5458
}
59+
60+
func TestCVMCredentialsTransport(t *testing.T) {
61+
setup()
62+
defer teardown()
63+
uri := client.BaseURL.BucketURL.String()
64+
ak := "test_ak"
65+
sk := "test_sk"
66+
token := "test_token"
67+
68+
mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
69+
if r.Header.Get("x-cos-security-token") != token {
70+
t.Errorf("CVMCredentialsTransport x-cos-security-token error, want:%v, return:%v\n", token, r.Header.Get("x-cos-security-token"))
71+
}
72+
auth := r.Header.Get("Authorization")
73+
if auth == "" {
74+
t.Error("CVMCredentialsTransport didn't add Authorization header")
75+
}
76+
field := strings.Split(auth, "&")
77+
if len(field) != 7 {
78+
t.Errorf("CVMCredentialsTransport Authorization header format error: %v\n", auth)
79+
}
80+
st_et := strings.Split(strings.Split(field[2], "=")[1], ";")
81+
st, _ := strconv.ParseInt(st_et[0], 10, 64)
82+
et, _ := strconv.ParseInt(st_et[1], 10, 64)
83+
authTime := &AuthTime{
84+
SignStartTime: time.Unix(st, 0),
85+
SignEndTime: time.Unix(et, 0),
86+
KeyStartTime: time.Unix(st, 0),
87+
KeyEndTime: time.Unix(et, 0),
88+
}
89+
host := strings.TrimLeft(uri, "http://")
90+
req, _ := http.NewRequest("GET", uri, nil)
91+
req.Header.Add("Host", host)
92+
expect := newAuthorization(ak, sk, req, authTime)
93+
if expect != auth {
94+
t.Errorf("CVMCredentialsTransport Authorization error, want:%v, return:%v\n", expect, auth)
95+
}
96+
})
97+
98+
// CVM http server
99+
cvm_mux := http.NewServeMux()
100+
cvm_server := httptest.NewServer(cvm_mux)
101+
defer cvm_server.Close()
102+
// 将默认 CVM Host 修改成测试IP:PORT
103+
defaultCVMMetaHost = strings.TrimLeft(cvm_server.URL, "http://")
104+
105+
cvm_mux.HandleFunc("/"+defaultCVMCredURI, func(w http.ResponseWriter, r *http.Request) {
106+
fmt.Fprint(w, "cvm_read_cos_only")
107+
})
108+
cvm_mux.HandleFunc("/"+defaultCVMCredURI+"/cvm_read_cos_only", func(w http.ResponseWriter, r *http.Request) {
109+
fmt.Fprint(w, fmt.Sprintf(`{
110+
"TmpSecretId": "%s",
111+
"TmpSecretKey": "%s",
112+
"ExpiredTime": %v,
113+
"Expiration": "now",
114+
"Token": "%s",
115+
"Code": "Success"
116+
}`, ak, sk, time.Now().Unix()+3600, token))
117+
})
118+
119+
client.client.Transport = &CVMCredentialsTransport{}
120+
req, _ := http.NewRequest("GET", client.BaseURL.BucketURL.String(), nil)
121+
client.doAPI(context.Background(), req, nil, true)
122+
123+
req, _ = http.NewRequest("GET", client.BaseURL.BucketURL.String(), nil)
124+
client.doAPI(context.Background(), req, nil, true)
125+
}

0 commit comments

Comments
 (0)