39 lines
1.8 KiB
Cheetah
39 lines
1.8 KiB
Cheetah
package servicecontext
|
|
|
|
import (
|
|
"bytes"
|
|
"context"
|
|
"strings"
|
|
"testing"
|
|
|
|
"git.yuntuo.hk/k2safe/go-omni/logx"
|
|
"{{.Module}}/internal/settings"
|
|
)
|
|
func TestStorageInitializationAndOwnership(t *testing.T){
|
|
cfg:=settings.Default().Storage
|
|
cfg.FilesToken=strings.Repeat("t",32)
|
|
cfg.SigningKey=strings.Repeat("s",32)
|
|
cfg.Root=t.TempDir()
|
|
cfg.AccessKey,cfg.SecretKey,cfg.Bucket="fixtureAccess","fixtureSecret","testbucket"
|
|
{{if eq .Storage "s3"}}cfg.Endpoint="127.0.0.1:9000"{{end}}
|
|
{{if eq .Storage "r2"}}cfg.AccountID=strings.Repeat("a",32){{end}}
|
|
var output bytes.Buffer
|
|
logger,err:=logx.New(logx.Config{Writer:&output});if err!=nil{t.Fatal(err)};defer logger.Close()
|
|
c:=&Context{Logger:logger}
|
|
canceled,cancel:=context.WithCancel(context.Background());cancel()
|
|
if err=c.InitStorage(canceled,cfg);err==nil || c.Files!=nil{t.Fatal("canceled startup initialized storage")}
|
|
invalid:=cfg;invalid.FilesToken=""
|
|
if err=c.InitStorage(context.Background(),invalid);err==nil || c.Files!=nil{t.Fatal("invalid settings initialized storage")}
|
|
if err=c.InitStorage(context.Background(),cfg);err!=nil{t.Fatal(err)}
|
|
if c.Files==nil || c.Uploads==nil || c.Downloads==nil || c.UploadLinks==nil{t.Fatal("dependencies not assembled")}
|
|
if err=c.InitStorage(context.Background(),cfg);err==nil{t.Fatal("duplicate initialization accepted")}
|
|
cleanup:=c.storageClose;count:=0
|
|
c.storageClose=func()error{count++;if cleanup!=nil{return cleanup()};return nil}
|
|
if err=c.Close();err!=nil{t.Fatal(err)};if err=c.Close();err!=nil{t.Fatal(err)}
|
|
logger.Info("still usable")
|
|
if count!=1 || !strings.Contains(output.String(),"still usable"){t.Fatal("resource ownership violated")}
|
|
closed:=&Context{Logger:logger}
|
|
if err=closed.Close();err!=nil{t.Fatal(err)}
|
|
if err=closed.InitStorage(context.Background(),cfg);err==nil || closed.Files!=nil{t.Fatal("closed context reopened resources")}
|
|
}
|