5
5
"fmt"
6
6
"net/http"
7
7
"net/http/httptest"
8
+ "net/url"
8
9
"reflect"
9
10
"testing"
10
11
@@ -14,97 +15,115 @@ import (
14
15
)
15
16
16
17
func TestGetUpdates (t * testing.T ) {
17
- handler := func (w http.ResponseWriter , r * http.Request ) {
18
- if r .Method != http .MethodGet && r .Method != http .MethodHead {
19
- w .WriteHeader (http .StatusMethodNotAllowed )
20
- return
21
- }
22
-
23
- mtype := r .Header .Get ("Accept" )
24
- if mtype != GraphMediaType {
25
- w .WriteHeader (http .StatusUnsupportedMediaType )
26
- return
27
- }
28
-
29
- _ , err := w .Write ([]byte (`{
30
- "nodes": [
31
- {
32
- "version": "4.0.0-4",
33
- "payload": "quay.io/openshift-release-dev/ocp-release:4.0.0-4",
34
- "metadata": {}
35
- },
36
- {
37
- "version": "4.0.0-5",
38
- "payload": "quay.io/openshift-release-dev/ocp-release:4.0.0-5",
39
- "metadata": {}
40
- },
41
- {
42
- "version": "4.0.0-6",
43
- "payload": "quay.io/openshift-release-dev/ocp-release:4.0.0-6",
44
- "metadata": {}
45
- },
46
- {
47
- "version": "4.0.0-6+2",
48
- "payload": "quay.io/openshift-release-dev/ocp-release:4.0.0-6+2",
49
- "metadata": {}
50
- },
51
- {
52
- "version": "4.0.0-0.okd-0",
53
- "payload": "quay.io/openshift-release-dev/ocp-release:4.0.0-0.okd-0",
54
- "metadata": {}
55
- },
56
- {
57
- "version": "4.0.0-0.2",
58
- "payload": "quay.io/openshift-release-dev/ocp-release:4.0.0-0.2",
59
- "metadata": {}
60
- },
61
- {
62
- "version": "4.0.0-0.3",
63
- "payload": "quay.io/openshift-release-dev/ocp-release:4.0.0-0.3",
64
- "metadata": {}
65
- }
66
- ],
67
- "edges": [[0,1],[1,2],[1,3],[5,6]]
68
- }` ))
69
- if err != nil {
70
- w .WriteHeader (http .StatusInternalServerError )
71
- return
72
- }
73
- }
74
-
18
+ clientID := uuid .Must (uuid .Parse ("01234567-0123-0123-0123-0123456789ab" ))
19
+ channelName := "test-channel"
75
20
tests := []struct {
76
21
name string
77
22
version string
78
23
79
- available []Update
80
- err string
24
+ expectedQuery string
25
+ available []Update
26
+ err string
81
27
}{{
82
- name : "one update available" ,
83
- version : "4.0.0-4" ,
28
+ name : "one update available" ,
29
+ version : "4.0.0-4" ,
30
+ expectedQuery : "channel=test-channel&id=01234567-0123-0123-0123-0123456789ab&version=4.0.0-4" ,
84
31
available : []Update {
85
32
{semver .MustParse ("4.0.0-5" ), "quay.io/openshift-release-dev/ocp-release:4.0.0-5" },
86
33
},
87
34
}, {
88
- name : "two updates available" ,
89
- version : "4.0.0-5" ,
35
+ name : "two updates available" ,
36
+ version : "4.0.0-5" ,
37
+ expectedQuery : "channel=test-channel&id=01234567-0123-0123-0123-0123456789ab&version=4.0.0-5" ,
90
38
available : []Update {
91
39
{semver .MustParse ("4.0.0-6" ), "quay.io/openshift-release-dev/ocp-release:4.0.0-6" },
92
40
{semver .MustParse ("4.0.0-6+2" ), "quay.io/openshift-release-dev/ocp-release:4.0.0-6+2" },
93
41
},
94
42
}, {
95
- name : "no updates available" ,
96
- version : "4.0.0-0.okd-0" ,
43
+ name : "no updates available" ,
44
+ version : "4.0.0-0.okd-0" ,
45
+ expectedQuery : "channel=test-channel&id=01234567-0123-0123-0123-0123456789ab&version=4.0.0-0.okd-0" ,
97
46
}, {
98
- name : "unknown version" ,
99
- version : "4.0.0-3" ,
100
- err : "unknown version 4.0.0-3" ,
47
+ name : "unknown version" ,
48
+ version : "4.0.0-3" ,
49
+ expectedQuery : "channel=test-channel&id=01234567-0123-0123-0123-0123456789ab&version=4.0.0-3" ,
50
+ err : "unknown version 4.0.0-3" ,
101
51
}}
102
52
for _ , test := range tests {
103
53
t .Run (test .name , func (t * testing.T ) {
54
+ requestQuery := make (chan string , 1 )
55
+ defer close (requestQuery )
56
+
57
+ handler := func (w http.ResponseWriter , r * http.Request ) {
58
+ select {
59
+ case requestQuery <- r .URL .RawQuery :
60
+ default :
61
+ t .Fatalf ("received multiple requests at upstream URL" )
62
+ }
63
+
64
+ if r .Method != http .MethodGet && r .Method != http .MethodHead {
65
+ w .WriteHeader (http .StatusMethodNotAllowed )
66
+ return
67
+ }
68
+
69
+ mtype := r .Header .Get ("Accept" )
70
+ if mtype != GraphMediaType {
71
+ w .WriteHeader (http .StatusUnsupportedMediaType )
72
+ return
73
+ }
74
+
75
+ _ , err := w .Write ([]byte (`{
76
+ "nodes": [
77
+ {
78
+ "version": "4.0.0-4",
79
+ "payload": "quay.io/openshift-release-dev/ocp-release:4.0.0-4",
80
+ "metadata": {}
81
+ },
82
+ {
83
+ "version": "4.0.0-5",
84
+ "payload": "quay.io/openshift-release-dev/ocp-release:4.0.0-5",
85
+ "metadata": {}
86
+ },
87
+ {
88
+ "version": "4.0.0-6",
89
+ "payload": "quay.io/openshift-release-dev/ocp-release:4.0.0-6",
90
+ "metadata": {}
91
+ },
92
+ {
93
+ "version": "4.0.0-6+2",
94
+ "payload": "quay.io/openshift-release-dev/ocp-release:4.0.0-6+2",
95
+ "metadata": {}
96
+ },
97
+ {
98
+ "version": "4.0.0-0.okd-0",
99
+ "payload": "quay.io/openshift-release-dev/ocp-release:4.0.0-0.okd-0",
100
+ "metadata": {}
101
+ },
102
+ {
103
+ "version": "4.0.0-0.2",
104
+ "payload": "quay.io/openshift-release-dev/ocp-release:4.0.0-0.2",
105
+ "metadata": {}
106
+ },
107
+ {
108
+ "version": "4.0.0-0.3",
109
+ "payload": "quay.io/openshift-release-dev/ocp-release:4.0.0-0.3",
110
+ "metadata": {}
111
+ }
112
+ ],
113
+ "edges": [[0,1],[1,2],[1,3],[5,6]]
114
+ }` ))
115
+ if err != nil {
116
+ w .WriteHeader (http .StatusInternalServerError )
117
+ return
118
+ }
119
+ }
120
+
104
121
ts := httptest .NewServer (http .HandlerFunc (handler ))
105
- c := NewClient ( uuid . New () )
122
+ defer ts . Close ( )
106
123
107
- updates , err := c .GetUpdates (ts .URL , "" , semver .MustParse (test .version ))
124
+ c := NewClient (clientID )
125
+
126
+ updates , err := c .GetUpdates (ts .URL , channelName , semver .MustParse (test .version ))
108
127
if test .err == "" {
109
128
if err != nil {
110
129
t .Fatalf ("expected nil error, got: %v" , err )
@@ -117,6 +136,24 @@ func TestGetUpdates(t *testing.T) {
117
136
t .Fatalf ("expected err to be %s, got: %v" , test .err , err )
118
137
}
119
138
}
139
+
140
+ actualQuery := ""
141
+ select {
142
+ case actualQuery = <- requestQuery :
143
+ default :
144
+ t .Fatal ("no request received at upstream URL" )
145
+ }
146
+ expectedQueryValues , err := url .ParseQuery (test .expectedQuery )
147
+ if err != nil {
148
+ t .Fatalf ("could not parse expected query: %v" , err )
149
+ }
150
+ actualQueryValues , err := url .ParseQuery (actualQuery )
151
+ if err != nil {
152
+ t .Fatalf ("could not parse acutal query: %v" , err )
153
+ }
154
+ if e , a := expectedQueryValues , actualQueryValues ; ! reflect .DeepEqual (e , a ) {
155
+ t .Errorf ("expected query to be %q, got: %q" , e , a )
156
+ }
120
157
})
121
158
}
122
159
}
0 commit comments