harbor/src/controller/event/handler/internal/util_test.go

163 lines
4.7 KiB
Go

// Copyright Project Harbor Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package internal
import (
"testing"
"github.com/stretchr/testify/suite"
"github.com/goharbor/harbor/src/controller/artifact"
"github.com/goharbor/harbor/src/controller/event"
"github.com/goharbor/harbor/src/controller/project"
"github.com/goharbor/harbor/src/controller/scan"
"github.com/goharbor/harbor/src/lib/errors"
"github.com/goharbor/harbor/src/lib/orm"
pkg "github.com/goharbor/harbor/src/pkg/artifact"
proModels "github.com/goharbor/harbor/src/pkg/project/models"
projecttesting "github.com/goharbor/harbor/src/testing/controller/project"
scantesting "github.com/goharbor/harbor/src/testing/controller/scan"
ormtesting "github.com/goharbor/harbor/src/testing/lib/orm"
"github.com/goharbor/harbor/src/testing/mock"
)
type AutoScanTestSuite struct {
suite.Suite
originalProjectController project.Controller
projectController *projecttesting.Controller
originalScanController scan.Controller
scanController *scantesting.Controller
}
func (suite *AutoScanTestSuite) SetupTest() {
suite.originalProjectController = project.Ctl
suite.projectController = &projecttesting.Controller{}
project.Ctl = suite.projectController
suite.originalScanController = scan.DefaultController
suite.scanController = &scantesting.Controller{}
scan.DefaultController = suite.scanController
}
func (suite *AutoScanTestSuite) TearDownTest() {
project.Ctl = suite.originalProjectController
scan.DefaultController = suite.originalScanController
}
func (suite *AutoScanTestSuite) TestGetProjectFailed() {
mock.OnAnything(suite.projectController, "Get").Return(nil, errors.NotFoundError(nil))
ctx := orm.NewContext(nil, &ormtesting.FakeOrmer{})
art := &artifact.Artifact{}
suite.Error(autoScan(ctx, art))
}
func (suite *AutoScanTestSuite) TestAutoScanDisabled() {
mock.OnAnything(suite.projectController, "Get").Return(&proModels.Project{
Metadata: map[string]string{
proModels.ProMetaAutoScan: "false",
},
}, nil)
ctx := orm.NewContext(nil, &ormtesting.FakeOrmer{})
art := &artifact.Artifact{}
suite.Nil(autoScan(ctx, art))
}
func (suite *AutoScanTestSuite) TestAutoScan() {
mock.OnAnything(suite.projectController, "Get").Return(&proModels.Project{
Metadata: map[string]string{
proModels.ProMetaAutoScan: "true",
},
}, nil)
mock.OnAnything(suite.scanController, "Scan").Return(nil)
ctx := orm.NewContext(nil, &ormtesting.FakeOrmer{})
art := &artifact.Artifact{}
suite.Nil(autoScan(ctx, art))
}
func (suite *AutoScanTestSuite) TestAutoScanSBOM() {
mock.OnAnything(suite.projectController, "Get").Return(&proModels.Project{
Metadata: map[string]string{
proModels.ProMetaAutoSBOMGen: "true",
},
}, nil)
mock.OnAnything(suite.scanController, "Scan").Return(nil)
ctx := orm.NewContext(nil, &ormtesting.FakeOrmer{})
art := &artifact.Artifact{}
suite.Nil(autoGenSBOM(ctx, art))
}
func (suite *AutoScanTestSuite) TestAutoScanSBOMFalse() {
mock.OnAnything(suite.projectController, "Get").Return(&proModels.Project{
Metadata: map[string]string{
proModels.ProMetaAutoSBOMGen: "false",
},
}, nil)
mock.OnAnything(suite.scanController, "Scan").Return(nil)
ctx := orm.NewContext(nil, &ormtesting.FakeOrmer{})
art := &artifact.Artifact{}
suite.Nil(autoGenSBOM(ctx, art))
}
func (suite *AutoScanTestSuite) TestAutoScanFailed() {
mock.OnAnything(suite.projectController, "Get").Return(&proModels.Project{
Metadata: map[string]string{
proModels.ProMetaAutoScan: "true",
},
}, nil)
mock.OnAnything(suite.scanController, "Scan").Return(errors.ConflictError(nil))
ctx := orm.NewContext(nil, &ormtesting.FakeOrmer{})
art := &artifact.Artifact{}
suite.Error(autoScan(ctx, art))
}
func (suite *AutoScanTestSuite) TestWithArtifactEvent() {
mock.OnAnything(suite.projectController, "Get").Return(&proModels.Project{
Metadata: map[string]string{
proModels.ProMetaAutoScan: "true",
},
}, nil)
mock.OnAnything(suite.scanController, "Scan").Return(nil)
event := &event.ArtifactEvent{
Artifact: &pkg.Artifact{},
}
ctx := orm.NewContext(nil, &ormtesting.FakeOrmer{})
suite.Nil(autoScan(ctx, &artifact.Artifact{Artifact: *event.Artifact}, event.Tags...))
}
func TestAutoScanTestSuite(t *testing.T) {
suite.Run(t, &AutoScanTestSuite{})
}