Enhancements

Signed-off-by: Danny Kopping <danny@coder.com>
This commit is contained in:
Danny Kopping 2024-05-02 10:13:41 +02:00
parent 4f62b40c92
commit 3d9e3ddaad
No known key found for this signature in database
GPG Key ID: A1B5D94381738C65
2 changed files with 38 additions and 23 deletions

View File

@ -44,8 +44,7 @@ func MeasureLatency(ctx context.Context, p Pubsub) (send float64, recv float64,
select {
case <-ctx.Done():
cancel()
return send, -1, context.DeadlineExceeded
return send, -1, ctx.Err()
case val := <-res:
return send, val, nil
}

View File

@ -298,36 +298,52 @@ func TestPubsub_Disconnect(t *testing.T) {
func TestMeasureLatency(t *testing.T) {
t.Parallel()
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
logger := slogtest.Make(t, nil).Leveled(slog.LevelDebug)
connectionURL, closePg, err := dbtestutil.Open()
require.NoError(t, err)
defer closePg()
db, err := sql.Open("postgres", connectionURL)
require.NoError(t, err)
defer db.Close()
ps, err := pubsub.New(ctx, logger, db, connectionURL)
require.NoError(t, err)
defer ps.Close()
newPubsub := func() (pubsub.Pubsub, func()) {
ctx, cancel := context.WithCancel(context.Background())
logger := slogtest.Make(t, nil).Leveled(slog.LevelDebug)
connectionURL, closePg, err := dbtestutil.Open()
require.NoError(t, err)
db, err := sql.Open("postgres", connectionURL)
require.NoError(t, err)
ps, err := pubsub.New(ctx, logger, db, connectionURL)
require.NoError(t, err)
return ps, func() {
_ = ps.Close()
_ = db.Close()
closePg()
cancel()
}
}
t.Run("MeasureLatency", func(t *testing.T) {
tCtx, tCancel := context.WithTimeout(ctx, testutil.WaitSuperLong)
defer tCancel()
t.Parallel()
send, recv, err := pubsub.MeasureLatency(tCtx, ps)
ps, done := newPubsub()
defer done()
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitSuperLong)
defer cancel()
send, recv, err := pubsub.MeasureLatency(ctx, ps)
require.NoError(t, err)
require.Greater(t, send, 0)
require.Greater(t, recv, 0)
require.Greater(t, send, 0.0)
require.Greater(t, recv, 0.0)
})
t.Run("MeasureLatencyRecvTimeout", func(t *testing.T) {
tCtx, tCancel := context.WithTimeout(ctx, time.Nanosecond)
defer tCancel()
t.Parallel()
send, recv, err := pubsub.MeasureLatency(tCtx, ps)
ps, done := newPubsub()
defer done()
// nolint:gocritic // need a very short timeout here to trigger error
ctx, cancel := context.WithTimeout(context.Background(), time.Nanosecond)
defer cancel()
send, recv, err := pubsub.MeasureLatency(ctx, ps)
require.ErrorContains(t, err, context.DeadlineExceeded.Error())
require.Greater(t, send, 0)
require.Greater(t, send, 0.0)
require.EqualValues(t, recv, -1)
})
}