Refactor id generator to it's own package
This commit is contained in:
3
api.go
3
api.go
@@ -8,6 +8,7 @@ import (
|
||||
"github.com/play-with-docker/play-with-docker/docker"
|
||||
"github.com/play-with-docker/play-with-docker/event"
|
||||
"github.com/play-with-docker/play-with-docker/handlers"
|
||||
"github.com/play-with-docker/play-with-docker/id"
|
||||
"github.com/play-with-docker/play-with-docker/provisioner"
|
||||
"github.com/play-with-docker/play-with-docker/pwd"
|
||||
"github.com/play-with-docker/play-with-docker/scheduler"
|
||||
@@ -22,7 +23,7 @@ func main() {
|
||||
s := initStorage()
|
||||
f := initFactory(s)
|
||||
|
||||
ipf := provisioner.NewInstanceProvisionerFactory(provisioner.NewWindowsASG(f, s), provisioner.NewDinD(f, s))
|
||||
ipf := provisioner.NewInstanceProvisionerFactory(provisioner.NewWindowsASG(f, s), provisioner.NewDinD(id.XIDGenerator{}, f, s))
|
||||
sp := provisioner.NewOverlaySessionProvisioner(f)
|
||||
|
||||
core := pwd.NewPWD(f, e, s, sp, ipf)
|
||||
|
||||
5
id/generator.go
Normal file
5
id/generator.go
Normal file
@@ -0,0 +1,5 @@
|
||||
package id
|
||||
|
||||
type Generator interface {
|
||||
NewId() string
|
||||
}
|
||||
12
id/mock.go
Normal file
12
id/mock.go
Normal file
@@ -0,0 +1,12 @@
|
||||
package id
|
||||
|
||||
import "github.com/stretchr/testify/mock"
|
||||
|
||||
type MockGenerator struct {
|
||||
mock.Mock
|
||||
}
|
||||
|
||||
func (m *MockGenerator) NewId() string {
|
||||
args := m.Called()
|
||||
return args.String(0)
|
||||
}
|
||||
10
id/xid.go
Normal file
10
id/xid.go
Normal file
@@ -0,0 +1,10 @@
|
||||
package id
|
||||
|
||||
import "github.com/rs/xid"
|
||||
|
||||
type XIDGenerator struct {
|
||||
}
|
||||
|
||||
func (x XIDGenerator) NewId() string {
|
||||
return xid.New().String()
|
||||
}
|
||||
@@ -12,19 +12,20 @@ import (
|
||||
|
||||
"github.com/play-with-docker/play-with-docker/config"
|
||||
"github.com/play-with-docker/play-with-docker/docker"
|
||||
"github.com/play-with-docker/play-with-docker/id"
|
||||
"github.com/play-with-docker/play-with-docker/pwd/types"
|
||||
"github.com/play-with-docker/play-with-docker/router"
|
||||
"github.com/play-with-docker/play-with-docker/storage"
|
||||
"github.com/rs/xid"
|
||||
)
|
||||
|
||||
type DinD struct {
|
||||
factory docker.FactoryApi
|
||||
storage storage.StorageApi
|
||||
factory docker.FactoryApi
|
||||
storage storage.StorageApi
|
||||
generator id.Generator
|
||||
}
|
||||
|
||||
func NewDinD(f docker.FactoryApi, s storage.StorageApi) *DinD {
|
||||
return &DinD{factory: f, storage: s}
|
||||
func NewDinD(generator id.Generator, f docker.FactoryApi, s storage.StorageApi) *DinD {
|
||||
return &DinD{generator: generator, factory: f, storage: s}
|
||||
}
|
||||
|
||||
func checkHostnameExists(sessionId, hostname string, instances []*types.Instance) bool {
|
||||
@@ -59,7 +60,7 @@ func (d *DinD) InstanceNew(session *types.Session, conf types.InstanceConfig) (*
|
||||
}
|
||||
conf.Hostname = nodeName
|
||||
}
|
||||
containerName := fmt.Sprintf("%s_%s", session.Id[:8], xid.New().String())
|
||||
containerName := fmt.Sprintf("%s_%s", session.Id[:8], d.generator.NewId())
|
||||
opts := docker.CreateContainerOpts{
|
||||
Image: conf.ImageName,
|
||||
SessionId: session.Id,
|
||||
|
||||
@@ -8,6 +8,7 @@ import (
|
||||
"github.com/play-with-docker/play-with-docker/config"
|
||||
"github.com/play-with-docker/play-with-docker/docker"
|
||||
"github.com/play-with-docker/play-with-docker/event"
|
||||
"github.com/play-with-docker/play-with-docker/id"
|
||||
"github.com/play-with-docker/play-with-docker/provisioner"
|
||||
"github.com/play-with-docker/play-with-docker/pwd/types"
|
||||
"github.com/play-with-docker/play-with-docker/storage"
|
||||
@@ -18,11 +19,11 @@ import (
|
||||
func TestClientNew(t *testing.T) {
|
||||
_s := &storage.Mock{}
|
||||
_f := &docker.FactoryMock{}
|
||||
_g := &mockGenerator{}
|
||||
_g := &id.MockGenerator{}
|
||||
_d := &docker.Mock{}
|
||||
_e := &event.Mock{}
|
||||
|
||||
ipf := provisioner.NewInstanceProvisionerFactory(provisioner.NewWindowsASG(_f, _s), provisioner.NewDinD(_f, _s))
|
||||
ipf := provisioner.NewInstanceProvisionerFactory(provisioner.NewWindowsASG(_f, _s), provisioner.NewDinD(_g, _f, _s))
|
||||
sp := provisioner.NewOverlaySessionProvisioner(_f)
|
||||
|
||||
_g.On("NewId").Return("aaaabbbbcccc")
|
||||
@@ -59,10 +60,10 @@ func TestClientNew(t *testing.T) {
|
||||
func TestClientCount(t *testing.T) {
|
||||
_s := &storage.Mock{}
|
||||
_f := &docker.FactoryMock{}
|
||||
_g := &mockGenerator{}
|
||||
_g := &id.MockGenerator{}
|
||||
_d := &docker.Mock{}
|
||||
_e := &event.Mock{}
|
||||
ipf := provisioner.NewInstanceProvisionerFactory(provisioner.NewWindowsASG(_f, _s), provisioner.NewDinD(_f, _s))
|
||||
ipf := provisioner.NewInstanceProvisionerFactory(provisioner.NewWindowsASG(_f, _s), provisioner.NewDinD(_g, _f, _s))
|
||||
sp := provisioner.NewOverlaySessionProvisioner(_f)
|
||||
|
||||
_g.On("NewId").Return("aaaabbbbcccc")
|
||||
@@ -98,10 +99,10 @@ func TestClientCount(t *testing.T) {
|
||||
func TestClientResizeViewPort(t *testing.T) {
|
||||
_s := &storage.Mock{}
|
||||
_f := &docker.FactoryMock{}
|
||||
_g := &mockGenerator{}
|
||||
_g := &id.MockGenerator{}
|
||||
_d := &docker.Mock{}
|
||||
_e := &event.Mock{}
|
||||
ipf := provisioner.NewInstanceProvisionerFactory(provisioner.NewWindowsASG(_f, _s), provisioner.NewDinD(_f, _s))
|
||||
ipf := provisioner.NewInstanceProvisionerFactory(provisioner.NewWindowsASG(_f, _s), provisioner.NewDinD(_g, _f, _s))
|
||||
sp := provisioner.NewOverlaySessionProvisioner(_f)
|
||||
|
||||
_g.On("NewId").Return("aaaabbbbcccc")
|
||||
|
||||
@@ -9,6 +9,7 @@ import (
|
||||
"github.com/play-with-docker/play-with-docker/config"
|
||||
"github.com/play-with-docker/play-with-docker/docker"
|
||||
"github.com/play-with-docker/play-with-docker/event"
|
||||
"github.com/play-with-docker/play-with-docker/id"
|
||||
"github.com/play-with-docker/play-with-docker/provisioner"
|
||||
"github.com/play-with-docker/play-with-docker/pwd/types"
|
||||
"github.com/play-with-docker/play-with-docker/router"
|
||||
@@ -21,9 +22,9 @@ func TestInstanceResizeTerminal(t *testing.T) {
|
||||
_d := &docker.Mock{}
|
||||
_f := &docker.FactoryMock{}
|
||||
_s := &storage.Mock{}
|
||||
_g := &mockGenerator{}
|
||||
_g := &id.MockGenerator{}
|
||||
_e := &event.Mock{}
|
||||
ipf := provisioner.NewInstanceProvisionerFactory(provisioner.NewWindowsASG(_f, _s), provisioner.NewDinD(_f, _s))
|
||||
ipf := provisioner.NewInstanceProvisionerFactory(provisioner.NewWindowsASG(_f, _s), provisioner.NewDinD(_g, _f, _s))
|
||||
sp := provisioner.NewOverlaySessionProvisioner(_f)
|
||||
|
||||
_d.On("ContainerResize", "foobar", uint(24), uint(80)).Return(nil)
|
||||
@@ -45,9 +46,9 @@ func TestInstanceNew(t *testing.T) {
|
||||
_d := &docker.Mock{}
|
||||
_f := &docker.FactoryMock{}
|
||||
_s := &storage.Mock{}
|
||||
_g := &mockGenerator{}
|
||||
_g := &id.MockGenerator{}
|
||||
_e := &event.Mock{}
|
||||
ipf := provisioner.NewInstanceProvisionerFactory(provisioner.NewWindowsASG(_f, _s), provisioner.NewDinD(_f, _s))
|
||||
ipf := provisioner.NewInstanceProvisionerFactory(provisioner.NewWindowsASG(_f, _s), provisioner.NewDinD(_g, _f, _s))
|
||||
sp := provisioner.NewOverlaySessionProvisioner(_f)
|
||||
|
||||
_g.On("NewId").Return("aaaabbbbcccc")
|
||||
@@ -71,7 +72,7 @@ func TestInstanceNew(t *testing.T) {
|
||||
assert.Nil(t, err)
|
||||
|
||||
expectedInstance := types.Instance{
|
||||
Name: fmt.Sprintf("%s_node1", session.Id[:8]),
|
||||
Name: fmt.Sprintf("%s_aaaabbbbcccc", session.Id[:8]),
|
||||
Hostname: "node1",
|
||||
IP: "10.0.0.1",
|
||||
RoutableIP: "10.0.0.1",
|
||||
@@ -95,7 +96,7 @@ func TestInstanceNew(t *testing.T) {
|
||||
_d.On("CreateContainer", expectedContainerOpts).Return(nil)
|
||||
_d.On("GetContainerIPs", expectedInstance.Name).Return(map[string]string{session.Id: "10.0.0.1"}, nil)
|
||||
_s.On("InstancePut", mock.AnythingOfType("*types.Instance")).Return(nil)
|
||||
_e.M.On("Emit", event.INSTANCE_NEW, "aaaabbbbcccc", []interface{}{"aaaabbbb_node1", "10.0.0.1", "node1", "ip10-0-0-1-aaaabbbbcccc"}).Return()
|
||||
_e.M.On("Emit", event.INSTANCE_NEW, "aaaabbbbcccc", []interface{}{"aaaabbbb_aaaabbbbcccc", "10.0.0.1", "node1", "ip10-0-0-1-aaaabbbbcccc"}).Return()
|
||||
|
||||
instance, err := p.InstanceNew(session, types.InstanceConfig{PlaygroundFQDN: "something.play-with-docker.com"})
|
||||
assert.Nil(t, err)
|
||||
@@ -113,9 +114,9 @@ func TestInstanceNew_WithNotAllowedImage(t *testing.T) {
|
||||
_d := &docker.Mock{}
|
||||
_f := &docker.FactoryMock{}
|
||||
_s := &storage.Mock{}
|
||||
_g := &mockGenerator{}
|
||||
_g := &id.MockGenerator{}
|
||||
_e := &event.Mock{}
|
||||
ipf := provisioner.NewInstanceProvisionerFactory(provisioner.NewWindowsASG(_f, _s), provisioner.NewDinD(_f, _s))
|
||||
ipf := provisioner.NewInstanceProvisionerFactory(provisioner.NewWindowsASG(_f, _s), provisioner.NewDinD(_g, _f, _s))
|
||||
sp := provisioner.NewOverlaySessionProvisioner(_f)
|
||||
|
||||
_g.On("NewId").Return("aaaabbbbcccc")
|
||||
@@ -140,7 +141,7 @@ func TestInstanceNew_WithNotAllowedImage(t *testing.T) {
|
||||
assert.Nil(t, err)
|
||||
|
||||
expectedInstance := types.Instance{
|
||||
Name: fmt.Sprintf("%s_node1", session.Id[:8]),
|
||||
Name: fmt.Sprintf("%s_aaaabbbbcccc", session.Id[:8]),
|
||||
Hostname: "node1",
|
||||
IP: "10.0.0.1",
|
||||
RoutableIP: "10.0.0.1",
|
||||
@@ -163,7 +164,7 @@ func TestInstanceNew_WithNotAllowedImage(t *testing.T) {
|
||||
_d.On("CreateContainer", expectedContainerOpts).Return(nil)
|
||||
_d.On("GetContainerIPs", expectedInstance.Name).Return(map[string]string{session.Id: "10.0.0.1"}, nil)
|
||||
_s.On("InstancePut", mock.AnythingOfType("*types.Instance")).Return(nil)
|
||||
_e.M.On("Emit", event.INSTANCE_NEW, "aaaabbbbcccc", []interface{}{"aaaabbbb_node1", "10.0.0.1", "node1", "ip10-0-0-1-aaaabbbbcccc"}).Return()
|
||||
_e.M.On("Emit", event.INSTANCE_NEW, "aaaabbbbcccc", []interface{}{"aaaabbbb_aaaabbbbcccc", "10.0.0.1", "node1", "ip10-0-0-1-aaaabbbbcccc"}).Return()
|
||||
|
||||
instance, err := p.InstanceNew(session, types.InstanceConfig{ImageName: "redis"})
|
||||
assert.Nil(t, err)
|
||||
@@ -181,10 +182,10 @@ func TestInstanceNew_WithCustomHostname(t *testing.T) {
|
||||
_d := &docker.Mock{}
|
||||
_f := &docker.FactoryMock{}
|
||||
_s := &storage.Mock{}
|
||||
_g := &mockGenerator{}
|
||||
_g := &id.MockGenerator{}
|
||||
_e := &event.Mock{}
|
||||
|
||||
ipf := provisioner.NewInstanceProvisionerFactory(provisioner.NewWindowsASG(_f, _s), provisioner.NewDinD(_f, _s))
|
||||
ipf := provisioner.NewInstanceProvisionerFactory(provisioner.NewWindowsASG(_f, _s), provisioner.NewDinD(_g, _f, _s))
|
||||
sp := provisioner.NewOverlaySessionProvisioner(_f)
|
||||
|
||||
_g.On("NewId").Return("aaaabbbbcccc")
|
||||
@@ -208,7 +209,7 @@ func TestInstanceNew_WithCustomHostname(t *testing.T) {
|
||||
assert.Nil(t, err)
|
||||
|
||||
expectedInstance := types.Instance{
|
||||
Name: fmt.Sprintf("%s_redis-master", session.Id[:8]),
|
||||
Name: fmt.Sprintf("%s_aaaabbbbcccc", session.Id[:8]),
|
||||
Hostname: "redis-master",
|
||||
IP: "10.0.0.1",
|
||||
RoutableIP: "10.0.0.1",
|
||||
@@ -232,7 +233,7 @@ func TestInstanceNew_WithCustomHostname(t *testing.T) {
|
||||
_d.On("CreateContainer", expectedContainerOpts).Return(nil)
|
||||
_d.On("GetContainerIPs", expectedInstance.Name).Return(map[string]string{session.Id: "10.0.0.1"}, nil)
|
||||
_s.On("InstancePut", mock.AnythingOfType("*types.Instance")).Return(nil)
|
||||
_e.M.On("Emit", event.INSTANCE_NEW, "aaaabbbbcccc", []interface{}{"aaaabbbb_redis-master", "10.0.0.1", "redis-master", "ip10-0-0-1-aaaabbbbcccc"}).Return()
|
||||
_e.M.On("Emit", event.INSTANCE_NEW, "aaaabbbbcccc", []interface{}{"aaaabbbb_aaaabbbbcccc", "10.0.0.1", "redis-master", "ip10-0-0-1-aaaabbbbcccc"}).Return()
|
||||
|
||||
instance, err := p.InstanceNew(session, types.InstanceConfig{ImageName: "redis", Hostname: "redis-master"})
|
||||
|
||||
|
||||
34
pwd/pwd.go
34
pwd/pwd.go
@@ -8,12 +8,11 @@ import (
|
||||
|
||||
"github.com/play-with-docker/play-with-docker/docker"
|
||||
"github.com/play-with-docker/play-with-docker/event"
|
||||
"github.com/play-with-docker/play-with-docker/id"
|
||||
"github.com/play-with-docker/play-with-docker/provisioner"
|
||||
"github.com/play-with-docker/play-with-docker/pwd/types"
|
||||
"github.com/play-with-docker/play-with-docker/storage"
|
||||
"github.com/prometheus/client_golang/prometheus"
|
||||
"github.com/rs/xid"
|
||||
"github.com/stretchr/testify/mock"
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -52,7 +51,7 @@ type pwd struct {
|
||||
dockerFactory docker.FactoryApi
|
||||
event event.EventApi
|
||||
storage storage.StorageApi
|
||||
generator IdGenerator
|
||||
generator id.Generator
|
||||
clientCount int32
|
||||
sessionProvisioner provisioner.SessionProvisionerApi
|
||||
instanceProvisionerFactory provisioner.InstanceProvisionerFactoryApi
|
||||
@@ -60,26 +59,6 @@ type pwd struct {
|
||||
dindProvisioner provisioner.InstanceProvisionerApi
|
||||
}
|
||||
|
||||
type IdGenerator interface {
|
||||
NewId() string
|
||||
}
|
||||
|
||||
type xidGenerator struct {
|
||||
}
|
||||
|
||||
func (x xidGenerator) NewId() string {
|
||||
return xid.New().String()
|
||||
}
|
||||
|
||||
type mockGenerator struct {
|
||||
mock.Mock
|
||||
}
|
||||
|
||||
func (m *mockGenerator) NewId() string {
|
||||
args := m.Called()
|
||||
return args.String(0)
|
||||
}
|
||||
|
||||
var sessionComplete = errors.New("Session is complete")
|
||||
|
||||
func SessionComplete(e error) bool {
|
||||
@@ -118,18 +97,11 @@ type PWDApi interface {
|
||||
|
||||
func NewPWD(f docker.FactoryApi, e event.EventApi, s storage.StorageApi, sp provisioner.SessionProvisionerApi, ipf provisioner.InstanceProvisionerFactoryApi) *pwd {
|
||||
// windowsProvisioner: provisioner.NewWindowsASG(f, s), dindProvisioner: provisioner.NewDinD(f)
|
||||
return &pwd{dockerFactory: f, event: e, storage: s, generator: xidGenerator{}, sessionProvisioner: sp, instanceProvisionerFactory: ipf}
|
||||
return &pwd{dockerFactory: f, event: e, storage: s, generator: id.XIDGenerator{}, sessionProvisioner: sp, instanceProvisionerFactory: ipf}
|
||||
}
|
||||
|
||||
func (p *pwd) getProvisioner(t string) (provisioner.InstanceProvisionerApi, error) {
|
||||
return p.instanceProvisionerFactory.GetProvisioner(t)
|
||||
/*
|
||||
if t == "windows" {
|
||||
return p.windowsProvisioner, nil
|
||||
} else {
|
||||
return p.dindProvisioner, nil
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
func (p *pwd) setGauges() {
|
||||
|
||||
@@ -8,6 +8,7 @@ import (
|
||||
"github.com/play-with-docker/play-with-docker/config"
|
||||
"github.com/play-with-docker/play-with-docker/docker"
|
||||
"github.com/play-with-docker/play-with-docker/event"
|
||||
"github.com/play-with-docker/play-with-docker/id"
|
||||
"github.com/play-with-docker/play-with-docker/provisioner"
|
||||
"github.com/play-with-docker/play-with-docker/storage"
|
||||
"github.com/stretchr/testify/assert"
|
||||
@@ -20,10 +21,10 @@ func TestSessionNew(t *testing.T) {
|
||||
_d := &docker.Mock{}
|
||||
_f := &docker.FactoryMock{}
|
||||
_s := &storage.Mock{}
|
||||
_g := &mockGenerator{}
|
||||
_g := &id.MockGenerator{}
|
||||
_e := &event.Mock{}
|
||||
|
||||
ipf := provisioner.NewInstanceProvisionerFactory(provisioner.NewWindowsASG(_f, _s), provisioner.NewDinD(_f, _s))
|
||||
ipf := provisioner.NewInstanceProvisionerFactory(provisioner.NewWindowsASG(_f, _s), provisioner.NewDinD(_g, _f, _s))
|
||||
sp := provisioner.NewOverlaySessionProvisioner(_f)
|
||||
|
||||
_g.On("NewId").Return("aaaabbbbcccc")
|
||||
|
||||
Reference in New Issue
Block a user