Fix network timeouts in template tests (#10272)

This commit is contained in:
Michael Heß 2023-11-05 10:32:53 +01:00 • committed by GitHub
parent 4b5d018288
commit e9b345af6e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 42 additions and 36 deletions

View file

@ -77,7 +77,7 @@ func NewOpenWB(log *util.Logger, mqttconf mqtt.Config, id int, topic string, p1p
// check if loadpoint configured
configured := boolG(fmt.Sprintf("%s/lp/%d/%s", topic, id, openwb.ConfiguredTopic))
if isConfigured, err := configured(); err != nil || !isConfigured {
return nil, fmt.Errorf("openWB loadpoint %d is not configured", id)
return nil, fmt.Errorf("loadpoint %d is not configured", id)
}
// adapt plugged/charging to status

View file

@ -17,8 +17,10 @@ var acceptable = []string{
"hciconfig provided no response",
"connect: no route to host",
"connect: connection refused",
"connector already registered: 1", // ocpp
"error connecting: Network Error",
"i/o timeout",
"loadpoint 1 is not configured", // openWB
"recv timeout",
"(Client.Timeout exceeded while awaiting headers)",
"can only have either uri or device", // modbus

View file

@ -35,51 +35,55 @@ func TestClass(t *testing.T, class Class, instantiate func(t *testing.T, values
for _, tmpl := range ByClass(class) {
tmpl := tmpl
t.Run(tmpl.Template, func(t *testing.T) {
// set default values for all params
values := tmpl.Defaults(TemplateRenderModeUnitTest)
// set default values for all params
values := tmpl.Defaults(TemplateRenderModeUnitTest)
// set the template value which is needed for rendering
values["template"] = tmpl.Template
// set modbus default test values
if values[ParamModbus] != nil {
modbusChoices := tmpl.ModbusChoices()
// we only test one modbus setup
if slices.Contains(modbusChoices, ModbusChoiceTCPIP) {
values[ModbusKeyTCPIP] = true
} else {
values[ModbusKeyRS485TCPIP] = true
}
tmpl.ModbusValues(TemplateRenderModeUnitTest, values)
// set modbus default test values
if values[ParamModbus] != nil {
modbusChoices := tmpl.ModbusChoices()
// we only test one modbus setup
if slices.Contains(modbusChoices, ModbusChoiceTCPIP) {
values[ModbusKeyTCPIP] = true
} else {
values[ModbusKeyRS485TCPIP] = true
}
tmpl.ModbusValues(TemplateRenderModeUnitTest, values)
}
// set the template value which is needed for rendering
values["template"] = tmpl.Template
// https://github.com/evcc-io/evcc/pull/10272 - override example IP (192.0.2.2)
values["host"] = "localhost"
usages := tmpl.Usages()
if len(usages) == 0 {
t.Run(tmpl.Template, func(t *testing.T) {
t.Parallel()
usages := tmpl.Usages()
if len(usages) == 0 {
test(t, tmpl, values, func(values map[string]interface{}) {
instantiate(t, values)
})
})
return
return
}
for _, u := range usages {
// 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
for _, u := range usages {
// 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
// subtest for each usage
t.Run(u, func(t *testing.T) {
t.Parallel()
// subtest for each usage
t.Run(u, func(t *testing.T) {
t.Parallel()
test(t, tmpl, usageValues, func(values map[string]interface{}) {
instantiate(t, values)
})
test(t, tmpl, usageValues, func(values map[string]interface{}) {
instantiate(t, values)
})
}
})
})
}
}
}