...

Source file src/edge-infra.dev/pkg/sds/ien/k8s/controllers/nodeagent/plugins/networking/ntp/ntp_test.go

Documentation: edge-infra.dev/pkg/sds/ien/k8s/controllers/nodeagent/plugins/networking/ntp

     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" //nolint:revive
    17  	. "github.com/onsi/gomega"    //nolint:revive
    18  )
    19  
    20  //go:embed testdata/ien-ntp-server.sources
    21  var currentCfg []byte
    22  
    23  //go:embed testdata/expected.sources
    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