test: fix the data race in the test of scan controller (#13899)

Closes #13876

Signed-off-by: He Weiwei <hweiwei@vmware.com>
This commit is contained in:
He Weiwei 2021-01-06 16:17:47 +08:00 committed by GitHub
parent b748852ee8
commit e33ff932d1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 21 additions and 30 deletions

View File

@ -34,6 +34,13 @@ const (
ScanAllCallback = "scanAll"
)
var (
artifactCtl = artifact.Ctl
robotCtl = robot.Ctl
scanCtl = DefaultController
taskMgr = task.Mgr
)
func init() {
if err := scheduler.RegisterCallbackFunc(ScanAllCallback, scanAllCallback); err != nil {
log.Fatalf("failed to register the callback for the scan all schedule, error %v", err)
@ -54,7 +61,7 @@ func init() {
}
func scanAllCallback(ctx context.Context, param string) error {
_, err := DefaultController.ScanAll(ctx, task.ExecutionTriggerSchedule, true)
_, err := scanCtl.ScanAll(ctx, task.ExecutionTriggerSchedule, true)
return err
}
@ -64,7 +71,7 @@ func scanTaskStatusChange(ctx context.Context, taskID int64, status string) (err
js := job.Status(status)
if js.Final() {
t, err := task.Mgr.Get(ctx, taskID)
t, err := taskMgr.Get(ctx, taskID)
if err != nil {
return err
}
@ -72,7 +79,7 @@ func scanTaskStatusChange(ctx context.Context, taskID int64, status string) (err
if js == job.SuccessStatus {
robotID := getRobotID(t.ExtraAttrs)
if robotID > 0 {
if err := robot.Ctl.Delete(ctx, robotID); err != nil {
if err := robotCtl.Delete(ctx, robotID); err != nil {
// Should not block the main flow, just logged
logger.WithFields(log.Fields{"robot_id": robotID, "error": err}).Error("delete robot account failed")
} else {
@ -83,7 +90,7 @@ func scanTaskStatusChange(ctx context.Context, taskID int64, status string) (err
artifactID := getArtifactID(t.ExtraAttrs)
if artifactID > 0 {
art, err := artifact.Ctl.Get(ctx, artifactID, nil)
art, err := artifactCtl.Get(ctx, artifactID, nil)
if err != nil {
logger.WithFields(log.Fields{"artifact_id": artifactID, "error": err}).Errorf("failed to get artifact")
} else {
@ -114,5 +121,5 @@ func scanTaskCheckInProcessor(ctx context.Context, t *task.Task, data string) (e
return err
}
return DefaultController.UpdateReport(ctx, checkInReport)
return scanCtl.UpdateReport(ctx, checkInReport)
}

View File

@ -18,8 +18,9 @@ import (
"context"
"encoding/json"
"fmt"
"testing"
"github.com/goharbor/harbor/src/controller/artifact"
"github.com/goharbor/harbor/src/controller/robot"
"github.com/goharbor/harbor/src/jobservice/job"
"github.com/goharbor/harbor/src/lib/q"
"github.com/goharbor/harbor/src/pkg/scan"
@ -32,48 +33,39 @@ import (
reporttesting "github.com/goharbor/harbor/src/testing/pkg/scan/report"
tasktesting "github.com/goharbor/harbor/src/testing/pkg/task"
"github.com/stretchr/testify/suite"
"testing"
)
type CallbackTestSuite struct {
suite.Suite
artifactCtl *artifacttesting.Controller
originalArtifactCtl artifact.Controller
artifactCtl *artifacttesting.Controller
execMgr *tasktesting.ExecutionManager
robotCtl *robottesting.Controller
originalRobotCtl robot.Controller
robotCtl *robottesting.Controller
reportMgr *reporttesting.Manager
scanCtl Controller
originalScanCtl Controller
scanCtl Controller
taskMgr *tasktesting.Manager
originalTaskMgr task.Manager
reportConverter *postprocessorstesting.ScanReportV1ToV2Converter
}
func (suite *CallbackTestSuite) SetupSuite() {
suite.originalArtifactCtl = artifact.Ctl
suite.artifactCtl = &artifacttesting.Controller{}
artifact.Ctl = suite.artifactCtl
artifactCtl = suite.artifactCtl
suite.execMgr = &tasktesting.ExecutionManager{}
suite.originalRobotCtl = robot.Ctl
suite.robotCtl = &robottesting.Controller{}
robot.Ctl = suite.robotCtl
robotCtl = suite.robotCtl
suite.reportMgr = &reporttesting.Manager{}
suite.originalTaskMgr = task.Mgr
suite.taskMgr = &tasktesting.Manager{}
task.Mgr = suite.taskMgr
taskMgr = suite.taskMgr
suite.originalScanCtl = DefaultController
suite.reportConverter = &postprocessorstesting.ScanReportV1ToV2Converter{}
suite.scanCtl = &basicController{
@ -83,15 +75,7 @@ func (suite *CallbackTestSuite) SetupSuite() {
taskMgr: suite.taskMgr,
reportConverter: suite.reportConverter,
}
DefaultController = suite.scanCtl
}
func (suite *CallbackTestSuite) TearDownSuite() {
DefaultController = suite.originalScanCtl
artifact.Ctl = suite.originalArtifactCtl
robot.Ctl = suite.originalRobotCtl
task.Mgr = suite.originalTaskMgr
scanCtl = suite.scanCtl
}
func (suite *CallbackTestSuite) TestScanTaskStatusChange() {