Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion go/internal/ocpp/auth_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -288,7 +288,7 @@ func TestPerChargerCredentialOverTheWire(t *testing.T) {
cp := ocpp16.NewChargePoint(id, nil, client)
err := cp.Start(fmt.Sprintf("ws://127.0.0.1:%d", port))
if err == nil {
t.Cleanup(cp.Stop)
stopAfterServer(t, srv, cp.Stop)
}
return err
}
Expand Down
2 changes: 1 addition & 1 deletion go/internal/ocpp/charging_needs_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ func connectStationForNeeds(t *testing.T, srv *Server, port int, id string) ocpp
t.Fatalf("charging station connect: %v", err)
}
var once sync.Once
t.Cleanup(func() { once.Do(cs.Stop) })
stopAfterServer(t, srv, func() { once.Do(cs.Stop) })

if _, err := cs.BootNotification(provisioning.BootReasonPowerUp, "Dawn", "Charge Amps"); err != nil {
t.Fatalf("boot: %v", err)
Expand Down
2 changes: 1 addition & 1 deletion go/internal/ocpp/control_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ func connectCharger(t *testing.T, srv *Server, port int, id string) (ocpp16.Char
}
var once sync.Once
stop := func() { once.Do(cp.Stop) }
t.Cleanup(stop)
stopAfterServer(t, srv, stop)

if _, err := cp.BootNotification("Dawn", "Charge Amps"); err != nil {
t.Fatalf("boot: %v", err)
Expand Down
2 changes: 1 addition & 1 deletion go/internal/ocpp/control_v201_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ func connectStationV201(t *testing.T, srv *Server, port int, id string) (*fakeSt
}
var once sync.Once
stop := func() { once.Do(cs.Stop) }
t.Cleanup(stop)
stopAfterServer(t, srv, stop)

station := provisioning.ChargingStationType{Model: "Dawn", VendorName: "Charge Amps"}
if _, err := cs.BootNotification(provisioning.BootReasonPowerUp, station.Model, station.VendorName); err != nil {
Expand Down
2 changes: 1 addition & 1 deletion go/internal/ocpp/identity_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ func TestBootNotificationTakesEitherSerialField(t *testing.T) {
if err := cp.Start(fmt.Sprintf("ws://127.0.0.1:%d", port)); err != nil {
t.Fatalf("connect: %v", err)
}
t.Cleanup(cp.Stop)
stopAfterServer(t, srv, cp.Stop)

if _, err := cp.BootNotification("Halo", "Charge Amps", tc.props...); err != nil {
t.Fatalf("boot: %v", err)
Expand Down
19 changes: 16 additions & 3 deletions go/internal/ocpp/server_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,19 @@ func startServer(t *testing.T, tel *telemetry.Store, approved ...string) (int, *
return 0, nil
}

// stopAfterServer stops a test charger at cleanup, after the server. Core
// probes each charger it accepts, and ocpp-go v0.19.0's ws.Client.Write checks
// the connection, then sends without its lock: a probe answered while the
// charger closes can send on the closed queue and panic (#1712). Server.Stop
// is idempotent.
func stopAfterServer(t *testing.T, srv *Server, stop func()) {
t.Helper()
t.Cleanup(func() {
srv.Stop()
stop()
})
}

func TestStopIsConcurrentAndIdempotent(t *testing.T) {
_, srv := startServer(t, telemetry.NewStore())

Expand All @@ -80,7 +93,7 @@ func TestBootAndMeterValuesPushDerEV(t *testing.T) {
if err := cp.Start(url); err != nil {
t.Fatalf("client connect: %v", err)
}
defer cp.Stop()
stopAfterServer(t, srv, cp.Stop)

if _, err := cp.BootNotification("EaseeHome", "Easee"); err != nil {
t.Fatalf("boot: %v", err)
Expand Down Expand Up @@ -149,7 +162,7 @@ func TestStartStopTransactionTracksSession(t *testing.T) {
if err := cp.Start(fmt.Sprintf("ws://127.0.0.1:%d", port)); err != nil {
t.Fatalf("connect: %v", err)
}
defer cp.Stop()
stopAfterServer(t, srv, cp.Stop)

if _, err := cp.BootNotification("Home", "Easee"); err != nil {
t.Fatalf("boot: %v", err)
Expand Down Expand Up @@ -200,7 +213,7 @@ func TestPendingChargerIsQuarantinedFromTelemetry(t *testing.T) {
if err := cp.Start(fmt.Sprintf("ws://127.0.0.1:%d", port)); err != nil {
t.Fatalf("connect: %v", err)
}
defer cp.Stop()
stopAfterServer(t, srv, cp.Stop)

if _, err := cp.BootNotification("EvilCo", "FakeCharger"); err != nil {
t.Fatalf("boot: %v", err)
Expand Down
Loading