|
1 | 1 | // +build !integration |
2 | 2 |
|
3 | | -package main |
| 3 | +package actions |
4 | 4 |
|
5 | 5 | import ( |
6 | | - haproxy "./proxy" |
7 | | - "./registry" |
| 6 | + haproxy "../proxy" |
| 7 | + "../registry" |
8 | 8 | "encoding/json" |
9 | 9 | "fmt" |
10 | 10 | "github.com/stretchr/testify/mock" |
@@ -64,6 +64,79 @@ func (s *ReconfigureTestSuite) SetupTest() { |
64 | 64 | s.reconfigure.skipAddressValidation = true |
65 | 65 | } |
66 | 66 |
|
| 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 | + |
67 | 140 | // GetTemplate |
68 | 141 |
|
69 | 142 | func (s ReconfigureTestSuite) Test_GetTemplates_ReturnsFormattedContent() { |
@@ -600,6 +673,7 @@ func (s *ReconfigureTestSuite) Test_Execute_ReturnsError_WhenPutToConsulFails() |
600 | 673 |
|
601 | 674 | func (s *ReconfigureTestSuite) Test_Execute_AddsHttpIfNotPresentInPutToConsul() { |
602 | 675 | s.reconfigure.ConsulAddresses = []string{strings.Replace(s.ConsulAddress, "http://", "", -1)} |
| 676 | + |
603 | 677 | s.reconfigure.Execute([]string{}) |
604 | 678 |
|
605 | 679 | s.Equal(s.ServiceColor, s.ConsulRequestBody.ServiceColor) |
@@ -765,75 +839,6 @@ func (s *ReconfigureTestSuite) Test_ReloadAllServices_ReturnsError_WhenSwarmList |
765 | 839 | s.Error(err) |
766 | 840 | } |
767 | 841 |
|
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 | | - |
837 | 842 | // Mock |
838 | 843 |
|
839 | 844 | type ReconfigureMock struct { |
@@ -935,6 +940,62 @@ func getRegistrarableMock(skipMethod string) *RegistrarableMock { |
935 | 940 | return mockObj |
936 | 941 | } |
937 | 942 |
|
| 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 | + |
938 | 999 | // Util |
939 | 1000 |
|
940 | 1001 | func (s ReconfigureTestSuite) verifyDoesNotPutDataToConsul(mode string) { |
|
0 commit comments