86 lines
2.1 KiB
Go
86 lines
2.1 KiB
Go
package fileauth
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestBuildUploadTokenParts_matchesCreateUploadTokenAt(t *testing.T) {
|
|
const (
|
|
accessKey = "accessKey"
|
|
secret = "secret"
|
|
bucket = "other-doc"
|
|
deadline = int64(1735689600)
|
|
)
|
|
want, err := CreateUploadTokenAt(accessKey, secret, bucket, deadline)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
parts, err := BuildUploadTokenParts(accessKey, secret, bucket, deadline)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if parts.UploadToken != want {
|
|
t.Fatalf("token mismatch\ngot: %s\nwant: %s", parts.UploadToken, want)
|
|
}
|
|
if parts.AccessKey != accessKey {
|
|
t.Fatalf("accessKey=%q", parts.AccessKey)
|
|
}
|
|
if parts.PolicyJSON != `{"scope":"other-doc","deadline":1735689600}` {
|
|
t.Fatalf("policy=%q", parts.PolicyJSON)
|
|
}
|
|
if strings.Contains(parts.PolicyJSON, "returnBody") {
|
|
t.Fatalf("upload profile must not include returnBody: %q", parts.PolicyJSON)
|
|
}
|
|
if parts.Algorithm != "ver233-upload" {
|
|
t.Fatalf("algorithm=%q", parts.Algorithm)
|
|
}
|
|
if parts.SignInput != parts.EncodedPutPolicy {
|
|
t.Fatal("ver233 signInput must be encodedPutPolicy")
|
|
}
|
|
}
|
|
|
|
func TestValidateUploadTokenFormat_golden(t *testing.T) {
|
|
parts, err := BuildUploadTokenParts("accessKey", "secret", "other-doc", 1735689600)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
ok, checks := ValidateUploadTokenFormat(parts.UploadToken, "accessKey")
|
|
if !ok {
|
|
t.Fatalf("validate failed: %+v", checks)
|
|
}
|
|
}
|
|
|
|
func TestSplitUploadToken_docExample(t *testing.T) {
|
|
ak, sign, pol, ok := SplitUploadToken(DocExampleRegulatory)
|
|
if !ok {
|
|
t.Fatal("split failed")
|
|
}
|
|
if ak != "MY_ACCESS_KEY" {
|
|
t.Fatalf("ak=%q", ak)
|
|
}
|
|
if sign != "wQ4ofysef1R7IKnrziqtomqyDvI=" {
|
|
t.Fatalf("sign=%q", sign)
|
|
}
|
|
if !strings.HasPrefix(pol, "eyJ") {
|
|
t.Fatalf("policy=%q", pol)
|
|
}
|
|
decoded, err := DecodePutPolicyB64(pol)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if !strings.Contains(decoded, "returnBody") {
|
|
t.Fatalf("decoded missing returnBody: %s", decoded)
|
|
}
|
|
}
|
|
|
|
func TestRegulatoryDocExample(t *testing.T) {
|
|
ex := RegulatoryDocExample()
|
|
if ex.AccessKeyPart != "MY_ACCESS_KEY" {
|
|
t.Fatalf("ak=%q", ex.AccessKeyPart)
|
|
}
|
|
if ex.PolicyJSONDecoded == "" {
|
|
t.Fatal("empty decoded policy")
|
|
}
|
|
}
|