fix: return empty CVE graphql results when cve disabled

Agent-Logs-Url: https://github.com/project-zot/zot/sessions/1ad9a48e-b34b-4cf5-8672-fcad1eec752f

Co-authored-by: rchincha <45800463+rchincha@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot]
2026-05-26 06:09:07 +00:00
committed by GitHub
parent b5ed56f07d
commit b419227a92
3 changed files with 85 additions and 6 deletions
+4
View File
@@ -1168,6 +1168,10 @@ func TestServeSearchEnabledNoCVE(t *testing.T) {
found, err = ReadLogFileAndSearchString(logPath, "cve config not provided, skipping cve-db update", readLogFileTimeout)
So(found, ShouldBeTrue)
So(err, ShouldBeNil)
found, err = ReadLogFileAndSearchString(logPath, "updating cve-db", readLogFileTimeout)
So(found, ShouldBeFalse)
So(err, ShouldBeNil)
})
}
+55 -1
View File
@@ -754,7 +754,61 @@ func TestQueryResolverErrors(t *testing.T) {
_, err := qr.CVEDiffListForImages(ctx, gql_generated.ImageInput{}, gql_generated.ImageInput{},
&gql_generated.PageInput{}, nil, nil)
So(err, ShouldNotBeNil)
So(err, ShouldBeNil)
})
Convey("CVEListForImage nil cveinfo returns empty result", func() {
resolverConfig := NewResolver(
log,
storage.StoreController{DefaultStore: mocks.MockedImageStore{}},
mocks.MetaDBMock{},
nil,
)
qr := queryResolver{resolverConfig}
result, err := qr.CVEListForImage(ctx, "repo1:1.0.0", &gql_generated.PageInput{}, nil, nil, nil)
So(err, ShouldBeNil)
So(result, ShouldNotBeNil)
So(result.Page, ShouldNotBeNil)
So(result.CVEList, ShouldNotBeNil)
So(len(result.CVEList), ShouldEqual, 0)
})
Convey("ImageListForCve nil cveinfo returns empty result", func() {
resolverConfig := NewResolver(
log,
storage.StoreController{DefaultStore: mocks.MockedImageStore{}},
mocks.MetaDBMock{},
nil,
)
qr := queryResolver{resolverConfig}
result, err := qr.ImageListForCve(ctx, "CVE-123", &gql_generated.Filter{}, &gql_generated.PageInput{})
So(err, ShouldBeNil)
So(result, ShouldNotBeNil)
So(result.Page, ShouldNotBeNil)
So(result.Results, ShouldNotBeNil)
So(len(result.Results), ShouldEqual, 0)
})
Convey("ImageListWithCVEFixed nil cveinfo returns empty result", func() {
resolverConfig := NewResolver(
log,
storage.StoreController{DefaultStore: mocks.MockedImageStore{}},
mocks.MetaDBMock{},
nil,
)
qr := queryResolver{resolverConfig}
result, err := qr.ImageListWithCVEFixed(ctx, "CVE-123", "repo1", &gql_generated.Filter{}, &gql_generated.PageInput{})
So(err, ShouldBeNil)
So(result, ShouldNotBeNil)
So(result.Page, ShouldNotBeNil)
So(result.Results, ShouldNotBeNil)
So(len(result.Results), ShouldEqual, 0)
})
Convey("CVEDiffListForImages error", func() {
+26 -5
View File
@@ -9,7 +9,6 @@ import (
"context"
"github.com/vektah/gqlparser/v2/gqlerror"
zerr "zotregistry.dev/zot/v2/errors"
"zotregistry.dev/zot/v2/pkg/common"
"zotregistry.dev/zot/v2/pkg/extensions/search/convert"
"zotregistry.dev/zot/v2/pkg/extensions/search/gql_generated"
@@ -18,7 +17,10 @@ import (
// CVEListForImage is the resolver for the CVEListForImage field.
func (r *queryResolver) CVEListForImage(ctx context.Context, image string, requestedPage *gql_generated.PageInput, searchedCve *string, excludedCve *string, severity *string) (*gql_generated.CVEResultForImage, error) {
if r.cveInfo == nil {
return &gql_generated.CVEResultForImage{}, zerr.ErrCVESearchDisabled
return &gql_generated.CVEResultForImage{
CVEList: []*gql_generated.Cve{},
Page: &gql_generated.PageInfo{},
}, nil
}
return getCVEListForImage(ctx, image, r.cveInfo, requestedPage, deref(searchedCve, ""), deref(excludedCve, ""), deref(severity, ""), r.log)
@@ -27,7 +29,20 @@ func (r *queryResolver) CVEListForImage(ctx context.Context, image string, reque
// CVEDiffListForImages is the resolver for the CVEDiffListForImages field.
func (r *queryResolver) CVEDiffListForImages(ctx context.Context, minuend gql_generated.ImageInput, subtrahend gql_generated.ImageInput, requestedPage *gql_generated.PageInput, searchedCve *string, excludedCve *string) (*gql_generated.CVEDiffResult, error) {
if r.cveInfo == nil {
return &gql_generated.CVEDiffResult{}, zerr.ErrCVESearchDisabled
return &gql_generated.CVEDiffResult{
Minuend: &gql_generated.ImageIdentifier{
Repo: minuend.Repo,
Tag: minuend.Tag,
Digest: minuend.Digest,
},
Subtrahend: &gql_generated.ImageIdentifier{
Repo: subtrahend.Repo,
Tag: subtrahend.Tag,
Digest: subtrahend.Digest,
},
CVEList: []*gql_generated.Cve{},
Page: &gql_generated.PageInfo{},
}, nil
}
return getCVEDiffListForImages(ctx, minuend, subtrahend, r.metaDB, r.cveInfo, requestedPage,
@@ -37,7 +52,10 @@ func (r *queryResolver) CVEDiffListForImages(ctx context.Context, minuend gql_ge
// ImageListForCve is the resolver for the ImageListForCVE field.
func (r *queryResolver) ImageListForCve(ctx context.Context, id string, filter *gql_generated.Filter, requestedPage *gql_generated.PageInput) (*gql_generated.PaginatedImagesResult, error) {
if r.cveInfo == nil {
return &gql_generated.PaginatedImagesResult{}, zerr.ErrCVESearchDisabled
return &gql_generated.PaginatedImagesResult{
Page: &gql_generated.PageInfo{},
Results: []*gql_generated.ImageSummary{},
}, nil
}
filter = cleanFilter(filter)
@@ -48,7 +66,10 @@ func (r *queryResolver) ImageListForCve(ctx context.Context, id string, filter *
// ImageListWithCVEFixed is the resolver for the ImageListWithCVEFixed field.
func (r *queryResolver) ImageListWithCVEFixed(ctx context.Context, id string, image string, filter *gql_generated.Filter, requestedPage *gql_generated.PageInput) (*gql_generated.PaginatedImagesResult, error) {
if r.cveInfo == nil {
return &gql_generated.PaginatedImagesResult{}, zerr.ErrCVESearchDisabled
return &gql_generated.PaginatedImagesResult{
Page: &gql_generated.PageInfo{},
Results: []*gql_generated.ImageSummary{},
}, nil
}
filter = cleanFilter(filter)