From edb863cf8521028b2a7166f1e90642851af7235f Mon Sep 17 00:00:00 2001 From: Aleksander Mistewicz Date: Fri, 17 Nov 2017 13:30:51 +0100 Subject: [PATCH] Add more complicated tests of dryadJob Change-Id: Ie015609731c8f25ecfe6bff31414f18390494e3b Signed-off-by: Aleksander Mistewicz --- manager/dryad_job_test.go | 59 +++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 54 insertions(+), 5 deletions(-) diff --git a/manager/dryad_job_test.go b/manager/dryad_job_test.go index 450dbed..22b0ec5 100644 --- a/manager/dryad_job_test.go +++ b/manager/dryad_job_test.go @@ -18,11 +18,13 @@ package manager import ( "context" + "errors" . "git.tizen.org/tools/weles" "github.com/golang/mock/gomock" . "github.com/onsi/ginkgo" + . "github.com/onsi/ginkgo/extensions/table" . "github.com/onsi/gomega" ) @@ -34,6 +36,7 @@ var _ = Describe("dryadJob", func() { djSync chan struct{} ctrl *gomock.Controller mockDryadJobRunner DryadJobRunner + deploy, boot, test *gomock.Call cancel context.CancelFunc ) @@ -45,6 +48,7 @@ var _ = Describe("dryadJob", func() { go func() { defer close(dJobSync) defer GinkgoRecover() + <-dJobSync dJob.run(ctx) }() return dJob, dJobSync @@ -54,11 +58,9 @@ var _ = Describe("dryadJob", func() { ctrl = gomock.NewController(GinkgoT()) mockDryadJobRunner = NewMockDryadJobRunner(ctrl) mockOfDryadJobRunner := mockDryadJobRunner.(*MockDryadJobRunner) - gomock.InOrder( - mockOfDryadJobRunner.EXPECT().Deploy(), - mockOfDryadJobRunner.EXPECT().Boot(), - mockOfDryadJobRunner.EXPECT().Test(), - ) + deploy = mockOfDryadJobRunner.EXPECT().Deploy().Times(1) + boot = mockOfDryadJobRunner.EXPECT().Boot().Times(1).After(deploy) + test = mockOfDryadJobRunner.EXPECT().Test().Times(1).After(boot) jobID = 666 changes = make(chan DryadJobStatusChange, 6) @@ -71,6 +73,7 @@ var _ = Describe("dryadJob", func() { }) It("should go through proper states", func() { + djSync <- struct{}{} states := []DryadJobStatus{DJ_NEW, DJ_DEPLOY, DJ_BOOT, DJ_TEST, DJ_OK} for _, state := range states { change := DryadJobStatusChange{jobID, state} @@ -78,7 +81,53 @@ var _ = Describe("dryadJob", func() { } }) + registerPhaseErr := func(c *gomock.Call, err error, times int) { + c.Return(err).Times(times) + } + registerErr := func(deployErr, bootErr, testErr error) []DryadJobStatus { + ret := []DryadJobStatus{DJ_NEW, DJ_DEPLOY} + switch { + case deployErr != nil: + registerPhaseErr(deploy, deployErr, 1) + registerPhaseErr(boot, bootErr, 0) + registerPhaseErr(test, testErr, 0) + case bootErr != nil: + registerPhaseErr(deploy, deployErr, 1) + registerPhaseErr(boot, bootErr, 1) + ret = append(ret, DJ_BOOT) + registerPhaseErr(test, testErr, 0) + case testErr != nil: + registerPhaseErr(deploy, deployErr, 1) + registerPhaseErr(boot, bootErr, 1) + ret = append(ret, DJ_BOOT) + registerPhaseErr(test, testErr, 1) + ret = append(ret, DJ_TEST) + } + ret = append(ret, DJ_FAIL) + djSync <- struct{}{} + return ret + } + DescribeTable("fail when one of the stages does", + func(f func() []DryadJobStatus) { + states := f() + for _, state := range states { + change := DryadJobStatusChange{jobID, state} + Eventually(changes).Should(Receive(Equal(change))) + } + }, + Entry("after deploy", func() []DryadJobStatus { + return registerErr(errors.New("deploy failed"), nil, nil) + }), + Entry("after boot", func() []DryadJobStatus { + return registerErr(nil, errors.New("boot failed"), nil) + }), + Entry("after test", func() []DryadJobStatus { + return registerErr(nil, nil, errors.New("test failed")) + }), + ) + It("should return DryadJobInfo", func() { + djSync <- struct{}{} info := dj.GetJobInfo() Expect(info.Job).To(Equal(jobID)) }) -- 2.7.4