package main import ( "encoding/json" "testing" "github.com/tinode/chat/server/store" ) type testMediaConfigProvider struct{ handler string } func (p testMediaConfigProvider) Get(string, ...string) (map[string]string, error) { return map[string]string{"media_handler": p.handler}, nil } func TestResolveObjectStorageMediaHandler(t *testing.T) { for _, provider := range []string{"oss", "minio"} { t.Run(provider, func(t *testing.T) { handler, raw, err := resolveMediaHandlerConfig(&mediaConfig{UseHandler: provider}) if err != nil { t.Fatal(err) } if handler != provider { t.Fatalf("handler = %q", handler) } var config struct { Provider string `json:"provider"` UseSysConfig bool `json:"use_sys_config"` } if err := json.Unmarshal([]byte(raw), &config); err != nil { t.Fatal(err) } if config.Provider != provider || !config.UseSysConfig { t.Fatalf("resolved config = %+v", config) } }) } } func TestResolveMediaHandlerFromSysConfig(t *testing.T) { previous := store.ThirdPartyConfig store.ThirdPartyConfig = testMediaConfigProvider{handler: "minio"} defer func() { store.ThirdPartyConfig = previous }() handler, raw, err := resolveMediaHandlerConfig(&mediaConfig{UseHandler: "sys_config"}) if err != nil { t.Fatal(err) } var config struct { Provider string `json:"provider"` UseSysConfig bool `json:"use_sys_config"` } if err := json.Unmarshal([]byte(raw), &config); err != nil { t.Fatal(err) } if handler != "minio" || config.Provider != "minio" || !config.UseSysConfig { t.Fatalf("handler=%q config=%+v", handler, config) } }