MCPcopy Index your code
hub / github.com/coder/coder / Run

Method Run

scaletest/dynamicparameters/run.go:38–98  ·  view source on GitHub ↗

Run executes the dynamic parameters test, which: 1. connects to the dynamic parameters stream 2. waits for the initial response 3. sends a change request 4. waits for the change response 5. closes the stream

(ctx context.Context, _ string, logs io.Writer)

Source from the content-addressed store, hash-verified

36// 4. waits for the change response
37// 5. closes the stream
38func (r *Runner) Run(ctx context.Context, _ string, logs io.Writer) (retErr error) {
39 startTime := time.Now()
40 stream, err := r.client.TemplateVersionDynamicParameters(ctx, codersdk.Me, r.cfg.TemplateVersion)
41 if err != nil {
42 return xerrors.Errorf("connect to dynamic parameters stream: %w", err)
43 }
44 defer stream.Close(websocket.StatusNormalClosure)
45 respCh := stream.Chan()
46
47 var initTime time.Time
48 select {
49 case <-ctx.Done():
50 return ctx.Err()
51 case resp, ok := <-respCh:
52 if !ok {
53 return xerrors.Errorf("dynamic parameters stream closed before initial response")
54 }
55 initTime = time.Now()
56 r.cfg.Metrics.LatencyInitialResponseSeconds.
57 WithLabelValues(r.cfg.MetricLabelValues...).
58 Observe(initTime.Sub(startTime).Seconds())
59 _, _ = fmt.Fprintf(logs, "initial response: %+v\n", resp)
60 if !slices.ContainsFunc(resp.Parameters, func(p codersdk.PreviewParameter) bool {
61 return p.Name == "zero"
62 }) {
63 return xerrors.Errorf("missing expected parameter: 'zero'")
64 }
65 if err := checkNoDiagnostics(resp); err != nil {
66 return xerrors.Errorf("unexpected initial response diagnostics: %w", err)
67 }
68 }
69
70 err = stream.Send(codersdk.DynamicParametersRequest{
71 ID: 1,
72 Inputs: map[string]string{
73 "zero": "B",
74 },
75 })
76 if err != nil {
77 return xerrors.Errorf("send change request: %w", err)
78 }
79 select {
80 case <-ctx.Done():
81 return ctx.Err()
82 case resp, ok := <-respCh:
83 if !ok {
84 return xerrors.Errorf("dynamic parameters stream closed before change response")
85 }
86 _, _ = fmt.Fprintf(logs, "change response: %+v\n", resp)
87 r.cfg.Metrics.LatencyChangeResponseSeconds.
88 WithLabelValues(r.cfg.MetricLabelValues...).
89 Observe(time.Since(initTime).Seconds())
90 if resp.ID != 1 {
91 return xerrors.Errorf("unexpected response ID: %d", resp.ID)
92 }
93 if err := checkNoDiagnostics(resp); err != nil {
94 return xerrors.Errorf("unexpected change response diagnostics: %w", err)
95 }

Callers 1

TestRunFunction · 0.95

Calls 9

checkNoDiagnosticsFunction · 0.85
ErrMethod · 0.80
WithLabelValuesMethod · 0.80
CloseMethod · 0.65
SendMethod · 0.65
ErrorfMethod · 0.45
ChanMethod · 0.45
DoneMethod · 0.45

Tested by 1

TestRunFunction · 0.76