36 lines
1.0 KiB
Go
36 lines
1.0 KiB
Go
package storage_test
|
|
|
|
import (
|
|
"context"
|
|
"git.yuntuo.hk/k2safe/go-omni/storage"
|
|
"git.yuntuo.hk/k2safe/go-omni/storage/local"
|
|
"net/http/httptest"
|
|
"strings"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestLocalSignedDownload(t *testing.T) {
|
|
s, _ := local.New(t.TempDir(), 64)
|
|
s.Put(context.Background(), "file", strings.NewReader("hello"), 5, "text/plain")
|
|
signer, _ := storage.NewSigner(s, "https://example.test/download", []byte(strings.Repeat("x", 32)))
|
|
u, err := signer.PresignGet(context.Background(), "file", time.Minute)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
request := httptest.NewRequest("GET", u.String(), nil)
|
|
response := httptest.NewRecorder()
|
|
signer.ServeHTTP(response, request)
|
|
if response.Code != 200 || response.Body.String() != "hello" || response.Header().Get("Content-Disposition") != "attachment" {
|
|
t.Fatal(response)
|
|
}
|
|
q := u.Query()
|
|
q.Set("key", "another")
|
|
u.RawQuery = q.Encode()
|
|
response = httptest.NewRecorder()
|
|
signer.ServeHTTP(response, httptest.NewRequest("GET", u.String(), nil))
|
|
if response.Code != 403 {
|
|
t.Fatal(response.Code)
|
|
}
|
|
}
|