talos/internal/app/machined/pkg/system/system_test.go
Andrey Smirnov 9c63f4ed0a feat(init): implement complete API for service lifecycle (start/stop)
It is now possible to `start`/`stop`/`restart` any service via `osctl`
commands.

There are some changes in `ServiceRunner` to support re-use (re-entering
running state). `Services` singleton now tracks service running state to
avoid calling `Start()` on already running `ServiceRunner` instance.
Method `Start()` was renamed to `LoadAndStart()` to break up service
loading (adding to the list of service) and actual service start.

Signed-off-by: Andrey Smirnov <smirnov.andrey@gmail.com>
2019-08-01 11:16:57 -07:00

45 lines
1.2 KiB
Go

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
package system_test
import (
"context"
"testing"
"time"
"github.com/stretchr/testify/suite"
"github.com/talos-systems/talos/internal/app/machined/pkg/system"
)
type SystemServicesSuite struct {
suite.Suite
}
func (suite *SystemServicesSuite) TestStartShutdown() {
system.Services(nil).LoadAndStart(
&MockService{name: "containerd"},
&MockService{name: "proxyd", dependencies: []string{"containerd"}},
&MockService{name: "trustd", dependencies: []string{"containerd", "proxyd"}},
&MockService{name: "osd", dependencies: []string{"containerd"}},
)
time.Sleep(10 * time.Millisecond)
system.Services(nil).Shutdown()
}
func TestSystemServicesSuite(t *testing.T) {
suite.Run(t, new(SystemServicesSuite))
}
func (suite *SystemServicesSuite) TestStartStop() {
system.Services(nil).LoadAndStart(
&MockService{name: "yolo"},
)
time.Sleep(10 * time.Millisecond)
err := system.Services(nil).Stop(
context.TODO(), "yolo",
)
suite.Assert().NoError(err)
}