Initial go port of epics
This commit is contained in:
@@ -29,10 +29,11 @@ type StubConfig struct {
|
||||
}
|
||||
|
||||
type EPICSConfig struct {
|
||||
Enabled bool `toml:"enabled"`
|
||||
CAAddrList string `toml:"ca_addr_list"`
|
||||
ArchiveURL string `toml:"archive_url"`
|
||||
ChannelFinderURL string `toml:"channel_finder_url"`
|
||||
Enabled bool `toml:"enabled"`
|
||||
CAAddrList string `toml:"ca_addr_list"`
|
||||
ArchiveURL string `toml:"archive_url"`
|
||||
ChannelFinderURL string `toml:"channel_finder_url"`
|
||||
PVNames []string `toml:"pv_names"`
|
||||
}
|
||||
|
||||
type SyntheticConfig struct {
|
||||
|
||||
@@ -0,0 +1,124 @@
|
||||
package config_test
|
||||
|
||||
import (
|
||||
"os"
|
||||
"path/filepath"
|
||||
"testing"
|
||||
|
||||
"github.com/uopi/uopi/internal/config"
|
||||
)
|
||||
|
||||
func TestDefault(t *testing.T) {
|
||||
cfg := config.Default()
|
||||
if cfg.Server.Listen == "" {
|
||||
t.Error("Default Listen must not be empty")
|
||||
}
|
||||
if cfg.Server.StorageDir == "" {
|
||||
t.Error("Default StorageDir must not be empty")
|
||||
}
|
||||
if !cfg.Datasource.Stub.Enabled {
|
||||
t.Error("Stub should be enabled by default")
|
||||
}
|
||||
if !cfg.Datasource.EPICS.Enabled {
|
||||
t.Error("EPICS should be enabled by default")
|
||||
}
|
||||
if !cfg.Datasource.Synthetic.Enabled {
|
||||
t.Error("Synthetic should be enabled by default")
|
||||
}
|
||||
}
|
||||
|
||||
func TestLoadEmptyPath(t *testing.T) {
|
||||
// Empty path should return defaults without error.
|
||||
cfg, err := config.Load("")
|
||||
if err != nil {
|
||||
t.Fatalf("Load with empty path: %v", err)
|
||||
}
|
||||
if cfg.Server.Listen != config.Default().Server.Listen {
|
||||
t.Errorf("Listen = %q, want default %q", cfg.Server.Listen, config.Default().Server.Listen)
|
||||
}
|
||||
}
|
||||
|
||||
func TestLoadTOML(t *testing.T) {
|
||||
toml := `
|
||||
[server]
|
||||
listen = ":9090"
|
||||
storage_dir = "/tmp/uopi-test"
|
||||
|
||||
[datasource.stub]
|
||||
enabled = false
|
||||
|
||||
[datasource.epics]
|
||||
enabled = false
|
||||
ca_addr_list = "192.168.1.1"
|
||||
`
|
||||
f := filepath.Join(t.TempDir(), "uopi.toml")
|
||||
if err := os.WriteFile(f, []byte(toml), 0o644); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
cfg, err := config.Load(f)
|
||||
if err != nil {
|
||||
t.Fatalf("Load: %v", err)
|
||||
}
|
||||
if cfg.Server.Listen != ":9090" {
|
||||
t.Errorf("Listen = %q, want :9090", cfg.Server.Listen)
|
||||
}
|
||||
if cfg.Server.StorageDir != "/tmp/uopi-test" {
|
||||
t.Errorf("StorageDir = %q", cfg.Server.StorageDir)
|
||||
}
|
||||
if cfg.Datasource.Stub.Enabled {
|
||||
t.Error("Stub.Enabled should be false")
|
||||
}
|
||||
if cfg.Datasource.EPICS.Enabled {
|
||||
t.Error("EPICS.Enabled should be false")
|
||||
}
|
||||
if cfg.Datasource.EPICS.CAAddrList != "192.168.1.1" {
|
||||
t.Errorf("CAAddrList = %q", cfg.Datasource.EPICS.CAAddrList)
|
||||
}
|
||||
}
|
||||
|
||||
func TestLoadBadPath(t *testing.T) {
|
||||
_, err := config.Load("/no/such/file.toml")
|
||||
if err == nil {
|
||||
t.Error("expected error for missing file")
|
||||
}
|
||||
}
|
||||
|
||||
func TestEnvOverrides(t *testing.T) {
|
||||
t.Setenv("UOPI_SERVER_LISTEN", ":7777")
|
||||
t.Setenv("UOPI_SERVER_STORAGE_DIR", "/env/storage")
|
||||
t.Setenv("UOPI_EPICS_CA_ADDR_LIST", "10.0.0.1 10.0.0.2")
|
||||
t.Setenv("UOPI_EPICS_ARCHIVE_URL", "http://archive/")
|
||||
t.Setenv("UOPI_EPICS_CHANNEL_FINDER_URL", "http://cf/")
|
||||
|
||||
cfg, err := config.Load("")
|
||||
if err != nil {
|
||||
t.Fatalf("Load: %v", err)
|
||||
}
|
||||
if cfg.Server.Listen != ":7777" {
|
||||
t.Errorf("Listen = %q, want :7777", cfg.Server.Listen)
|
||||
}
|
||||
if cfg.Server.StorageDir != "/env/storage" {
|
||||
t.Errorf("StorageDir = %q", cfg.Server.StorageDir)
|
||||
}
|
||||
if cfg.Datasource.EPICS.CAAddrList != "10.0.0.1 10.0.0.2" {
|
||||
t.Errorf("CAAddrList = %q", cfg.Datasource.EPICS.CAAddrList)
|
||||
}
|
||||
if cfg.Datasource.EPICS.ArchiveURL != "http://archive/" {
|
||||
t.Errorf("ArchiveURL = %q", cfg.Datasource.EPICS.ArchiveURL)
|
||||
}
|
||||
if cfg.Datasource.EPICS.ChannelFinderURL != "http://cf/" {
|
||||
t.Errorf("ChannelFinderURL = %q", cfg.Datasource.EPICS.ChannelFinderURL)
|
||||
}
|
||||
}
|
||||
|
||||
func TestEnvTrimsWhitespace(t *testing.T) {
|
||||
t.Setenv("UOPI_SERVER_LISTEN", " :8888 ")
|
||||
cfg, err := config.Load("")
|
||||
if err != nil {
|
||||
t.Fatalf("Load: %v", err)
|
||||
}
|
||||
if cfg.Server.Listen != ":8888" {
|
||||
t.Errorf("Listen = %q, expected whitespace trimmed", cfg.Server.Listen)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user