mysql

package
v0.31.0 Latest Latest
Warning

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

Go to latest
Published: Jun 4, 2024 License: MIT Imports: 10 Imported by: 4

README

Gnomock MySQL

Gnomock MySQL is a Gnomock preset for running tests against a real MySQL database, without mocks.

package mysql_test

import (
	"database/sql"
	"fmt"

	"github.com/orlangure/gnomock"
	"github.com/orlangure/gnomock/preset/mysql"
)

func ExamplePreset() {
	queries := `
		create table t(a int);
		insert into t (a) values (1);
		insert into t (a) values (2);
	`
	query := `insert into t (a) values (3);`
	p := mysql.Preset(
		mysql.WithUser("Sherlock", "Holmes"),
		mysql.WithDatabase("books"),
		mysql.WithQueries(queries, query),
	)

	container, err := gnomock.Start(p)

	defer func() { _ = gnomock.Stop(container) }()

	if err != nil {
		panic(err)
	}

	addr := container.DefaultAddress()
	connStr := fmt.Sprintf(
		"%s:%s@tcp(%s)/%s",
		"Sherlock", "Holmes", addr, "books",
	)

	db, err := sql.Open("mysql", connStr)
	if err != nil {
		panic(err)
	}

	var max, avg, min, count float64

	rows := db.QueryRow("select max(a), avg(a), min(a), count(a) from t")

	err = rows.Scan(&max, &avg, &min, &count)
	if err != nil {
		panic("can't query the database: " + err.Error())
	}

	fmt.Println("max", 3)
	fmt.Println("avg", 2)
	fmt.Println("min", 1)
	fmt.Println("count", 3)

	// Output:
	// max 3
	// avg 2
	// min 1
	// count 3
}

Documentation

Overview

Package mysql provides a Gnomock Preset for MySQL database.

This preset uses different docker images for amd64 and arm64 architectures. Even though the versions should be compatible, you should make sure that the tag being used exists in the following repositories:

amd64: https://hub.docker.com/_/mysql/ arm64: https://hub.docker.com/r/mysql/mysql-server

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Preset

func Preset(opts ...Option) gnomock.Preset

Preset creates a new Gmomock MySQL preset. This preset includes a MySQL specific healthcheck function, default MySQL image and port, and allows to optionally set up initial state.

When used without any configuration, it creates a superuser `gnomock` with password `gnomick`, and `mydb` database. Default MySQL version is 8.0.22.

Types

type Option

type Option func(*P)

Option is an optional configuration of this Gnomock preset. Use available Options to configure the container.

func WithDatabase

func WithDatabase(db string) Option

WithDatabase creates a database with the provided name in the container. If not provided, "mydb" is used by default. WithQueries, if provided, runs against the new database.

func WithQueries

func WithQueries(queries ...string) Option

WithQueries executes the provided queries against the database created with WithDatabase, or against default "mydb" database.

func WithQueriesFile

func WithQueriesFile(file string) Option

WithQueriesFile sets a file name to read initial queries from. Queries from this file are executed before any other queries provided in WithQueries.

func WithUser

func WithUser(user, password string) Option

WithUser creates a new superuser with the provided credentials in the container. If not used, the default credentials are gnomock:gnomick.

func WithVersion added in v0.9.0

func WithVersion(version string) Option

WithVersion sets image version.

type P

type P struct {
	DB           string   `json:"db"`
	User         string   `json:"user"`
	Password     string   `json:"password"`
	Queries      []string `json:"queries"`
	QueriesFiles []string `json:"queries_files"`
	Version      string   `json:"version"`
}

P is a Gnomock Preset implementation of MySQL database.

func (*P) Image

func (p *P) Image() string

Image returns an image that should be pulled to create this container.

func (*P) Options

func (p *P) Options() []gnomock.Option

Options returns a list of options to configure this container.

func (*P) Ports

func (p *P) Ports() gnomock.NamedPorts

Ports returns ports that should be used to access this container.

Jump to

Keyboard shortcuts

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