@@ -10,18 +10,18 @@ import (
1010
1111func TestNewQuayWebhook (t * testing.T ) {
1212 secret := "test"
13- webhook := NewDockerHubWebhook (secret )
13+ webhook := NewQuayWebhook (secret )
1414
1515 assert .NotNil (t , webhook , "webhook was nil" )
16- assert .Equal (t , webhook . secret , secret , "Secret is not the same expected %s but got %s" , secret , webhook .secret )
16+ assert .Equal (t , secret , webhook . secret , "Secret is not the same expected %s but got %s" , secret , webhook .secret )
1717}
1818
1919func TestQuayWebhook_GetRegistryType (t * testing.T ) {
2020 webhook := NewQuayWebhook ("" )
2121 registryType := webhook .GetRegistryType ()
2222
2323 assert .NotNil (t , webhook , "Webhook was nil" )
24- assert .Equal (t , registryType , "quay.io" , "Registry type is not quay.io got: %s" , registryType )
24+ assert .Equal (t , "quay.io" , registryType , "Registry type is not quay.io got: %s" , registryType )
2525}
2626
2727func TestQuayWebhook_Validate (t * testing.T ) {
@@ -92,14 +92,15 @@ func TestQuayWebhook_Parse(t *testing.T) {
9292 webhook := NewQuayWebhook ("" )
9393
9494 tests := []struct {
95- name string
96- payload string
97- expectedRepo string
98- expectedTag string
99- expectError bool
95+ name string
96+ payload string
97+ expectedRegistry string
98+ expectedRepo string
99+ expectedTag string
100+ expectError bool
100101 }{
101102 {
102- name : "valid payload" ,
103+ name : "valid payload with quay.io docker_url " ,
103104 payload : `{
104105 "name": "repository",
105106 "repository": "mynamespace/repository",
@@ -110,9 +111,75 @@ func TestQuayWebhook_Parse(t *testing.T) {
110111 "latest"
111112 ]
112113 }` ,
113- expectedRepo : "mynamespace/repository" ,
114- expectedTag : "latest" ,
115- expectError : false ,
114+ expectedRegistry : "quay.io" ,
115+ expectedRepo : "mynamespace/repository" ,
116+ expectedTag : "latest" ,
117+ expectError : false ,
118+ },
119+ {
120+ name : "private quay registry in docker_url" ,
121+ payload : `{
122+ "name": "repository",
123+ "repository": "mynamespace/repository",
124+ "namespace": "mynamespace",
125+ "docker_url": "quay.apps.example.com/mynamespace/repository",
126+ "homepage": "https://quay.apps.example.com/repository/mynamespace/repository",
127+ "updated_tags": [
128+ "dev"
129+ ]
130+ }` ,
131+ expectedRegistry : "quay.apps.example.com" ,
132+ expectedRepo : "mynamespace/repository" ,
133+ expectedTag : "dev" ,
134+ expectError : false ,
135+ },
136+ {
137+ name : "private quay registry with https scheme in docker_url" ,
138+ payload : `{
139+ "name": "repository",
140+ "repository": "ariss/alrl",
141+ "namespace": "ariss",
142+ "docker_url": "https://quay.internal.corp/ariss/alrl",
143+ "homepage": "https://quay.internal.corp/repository/ariss/alrl",
144+ "updated_tags": [
145+ "v1.0"
146+ ]
147+ }` ,
148+ expectedRegistry : "quay.internal.corp" ,
149+ expectedRepo : "ariss/alrl" ,
150+ expectedTag : "v1.0" ,
151+ expectError : false ,
152+ },
153+ {
154+ name : "empty docker_url falls back to quay.io" ,
155+ payload : `{
156+ "name": "repository",
157+ "repository": "mynamespace/repository",
158+ "namespace": "mynamespace",
159+ "docker_url": "",
160+ "updated_tags": [
161+ "latest"
162+ ]
163+ }` ,
164+ expectedRegistry : "quay.io" ,
165+ expectedRepo : "mynamespace/repository" ,
166+ expectedTag : "latest" ,
167+ expectError : false ,
168+ },
169+ {
170+ name : "missing docker_url falls back to quay.io" ,
171+ payload : `{
172+ "name": "repository",
173+ "repository": "mynamespace/repository",
174+ "namespace": "mynamespace",
175+ "updated_tags": [
176+ "latest"
177+ ]
178+ }` ,
179+ expectedRegistry : "quay.io" ,
180+ expectedRepo : "mynamespace/repository" ,
181+ expectedTag : "latest" ,
182+ expectError : false ,
116183 },
117184 {
118185 name : "valid payload with multiple tags" ,
@@ -127,9 +194,10 @@ func TestQuayWebhook_Parse(t *testing.T) {
127194 "v1.0"
128195 ]
129196 }` ,
130- expectedRepo : "mynamespace/repository" ,
131- expectedTag : "latest" ,
132- expectError : false ,
197+ expectedRegistry : "quay.io" ,
198+ expectedRepo : "mynamespace/repository" ,
199+ expectedTag : "latest" ,
200+ expectError : false ,
133201 },
134202 {
135203 name : "valid payload with no tags" ,
@@ -186,9 +254,33 @@ func TestQuayWebhook_Parse(t *testing.T) {
186254 }
187255
188256 assert .NotNil (t , event , "Event was nil" )
189- assert .Equal (t , event .RegistryURL , "quay.io" , "Expected repository url to be %s, but got %s" , "quay.io" , event .RegistryURL )
190- assert .Equal (t , event .Repository , tt .expectedRepo , "Expect repository to be %s, but got %s" , tt .expectedRepo , event .Repository )
191- assert .Equal (t , event .Tag , tt .expectedTag , "Expected tag to be %s, but got %s" , tt .expectedTag , event .Tag )
257+ assert .Equal (t , tt .expectedRegistry , event .RegistryURL )
258+ assert .Equal (t , tt .expectedRepo , event .Repository )
259+ assert .Equal (t , tt .expectedTag , event .Tag )
260+ })
261+ }
262+ }
263+
264+ func TestExtractRegistryFromDockerURL (t * testing.T ) {
265+ tests := []struct {
266+ name string
267+ input string
268+ expected string
269+ }{
270+ {"public quay.io" , "quay.io/ns/repo" , "quay.io" },
271+ {"private hostname" , "quay.apps.example.com/ns/repo" , "quay.apps.example.com" },
272+ {"with https scheme" , "https://quay.internal.corp/ns/repo" , "quay.internal.corp" },
273+ {"with http scheme" , "http://quay.internal.corp/ns/repo" , "quay.internal.corp" },
274+ {"hostname with port" , "quay.internal.corp:8443/ns/repo" , "quay.internal.corp:8443" },
275+ {"bare hostname no path" , "quay.apps.example.com" , "quay.apps.example.com" },
276+ {"manual split fallback" , "quay.custom.io:bad:port/ns/repo" , "quay.custom.io:bad:port" },
277+ {"unparseable url falls back to quay.io" , "/ns/repo" , "quay.io" },
278+ }
279+
280+ for _ , tt := range tests {
281+ t .Run (tt .name , func (t * testing.T ) {
282+ result := extractRegistryFromDockerURL (tt .input )
283+ assert .Equal (t , tt .expected , result )
192284 })
193285 }
194286}
0 commit comments