dbtest

package
v0.1.7 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 11, 2025 License: Apache-2.0 Imports: 25 Imported by: 0

README

Postgres Support

You can use VCService with a local Postgres instance as an alternative to Yugabyte.

Run VCService with the following environment variables set and make sure your Postgres instance is running.

export DB_DEPLOYMENT=local

Start Postgres

Note that VCService uses yugabyte:yugabye as default user and password, and runs on port 5344. Please make sure you set up your Postgres instance accordingly.

For local testing with Postgres in docker you can simply use the following snipped.

docker run --name sc_postgres_unit_tests \
  -e POSTGRES_PASSWORD=yugabyte \
  -e POSTGRES_USER=yugabyte \
  -p 5433:5432 \
  -d postgres:16.9-alpine3.21

You can kill the instance by running:

docker ps -aq -f name=sc_postgres_unit_tests | xargs docker rm -f

Testing

Once Postgres is up and running you can run the tests of VC service.

DB_DEPLOYMENT=local go test ./service/vc/dbtest/...

Documentation

Index

Constants

View Source
const (

	// YugabytedReadinessOutput is the output indicating that a Yugabyted node is ready.
	YugabytedReadinessOutput = "Data placement constraint successfully verified"
	// YugabyteTabletNodeReadinessOutput is the output indicating that a yugabyte's tablet node is ready.
	YugabyteTabletNodeReadinessOutput = "syncing data to disk ... ok"
	// PostgresReadinesssOutput is the output indicating that a PostgreSQL node is ready.
	PostgresReadinesssOutput = "database system is ready to accept connections"
	// SecondaryPostgresNodeReadinessOutput is the output indicating that a secondary PostgreSQL node is ready.
	SecondaryPostgresNodeReadinessOutput = "started streaming WAL from primary"
)
View Source
const (

	// YugaDBType represents the usage of Yugabyte DB.
	YugaDBType = "yugabyte"
	// PostgresDBType represents the usage of PostgreSQL DB.
	PostgresDBType = "postgres"
)

Variables

View Source
var (
	// YugabyteCMD starts yugabyte without fault tolerance (single server).
	YugabyteCMD = []string{
		"bin/yugabyted", "start",
		"--callhome", "false",
		"--background", "false",
		"--ui", "false",
		"--tserver_flags",
		"ysql_max_connections=500," +
			"tablet_replicas_per_gib_limit=4000," +
			"yb_num_shards_per_tserver=1," +
			"minloglevel=3," +
			"yb_enable_read_committed_isolation=true",
	}
)

Functions

func ConnectAndQueryTest

func ConnectAndQueryTest(t *testing.T, connections *Connection)

ConnectAndQueryTest is an exported function for testing purpose.

Types

type Connection

type Connection struct {
	Endpoints   []*connection.Endpoint
	User        string
	Password    string
	Database    string
	LoadBalance bool
	TLS         dbconn.DatabaseTLSConfig
}

Connection facilities connecting to a YugabyteDB instance.

func NewConnection

func NewConnection(endpoints ...*connection.Endpoint) *Connection

NewConnection returns a connection parameters with the specified host:port, and the default values for the other parameters.

func PrepareTestEnv

func PrepareTestEnv(t *testing.T) *Connection

PrepareTestEnv initializes a test environment for an existing or uncontrollable db instance.

func PrepareTestEnvWithConnection

func PrepareTestEnvWithConnection(t *testing.T, conn *Connection) *Connection

PrepareTestEnvWithConnection initializes a test environment given a db connection.

func StartAndConnect

func StartAndConnect(ctx context.Context, t *testing.T) *Connection

StartAndConnect connects to an existing Yugabyte instance or creates a containerized new one.

type DatabaseContainer

type DatabaseContainer struct {
	Name         string
	Image        string
	HostIP       string
	Network      string
	Hostname     string
	DatabaseType string
	Tag          string
	Role         string
	Cmd          []string
	Env          []string
	Binds        []string
	HostPort     int
	DbPort       docker.Port
	PortMap      docker.Port
	PortBinds    map[docker.Port][]docker.PortBinding
	NetToIP      map[string]*docker.EndpointConfig
	AutoRm       bool
	// TLSConfig holds the node TLS certificates.
	// If TLSConfig isn't available (is nil), we fallback to insecure mode.
	TLSConfig *connection.TLSConfig
	// contains filtered or unexported fields
}

DatabaseContainer manages the execution of an instance of a dockerized DB for tests.

func (*DatabaseContainer) ContainerID

func (dc *DatabaseContainer) ContainerID() string

ContainerID returns the container ID.

func (*DatabaseContainer) EnsureNodeReadinessByLogs added in v0.1.7

func (dc *DatabaseContainer) EnsureNodeReadinessByLogs(t *testing.T, requiredOutput string)

EnsureNodeReadinessByLogs checks the container's readiness by monitoring its logs and ensure its running correctly.

func (*DatabaseContainer) ExecuteCommand

func (dc *DatabaseContainer) ExecuteCommand(t *testing.T, cmd []string) string

ExecuteCommand executes a command and returns the container output.

func (*DatabaseContainer) GetConnectionOptions added in v0.1.7

func (dc *DatabaseContainer) GetConnectionOptions(ctx context.Context, t *testing.T) *Connection

GetConnectionOptions inspect the container and fetches the available connection options.

func (*DatabaseContainer) GetContainerConnectionDetails

func (dc *DatabaseContainer) GetContainerConnectionDetails(
	t *testing.T,
) *connection.Endpoint

GetContainerConnectionDetails inspect the container and fetches its connection to an endpoint.

func (*DatabaseContainer) GetContainerLogs

func (dc *DatabaseContainer) GetContainerLogs(t *testing.T) string

GetContainerLogs return the output of the DatabaseContainer.

func (*DatabaseContainer) ReadPasswordFromContainer added in v0.1.7

func (dc *DatabaseContainer) ReadPasswordFromContainer(t *testing.T, filePath string) string

ReadPasswordFromContainer extracts the randomly generated password from a file inside the container. This is required because YugabyteDB, when running in secure mode, doesn't allow default passwords and instead generates a random one at startup. This method being called only when a secured Yugabyted node is started. If the file doesn’t exist or doesn't contain a password, the test should fail.

func (*DatabaseContainer) StartContainer

func (dc *DatabaseContainer) StartContainer(ctx context.Context, t *testing.T)

StartContainer runs a DB container, if no specific container details provided, default values will be set.

func (*DatabaseContainer) StopAndRemoveContainer

func (dc *DatabaseContainer) StopAndRemoveContainer(t *testing.T)

StopAndRemoveContainer stops and removes the db container from the docker engine.

func (*DatabaseContainer) StopContainer

func (dc *DatabaseContainer) StopContainer(t *testing.T)

StopContainer stops db container.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL