Skip to content
This repository was archived by the owner on Apr 2, 2024. It is now read-only.

Commit bc08632

Browse files
Thread-safe test result verification
testify `require` functions have to run on the same thread as test function. Otherwise in case of failure go routines might be left hanging and blocking test completion. This is because `require` is using FailNow() test function. So we switch to use `assert` for cases where we run checks from different go routines.
1 parent 511ccf5 commit bc08632

File tree

3 files changed

+23
-22
lines changed

3 files changed

+23
-22
lines changed

pkg/internal/testhelpers/postgres_container.go

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,20 +7,21 @@ package testhelpers
77
import (
88
"context"
99
"fmt"
10-
"github.com/blang/semver/v4"
1110
"io"
1211
"os"
1312
"regexp"
1413
"runtime"
1514
"testing"
1615
"time"
1716

17+
"github.com/blang/semver/v4"
18+
1819
"github.com/docker/go-connections/nat"
1920
"github.com/jackc/pgconn"
2021
"github.com/jackc/pgx/v4"
2122
"github.com/jackc/pgx/v4/pgxpool"
2223
_ "github.com/jackc/pgx/v4/stdlib"
23-
"github.com/stretchr/testify/require"
24+
"github.com/stretchr/testify/assert"
2425
"github.com/testcontainers/testcontainers-go"
2526
"github.com/testcontainers/testcontainers-go/wait"
2627
)
@@ -154,27 +155,27 @@ func getRoleUser(role string) string {
154155
func setupRole(t testing.TB, dbName string, role string) {
155156
user := getRoleUser(role)
156157
dbOwner, err := pgx.Connect(context.Background(), PgConnectURL(dbName, Superuser))
157-
require.NoError(t, err)
158+
assert.NoError(t, err)
158159
defer dbOwner.Close(context.Background())
159160

160161
_, err = dbOwner.Exec(context.Background(), fmt.Sprintf("CALL _prom_catalog.execute_everywhere(NULL, $$ GRANT %s TO %s $$);", role, user))
161-
require.NoError(t, err)
162+
assert.NoError(t, err)
162163
}
163164

164165
func MakePromUserPromAdmin(t testing.TB, dbName string) {
165166
db, err := pgx.Connect(context.Background(), PgConnectURL(dbName, Superuser))
166-
require.NoError(t, err)
167+
assert.NoError(t, err)
167168
defer db.Close(context.Background())
168169

169170
_, err = db.Exec(context.Background(), fmt.Sprintf("CALL _prom_catalog.execute_everywhere('distributed_prom_user', $$ GRANT prom_admin TO %s $$);", promUser))
170-
require.NoError(t, err)
171+
assert.NoError(t, err)
171172
}
172173

173174
func PgxPoolWithRole(t testing.TB, dbName string, role string) *pgxpool.Pool {
174175
user := getRoleUser(role)
175176
setupRole(t, dbName, role)
176177
pool, err := pgxpool.Connect(context.Background(), PgConnectURLUser(dbName, user))
177-
require.NoError(t, err)
178+
assert.NoError(t, err)
178179
return pool
179180
}
180181

@@ -195,7 +196,7 @@ func GetReadOnlyConnection(t testing.TB, DBName string) *pgxpool.Pool {
195196
setupRole(t, DBName, role)
196197

197198
pgConfig, err := pgxpool.ParseConfig(PgConnectURLUser(DBName, user))
198-
require.NoError(t, err)
199+
assert.NoError(t, err)
199200

200201
pgConfig.AfterConnect = func(ctx context.Context, conn *pgx.Conn) error {
201202
_, err := conn.Exec(context.Background(), "SET SESSION CHARACTERISTICS AS TRANSACTION READ ONLY")

pkg/pgmodel/model/sql_test_utils.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import (
1919
"github.com/jackc/pgx/v4"
2020
"github.com/jackc/pgx/v4/pgxpool"
2121
"github.com/sergi/go-diff/diffmatchpatch"
22-
"github.com/stretchr/testify/require"
22+
"github.com/stretchr/testify/assert"
2323
"github.com/timescale/promscale/pkg/pgmodel/common/errors"
2424
"github.com/timescale/promscale/pkg/pgmodel/model/pgutf8str"
2525
"github.com/timescale/promscale/pkg/pgxconn"
@@ -145,21 +145,21 @@ func (r *SqlRecorder) checkQuery(sql string, args ...interface{}) (RowResults, e
145145
r.t.Errorf("@ %d unexpected query:\ngot:\n\t'%s'\nexpected:\n\t'%s'\ndiff:\n\t%v", idx, sql, row.Sql, dmp.DiffPrettyText(diffs))
146146
}
147147

148-
require.Equal(r.t, len(row.Args), len(args), "Args of different lengths @ %d %s", idx, sql)
148+
assert.Equal(r.t, len(row.Args), len(args), "Args of different lengths @ %d %s", idx, sql)
149149
for i := range row.Args {
150150
switch row.Args[i].(type) {
151151
case pgtype.TextEncoder:
152152
ci := pgtype.NewConnInfo()
153153
got, err := args[i].(pgtype.TextEncoder).EncodeText(ci, nil)
154-
require.NoError(r.t, err)
154+
assert.NoError(r.t, err)
155155
expected, err := row.Args[i].(pgtype.TextEncoder).EncodeText(ci, nil)
156-
require.NoError(r.t, err)
157-
require.Equal(r.t, string(expected), string(got), "sql args aren't equal for query # %v: %v", idx, sql)
156+
assert.NoError(r.t, err)
157+
assert.Equal(r.t, string(expected), string(got), "sql args aren't equal for query # %v: %v", idx, sql)
158158
default:
159159
if !row.ArgsUnordered {
160-
require.Equal(r.t, row.Args[i], args[i], "sql args aren't equal for query # %v: %v", idx, sql)
160+
assert.Equal(r.t, row.Args[i], args[i], "sql args aren't equal for query # %v: %v", idx, sql)
161161
} else {
162-
require.ElementsMatch(r.t, row.Args[i], args[i], "sql args aren't equal for query # %v: %v", idx, sql)
162+
assert.ElementsMatch(r.t, row.Args[i], args[i], "sql args aren't equal for query # %v: %v", idx, sql)
163163
}
164164
}
165165
}

pkg/promql/test.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ import (
3434
"github.com/prometheus/prometheus/tsdb"
3535
"github.com/prometheus/prometheus/util/teststorage"
3636
"github.com/prometheus/prometheus/util/testutil"
37-
"github.com/stretchr/testify/require"
37+
"github.com/stretchr/testify/assert"
3838
"github.com/timescale/promscale/pkg/pgmodel/querier"
3939
)
4040

@@ -62,15 +62,15 @@ type TestStorage struct {
6262
// that removes all associated files on closing.
6363
func NewTestStorage(t testutil.T) *TestStorage {
6464
dir, err := ioutil.TempDir("", "test_storage")
65-
require.NoError(t, err, "opening test dir failed")
65+
assert.NoError(t, err, "opening test dir failed")
6666

6767
// Tests just load data for a series sequentially. Thus we
6868
// need a long appendable window.
6969
opts := tsdb.DefaultOptions()
7070
opts.MinBlockDuration = int64(24 * time.Hour / time.Millisecond)
7171
opts.MaxBlockDuration = int64(24 * time.Hour / time.Millisecond)
7272
db, err := tsdb.Open(dir, nil, nil, opts, nil)
73-
require.NoError(t, err, "opening test storage failed")
73+
assert.NoError(t, err, "opening test storage failed")
7474

7575
return &TestStorage{DB: db, dir: dir}
7676
}
@@ -671,7 +671,7 @@ func (t *Test) exec(tc testCommand) error {
671671
func (t *Test) clear() {
672672
if t.storage != nil {
673673
err := t.storage.Close()
674-
require.NoError(t.T, err, "Unexpected error while closing test storage.")
674+
assert.NoError(t.T, err, "Unexpected error while closing test storage.")
675675
}
676676
if t.cancelCtx != nil {
677677
t.cancelCtx()
@@ -696,7 +696,7 @@ func (t *Test) clear() {
696696
// Close closes resources associated with the Test.
697697
func (t *Test) Close() {
698698
t.cancelCtx()
699-
require.NoError(t.T, t.Storage().Close())
699+
assert.NoError(t.T, t.Storage().Close())
700700
}
701701

702702
// samplesAlmostEqual returns true if the two sample lines only differ by a
@@ -795,7 +795,7 @@ func (ll *LazyLoader) parse(input string) error {
795795
func (ll *LazyLoader) clear() {
796796
if ll.storage != nil {
797797
err := ll.storage.Close()
798-
require.NoError(ll.T, err, "Unexpected error while closing test storage.")
798+
assert.NoError(ll.T, err, "Unexpected error while closing test storage.")
799799
}
800800
if ll.cancelCtx != nil {
801801
ll.cancelCtx()
@@ -870,5 +870,5 @@ func (ll *LazyLoader) Storage() storage.Storage {
870870
func (ll *LazyLoader) Close() {
871871
ll.cancelCtx()
872872
err := ll.storage.Close()
873-
require.NoError(ll.T, err, "Unexpected error while closing test storage.")
873+
assert.NoError(ll.T, err, "Unexpected error while closing test storage.")
874874
}

0 commit comments

Comments
 (0)