Skip to content

Commit

Permalink
Improve ActionSet Progress RunningPhase unit test (#1847)
Browse files Browse the repository at this point in the history
* Improve progress running phase test

* Increase sleep time

Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
  • Loading branch information
pavannd1 and mergify[bot] authored Jan 9, 2023
1 parent eca56f0 commit 1eac779
Showing 1 changed file with 76 additions and 23 deletions.
99 changes: 76 additions & 23 deletions pkg/controller/controller_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -198,6 +198,40 @@ func (s *ControllerSuite) waitOnDeferPhaseState(c *C, as *crv1alpha1.ActionSet,
return errors.Wrapf(err, "State '%s' never reached", state)
}

//nolint:unparam
func (s *ControllerSuite) waitOnActionSetCompleteWithRunningPhases(as *crv1alpha1.ActionSet, rp *sets.String) error {
ctx, cancel := context.WithTimeout(context.Background(), 120*time.Second)
defer cancel()
err := poll.Wait(ctx, func(context.Context) (bool, error) {
as, err := s.crCli.ActionSets(as.GetNamespace()).Get(ctx, as.GetName(), metav1.GetOptions{})
if err != nil {
return false, err
}
if as.Status == nil {
return false, nil
}
if as.Status.State == crv1alpha1.StateComplete {
return true, nil
}
// These are non-terminal states.
if as.Status.State == crv1alpha1.StatePending {
return false, nil
}
if as.Status.State == crv1alpha1.StateRunning {
// Delete running phases
if rp.Has(as.Status.Progress.RunningPhase) {
rp.Delete(as.Status.Progress.RunningPhase)
}
return false, nil
}
return false, errors.New(fmt.Sprintf("Unexpected state: %s", as.Status.State))
})
if err == nil {
return nil
}
return errors.Wrapf(err, "ActionSet did not reach '%s' state", crv1alpha1.StateComplete)
}

func newBPWithOutputArtifact() *crv1alpha1.Blueprint {
return &crv1alpha1.Blueprint{
ObjectMeta: metav1.ObjectMeta{
Expand Down Expand Up @@ -392,6 +426,25 @@ func newBPWithKopiaSnapshotOutputArtifact() *crv1alpha1.Blueprint {
}
}

func newBPForProgressRunningPhase() *crv1alpha1.Blueprint {
return &crv1alpha1.Blueprint{
ObjectMeta: metav1.ObjectMeta{
GenerateName: "test-bp-running-phase-",
},
Actions: map[string]*crv1alpha1.BlueprintAction{
"backup": {
// set output artifacts from main phases as well as deferPhase
OutputArtifacts: map[string]crv1alpha1.Artifact{},
Phases: []crv1alpha1.BlueprintPhase{
*phaseWithNameAndCMD("backupPhaseOne", []string{"sleep", "10"}),
*phaseWithNameAndCMD("backupPhaseTwo", []string{"sleep", "8"}),
},
DeferPhase: phaseWithNameAndCMD("deferPhase", []string{"sleep", "8"}),
},
},
}
}

func (s *ControllerSuite) TestEmptyActionSetStatus(c *C) {
as := &crv1alpha1.ActionSet{
ObjectMeta: metav1.ObjectMeta{
Expand Down Expand Up @@ -665,36 +718,13 @@ func (s *ControllerSuite) TestDeferPhase(c *C) {
err = s.waitOnActionSetState(c, as, crv1alpha1.StateRunning)
c.Assert(err, IsNil)

// we need a set to avoid duplicate values of `runningPhase`
// as we are continuously fetching the value from the ActionSet
runningPhases := sets.NewString()
go func() {
// get actionset and store the runningPhase fields to a set
for {
a, err := s.crCli.ActionSets(s.namespace).Get(ctx, as.Name, metav1.GetOptions{})
c.Assert(err, IsNil)
if a.Status.Progress.RunningPhase != "" {
runningPhases.Insert(a.Status.Progress.RunningPhase)
}
}
}()

// make sure deferPhase is also run successfully
err = s.waitOnDeferPhaseState(c, as, crv1alpha1.StateComplete)
c.Assert(err, IsNil)

err = s.waitOnActionSetState(c, as, crv1alpha1.StateComplete)
c.Assert(err, IsNil)

// once actionset is completed make sure all the phases are in runningPhases
// that would confirm that the actionset's status.progress.runningPhase was set
// to those phases
op := sets.NewString()
// these phases are from blueprint that we create above
// and after actionset completion the runningPhase becomes ""
op.Insert("backupPhaseOne").Insert("backupPhaseTwo").Insert("deferPhase")
c.Assert(runningPhases.Equal(op), Equals, true)

as, err = s.crCli.ActionSets(s.namespace).Get(ctx, as.Name, metav1.GetOptions{})
c.Assert(err, IsNil)

Expand Down Expand Up @@ -926,3 +956,26 @@ func (s *ControllerSuite) TestRenderArtifactsFailure(c *C) {
err = s.waitOnActionSetState(c, as, crv1alpha1.StateFailed)
c.Assert(err, IsNil)
}

func (s *ControllerSuite) TestProgressRunningPhase(c *C) {
os.Setenv(kube.PodNSEnvVar, "test")
ctx := context.Background()

bp := newBPForProgressRunningPhase()
bp, err := s.crCli.Blueprints(s.namespace).Create(ctx, bp, metav1.CreateOptions{})
c.Assert(err, IsNil)

// create actionset and wait for it to reach Running state
as := testutil.NewTestActionSet(s.namespace, bp.GetName(), "Deployment", s.deployment.GetName(), s.namespace, kanister.DefaultVersion, "backup")
as, err = s.crCli.ActionSets(s.namespace).Create(ctx, as, metav1.CreateOptions{})
c.Assert(err, IsNil)
err = s.waitOnActionSetState(c, as, crv1alpha1.StateRunning)
c.Assert(err, IsNil)

runningPhases := sets.NewString()
runningPhases.Insert("backupPhaseOne").Insert("backupPhaseTwo").Insert("deferPhase")

err = s.waitOnActionSetCompleteWithRunningPhases(as, &runningPhases)
c.Assert(err, IsNil)
c.Assert(runningPhases, HasLen, 0)
}

0 comments on commit 1eac779

Please sign in to comment.