Skip to content

Commit 525a333

Browse files
committed
expose API to get raw responses
1 parent 96212df commit 525a333

File tree

5 files changed

+44
-44
lines changed

5 files changed

+44
-44
lines changed

wasp/examples/simple_rps/gun.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,10 @@ func (m *ExampleGun) Call(l *wasp.Generator) *wasp.Response {
2727
SetResult(&result).
2828
Get(m.target)
2929
if err != nil {
30-
return &wasp.Response{Data: result, Error: err.Error()}
30+
return &wasp.Response{Data: result, Error: err.Error(), Failed: true}
3131
}
3232
if r.Status() != "200 OK" {
33-
return &wasp.Response{Data: result, Error: "not 200"}
33+
return &wasp.Response{Data: result, Error: "not 200", Failed: true}
3434
}
35-
return &wasp.Response{Data: result}
35+
return &wasp.Response{Data: result, Error: "err"}
3636
}

wasp/examples/simple_rps/main_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ func TestGun(t *testing.T) {
2929
LoadType: wasp.RPS,
3030
T: t,
3131
// just use plain line profile - 5 RPS for 10s
32-
Schedule: wasp.Plain(5, 60*time.Second),
32+
Schedule: wasp.Plain(5, 2*time.Second),
3333
Gun: NewExampleHTTPGun(srv.URL()),
3434
Labels: labels,
3535
LokiConfig: wasp.NewEnvLokiConfig(),

wasp/gun_sleep_mock.go

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -56,17 +56,3 @@ func (m *MockGun) Call(l *Generator) *Response {
5656
}
5757
return &Response{Data: "successCallData"}
5858
}
59-
60-
// convertResponsesData extracts successful and failed response data from the Generator.
61-
// It returns a slice of successful response strings, OK responses, and failed responses.
62-
func convertResponsesData(g *Generator) ([]string, []*Response, []*Response) {
63-
g.responsesData.okDataMu.Lock()
64-
defer g.responsesData.okDataMu.Unlock()
65-
g.responsesData.failResponsesMu.Lock()
66-
defer g.responsesData.failResponsesMu.Unlock()
67-
ok := make([]string, 0)
68-
for _, d := range g.responsesData.OKData.Data {
69-
ok = append(ok, d.(string))
70-
}
71-
return ok, g.responsesData.OKResponses.Data, g.responsesData.FailResponses.Data
72-
}

wasp/wasp.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -854,6 +854,20 @@ func (g *Generator) printStatsLoop() {
854854
}()
855855
}
856856

857+
// GetResponsesData extracts successful and failed response data from the Generator.
858+
// It returns a slice of successful response strings, OK responses, and failed responses.
859+
func (g *Generator) GetResponsesData() ([]string, []*Response, []*Response) {
860+
g.responsesData.okDataMu.Lock()
861+
defer g.responsesData.okDataMu.Unlock()
862+
g.responsesData.failResponsesMu.Lock()
863+
defer g.responsesData.failResponsesMu.Unlock()
864+
okBodies := make([]string, 0)
865+
for _, d := range g.responsesData.OKData.Data {
866+
okBodies = append(okBodies, d.(string))
867+
}
868+
return okBodies, g.responsesData.OKResponses.Data, g.responsesData.FailResponses.Data
869+
}
870+
857871
// LabelsMapToModel transforms a map of string key-value pairs into a model.LabelSet.
858872
// This enables user-defined labels to be integrated into the model for downstream processing.
859873
func LabelsMapToModel(m map[string]string) model.LabelSet {

wasp/wasp_test.go

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ func TestSmokeConcurrentGenerators(t *testing.T) {
3939
// https://github.com/uber-go/ratelimit/blob/a12885fa6127db0aa3c29d33fc8ddeeb1fa1530c/limiter_atomic.go#L54
4040
require.GreaterOrEqual(t, stats.Success.Load(), int64(2))
4141

42-
okData, okResponses, failResponses := convertResponsesData(gen)
42+
okData, okResponses, failResponses := gen.GetResponsesData()
4343
require.Contains(t, okData, "successCallData")
4444
require.GreaterOrEqual(t, len(okData), 2)
4545
require.GreaterOrEqual(t, okResponses[0].Duration, 50*time.Millisecond)
@@ -73,7 +73,7 @@ func TestSmokePositiveOneRequest(t *testing.T) {
7373
require.Equal(t, stats.Failed.Load(), int64(0))
7474
require.Equal(t, stats.Duration, gen.Cfg.duration.Nanoseconds())
7575

76-
okData, okResponses, failResponses := convertResponsesData(gen)
76+
okData, okResponses, failResponses := gen.GetResponsesData()
7777
require.GreaterOrEqual(t, len(okResponses), 2)
7878
require.GreaterOrEqual(t, len(okData), 2)
7979
require.Equal(t, okData[0], "successCallData")
@@ -106,7 +106,7 @@ func TestSmokePositiveCustomRateLimitUnit(t *testing.T) {
106106
require.GreaterOrEqual(t, stats.Success.Load(), int64(4))
107107
require.Equal(t, stats.CurrentRPS.Load(), int64(1))
108108

109-
okData, okResponses, failResponses := convertResponsesData(gen)
109+
okData, okResponses, failResponses := gen.GetResponsesData()
110110
require.GreaterOrEqual(t, okResponses[0].Duration, 10*time.Millisecond)
111111
require.GreaterOrEqual(t, okResponses[3].Duration, 10*time.Millisecond)
112112
require.GreaterOrEqual(t, len(okData), 4)
@@ -169,7 +169,7 @@ func TestSmokeFailedOneRequest(t *testing.T) {
169169
require.Equal(t, stats.CurrentRPS.Load(), int64(1))
170170
require.Equal(t, stats.Duration, gen.Cfg.duration.Nanoseconds())
171171

172-
okData, _, failResponses := convertResponsesData(gen)
172+
okData, _, failResponses := gen.GetResponsesData()
173173
require.Empty(t, okData)
174174
require.GreaterOrEqual(t, failResponses[0].Duration, 50*time.Millisecond)
175175
require.Equal(t, failResponses[0].Data.(string), "failedCallData")
@@ -200,7 +200,7 @@ func TestSmokeGenCallTimeout(t *testing.T) {
200200
require.GreaterOrEqual(t, stats.CallTimeout.Load(), int64(1))
201201
require.Equal(t, stats.CurrentRPS.Load(), int64(1))
202202

203-
okData, _, failResponses := convertResponsesData(gen)
203+
okData, _, failResponses := gen.GetResponsesData()
204204
require.Empty(t, okData)
205205
require.Equal(t, failResponses[0].Data, nil)
206206
require.Equal(t, failResponses[0].Error, ErrCallTimeout.Error())
@@ -230,7 +230,7 @@ func TestSmokeVUCallTimeout(t *testing.T) {
230230

231231
// in case of VU call timeout we mark them as timed out,
232232
// proceeding to the next call and store no data
233-
okData, _, failResponses := convertResponsesData(gen)
233+
okData, _, failResponses := gen.GetResponsesData()
234234
require.Empty(t, okData)
235235
require.Equal(t, failResponses[0].Data, nil)
236236
require.Equal(t, ErrCallTimeout.Error(), failResponses[0].Error)
@@ -344,7 +344,7 @@ func TestSmokeGenCallTimeoutWait(t *testing.T) {
344344
require.GreaterOrEqual(t, stats.CallTimeout.Load(), int64(1))
345345
require.Equal(t, true, stats.RunFailed.Load())
346346

347-
okData, _, failResponses := convertResponsesData(gen)
347+
okData, _, failResponses := gen.GetResponsesData()
348348
require.Empty(t, okData)
349349
require.Equal(t, failResponses[0].Data, nil)
350350
require.Equal(t, failResponses[0].Error, ErrCallTimeout.Error())
@@ -380,7 +380,7 @@ func TestSmokeCancelledByDeadlineWait(t *testing.T) {
380380

381381
// in case of gen.Stop() if we don't have test duration or if gen.Wait() and we have a deadline
382382
// we are waiting for all requests, so result in that case must be successful
383-
okData, _, failResponses := convertResponsesData(gen)
383+
okData, _, failResponses := gen.GetResponsesData()
384384
require.GreaterOrEqual(t, len(okData), 2)
385385
require.Equal(t, okData[0], "successCallData")
386386
require.Equal(t, okData[1], "successCallData")
@@ -412,7 +412,7 @@ func TestSmokeCancelledBeforeDeadline(t *testing.T) {
412412
require.GreaterOrEqual(t, stats.Success.Load(), int64(1))
413413
require.Equal(t, stats.CurrentRPS.Load(), int64(1))
414414

415-
okData, _, failResponses := convertResponsesData(gen)
415+
okData, _, failResponses := gen.GetResponsesData()
416416
require.Equal(t, okData[0], "successCallData")
417417
require.Empty(t, failResponses)
418418
require.Empty(t, gen.Errors())
@@ -454,7 +454,7 @@ func TestSmokeStaticRPSSchedulePrecision(t *testing.T) {
454454
require.Equal(t, gen.Stats().Failed.Load(), int64(0))
455455
require.Equal(t, gen.Stats().CallTimeout.Load(), int64(0))
456456

457-
okData, _, failResponses := convertResponsesData(gen)
457+
okData, _, failResponses := gen.GetResponsesData()
458458
require.GreaterOrEqual(t, len(okData), 950)
459459
require.LessOrEqual(t, len(okData), 1010)
460460
require.Empty(t, failResponses)
@@ -481,7 +481,7 @@ func TestSmokeCustomUnitPrecision(t *testing.T) {
481481
require.Equal(t, stats.CallTimeout.Load(), int64(0))
482482
require.Equal(t, stats.CurrentTimeUnit, gen.Cfg.RateLimitUnitDuration.Nanoseconds())
483483

484-
okData, _, failResponses := convertResponsesData(gen)
484+
okData, _, failResponses := gen.GetResponsesData()
485485
require.GreaterOrEqual(t, len(okData), 4950)
486486
require.LessOrEqual(t, len(okData), 5010)
487487
require.Empty(t, failResponses)
@@ -506,7 +506,7 @@ func TestSmokeStaticRPSScheduleIsNotBlocking(t *testing.T) {
506506
require.Equal(t, gen.Stats().Failed.Load(), int64(0))
507507
require.Equal(t, gen.Stats().CallTimeout.Load(), int64(0))
508508

509-
okData, _, failResponses := convertResponsesData(gen)
509+
okData, _, failResponses := gen.GetResponsesData()
510510
require.GreaterOrEqual(t, len(okData), 950)
511511
require.LessOrEqual(t, len(okData), 1010)
512512
require.Empty(t, failResponses)
@@ -675,7 +675,7 @@ func TestSmokeVUsIncrease(t *testing.T) {
675675
require.Equal(t, false, failed)
676676
require.Equal(t, int64(2), stats.CurrentVUs.Load())
677677

678-
okData, okResponses, failResponses := convertResponsesData(gen)
678+
okData, okResponses, failResponses := gen.GetResponsesData()
679679
require.GreaterOrEqual(t, okResponses[0].Duration, 50*time.Millisecond)
680680
require.GreaterOrEqual(t, len(okResponses), 140)
681681
require.GreaterOrEqual(t, len(okData), 140)
@@ -705,7 +705,7 @@ func TestSmokeVUsDecrease(t *testing.T) {
705705
require.Equal(t, false, failed)
706706
require.Equal(t, int64(1), stats.CurrentVUs.Load())
707707

708-
okData, okResponses, failResponses := convertResponsesData(gen)
708+
okData, okResponses, failResponses := gen.GetResponsesData()
709709
require.GreaterOrEqual(t, okResponses[0].Duration, 50*time.Millisecond)
710710
require.GreaterOrEqual(t, len(okResponses), 140)
711711
require.GreaterOrEqual(t, len(okData), 140)
@@ -756,7 +756,7 @@ func TestSamplingSuccessfulResults(t *testing.T) {
756756
require.LessOrEqual(t, stats.SamplesRecorded.Load(), int64(65))
757757
require.GreaterOrEqual(t, stats.SamplesSkipped.Load(), int64(35))
758758
require.LessOrEqual(t, stats.SamplesSkipped.Load(), int64(65))
759-
_, okResponses, failResponses := convertResponsesData(gen)
759+
_, okResponses, failResponses := gen.GetResponsesData()
760760
require.GreaterOrEqual(t, len(okResponses), 35)
761761
require.LessOrEqual(t, len(okResponses), 65)
762762
require.Empty(t, failResponses)
@@ -808,7 +808,7 @@ func TestProfiles(t *testing.T) {
808808
g1Stats := g1.Stats()
809809
require.Equal(t, int64(2), g1Stats.CurrentRPS.Load())
810810

811-
okData, okResponses, failResponses := convertResponsesData(g1)
811+
okData, okResponses, failResponses := g1.GetResponsesData()
812812
require.GreaterOrEqual(t, okResponses[0].Duration, 50*time.Millisecond)
813813
require.Greater(t, len(okResponses), 10)
814814
require.Greater(t, len(okData), 10)
@@ -821,7 +821,7 @@ func TestProfiles(t *testing.T) {
821821
g2Stats := g2.Stats()
822822
require.Equal(t, int64(1), g2Stats.CurrentVUs.Load())
823823

824-
okData, okResponses, failResponses = convertResponsesData(g2)
824+
okData, okResponses, failResponses = g2.GetResponsesData()
825825
require.GreaterOrEqual(t, okResponses[0].Duration, 50*time.Millisecond)
826826
require.Greater(t, len(okResponses), 90)
827827
require.Greater(t, len(okData), 90)
@@ -864,7 +864,7 @@ func TestProfiles(t *testing.T) {
864864
require.NoError(t, err)
865865
g1 := p.Generators[0]
866866
g1Stats := g1.Stats()
867-
_, okResponses, failResponses := convertResponsesData(g1)
867+
_, okResponses, failResponses := g1.GetResponsesData()
868868
require.Equal(t, int64(10), g1Stats.CurrentRPS.Load())
869869
require.GreaterOrEqual(t, okResponses[0].Duration, 50*time.Millisecond)
870870
require.GreaterOrEqual(t, len(okResponses), 70)
@@ -873,7 +873,7 @@ func TestProfiles(t *testing.T) {
873873

874874
g2 := p.Generators[1]
875875
g2Stats := g2.Stats()
876-
_, okResponses, failResponses = convertResponsesData(g2)
876+
_, okResponses, failResponses = g2.GetResponsesData()
877877
require.Equal(t, int64(1), g2Stats.CurrentVUs.Load())
878878
require.Greater(t, len(okResponses), 110)
879879
require.Empty(t, failResponses)
@@ -902,7 +902,7 @@ func TestSamplerStoresFailedResults(t *testing.T) {
902902
stats := gen.Stats()
903903
require.GreaterOrEqual(t, stats.SamplesRecorded.Load(), int64(400))
904904
require.GreaterOrEqual(t, stats.SamplesSkipped.Load(), int64(0))
905-
_, _, failResponses := convertResponsesData(gen)
905+
_, _, failResponses := gen.GetResponsesData()
906906
require.GreaterOrEqual(t, len(failResponses), 400)
907907
})
908908
t.Run("failed results are always stored - VU", func(t *testing.T) {
@@ -924,7 +924,7 @@ func TestSamplerStoresFailedResults(t *testing.T) {
924924
stats := gen.Stats()
925925
require.GreaterOrEqual(t, stats.SamplesRecorded.Load(), int64(600))
926926
require.GreaterOrEqual(t, stats.SamplesSkipped.Load(), int64(0))
927-
_, _, failResponses := convertResponsesData(gen)
927+
_, _, failResponses := gen.GetResponsesData()
928928
require.GreaterOrEqual(t, len(failResponses), 600)
929929
})
930930
t.Run("timed out results are always stored - RPS", func(t *testing.T) {
@@ -947,7 +947,7 @@ func TestSamplerStoresFailedResults(t *testing.T) {
947947
stats := gen.Stats()
948948
require.GreaterOrEqual(t, stats.SamplesRecorded.Load(), int64(400))
949949
require.GreaterOrEqual(t, stats.SamplesSkipped.Load(), int64(0))
950-
_, _, failResponses := convertResponsesData(gen)
950+
_, _, failResponses := gen.GetResponsesData()
951951
require.GreaterOrEqual(t, len(failResponses), 400)
952952
})
953953
t.Run("timed out results are always stored - VU", func(t *testing.T) {
@@ -970,7 +970,7 @@ func TestSamplerStoresFailedResults(t *testing.T) {
970970
stats := gen.Stats()
971971
require.GreaterOrEqual(t, stats.SamplesRecorded.Load(), int64(400))
972972
require.GreaterOrEqual(t, stats.SamplesSkipped.Load(), int64(0))
973-
_, _, failResponses := convertResponsesData(gen)
973+
_, _, failResponses := gen.GetResponsesData()
974974
require.GreaterOrEqual(t, len(failResponses), 600)
975975
})
976976
}
@@ -999,7 +999,7 @@ func TestSmokePauseResumeGenerator(t *testing.T) {
999999
_, failed := gen.Wait()
10001000
require.Equal(t, false, failed)
10011001
stats := gen.Stats()
1002-
_, okResponses, failResponses := convertResponsesData(gen)
1002+
_, okResponses, failResponses := gen.GetResponsesData()
10031003
require.Equal(t, int64(10), stats.CurrentRPS.Load())
10041004
require.GreaterOrEqual(t, len(okResponses), 60)
10051005
require.Empty(t, failResponses)
@@ -1027,7 +1027,7 @@ func TestSmokePauseResumeGenerator(t *testing.T) {
10271027
require.Equal(t, false, failed)
10281028

10291029
stats := gen.Stats()
1030-
_, okResponses, failResponses := convertResponsesData(gen)
1030+
_, okResponses, failResponses := gen.GetResponsesData()
10311031
require.Equal(t, int64(1), stats.CurrentVUs.Load())
10321032
require.GreaterOrEqual(t, len(okResponses), 110)
10331033
require.Empty(t, failResponses)
@@ -1061,7 +1061,7 @@ func TestSmokeNoDuplicateRequestsOnceOnStart(t *testing.T) {
10611061
require.Equal(t, stats.Failed.Load(), int64(0))
10621062
require.Equal(t, stats.Duration, gen.Cfg.duration.Nanoseconds())
10631063

1064-
okData, okResponses, failResponses := convertResponsesData(gen)
1064+
okData, okResponses, failResponses := gen.GetResponsesData()
10651065
require.GreaterOrEqual(t, len(okResponses), 1)
10661066
require.GreaterOrEqual(t, len(okData), 1)
10671067
require.Equal(t, okData[0], "successCallData")

0 commit comments

Comments
 (0)