From b9336c74a3f456c8bb219118c3bdfd26b60c2157 Mon Sep 17 00:00:00 2001 From: Antonio Murdaca Date: Sun, 28 May 2017 19:00:48 +0200 Subject: [PATCH] server: correctly fill ctr termination reason This patch fixes all port forwarding e2e tests. Those tests were specifically looking for a termination reason to say that a given container has finished running. CRI-O wasn't actually returning any reason field for an exited container. -> https://github.com/kubernetes/kubernetes/blob/master/test/e2e/portforward.go#L116 -> https://github.com/kubernetes/kubernetes/blob/master/test/utils/conditions.go#L97 Signed-off-by: Antonio Murdaca --- server/container_status.go | 7 +++++- test/ctr.bats | 48 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+), 1 deletion(-) diff --git a/server/container_status.go b/server/container_status.go index fc8c18ce..3320365f 100644 --- a/server/container_status.go +++ b/server/container_status.go @@ -98,8 +98,13 @@ func (s *Server) ContainerStatus(ctx context.Context, req *pb.ContainerStatusReq finished := cState.Finished.UnixNano() resp.Status.FinishedAt = finished resp.Status.ExitCode = cState.ExitCode - if cState.OOMKilled { + switch { + case cState.OOMKilled: resp.Status.Reason = "OOMKilled" + case cState.ExitCode == 0: + resp.Status.Reason = "Completed" + default: + resp.Status.Reason = "Error" } } diff --git a/test/ctr.bats b/test/ctr.bats index 675a83cf..5cfb76d2 100644 --- a/test/ctr.bats +++ b/test/ctr.bats @@ -6,6 +6,54 @@ function teardown() { cleanup_test } +@test "ctr termination reason Completed" { + start_crio + run crioctl pod run --config "$TESTDATA"/sandbox_config.json + echo "$output" + [ "$status" -eq 0 ] + pod_id="$output" + run crioctl ctr create --config "$TESTDATA"/container_config.json --pod "$pod_id" + echo "$output" + [ "$status" -eq 0 ] + ctr_id="$output" + run crioctl ctr start --id "$ctr_id" + echo "$output" + [ "$status" -eq 0 ] + run crioctl ctr status --id "$ctr_id" + echo "$output" + [ "$status" -eq 0 ] + [[ "$output" =~ "Reason: Completed" ]] + + cleanup_ctrs + cleanup_pods + stop_crio +} + +@test "ctr termination reason Error" { + start_crio + run crioctl pod run --config "$TESTDATA"/sandbox_config.json + echo "$output" + [ "$status" -eq 0 ] + pod_id="$output" + errorconfig=$(cat "$TESTDATA"/container_config.json | python -c 'import json,sys;obj=json.load(sys.stdin);obj["command"] = ["false"]; json.dump(obj, sys.stdout)') + echo "$errorconfig" > "$TESTDIR"/container_config_error.json + run crioctl ctr create --config "$TESTDIR"/container_config_error.json --pod "$pod_id" + echo "$output" + [ "$status" -eq 0 ] + ctr_id="$output" + run crioctl ctr start --id "$ctr_id" + echo "$output" + [ "$status" -eq 0 ] + run crioctl ctr status --id "$ctr_id" + echo "$output" + [ "$status" -eq 0 ] + [[ "$output" =~ "Reason: Error" ]] + + cleanup_ctrs + cleanup_pods + stop_crio +} + @test "ctr remove" { start_crio run crioctl pod run --config "$TESTDATA"/sandbox_config.json