Worker: fix sqlite connection issue in unit tests
Fix sqlite issues in the "upstream buffer" test. The test used `:memory:` to have an in-memory DB to separate from other tests. The "flush at shutdown" code runs in a different goroutine, though, and creates a new DB connection. The SQLite separation was too strong, making that function not find any tables. This is now solved by having an in-memory database that's shared between all connections made from the same unit test.
This commit is contained in:
parent
7e28cfa69c
commit
da1b42f9fa
@ -5,7 +5,7 @@ package worker
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"errors"
|
"errors"
|
||||||
"os"
|
"fmt"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/benbjohnson/clock"
|
"github.com/benbjohnson/clock"
|
||||||
@ -17,8 +17,6 @@ import (
|
|||||||
"git.blender.org/flamenco/pkg/api"
|
"git.blender.org/flamenco/pkg/api"
|
||||||
)
|
)
|
||||||
|
|
||||||
const testBufferDBFilename = ":memory:"
|
|
||||||
|
|
||||||
type UpstreamBufferDBMocks struct {
|
type UpstreamBufferDBMocks struct {
|
||||||
client *mocks.MockFlamencoClient
|
client *mocks.MockFlamencoClient
|
||||||
clock *clock.Mock
|
clock *clock.Mock
|
||||||
@ -30,9 +28,6 @@ func mockUpstreamBufferDB(t *testing.T, mockCtrl *gomock.Controller) (*UpstreamB
|
|||||||
clock: clock.NewMock(),
|
clock: clock.NewMock(),
|
||||||
}
|
}
|
||||||
|
|
||||||
// Always start tests with a fresh database.
|
|
||||||
os.Remove(testBufferDBFilename)
|
|
||||||
|
|
||||||
ub, err := NewUpstreamBuffer(mocks.client, mocks.clock)
|
ub, err := NewUpstreamBuffer(mocks.client, mocks.clock)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("unable to create upstream buffer: %v", err)
|
t.Fatalf("unable to create upstream buffer: %v", err)
|
||||||
@ -41,6 +36,13 @@ func mockUpstreamBufferDB(t *testing.T, mockCtrl *gomock.Controller) (*UpstreamB
|
|||||||
return ub, &mocks
|
return ub, &mocks
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// sqliteTestDBName returns a DSN for SQLite that separates tests from each
|
||||||
|
// other, but lets all connections made within the same test to connect to the
|
||||||
|
// same in-memory instance.
|
||||||
|
func sqliteTestDBName(t *testing.T) string {
|
||||||
|
return fmt.Sprintf("file:%s?mode=memory&cache=shared", t.Name())
|
||||||
|
}
|
||||||
|
|
||||||
func TestUpstreamBufferCloseUnopened(t *testing.T) {
|
func TestUpstreamBufferCloseUnopened(t *testing.T) {
|
||||||
mockCtrl := gomock.NewController(t)
|
mockCtrl := gomock.NewController(t)
|
||||||
defer mockCtrl.Finish()
|
defer mockCtrl.Finish()
|
||||||
@ -57,7 +59,7 @@ func TestUpstreamBufferManagerUnavailable(t *testing.T) {
|
|||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
|
|
||||||
ub, mocks := mockUpstreamBufferDB(t, mockCtrl)
|
ub, mocks := mockUpstreamBufferDB(t, mockCtrl)
|
||||||
assert.NoError(t, ub.OpenDB(ctx, testBufferDBFilename))
|
assert.NoError(t, ub.OpenDB(ctx, sqliteTestDBName(t)))
|
||||||
|
|
||||||
// Send a task update without Manager available.
|
// Send a task update without Manager available.
|
||||||
taskID := "3960dec4-978e-40ab-bede-bfa6428c6ebc"
|
taskID := "3960dec4-978e-40ab-bede-bfa6428c6ebc"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user