...
1 package ntp
2
3 import (
4 "context"
5 _ "embed"
6 "errors"
7 "os"
8 "path/filepath"
9 "testing"
10
11 testfs "gotest.tools/v3/fs"
12
13 "edge-infra.dev/pkg/k8s/runtime/controller/reconcile"
14 v1ien "edge-infra.dev/pkg/sds/ien/k8s/apis/v1"
15
16 . "github.com/onsi/ginkgo/v2"
17 . "github.com/onsi/gomega"
18 )
19
20
21 var currentCfg []byte
22
23
24 var expectedCfg []byte
25
26 var plugin = Plugin{}
27
28 func TestNTPServers(t *testing.T) {
29 testDir := testfs.NewDir(t, chronydPath)
30 defer testDir.Remove()
31 chronydPath = filepath.Join(testDir.Path(), "ien-ntp-server.sources")
32 _ = os.WriteFile(chronydPath, currentCfg, chronydFileMode)
33 restartChronydFn = func(_ context.Context) error { return nil }
34
35 RegisterFailHandler(Fail)
36 RunSpecs(t, "NTP Tests")
37 }
38
39 var _ = BeforeEach(func() {
40 _ = os.WriteFile(chronydPath, currentCfg, chronydFileMode)
41 })
42
43 var _ = Describe("NTP test suite", func() {
44 It("Basic change of NTP servers", func() {
45 updatedNTPs := []string{"0.uk.pool.ntp.org", "1.uk.pool.ntp.org"}
46 ien := generateIENodeNTPServers(updatedNTPs)
47
48 result, err := plugin.Reconcile(context.Background(), ien, nil)
49 Expect(err).To(BeNil())
50 Expect(result).To(BeEquivalentTo(reconcile.ResultSuccess))
51
52 actualCfg, err := os.ReadFile(chronydPath)
53 Expect(err).To(BeNil())
54 Expect(string(actualCfg)).To(BeEquivalentTo(string(expectedCfg)))
55 })
56
57 It("Failure to restart chronyd", func() {
58 updatedNTPs := []string{"0.uk.pool.ntp.org", "1.uk.pool.ntp.org"}
59 ien := generateIENodeNTPServers(updatedNTPs)
60 restartErr := errors.New("error restarting chronyd")
61 restartChronydFn = func(_ context.Context) error { return restartErr }
62
63 result, err := plugin.Reconcile(context.Background(), ien, nil)
64 Expect(err.Error()).To(BeEquivalentTo("error restarting chronyd.service: error restarting chronyd"))
65 Expect(result).To(BeEquivalentTo(reconcile.ResultRequeue))
66
67 actualCfg, err := os.ReadFile(chronydPath)
68 Expect(err).To(BeNil())
69 Expect(string(actualCfg)).To(BeEquivalentTo(string(currentCfg)))
70 })
71 })
72
73 func generateIENodeNTPServers(ntps []string) *v1ien.IENode {
74 return &v1ien.IENode{
75 Spec: v1ien.IENodeSpec{
76 NetworkServices: v1ien.NetworkServices{
77 NTPServers: ntps,
78 },
79 },
80 }
81 }
82
View as plain text