mirror of https://github.com/linkerd/linkerd2.git
306 lines
5.2 KiB
Go
306 lines
5.2 KiB
Go
package k8s
|
|
|
|
import (
|
|
"testing"
|
|
|
|
corev1 "k8s.io/api/core/v1"
|
|
)
|
|
|
|
func TestGetPodStatus(t *testing.T) {
|
|
scenarios := []struct {
|
|
desc string
|
|
pod string
|
|
expected string
|
|
}{
|
|
{
|
|
desc: "Pod is running",
|
|
expected: "Running",
|
|
pod: `
|
|
apiVersion: v1
|
|
kind: Pod
|
|
metadata:
|
|
name: emoji
|
|
namespace: emojivoto
|
|
labels:
|
|
app: emoji-svc
|
|
linkerd.io/control-plane-ns: linkerd
|
|
status:
|
|
phase: Running
|
|
`,
|
|
},
|
|
{
|
|
desc: "Pod's reason is filled",
|
|
expected: "podReason",
|
|
pod: `
|
|
apiVersion: v1
|
|
kind: Pod
|
|
metadata:
|
|
name: emoji
|
|
namespace: emojivoto
|
|
labels:
|
|
app: emoji-svc
|
|
linkerd.io/control-plane-ns: linkerd
|
|
status:
|
|
phase: Pending
|
|
reason: podReason
|
|
`,
|
|
},
|
|
{
|
|
desc: "Pod waiting is filled",
|
|
expected: "CrashLoopBackOff",
|
|
pod: `
|
|
apiVersion: v1
|
|
kind: Pod
|
|
metadata:
|
|
name: emoji
|
|
namespace: emojivoto
|
|
labels:
|
|
app: emoji-svc
|
|
linkerd.io/control-plane-ns: linkerd
|
|
status:
|
|
phase: Pending
|
|
reason: podReason
|
|
containerStatuses:
|
|
- state:
|
|
waiting:
|
|
reason: CrashLoopBackOff
|
|
`,
|
|
},
|
|
{
|
|
desc: "Pod is terminated",
|
|
expected: "podTerminated",
|
|
pod: `
|
|
apiVersion: v1
|
|
kind: Pod
|
|
metadata:
|
|
name: emoji
|
|
namespace: emojivoto
|
|
labels:
|
|
app: emoji-svc
|
|
linkerd.io/control-plane-ns: linkerd
|
|
status:
|
|
phase: Pending
|
|
reason: podReason
|
|
containerStatuses:
|
|
- state:
|
|
terminated:
|
|
reason: podTerminated
|
|
exitCode: 2
|
|
`,
|
|
},
|
|
{
|
|
desc: "Pod terminated with signal",
|
|
expected: "Signal:9",
|
|
pod: `
|
|
apiVersion: v1
|
|
kind: Pod
|
|
metadata:
|
|
name: emoji
|
|
namespace: emojivoto
|
|
labels:
|
|
app: emoji-svc
|
|
linkerd.io/control-plane-ns: linkerd
|
|
status:
|
|
phase: Pending
|
|
reason: podReason
|
|
containerStatuses:
|
|
- state:
|
|
terminated:
|
|
signal: 9
|
|
`,
|
|
},
|
|
{
|
|
desc: "Pod terminated with exti code",
|
|
expected: "ExitCode:2",
|
|
pod: `
|
|
apiVersion: v1
|
|
kind: Pod
|
|
metadata:
|
|
name: emoji
|
|
namespace: emojivoto
|
|
labels:
|
|
app: emoji-svc
|
|
linkerd.io/control-plane-ns: linkerd
|
|
status:
|
|
phase: Pending
|
|
reason: podReason
|
|
containerStatuses:
|
|
- state:
|
|
terminated:
|
|
exitCode: 2
|
|
`,
|
|
},
|
|
{
|
|
desc: "Pod has a running container",
|
|
expected: "Running",
|
|
pod: `
|
|
apiVersion: v1
|
|
kind: Pod
|
|
metadata:
|
|
name: emoji
|
|
namespace: emojivoto
|
|
labels:
|
|
app: emoji-svc
|
|
linkerd.io/control-plane-ns: linkerd
|
|
status:
|
|
phase: Running
|
|
reason: Completed
|
|
containerStatuses:
|
|
- ready: true
|
|
state:
|
|
running:
|
|
startedAt: 1995-02-10T00:42:42Z
|
|
`,
|
|
},
|
|
{
|
|
desc: "Pod init container terminated with exit code 0",
|
|
expected: "Running",
|
|
pod: `
|
|
apiVersion: v1
|
|
kind: Pod
|
|
metadata:
|
|
name: emoji
|
|
namespace: emojivoto
|
|
labels:
|
|
app: emoji-svc
|
|
linkerd.io/control-plane-ns: linkerd
|
|
status:
|
|
phase: Running
|
|
containerStatuses:
|
|
- state:
|
|
running:
|
|
startedAt: 1995-02-10T00:42:42Z
|
|
initContainerStatuses:
|
|
- state:
|
|
terminated:
|
|
exitCode: 0
|
|
reason: Completed
|
|
`,
|
|
},
|
|
{
|
|
desc: "Pod init container terminated with exit code 2",
|
|
expected: "Init:ExitCode:2",
|
|
pod: `
|
|
apiVersion: v1
|
|
kind: Pod
|
|
metadata:
|
|
name: emoji
|
|
namespace: emojivoto
|
|
labels:
|
|
app: emoji-svc
|
|
linkerd.io/control-plane-ns: linkerd
|
|
status:
|
|
phase: Running
|
|
containerStatuses:
|
|
- state:
|
|
running:
|
|
startedAt: 1995-02-10T00:42:42Z
|
|
initContainerStatuses:
|
|
- state:
|
|
terminated:
|
|
exitCode: 2
|
|
`,
|
|
},
|
|
{
|
|
desc: "Pod init container terminated with signal",
|
|
expected: "Init:Signal:9",
|
|
pod: `
|
|
apiVersion: v1
|
|
kind: Pod
|
|
metadata:
|
|
name: emoji
|
|
namespace: emojivoto
|
|
labels:
|
|
app: emoji-svc
|
|
linkerd.io/control-plane-ns: linkerd
|
|
status:
|
|
phase: Running
|
|
containerStatuses:
|
|
- state:
|
|
running:
|
|
startedAt: 1995-02-10T00:42:42Z
|
|
initContainerStatuses:
|
|
- state:
|
|
terminated:
|
|
signal: 9
|
|
`,
|
|
},
|
|
{
|
|
desc: "Pod init container in CrashLooBackOff",
|
|
expected: "Init:CrashLoopBackOff",
|
|
pod: `
|
|
apiVersion: v1
|
|
kind: Pod
|
|
metadata:
|
|
name: emoji
|
|
namespace: emojivoto
|
|
labels:
|
|
app: emoji-svc
|
|
linkerd.io/control-plane-ns: linkerd
|
|
status:
|
|
phase: Pending
|
|
initContainerStatuses:
|
|
- state:
|
|
terminated:
|
|
exitCode: 2
|
|
reason: CrashLoopBackOff
|
|
`,
|
|
},
|
|
{
|
|
desc: "Pod init container waiting for someReason",
|
|
expected: "Init:someReason",
|
|
pod: `
|
|
apiVersion: v1
|
|
kind: Pod
|
|
metadata:
|
|
name: emoji
|
|
namespace: emojivoto
|
|
labels:
|
|
app: emoji-svc
|
|
linkerd.io/control-plane-ns: linkerd
|
|
status:
|
|
phase: Pending
|
|
initContainerStatuses:
|
|
- state:
|
|
waiting:
|
|
reason: someReason
|
|
`,
|
|
},
|
|
{
|
|
desc: "Pod init container is waiting on PodInitializing",
|
|
expected: "Init:0/0",
|
|
pod: `
|
|
apiVersion: v1
|
|
kind: Pod
|
|
metadata:
|
|
name: emoji
|
|
namespace: emojivoto
|
|
labels:
|
|
app: emoji-svc
|
|
linkerd.io/control-plane-ns: linkerd
|
|
status:
|
|
phase: Pending
|
|
initContainerStatuses:
|
|
- state:
|
|
waiting:
|
|
reason: PodInitializing
|
|
`,
|
|
},
|
|
}
|
|
for _, s := range scenarios {
|
|
obj, err := ToRuntimeObject(s.pod)
|
|
if err != nil {
|
|
t.Fatalf("could not decode yml: %s", err)
|
|
}
|
|
pod, ok := obj.(*corev1.Pod)
|
|
if !ok {
|
|
t.Fatalf("could not convert returned object to pod")
|
|
}
|
|
|
|
got := GetPodStatus(*pod)
|
|
if s.expected != got {
|
|
t.Fatalf("Wrong pod status on '%s'. Expected '%s', got '%s'", s.desc, s.expected, got)
|
|
}
|
|
}
|
|
}
|