Add unit tests for pipeline approve functions
Signed-off-by: rick <rick@jenkins-zh.cn>
This commit is contained in:
@@ -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) {
|
||||||
|
|||||||
@@ -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,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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).
|
||||||
|
|||||||
34
pkg/simple/client/devops/pipeline_test.go
Normal file
34
pkg/simple/client/devops/pipeline_test.go
Normal 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")
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user