Fix fcpath

This commit is contained in:
Manjunath A Kumatagi 2020-10-09 22:28:40 +05:30
parent ee297b6f4d
commit 4a75c7ef1e
2 changed files with 60 additions and 12 deletions

View File

@ -21,6 +21,7 @@ import (
"io/ioutil"
"os"
"path/filepath"
"regexp"
"strconv"
"strings"
@ -60,12 +61,13 @@ func (handler *osIOHandler) WriteFile(filename string, data []byte, perm os.File
// given a wwn and lun, find the device and associated devicemapper parent
func findDisk(wwn, lun string, io ioHandler, deviceUtil volumeutil.DeviceUtil) (string, string) {
fcPath := "-fc-0x" + wwn + "-lun-" + lun
fcPathExp := "^(pci-.*-fc|fc)-0x" + wwn + "-lun-" + lun
r := regexp.MustCompile(fcPathExp)
devPath := byPath
if dirs, err := io.ReadDir(devPath); err == nil {
for _, f := range dirs {
name := f.Name()
if strings.Contains(name, fcPath) {
if r.MatchString(name) {
if disk, err1 := io.EvalSymlinks(devPath + name); err1 == nil {
dm := deviceUtil.FindMultipathDeviceForDevice(disk)
klog.Infof("fc: find disk: %v, dm: %v", disk, dm)

View File

@ -57,10 +57,16 @@ type fakeIOHandler struct{}
func (handler *fakeIOHandler) ReadDir(dirname string) ([]os.FileInfo, error) {
switch dirname {
case "/dev/disk/by-path/":
f := &fakeFileInfo{
f1 := &fakeFileInfo{
name: "pci-0000:41:00.0-fc-0x500a0981891b8dc5-lun-0",
}
return []os.FileInfo{f}, nil
f2 := &fakeFileInfo{
name: "fc-0x5005076810213b32-lun-2",
}
f3 := &fakeFileInfo{
name: "abc-0000:41:00.0-fc-0x5005076810213404-lun-0",
}
return []os.FileInfo{f1, f2, f3}, nil
case "/sys/block/":
f := &fakeFileInfo{
name: "dm-1",
@ -88,19 +94,59 @@ func (handler *fakeIOHandler) WriteFile(filename string, data []byte, perm os.Fi
}
func TestSearchDisk(t *testing.T) {
fakeMounter := fcDiskMounter{
fcDisk: &fcDisk{
tests := []struct {
name string
wwns []string
lun string
expectError bool
}{
{
name: "PCI disk",
wwns: []string{"500a0981891b8dc5"},
lun: "0",
},
{
name: "Non PCI disk",
wwns: []string{"5005076810213b32"},
lun: "2",
},
{
name: "Invalid Storage Controller",
wwns: []string{"5005076810213404"},
lun: "0",
expectError: true,
},
{
name: "Non existing disk",
wwns: []string{"500507681fffffff"},
lun: "0",
expectError: true,
},
}
for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
fakeMounter := fcDiskMounter{
fcDisk: &fcDisk{
wwns: test.wwns,
lun: test.lun,
io: &fakeIOHandler{},
},
deviceUtil: util.NewDeviceHandler(util.NewIOHandler()),
}
devicePath, error := searchDisk(fakeMounter)
devicePath, err := searchDisk(fakeMounter)
if test.expectError && err == nil {
t.Errorf("expected error but got none")
}
if !test.expectError && err != nil {
t.Errorf("got unexpected error: %s", err)
}
// if no disk matches input wwn and lun, exit
if devicePath == "" || error != nil {
if devicePath == "" && !test.expectError {
t.Errorf("no fc disk found")
}
})
}
}
func TestSearchDiskWWID(t *testing.T) {