Smail/server/controllers/config_public_settings_test.go

52 lines
1.4 KiB
Go

package controllers
import (
"encoding/json"
"testing"
"git.pcux.cn/xuans/Smail/config"
)
func TestPublicPluginConfigIncludesNonSensitiveSettings(t *testing.T) {
runtime := config.RuntimeConfig{
Plugins: config.PluginsSectionConfig{
Meta: config.SectionMeta{Schema: config.CurrentSectionSchema, Generation: 3},
Plugins: map[string]config.PluginInstance{
"spam_block": {
Enabled: true,
Executable: "spam_block.exe",
Settings: json.RawMessage(`{"url":"https://model.example.com/v1/predict","timeout":3000,"threshold":20}`),
},
},
},
}
public, err := publicConfigSection(runtime, config.SectionPlugins)
if err != nil {
t.Fatal(err)
}
data, err := json.Marshal(public)
if err != nil {
t.Fatal(err)
}
var decoded struct {
Plugins map[string]struct {
Settings map[string]any `json:"settings"`
} `json:"plugins"`
}
if err := json.Unmarshal(data, &decoded); err != nil {
t.Fatal(err)
}
settings, ok := decoded.Plugins["spam_block"].Settings["url"]
if !ok || settings != "https://model.example.com/v1/predict" {
t.Fatalf("public plugin settings were not returned: %s", data)
}
if _, ok := decoded.Plugins["spam_block"].Settings["password"]; ok {
t.Fatalf("public plugin settings contain a password field: %s", data)
}
if _, ok := decoded.Plugins["spam_block"].Settings["secret"]; ok {
t.Fatalf("public plugin settings contain a secret field: %s", data)
}
}