Categorygithub.com/tomoyane/embedded-mysql-container
modulepackage
1.0.0
Repository: https://github.com/tomoyane/embedded-mysql-container.git
Documentation: pkg.go.dev

# README

Embedded MySQL container

Build Status MIT License

Embedded MySQL container.

This container's object want to resolve unit test database.

How to task ?

  • Your tests can run on production-like.
  • You can easily try mysql linkage.

Using Docker engine

Embedded MySQL container application needs to docker engine in your machine.

If you don't install docker engine, have to install docker engine.

Docker engine

Architecture

 +----------- ApplicationTest ------------+  
 |                                        |
 |         +-------- 1 ---------+         |
 |         |  Develop machine   |         |
 |         |                    |         |
 |         |    docker pull     |         |
 |         |    docker build    |         |
 |         |    docker start    |         |
 |         |                    |         |
 |         +--------------------+         |
 |                   |                    |          
 |                   |                    |
 |         +-------- 2 ---------+         |  
 |         |      Unit Test     |         |
 |         |  Integration test  |         |
 |         +--------------------+         |
 |                                        |
 +----------------------------------------+  

Default MySQL config

HostPortUserPass
127.0.0.133306rootroot

Usage

Go get command.

$ go get github.com/tomoyane/embedded-mysql-container

If you can get this error, you can do it after command.

This is Go vendor issue maybe.

cannot use exposedPorts (type map["github.com/docker/go-
connections/nat".Port]struct {}) as type map["github.com/docker/docker/vendor/github.com/docker/go-
connections/nat".Port]struct {} in field value
$ rm -rf $GOPATH/src/github.com/docker/docker/vendor/github.com/docker/go-connections
$ go get github.com/tomoyane/embedded-mysql-container

Basic example

import "github.com/tomoyane/embedded-mysql-container/container"

func main() {
    containerDaemon := container.ContainerDaemonImpl{}.New()
    embeddedMysql := container.MysqlConfigImpl{}.New()

    containerId := containerDaemon.StartEmbeddedMysql()

    // Need to sleep.
    // Wait for container startup.
    time.Sleep(10 * time.Second)

    embeddedMysql.AddSchema("test")

    // Init database
    
    containerDaemon.FinishEmbeddedMysql(containerId)
}

Unit Test example

import "github.com/tomoyane/embedded-mysql-container/container"

func TestMain(m *testing.M) {
	containerDaemon := container.ContainerDaemonImpl{}.New()
	embeddedMysql := container.MysqlConfigImpl{}.New()

	containerId := containerDaemon.StartEmbeddedMysql()

	time.Sleep(10 * time.Second)

	embeddedMysql.AddSchema("test")
	embeddedMysql.CreateTable("CREATE TABLE test.items (" +
		"id int(11) NOT NULL AUTO_INCREMENT," +
		"name varchar(128) NOT NULL," +
		"created_at datetime NOT NULL DEFAULT CURRENT_TIMESTAMP," +
		"updated_at datetime NOT NULL DEFAULT CURRENT_TIMESTAMP," +
		"PRIMARY KEY (id)," +
		"ENGINE=InnoDB DEFAULT CHARSET=utf8")
	
	// Init main database
	
	code := m.Run()

	// After finish mysql container
	containerDaemon.FinishEmbeddedMysql(containerId)

	os.Exit(code)
}

Custom example

If you want set any mysql version, you can set version mysql.

And If you want set any container name, you can set container name.

import "github.com/tomoyane/embedded-mysql-container/container"

func main() {
    containerDaemon := container.ContainerDaemonImpl{}.New()
    embeddedMysql := container.MysqlConfigImpl{}.New()
    
    containerDaemon.InitDocker()
    
    // MySQL5.7
    containerDaemon.PullImage("docker.io/library/mysql:5.7")
    containerId := containerDaemon.BuildImage(
        "mysql:5.7",
        "embedded_mysql_container")
    containerDaemon.StartContainer(containerId)
}

License

MIT

# Packages

No description provided by the author
No description provided by the author