1
16
17 package storageclasses
18
19
20
21 import (
22 "context"
23 "testing"
24
25 v1 "k8s.io/api/core/v1"
26 storage "k8s.io/api/storage/v1"
27 "k8s.io/apimachinery/pkg/api/resource"
28 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
29 clientset "k8s.io/client-go/kubernetes"
30 kubeapiservertesting "k8s.io/kubernetes/cmd/kube-apiserver/app/testing"
31 "k8s.io/kubernetes/test/integration/framework"
32 )
33
34 const provisionerPluginName = "kubernetes.io/mock-provisioner"
35
36
37 func TestStorageClasses(t *testing.T) {
38 server := kubeapiservertesting.StartTestServerOrDie(t, nil, []string{"--disable-admission-plugins=StorageObjectInUseProtection"}, framework.SharedEtcd())
39 defer server.TearDownFn()
40
41 client := clientset.NewForConfigOrDie(server.ClientConfig)
42
43 ns := framework.CreateNamespaceOrDie(client, "storageclass", t)
44 defer framework.DeleteNamespaceOrDie(client, ns, t)
45
46 DoTestStorageClasses(t, client, ns)
47 }
48
49
50 func DoTestStorageClasses(t *testing.T, client clientset.Interface, ns *v1.Namespace) {
51
52 s := storage.StorageClass{
53 TypeMeta: metav1.TypeMeta{
54 Kind: "StorageClass",
55 },
56 ObjectMeta: metav1.ObjectMeta{
57 Name: "gold",
58 },
59 Provisioner: provisionerPluginName,
60 }
61
62 if _, err := client.StorageV1().StorageClasses().Create(context.TODO(), &s, metav1.CreateOptions{}); err != nil {
63 t.Errorf("unable to create test storage class: %v", err)
64 }
65 defer deleteStorageClassOrErrorf(t, client, s.Namespace, s.Name)
66
67
68 classGold := "gold"
69 pvc := &v1.PersistentVolumeClaim{
70 ObjectMeta: metav1.ObjectMeta{
71 Name: "XXX",
72 Namespace: ns.Name,
73 },
74 Spec: v1.PersistentVolumeClaimSpec{
75 Resources: v1.VolumeResourceRequirements{Requests: v1.ResourceList{v1.ResourceName(v1.ResourceStorage): resource.MustParse("1G")}},
76 AccessModes: []v1.PersistentVolumeAccessMode{v1.ReadWriteOnce},
77 StorageClassName: &classGold,
78 },
79 }
80
81 pvc.ObjectMeta.Name = "uses-storageclass"
82 if _, err := client.CoreV1().PersistentVolumeClaims(ns.Name).Create(context.TODO(), pvc, metav1.CreateOptions{}); err != nil {
83 t.Errorf("Failed to create pvc: %v", err)
84 }
85 defer deletePersistentVolumeClaimOrErrorf(t, client, ns.Name, pvc.Name)
86 }
87
88 func deleteStorageClassOrErrorf(t *testing.T, c clientset.Interface, ns, name string) {
89 if err := c.StorageV1().StorageClasses().Delete(context.TODO(), name, metav1.DeleteOptions{}); err != nil {
90 t.Errorf("unable to delete storage class %v: %v", name, err)
91 }
92 }
93
94 func deletePersistentVolumeClaimOrErrorf(t *testing.T, c clientset.Interface, ns, name string) {
95 if err := c.CoreV1().PersistentVolumeClaims(ns).Delete(context.TODO(), name, metav1.DeleteOptions{}); err != nil {
96 t.Errorf("unable to delete persistent volume claim %v: %v", name, err)
97 }
98 }
99
View as plain text