From f19e04b39fe0c5ff137af70b167b24d10fcafacc Mon Sep 17 00:00:00 2001 From: andig Date: Sat, 4 May 2024 15:35:02 +0200 Subject: [PATCH] chore: handle socket connection errors in test --- provider/socket.go | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/provider/socket.go b/provider/socket.go index 77a909de20..2cc3bd39ac 100644 --- a/provider/socket.go +++ b/provider/socket.go @@ -2,9 +2,11 @@ package provider import ( "context" + "fmt" "math" "net/http" "strconv" + "sync" "time" "github.com/evcc-io/evcc/api" @@ -86,20 +88,25 @@ func NewSocketProviderFromConfig(other map[string]interface{}) (Provider, error) return nil, err } - go p.listen() + errC := make(chan error, 1) + go p.run(errC) if cc.Timeout > 0 { select { case <-p.val.Done(): case <-time.After(cc.Timeout): return nil, api.ErrTimeout + case err := <-errC: + return nil, err } } return p, nil } -func (p *Socket) listen() { +func (p *Socket) run(errC chan error) { + var once sync.Once + headers := make(http.Header) for k, v := range p.headers { headers.Set(k, v) @@ -115,6 +122,9 @@ func (p *Socket) listen() { cancel() if err != nil { + // handle initial connection error immediately + once.Do(func() { errC <- err }) + p.log.ERROR.Println(err) time.Sleep(retryDelay) continue @@ -154,6 +164,7 @@ func (p *Socket) FloatGetter() (func() (float64, error), error) { g, err := p.StringGetter() return func() (float64, error) { + fmt.Println("FloatGetter") s, err := g() if err != nil { return 0, err