@@ -2,6 +2,7 @@ package dashboard
2
2
3
3
import (
4
4
"context"
5
+ "errors"
5
6
"io"
6
7
"time"
7
8
25
26
26
27
func NewRunner (client * codersdk.Client , metrics Metrics , cfg Config ) * Runner {
27
28
client .Trace = cfg .Trace
29
+ if cfg .WaitLoaded == nil {
30
+ cfg .WaitLoaded = waitForWorkspacesPageLoaded
31
+ }
32
+ if cfg .ActionFunc == nil {
33
+ cfg .ActionFunc = clickRandomElement
34
+ }
35
+ if cfg .Screenshot == nil {
36
+ cfg .Screenshot = screenshot
37
+ }
28
38
return & Runner {
29
39
client : client ,
30
40
cfg : cfg ,
@@ -33,6 +43,16 @@ func NewRunner(client *codersdk.Client, metrics Metrics, cfg Config) *Runner {
33
43
}
34
44
35
45
func (r * Runner ) Run (ctx context.Context , _ string , _ io.Writer ) error {
46
+ err := r ._run (ctx )
47
+ // If the context deadline exceeded, don't return an error.
48
+ // This just means the test finished.
49
+ if err == nil || errors .Is (err , context .DeadlineExceeded ) {
50
+ return nil
51
+ }
52
+ return err
53
+ }
54
+
55
+ func (r * Runner ) _run (ctx context.Context ) error {
36
56
if r .client == nil {
37
57
return xerrors .Errorf ("client is nil" )
38
58
}
@@ -55,7 +75,7 @@ func (r *Runner) Run(ctx context.Context, _ string, _ io.Writer) error {
55
75
defer t .Stop ()
56
76
r .cfg .Logger .Info (ctx , "waiting for workspaces page to load" )
57
77
loadWorkspacePageDeadline := time .Now ().Add (r .cfg .Interval )
58
- if err := waitForWorkspacesPageLoaded (cdpCtx , loadWorkspacePageDeadline ); err != nil {
78
+ if err := r . cfg . WaitLoaded (cdpCtx , loadWorkspacePageDeadline ); err != nil {
59
79
return xerrors .Errorf ("wait for workspaces page to load: %w" , err )
60
80
}
61
81
for {
@@ -73,7 +93,7 @@ func (r *Runner) Run(ctx context.Context, _ string, _ io.Writer) error {
73
93
l , act , err := r .cfg .ActionFunc (cdpCtx , r .cfg .Logger , r .cfg .RandIntn , actionCompleteByDeadline )
74
94
if err != nil {
75
95
r .cfg .Logger .Error (ctx , "calling ActionFunc" , slog .Error (err ))
76
- sPath , sErr := screenshot (cdpCtx , me .Username )
96
+ sPath , sErr := r . cfg . Screenshot (cdpCtx , me .Username )
77
97
if sErr != nil {
78
98
r .cfg .Logger .Error (ctx , "screenshot failed" , slog .Error (sErr ))
79
99
}
@@ -88,7 +108,7 @@ func (r *Runner) Run(ctx context.Context, _ string, _ io.Writer) error {
88
108
r .metrics .IncErrors (string (l ))
89
109
//nolint:gocritic
90
110
r .cfg .Logger .Error (ctx , "action failed" , slog .F ("label" , l ), slog .Error (err ))
91
- sPath , sErr := screenshot (cdpCtx , me .Username + "-" + string (l ))
111
+ sPath , sErr := r . cfg . Screenshot (cdpCtx , me .Username + "-" + string (l ))
92
112
if sErr != nil {
93
113
r .cfg .Logger .Error (ctx , "screenshot failed" , slog .Error (sErr ))
94
114
}
0 commit comments