66 lines
2.5 KiB
Go
66 lines
2.5 KiB
Go
package rpc
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"strings"
|
|
"testing"
|
|
"time"
|
|
|
|
agentpb "git.ipao.vip/rogee/go-sip/gen/agent"
|
|
ossclient "git.ipao.vip/rogee/go-sip/internal/oss"
|
|
"git.ipao.vip/rogee/go-sip/internal/store"
|
|
"google.golang.org/grpc/codes"
|
|
"google.golang.org/grpc/status"
|
|
)
|
|
|
|
func TestUploadFactKeepsOriginallyGrantedBucketAfterConfigurationChange(t *testing.T) {
|
|
st, err := store.Open(":memory:")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
defer st.Close()
|
|
if err := st.BindDispatcherID("11111111-1111-4111-8111-111111111111"); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
makeServer := func(bucket string) *DispatcherUploadServer {
|
|
signer, err := ossclient.NewClient(ossclient.Config{Endpoint: "https://oss.invalid", Region: "cn-beijing", Bucket: bucket, AccessKeyID: "local-test", AccessKeySecret: "local-test", MaxAssetBytes: 1024})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
server, err := NewDispatcherUploadServer(st, signer, time.Now, false)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
return server
|
|
}
|
|
binding := &agentpb.ExecutionBinding{TenantId: "tenant-a", TenantKey: "tenant-a", TaskId: "task-a", ExecutionId: "execution-a", CallId: "call-a"}
|
|
asset := &agentpb.AssetDescriptor{Kind: agentpb.AssetKind_ASSET_KIND_RECORDING, AssetId: "recording-a", CallId: "call-a", Format: "wav", Channels: 1, SampleRateHz: 8000, DurationMs: 10, SizeBytes: 4, ChecksumSha256: strings.Repeat("a", 64)}
|
|
meta := &agentpb.RequestMeta{AgentId: "agent-a", CellId: "cell-a", OperationId: "op-a", IdempotencyKey: "key-a", TraceId: "trace-a"}
|
|
first := makeServer("original-bucket")
|
|
response, err := first.RequestUpload(context.Background(), &agentpb.RequestUploadRequest{Meta: meta, Binding: binding, Asset: asset, UploadId: "upload-a"})
|
|
if err != nil || response.GetGrant() == nil {
|
|
t.Fatalf("grant: %v", err)
|
|
}
|
|
restarted := makeServer("new-bucket")
|
|
_, err = restarted.CompleteUpload(context.Background(), &agentpb.CompleteUploadRequest{Meta: meta, Binding: binding, Asset: asset, UploadId: "upload-a", UploadedSizeBytes: 4, UploadedChecksumSha256: asset.ChecksumSha256})
|
|
if status.Code(err) != codes.Unavailable {
|
|
t.Fatalf("pending notification: %v", err)
|
|
}
|
|
var body []byte
|
|
if err := st.DB().QueryRow(`SELECT body FROM outbox`).Scan(&body); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
var event struct {
|
|
Payload struct {
|
|
Bucket string `json:"bucket"`
|
|
} `json:"payload"`
|
|
}
|
|
if err := json.Unmarshal(body, &event); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if event.Payload.Bucket != "original-bucket" {
|
|
t.Fatalf("reported wrong object location: %s", event.Payload.Bucket)
|
|
}
|
|
}
|