Wworking on improving the tool
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
package epics_test
|
||||
|
||||
import (
|
||||
"context"
|
||||
"os"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/uopi/goca/proto"
|
||||
"github.com/uopi/goca/testca"
|
||||
"github.com/uopi/uopi/internal/datasource/epics"
|
||||
)
|
||||
|
||||
func TestDiscovery_EnvironmentVariables(t *testing.T) {
|
||||
// 1. Setup a fake CA server.
|
||||
srv, err := testca.New([]testca.PVSpec{
|
||||
{Name: "DISCO:PV", DBFType: proto.DBFDouble, Count: 1, Value: 123.45},
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatalf("testca.New: %v", err)
|
||||
}
|
||||
defer srv.Close()
|
||||
|
||||
// 2. Set the environment variable to point to this server.
|
||||
os.Setenv("EPICS_CA_ADDR_LIST", srv.UDPAddr())
|
||||
os.Setenv("EPICS_CA_AUTO_ADDR_LIST", "NO")
|
||||
defer os.Unsetenv("EPICS_CA_ADDR_LIST")
|
||||
defer os.Unsetenv("EPICS_CA_AUTO_ADDR_LIST")
|
||||
|
||||
// 3. Create datasource with NO explicit address (should pick up from env).
|
||||
ds := epics.New("", "", "", "", false, nil)
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
|
||||
defer cancel()
|
||||
|
||||
if err := ds.Connect(ctx); err != nil {
|
||||
t.Fatalf("Connect: %v", err)
|
||||
}
|
||||
|
||||
// 4. Verify discovery works.
|
||||
meta, err := ds.GetMetadata(ctx, "DISCO:PV")
|
||||
if err != nil {
|
||||
t.Fatalf("GetMetadata failed (discovery failed): %v", err)
|
||||
}
|
||||
if meta.Name != "DISCO:PV" {
|
||||
t.Errorf("got %q, want DISCO:PV", meta.Name)
|
||||
}
|
||||
}
|
||||
|
||||
func TestDiscovery_ConfigOverride(t *testing.T) {
|
||||
// 1. Setup TWO fake CA servers.
|
||||
srv1, _ := testca.New([]testca.PVSpec{{Name: "PV:1", DBFType: proto.DBFDouble, Value: 1.0}})
|
||||
defer srv1.Close()
|
||||
srv2, _ := testca.New([]testca.PVSpec{{Name: "PV:2", DBFType: proto.DBFDouble, Value: 2.0}})
|
||||
defer srv2.Close()
|
||||
|
||||
// 2. Point env to srv1.
|
||||
os.Setenv("EPICS_CA_ADDR_LIST", srv1.UDPAddr())
|
||||
os.Setenv("EPICS_CA_AUTO_ADDR_LIST", "NO")
|
||||
defer os.Unsetenv("EPICS_CA_ADDR_LIST")
|
||||
defer os.Unsetenv("EPICS_CA_AUTO_ADDR_LIST")
|
||||
|
||||
// 3. Create datasource pointing explicitly to srv2 (should OVERRIDE env).
|
||||
ds := epics.New(srv2.UDPAddr(), "", "", "", false, nil)
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
|
||||
defer cancel()
|
||||
|
||||
if err := ds.Connect(ctx); err != nil {
|
||||
t.Fatalf("Connect: %v", err)
|
||||
}
|
||||
|
||||
// 4. PV from srv2 should be found.
|
||||
if _, err := ds.GetMetadata(ctx, "PV:2"); err != nil {
|
||||
t.Errorf("PV:2 from config address not found: %v", err)
|
||||
}
|
||||
|
||||
// 5. PV from srv1 should NOT be found (since AutoAddrList is disabled by config override).
|
||||
ctx2, cancel2 := context.WithTimeout(context.Background(), 500*time.Millisecond)
|
||||
defer cancel2()
|
||||
if _, err := ds.GetMetadata(ctx2, "PV:1"); err == nil {
|
||||
t.Error("PV:1 from env address was found, but config should have overridden it")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user