@@ -20,6 +20,7 @@ import (
20
20
"errors"
21
21
"strings"
22
22
"testing"
23
+ "time"
23
24
24
25
apierrors "k8s.io/apimachinery/pkg/api/errors"
25
26
"k8s.io/apimachinery/pkg/runtime"
@@ -29,6 +30,7 @@ import (
29
30
"k8s.io/client-go/tools/record"
30
31
31
32
"k8s.io/api/core/v1"
33
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
32
34
"k8s.io/client-go/kubernetes/fake"
33
35
corelisters "k8s.io/client-go/listers/core/v1"
34
36
_ "k8s.io/kubernetes/pkg/apis/apps/install"
@@ -128,6 +130,42 @@ func TestStatefulPodControlCreatePodPvcCreateFailure(t *testing.T) {
128
130
}
129
131
}
130
132
}
133
+ func TestStatefulPodControlCreatePodPvcDeleting (t * testing.T ) {
134
+ recorder := record .NewFakeRecorder (10 )
135
+ set := newStatefulSet (3 )
136
+ pod := newStatefulSetPod (set , 0 )
137
+ fakeClient := & fake.Clientset {}
138
+ pvcs := getPersistentVolumeClaims (set , pod )
139
+ pvcIndexer := cache .NewIndexer (cache .MetaNamespaceKeyFunc , cache.Indexers {cache .NamespaceIndex : cache .MetaNamespaceIndexFunc })
140
+ deleteTime := time .Date (2019 , time .January , 1 , 0 , 0 , 0 , 0 , time .UTC )
141
+ for k := range pvcs {
142
+ pvc := pvcs [k ]
143
+ pvc .DeletionTimestamp = & metav1.Time {Time : deleteTime }
144
+ pvcIndexer .Add (& pvc )
145
+ }
146
+ pvcLister := corelisters .NewPersistentVolumeClaimLister (pvcIndexer )
147
+ control := NewRealStatefulPodControl (fakeClient , nil , nil , pvcLister , recorder )
148
+ fakeClient .AddReactor ("create" , "persistentvolumeclaims" , func (action core.Action ) (bool , runtime.Object , error ) {
149
+ create := action .(core.CreateAction )
150
+ return true , create .GetObject (), nil
151
+ })
152
+ fakeClient .AddReactor ("create" , "pods" , func (action core.Action ) (bool , runtime.Object , error ) {
153
+ create := action .(core.CreateAction )
154
+ return true , create .GetObject (), nil
155
+ })
156
+ if err := control .CreateStatefulPod (set , pod ); err == nil {
157
+ t .Error ("Failed to produce error on deleting PVC" )
158
+ }
159
+ events := collectEvents (recorder .Events )
160
+ if eventCount := len (events ); eventCount != 1 {
161
+ t .Errorf ("Deleting PVC: got %d events, but want 1" , eventCount )
162
+ }
163
+ for i := range events {
164
+ if ! strings .Contains (events [i ], v1 .EventTypeWarning ) {
165
+ t .Errorf ("Found unexpected non-warning event %s" , events [i ])
166
+ }
167
+ }
168
+ }
131
169
132
170
type fakeIndexer struct {
133
171
cache.Indexer
0 commit comments