Files
akvorado/cmd/components_test.go
2025-07-29 07:42:49 +02:00

124 lines
2.4 KiB
Go

// SPDX-FileCopyrightText: 2022 Free Mobile
// SPDX-License-Identifier: AGPL-3.0-only
package cmd_test
import (
"errors"
"testing"
"time"
"akvorado/cmd"
"akvorado/common/daemon"
"akvorado/common/helpers"
"akvorado/common/reporter"
)
type Startable struct {
Started bool
}
type Stopable struct {
Stopped bool
}
func (c *Startable) Start() error {
c.Started = true
return nil
}
func (c *Stopable) Stop() error {
c.Stopped = true
return nil
}
type (
ComponentStartStop struct {
Startable
Stopable
}
ComponentStop struct {
Stopable
}
ComponentStart struct {
Startable
}
ComponentNone struct{}
ComponentStartError struct {
Stopable
}
)
func (c ComponentStartError) Start() error {
return errors.New("nooo")
}
func TestStartStopError(t *testing.T) {
r := reporter.NewMock(t)
daemonComponent := daemon.NewMock(t)
otherComponents := []any{
&ComponentStartStop{},
&ComponentStop{},
&ComponentStart{},
&ComponentNone{},
&ComponentStartError{},
&ComponentStartStop{},
}
if err := cmd.StartStopComponents(r, daemonComponent, otherComponents); err == nil {
t.Error("StartStopComponents() did not trigger an error")
}
expected := []any{
&ComponentStartStop{
Startable: Startable{Started: true},
Stopable: Stopable{Stopped: true},
},
&ComponentStop{
Stopable: Stopable{Stopped: true},
},
&ComponentStart{
Startable: Startable{Started: true},
},
&ComponentNone{},
&ComponentStartError{},
&ComponentStartStop{},
}
if diff := helpers.Diff(otherComponents, expected); diff != "" {
t.Errorf("StartStopComponents() (-got, +want):\n%s", diff)
}
}
func TestStartStop(t *testing.T) {
r := reporter.NewMock(t)
daemonComponent := daemon.NewMock(t)
otherComponents := []any{
&ComponentStartStop{},
&ComponentStop{},
&ComponentStart{},
&ComponentNone{},
}
go func() {
time.Sleep(10 * time.Millisecond)
daemonComponent.Terminate()
}()
if err := cmd.StartStopComponents(r, daemonComponent, otherComponents); err != nil {
t.Errorf("StartStopComponents() error:\n%+v", err)
}
expected := []any{
&ComponentStartStop{
Startable: Startable{Started: true},
Stopable: Stopable{Stopped: true},
},
&ComponentStop{
Stopable: Stopable{Stopped: true},
},
&ComponentStart{
Startable: Startable{Started: true},
},
&ComponentNone{},
}
if diff := helpers.Diff(otherComponents, expected); diff != "" {
t.Errorf("StartStopComponents() (-got, +want):\n%s", diff)
}
}