Skip to content

Commit 5462484

Browse files
committed
Refactoring [ci skip]
1 parent f727fb4 commit 5462484

File tree

10 files changed

+337
-153
lines changed

10 files changed

+337
-153
lines changed

reconfigure.go renamed to actions/reconfigure.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package main
1+
package actions
22

33
import (
44
"bytes"
@@ -12,8 +12,8 @@ import (
1212
"strings"
1313
"sync"
1414

15-
haproxy "./proxy"
16-
"./registry"
15+
haproxy "../proxy"
16+
"../registry"
1717
)
1818

1919
const ServiceTemplateFeFilename = "service-formatted-fe.ctmpl"
@@ -75,7 +75,7 @@ type BaseReconfigure struct {
7575
skipAddressValidation bool
7676
}
7777

78-
var reconfigure Reconfigure
78+
var ReconfigureInstance Reconfigure
7979

8080
var NewReconfigure = func(baseData BaseReconfigure, serviceData ServiceReconfigure) Reconfigurable {
8181
return &Reconfigure{baseData, serviceData}

reconfigure_test.go renamed to actions/reconfigure_test.go

Lines changed: 133 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
// +build !integration
22

3-
package main
3+
package actions
44

55
import (
6-
haproxy "./proxy"
7-
"./registry"
6+
haproxy "../proxy"
7+
"../registry"
88
"encoding/json"
99
"fmt"
1010
"github.com/stretchr/testify/mock"
@@ -64,6 +64,79 @@ func (s *ReconfigureTestSuite) SetupTest() {
6464
s.reconfigure.skipAddressValidation = true
6565
}
6666

67+
// Suite
68+
69+
func TestReconfigureUnitTestSuite(t *testing.T) {
70+
logPrintf = func(format string, v ...interface{}) {}
71+
s := new(ReconfigureTestSuite)
72+
s.ServiceName = "myService"
73+
s.PutPathResponse = "PUT_PATH_OK"
74+
s.Server = httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
75+
actualPath := r.URL.Path
76+
if r.Method == "GET" {
77+
switch actualPath {
78+
case "/v1/catalog/services":
79+
w.WriteHeader(http.StatusOK)
80+
w.Header().Set("Content-Type", "application/json")
81+
data := map[string][]string{"service1": []string{}, "service2": []string{}, s.ServiceName: []string{}}
82+
js, _ := json.Marshal(data)
83+
w.Write(js)
84+
case fmt.Sprintf("/v1/kv/%s/%s/%s", s.InstanceName, s.ServiceName, registry.PATH_KEY):
85+
if r.URL.RawQuery == "raw" {
86+
w.WriteHeader(http.StatusOK)
87+
w.Write([]byte(strings.Join(s.ServicePath, ",")))
88+
}
89+
case fmt.Sprintf("/v1/kv/%s/%s/%s", s.InstanceName, s.ServiceName, registry.COLOR_KEY):
90+
if r.URL.RawQuery == "raw" {
91+
w.WriteHeader(http.StatusOK)
92+
w.Write([]byte("orange"))
93+
}
94+
case fmt.Sprintf("/v1/kv/%s/%s/%s", s.InstanceName, s.ServiceName, registry.DOMAIN_KEY):
95+
if r.URL.RawQuery == "raw" {
96+
w.WriteHeader(http.StatusOK)
97+
w.Write([]byte(strings.Join(s.ServiceDomain, ",")))
98+
}
99+
case fmt.Sprintf("/v1/kv/%s/%s/%s", s.InstanceName, s.ServiceName, registry.HOSTNAME_KEY):
100+
if r.URL.RawQuery == "raw" {
101+
w.WriteHeader(http.StatusOK)
102+
w.Write([]byte(s.OutboundHostname))
103+
}
104+
case fmt.Sprintf("/v1/kv/%s/%s/%s", s.InstanceName, s.ServiceName, registry.PATH_TYPE_KEY):
105+
if r.URL.RawQuery == "raw" {
106+
w.WriteHeader(http.StatusOK)
107+
w.Write([]byte(s.PathType))
108+
}
109+
case fmt.Sprintf("/v1/kv/%s/%s/%s", s.InstanceName, s.ServiceName, registry.SKIP_CHECK_KEY):
110+
if r.URL.RawQuery == "raw" {
111+
w.WriteHeader(http.StatusOK)
112+
w.Write([]byte(fmt.Sprintf("%t", s.SkipCheck)))
113+
}
114+
default:
115+
w.WriteHeader(http.StatusNotFound)
116+
}
117+
}
118+
}))
119+
defer s.Server.Close()
120+
registryInstanceOrig := registryInstance
121+
defer func() { registryInstance = registryInstanceOrig }()
122+
registryInstance = getRegistrarableMock("")
123+
writeFeTemplateOrig := writeFeTemplate
124+
defer func() { writeFeTemplate = writeFeTemplateOrig }()
125+
writeFeTemplate = func(filename string, data []byte, perm os.FileMode) error {
126+
return nil
127+
}
128+
writeBeTemplateOrig := writeBeTemplate
129+
defer func() { writeBeTemplate = writeBeTemplateOrig }()
130+
writeBeTemplate = func(filename string, data []byte, perm os.FileMode) error {
131+
return nil
132+
}
133+
mockObj := getProxyMock("")
134+
proxyOrig := haproxy.Instance
135+
defer func() { haproxy.Instance = proxyOrig }()
136+
haproxy.Instance = mockObj
137+
suite.Run(t, s)
138+
}
139+
67140
// GetTemplate
68141

69142
func (s ReconfigureTestSuite) Test_GetTemplates_ReturnsFormattedContent() {
@@ -600,6 +673,7 @@ func (s *ReconfigureTestSuite) Test_Execute_ReturnsError_WhenPutToConsulFails()
600673

601674
func (s *ReconfigureTestSuite) Test_Execute_AddsHttpIfNotPresentInPutToConsul() {
602675
s.reconfigure.ConsulAddresses = []string{strings.Replace(s.ConsulAddress, "http://", "", -1)}
676+
603677
s.reconfigure.Execute([]string{})
604678

605679
s.Equal(s.ServiceColor, s.ConsulRequestBody.ServiceColor)
@@ -765,75 +839,6 @@ func (s *ReconfigureTestSuite) Test_ReloadAllServices_ReturnsError_WhenSwarmList
765839
s.Error(err)
766840
}
767841

768-
// Suite
769-
770-
func TestReconfigureUnitTestSuite(t *testing.T) {
771-
logPrintf = func(format string, v ...interface{}) {}
772-
s := new(ReconfigureTestSuite)
773-
s.ServiceName = "myService"
774-
s.PutPathResponse = "PUT_PATH_OK"
775-
s.Server = httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
776-
actualPath := r.URL.Path
777-
if r.Method == "GET" {
778-
switch actualPath {
779-
case "/v1/catalog/services":
780-
w.WriteHeader(http.StatusOK)
781-
w.Header().Set("Content-Type", "application/json")
782-
data := map[string][]string{"service1": []string{}, "service2": []string{}, s.ServiceName: []string{}}
783-
js, _ := json.Marshal(data)
784-
w.Write(js)
785-
case fmt.Sprintf("/v1/kv/%s/%s/%s", s.InstanceName, s.ServiceName, registry.PATH_KEY):
786-
if r.URL.RawQuery == "raw" {
787-
w.WriteHeader(http.StatusOK)
788-
w.Write([]byte(strings.Join(s.ServicePath, ",")))
789-
}
790-
case fmt.Sprintf("/v1/kv/%s/%s/%s", s.InstanceName, s.ServiceName, registry.COLOR_KEY):
791-
if r.URL.RawQuery == "raw" {
792-
w.WriteHeader(http.StatusOK)
793-
w.Write([]byte("orange"))
794-
}
795-
case fmt.Sprintf("/v1/kv/%s/%s/%s", s.InstanceName, s.ServiceName, registry.DOMAIN_KEY):
796-
if r.URL.RawQuery == "raw" {
797-
w.WriteHeader(http.StatusOK)
798-
w.Write([]byte(strings.Join(s.ServiceDomain, ",")))
799-
}
800-
case fmt.Sprintf("/v1/kv/%s/%s/%s", s.InstanceName, s.ServiceName, registry.HOSTNAME_KEY):
801-
if r.URL.RawQuery == "raw" {
802-
w.WriteHeader(http.StatusOK)
803-
w.Write([]byte(s.OutboundHostname))
804-
}
805-
case fmt.Sprintf("/v1/kv/%s/%s/%s", s.InstanceName, s.ServiceName, registry.PATH_TYPE_KEY):
806-
if r.URL.RawQuery == "raw" {
807-
w.WriteHeader(http.StatusOK)
808-
w.Write([]byte(s.PathType))
809-
}
810-
case fmt.Sprintf("/v1/kv/%s/%s/%s", s.InstanceName, s.ServiceName, registry.SKIP_CHECK_KEY):
811-
if r.URL.RawQuery == "raw" {
812-
w.WriteHeader(http.StatusOK)
813-
w.Write([]byte(fmt.Sprintf("%t", s.SkipCheck)))
814-
}
815-
default:
816-
w.WriteHeader(http.StatusNotFound)
817-
}
818-
}
819-
}))
820-
defer s.Server.Close()
821-
registryInstanceOrig := registryInstance
822-
defer func() { registryInstance = registryInstanceOrig }()
823-
registryInstance = getRegistrarableMock("")
824-
writeFeTemplateOrig := writeFeTemplate
825-
defer func() { writeFeTemplate = writeFeTemplateOrig }()
826-
writeFeTemplate = func(filename string, data []byte, perm os.FileMode) error {
827-
return nil
828-
}
829-
writeBeTemplateOrig := writeBeTemplate
830-
defer func() { writeBeTemplate = writeBeTemplateOrig }()
831-
writeBeTemplate = func(filename string, data []byte, perm os.FileMode) error {
832-
return nil
833-
}
834-
suite.Run(t, s)
835-
}
836-
837842
// Mock
838843

839844
type ReconfigureMock struct {
@@ -935,6 +940,62 @@ func getRegistrarableMock(skipMethod string) *RegistrarableMock {
935940
return mockObj
936941
}
937942

943+
type ProxyMock struct {
944+
mock.Mock
945+
}
946+
947+
func (m *ProxyMock) RunCmd(extraArgs []string) error {
948+
params := m.Called(extraArgs)
949+
return params.Error(0)
950+
}
951+
952+
func (m *ProxyMock) CreateConfigFromTemplates() error {
953+
params := m.Called()
954+
return params.Error(0)
955+
}
956+
957+
func (m *ProxyMock) ReadConfig() (string, error) {
958+
params := m.Called()
959+
return params.String(0), params.Error(1)
960+
}
961+
962+
func (m *ProxyMock) Reload() error {
963+
params := m.Called()
964+
return params.Error(0)
965+
}
966+
967+
func (m *ProxyMock) AddCert(certName string) {
968+
m.Called(certName)
969+
}
970+
971+
func (m *ProxyMock) GetCerts() map[string]string {
972+
params := m.Called()
973+
return params.Get(0).(map[string]string)
974+
}
975+
976+
func getProxyMock(skipMethod string) *ProxyMock {
977+
mockObj := new(ProxyMock)
978+
if skipMethod != "RunCmd" {
979+
mockObj.On("RunCmd", mock.Anything).Return(nil)
980+
}
981+
if skipMethod != "CreateConfigFromTemplates" {
982+
mockObj.On("CreateConfigFromTemplates").Return(nil)
983+
}
984+
if skipMethod != "ReadConfig" {
985+
mockObj.On("ReadConfig").Return("", nil)
986+
}
987+
if skipMethod != "Reload" {
988+
mockObj.On("Reload").Return(nil)
989+
}
990+
if skipMethod != "AddCert" {
991+
mockObj.On("AddCert", mock.Anything).Return(nil)
992+
}
993+
if skipMethod != "GetCerts" {
994+
mockObj.On("GetCerts").Return(map[string]string{})
995+
}
996+
return mockObj
997+
}
998+
938999
// Util
9391000

9401001
func (s ReconfigureTestSuite) verifyDoesNotPutDataToConsul(mode string) {

actions/util.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package actions
2+
import (
3+
"strings"
4+
"net"
5+
"log"
6+
"net/http"
7+
"../registry"
8+
"io/ioutil"
9+
)
10+
11+
type Executable interface {
12+
Execute(args []string) error
13+
}
14+
func isSwarm(mode string) bool {
15+
return strings.EqualFold(mode, "service") || strings.EqualFold(mode, "swarm")
16+
}
17+
var lookupHost = net.LookupHost
18+
var logPrintf = log.Printf
19+
var httpGet = http.Get
20+
var registryInstance registry.Registrarable = registry.Consul{}
21+
var writeFeTemplate = ioutil.WriteFile
22+
var writeBeTemplate = ioutil.WriteFile
23+
var readTemplateFile = ioutil.ReadFile

args.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"fmt"
55
"github.com/jessevdk/go-flags"
66
"os"
7+
"./actions"
78
)
89

910
type Args struct{}
@@ -16,7 +17,7 @@ func (a Args) Parse() error {
1617
parser := flags.NewParser(nil, flags.Default)
1718
parser.AddCommand("server", "Runs the server", "Runs the server", &serverImpl)
1819
parser.AddCommand("run", "Runs the proxy", "Runs the proxy", &run)
19-
parser.AddCommand("reconfigure", "Reconfigures the proxy", "Reconfigures the proxy using information stored in Consul", &reconfigure)
20+
parser.AddCommand("reconfigure", "Reconfigures the proxy", "Reconfigures the proxy using information stored in Consul", &actions.ReconfigureInstance)
2021
parser.AddCommand("remove", "Removes a service from the proxy", "Removes a service from the proxy", &remove)
2122
if _, err := parser.ParseArgs(os.Args[1:]); err != nil {
2223
return fmt.Errorf("Could not parse command line arguments\n%s", err.Error())

0 commit comments

Comments
 (0)