oss请求处理

This commit is contained in:
andy committed 2026-08-19 10:52:55 +08:00
1 parent 18cb51670c
commit a9a4cdf125
18 files changed
+450 -29

No files matched your search

+25
View File
@@ -9,6 +9,7 @@ import (
"log"
"strings"
"testing"
"time"
)
type ossClientStub struct {
@@ -19,6 +20,9 @@ type ossClientStub struct {
body []byte
contentType string
getErr, errorToReturn error
signedRequest OSSObjectRequest
signedTTL time.Duration
signedURL string
}
func (s *ossClientStub) Put(_ context.Context, r OSSPutRequest) error {
@@ -41,6 +45,10 @@ func (s *ossClientStub) Delete(_ context.Context, r OSSObjectRequest) error {
s.deletes = append(s.deletes, r)
return s.errorToReturn
}
func (s *ossClientStub) SignGetURL(request OSSObjectRequest, ttl time.Duration) (string, error) {
s.signedRequest, s.signedTTL = request, ttl
return s.signedURL, s.errorToReturn
}
func TestOSSPutUsesConfiguredAddressContentTypeAndPublicACL(t *testing.T) {
client := &ossClientStub{}
@@ -85,6 +93,23 @@ func TestOSSReadDeleteAndMissingMapping(t *testing.T) {
t.Fatalf("delete missing=%v", err)
}
}
func TestOSSSignsExternalReadsAgainstPublicBucketBaseURL(t *testing.T) {
client := &ossClientStub{signedURL: "https://bucket-a.oss-cn-test.aliyuncs.com/uploads/a.png?Signature=signed"}
store, err := NewOSS(OSSConfig{
Endpoint: "https://oss-cn-test-internal.aliyuncs.com", Bucket: "bucket-a", PublicBaseURL: "https://bucket-a.oss-cn-test.aliyuncs.com",
}, client)
if err != nil {
t.Fatal(err)
}
got, err := store.SignReadURL("uploads/a.png", time.Hour)
if err != nil || got != client.signedURL {
t.Fatalf("signed URL = %q, err=%v", got, err)
}
if client.signedRequest.Endpoint != "https://bucket-a.oss-cn-test.aliyuncs.com" || client.signedRequest.Bucket != "bucket-a" || client.signedRequest.Key != "uploads/a.png" || client.signedTTL != time.Hour {
t.Fatalf("signed request = %#v, ttl=%s", client.signedRequest, client.signedTTL)
}
}
func TestOSSRejectsUnsafeKeysAndIncompleteConfiguration(t *testing.T) {
if _, err := NewOSS(OSSConfig{Endpoint: "e", Bucket: "b"}, &ossClientStub{}); err == nil {
t.Fatal("expected config error")