(t *testing.T)
| 122 | } |
| 123 | |
| 124 | func TestDrainSuccess(t *testing.T) { |
| 125 | isOwnerController := true |
| 126 | client := fake.NewSimpleClientset() |
| 127 | _, err := client.CoreV1().Nodes().Create( |
| 128 | context.Background(), |
| 129 | &v1.Node{ |
| 130 | ObjectMeta: metav1.ObjectMeta{Name: nodeName}, |
| 131 | }, |
| 132 | metav1.CreateOptions{}) |
| 133 | h.Ok(t, err) |
| 134 | |
| 135 | _, err = client.CoreV1().Pods("default").Create( |
| 136 | context.Background(), |
| 137 | &v1.Pod{ |
| 138 | ObjectMeta: metav1.ObjectMeta{ |
| 139 | GenerateName: "cool-app-pod-", |
| 140 | OwnerReferences: []metav1.OwnerReference{ |
| 141 | { |
| 142 | APIVersion: "apps/v1", |
| 143 | Name: "cool-app", |
| 144 | Kind: "ReplicaSet", |
| 145 | Controller: &isOwnerController, |
| 146 | }, |
| 147 | }, |
| 148 | }, |
| 149 | Spec: v1.PodSpec{ |
| 150 | NodeName: nodeName, |
| 151 | }, |
| 152 | }, |
| 153 | metav1.CreateOptions{}) |
| 154 | h.Ok(t, err) |
| 155 | |
| 156 | fakeRecorder := record.NewFakeRecorder(recorderBufferSize) |
| 157 | |
| 158 | drainHelper := getDrainHelper(client) |
| 159 | drainHelper.DisableEviction = true |
| 160 | tNode := getNode(t, drainHelper) |
| 161 | err = tNode.CordonAndDrain(nodeName, "cordonReason", fakeRecorder) |
| 162 | close(fakeRecorder.Events) |
| 163 | h.Ok(t, err) |
| 164 | expectedEventArrived := false |
| 165 | for event := range fakeRecorder.Events { |
| 166 | if strings.Contains(event, "Normal PodEviction Pod evicted due to node drain") { |
| 167 | expectedEventArrived = true |
| 168 | } |
| 169 | } |
| 170 | h.Assert(t, expectedEventArrived, "PodEvicted event was not emitted") |
| 171 | } |
| 172 | |
| 173 | func TestDrainCordonNodeFailure(t *testing.T) { |
| 174 | fakeRecorder := record.NewFakeRecorder(recorderBufferSize) |
nothing calls this directly
no test coverage detected