diff --git a/e2e/deployment/deployment.go b/e2e/deployment/deployment.go index 459bb5e09..238130c40 100644 --- a/e2e/deployment/deployment.go +++ b/e2e/deployment/deployment.go @@ -1,9 +1,9 @@ package deployment import ( - "github.com/hashicorp/nomad/api" "github.com/hashicorp/nomad/e2e/framework" "github.com/hashicorp/nomad/nomad/structs" + "github.com/hashicorp/nomad/testutil" "github.com/stretchr/testify/require" "github.com/hashicorp/nomad/e2e/e2eutil" @@ -34,29 +34,31 @@ func (tc *DeploymentTest) BeforeAll(f *framework.F) { func (tc *DeploymentTest) TestDeploymentAutoPromote(f *framework.F) { t := f.T() nomadClient := tc.Nomad() + run := structs.DeploymentStatusRunning uuid := uuid.Generate() + // unique each run, cluster could have previous jobs jobId := "deployment" + uuid[0:8] tc.jobIds = append(tc.jobIds, jobId) e2eutil.RegisterAndWaitForAllocs(t, nomadClient, "deployment/input/deployment_auto0.nomad", jobId) + deploy := e2eutil.DeploymentsForJob(nomadClient, jobId)[0] // Upgrade e2eutil.RegisterAllocs(t, nomadClient, "deployment/input/deployment_auto1.nomad", jobId) - var deploy *api.Deployment - ds, _, err := nomadClient.Deployments().List(nil) - require.NoError(t, err) - // Find the deployment - for _, d := range ds { - if d.JobID == jobId { - deploy = d - break + // Find the deployment we don't already have + testutil.WaitForResult(func() (bool, error) { + ds := e2eutil.DeploymentsForJob(nomadClient, jobId) + for _, d := range ds { + if d.ID != deploy.ID { + deploy = d + return true, nil + } } - } + return false, nil + }, func(e error) {}) // Deployment is auto pending the upgrade of "two" which has a longer time to health - run := structs.DeploymentStatusRunning - require.Equal(t, run, deploy.Status) - require.Equal(t, structs.DeploymentStatusDescriptionRunningAutoPromotion, deploy.StatusDescription) + e2eutil.WaitForDeployment(t, nomadClient, deploy.ID, run, structs.DeploymentStatusDescriptionRunningAutoPromotion) // Deployment is eventually running e2eutil.WaitForDeployment(t, nomadClient, deploy.ID, run, structs.DeploymentStatusDescriptionRunning) diff --git a/e2e/e2eutil/utils.go b/e2e/e2eutil/utils.go index 212282cda..e98e95aeb 100644 --- a/e2e/e2eutil/utils.go +++ b/e2e/e2eutil/utils.go @@ -111,6 +111,22 @@ func WaitForAllocRunning(t *testing.T, nomadClient *api.Client, allocID string) }) } +func DeploymentsForJob(nomadClient *api.Client, jobID string) []*api.Deployment { + ds, _, err := nomadClient.Deployments().List(nil) + if err != nil { + return nil + } + + out := []*api.Deployment{} + for _, d := range ds { + if d.JobID == jobID { + out = append(out, d) + } + } + + return out +} + func WaitForDeployment(t *testing.T, nomadClient *api.Client, deployID string, status string, statusDesc string) { testutil.WaitForResultRetries(retries, func() (bool, error) { time.Sleep(time.Millisecond * 100) @@ -123,10 +139,10 @@ func WaitForDeployment(t *testing.T, nomadClient *api.Client, deployID string, s return true, nil } return false, fmt.Errorf("expected status %s \"%s\", but got: %s \"%s\"", - deploy.Status, - deploy.StatusDescription, status, statusDesc, + deploy.Status, + deploy.StatusDescription, ) }, func(err error) {