Skip to content

Commit 8b2afbf

Browse files
committed
test: add mysql connector tests
In order to increase the coverage of the patch, I added the following tests: - connection metrics can't be registered - duplicate db names are used to create the datastore Signed-off-by: leonnicolas <[email protected]>
1 parent 4930eed commit 8b2afbf

File tree

1 file changed

+48
-1
lines changed

1 file changed

+48
-1
lines changed

internal/datastore/mysql/datastore_test.go

Lines changed: 48 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ package mysql
66
import (
77
"context"
88
"database/sql"
9+
"errors"
910
"fmt"
1011
"testing"
1112
"time"
@@ -132,6 +133,24 @@ func TestMySQLRevisionTimestamps(t *testing.T) {
132133
t.Run("TransactionTimestamps", createDatastoreTest(b, TransactionTimestampsTest, defaultOptions...))
133134
}
134135

136+
func multiDataStoreWithDuplicateDBNames(t *testing.T, b testdatastore.RunningEngineForTest, errMsg string) func(*testing.T) {
137+
return func(t *testing.T) {
138+
ctx := t.Context()
139+
140+
ds := b.NewDatastore(t, func(engine, uri string) datastore.Datastore {
141+
ds, err := newMySQLDatastore(ctx, uri, primaryInstanceID, WithEnablePrometheusStats(true))
142+
require.NoError(t, err)
143+
144+
_, err = newMySQLDatastore(ctx, uri, primaryInstanceID, WithEnablePrometheusStats(true))
145+
require.Error(t, err)
146+
require.ErrorContains(t, err, errMsg)
147+
148+
return ds
149+
})
150+
defer failOnError(t, ds.Close)
151+
}
152+
}
153+
135154
func additionalMySQLTests(t *testing.T, b testdatastore.RunningEngineForTest) {
136155
{
137156
reg := prometheus.NewRegistry()
@@ -152,13 +171,41 @@ func additionalMySQLTests(t *testing.T, b testdatastore.RunningEngineForTest) {
152171
t.Run("QuantizedRevisions", func(t *testing.T) {
153172
QuantizedRevisionTest(t, b)
154173
})
174+
{
175+
reg := &unregisterable{*prometheus.NewRegistry()}
176+
prometheus.DefaultGatherer = reg
177+
prometheus.DefaultRegisterer = reg
178+
}
179+
t.Run("DatastoreWithUnregisterableRegistry", func(t *testing.T) {
180+
_ = b.NewDatastore(t, func(engine, uri string) datastore.Datastore {
181+
ds, err := newMySQLDatastore(t.Context(), uri, primaryInstanceID, WithEnablePrometheusStats(true))
182+
require.Error(t, err)
183+
require.ErrorContains(t, err, "NewMySQLDatastore: unable to instrument connector.")
184+
require.Nil(t, ds)
185+
return ds
186+
})
187+
})
155188
t.Run("Locking", createMultiDatastoreTest(b, LockingTest, defaultOptions...))
156189
{
157190
reg := prometheus.NewRegistry()
158191
prometheus.DefaultGatherer = reg
159192
prometheus.DefaultRegisterer = reg
160193
}
161-
t.Run("InstrumentedLocking", createMultiDatastoreTest(b, LockingTest, append(defaultOptions, WithEnablePrometheusStats(true))...))
194+
t.Run("MultiDatastoreWithPrometheus", createMultiDatastoreTest(b, func(t *testing.T, ds1 datastore.Datastore, ds2 datastore.Datastore) {}, append(defaultOptions, WithEnablePrometheusStats(true))...))
195+
{
196+
reg := prometheus.NewRegistry()
197+
prometheus.DefaultGatherer = reg
198+
prometheus.DefaultRegisterer = reg
199+
}
200+
t.Run("MultiDatastoreWithPrometheusWithDuplicateDBNames", multiDataStoreWithDuplicateDBNames(t, b, "duplicate metrics collector registration attempted"))
201+
}
202+
203+
type unregisterable struct {
204+
prometheus.Registry
205+
}
206+
207+
func (*unregisterable) Register(prometheus.Collector) error {
208+
return errors.New("unregisterable")
162209
}
163210

164211
func LockingTest(t *testing.T, ds datastore.Datastore, ds2 datastore.Datastore) {

0 commit comments

Comments
 (0)