Skip to content

Commit

Permalink
refactor
Browse files Browse the repository at this point in the history
  • Loading branch information
dogukanayd committed May 21, 2020
1 parent 440d784 commit f80331d
Show file tree
Hide file tree
Showing 5 changed files with 170 additions and 0 deletions.
49 changes: 49 additions & 0 deletions mysql/compose.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package mysql

import (
"docker.io/go-docker"
"docker.io/go-docker/api/types/container"
"fmt"
"upper.io/db.v3/lib/sqlbuilder"
)

func NewUnitV2() (sqlbuilder.Database, func()) {
var cp ContainerProperties
var err error

cp.CLI, err = docker.NewEnvClient()

if err != nil {
panic(err)
}

cp.Config = &container.Config{
Image: "mysql:5.6",
Env: []string{
"MYSQL_ROOT_PASSWORD=root",
"MYSQL_DATABASE=test_database_v2",
},
}
cp.HostPort = "3305"
cp.TCP = "3306"
cpr := cp.Creator(&DockerContainer{})

fmt.Println("container id ******************")
fmt.Println(cpr.ID)

fmt.Println("connection start ******************")
connection, err := Connections.ConnectOrReuse("test_database_v2", "127.0.0.1:3305")

fmt.Println("connection end ******************")

if err != nil {
panic(err)
}

tearDown := func() {
_ = connection
_ = connection.Close()
}

return connection, tearDown
}
24 changes: 24 additions & 0 deletions mysql/creator.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package mysql

import (
"docker.io/go-docker"
"docker.io/go-docker/api/types/container"
)

type ContainerProperties struct {
Config *container.Config
HostPort string
CLI *docker.Client
TCP string
Name string
}

func (cp *ContainerProperties) Creator(d Docker) *DockerContainer {
d.SetConfig(cp.Config)
d.SetContainerHostPort(cp.HostPort)
d.SetTCP(cp.TCP)
d.SetContainerCLI(cp.CLI)
d.SetContainerName(cp.Name)

return d.CreateContainer()
}
96 changes: 96 additions & 0 deletions mysql/dockerize.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
package mysql

import (
"context"
"docker.io/go-docker"
"docker.io/go-docker/api/types"
"docker.io/go-docker/api/types/container"
"github.com/docker/go-connections/nat"
)

type Docker interface {
SetContainerID(id string)
SetContainerName(name string)
SetContainerHost(host string)
SetContainerHostIP(hostIp string)
SetContainerHostPort(hostPort string)
SetTCP(tcp string)
SetConfig(config *container.Config)
SetContainerCLI(client *docker.Client)
CreateContainer() *DockerContainer
}

type DockerContainer struct {
ID string
Host string
Name string
HostIP string
HostPort string
TCP string
Config *container.Config
CLI *docker.Client
CustomArgs map[string]interface{}
}

func (d *DockerContainer) SetContainerID(id string) {
d.ID = id
}

func (d *DockerContainer) SetContainerName(name string) {
d.Name = name
}

func (d *DockerContainer) SetContainerHost(host string) {
d.Host = host
}

func (d *DockerContainer) SetContainerHostIP(hostIp string) {
d.HostIP = hostIp
}

func (d *DockerContainer) SetContainerHostPort(hostPort string) {
d.HostPort = hostPort
}

func (d *DockerContainer) SetTCP(tcp string) {
d.TCP = tcp
}

func (d *DockerContainer) SetConfig(config *container.Config) {
d.Config = config
}

func (d *DockerContainer) SetContainerCLI(client *docker.Client) {
d.CLI = client
}

func (d *DockerContainer) CreateContainer() *DockerContainer {
ctx := context.Background()
hostBinding := nat.PortBinding{
HostIP: d.HostIP,
HostPort: d.HostPort,
}
containerPort, err := nat.NewPort("tcp", d.TCP)

if err != nil {
panic(err)
}

portBinding := nat.PortMap{containerPort: []nat.PortBinding{hostBinding}}
hcfg := &container.HostConfig{
PortBindings: portBinding,
}
cnt, err := d.CLI.ContainerCreate(ctx, d.Config, hcfg, nil, d.Name)

if err != nil {
panic(err)
}

if err = d.CLI.ContainerStart(ctx, cnt.ID, types.ContainerStartOptions{}); err != nil {
panic(err)
}

d.SetContainerID(cnt.ID)

return d
}
1 change: 1 addition & 0 deletions mysql/unit.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ type Unit struct {

// NewUnit generates a new unit instance
//
// Deprecated: HeaderMap exists for historical compatibility
// Example:
// mysqlunit.NewUnit(t, "test_database").Start()
func NewUnit(t *testing.T, dbName string) *Unit {
Expand Down
Empty file added path.config
Empty file.

0 comments on commit f80331d

Please sign in to comment.