fix FakeMounter to work with OSX

OSX 10.11.x has `/var` symlinked to `/private/var`, which was tripping
up logic in `mount.GetMountRefs`

This fixes unit tests for pkg/volume/fc and pkg/volume/iscsi
pull/6/head
Aaron Crickenberger 2017-02-15 11:15:26 -08:00
parent 32387d124e
commit ddc8d8c400
1 changed files with 28 additions and 9 deletions

View File

@ -17,6 +17,7 @@ limitations under the License.
package mount package mount
import ( import (
"path/filepath"
"sync" "sync"
"github.com/golang/glog" "github.com/golang/glog"
@ -80,9 +81,15 @@ func (f *FakeMounter) Mount(source string, target string, fstype string, options
} }
} }
f.MountPoints = append(f.MountPoints, MountPoint{Device: source, Path: target, Type: fstype}) // If target is a symlink, get its absolute path
glog.V(5).Infof("Fake mounter: mounted %s to %s", source, target) absTarget, err := filepath.EvalSymlinks(target)
f.Log = append(f.Log, FakeAction{Action: FakeActionMount, Target: target, Source: source, FSType: fstype}) if err != nil {
absTarget = target
}
f.MountPoints = append(f.MountPoints, MountPoint{Device: source, Path: absTarget, Type: fstype})
glog.V(5).Infof("Fake mounter: mounted %s to %s", source, absTarget)
f.Log = append(f.Log, FakeAction{Action: FakeActionMount, Target: absTarget, Source: source, FSType: fstype})
return nil return nil
} }
@ -90,17 +97,23 @@ func (f *FakeMounter) Unmount(target string) error {
f.mutex.Lock() f.mutex.Lock()
defer f.mutex.Unlock() defer f.mutex.Unlock()
// If target is a symlink, get its absolute path
absTarget, err := filepath.EvalSymlinks(target)
if err != nil {
absTarget = target
}
newMountpoints := []MountPoint{} newMountpoints := []MountPoint{}
for _, mp := range f.MountPoints { for _, mp := range f.MountPoints {
if mp.Path == target { if mp.Path == absTarget {
glog.V(5).Infof("Fake mounter: unmounted %s from %s", mp.Device, target) glog.V(5).Infof("Fake mounter: unmounted %s from %s", mp.Device, absTarget)
// Don't copy it to newMountpoints // Don't copy it to newMountpoints
continue continue
} }
newMountpoints = append(newMountpoints, MountPoint{Device: mp.Device, Path: mp.Path, Type: mp.Type}) newMountpoints = append(newMountpoints, MountPoint{Device: mp.Device, Path: mp.Path, Type: mp.Type})
} }
f.MountPoints = newMountpoints f.MountPoints = newMountpoints
f.Log = append(f.Log, FakeAction{Action: FakeActionUnmount, Target: target}) f.Log = append(f.Log, FakeAction{Action: FakeActionUnmount, Target: absTarget})
return nil return nil
} }
@ -115,13 +128,19 @@ func (f *FakeMounter) IsLikelyNotMountPoint(file string) (bool, error) {
f.mutex.Lock() f.mutex.Lock()
defer f.mutex.Unlock() defer f.mutex.Unlock()
// If file is a symlink, get its absolute path
absFile, err := filepath.EvalSymlinks(file)
if err != nil {
absFile = file
}
for _, mp := range f.MountPoints { for _, mp := range f.MountPoints {
if mp.Path == file { if mp.Path == absFile {
glog.V(5).Infof("isLikelyMountPoint for %s: mounted %s, false", file, mp.Path) glog.V(5).Infof("isLikelyNotMountPoint for %s: mounted %s, false", file, mp.Path)
return false, nil return false, nil
} }
} }
glog.V(5).Infof("isLikelyMountPoint for %s: true", file) glog.V(5).Infof("isLikelyNotMountPoint for %s: true", file)
return true, nil return true, nil
} }