Merge pull request #2898 from evcc-io/feature/tests

Speedup unit tests
This commit is contained in:
andig 2022-03-15 20:29:18 +00:00 • committed by GitHub
commit dedd3ba5c5
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
14 changed files with 48 additions and 33 deletions

View file

@ -57,7 +57,7 @@ func NewLgEssFromConfig(other map[string]interface{}) (api.Meter, error) {
URI, Usage, Password string
Cache time.Duration
}{
Cache: 2 * time.Second,
Cache: time.Second,
}
if err := util.DecodeOther(other, &cc); err != nil {

View file

@ -16,14 +16,15 @@ var acceptable = []string{
"missing password", // Powerwall
"connect: no route to host",
"connect: connection refused",
"i/o timeout",
"connect: network is unreachable",
"no ping response for 192.0.2.2", // SMA
"network is unreachable",
"i/o timeout",
"'sma': missing uri or serial", // SMA
"'fritzdect': missing ain", // FritzDect
"[1ESY1161052714 1ESY1161229249 1EMH0008842285 1ESY1161978584 1EMH0004864048 1ESY1161979033 7ELS8135823805]", // Discovergy
"can only have either uri or device", // modbus
"(Client.Timeout exceeded while awaiting headers)", // http
"cannot create meter 'discovergy': unexpected status: 401", // Discovergy Proxy
"unexpected status: 401", // Discovergy
"unexpected status: 503", // Discovergy
"login failed: Put \"https://192.0.2.2/v1/login\": context deadline exceeded", // LG ESS
}

View file

@ -130,8 +130,8 @@ params:
de: Zeitüberschreitung
en: Timeout
help:
de: Akzeptiere keine Daten die älter als dieser Wert ist
en: Don't accept values older than this value in seconds
de: Akzeptiere keine Daten die älter als dieser Wert sind
en: Don't accept values older than this value
example: 30s
valuetype: duration
- name: mode
@ -288,7 +288,7 @@ presets:
{{define "vehicle-language"}}
language: {{ .language }}
{{end}}
vehiclecloud:
params:
- name: cloud

View file

@ -17,11 +17,10 @@ params:
example: 192.0.2.2
- name: port
default: 502
help:
help:
en: Port 502 (SetApp) or 1502 (LCD)
de: Port 502 (SetApp) oder 1502 (LCD)
- name: timeout
default: 3s
render: |
type: custom
power:

View file

@ -14,7 +14,6 @@ params:
id: 1
port: 1502
- name: timeout
default: 3s
render: |
type: custom
power:

View file

@ -11,4 +11,4 @@ render:
host: 192.0.2.2 # Die IP Adresse oder der Hostname des MQTT Brokers
port: 1883 # Der Port des MQTT Brokers # Optional
topic: warp # Optional
timeout: 30s # Akzeptiere keine Daten die älter als dieser Wert ist # Optional
timeout: 30s # Akzeptiere keine Daten die älter als dieser Wert sind # Optional

View file

@ -11,4 +11,4 @@ render:
host: 192.0.2.2 # Die IP Adresse oder der Hostname des MQTT Brokers
port: 1883 # Der Port des MQTT Brokers # Optional
topic: warp # Optional
timeout: 30s # Akzeptiere keine Daten die älter als dieser Wert ist # Optional
timeout: 30s # Akzeptiere keine Daten die älter als dieser Wert sind # Optional

View file

@ -17,7 +17,7 @@ render:
currentp1: # Optional
currentp2: # Optional
currentp3: # Optional
timeout: 30s # Akzeptiere keine Daten die älter als dieser Wert ist # Optional
timeout: 30s # Akzeptiere keine Daten die älter als dieser Wert sind # Optional
- usage: pv
default: |
type: template
@ -31,7 +31,7 @@ render:
currentp1: # Optional
currentp2: # Optional
currentp3: # Optional
timeout: 30s # Akzeptiere keine Daten die älter als dieser Wert ist # Optional
timeout: 30s # Akzeptiere keine Daten die älter als dieser Wert sind # Optional
- usage: charge
default: |
type: template
@ -45,7 +45,7 @@ render:
currentp1: # Optional
currentp2: # Optional
currentp3: # Optional
timeout: 30s # Akzeptiere keine Daten die älter als dieser Wert ist # Optional
timeout: 30s # Akzeptiere keine Daten die älter als dieser Wert sind # Optional
- usage: battery
default: |
type: template
@ -59,4 +59,4 @@ render:
currentp1: # Optional
currentp2: # Optional
currentp3: # Optional
timeout: 30s # Akzeptiere keine Daten die älter als dieser Wert ist # Optional
timeout: 30s # Akzeptiere keine Daten die älter als dieser Wert sind # Optional

View file

@ -12,7 +12,7 @@ render:
usage: grid
host: 192.0.2.2 # IP-Adresse oder Hostname
port: 502 # Port 502 (SetApp) oder 1502 (LCD) # Optional
timeout: 3s # Akzeptiere keine Daten die älter als dieser Wert ist # Optional
timeout: 30s # Akzeptiere keine Daten die älter als dieser Wert sind # Optional
- usage: pv
default: |
type: template
@ -20,7 +20,7 @@ render:
usage: pv
host: 192.0.2.2 # IP-Adresse oder Hostname
port: 502 # Port 502 (SetApp) oder 1502 (LCD) # Optional
timeout: 3s # Akzeptiere keine Daten die älter als dieser Wert ist # Optional
timeout: 30s # Akzeptiere keine Daten die älter als dieser Wert sind # Optional
- usage: battery
default: |
type: template
@ -28,4 +28,4 @@ render:
usage: battery
host: 192.0.2.2 # IP-Adresse oder Hostname
port: 502 # Port 502 (SetApp) oder 1502 (LCD) # Optional
timeout: 3s # Akzeptiere keine Daten die älter als dieser Wert ist # Optional
timeout: 30s # Akzeptiere keine Daten die älter als dieser Wert sind # Optional

View file

@ -13,7 +13,7 @@ render:
# TCPIP
uri: 192.0.2.2:1502 # IP-Adresse oder Hostname: Port
# Modbus End
timeout: 3s # Akzeptiere keine Daten die älter als dieser Wert ist # Optional
timeout: 30s # Akzeptiere keine Daten die älter als dieser Wert sind # Optional
- usage: pv
default: |
type: template
@ -24,4 +24,4 @@ render:
# TCPIP
uri: 192.0.2.2:1502 # IP-Adresse oder Hostname: Port
# Modbus End
timeout: 3s # Akzeptiere keine Daten die älter als dieser Wert ist # Optional
timeout: 30s # Akzeptiere keine Daten die älter als dieser Wert sind # Optional

View file

@ -6,6 +6,7 @@ import (
"time"
"github.com/evcc-io/evcc/util"
"github.com/evcc-io/evcc/util/transport"
)
// Timeout is the default request timeout used by the Helper
@ -21,7 +22,7 @@ func NewHelper(log *util.Logger) *Helper {
r := &Helper{
Client: &http.Client{
Timeout: Timeout,
Transport: NewTripper(log, http.DefaultTransport),
Transport: NewTripper(log, transport.Default()),
},
}

View file

@ -4,6 +4,7 @@ import (
"os"
"testing"
"github.com/jinzhu/copier"
"gopkg.in/yaml.v3"
)
@ -21,9 +22,16 @@ func RenderTest(t *testing.T, tmpl Template, values map[string]interface{}, cb f
// instantiate all usage variants
for _, u := range tmpl.Usages() {
t.Run(u, func(t *testing.T) {
values[ParamUsage] = u
// t.Parallel()
b, _, err := tmpl.RenderResult(TemplateRenderModeInstance, values)
// create a copy of the map for parallel execution
usageValues := make(map[string]interface{}, len(values)+1)
if err := copier.Copy(&usageValues, values); err != nil {
panic(err)
}
usageValues[ParamUsage] = u
b, _, err := tmpl.RenderResult(TemplateRenderModeInstance, usageValues)
if err != nil {
t.Errorf("usage: %s, result: %v", u, err)
}
@ -35,7 +43,7 @@ func RenderTest(t *testing.T, tmpl Template, values map[string]interface{}, cb f
// actually run the instance if not on CI
if os.Getenv("CI") == "" {
cb(values)
cb(usageValues)
}
})
}

View file

@ -203,8 +203,6 @@ func (p *Param) DefaultValue(renderMode string) interface{} {
default:
if p.Test != "" {
return p.Test
} else if p.Example != "" && renderMode == TemplateRenderModeUnitTest {
return p.Example
} else if p.Example != "" && p.Default == "" && renderMode == TemplateRenderModeDocs {
return p.Example
} else {

View file

@ -2,16 +2,25 @@ package transport
import (
"crypto/tls"
"net"
"net/http"
"time"
)
// Default returns http.DefaultTransport as http.Transport instead of http.RoundTripper
// Default returns an http.DefaultTransport as http.Transport with reduced dial timeout
func Default() *http.Transport {
t, ok := http.DefaultTransport.(*http.Transport)
if !ok {
panic("http.DefaultTransport is not an http.Transport")
return &http.Transport{
Proxy: http.ProxyFromEnvironment,
DialContext: (&net.Dialer{
Timeout: 5 * time.Second, // reduced from 30s
KeepAlive: 30 * time.Second,
}).DialContext,
ForceAttemptHTTP2: true,
MaxIdleConns: 100,
IdleConnTimeout: 90 * time.Second,
TLSHandshakeTimeout: 10 * time.Second,
ExpectContinueTimeout: 1 * time.Second,
}
return t
}
// InsecureTransport is an http.Transport with TLSClientConfig.InsecureSkipVerify enabled