(t *testing.T)
| 2087 | } |
| 2088 | |
| 2089 | func TestAcquireProvisionerJob(t *testing.T) { |
| 2090 | t.Parallel() |
| 2091 | |
| 2092 | t.Run("HumanInitiatedJobsFirst", func(t *testing.T) { |
| 2093 | t.Parallel() |
| 2094 | var ( |
| 2095 | db, _ = dbtestutil.NewDB(t) |
| 2096 | ctx = testutil.Context(t, testutil.WaitMedium) |
| 2097 | org = dbgen.Organization(t, db, database.Organization{}) |
| 2098 | _ = dbgen.ProvisionerDaemon(t, db, database.ProvisionerDaemon{}) // Required for queue position |
| 2099 | now = dbtime.Now() |
| 2100 | numJobs = 10 |
| 2101 | humanIDs = make([]uuid.UUID, 0, numJobs/2) |
| 2102 | prebuildIDs = make([]uuid.UUID, 0, numJobs/2) |
| 2103 | ) |
| 2104 | |
| 2105 | // Given: a number of jobs in the queue, with prebuilds and non-prebuilds interleaved |
| 2106 | for idx := range numJobs { |
| 2107 | var initiator uuid.UUID |
| 2108 | if idx%2 == 0 { |
| 2109 | initiator = database.PrebuildsSystemUserID |
| 2110 | } else { |
| 2111 | initiator = uuid.MustParse("c0dec0de-c0de-c0de-c0de-c0dec0dec0de") |
| 2112 | } |
| 2113 | pj, err := db.InsertProvisionerJob(ctx, database.InsertProvisionerJobParams{ |
| 2114 | ID: uuid.MustParse(fmt.Sprintf("00000000-0000-0000-0000-00000000000%x", idx+1)), |
| 2115 | CreatedAt: time.Now().Add(-time.Second * time.Duration(idx)), |
| 2116 | UpdatedAt: time.Now().Add(-time.Second * time.Duration(idx)), |
| 2117 | InitiatorID: initiator, |
| 2118 | OrganizationID: org.ID, |
| 2119 | Provisioner: database.ProvisionerTypeEcho, |
| 2120 | Type: database.ProvisionerJobTypeWorkspaceBuild, |
| 2121 | StorageMethod: database.ProvisionerStorageMethodFile, |
| 2122 | FileID: uuid.New(), |
| 2123 | Input: json.RawMessage(`{}`), |
| 2124 | Tags: database.StringMap{}, |
| 2125 | TraceMetadata: pqtype.NullRawMessage{}, |
| 2126 | }) |
| 2127 | require.NoError(t, err) |
| 2128 | // We expected prebuilds to be acquired after human-initiated jobs. |
| 2129 | if initiator == database.PrebuildsSystemUserID { |
| 2130 | prebuildIDs = append([]uuid.UUID{pj.ID}, prebuildIDs...) |
| 2131 | } else { |
| 2132 | humanIDs = append([]uuid.UUID{pj.ID}, humanIDs...) |
| 2133 | } |
| 2134 | t.Logf("created job id=%q initiator=%q created_at=%q", pj.ID.String(), pj.InitiatorID.String(), pj.CreatedAt.String()) |
| 2135 | } |
| 2136 | |
| 2137 | expectedIDs := append(humanIDs, prebuildIDs...) //nolint:gocritic // not the same slice |
| 2138 | |
| 2139 | // When: we query the queue positions for the jobs |
| 2140 | qjs, err := db.GetProvisionerJobsByIDsWithQueuePosition(ctx, database.GetProvisionerJobsByIDsWithQueuePositionParams{ |
| 2141 | IDs: expectedIDs, |
| 2142 | StaleIntervalMS: provisionerdserver.StaleInterval.Milliseconds(), |
| 2143 | }) |
| 2144 | require.NoError(t, err) |
| 2145 | require.Len(t, qjs, numJobs) |
| 2146 | // Ensure the jobs are sorted by queue position. |
nothing calls this directly
no test coverage detected