From e9b345af6ea09063dc33100f169b4fbd9a0aa755 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20He=C3=9F?= Date: Sun, 5 Nov 2023 10:32:53 +0100 Subject: [PATCH] Fix network timeouts in template tests (#10272) --- charger/openwb.go | 2 +- charger/template_test.go | 2 + util/templates/render_testing.go | 74 +++++++++++++++++--------------- 3 files changed, 42 insertions(+), 36 deletions(-) diff --git a/charger/openwb.go b/charger/openwb.go index ff257ca31..eecc569e6 100644 --- a/charger/openwb.go +++ b/charger/openwb.go @@ -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 diff --git a/charger/template_test.go b/charger/template_test.go index 6ef450850..d33ff9efc 100644 --- a/charger/template_test.go +++ b/charger/template_test.go @@ -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 diff --git a/util/templates/render_testing.go b/util/templates/render_testing.go index af96b7ee1..22baff0d4 100644 --- a/util/templates/render_testing.go +++ b/util/templates/render_testing.go @@ -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) }) - } - }) + }) + } } }