github.com/0xPolygon/supernets2-node@v0.0.0-20230711153321-2fe574524eaa/test/dbutils/dbutils.go (about)

     1  package dbutils
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/0xPolygon/supernets2-node/db"
     7  	"github.com/0xPolygon/supernets2-node/log"
     8  	"github.com/0xPolygon/supernets2-node/test/testutils"
     9  )
    10  
    11  // InitOrResetState will initializes the State db running the migrations or
    12  // will reset all the known data and rerun the migrations
    13  func InitOrResetState(cfg db.Config) error {
    14  	return initOrReset(cfg, "supernets2-state-db")
    15  }
    16  
    17  // InitOrResetPool will initializes the Pool db running the migrations or
    18  // will reset all the known data and rerun the migrations
    19  func InitOrResetPool(cfg db.Config) error {
    20  	return initOrReset(cfg, "supernets2-pool-db")
    21  }
    22  
    23  // initOrReset will initializes the db running the migrations or
    24  // will reset all the known data and return the migrations
    25  func initOrReset(cfg db.Config, name string) error {
    26  	log.Infof("running migrations for %v", name)
    27  	// connect to database
    28  	dbPool, err := db.NewSQLDB(cfg)
    29  	if err != nil {
    30  		return err
    31  	}
    32  	defer dbPool.Close()
    33  
    34  	// run migrations
    35  	if err := db.RunMigrationsDown(cfg, name); err != nil {
    36  		return err
    37  	}
    38  	return db.RunMigrationsUp(cfg, name)
    39  }
    40  
    41  // NewStateConfigFromEnv return a config for state db
    42  func NewStateConfigFromEnv() db.Config {
    43  	return newConfigFromEnv("state", "5432")
    44  }
    45  
    46  // NewPoolConfigFromEnv return a config for pool db
    47  func NewPoolConfigFromEnv() db.Config {
    48  	return newConfigFromEnv("pool", "5433")
    49  }
    50  
    51  // NewEventConfigFromEnv return a config for event db
    52  func NewEventConfigFromEnv() db.Config {
    53  	return newConfigFromEnv("event", "5435")
    54  }
    55  
    56  // newConfigFromEnv creates config from standard postgres environment variables,
    57  // see https://www.postgresql.org/docs/11/libpq-envars.html for details
    58  func newConfigFromEnv(prefix, port string) db.Config {
    59  	const maxDBPoolConns = 50
    60  
    61  	return db.Config{
    62  		User:      testutils.GetEnv("PGUSER", fmt.Sprintf("%v_user", prefix)),
    63  		Password:  testutils.GetEnv("PGPASSWORD", fmt.Sprintf("%v_password", prefix)),
    64  		Name:      testutils.GetEnv("PGDATABASE", fmt.Sprintf("%v_db", prefix)),
    65  		Host:      testutils.GetEnv("PGHOST", "localhost"),
    66  		Port:      testutils.GetEnv("PGPORT", port),
    67  		EnableLog: false,
    68  		MaxConns:  maxDBPoolConns,
    69  	}
    70  }