From 9c53a34317b93836ed76952f5cf697e1831caeb4 Mon Sep 17 00:00:00 2001
From: Andrew Melnick <meln5674@kettering.edu>
Date: Fri, 15 Dec 2023 09:31:14 -0700
Subject: [PATCH] Add E2E test for multiple storage classes

---
 test/pod_test.go                              |  6 +++++
 .../kustomization.yaml                        | 14 +++++++++++
 .../local-path-config.yaml                    | 23 +++++++++++++++++++
 .../multiple-storage-classes/pod.yaml         | 23 +++++++++++++++++++
 .../multiple-storage-classes/pvc.yaml         | 23 +++++++++++++++++++
 .../storage-class-shared.yaml                 |  8 +++++++
 6 files changed, 97 insertions(+)
 create mode 100644 test/testdata/multiple-storage-classes/kustomization.yaml
 create mode 100644 test/testdata/multiple-storage-classes/local-path-config.yaml
 create mode 100644 test/testdata/multiple-storage-classes/pod.yaml
 create mode 100644 test/testdata/multiple-storage-classes/pvc.yaml
 create mode 100644 test/testdata/multiple-storage-classes/storage-class-shared.yaml

diff --git a/test/pod_test.go b/test/pod_test.go
index 5f0b0b3a..3d129ebb 100644
--- a/test/pod_test.go
+++ b/test/pod_test.go
@@ -144,6 +144,12 @@ func (p *PodTestSuite) TestPodWithSubpath() {
 	runTest(p, []string{p.config.IMAGE}, "ready", hostPathVolumeType)
 }
 
+func (p *PodTestSuite) TestPodWithMultipleStorageClasses() {
+	p.kustomizeDir = "multiple-storage-classes"
+
+	runTest(p, []string{p.config.IMAGE}, "ready", hostPathVolumeType)
+}
+
 func runTest(p *PodTestSuite, images []string, waitCondition, volumeType string) {
 	kustomizeDir := testdataFile(p.kustomizeDir)
 
diff --git a/test/testdata/multiple-storage-classes/kustomization.yaml b/test/testdata/multiple-storage-classes/kustomization.yaml
new file mode 100644
index 00000000..6efccacb
--- /dev/null
+++ b/test/testdata/multiple-storage-classes/kustomization.yaml
@@ -0,0 +1,14 @@
+apiVersion: kustomize.config.k8s.io/v1beta1
+kind: Kustomization
+resources:
+- ../../../deploy
+- storage-class-shared.yaml
+- pod.yaml
+- pvc.yaml
+patchesStrategicMerge:
+- local-path-config.yaml
+commonLabels:
+  app: local-path-provisioner
+images:
+- name: rancher/local-path-provisioner
+  newTag: dev
diff --git a/test/testdata/multiple-storage-classes/local-path-config.yaml b/test/testdata/multiple-storage-classes/local-path-config.yaml
new file mode 100644
index 00000000..91efc9ba
--- /dev/null
+++ b/test/testdata/multiple-storage-classes/local-path-config.yaml
@@ -0,0 +1,23 @@
+kind: ConfigMap
+apiVersion: v1
+metadata:
+  name: local-path-config
+  namespace: local-path-storage
+data:
+  config.json: |-
+    {
+            "storageClassConfigs":{
+                   "local-path": {
+                          "nodePathMap": [
+                          {
+                                  "node":"DEFAULT_PATH_FOR_NON_LISTED_NODES",
+                                  "paths":["/opt/local-path-provisioner"]
+                          }
+                          ]
+                   },
+                   "local-path-shared": {
+                          "sharedFilesystemPath": "/opt/local-path-provisioner-shared"
+                   }
+            }
+    }
+
diff --git a/test/testdata/multiple-storage-classes/pod.yaml b/test/testdata/multiple-storage-classes/pod.yaml
new file mode 100644
index 00000000..25ea1b8c
--- /dev/null
+++ b/test/testdata/multiple-storage-classes/pod.yaml
@@ -0,0 +1,23 @@
+apiVersion: v1
+kind: Pod
+metadata:
+  name: volume-test
+spec:
+  containers:
+  - name: volume-test
+    image: nginx:stable-alpine
+    imagePullPolicy: IfNotPresent
+    volumeMounts:
+    - name: volv
+      mountPath: /data
+    - name: volv-shared
+      mountPath: /shared-data
+    ports:
+    - containerPort: 80
+  volumes:
+  - name: volv
+    persistentVolumeClaim:
+      claimName: local-path-pvc
+  - name: volv-shared
+    persistentVolumeClaim:
+      claimName: local-path-shared-pvc
diff --git a/test/testdata/multiple-storage-classes/pvc.yaml b/test/testdata/multiple-storage-classes/pvc.yaml
new file mode 100644
index 00000000..453688b1
--- /dev/null
+++ b/test/testdata/multiple-storage-classes/pvc.yaml
@@ -0,0 +1,23 @@
+apiVersion: v1
+kind: PersistentVolumeClaim
+metadata:
+  name: local-path-pvc
+spec:
+  accessModes:
+    - ReadWriteOnce
+  storageClassName: local-path
+  resources:
+    requests:
+      storage: 128Mi
+---
+apiVersion: v1
+kind: PersistentVolumeClaim
+metadata:
+  name: local-path-shared-pvc
+spec:
+  accessModes:
+    - ReadWriteMany
+  storageClassName: local-path-shared
+  resources:
+    requests:
+      storage: 128Mi
diff --git a/test/testdata/multiple-storage-classes/storage-class-shared.yaml b/test/testdata/multiple-storage-classes/storage-class-shared.yaml
new file mode 100644
index 00000000..6f4a362c
--- /dev/null
+++ b/test/testdata/multiple-storage-classes/storage-class-shared.yaml
@@ -0,0 +1,8 @@
+apiVersion: storage.k8s.io/v1
+kind: StorageClass
+metadata:
+  name: local-path-shared
+provisioner: rancher.io/local-path
+volumeBindingMode: Immediate
+reclaimPolicy: Delete
+
-- 
GitLab