github.com/jenkins-x/jx/v2@v2.1.155/pkg/kube/pod_test.go (about) 1 // +build unit 2 3 package kube_test 4 5 import ( 6 "testing" 7 8 "github.com/jenkins-x/jx/v2/pkg/kube" 9 "github.com/stretchr/testify/assert" 10 v1 "k8s.io/api/core/v1" 11 meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" 12 ) 13 14 func TestGetPodConditionPodReady(t *testing.T) { 15 t.Parallel() 16 17 var condition v1.PodConditionType 18 condition = v1.PodReady 19 20 status := v1.PodStatus{ 21 Phase: v1.PodRunning, 22 Conditions: []v1.PodCondition{ 23 { 24 Type: condition, 25 Status: v1.ConditionTrue, 26 }, 27 }, 28 } 29 30 resStatus, res := kube.GetPodCondition(&status, condition) 31 32 assert.Equal(t, 0, resStatus) 33 assert.Equal(t, condition, res.Type) 34 } 35 36 func TestGetPodConditionFailures(t *testing.T) { 37 t.Parallel() 38 39 var condition v1.PodConditionType 40 condition = v1.PodReady 41 42 status := v1.PodStatus{ 43 Phase: v1.PodRunning, 44 Conditions: []v1.PodCondition{ 45 { 46 Status: v1.ConditionTrue, 47 }, 48 }, 49 } 50 51 resStatus, _ := kube.GetPodCondition(nil, condition) 52 assert.Equal(t, -1, resStatus) 53 54 // Status missing type fails 55 resStatus, _ = kube.GetPodCondition(&status, condition) 56 assert.Equal(t, -1, resStatus) 57 } 58 59 func TestGetPodReadyCondition(t *testing.T) { 60 t.Parallel() 61 62 status := v1.PodStatus{ 63 Phase: v1.PodRunning, 64 Conditions: []v1.PodCondition{ 65 { 66 Type: v1.PodReady, 67 Status: v1.ConditionTrue, 68 }, 69 }, 70 } 71 72 res := kube.GetPodReadyCondition(status) 73 assert.Equal(t, status.Conditions[0].Status, res.Status) 74 assert.Equal(t, status.Conditions[0].Type, res.Type) 75 } 76 77 func TestGetPodReadyConditionFailures(t *testing.T) { 78 t.Parallel() 79 80 status := v1.PodStatus{ 81 Phase: v1.PodRunning, 82 Conditions: []v1.PodCondition{ 83 { 84 Status: v1.ConditionTrue, 85 }, 86 }, 87 } 88 89 var expectedCondition *v1.PodCondition 90 res := kube.GetPodReadyCondition(status) 91 assert.Equal(t, expectedCondition, res) 92 } 93 94 func TestIsPodReadyConditionTrue(t *testing.T) { 95 t.Parallel() 96 97 status := v1.PodStatus{ 98 Phase: v1.PodRunning, 99 Conditions: []v1.PodCondition{ 100 { 101 Type: v1.PodReady, 102 Status: v1.ConditionTrue, 103 }, 104 }, 105 } 106 107 res := kube.IsPodReadyConditionTrue(status) 108 assert.Equal(t, true, res) 109 } 110 111 func TestIsPodReadyConditionTrueFailures(t *testing.T) { 112 t.Parallel() 113 114 status := v1.PodStatus{ 115 Phase: v1.PodRunning, 116 Conditions: []v1.PodCondition{ 117 { 118 Status: v1.ConditionTrue, 119 }, 120 }, 121 } 122 123 res := kube.IsPodReadyConditionTrue(status) 124 assert.Equal(t, false, res) 125 126 status = v1.PodStatus{ 127 Phase: v1.PodRunning, 128 Conditions: []v1.PodCondition{ 129 { 130 Type: v1.PodReady, 131 }, 132 }, 133 } 134 135 res = kube.IsPodReadyConditionTrue(status) 136 assert.Equal(t, false, res) 137 } 138 139 func TestIsPodReady(t *testing.T) { 140 t.Parallel() 141 142 labels := make(map[string]string) 143 labels["app"] = "ians-app" 144 145 pod := &v1.Pod{ 146 ObjectMeta: meta_v1.ObjectMeta{ 147 Name: "web", 148 Labels: labels, 149 Namespace: "jx-testing", 150 }, 151 Spec: v1.PodSpec{ 152 Containers: []v1.Container{ 153 { 154 Name: "web", 155 Image: "nginx:1.12", 156 Ports: []v1.ContainerPort{ 157 { 158 Name: "http", 159 Protocol: v1.ProtocolTCP, 160 ContainerPort: 80, 161 }, 162 }, 163 }, 164 }, 165 }, 166 Status: v1.PodStatus{ 167 Phase: v1.PodRunning, 168 Conditions: []v1.PodCondition{ 169 { 170 Type: v1.PodReady, 171 Status: v1.ConditionTrue, 172 }, 173 }, 174 }, 175 } 176 177 res := kube.IsPodReady(pod) 178 assert.Equal(t, true, res) 179 } 180 181 func TestIsPodReadyFailures(t *testing.T) { 182 t.Parallel() 183 184 labels := make(map[string]string) 185 labels["app"] = "ians-app" 186 187 pod := &v1.Pod{ 188 ObjectMeta: meta_v1.ObjectMeta{ 189 Name: "web", 190 Labels: labels, 191 Namespace: "jx-testing", 192 }, 193 Spec: v1.PodSpec{ 194 Containers: []v1.Container{ 195 { 196 Name: "web", 197 Image: "nginx:1.12", 198 Ports: []v1.ContainerPort{ 199 { 200 Name: "http", 201 Protocol: v1.ProtocolTCP, 202 ContainerPort: 80, 203 }, 204 }, 205 }, 206 }, 207 }, 208 Status: v1.PodStatus{ 209 Phase: v1.PodRunning, 210 Conditions: []v1.PodCondition{ 211 { 212 Type: "Something else", 213 Status: v1.ConditionTrue, 214 }, 215 }, 216 }, 217 } 218 219 res := kube.IsPodReady(pod) 220 assert.Equal(t, false, res) 221 222 pod = &v1.Pod{ 223 ObjectMeta: meta_v1.ObjectMeta{ 224 Name: "web", 225 Labels: labels, 226 Namespace: "jx-testing", 227 }, 228 Spec: v1.PodSpec{ 229 Containers: []v1.Container{ 230 { 231 Name: "web", 232 Image: "nginx:1.12", 233 Ports: []v1.ContainerPort{ 234 { 235 Name: "http", 236 Protocol: v1.ProtocolTCP, 237 ContainerPort: 80, 238 }, 239 }, 240 }, 241 }, 242 }, 243 Status: v1.PodStatus{ 244 Phase: v1.PodRunning, 245 Conditions: []v1.PodCondition{ 246 { 247 Type: v1.PodReady, 248 Status: "Something else", 249 }, 250 }, 251 }, 252 } 253 254 res = kube.IsPodReady(pod) 255 assert.Equal(t, false, res) 256 }