1
1
package agentscripts_test
2
2
3
3
import (
4
+ "cmp"
4
5
"context"
5
6
"path/filepath"
6
7
"runtime"
8
+ "slices"
7
9
"testing"
8
10
"time"
9
11
@@ -18,6 +20,7 @@ import (
18
20
"github.com/coder/coder/v2/agent/agentscripts"
19
21
"github.com/coder/coder/v2/agent/agentssh"
20
22
"github.com/coder/coder/v2/agent/agenttest"
23
+ "github.com/coder/coder/v2/agent/proto"
21
24
"github.com/coder/coder/v2/codersdk"
22
25
"github.com/coder/coder/v2/codersdk/agentsdk"
23
26
"github.com/coder/coder/v2/testutil"
@@ -119,11 +122,13 @@ func TestTimeout(t *testing.T) {
119
122
func TestScriptReportsTiming (t * testing.T ) {
120
123
t .Parallel ()
121
124
122
- tests := [] struct {
125
+ type test struct {
123
126
displayName string
124
127
script string
125
128
exitCode int32
126
- }{
129
+ }
130
+
131
+ tests := []test {
127
132
{
128
133
displayName : "exit-0" ,
129
134
script : "exit 0" ,
@@ -136,29 +141,45 @@ func TestScriptReportsTiming(t *testing.T) {
136
141
},
137
142
}
138
143
144
+ ctx := testutil .Context (t , testutil .WaitShort )
145
+ fLogger := newFakeScriptLogger ()
146
+ runner := setup (t , func (uuid2 uuid.UUID ) agentscripts.ScriptLogger {
147
+ return fLogger
148
+ })
149
+ defer runner .Close ()
150
+ aAPI := agenttest .NewFakeAgentAPI (t , slogtest .Make (t , nil ), nil , nil )
151
+
152
+ scripts := []codersdk.WorkspaceAgentScript {}
139
153
for _ , tt := range tests {
140
- ctx := testutil .Context (t , testutil .WaitShort )
141
- fLogger := newFakeScriptLogger ()
142
- runner := setup (t , func (uuid2 uuid.UUID ) agentscripts.ScriptLogger {
143
- return fLogger
144
- })
145
- defer runner .Close ()
146
- aAPI := agenttest .NewFakeAgentAPI (t , slogtest .Make (t , nil ), nil , nil )
147
- err := runner .Init ([]codersdk.WorkspaceAgentScript {{
154
+ scripts = append (scripts , codersdk.WorkspaceAgentScript {
148
155
DisplayName : tt .displayName ,
149
156
LogSourceID : uuid .New (),
150
157
Script : tt .script ,
151
- }}, aAPI .ScriptCompleted )
152
- require .NoError (t , err )
153
- require .NoError (t , runner .Execute (context .Background (), func (script codersdk.WorkspaceAgentScript ) bool {
154
- return true
155
- }))
156
- _ = testutil .RequireRecvCtx (ctx , t , fLogger .logs )
158
+ })
159
+ }
160
+
161
+ err := runner .Init (scripts , aAPI .ScriptCompleted )
162
+ require .NoError (t , err )
163
+ require .NoError (t , runner .Execute (context .Background (), func (script codersdk.WorkspaceAgentScript ) bool {
164
+ return true
165
+ }))
166
+ _ = testutil .RequireRecvCtx (ctx , t , fLogger .logs )
167
+
168
+ timing := aAPI .GetTiming ()
169
+ require .Equal (t , len (timing ), len (tests ))
170
+
171
+ // Sort the tests and timing by display name to ensure
172
+ // consistent order.
173
+ slices .SortFunc (timing , func (a , b * proto.Timing ) int {
174
+ return cmp .Compare (a .DisplayName , b .DisplayName )
175
+ })
176
+ slices .SortFunc (tests , func (a , b test ) int {
177
+ return cmp .Compare (a .displayName , b .displayName )
178
+ })
157
179
158
- require .Equal (t , len (aAPI .GetTiming ()), 1 )
159
- timing := aAPI .GetTiming ()[0 ]
160
- require .Equal (t , timing .DisplayName , tt .displayName )
161
- require .Equal (t , timing .ExitCode , tt .exitCode )
180
+ for i , tt := range tests {
181
+ require .Equal (t , timing [i ].DisplayName , tt .displayName )
182
+ require .Equal (t , timing [i ].ExitCode , tt .exitCode )
162
183
}
163
184
}
164
185
0 commit comments