Skip to content

Commit dfaaa30

Browse files
authored
Fix background.go panic when cachedRepo is nil (#332)
* fix background.go panic when cachedRepo is nil * Add unit test to cover repository refresh when cachedRepo is nil
1 parent 9f83904 commit dfaaa30

2 files changed

Lines changed: 15 additions & 1 deletion

File tree

pkg/registry/porch/background.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -195,10 +195,13 @@ func (b *background) handleRepositoryEvent(ctx context.Context, repo *configapi.
195195
case watch.Deleted:
196196
err = b.cache.CloseRepository(listCtx, repo, repoList.Items)
197197
case watch.Modified:
198-
if cachedRepo, err := b.cacheRepository(listCtx, repo); err == nil {
198+
cachedRepo, err := b.cacheRepository(listCtx, repo)
199+
if err == nil && cachedRepo != nil {
199200
if err = cachedRepo.Refresh(ctx); err != nil {
200201
klog.Warningf("Background repository refresh failed for repo %q: %v", repo.Name, err)
201202
}
203+
} else {
204+
klog.Warningf("cacheRepository failed or returned nil for repo %q: err=%v", repo.Name, err)
202205
}
203206
default:
204207
_, err = b.cacheRepository(listCtx, repo)

pkg/registry/porch/background_test.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,17 @@ func TestBackground_HandleRepositoryEvent(t *testing.T) {
121121
mockResourceWriter.On("Update", mock.Anything, mock.Anything).Return(nil)
122122
},
123123
},
124+
{
125+
name: "Modified event with nil cachedRepo and no error",
126+
event: watch.Modified,
127+
setupMocks: func(mockClient *mockclient.MockWithWatch, mockResourceWriter *mockclient.MockSubResourceWriter,
128+
mockCache *mockcache.MockCache, mockRepo *mockrepo.MockRepository) {
129+
mockClient.On("List", mock.Anything, mock.Anything).Return(nil)
130+
mockCache.On("OpenRepository", mock.Anything, mock.AnythingOfType("*v1alpha1.Repository")).Return(nil, nil)
131+
mockClient.On("Status").Return(mockResourceWriter)
132+
mockResourceWriter.On("Update", mock.Anything, mock.Anything).Return(nil)
133+
},
134+
},
124135
{
125136
name: "Unsuccessful repository deletion event",
126137
event: watch.Deleted,

0 commit comments

Comments
 (0)