Add storage tests for Azure File in-tree storage plugin

This commit is contained in:
Fabio Bertinatto
2022-03-22 15:21:28 -03:00
parent 4348c8ecaf
commit b5cff9219d
7 changed files with 178 additions and 2 deletions

View File

@@ -2025,3 +2025,112 @@ func cleanUpVolumeServerWithSecret(f *framework.Framework, serverPod *v1.Pod, se
framework.Logf("Server pod delete failed: %v", err)
}
}
// Azure File
type azureFileDriver struct {
driverInfo storageframework.DriverInfo
}
type azureFileVolume struct {
accountName string
shareName string
secretName string
}
var _ storageframework.TestDriver = &azureFileDriver{}
var _ storageframework.PreprovisionedVolumeTestDriver = &azureFileDriver{}
var _ storageframework.InlineVolumeTestDriver = &azureFileDriver{}
var _ storageframework.PreprovisionedPVTestDriver = &azureFileDriver{}
var _ storageframework.DynamicPVTestDriver = &azureFileDriver{}
// InitAzureFileDriver returns azureFileDriver that implements TestDriver interface
func InitAzureFileDriver() storageframework.TestDriver {
return &azureFileDriver{
driverInfo: storageframework.DriverInfo{
Name: "azure-file",
InTreePluginName: "kubernetes.io/azure-file",
MaxFileSize: storageframework.FileSizeLarge,
SupportedSizeRange: e2evolume.SizeRange{
Min: "1Gi",
},
SupportedFsType: sets.NewString(
"", // Default fsType
),
Capabilities: map[storageframework.Capability]bool{
storageframework.CapPersistence: true,
storageframework.CapExec: true,
storageframework.CapRWX: true,
storageframework.CapMultiPODs: true,
storageframework.CapControllerExpansion: true,
storageframework.CapNodeExpansion: true,
},
},
}
}
func (a *azureFileDriver) GetDriverInfo() *storageframework.DriverInfo {
return &a.driverInfo
}
func (a *azureFileDriver) SkipUnsupportedTest(pattern storageframework.TestPattern) {
e2eskipper.SkipUnlessProviderIs("azure")
}
func (a *azureFileDriver) GetVolumeSource(readOnly bool, fsType string, e2evolume storageframework.TestVolume) *v1.VolumeSource {
av, ok := e2evolume.(*azureFileVolume)
framework.ExpectEqual(ok, true, "Failed to cast test volume to Azure test volume")
volSource := v1.VolumeSource{
AzureFile: &v1.AzureFileVolumeSource{
SecretName: av.secretName,
ShareName: av.shareName,
ReadOnly: readOnly,
},
}
return &volSource
}
func (a *azureFileDriver) GetPersistentVolumeSource(readOnly bool, fsType string, e2evolume storageframework.TestVolume) (*v1.PersistentVolumeSource, *v1.VolumeNodeAffinity) {
av, ok := e2evolume.(*azureFileVolume)
framework.ExpectEqual(ok, true, "Failed to cast test volume to Azure test volume")
pvSource := v1.PersistentVolumeSource{
AzureFile: &v1.AzureFilePersistentVolumeSource{
SecretName: av.secretName,
ShareName: av.shareName,
SecretNamespace: nil,
ReadOnly: readOnly,
},
}
return &pvSource, nil
}
func (a *azureFileDriver) GetDynamicProvisionStorageClass(config *storageframework.PerTestConfig, fsType string) *storagev1.StorageClass {
provisioner := "kubernetes.io/azure-file"
parameters := map[string]string{}
ns := config.Framework.Namespace.Name
immediateBinding := storagev1.VolumeBindingImmediate
return storageframework.GetStorageClass(provisioner, parameters, &immediateBinding, ns)
}
func (a *azureFileDriver) PrepareTest(f *framework.Framework) (*storageframework.PerTestConfig, func()) {
return &storageframework.PerTestConfig{
Driver: a,
Prefix: "azure-file",
Framework: f,
}, func() {}
}
func (a *azureFileDriver) CreateVolume(config *storageframework.PerTestConfig, volType storageframework.TestVolType) storageframework.TestVolume {
ginkgo.By("creating a test azure file volume")
accountName, shareName, err := e2epv.CreateShare()
framework.ExpectNoError(err)
return &azureFileVolume{
accountName: accountName,
shareName: shareName,
secretName: "",
}
}
func (v *azureFileVolume) DeleteVolume() {
err := e2epv.DeleteShare(v.accountName, v.shareName)
framework.ExpectNoError(err)
}