invoices: allow migration test to work on kv sqlite channeldb

This commit is contained in:
Andras Banki-Horvath
2025-01-10 11:24:14 +01:00
parent 5e3ef3ec0c
commit ea98933317

View File

@@ -3,12 +3,18 @@ package invoices_test
import ( import (
"context" "context"
"database/sql" "database/sql"
"os"
"path"
"testing" "testing"
"time" "time"
"github.com/lightningnetwork/lnd/channeldb" "github.com/lightningnetwork/lnd/channeldb"
"github.com/lightningnetwork/lnd/clock" "github.com/lightningnetwork/lnd/clock"
invpkg "github.com/lightningnetwork/lnd/invoices" invpkg "github.com/lightningnetwork/lnd/invoices"
"github.com/lightningnetwork/lnd/kvdb"
"github.com/lightningnetwork/lnd/kvdb/sqlbase"
"github.com/lightningnetwork/lnd/kvdb/sqlite"
"github.com/lightningnetwork/lnd/lncfg"
"github.com/lightningnetwork/lnd/sqldb" "github.com/lightningnetwork/lnd/sqldb"
"github.com/lightningnetwork/lnd/sqldb/sqlc" "github.com/lightningnetwork/lnd/sqldb/sqlc"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
@@ -132,15 +138,66 @@ func TestMigrationWithChannelDB(t *testing.T) {
for _, test := range tests { for _, test := range tests {
test := test test := test
t.Run(test.name, func(t *testing.T) { t.Run(test.name, func(t *testing.T) {
store := channeldb.OpenForTesting(t, test.dbPath) var kvStore *channeldb.DB
// First check if we have a channel.sqlite file in the
// testdata directory. If we do, we'll use that as the
// channel db for the migration test.
chanDBPath := path.Join(
test.dbPath, lncfg.SqliteChannelDBName,
)
// Just some sane defaults for the sqlite config.
const (
timeout = 5 * time.Second
maxConns = 50
)
sqliteConfig := &sqlite.Config{
Timeout: timeout,
BusyTimeout: timeout,
MaxConnections: maxConns,
}
if fileExists(chanDBPath) {
sqlbase.Init(maxConns)
sqliteBackend, err := kvdb.Open(
kvdb.SqliteBackendName,
context.Background(),
sqliteConfig, test.dbPath,
lncfg.SqliteChannelDBName,
lncfg.NSChannelDB,
)
require.NoError(t, err)
kvStore, err = channeldb.CreateWithBackend(
sqliteBackend,
)
require.NoError(t, err)
} else {
kvStore = channeldb.OpenForTesting(
t, test.dbPath,
)
}
t.Run("Postgres", func(t *testing.T) { t.Run("Postgres", func(t *testing.T) {
migrationTest(t, store, false) migrationTest(t, kvStore, false)
}) })
t.Run("SQLite", func(t *testing.T) { t.Run("SQLite", func(t *testing.T) {
migrationTest(t, store, true) migrationTest(t, kvStore, true)
}) })
}) })
} }
} }
func fileExists(filename string) bool {
info, err := os.Stat(filename)
if os.IsNotExist(err) {
return false
}
return !info.IsDir()
}