diff --git a/controller/node_controller.go b/controller/node_controller.go index 6031c31653..167f0ff0c4 100644 --- a/controller/node_controller.go +++ b/controller/node_controller.go @@ -49,8 +49,12 @@ type NodeController struct { sStoreSynced cache.InformerSynced queue workqueue.RateLimitingInterface + + getDiskInfoHandler GetDiskInfoHandler } +type GetDiskInfoHandler func(string) (*util.DiskInfo, error) + func NewNodeController( ds *datastore.DataStore, scheme *runtime.Scheme, @@ -79,6 +83,8 @@ func NewNodeController( sStoreSynced: settingInformer.Informer().HasSynced, queue: workqueue.NewNamedRateLimitingQueue(workqueue.DefaultControllerRateLimiter(), "longhorn-node"), + + getDiskInfoHandler: util.GetDiskInfo, } nodeInformer.Informer().AddEventHandler(cache.ResourceEventHandlerFuncs{ @@ -316,7 +322,7 @@ func (nc *NodeController) syncDiskStatus(node *longhorn.Node) error { delete(replicaDiskMap, diskID) } // get disk available size - diskInfo, err := util.GetDiskInfo(disk.Path) + diskInfo, err := nc.getDiskInfoHandler(disk.Path) if err != nil { logrus.Errorf("Get disk information on node %v error: %v", node.Name, err) } else { diff --git a/controller/node_controller_test.go b/controller/node_controller_test.go index 81eca3a376..29c50794c7 100644 --- a/controller/node_controller_test.go +++ b/controller/node_controller_test.go @@ -13,6 +13,7 @@ import ( "github.com/rancher/longhorn-manager/datastore" "github.com/rancher/longhorn-manager/types" + "github.com/rancher/longhorn-manager/util" longhorn "github.com/rancher/longhorn-manager/k8s/pkg/apis/longhorn/v1alpha1" lhfake "github.com/rancher/longhorn-manager/k8s/pkg/client/clientset/versioned/fake" @@ -52,6 +53,7 @@ func newTestNodeController(lhInformerFactory lhinformerfactory.SharedInformerFac nc := NewNodeController(ds, scheme.Scheme, nodeInformer, settingInformer, podInformer, kubeClient, TestNamespace, controllerID) fakeRecorder := record.NewFakeRecorder(100) nc.eventRecorder = fakeRecorder + nc.getDiskInfoHandler = fakeGetDiskInfo nc.nStoreSynced = alwaysReady nc.pStoreSynced = alwaysReady @@ -59,6 +61,20 @@ func newTestNodeController(lhInformerFactory lhinformerfactory.SharedInformerFac return nc } +func fakeGetDiskInfo(directory string) (*util.DiskInfo, error) { + return &util.DiskInfo{ + Fsid: "fsid", + Path: directory, + Type: "ext4", + FreeBlock: 0, + TotalBlock: 0, + BlockSize: 0, + + StorageMaximum: 0, + StorageAvailable: 0, + }, nil +} + func (s *TestSuite) TestSyncNode(c *C) { testCases := map[string]*NodeTestCase{} MountPropagationBidirectional := v1.MountPropagationBidirectional