github.com/shipa-corp/ketch@v0.6.0/cmd/ketch/app_test.go (about) 1 package main 2 3 import ( 4 "testing" 5 6 "github.com/stretchr/testify/require" 7 apiv1 "k8s.io/api/core/v1" 8 9 ketchv1 "github.com/shipa-corp/ketch/internal/api/v1beta1" 10 ) 11 12 func Test_appState(t *testing.T) { 13 tests := []struct { 14 name string 15 pods []apiv1.Pod 16 want string 17 }{ 18 { 19 name: "app without pods", 20 pods: nil, 21 want: "created", 22 }, 23 { 24 name: "1 pod for each state", 25 pods: []apiv1.Pod{ 26 apiv1.Pod{ 27 Status: apiv1.PodStatus{ 28 Phase: apiv1.PodPending, 29 }, 30 }, 31 apiv1.Pod{ 32 Status: apiv1.PodStatus{ 33 Phase: apiv1.PodRunning, 34 }, 35 }, 36 apiv1.Pod{ 37 Status: apiv1.PodStatus{ 38 Phase: apiv1.PodSucceeded, 39 }, 40 }, 41 apiv1.Pod{ 42 Status: apiv1.PodStatus{ 43 Phase: apiv1.PodFailed, 44 }, 45 }, 46 apiv1.Pod{ 47 Status: apiv1.PodStatus{ 48 Phase: apiv1.PodUnknown, 49 }, 50 }, 51 }, 52 want: "1 deploying, 1 running, 2 error, 1 succeeded", 53 }, 54 } 55 56 for _, tt := range tests { 57 t.Run(tt.name, func(t *testing.T) { 58 state := appState(tt.pods) 59 require.Equal(t, tt.want, state) 60 }) 61 } 62 } 63 64 func Test_podState(t *testing.T) { 65 tests := []struct { 66 name string 67 pod apiv1.Pod 68 want ketchv1.PodState 69 }{ 70 { 71 name: "pod without state", 72 pod: apiv1.Pod{}, 73 want: ketchv1.PodError, 74 }, 75 { 76 name: "pod pending", 77 pod: apiv1.Pod{ 78 Status: apiv1.PodStatus{ 79 Phase: apiv1.PodPending, 80 }, 81 }, 82 want: ketchv1.PodDeploying, 83 }, 84 { 85 name: "pod running", 86 pod: apiv1.Pod{ 87 Status: apiv1.PodStatus{ 88 Phase: apiv1.PodRunning, 89 }, 90 }, 91 want: ketchv1.PodRunning, 92 }, 93 { 94 name: "pod running, but container in CrashLoopBackOff", 95 pod: apiv1.Pod{ 96 Status: apiv1.PodStatus{ 97 Phase: apiv1.PodRunning, 98 ContainerStatuses: []apiv1.ContainerStatus{ 99 { 100 State: apiv1.ContainerState{ 101 Waiting: &apiv1.ContainerStateWaiting{ 102 Reason: "CrashLoopBackOff", 103 }, 104 }, 105 }, 106 }, 107 }, 108 }, 109 want: ketchv1.PodError, 110 }, 111 { 112 name: "pod running, but container in Completed", 113 pod: apiv1.Pod{ 114 Status: apiv1.PodStatus{ 115 Phase: apiv1.PodRunning, 116 ContainerStatuses: []apiv1.ContainerStatus{ 117 { 118 State: apiv1.ContainerState{ 119 Terminated: &apiv1.ContainerStateTerminated{ 120 Reason: "Completed", 121 }, 122 }, 123 }, 124 }, 125 }, 126 }, 127 want: ketchv1.PodSucceeded, 128 }, 129 { 130 name: "pod succeeded", 131 pod: apiv1.Pod{ 132 Status: apiv1.PodStatus{ 133 Phase: apiv1.PodSucceeded, 134 }, 135 }, 136 want: ketchv1.PodSucceeded, 137 }, 138 { 139 name: "pod failed", 140 pod: apiv1.Pod{ 141 Status: apiv1.PodStatus{ 142 Phase: apiv1.PodFailed, 143 }, 144 }, 145 want: ketchv1.PodError, 146 }, 147 { 148 name: "pod unknown", 149 pod: apiv1.Pod{ 150 Status: apiv1.PodStatus{ 151 Phase: apiv1.PodUnknown, 152 }, 153 }, 154 want: ketchv1.PodError, 155 }, 156 } 157 158 for _, tt := range tests { 159 t.Run(tt.name, func(t *testing.T) { 160 state := podState(tt.pod) 161 require.Equal(t, tt.want, state) 162 }) 163 } 164 }