(t *testing.T)
| 1998 | } |
| 1999 | |
| 2000 | func TestQueuePosition(t *testing.T) { |
| 2001 | t.Parallel() |
| 2002 | |
| 2003 | if testing.Short() { |
| 2004 | t.SkipNow() |
| 2005 | } |
| 2006 | sqlDB := testSQLDB(t) |
| 2007 | err := migrations.Up(sqlDB) |
| 2008 | require.NoError(t, err) |
| 2009 | db := database.New(sqlDB) |
| 2010 | ctx := testutil.Context(t, testutil.WaitLong) |
| 2011 | |
| 2012 | org := dbgen.Organization(t, db, database.Organization{}) |
| 2013 | jobCount := 10 |
| 2014 | jobs := []database.ProvisionerJob{} |
| 2015 | jobIDs := []uuid.UUID{} |
| 2016 | for i := 0; i < jobCount; i++ { |
| 2017 | job := dbgen.ProvisionerJob(t, db, nil, database.ProvisionerJob{ |
| 2018 | OrganizationID: org.ID, |
| 2019 | Tags: database.StringMap{}, |
| 2020 | }) |
| 2021 | jobs = append(jobs, job) |
| 2022 | jobIDs = append(jobIDs, job.ID) |
| 2023 | |
| 2024 | // We need a slight amount of time between each insertion to ensure that |
| 2025 | // the queue position is correct... it's sorted by `created_at`. |
| 2026 | time.Sleep(time.Millisecond) |
| 2027 | } |
| 2028 | |
| 2029 | // Create default provisioner daemon: |
| 2030 | dbgen.ProvisionerDaemon(t, db, database.ProvisionerDaemon{ |
| 2031 | Name: "default_provisioner", |
| 2032 | Provisioners: []database.ProvisionerType{database.ProvisionerTypeEcho}, |
| 2033 | // Ensure the `tags` field is NOT NULL for the default provisioner; |
| 2034 | // otherwise, it won't be able to pick up any jobs. |
| 2035 | Tags: database.StringMap{}, |
| 2036 | }) |
| 2037 | |
| 2038 | queued, err := db.GetProvisionerJobsByIDsWithQueuePosition(ctx, database.GetProvisionerJobsByIDsWithQueuePositionParams{ |
| 2039 | IDs: jobIDs, |
| 2040 | StaleIntervalMS: provisionerdserver.StaleInterval.Milliseconds(), |
| 2041 | }) |
| 2042 | require.NoError(t, err) |
| 2043 | require.Len(t, queued, jobCount) |
| 2044 | sort.Slice(queued, func(i, j int) bool { |
| 2045 | return queued[i].QueuePosition < queued[j].QueuePosition |
| 2046 | }) |
| 2047 | // Ensure that the queue positions are correct based on insertion ID! |
| 2048 | for index, job := range queued { |
| 2049 | require.Equal(t, job.QueuePosition, int64(index+1)) |
| 2050 | require.Equal(t, job.ProvisionerJob.ID, jobs[index].ID) |
| 2051 | } |
| 2052 | |
| 2053 | job, err := db.AcquireProvisionerJob(ctx, database.AcquireProvisionerJobParams{ |
| 2054 | OrganizationID: org.ID, |
| 2055 | StartedAt: sql.NullTime{ |
| 2056 | Time: dbtime.Now(), |
| 2057 | Valid: true, |
nothing calls this directly
no test coverage detected