Skip to content

Commit 167b81e

Browse files
Skip for gcsfuse 3.7
1 parent 154cd99 commit 167b81e

File tree

7 files changed

+109
-17
lines changed

7 files changed

+109
-17
lines changed

test/e2e/specs/specs.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ import (
2525
"strings"
2626
"time"
2727

28+
"local/test/e2e/utils"
29+
2830
"github.com/googlecloudplatform/gcs-fuse-csi-driver/pkg/util"
2931
"github.com/googlecloudplatform/gcs-fuse-csi-driver/pkg/webhook"
3032
"github.com/onsi/gomega"
@@ -34,6 +36,7 @@ import (
3436
"k8s.io/apimachinery/pkg/api/resource"
3537
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3638
"k8s.io/apimachinery/pkg/fields"
39+
"k8s.io/apimachinery/pkg/util/version"
3740
"k8s.io/apimachinery/pkg/util/wait"
3841

3942
clientset "k8s.io/client-go/kubernetes"
@@ -1121,6 +1124,18 @@ func GetGCSFuseVersion(ctx context.Context, f *framework.Framework) string {
11211124
return l[2]
11221125
}
11231126

1127+
func GCSFuseVersionAndBranch(ctx context.Context, f *framework.Framework) (*version.Version, string) {
1128+
vStr := GetGCSFuseVersion(ctx, f)
1129+
v, branch := utils.GCSFuseBranch(vStr)
1130+
if v == nil {
1131+
// This happens for master branch builds. We still need to parse the version.
1132+
var err error
1133+
v, err = version.ParseSemantic(vStr)
1134+
framework.ExpectNoError(err, "Failed to parse GCS Fuse version string %s into version.Version", vStr)
1135+
}
1136+
return v, branch
1137+
}
1138+
11241139
func DeployIstioSidecar(namespace string) {
11251140
runKubectlOrDie(namespace, "apply", "--filename", "./specs/istio-sidecar.yaml")
11261141
}

test/e2e/specs/testdriver.go

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ import (
3838
storagev1 "k8s.io/api/storage/v1"
3939
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
4040
"k8s.io/apimachinery/pkg/util/sets"
41+
"k8s.io/apimachinery/pkg/util/version"
4142
e2eframework "k8s.io/kubernetes/test/e2e/framework"
4243
e2eskipper "k8s.io/kubernetes/test/e2e/framework/skipper"
4344
storageframework "k8s.io/kubernetes/test/e2e/storage/framework"
@@ -55,6 +56,8 @@ type GCSFuseCSITestDriver struct {
5556
EnableHierarchicalNamespace bool
5657
EnableZB bool // Enable Zonal Buckets
5758
storageService *storage.Service // Client to interact with GCS
59+
gcsfuseVersion *version.Version
60+
gcsfuseBranch string
5861
}
5962

6063
type gcsVolume struct {
@@ -76,7 +79,7 @@ func InitGCSFuseCSITestDriver(c clientset.Interface, m metadata.Service, bl stri
7679
e2eframework.Failf("Failed to set up storage service manager: %v", err)
7780
}
7881

79-
return &GCSFuseCSITestDriver{
82+
testDriver := &GCSFuseCSITestDriver{
8083
driverInfo: storageframework.DriverInfo{
8184
Name: driver.DefaultName,
8285
MaxFileSize: storageframework.FileSizeLarge,
@@ -98,6 +101,8 @@ func InitGCSFuseCSITestDriver(c clientset.Interface, m metadata.Service, bl stri
98101
EnableHierarchicalNamespace: enableHierarchicalNamespace || enableZB,
99102
EnableZB: enableZB, // Enable Zonal Buckets
100103
}
104+
105+
return testDriver
101106
}
102107

103108
const (
@@ -244,6 +249,10 @@ func (n *GCSFuseCSITestDriver) CreateVolume(ctx context.Context, config *storage
244249
if n.ClientProtocol == "grpc" {
245250
mountOptions += ",client-protocol=grpc"
246251
}
252+
if n.gcsfuseVersion == nil || n.gcsfuseBranch == "" {
253+
n.gcsfuseVersion, n.gcsfuseBranch = GCSFuseVersionAndBranch(ctx, config.Framework)
254+
}
255+
kernelParamsSupported := n.gcsfuseBranch == utils.MasterBranchName || n.gcsfuseVersion.AtLeast(version.MustParseSemantic(utils.MinGCSFuseKernelParamsVersion))
247256

248257
switch config.Prefix {
249258
case NonRootVolumePrefix:
@@ -259,18 +268,18 @@ func (n *GCSFuseCSITestDriver) CreateVolume(ctx context.Context, config *storage
259268
mountOptions += ",only-dir=" + dirPath
260269
case EnableFileCachePrefix, EnableFileCacheForceNewBucketPrefix:
261270
v.fileCacheCapacity = "100Mi"
262-
if n.EnableZB {
271+
if n.EnableZB && kernelParamsSupported {
263272
mountOptions += ",file-system:enable-kernel-reader:false"
264273
}
265274
case EnableFileCacheAndMetricsPrefix, EnableFileCacheForceNewBucketAndMetricsPrefix:
266275
v.fileCacheCapacity = "100Mi"
267276
v.enableMetrics = true
268-
if n.EnableZB {
277+
if n.EnableZB && kernelParamsSupported {
269278
mountOptions += ",file-system:enable-kernel-reader:false"
270279
}
271280
case EnableFileCacheWithLargeCapacityPrefix:
272281
v.fileCacheCapacity = "2Gi"
273-
if n.EnableZB {
282+
if n.EnableZB && kernelParamsSupported {
274283
mountOptions += ",file-system:enable-kernel-reader:false"
275284
}
276285
case SkipCSIBucketAccessCheckPrefix, SkipCSIBucketAccessCheckAndFakeVolumePrefix, SkipCSIBucketAccessCheckAndInvalidVolumePrefix:

test/e2e/testsuites/gcsfuse_integration.go

Lines changed: 50 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,8 @@ func (t *gcsFuseCSIGCSFuseIntegrationTestSuite) DefineTests(driver storageframew
160160
err := utilerrors.NewAggregate(cleanUpErrs)
161161
framework.ExpectNoError(err, "while cleaning up")
162162
}
163+
gcsfuseVersion, branch := specs.GCSFuseVersionAndBranch(gcsfuseVersionStr)
164+
kernelParamsSupported := branch == utils.MasterBranchName || gcsfuseVersion.AtLeast(version.MustParseSemantic(utils.MinGCSFuseKernelParamsVersion))
163165

164166
// skipTestOrProceedWithBranch works by skipping tests for gcsfuse versions that do not support them.
165167
// These tests run against all non-managed driver versions, and for selected gke managed driver versions. This is because when
@@ -234,6 +236,9 @@ func (t *gcsFuseCSIGCSFuseIntegrationTestSuite) DefineTests(driver storageframew
234236
if gcsfuseVersionStr == "" {
235237
gcsfuseVersionStr = specs.GetGCSFuseVersion(ctx, f)
236238
}
239+
gcsfuseVersion := version.MustParseSemantic(gcsfuseVersionStr)
240+
stripUnsupportedMountOptions(&mountOptions, gcsfuseVersion)
241+
237242
ginkgo.By(fmt.Sprintf("Running integration test %v with GCSFuse version %v", testName, gcsfuseVersionStr))
238243
gcsfuseTestBranch := skipTestOrProceedWithBranch(gcsfuseVersionStr, testName)
239244
ginkgo.By(fmt.Sprintf("Running integration test %v with GCSFuse branch %v", testName, gcsfuseTestBranch))
@@ -331,7 +336,6 @@ func (t *gcsFuseCSIGCSFuseIntegrationTestSuite) DefineTests(driver storageframew
331336

332337
ginkgo.By("Getting gcsfuse testsuite go version")
333338

334-
gcsfuseVersion := version.MustParseSemantic(gcsfuseVersionStr)
335339
gcsfuseGoVersionCommand := getGoParsingCommand(*gcsfuseVersion, gcsfuseTestBranch)
336340

337341
gcsfuseTestSuiteVersion := tPod.VerifyExecInPodSucceedWithOutput(f, specs.TesterContainerName, gcsfuseGoVersionCommand)
@@ -560,8 +564,11 @@ func (t *gcsFuseCSIGCSFuseIntegrationTestSuite) DefineTests(driver storageframew
560564
}
561565
init()
562566
defer cleanup()
563-
564-
gcsfuseIntegrationTest(testNameReadLargeFiles, false, "implicit-dirs=true", "file-system:enable-kernel-reader:false")
567+
mountOptions := []string{"implicit-dirs=true"}
568+
if kernelParamsSupported {
569+
mountOptions = append(mountOptions, "file-system:enable-kernel-reader:false")
570+
}
571+
gcsfuseIntegrationTest(testNameReadLargeFiles, false, mountOptions...)
565572
})
566573

567574
ginkgo.It(testNamePrefixSucceed+testNameWriteLargeFiles+testNameSuffix(1), func() {
@@ -624,7 +631,11 @@ func (t *gcsFuseCSIGCSFuseIntegrationTestSuite) DefineTests(driver storageframew
624631
init()
625632
defer cleanup()
626633

627-
gcsfuseIntegrationTest(testNameConcurrentOperations, false, "implicit-dirs=true", "kernel-list-cache-ttl-secs=-1", "file-system:enable-kernel-reader:false")
634+
mountOptions := []string{"implicit-dirs=true", "kernel-list-cache-ttl-secs=-1"}
635+
if kernelParamsSupported {
636+
mountOptions = append(mountOptions, "file-system:enable-kernel-reader:false")
637+
}
638+
gcsfuseIntegrationTest(testNameConcurrentOperations, false, mountOptions...)
628639
})
629640

630641
ginkgo.It(testNamePrefixSucceed+testNameKernelListCache+testNameSuffix(1), func() {
@@ -749,43 +760,71 @@ func (t *gcsFuseCSIGCSFuseIntegrationTestSuite) DefineTests(driver storageframew
749760
ginkgo.It(testNamePrefixSucceed+testNameInactiveStreamTimeout+testNameSuffix(1), func() {
750761
init()
751762
defer cleanup()
752-
gcsfuseIntegrationTest(testNameInactiveStreamTimeout+":TestTimeoutDisabledSuite", false, "read-inactive-stream-timeout=0s", "file-system:enable-kernel-reader:false", "logging:format:json", fmt.Sprintf("logging:file-path:%s", inactive_stream_timeout_log_file), "log-severity=trace")
763+
mountOptions := []string{"read-inactive-stream-timeout=0s", "logging:format:json", fmt.Sprintf("logging:file-path:%s", inactive_stream_timeout_log_file), "log-severity=trace"}
764+
if kernelParamsSupported {
765+
mountOptions = append(mountOptions, "file-system:enable-kernel-reader:false")
766+
}
767+
gcsfuseIntegrationTest(testNameInactiveStreamTimeout+":TestTimeoutDisabledSuite", false, mountOptions...)
753768
})
754769

755770
ginkgo.It(testNamePrefixSucceed+testNameInactiveStreamTimeout+testNameSuffix(2), func() {
756771
init()
757772
defer cleanup()
758-
gcsfuseIntegrationTest(testNameInactiveStreamTimeout+":TestTimeoutEnabledSuite/TestReaderCloses", false, "read-inactive-stream-timeout=1s", "file-system:enable-kernel-reader:false", "logging:format:json", fmt.Sprintf("logging:file-path:%s", inactive_stream_timeout_log_file), "log-severity=trace")
773+
mountOptions := []string{"read-inactive-stream-timeout=1s", "logging:format:json", fmt.Sprintf("logging:file-path:%s", inactive_stream_timeout_log_file), "log-severity=trace"}
774+
if kernelParamsSupported {
775+
mountOptions = append(mountOptions, "file-system:enable-kernel-reader:false")
776+
}
777+
gcsfuseIntegrationTest(testNameInactiveStreamTimeout+":TestTimeoutEnabledSuite/TestReaderCloses", false, mountOptions...)
759778
})
760779

761780
ginkgo.It(testNamePrefixSucceed+testNameInactiveStreamTimeout+testNameSuffix(3), func() {
762781
init()
763782
defer cleanup()
764-
gcsfuseIntegrationTest(testNameInactiveStreamTimeout+":TestTimeoutEnabledSuite/TestReaderStaysOpenWithinTimeout", false, "read-inactive-stream-timeout=1s", "file-system:enable-kernel-reader:false", "logging:format:json", fmt.Sprintf("logging:file-path:%s", inactive_stream_timeout_log_file), "log-severity=trace")
783+
mountOptions := []string{"read-inactive-stream-timeout=1s", "logging:format:json", fmt.Sprintf("logging:file-path:%s", inactive_stream_timeout_log_file), "log-severity=trace"}
784+
if kernelParamsSupported {
785+
mountOptions = append(mountOptions, "file-system:enable-kernel-reader:false")
786+
}
787+
gcsfuseIntegrationTest(testNameInactiveStreamTimeout+":TestTimeoutEnabledSuite/TestReaderStaysOpenWithinTimeout", false, mountOptions...)
765788
})
766789

767790
ginkgo.It(testNamePrefixSucceed+testNameBufferedReads+testNameSuffix(1), func() {
768791
init()
769792
defer cleanup()
770-
gcsfuseIntegrationTest(testNameBufferedReads+":TestSequentialReadSuite", false, "enable-buffered-read", "file-system:enable-kernel-reader:false", "read-block-size-mb=8", "read-max-blocks-per-handle=20", "read-start-blocks-per-handle=1", "read-min-blocks-per-handle=2", "logging:format:json", fmt.Sprintf("logging:file-path:%s", buffered_reads_log_file), "log-severity=trace")
793+
mountOptions := []string{"enable-buffered-read", "read-block-size-mb=8", "read-max-blocks-per-handle=20", "read-start-blocks-per-handle=1", "read-min-blocks-per-handle=2", "logging:format:json", fmt.Sprintf("logging:file-path:%s", buffered_reads_log_file), "log-severity=trace"}
794+
if kernelParamsSupported {
795+
mountOptions = append(mountOptions, "file-system:enable-kernel-reader:false")
796+
}
797+
gcsfuseIntegrationTest(testNameBufferedReads+":TestSequentialReadSuite", false, mountOptions...)
771798
})
772799

773800
ginkgo.It(testNamePrefixSucceed+testNameBufferedReads+testNameSuffix(2), func() {
774801
init()
775802
defer cleanup()
776-
gcsfuseIntegrationTest(testNameBufferedReads+":TestFallbackSuites/TestRandomRead_LargeFile_Fallback", false, "enable-buffered-read", "file-system:enable-kernel-reader:false", "read-block-size-mb=8", "read-max-blocks-per-handle=20", "read-start-blocks-per-handle=2", "read-min-blocks-per-handle=2", "logging:format:json", fmt.Sprintf("logging:file-path:%s", buffered_reads_log_file), "log-severity=trace")
803+
mountOptions := []string{"enable-buffered-read", "read-block-size-mb=8", "read-max-blocks-per-handle=20", "read-start-blocks-per-handle=2", "read-min-blocks-per-handle=2", "logging:format:json", fmt.Sprintf("logging:file-path:%s", buffered_reads_log_file), "log-severity=trace"}
804+
if kernelParamsSupported {
805+
mountOptions = append(mountOptions, "file-system:enable-kernel-reader:false")
806+
}
807+
gcsfuseIntegrationTest(testNameBufferedReads+":TestFallbackSuites/TestRandomRead_LargeFile_Fallback", false, mountOptions...)
777808
})
778809

779810
ginkgo.It(testNamePrefixSucceed+testNameBufferedReads+testNameSuffix(3), func() {
780811
init()
781812
defer cleanup()
782-
gcsfuseIntegrationTest(testNameBufferedReads+":TestFallbackSuites/TestRandomRead_SmallFile_NoFallback", false, "enable-buffered-read", "file-system:enable-kernel-reader:false", "read-block-size-mb=8", "read-max-blocks-per-handle=20", "read-start-blocks-per-handle=2", "read-min-blocks-per-handle=2", "logging:format:json", fmt.Sprintf("logging:file-path:%s", buffered_reads_log_file), "log-severity=trace")
813+
mountOptions := []string{"enable-buffered-read", "read-block-size-mb=8", "read-max-blocks-per-handle=20", "read-start-blocks-per-handle=2", "read-min-blocks-per-handle=2", "logging:format:json", fmt.Sprintf("logging:file-path:%s", buffered_reads_log_file), "log-severity=trace"}
814+
if kernelParamsSupported {
815+
mountOptions = append(mountOptions, "file-system:enable-kernel-reader:false")
816+
}
817+
gcsfuseIntegrationTest(testNameBufferedReads+":TestFallbackSuites/TestRandomRead_SmallFile_NoFallback", false, mountOptions...)
783818
})
784819

785820
ginkgo.It(testNamePrefixSucceed+testNameBufferedReads+testNameSuffix(4), func() {
786821
init()
787822
defer cleanup()
788-
gcsfuseIntegrationTest(testNameBufferedReads+":TestFallbackSuites/TestNewBufferedReader_InsufficientGlobalPool_NoReaderAdded", false, "enable-buffered-read", "file-system:enable-kernel-reader:false", "read-block-size-mb=8", "read-max-blocks-per-handle=10", "read-start-blocks-per-handle=2", "read-min-blocks-per-handle=2", "read-global-max-blocks=1", "logging:format:json", fmt.Sprintf("logging:file-path:%s", buffered_reads_log_file), "log-severity=trace")
823+
mountOptions := []string{"enable-buffered-read", "read-block-size-mb=8", "read-max-blocks-per-handle=10", "read-start-blocks-per-handle=2", "read-min-blocks-per-handle=2", "read-global-max-blocks=1", "logging:format:json", fmt.Sprintf("logging:file-path:%s", buffered_reads_log_file), "log-severity=trace"}
824+
if kernelParamsSupported {
825+
mountOptions = append(mountOptions, "file-system:enable-kernel-reader:false")
826+
}
827+
gcsfuseIntegrationTest(testNameBufferedReads+":TestFallbackSuites/TestNewBufferedReader_InsufficientGlobalPool_NoReaderAdded", false, mountOptions...)
789828
})
790829

791830
ginkgo.It(testNamePrefixSucceed+testNameRenameSymlink+testNameSuffix(1), func() {

test/e2e/testsuites/gcsfuse_integration_file_cache.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,8 +143,12 @@ func (t *gcsFuseCSIGCSFuseIntegrationFileCacheTestSuite) DefineTests(driver stor
143143
}
144144
}
145145
tPod.SetupCacheVolumeMount("/tmp/"+cacheDir, ".volumes/"+volumeName)
146+
mountOptions = append(mountOptions, "logging:file-path:/gcsfuse-tmp/log.json", "logging:format:json", "logging:severity:trace")
146147

147-
mountOptions = append(mountOptions, "file-system:enable-kernel-reader:false", "logging:file-path:/gcsfuse-tmp/log.json", "logging:format:json", "logging:severity:trace")
148+
kernelParamsSupported := gcsfuseTestBranch == utils.MasterBranchName || gcsfuseVersion.AtLeast(version.MustParseSemantic(utils.MinGCSFuseKernelParamsVersion))
149+
if kernelParamsSupported {
150+
mountOptions = append(mountOptions, "file-system:enable-kernel-reader:false")
151+
}
148152

149153
tPod.SetupVolume(l.volumeResource, volumeName, mountPath, readOnly, mountOptions...)
150154
tPod.SetAnnotations(map[string]string{

test/e2e/testsuites/gcsfuse_integration_file_cache_parallel_downloads.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,13 +145,19 @@ func (t *gcsFuseCSIGCSFuseIntegrationFileCacheParallelDownloadsTestSuite) Define
145145
tPod.SetupCacheVolumeMount("/tmp/"+cacheDir, ".volumes/"+volumeName)
146146
mountOptions = append(mountOptions, "logging:file-path:/gcsfuse-tmp/log.json", "logging:format:json", "logging:severity:trace")
147147
mountOptions = append(mountOptions,
148-
"file-system:enable-kernel-reader:false",
149148
"file-cache:enable-parallel-downloads:true",
150149
"file-cache:parallel-downloads-per-file:4",
151150
"file-cache:max-parallel-downloads:-1",
152151
"file-cache:download-chunk-size-mb:3",
153152
"file-cache:enable-crc:true")
154153

154+
kernelParamsSupported := gcsfuseTestBranch == utils.MasterBranchName || gcsfuseVersion.AtLeast(version.MustParseSemantic(utils.MinGCSFuseKernelParamsVersion))
155+
if kernelParamsSupported {
156+
mountOptions = append(mountOptions, "file-system:enable-kernel-reader:false")
157+
}
158+
159+
stripUnsupportedMountOptions(&mountOptions, gcsfuseVersion)
160+
155161
tPod.SetupVolume(l.volumeResource, volumeName, mountPath, readOnly, mountOptions...)
156162
tPod.SetAnnotations(map[string]string{
157163
"gke-gcsfuse/cpu-limit": "1",

test/e2e/testsuites/kernel_params.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,13 @@ import (
2323
"strings"
2424

2525
"local/test/e2e/specs"
26+
"local/test/e2e/utils"
2627

2728
"github.com/onsi/ginkgo/v2"
2829
"github.com/onsi/gomega"
2930
corev1 "k8s.io/api/core/v1"
3031
utilerrors "k8s.io/apimachinery/pkg/util/errors"
32+
"k8s.io/apimachinery/pkg/util/version"
3133
"k8s.io/kubernetes/test/e2e/framework"
3234
e2eskipper "k8s.io/kubernetes/test/e2e/framework/skipper"
3335
e2evolume "k8s.io/kubernetes/test/e2e/framework/volume"
@@ -185,7 +187,22 @@ func (t *gcsFuseCSIKernelParamsTestSuite) DefineTests(driver storageframework.Te
185187
f := framework.NewFrameworkWithCustomTimeouts("kernel-params", storageframework.GetDriverTimeouts(driver))
186188
f.NamespacePodSecurityEnforceLevel = admissionapi.LevelPrivileged
187189

190+
skipIfKernelParamsNotSupported := func(ctx context.Context) {
191+
gcsfuseVersion, branch := specs.GCSFuseVersionAndBranch(ctx, f)
192+
193+
// Running since we are on master branch.
194+
if branch == utils.MasterBranchName {
195+
return
196+
}
197+
// Kernel parameters were introduced in v3.7.0-gke.0.
198+
if !gcsfuseVersion.AtLeast(version.MustParseSemantic(utils.MinGCSFuseKernelParamsVersion)) {
199+
e2eskipper.Skipf("skip kernel params test for unsupported gcsfuse version %s", gcsfuseVersion.String())
200+
}
201+
}
202+
188203
init := func(configPrefix ...string) {
204+
skipIfKernelParamsNotSupported(ctx)
205+
189206
l = local{}
190207
l.config = driver.PrepareTest(ctx, f)
191208
l.config.Prefix = configPrefix[0]

test/e2e/utils/utils.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ import (
2727
"k8s.io/klog/v2"
2828
)
2929

30+
const MinGCSFuseKernelParamsVersion = "v3.7.0-gke.0"
31+
3032
var (
3133
MasterBranchName = "master"
3234

0 commit comments

Comments
 (0)