Skip to content

Commit 7fdbeec

Browse files
relistanmihaitodor
authored andcommitted
Refine #6 and fix unit tests
1 parent 70d56c7 commit 7fdbeec

File tree

2 files changed

+39
-15
lines changed

2 files changed

+39
-15
lines changed

main.go

+6-8
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,8 @@ func run(command string) error {
7777
return err
7878
}
7979

80-
func innerUpdate(config *Config, previousServers []string) ([]string, error) {
81-
servers, err := FetchServers(config)
80+
func innerUpdate(config *Config, previousServers []string, client *http.Client) ([]string, error) {
81+
servers, err := FetchServers(config, client)
8282
if err != nil {
8383
return nil, fmt.Errorf("Unable to fetch updated server list! (%s)", err)
8484
}
@@ -114,25 +114,24 @@ func innerUpdate(config *Config, previousServers []string) ([]string, error) {
114114

115115
if _, err := os.Stat(config.NginxPID); os.IsNotExist(err) {
116116
log.Warn("Nginx is not running yet!")
117-
return servers, nil
117+
return nil, nil
118118
}
119119

120120
err = run(config.UpdateCommand)
121121
if err != nil {
122122
return nil, fmt.Errorf("Unable to reload nginx config! (%s)", err)
123123
}
124124

125-
previousServers = servers
126-
127125
return servers, nil
128126
}
129127

130128
func UpdateNginx(config *Config) {
131129
var previousServers []string
132130
var err error
131+
client := &http.Client{Timeout: config.RefreshInterval * 2}
133132

134133
for {
135-
previousServers, err = innerUpdate(config, previousServers)
134+
previousServers, err = innerUpdate(config, previousServers, client)
136135
if err != nil {
137136
log.Error(err)
138137
}
@@ -154,8 +153,7 @@ func findPortWithSvcPortNumber(ports []service.Port, config *Config) string {
154153
// FetchServers will connect to Sidecar, and with a timeout, fetch and
155154
// parse the resulting structure. It will return a list of only the
156155
// server:port combinations for the queried service
157-
func FetchServers(config *Config) ([]string, error) {
158-
client := &http.Client{Timeout: config.RefreshInterval * 2}
156+
func FetchServers(config *Config, client *http.Client) ([]string, error) {
159157
url := "http://" + config.SidecarAddress + "/api/services/" + config.FollowService + ".json"
160158

161159
resp, err := client.Get(url)

main_test.go

+33-7
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package main
33
import (
44
"bytes"
55
"io/ioutil"
6+
"net/http"
67
"os"
78
"testing"
89

@@ -89,6 +90,7 @@ func Test_WriteTemplate(t *testing.T) {
8990

9091
func Test_UpdateNginx(t *testing.T) {
9192
Convey("UpdateNginx()", t, func() {
93+
httpmock.Reset()
9294
previousServers := []string{}
9395

9496
outFile, err := ioutil.TempFile("", "UpdateNginx")
@@ -109,21 +111,23 @@ func Test_UpdateNginx(t *testing.T) {
109111
"10.10.10.10:26858",
110112
}
111113

112-
httpmock.RegisterResponder("GET", "http://beowulf:31337/services/foo.json",
114+
httpmock.RegisterResponder("GET", "http://beowulf:31337/api/services/foo.json",
113115
httpmock.NewStringResponder(
114116
200, ValidResponse,
115117
),
116118
)
117119

118-
httpmock.Activate()
120+
client := &http.Client{}
121+
122+
httpmock.ActivateNonDefault(client)
119123

120124
Reset(func() {
121125
httpmock.Reset()
122126
os.Remove(outFile.Name())
123127
})
124128

125129
Convey("Writes a template when the servers changed", func() {
126-
newServers, err := innerUpdate(&config, previousServers)
130+
newServers, err := innerUpdate(&config, previousServers, client)
127131

128132
stat, _ := outFile.Stat()
129133
So(err, ShouldBeNil)
@@ -132,7 +136,7 @@ func Test_UpdateNginx(t *testing.T) {
132136
})
133137

134138
Convey("Does not write a template when the servers are the same", func() {
135-
newServers, err := innerUpdate(&config, servers)
139+
newServers, err := innerUpdate(&config, servers, client)
136140

137141
stat, _ := outFile.Stat()
138142
So(err, ShouldBeNil)
@@ -143,7 +147,7 @@ func Test_UpdateNginx(t *testing.T) {
143147
Convey("Bubbles up errors in validation", func() {
144148
config.ValidateCommand = "false"
145149

146-
_, err := innerUpdate(&config, previousServers)
150+
_, err := innerUpdate(&config, previousServers, client)
147151
So(err, ShouldNotBeNil)
148152
So(err.Error(), ShouldContainSubstring, "Unable to validate")
149153
})
@@ -152,17 +156,39 @@ func Test_UpdateNginx(t *testing.T) {
152156
config.ValidateCommand = "true"
153157
config.UpdateCommand = "false"
154158

155-
_, err := innerUpdate(&config, previousServers)
159+
_, err := innerUpdate(&config, previousServers, client)
156160
So(err, ShouldNotBeNil)
157161
So(err.Error(), ShouldContainSubstring, "Unable to reload")
158162
})
159163

160164
Convey("Does not add non-healthy servers", func() {
161165
config.TemplateFile = ""
162-
newServers, err := innerUpdate(&config, servers)
166+
newServers, err := innerUpdate(&config, servers, client)
163167

164168
So(err, ShouldBeNil)
165169
So(newServers, ShouldResemble, servers)
166170
})
171+
172+
Convey("Does not blow up when FetchServers has no services", func() {
173+
httpmock.Reset()
174+
175+
httpmock.RegisterResponder("GET", "http://beowulf:31337/api/services/foo.json",
176+
httpmock.NewStringResponder(
177+
200, "null",
178+
),
179+
)
180+
181+
newServers, err := innerUpdate(&config, servers, client)
182+
183+
So(err, ShouldBeNil)
184+
So(newServers, ShouldBeNil)
185+
})
186+
187+
Convey("Does update when previousServers was nil and FetchServers returns servers", func() {
188+
newServers, err := innerUpdate(&config, nil, client)
189+
190+
So(err, ShouldBeNil)
191+
So(newServers, ShouldResemble, []string{"10.10.10.10:26858"})
192+
})
167193
})
168194
}

0 commit comments

Comments
 (0)