Skip to content

Commit 483bf62

Browse files
jopadiFxKu
andauthored
add test team member (zalando#1842)
* return err if teams API fails with StatusCode other than 404 * add unit test for 404 at team members Co-authored-by: Jociele Padilha <[email protected]> Co-authored-by: Felix Kunde <[email protected]>
1 parent 9bcb25a commit 483bf62

File tree

4 files changed

+267
-242
lines changed

4 files changed

+267
-242
lines changed

pkg/cluster/cluster_test.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -194,8 +194,8 @@ type mockTeamsAPIClient struct {
194194
members []string
195195
}
196196

197-
func (m *mockTeamsAPIClient) TeamInfo(teamID, token string) (tm *teams.Team, err error) {
198-
return &teams.Team{Members: m.members}, nil
197+
func (m *mockTeamsAPIClient) TeamInfo(teamID, token string) (tm *teams.Team, statusCode int, err error) {
198+
return &teams.Team{Members: m.members}, statusCode, nil
199199
}
200200

201201
func (m *mockTeamsAPIClient) setMembers(members []string) {
@@ -260,15 +260,15 @@ type mockTeamsAPIClientMultipleTeams struct {
260260
teams []mockTeam
261261
}
262262

263-
func (m *mockTeamsAPIClientMultipleTeams) TeamInfo(teamID, token string) (tm *teams.Team, err error) {
263+
func (m *mockTeamsAPIClientMultipleTeams) TeamInfo(teamID, token string) (tm *teams.Team, statusCode int, err error) {
264264
for _, team := range m.teams {
265265
if team.teamID == teamID {
266-
return &teams.Team{Members: team.members}, nil
266+
return &teams.Team{Members: team.members}, statusCode, nil
267267
}
268268
}
269269

270270
// should not be reached if a slice with teams is populated correctly
271-
return nil, nil
271+
return nil, statusCode, nil
272272
}
273273

274274
// Test adding members of maintenance teams that get superuser rights for all PG databases

pkg/cluster/util.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"encoding/gob"
77
"encoding/json"
88
"fmt"
9+
"net/http"
910
"reflect"
1011
"sort"
1112
"strings"
@@ -272,9 +273,14 @@ func (c *Cluster) getTeamMembers(teamID string) ([]string, error) {
272273
return nil, fmt.Errorf("could not get oauth token to authenticate to team service API: %v", err)
273274
}
274275

275-
teamInfo, err := c.teamsAPIClient.TeamInfo(teamID, token)
276+
teamInfo, statusCode, err := c.teamsAPIClient.TeamInfo(teamID, token)
277+
276278
if err != nil {
277-
c.logger.Warningf("could not get team info for team %q: %v", teamID, err)
279+
if statusCode == http.StatusNotFound {
280+
c.logger.Warningf("could not get team info for team %q: %v", teamID, err)
281+
} else {
282+
return nil, fmt.Errorf("could not get team info for team %q: %v", teamID, err)
283+
}
278284
} else {
279285
for _, member := range teamInfo.Members {
280286
if !(util.SliceContains(members, member)) {

pkg/util/teams/teams.go

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ type httpClient interface {
4545

4646
// Interface to the TeamsAPIClient
4747
type Interface interface {
48-
TeamInfo(teamID, token string) (tm *Team, err error)
48+
TeamInfo(teamID, token string) (tm *Team, statusCode int, err error)
4949
}
5050

5151
// API describes teams API
@@ -67,7 +67,7 @@ func NewTeamsAPI(url string, log *logrus.Entry) *API {
6767
}
6868

6969
// TeamInfo returns information about a given team using its ID and a token to authenticate to the API service.
70-
func (t *API) TeamInfo(teamID, token string) (tm *Team, err error) {
70+
func (t *API) TeamInfo(teamID, token string) (tm *Team, statusCode int, err error) {
7171
var (
7272
req *http.Request
7373
resp *http.Response
@@ -77,37 +77,38 @@ func (t *API) TeamInfo(teamID, token string) (tm *Team, err error) {
7777
t.logger.Debugf("request url: %s", url)
7878
req, err = http.NewRequest("GET", url, nil)
7979
if err != nil {
80-
return nil, err
80+
return nil, http.StatusBadRequest, err
8181
}
8282

8383
req.Header.Add("Authorization", "Bearer "+token)
8484
if resp, err = t.httpClient.Do(req); err != nil {
85-
return nil, err
85+
return nil, http.StatusUnauthorized, err
8686
}
8787
defer func() {
8888
if closeErr := resp.Body.Close(); closeErr != nil {
8989
err = fmt.Errorf("error when closing response: %v", closeErr)
9090
}
9191
}()
92-
if resp.StatusCode != 200 {
92+
statusCode = resp.StatusCode
93+
if statusCode != http.StatusOK {
9394
var raw map[string]json.RawMessage
9495
d := json.NewDecoder(resp.Body)
9596
err = d.Decode(&raw)
9697
if err != nil {
97-
return nil, fmt.Errorf("team API query failed with status code %d and malformed response: %v", resp.StatusCode, err)
98+
return nil, statusCode, fmt.Errorf("team API query failed with status code %d and malformed response: %v", statusCode, err)
9899
}
99100

100101
if errMessage, ok := raw["error"]; ok {
101-
return nil, fmt.Errorf("team API query failed with status code %d and message: '%v'", resp.StatusCode, string(errMessage))
102+
return nil, statusCode, fmt.Errorf("team API query failed with status code %d and message: '%v'", statusCode, string(errMessage))
102103
}
103-
return nil, fmt.Errorf("team API query failed with status code %d", resp.StatusCode)
104+
return nil, statusCode, fmt.Errorf("team API query failed with status code %d", statusCode)
104105
}
105106

106107
tm = &Team{}
107108
d := json.NewDecoder(resp.Body)
108109
if err = d.Decode(tm); err != nil {
109-
return nil, fmt.Errorf("could not parse team API response: %v", err)
110+
return nil, statusCode, fmt.Errorf("could not parse team API response: %v", err)
110111
}
111112

112-
return tm, nil
113+
return tm, statusCode, nil
113114
}

0 commit comments

Comments
 (0)