Bugfix: csi raw block that does not need attach mounted failed
Add unit test fix verify-test-featurefates failed
This commit is contained in:
@@ -23,6 +23,7 @@ import (
|
||||
"testing"
|
||||
|
||||
api "k8s.io/api/core/v1"
|
||||
"k8s.io/api/storage/v1beta1"
|
||||
meta "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
utilfeature "k8s.io/apiserver/pkg/util/feature"
|
||||
fakeclient "k8s.io/client-go/kubernetes/fake"
|
||||
@@ -354,6 +355,88 @@ func TestBlockMapperMapDevice(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestBlockMapperMapDeviceNotSupportAttach(t *testing.T) {
|
||||
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.CSIBlockVolume, true)()
|
||||
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.CSIDriverRegistry, true)()
|
||||
plug, tmpDir := newTestPlugin(t, nil)
|
||||
defer os.RemoveAll(tmpDir)
|
||||
fakeClient := fakeclient.NewSimpleClientset()
|
||||
attachRequired := false
|
||||
fakeDriver := &v1beta1.CSIDriver{
|
||||
ObjectMeta: meta.ObjectMeta{
|
||||
Name: testDriver,
|
||||
},
|
||||
Spec: v1beta1.CSIDriverSpec{
|
||||
AttachRequired: &attachRequired,
|
||||
},
|
||||
}
|
||||
_, err := plug.host.GetKubeClient().StorageV1beta1().CSIDrivers().Create(fakeDriver)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to create a fakeDriver: %v", err)
|
||||
}
|
||||
|
||||
host := volumetest.NewFakeVolumeHostWithCSINodeName(
|
||||
tmpDir,
|
||||
fakeClient,
|
||||
nil,
|
||||
"fakeNode",
|
||||
nil,
|
||||
)
|
||||
plug.host = host
|
||||
csiMapper, _, _, err := prepareBlockMapperTest(plug, "test-pv", t)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to make a new Mapper: %v", err)
|
||||
}
|
||||
csiMapper.csiClient = setupClient(t, true)
|
||||
devicePath, err := csiMapper.SetUpDevice()
|
||||
if err != nil {
|
||||
t.Fatalf("mapper failed to SetupDevice: %v", err)
|
||||
}
|
||||
globalMapPath, err := csiMapper.GetGlobalMapPath(csiMapper.spec)
|
||||
if err != nil {
|
||||
t.Fatalf("mapper failed to GetGlobalMapPath: %v", err)
|
||||
}
|
||||
|
||||
// Actual SetupDevice should create a symlink to or a bind mout of device in devicePath.
|
||||
// Create dummy file there before calling MapDevice to test it properly.
|
||||
fd, err := os.Create(devicePath)
|
||||
if err != nil {
|
||||
t.Fatalf("mapper failed to create dummy file in devicePath: %v", err)
|
||||
}
|
||||
if err := fd.Close(); err != nil {
|
||||
t.Fatalf("mapper failed to close dummy file in devicePath: %v", err)
|
||||
}
|
||||
|
||||
// Map device to global and pod device map path
|
||||
volumeMapPath, volName := csiMapper.GetPodDeviceMapPath()
|
||||
err = csiMapper.MapDevice(devicePath, globalMapPath, volumeMapPath, volName, csiMapper.podUID)
|
||||
if err != nil {
|
||||
t.Fatalf("mapper failed to GetGlobalMapPath: %v", err)
|
||||
}
|
||||
|
||||
// Check if symlink {globalMapPath}/{podUID} exists
|
||||
globalMapFilePath := filepath.Join(globalMapPath, string(csiMapper.podUID))
|
||||
if _, err := os.Stat(globalMapFilePath); err != nil {
|
||||
if os.IsNotExist(err) {
|
||||
t.Errorf("mapper.MapDevice failed, symlink in globalMapPath not created: %v", err)
|
||||
t.Errorf("mapper.MapDevice devicePath:%v, globalMapPath: %v, globalMapFilePath: %v",
|
||||
devicePath, globalMapPath, globalMapFilePath)
|
||||
} else {
|
||||
t.Errorf("mapper.MapDevice failed: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
// Check if symlink {volumeMapPath}/{volName} exists
|
||||
volumeMapFilePath := filepath.Join(volumeMapPath, volName)
|
||||
if _, err := os.Stat(volumeMapFilePath); err != nil {
|
||||
if os.IsNotExist(err) {
|
||||
t.Errorf("mapper.MapDevice failed, symlink in volumeMapPath not created: %v", err)
|
||||
} else {
|
||||
t.Errorf("mapper.MapDevice failed: %v", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestBlockMapperTearDownDevice(t *testing.T) {
|
||||
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.CSIBlockVolume, true)()
|
||||
|
||||
|
Reference in New Issue
Block a user