88 lines
2.2 KiB
Go
88 lines
2.2 KiB
Go
package tests
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"os"
|
|
"strings"
|
|
"testing"
|
|
|
|
embeddedpostgres "github.com/fergusstrange/embedded-postgres"
|
|
"github.com/hashicorp/consul/sdk/freeport"
|
|
_ "github.com/jackc/pgx/v5/stdlib" // this is where we get our pgx database driver from
|
|
"github.com/stretchr/testify/require"
|
|
"gotest.tools/v3/golden"
|
|
|
|
"cosmossdk.io/indexer/postgres"
|
|
"cosmossdk.io/indexer/postgres/internal/testdata"
|
|
"cosmossdk.io/schema/appdata"
|
|
)
|
|
|
|
func TestInitSchema(t *testing.T) {
|
|
t.Run("default", func(t *testing.T) {
|
|
testInitSchema(t, false, "init_schema.txt")
|
|
})
|
|
|
|
t.Run("retain deletions disabled", func(t *testing.T) {
|
|
testInitSchema(t, true, "init_schema_no_retain_delete.txt")
|
|
})
|
|
}
|
|
|
|
func testInitSchema(t *testing.T, disableRetainDeletions bool, goldenFileName string) {
|
|
t.Helper()
|
|
connectionUrl := createTestDB(t)
|
|
|
|
buf := &strings.Builder{}
|
|
logger := func(msg, sql string, params ...interface{}) {
|
|
_, err := fmt.Fprintln(buf, msg)
|
|
require.NoError(t, err)
|
|
_, err = fmt.Fprintln(buf, sql)
|
|
require.NoError(t, err)
|
|
if len(params) != 0 {
|
|
_, err = fmt.Fprintln(buf, "Params:", params)
|
|
require.NoError(t, err)
|
|
}
|
|
_, err = fmt.Fprintln(buf)
|
|
require.NoError(t, err)
|
|
}
|
|
listener, err := postgres.StartIndexer(context.Background(), logger, postgres.Config{
|
|
DatabaseURL: connectionUrl,
|
|
DisableRetainDeletions: disableRetainDeletions,
|
|
})
|
|
require.NoError(t, err)
|
|
|
|
require.NotNil(t, listener.InitializeModuleData)
|
|
require.NoError(t, listener.InitializeModuleData(appdata.ModuleInitializationData{
|
|
ModuleName: "test",
|
|
Schema: testdata.ExampleSchema,
|
|
}))
|
|
|
|
require.NotNil(t, listener.Commit)
|
|
require.NoError(t, listener.Commit(appdata.CommitData{}))
|
|
|
|
golden.Assert(t, buf.String(), goldenFileName)
|
|
}
|
|
|
|
func createTestDB(t *testing.T) (connectionUrl string) {
|
|
t.Helper()
|
|
tempDir, err := os.MkdirTemp("", "postgres-indexer-test")
|
|
require.NoError(t, err)
|
|
t.Cleanup(func() {
|
|
require.NoError(t, os.RemoveAll(tempDir))
|
|
})
|
|
|
|
dbPort := freeport.GetOne(t)
|
|
pgConfig := embeddedpostgres.DefaultConfig().
|
|
Port(uint32(dbPort)).
|
|
DataPath(tempDir)
|
|
|
|
connectionUrl = pgConfig.GetConnectionURL()
|
|
pg := embeddedpostgres.NewDatabase(pgConfig)
|
|
require.NoError(t, pg.Start())
|
|
t.Cleanup(func() {
|
|
require.NoError(t, pg.Stop())
|
|
})
|
|
|
|
return
|
|
}
|