Unistore Chore: Add OTEL testing harness (#94835)

* add testing harness

* fix mockery and linters

* fix data race in tests

* fix data race in tests

* reduce cardinality of data
This commit is contained in:
Diego Augusto Molina
2024-10-17 08:41:06 -03:00
committed by GitHub
parent 8b9bb2acf6
commit cf08f6762d
14 changed files with 757 additions and 42 deletions
+26 -2
View File
@@ -28,6 +28,30 @@ func (d sqlDB) DriverName() string {
return d.driverName
}
func (d sqlDB) BeginTx(ctx context.Context, opts *sql.TxOptions) (db.Tx, error) {
return d.DB.BeginTx(ctx, opts)
func (d sqlDB) QueryContext(ctx context.Context, query string, args ...any) (db.Rows, error) {
return d.DB.QueryContext(ctx, query, args...)
}
func (d sqlDB) QueryRowContext(ctx context.Context, query string, args ...any) db.Row {
return d.DB.QueryRowContext(ctx, query, args...)
}
func (d sqlDB) BeginTx(ctx context.Context, opts *sql.TxOptions) (db.Tx, error) {
tx, err := d.DB.BeginTx(ctx, opts)
if err != nil {
return nil, err
}
return sqlTx{tx}, err
}
type sqlTx struct {
*sql.Tx
}
func (d sqlTx) QueryContext(ctx context.Context, query string, args ...any) (db.Rows, error) {
return d.Tx.QueryContext(ctx, query, args...)
}
func (d sqlTx) QueryRowContext(ctx context.Context, query string, args ...any) db.Row {
return d.Tx.QueryRowContext(ctx, query, args...)
}
@@ -11,6 +11,7 @@ import (
func TestDB_BeginTx(t *testing.T) {
t.Parallel()
registerTestSQLDrivers()
ctx := testutil.NewDefaultTestContext(t)
sqlDB, err := sql.Open(driverWithIsolationLevelName, "")
+5 -1
View File
@@ -60,6 +60,7 @@ type resourceDBProvider struct {
cfg *setting.Cfg
log log.Logger
migrateFunc func(context.Context, *xorm.Engine, *setting.Cfg) error
tracer trace.Tracer
registerMetrics bool
logQueries bool
}
@@ -77,6 +78,7 @@ func newResourceDBProvider(grafanaDB infraDB.DB, cfg *setting.Cfg, tracer trace.
log: log.New("entity-db"),
logQueries: getter.Bool("log_queries"),
migrateFunc: migrations.MigrateResourceStore,
tracer: tracer,
}
dbType := getter.String("type")
@@ -145,5 +147,7 @@ func (p *resourceDBProvider) init(ctx context.Context) (db.DB, error) {
}
}
return NewDB(p.engine.DB().DB, p.engine.Dialect().DriverName()), nil
d := NewDB(p.engine.DB().DB, p.engine.Dialect().DriverName())
return d, nil
}
@@ -4,6 +4,7 @@ import (
"context"
"database/sql"
"net/http"
"sync"
"testing"
"github.com/google/uuid"
@@ -111,8 +112,18 @@ func newTestInfraDB(t *testing.T, m cfgMap) infraDB.DB {
return sqlstoreDB
}
// globalUnprotectedMutableState controls access to global mutable state found
// in the `setting` package that is not appropriately protected. This would
// ideally be a part of some struct instead of being global, be protected if it
// needs to change, and be unmutable once it no longer needs to change. Example:
// `setting.AppUrl`. Nothing can run in parallel because of this.
// TODO: fix that.
var globalUnprotectedMutableState sync.Mutex
func newCfgFromIniMap(t *testing.T, m cfgMap) *setting.Cfg {
t.Helper()
globalUnprotectedMutableState.Lock()
defer globalUnprotectedMutableState.Unlock()
cfg, err := setting.NewCfgFromINIFile(newTestINIFile(t, m))
require.NoError(t, err)
return cfg