Skip to content

Commit 4a6bf36

Browse files
chore: add dbmem impl, add test
1 parent 353caf3 commit 4a6bf36

File tree

2 files changed

+50
-0
lines changed

2 files changed

+50
-0
lines changed

coderd/database/dbmem/dbmem.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6384,6 +6384,15 @@ func (q *FakeQuerier) GetWorkspaceAgentScriptTimingsByBuildID(ctx context.Contex
63846384
WorkspaceAgentName: agent.Name,
63856385
})
63866386
}
6387+
6388+
// We want to only return the first script run for each Script ID.
6389+
slices.SortFunc(rows, func(a, b database.GetWorkspaceAgentScriptTimingsByBuildIDRow) int {
6390+
return a.StartedAt.Compare(b.StartedAt)
6391+
})
6392+
rows = slices.CompactFunc(rows, func(e1, e2 database.GetWorkspaceAgentScriptTimingsByBuildIDRow) bool {
6393+
return e1.ScriptID == e2.ScriptID
6394+
})
6395+
63876396
return rows, nil
63886397
}
63896398

coderd/workspacebuilds_test.go

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1548,6 +1548,47 @@ func TestWorkspaceBuildTimings(t *testing.T) {
15481548
}
15491549
})
15501550

1551+
t.Run("MultipleTimingsForSameAgentScript", func(t *testing.T) {
1552+
t.Parallel()
1553+
1554+
// Given: a build with multiple timings for the same script
1555+
build := makeBuild(t)
1556+
resource := dbgen.WorkspaceResource(t, db, database.WorkspaceResource{
1557+
JobID: build.JobID,
1558+
})
1559+
agent := dbgen.WorkspaceAgent(t, db, database.WorkspaceAgent{
1560+
ResourceID: resource.ID,
1561+
})
1562+
script := dbgen.WorkspaceAgentScript(t, db, database.WorkspaceAgentScript{
1563+
WorkspaceAgentID: agent.ID,
1564+
})
1565+
timings := make([]database.WorkspaceAgentScriptTiming, 3)
1566+
scriptStartedAt := dbtime.Now()
1567+
for i := range timings {
1568+
timings[i] = dbgen.WorkspaceAgentScriptTiming(t, db, database.WorkspaceAgentScriptTiming{
1569+
StartedAt: scriptStartedAt,
1570+
EndedAt: scriptStartedAt.Add(1 * time.Minute),
1571+
ScriptID: script.ID,
1572+
})
1573+
1574+
// Add an hour to the previous started so we can
1575+
// reliably differentiate the scripts from each other.
1576+
scriptStartedAt = scriptStartedAt.Add(1 * time.Hour)
1577+
}
1578+
1579+
// When: fetching timings for the build
1580+
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
1581+
t.Cleanup(cancel)
1582+
res, err := client.WorkspaceBuildTimings(ctx, build.ID)
1583+
require.NoError(t, err)
1584+
1585+
// Then: return a response with the first agent script timing
1586+
require.Len(t, res.AgentScriptTimings, 1)
1587+
1588+
require.Equal(t, timings[0].StartedAt.UnixMilli(), res.AgentScriptTimings[0].StartedAt.UnixMilli())
1589+
require.Equal(t, timings[0].EndedAt.UnixMilli(), res.AgentScriptTimings[0].EndedAt.UnixMilli())
1590+
})
1591+
15511592
t.Run("AgentScriptTimings", func(t *testing.T) {
15521593
t.Parallel()
15531594

0 commit comments

Comments
 (0)