@@ -50,7 +50,7 @@ func TestBackgroundOptions(t *testing.T) {
5050 },
5151 expected : background {
5252 periodicRepoSyncFrequency : 5 * time .Second ,
53- listTimeoutPerRepo : 10 * time .Second ,
53+ listTimeoutPerRepo : 10 * time .Second ,
5454 },
5555 },
5656 }
@@ -105,6 +105,7 @@ func TestBackgroundHandleRepositoryEvent(t *testing.T) {
105105 setupMocks : func (mockClient * mockclient.MockWithWatch , mockResourceWriter * mockclient.MockSubResourceWriter ,
106106 mockCache * mockcache.MockCache , mockRepo * mockrepo.MockRepository ) {
107107 mockClient .On ("List" , mock .Anything , mock .Anything ).Return (nil )
108+ mockCache .On ("CheckRepositoryConnectivity" , mock .Anything , mock .AnythingOfType (v1alpha1Repo )).Return (nil )
108109 mockCache .On ("OpenRepository" , mock .Anything , mock .AnythingOfType (v1alpha1Repo ), mock .Anything ).Return (mockRepo , nil )
109110 mockClient .On ("Status" ).Return (mockResourceWriter )
110111 mockResourceWriter .On ("Update" , mock .Anything , mock .Anything ).Return (nil )
@@ -131,6 +132,7 @@ func TestBackgroundHandleRepositoryEvent(t *testing.T) {
131132 setupMocks : func (mockClient * mockclient.MockWithWatch , mockResourceWriter * mockclient.MockSubResourceWriter ,
132133 mockCache * mockcache.MockCache , mockRepo * mockrepo.MockRepository ) {
133134 mockClient .On ("List" , mock .Anything , mock .Anything ).Return (nil )
135+ mockCache .On ("CheckRepositoryConnectivity" , mock .Anything , mock .AnythingOfType (v1alpha1Repo )).Return (nil )
134136 mockCache .On ("OpenRepository" , mock .Anything , mock .AnythingOfType (v1alpha1Repo ), mock .Anything ).Return (mockRepo , nil )
135137 mockClient .On ("Status" ).Return (mockResourceWriter )
136138 mockResourceWriter .On ("Update" , mock .Anything , mock .Anything ).Return (nil )
@@ -179,6 +181,30 @@ func TestBackgroundHandleRepositoryEvent(t *testing.T) {
179181 },
180182 expectedError : errors .New (listErr ),
181183 },
184+ {
185+ name : "Repository connectivity check failed" ,
186+ event : watch .Added ,
187+ setupMocks : func (mockClient * mockclient.MockWithWatch , mockResourceWriter * mockclient.MockSubResourceWriter ,
188+ mockCache * mockcache.MockCache , mockRepo * mockrepo.MockRepository ) {
189+ mockClient .On ("List" , mock .Anything , mock .Anything ).Return (nil )
190+ mockCache .On ("CheckRepositoryConnectivity" , mock .Anything , mock .AnythingOfType (v1alpha1Repo )).Return (fmt .Errorf ("remote not found" ))
191+ mockClient .On ("Status" ).Return (mockResourceWriter )
192+ mockResourceWriter .On ("Update" , mock .Anything , mock .Anything ).
193+ Run (func (args mock.Arguments ) {
194+ repo := args .Get (1 ).(* configapi.Repository )
195+ assert .Len (t , repo .Status .Conditions , 1 )
196+ assert .Equal (t , v1 .ConditionFalse , repo .Status .Conditions [0 ].Status )
197+ assert .Equal (t , configapi .ReasonError , repo .Status .Conditions [0 ].Reason )
198+ assert .Contains (t , repo .Status .Conditions [0 ].Message , "remote not found" )
199+ }).Return (nil )
200+ mockClient .On ("Get" , mock .Anything , mock .AnythingOfType ("types.NamespacedName" ), mock .AnythingOfType ("*v1alpha1.Repository" )).
201+ Run (func (args mock.Arguments ) {
202+ repo := args .Get (2 ).(* configapi.Repository )
203+ repo .Status .Conditions = []v1.Condition {}
204+ }).
205+ Return (nil )
206+ },
207+ },
182208 }
183209
184210 for _ , tt := range tests {
@@ -200,8 +226,10 @@ func TestBackgroundHandleRepositoryEvent(t *testing.T) {
200226 case "Invalid repository" :
201227 repository = createRepo (2 , 1 , false )
202228 repository .Spec .Git .Directory = "invalid//directory"
229+ case "Successfully add repository event" , "Successfully modified repository event" :
230+ repository = createRepo (2 , 1 , false )
203231 default :
204- repository = createRepo (2 , 1 , false ) // specChanged returns true
232+ repository = createRepo (2 , 1 , false )
205233 }
206234 tt .setupMocks (mockClient , mockResourceWriter , mockCache , mockRepo )
207235
@@ -239,9 +267,16 @@ func TestBackgroundRunOnce(t *testing.T) {
239267 repoList := args .Get (1 ).(* configapi.RepositoryList )
240268 * repoList = * repositories
241269 }).Return (nil )
270+ mockCache .On ("CheckRepositoryConnectivity" , mock .Anything , mock .AnythingOfType (v1alpha1Repo )).Return (nil )
242271 mockCache .On ("OpenRepository" , mock .Anything , mock .AnythingOfType (v1alpha1Repo ), mock .Anything ).Return (mockRepo , nil )
243272 mockClient .On ("Status" ).Return (mockResourceWriter )
244- mockResourceWriter .On ("Update" , mock .Anything , mock .Anything ).Return (nil )
273+ mockResourceWriter .On ("Update" , mock .Anything , mock .Anything ).
274+ Run (func (args mock.Arguments ) {
275+ repo := args .Get (1 ).(* configapi.Repository )
276+ assert .Len (t , repo .Status .Conditions , 1 )
277+ assert .Equal (t , v1 .ConditionTrue , repo .Status .Conditions [0 ].Status )
278+ assert .Equal (t , configapi .ReasonReady , repo .Status .Conditions [0 ].Reason )
279+ }).Return (nil )
245280 mockClient .On ("Get" , mock .Anything , mock .AnythingOfType ("types.NamespacedName" ), mock .AnythingOfType ("*v1alpha1.Repository" )).
246281 Run (func (args mock.Arguments ) {
247282 repo := args .Get (2 ).(* configapi.Repository )
@@ -267,10 +302,43 @@ func TestBackgroundRunOnce(t *testing.T) {
267302 repoList := args .Get (1 ).(* configapi.RepositoryList )
268303 * repoList = * repositories
269304 }).Return (nil )
305+ mockCache .On ("CheckRepositoryConnectivity" , mock .Anything , mock .AnythingOfType (v1alpha1Repo )).Return (nil )
270306 mockCache .On ("OpenRepository" , mock .Anything , mock .AnythingOfType (v1alpha1Repo ), mock .Anything ).
271307 Return (nil , fmt .Errorf ("failed to cache" ))
272308 mockClient .On ("Status" ).Return (mockResourceWriter )
273- mockResourceWriter .On ("Update" , mock .Anything , mock .Anything ).Return (nil )
309+ mockResourceWriter .On ("Update" , mock .Anything , mock .Anything ).
310+ Run (func (args mock.Arguments ) {
311+ repo := args .Get (1 ).(* configapi.Repository )
312+ assert .Len (t , repo .Status .Conditions , 1 )
313+ assert .Equal (t , v1 .ConditionFalse , repo .Status .Conditions [0 ].Status )
314+ assert .Equal (t , configapi .ReasonError , repo .Status .Conditions [0 ].Reason )
315+ }).Return (nil )
316+ mockClient .On ("Get" , mock .Anything , mock .AnythingOfType ("types.NamespacedName" ), mock .AnythingOfType ("*v1alpha1.Repository" )).
317+ Run (func (args mock.Arguments ) {
318+ repo := args .Get (2 ).(* configapi.Repository )
319+ repo .Status .Conditions = []v1.Condition {}
320+ }).
321+ Return (nil )
322+ },
323+ },
324+ {
325+ name : "Repository connectivity check failed" ,
326+ setupMocks : func (mockClient * mockclient.MockWithWatch , mockResourceWriter * mockclient.MockSubResourceWriter ,
327+ mockCache * mockcache.MockCache , mockRepo * mockrepo.MockRepository ) {
328+ mockClient .On ("List" , mock .Anything , mock .AnythingOfType (v1alpha1RepoList )).Run (func (args mock.Arguments ) {
329+ repoList := args .Get (1 ).(* configapi.RepositoryList )
330+ * repoList = * repositories
331+ }).Return (nil )
332+ mockCache .On ("CheckRepositoryConnectivity" , mock .Anything , mock .AnythingOfType (v1alpha1Repo )).Return (fmt .Errorf ("remote not found" ))
333+ mockClient .On ("Status" ).Return (mockResourceWriter )
334+ mockResourceWriter .On ("Update" , mock .Anything , mock .Anything ).
335+ Run (func (args mock.Arguments ) {
336+ repo := args .Get (1 ).(* configapi.Repository )
337+ assert .Len (t , repo .Status .Conditions , 1 )
338+ assert .Equal (t , v1 .ConditionFalse , repo .Status .Conditions [0 ].Status )
339+ assert .Equal (t , configapi .ReasonError , repo .Status .Conditions [0 ].Reason )
340+ assert .Contains (t , repo .Status .Conditions [0 ].Message , "remote not found" )
341+ }).Return (nil )
274342 mockClient .On ("Get" , mock .Anything , mock .AnythingOfType ("types.NamespacedName" ), mock .AnythingOfType ("*v1alpha1.Repository" )).
275343 Run (func (args mock.Arguments ) {
276344 repo := args .Get (2 ).(* configapi.Repository )
@@ -556,7 +624,10 @@ func createRepo(gen int64, observedGen int64, conditionsNil bool) *configapi.Rep
556624 Generation : gen ,
557625 },
558626 Spec : configapi.RepositorySpec {
627+ Type : configapi .RepositoryTypeGit ,
559628 Git : & configapi.GitRepository {
629+ Repo : "https://mock-git-server.com/repo.git" ,
630+ Branch : "main" ,
560631 Directory : "/valid/path" ,
561632 },
562633 },
0 commit comments