talos/internal/app/machined/pkg/system/system_test.go
Andrey Smirnov d210d7f1a3 fix: implement Unload() for services to make sure bootkube runs always
The problem was that flow to re-run the service with different
parameters was not consistent: it depends on whether services was loaded
before or not, but that is not reliable, as e.g. with bootstrap API
`bootkube` is loaded for the bootstrap and stays until reboot, and never
loaded for any other boot.

`Unload()` stops and removes the service completely so that new instance
of the service could be loaded and started.

This fixes the edge case with recovery API not running bootkube properly
before reboot after bootstrap.

Signed-off-by: Andrey Smirnov <smirnov.andrey@gmail.com>
2020-07-08 07:15:45 -07:00

50 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: "trustd", dependencies: []string{"containerd"}},
&MockService{name: "osd", dependencies: []string{"containerd", "trustd"}},
)
time.Sleep(10 * time.Millisecond)
suite.Require().NoError(system.Services(nil).Unload(context.Background(), "trustd", "notrunning"))
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)
}