Files
xk-hy-transit-go/internal/fileauth/auth_test.go
2026-05-28 17:03:08 +08:00

89 lines
2.4 KiB
Go

package fileauth
import (
"crypto/hmac"
"crypto/sha1"
"encoding/base64"
"os"
"testing"
)
func TestMain(m *testing.M) {
SetB64Mode(B64ModePadded)
os.Exit(m.Run())
}
func TestMarshalPutPolicyUpload_productionShape(t *testing.T) {
got, err := MarshalPutPolicyUpload("other-doc", 1735689600)
if err != nil {
t.Fatal(err)
}
want := `{"scope":"other-doc","deadline":1735689600}`
if string(got) != want {
t.Fatalf("upload policy mismatch\ngot: %s\nwant: %s", got, want)
}
}
func TestBuildUploadTokenParts_javaAlgorithm(t *testing.T) {
const (
accessKey = "accessKey"
secret = "secret"
bucket = "other-doc"
deadline = int64(1735689600)
policyJSON = `{"scope":"other-doc","deadline":1735689600}`
)
mac := hmac.New(sha1.New, []byte(secret))
_, _ = mac.Write([]byte(policyJSON))
wantSign := base64.URLEncoding.EncodeToString(mac.Sum(nil))
wantPolicyB64 := base64.URLEncoding.EncodeToString([]byte(policyJSON))
wantToken := accessKey + ":" + wantSign + ":" + wantPolicyB64
parts, err := BuildUploadTokenPartsForUpload(accessKey, secret, bucket, deadline)
if err != nil {
t.Fatal(err)
}
if parts.UploadToken != wantToken {
t.Fatalf("token mismatch\ngot: %s\nwant: %s", parts.UploadToken, wantToken)
}
if parts.SignInput != policyJSON {
t.Fatalf("signInput=%q want policy JSON", parts.SignInput)
}
if parts.EncodedSign != wantSign {
t.Fatalf("encodedSign=%q want %q", parts.EncodedSign, wantSign)
}
if parts.EncodedPutPolicy != wantPolicyB64 {
t.Fatalf("policyB64=%q want %q", parts.EncodedPutPolicy, wantPolicyB64)
}
if parts.Algorithm != algorithmJavaUpload {
t.Fatalf("algorithm=%q", parts.Algorithm)
}
}
func TestCreateUploadTokenAtFile_ignoresFilenameInScope(t *testing.T) {
parts, err := BuildUploadTokenPartsAtFile("ak", "sec", "other-doc", "different.pdf", 1735689600)
if err != nil {
t.Fatal(err)
}
if parts.PolicyJSON != `{"scope":"other-doc","deadline":1735689600}` {
t.Fatalf("filename must not affect scope: %q", parts.PolicyJSON)
}
}
func TestUploadToken_paddedVsRawB64(t *testing.T) {
SetB64Mode(B64ModePadded)
padded, err := BuildUploadTokenPartsForUpload("ak", "sec", "b", 1735689600)
if err != nil {
t.Fatal(err)
}
SetB64Mode(B64ModeRaw)
raw, err := BuildUploadTokenPartsForUpload("ak", "sec", "b", 1735689600)
if err != nil {
t.Fatal(err)
}
SetB64Mode(B64ModePadded)
if padded.UploadToken == raw.UploadToken {
t.Fatal("padded vs raw token should differ")
}
}