From: Aleksander Mistewicz Date: Fri, 17 Nov 2017 14:01:51 +0000 (+0100) Subject: Add tests for panic recovery of dryadJob X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=434433e1f288f90f11765b8e0f02dae88fe8578f;p=tools%2Fweles.git Add tests for panic recovery of dryadJob Change-Id: I7ac9ccb609a77ff5d0e4635c5d91e23cc88fd4ae Signed-off-by: Aleksander Mistewicz --- diff --git a/manager/dryad_job.go b/manager/dryad_job.go index 4c4a32f..21cc5d1 100644 --- a/manager/dryad_job.go +++ b/manager/dryad_job.go @@ -99,10 +99,11 @@ func (d *dryadJob) run(ctx context.Context) { if r := recover(); r != nil { if err, ok := r.(error); ok { d.failReason = err.Error() - d.changeStatus(DJ_FAIL) - return + } else { + d.failReason = fmt.Sprintf("run panicked: %v", r) } - panic(r) + d.changeStatus(DJ_FAIL) + return } d.changeStatus(DJ_OK) }() diff --git a/manager/dryad_job_test.go b/manager/dryad_job_test.go index 22b0ec5..42c0456 100644 --- a/manager/dryad_job_test.go +++ b/manager/dryad_job_test.go @@ -126,6 +126,27 @@ var _ = Describe("dryadJob", func() { }), ) + DescribeTable("should recover a panic and go to failed state", + func(f func()) { + f() + djSync <- struct{}{} + fail := DryadJobStatusChange{jobID, DJ_FAIL} + Eventually(changes).Should(Receive(Equal(fail))) + }, + Entry("deploy", func() { + deploy.Do(func() { panic("deploy") }) + boot.Times(0) + test.Times(0) + }), + Entry("boot", func() { + boot.Do(func() { panic("boot") }) + test.Times(0) + }), + Entry("test", func() { + test.Do(func() { panic("test") }) + }), + ) + It("should return DryadJobInfo", func() { djSync <- struct{}{} info := dj.GetJobInfo()