test: for postgres and jenkins postgres setup

This commit is contained in:
harsh-98 2023-09-21 11:01:13 +07:00 committed by harsh jain
parent 7826e31f14
commit 2f9f304762
5 changed files with 151 additions and 19 deletions

View File

@ -209,3 +209,11 @@ test-onchain:
test-onchain-with-race:
${GOBIN} test -race -v -count 1 -tags="${BUILD_TAGS}" github.com/waku-org/go-waku/waku/v2/protocol/rln
test-postgres: PG_BUILD_TAGS = ${BUILD_TAGS} include_postgres_tests
test-postgres:
${GOBIN} test -p 1 -v -count 1 -tags="${PG_BUILD_TAGS}" github.com/waku-org/go-waku/waku/persistence
test-postgres-with-race:
${GOBIN} test -race -p 1 -v -count 1 -tags="${PG_BUILD_TAGS}" github.com/waku-org/go-waku/waku/persistence

View File

@ -30,6 +30,8 @@ pipeline {
environment {
TARGET = 'tests'
DB_CONT = "status-go-test-db-${env.EXECUTOR_NUMBER.toInteger() + 1}"
DB_PORT = "${5432 + env.EXECUTOR_NUMBER.toInteger()}"
REPO = "${env.WORKSPACE}/src/github.com/waku-org/go-waku"
GOCACHE = "${env.WORKSPACE_TMP}/go-build"
GOPATH = "${env.WORKSPACE}/go"
@ -58,6 +60,28 @@ pipeline {
} } }
}
stage('postgres tests') {
environment {
TEST_DB_PORT = "${env.DB_PORT}"
}
steps { script {
db = docker.image('postgres:9.6-alpine').withRun([
"--name=${DB_CONT}",
"--env=POSTGRES_HOST_AUTH_METHOD=trust",
"--publish=${DB_PORT}:${DB_PORT}",
].join(' '), "-p ${DB_PORT}") { c ->
if (params.RACE) {
nix.develop('make test-postgres-with-race', pure: false)
}else {
nix.develop('make test-postgres', pure: false)
}
}
} }
post { cleanup { /* Leftover DB containers. */
sh "docker rm ${DB_CONT} || true"
} }
}
stage('Ganache') {
steps { script {
ganache = docker.image(

54
waku/persistence/mock.go Normal file
View File

@ -0,0 +1,54 @@
package persistence
import (
"database/sql"
"fmt"
"log"
"os"
_ "github.com/jackc/pgx/v5/stdlib" // Blank import to register the postgres driver
)
// var dbUrlTemplate = "postgres://postgres@localhost:%s/%s?sslmode=disable"
var dbUrlTemplate = "postgres://harshjain@localhost:%s/%s?sslmode=disable"
func ResetDefaultTestPostgresDB(dropDBUrl string) error {
db, err := sql.Open("postgres", dropDBUrl)
if err != nil {
return err
}
deletePrevConnectionsSql := `
SELECT pid, pg_terminate_backend(pid)
FROM pg_stat_activity
WHERE datname in ('template1', 'postgres') AND pid <> pg_backend_pid();`
_, err = db.Exec(deletePrevConnectionsSql)
if err != nil {
return err
}
_, err = db.Exec("DROP DATABASE IF EXISTS postgres;")
if err != nil {
return err
}
_, err = db.Exec("CREATE DATABASE postgres;")
return err
}
func NewMockPgDB() *sql.DB {
mockPgDBPort := os.Getenv("TEST_DB_PORT")
//
dropDBUrl := fmt.Sprintf(dbUrlTemplate, mockPgDBPort, "template1")
fmt.Println(dropDBUrl)
if err := ResetDefaultTestPostgresDB(dropDBUrl); err != nil {
log.Fatalf("an error '%s' was not expected when opening a stub database connection", err)
}
mockDBUrl := fmt.Sprintf(dbUrlTemplate, mockPgDBPort, "postgres")
db, err := sql.Open("pgx", mockDBUrl)
if err != nil {
log.Fatalf("an error '%s' was not expected when opening a stub database connection", err)
}
return db
}

View File

@ -0,0 +1,52 @@
//go:build include_postgres_tests
// +build include_postgres_tests
package postgres
import (
"testing"
"github.com/stretchr/testify/require"
"github.com/waku-org/go-waku/waku/persistence"
)
func TestQueries(t *testing.T) {
db := persistence.NewMockPgDB()
queries, err := NewQueries("test_queries", db)
require.NoError(t, err)
query := queries.Delete()
require.NotEmpty(t, query)
query = queries.Exists()
require.NotEmpty(t, query)
query = queries.Get()
require.NotEmpty(t, query)
query = queries.Put()
require.NotEmpty(t, query)
query = queries.Query()
require.NotEmpty(t, query)
query = queries.Prefix()
require.NotEmpty(t, query)
query = queries.Limit()
require.NotEmpty(t, query)
query = queries.Offset()
require.NotEmpty(t, query)
query = queries.GetSize()
require.NotEmpty(t, query)
}
func TestCreateTable(t *testing.T) {
db := persistence.NewMockPgDB()
err := CreateTable(db, "test_create_table")
require.NoError(t, err)
}

View File

@ -1,3 +1,6 @@
//go:build include_postgres_tests
// +build include_postgres_tests
package persistence
import (
@ -7,41 +10,31 @@ import (
"testing"
"time"
"github.com/golang-migrate/migrate/v4/database/sqlite3"
"github.com/golang-migrate/migrate/v4/database/postgres"
_ "github.com/mattn/go-sqlite3" // Blank import to register the sqlite3 driver
"github.com/prometheus/client_golang/prometheus"
"github.com/stretchr/testify/require"
"github.com/waku-org/go-waku/tests"
"github.com/waku-org/go-waku/waku/persistence/migrate"
sqlitemigrations "github.com/waku-org/go-waku/waku/persistence/sqlite/migrations"
postgresmigration "github.com/waku-org/go-waku/waku/persistence/postgres/migrations"
"github.com/waku-org/go-waku/waku/v2/protocol"
"github.com/waku-org/go-waku/waku/v2/protocol/store/pb"
"github.com/waku-org/go-waku/waku/v2/timesource"
"github.com/waku-org/go-waku/waku/v2/utils"
"go.uber.org/zap"
)
func Migrate(db *sql.DB) error {
migrationDriver, err := sqlite3.WithInstance(db, &sqlite3.Config{
MigrationsTable: "gowaku_" + sqlite3.DefaultMigrationsTable,
migrationDriver, err := postgres.WithInstance(db, &postgres.Config{
MigrationsTable: "gowaku_" + postgres.DefaultMigrationsTable,
})
if err != nil {
return err
}
return migrate.Migrate(db, migrationDriver, sqlitemigrations.AssetNames(), sqlitemigrations.Asset)
}
func NewMock() *sql.DB {
db, err := sql.Open("sqlite3", ":memory:")
if err != nil {
utils.Logger().Fatal("opening a stub database connection", zap.Error(err))
}
return db
return migrate.Migrate(db, migrationDriver, postgresmigration.AssetNames(), postgresmigration.Asset)
}
func TestDbStore(t *testing.T) {
db := NewMock()
db := NewMockPgDB()
store, err := NewDBStore(prometheus.DefaultRegisterer, utils.Logger(), WithDB(db), WithMigrations(Migrate))
require.NoError(t, err)
@ -61,7 +54,7 @@ func TestDbStore(t *testing.T) {
}
func TestStoreRetention(t *testing.T) {
db := NewMock()
db := NewMockPgDB()
store, err := NewDBStore(prometheus.DefaultRegisterer, utils.Logger(), WithDB(db), WithMigrations(Migrate), WithRetentionPolicy(5, 20*time.Second))
require.NoError(t, err)
@ -104,7 +97,8 @@ func TestStoreRetention(t *testing.T) {
}
func TestQuery(t *testing.T) {
db := NewMock()
db := NewMockPgDB()
store, err := NewDBStore(prometheus.DefaultRegisterer, utils.Logger(), WithDB(db), WithMigrations(Migrate), WithRetentionPolicy(5, 20*time.Second))
require.NoError(t, err)