|
1 | 1 | package coderd_test
|
2 | 2 |
|
3 | 3 | import (
|
| 4 | + "bytes" |
4 | 5 | "context"
|
5 | 6 | "database/sql"
|
| 7 | + "encoding/json" |
6 | 8 | "fmt"
|
7 | 9 | "net/http"
|
8 | 10 | "os"
|
@@ -564,7 +566,7 @@ func TestWorkspaceByOwnerAndName(t *testing.T) {
|
564 | 566 | func TestWorkspaceFilterAllStatus(t *testing.T) {
|
565 | 567 | t.Parallel()
|
566 | 568 | if os.Getenv("DB") != "" {
|
567 |
| - t.Skip(`This test takes too long with an actual database`) |
| 569 | + t.Skip(`This test takes too long with an actual database. Takes 10s on local machine`) |
568 | 570 | }
|
569 | 571 |
|
570 | 572 | ctx := dbauthz.AsSystemRestricted(context.Background())
|
@@ -607,8 +609,14 @@ func TestWorkspaceFilterAllStatus(t *testing.T) {
|
607 | 609 | workspace.TemplateID = template.ID
|
608 | 610 | workspace = dbgen.Workspace(t, db, workspace)
|
609 | 611 |
|
| 612 | + jobID := uuid.New() |
| 613 | + job.ID = jobID |
610 | 614 | job.Type = database.ProvisionerJobTypeWorkspaceBuild
|
611 | 615 | job.OrganizationID = owner.OrganizationID
|
| 616 | + // Need to prevent acquire from getting this job. |
| 617 | + job.Tags = dbtype.StringMap{ |
| 618 | + jobID.String(): "true", |
| 619 | + } |
612 | 620 | job = dbgen.ProvisionerJob(t, db, job)
|
613 | 621 |
|
614 | 622 | build := dbgen.WorkspaceBuild(t, db, database.WorkspaceBuild{
|
@@ -664,14 +672,23 @@ func TestWorkspaceFilterAllStatus(t *testing.T) {
|
664 | 672 | CompletedAt: sql.NullTime{Time: time.Now(), Valid: true},
|
665 | 673 | }, database.WorkspaceTransitionStop)
|
666 | 674 |
|
667 |
| - // failed |
| 675 | + // failed -- delete |
668 | 676 | _, _, _ = makeWorkspace(database.Workspace{
|
669 |
| - Name: string(database.WorkspaceStatusFailed), |
| 677 | + Name: string(database.WorkspaceStatusFailed) + "-deleted", |
670 | 678 | }, database.ProvisionerJob{
|
671 | 679 | StartedAt: sql.NullTime{Time: time.Now().Add(time.Second * -2), Valid: true},
|
672 | 680 | CompletedAt: sql.NullTime{Time: time.Now(), Valid: true},
|
673 | 681 | Error: sql.NullString{String: "Some error", Valid: true},
|
674 |
| - }, database.WorkspaceTransitionStart) |
| 682 | + }, database.WorkspaceTransitionDelete) |
| 683 | + |
| 684 | + // failed -- stop |
| 685 | + _, _, _ = makeWorkspace(database.Workspace{ |
| 686 | + Name: string(database.WorkspaceStatusFailed) + "-stopped", |
| 687 | + }, database.ProvisionerJob{ |
| 688 | + StartedAt: sql.NullTime{Time: time.Now().Add(time.Second * -2), Valid: true}, |
| 689 | + CompletedAt: sql.NullTime{Time: time.Now(), Valid: true}, |
| 690 | + Error: sql.NullString{String: "Some error", Valid: true}, |
| 691 | + }, database.WorkspaceTransitionStop) |
675 | 692 |
|
676 | 693 | // canceling
|
677 | 694 | _, _, _ = makeWorkspace(database.Workspace{
|
@@ -713,7 +730,13 @@ func TestWorkspaceFilterAllStatus(t *testing.T) {
|
713 | 730 | // Make sure all workspaces have the correct status
|
714 | 731 | var statuses []codersdk.WorkspaceStatus
|
715 | 732 | for _, apiWorkspace := range workspaces.Workspaces {
|
716 |
| - assert.Equal(t, apiWorkspace.Name, string(apiWorkspace.LatestBuild.Status), "workspace has incorrect status") |
| 733 | + expStatus := strings.Split(apiWorkspace.Name, "-") |
| 734 | + if !assert.Equal(t, expStatus[0], string(apiWorkspace.LatestBuild.Status), "workspace has incorrect status") { |
| 735 | + d, _ := json.Marshal(apiWorkspace) |
| 736 | + var buf bytes.Buffer |
| 737 | + _ = json.Indent(&buf, d, "", "\t") |
| 738 | + t.Logf("Incorrect workspace: %s", buf.String()) |
| 739 | + } |
717 | 740 | statuses = append(statuses, apiWorkspace.LatestBuild.Status)
|
718 | 741 | }
|
719 | 742 |
|
|
0 commit comments