Add unit tests for pipeline approve functions

Signed-off-by: rick <rick@jenkins-zh.cn>
This commit is contained in:
rick
2020-11-30 14:03:42 +08:00
parent df34ee9978
commit 8451c18277
4 changed files with 59 additions and 44 deletions

View File

@@ -238,7 +238,7 @@ func (h *ProjectPipelineHandler) getCurrentUser(req *restful.Request) (username,
if userInfo, ok = request.UserFrom(ctx); ok { if userInfo, ok = request.UserFrom(ctx); ok {
var role *iamv1alpha2.GlobalRole var role *iamv1alpha2.GlobalRole
username = userInfo.GetName() username = userInfo.GetName()
if role, err = h.abc.GetGlobalRoleOfUser(username); err == nil { if role, err = h.amInterface.GetGlobalRoleOfUser(username); err == nil {
roleName = role.Name roleName = role.Name
} }
} }
@@ -508,47 +508,28 @@ func (h *ProjectPipelineHandler) SubmitBranchInputStep(req *restful.Request, res
nodeId := req.PathParameter("node") nodeId := req.PathParameter("node")
stepId := req.PathParameter("step") stepId := req.PathParameter("step")
var currentUesrName string var (
ctx := req.Request.Context() response []byte
if user, ok := request.UserFrom(ctx); ok { err error
currentUesrName = user.GetName() ok bool
)
if ok, err = h.hasSubmitPermission(req); !ok || err != nil {
msg := map[string]string{
"allow": "false",
"message": fmt.Sprintf("%v", err),
} }
fmt.Println("current user", currentUesrName, "nodeId", nodeId, "stepid", stepId) response, _ = json.Marshal(msg)
req.Request.UserAgent()
if res, err := h.devopsOperator.GetNodesDetail(projectName, pipelineName, runId, req.Request); err == nil {
for _, node := range res {
fmt.Println("nodeid", node.ID)
if node.ID != nodeId {
continue
}
for _, step := range node.Steps {
fmt.Println("stepid", step.ID, step.Input)
if step.ID != stepId && step.Input != nil {
continue
}
submitter := step.Input.Submitter
fmt.Println(submitter)
if currentUesrName != submitter {
resp.Write([]byte("no permission"))
return
}
}
}
} else { } else {
log.Infof("cannot get the nodes detail when submit a branch input step") response, err = h.devopsOperator.SubmitBranchInputStep(projectName, pipelineName, branchName, runId, nodeId, stepId, req.Request)
}
res, err := h.devopsOperator.SubmitBranchInputStep(projectName, pipelineName, branchName, runId, nodeId, stepId, req.Request)
if err != nil { if err != nil {
parseErr(err, resp) parseErr(err, resp)
return return
} }
}
resp.Write(res) resp.Write(response)
} }
func (h *ProjectPipelineHandler) GetBranchNodesDetail(req *restful.Request, resp *restful.Response) { func (h *ProjectPipelineHandler) GetBranchNodesDetail(req *restful.Request, resp *restful.Response) {

View File

@@ -29,18 +29,18 @@ import (
type ProjectPipelineHandler struct { type ProjectPipelineHandler struct {
devopsOperator devops.DevopsOperator devopsOperator devops.DevopsOperator
projectCredentialGetter devops.ProjectCredentialGetter projectCredentialGetter devops.ProjectCredentialGetter
abc am.AccessManagementInterface amInterface am.AccessManagementInterface
} }
type PipelineSonarHandler struct { type PipelineSonarHandler struct {
pipelineSonarGetter devops.PipelineSonarGetter pipelineSonarGetter devops.PipelineSonarGetter
} }
func NewProjectPipelineHandler(devopsClient devopsClient.Interface, abc am.AccessManagementInterface) ProjectPipelineHandler { func NewProjectPipelineHandler(devopsClient devopsClient.Interface, amInterface am.AccessManagementInterface) ProjectPipelineHandler {
return ProjectPipelineHandler{ return ProjectPipelineHandler{
devopsOperator: devops.NewDevopsOperator(devopsClient, nil, nil, nil, nil), devopsOperator: devops.NewDevopsOperator(devopsClient, nil, nil, nil, nil),
projectCredentialGetter: devops.NewProjectCredentialOperator(devopsClient), projectCredentialGetter: devops.NewProjectCredentialOperator(devopsClient),
abc: abc, amInterface: amInterface,
} }
} }

View File

@@ -47,10 +47,10 @@ const (
var GroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1alpha2"} var GroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1alpha2"}
func AddToContainer(container *restful.Container, ksInformers externalversions.SharedInformerFactory, devopsClient devops.Interface, sonarqubeClient sonarqube.SonarInterface, ksClient versioned.Interface, s3Client s3.Interface, endpoint string, abc am.AccessManagementInterface) error { func AddToContainer(container *restful.Container, ksInformers externalversions.SharedInformerFactory, devopsClient devops.Interface, sonarqubeClient sonarqube.SonarInterface, ksClient versioned.Interface, s3Client s3.Interface, endpoint string, amInterface am.AccessManagementInterface) error {
ws := runtime.NewWebService(GroupVersion) ws := runtime.NewWebService(GroupVersion)
err := AddPipelineToWebService(ws, devopsClient, abc) err := AddPipelineToWebService(ws, devopsClient, amInterface)
if err != nil { if err != nil {
return err return err
} }
@@ -75,12 +75,12 @@ func AddToContainer(container *restful.Container, ksInformers externalversions.S
return nil return nil
} }
func AddPipelineToWebService(webservice *restful.WebService, devopsClient devops.Interface, abc am.AccessManagementInterface) error { func AddPipelineToWebService(webservice *restful.WebService, devopsClient devops.Interface, amInterface am.AccessManagementInterface) error {
projectPipelineEnable := devopsClient != nil projectPipelineEnable := devopsClient != nil
if projectPipelineEnable { if projectPipelineEnable {
projectPipelineHandler := NewProjectPipelineHandler(devopsClient, abc) projectPipelineHandler := NewProjectPipelineHandler(devopsClient, amInterface)
webservice.Route(webservice.GET("/devops/{devops}/credentials/{credential}/usage"). webservice.Route(webservice.GET("/devops/{devops}/credentials/{credential}/usage").
To(projectPipelineHandler.GetProjectCredentialUsage). To(projectPipelineHandler.GetProjectCredentialUsage).

View File

@@ -0,0 +1,34 @@
package devops
import (
"gotest.tools/assert"
"testing"
)
func TestGetSubmitters(t *testing.T) {
input := &Input{}
assert.Equal(t, len(input.GetSubmitters()), 0,
"errors happen when try to get submitters without any submitters")
input.Submitter = "a , b, c,d"
submitters := input.GetSubmitters()
assert.Equal(t, len(submitters), 4, "get incorrect number of submitters")
assert.DeepEqual(t, submitters, []string{"a", "b", "c", "d"})
}
func TestApprovable(t *testing.T) {
input := &Input{}
assert.Equal(t, input.Approvable(""), true, "should allow anyone to approve it if there's no submitter given")
assert.Equal(t, input.Approvable("fake"), true, "should allow anyone to approve it if there's no submitter given")
input.Submitter = "fake"
assert.Equal(t, input.Approvable(""), false, "should not approve by nobody if there's a particular submitter")
assert.Equal(t, input.Approvable("rick"), false, "should not approve by who is not the specific one")
assert.Equal(t, input.Approvable("fake"), true, "should be approvable")
input.Submitter = "fake, good ,bad"
assert.Equal(t, input.Approvable("fake"), true, "should be approvable")
assert.Equal(t, input.Approvable("good"), true, "should be approvable")
assert.Equal(t, input.Approvable("bad"), true, "should be approvable")
}