diff --git a/pkg/nfd-master/nfd-master-internal_test.go b/pkg/nfd-master/nfd-master-internal_test.go index 103b28429..eda29561b 100644 --- a/pkg/nfd-master/nfd-master-internal_test.go +++ b/pkg/nfd-master/nfd-master-internal_test.go @@ -41,10 +41,6 @@ const ( mockNodeName = "mock-node" ) -func init() { - nodeName = mockNodeName -} - func newMockNode() *api.Node { n := api.Node{} n.Name = mockNodeName @@ -54,6 +50,14 @@ func newMockNode() *api.Node { return &n } +func newMockMaster(apihelper apihelper.APIHelpers) *nfdMaster { + return &nfdMaster{ + nodeName: mockNodeName, + args: Args{LabelWhiteList: regexp.MustCompile("")}, + apihelper: apihelper, + } +} + func TestUpdateNodeFeatures(t *testing.T) { Convey("When I update the node using fake client", t, func() { fakeFeatureLabels := map[string]string{LabelNs + "/source-feature.1": "1", LabelNs + "/source-feature.2": "2", LabelNs + "/source-feature.3": "val3"} @@ -159,6 +163,7 @@ func TestUpdateNodeFeatures(t *testing.T) { func TestUpdateMasterNode(t *testing.T) { Convey("When updating the nfd-master node", t, func() { mockHelper := &apihelper.MockAPIHelpers{} + mockMaster := newMockMaster(mockHelper) mockClient := &k8sclient.Clientset{} mockNode := newMockNode() Convey("When update operation succeeds", func() { @@ -167,7 +172,7 @@ func TestUpdateMasterNode(t *testing.T) { mockHelper.On("GetClient").Return(mockClient, nil) mockHelper.On("GetNode", mockClient, mockNodeName).Return(mockNode, nil) mockHelper.On("PatchNode", mockClient, mockNodeName, mock.MatchedBy(jsonPatchMatcher(expectedPatches))).Return(nil) - err := updateMasterNode(mockHelper) + err := mockMaster.updateMasterNode() Convey("No error should be returned", func() { So(err, ShouldBeNil) }) @@ -176,7 +181,7 @@ func TestUpdateMasterNode(t *testing.T) { mockErr := errors.New("mock-error") Convey("When getting API client fails", func() { mockHelper.On("GetClient").Return(mockClient, mockErr) - err := updateMasterNode(mockHelper) + err := mockMaster.updateMasterNode() Convey("An error should be returned", func() { So(err, ShouldEqual, mockErr) }) @@ -185,7 +190,7 @@ func TestUpdateMasterNode(t *testing.T) { Convey("When getting API node object fails", func() { mockHelper.On("GetClient").Return(mockClient, nil) mockHelper.On("GetNode", mockClient, mockNodeName).Return(mockNode, mockErr) - err := updateMasterNode(mockHelper) + err := mockMaster.updateMasterNode() Convey("An error should be returned", func() { So(err, ShouldEqual, mockErr) }) @@ -195,7 +200,7 @@ func TestUpdateMasterNode(t *testing.T) { mockHelper.On("GetClient").Return(mockClient, nil) mockHelper.On("GetNode", mockClient, mockNodeName).Return(mockNode, nil) mockHelper.On("PatchNode", mockClient, mockNodeName, mock.Anything).Return(mockErr) - err := updateMasterNode(mockHelper) + err := mockMaster.updateMasterNode() Convey("An error should be returned", func() { So(err, ShouldEqual, mockErr) }) @@ -282,9 +287,9 @@ func TestSetLabels(t *testing.T) { const workerName = "mock-worker" const workerVer = "0.1-test" mockHelper := &apihelper.MockAPIHelpers{} + mockMaster := newMockMaster(mockHelper) mockClient := &k8sclient.Clientset{} mockNode := newMockNode() - mockMaster := nfdMaster{args: Args{LabelWhiteList: regexp.MustCompile("")}, apihelper: mockHelper} mockCtx := context.Background() // In the gRPC request the label names may omit the default ns mockLabels := map[string]string{"feature-1": "1", "feature-2": "val-2", "feature-3": "3"} diff --git a/pkg/nfd-master/nfd-master.go b/pkg/nfd-master/nfd-master.go index dde9393c6..b5ba0a24c 100644 --- a/pkg/nfd-master/nfd-master.go +++ b/pkg/nfd-master/nfd-master.go @@ -59,7 +59,6 @@ const ( var ( stdoutLogger = log.New(os.Stdout, "", log.LstdFlags) stderrLogger = log.New(os.Stderr, "", log.LstdFlags) - nodeName = os.Getenv("NODE_NAME") ) // Labels are a Kubernetes representation of discovered features. @@ -94,6 +93,7 @@ type NfdMaster interface { type nfdMaster struct { args Args + nodeName string server *grpc.Server ready chan bool apihelper apihelper.APIHelpers @@ -101,7 +101,9 @@ type nfdMaster struct { // Create new NfdMaster server instance. func NewNfdMaster(args Args) (NfdMaster, error) { - nfd := &nfdMaster{args: args, ready: make(chan bool, 1)} + nfd := &nfdMaster{args: args, + nodeName: os.Getenv("NODE_NAME"), + ready: make(chan bool, 1)} // Check TLS related args if args.CertFile != "" || args.KeyFile != "" || args.CaFile != "" { @@ -126,14 +128,14 @@ func NewNfdMaster(args Args) (NfdMaster, error) { // is called. func (m *nfdMaster) Run() error { stdoutLogger.Printf("Node Feature Discovery Master %s", version.Get()) - stdoutLogger.Printf("NodeName: '%s'", nodeName) + stdoutLogger.Printf("NodeName: '%s'", m.nodeName) if m.args.Prune { return m.prune() } if !m.args.NoPublish { - err := updateMasterNode(m.apihelper) + err := m.updateMasterNode() if err != nil { return fmt.Errorf("failed to update master node: %v", err) } @@ -241,19 +243,19 @@ func (m *nfdMaster) prune() error { } // Advertise NFD master information -func updateMasterNode(helper apihelper.APIHelpers) error { - cli, err := helper.GetClient() +func (m *nfdMaster) updateMasterNode() error { + cli, err := m.apihelper.GetClient() if err != nil { return err } - node, err := helper.GetNode(cli, nodeName) + node, err := m.apihelper.GetNode(cli, m.nodeName) if err != nil { return err } // Advertise NFD version as an annotation p := createPatches(nil, node.Annotations, Annotations{masterVersionAnnotation: version.Get()}, "/metadata/annotations") - err = helper.PatchNode(cli, node.Name, p) + err = m.apihelper.PatchNode(cli, node.Name, p) if err != nil { stderrLogger.Printf("failed to patch node annotations: %v", err) return err