mirror of
https://github.com/goharbor/harbor.git
synced 2024-12-02 15:14:09 +01:00
Merge pull request #2656 from ywk253100/170628_pms
Update test cases of PMS project manager
This commit is contained in:
commit
e5e5e75768
@ -92,14 +92,14 @@ func (a *AuthContext) HasAllPerm(project string) bool {
|
|||||||
|
|
||||||
// GetMyProjects returns all projects which the user is a member of
|
// GetMyProjects returns all projects which the user is a member of
|
||||||
func (a *AuthContext) GetMyProjects() ([]string, error) {
|
func (a *AuthContext) GetMyProjects() ([]string, error) {
|
||||||
existence := map[string]string{}
|
existence := map[string]bool{}
|
||||||
projects := []string{}
|
projects := []string{}
|
||||||
for _, list := range a.Projects {
|
for _, list := range a.Projects {
|
||||||
for _, p := range list {
|
for _, p := range list {
|
||||||
if len(existence[p]) > 0 {
|
if existence[p] {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
existence[p] = p
|
existence[p] = true
|
||||||
projects = append(projects, p)
|
projects = append(projects, p)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -107,9 +107,19 @@ func (a *AuthContext) GetMyProjects() ([]string, error) {
|
|||||||
return projects, nil
|
return projects, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetByToken gets the user's auth context, if the username is not provided
|
// GetByToken ...
|
||||||
|
func GetByToken(url, token string) (*AuthContext, error) {
|
||||||
|
return get(url, token)
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetAuthCtxOfUser gets the user's auth context
|
||||||
|
func GetAuthCtxOfUser(url, token string, username string) (*AuthContext, error) {
|
||||||
|
return get(url, token, username)
|
||||||
|
}
|
||||||
|
|
||||||
|
// get the user's auth context, if the username is not provided
|
||||||
// get the default auth context of the token
|
// get the default auth context of the token
|
||||||
func GetByToken(url, token string, username ...string) (*AuthContext, error) {
|
func get(url, token string, username ...string) (*AuthContext, error) {
|
||||||
principalID := ""
|
principalID := ""
|
||||||
if len(username) > 0 {
|
if len(username) > 0 {
|
||||||
principalID = username[0]
|
principalID = username[0]
|
||||||
@ -138,7 +148,7 @@ func GetByToken(url, token string, username ...string) (*AuthContext, error) {
|
|||||||
return ctx, nil
|
return ctx, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Login ...
|
// Login with credential and returns token, auth context and error
|
||||||
func Login(url, username, password string) (string, *AuthContext, error) {
|
func Login(url, username, password string) (string, *AuthContext, error) {
|
||||||
data, err := json.Marshal(&struct {
|
data, err := json.Marshal(&struct {
|
||||||
Username string `json:"username"`
|
Username string `json:"username"`
|
||||||
|
@ -24,7 +24,6 @@ import (
|
|||||||
"net/http"
|
"net/http"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/vmware/harbor/src/common"
|
"github.com/vmware/harbor/src/common"
|
||||||
"github.com/vmware/harbor/src/common/models"
|
"github.com/vmware/harbor/src/common/models"
|
||||||
@ -55,7 +54,7 @@ type project struct {
|
|||||||
CustomProperties map[string]string `json:"customProperties"`
|
CustomProperties map[string]string `json:"customProperties"`
|
||||||
Administrators []*user `json:"administrators"`
|
Administrators []*user `json:"administrators"`
|
||||||
Developers []*user `json:"members"`
|
Developers []*user `json:"members"`
|
||||||
Guests []*user `json:"guests"` // TODO the json name needs to be modified according to the API
|
Guests []*user `json:"viewers"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewProjectManager returns an instance of ProjectManager
|
// NewProjectManager returns an instance of ProjectManager
|
||||||
@ -81,7 +80,7 @@ func (p *ProjectManager) Get(projectIDOrName interface{}) (*models.Project, erro
|
|||||||
func (p *ProjectManager) get(projectIDOrName interface{}) (*project, error) {
|
func (p *ProjectManager) get(projectIDOrName interface{}) (*project, error) {
|
||||||
m := map[string]string{}
|
m := map[string]string{}
|
||||||
if id, ok := projectIDOrName.(int64); ok {
|
if id, ok := projectIDOrName.(int64); ok {
|
||||||
m["customProperties.__harborId"] = strconv.FormatInt(id, 10)
|
m["customProperties.__projectIndex"] = strconv.FormatInt(id, 10)
|
||||||
} else if name, ok := projectIDOrName.(string); ok {
|
} else if name, ok := projectIDOrName.(string); ok {
|
||||||
m["name"] = name
|
m["name"] = name
|
||||||
} else {
|
} else {
|
||||||
@ -162,14 +161,14 @@ func convert(p *project) (*models.Project, error) {
|
|||||||
project.Public = 1
|
project.Public = 1
|
||||||
}
|
}
|
||||||
|
|
||||||
value := p.CustomProperties["__harborId"]
|
value := p.CustomProperties["__projectIndex"]
|
||||||
if len(value) == 0 {
|
if len(value) == 0 {
|
||||||
return nil, fmt.Errorf("property __harborId is null")
|
return nil, fmt.Errorf("property __projectIndex is null")
|
||||||
}
|
}
|
||||||
|
|
||||||
id, err := strconv.ParseInt(value, 10, 64)
|
id, err := strconv.ParseInt(value, 10, 64)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("failed to parse __harborId %s to int64: %v", value, err)
|
return nil, fmt.Errorf("failed to parse __projectIndex %s to int64: %v", value, err)
|
||||||
}
|
}
|
||||||
project.ProjectID = id
|
project.ProjectID = id
|
||||||
|
|
||||||
@ -308,7 +307,7 @@ func (p *ProjectManager) GetPublic() ([]*models.Project, error) {
|
|||||||
// GetByMember ...
|
// GetByMember ...
|
||||||
func (p *ProjectManager) GetByMember(username string) ([]*models.Project, error) {
|
func (p *ProjectManager) GetByMember(username string) ([]*models.Project, error) {
|
||||||
projects := []*models.Project{}
|
projects := []*models.Project{}
|
||||||
ctx, err := authcontext.GetByToken(p.endpoint, p.token, username)
|
ctx, err := authcontext.GetAuthCtxOfUser(p.endpoint, p.token, username)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return projects, err
|
return projects, err
|
||||||
}
|
}
|
||||||
@ -341,9 +340,6 @@ func (p *ProjectManager) Create(pro *models.Project) (int64, error) {
|
|||||||
proj.CustomProperties["__preventVulnerableImagesFromRunningSeverity"] = pro.PreventVulnerableImagesFromRunningSeverity
|
proj.CustomProperties["__preventVulnerableImagesFromRunningSeverity"] = pro.PreventVulnerableImagesFromRunningSeverity
|
||||||
proj.CustomProperties["__automaticallyScanImagesOnPush"] = strconv.FormatBool(pro.AutomaticallyScanImagesOnPush)
|
proj.CustomProperties["__automaticallyScanImagesOnPush"] = strconv.FormatBool(pro.AutomaticallyScanImagesOnPush)
|
||||||
|
|
||||||
// TODO remove the logic if Admiral generates the harborId
|
|
||||||
proj.CustomProperties["__harborId"] = strconv.FormatInt(time.Now().UnixNano(), 10)
|
|
||||||
|
|
||||||
data, err := json.Marshal(proj)
|
data, err := json.Marshal(proj)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 0, err
|
return 0, err
|
||||||
|
@ -34,16 +34,16 @@ func TestConvert(t *testing.T) {
|
|||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
assert.Nil(t, pro)
|
assert.Nil(t, pro)
|
||||||
|
|
||||||
//project without property __harborId
|
//project without property __projectIndex
|
||||||
p := &project{}
|
p := &project{}
|
||||||
pro, err = convert(p)
|
pro, err = convert(p)
|
||||||
assert.NotNil(t, err)
|
assert.NotNil(t, err)
|
||||||
assert.Nil(t, pro)
|
assert.Nil(t, pro)
|
||||||
|
|
||||||
//project with invalid __harborId
|
//project with invalid __projectIndex
|
||||||
p = &project{
|
p = &project{
|
||||||
CustomProperties: map[string]string{
|
CustomProperties: map[string]string{
|
||||||
"__harborId": "invalid_value",
|
"__projectIndex": "invalid_value",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
pro, err = convert(p)
|
pro, err = convert(p)
|
||||||
@ -85,7 +85,7 @@ func TestConvert(t *testing.T) {
|
|||||||
Name: "test",
|
Name: "test",
|
||||||
Public: true,
|
Public: true,
|
||||||
CustomProperties: map[string]string{
|
CustomProperties: map[string]string{
|
||||||
"__harborId": "1",
|
"__projectIndex": "1",
|
||||||
"__enableContentTrust": "true",
|
"__enableContentTrust": "true",
|
||||||
"__preventVulnerableImagesFromRunning": "true",
|
"__preventVulnerableImagesFromRunning": "true",
|
||||||
"__preventVulnerableImagesFromRunningSeverity": "medium",
|
"__preventVulnerableImagesFromRunningSeverity": "medium",
|
||||||
@ -118,7 +118,7 @@ func TestParse(t *testing.T) {
|
|||||||
"id": "41427587-70e9-4671-9a9e-b9def0a07bb7",
|
"id": "41427587-70e9-4671-9a9e-b9def0a07bb7",
|
||||||
"name": "project02",
|
"name": "project02",
|
||||||
"customProperties": {
|
"customProperties": {
|
||||||
"__harborId": "2",
|
"__projectIndex": "2",
|
||||||
"__enableContentTrust": "true",
|
"__enableContentTrust": "true",
|
||||||
"__preventVulnerableImagesFromRunning": "true",
|
"__preventVulnerableImagesFromRunning": "true",
|
||||||
"__preventVulnerableImagesFromRunningSeverity": "medium",
|
"__preventVulnerableImagesFromRunningSeverity": "medium",
|
||||||
@ -140,7 +140,7 @@ func TestParse(t *testing.T) {
|
|||||||
"id": "default-project",
|
"id": "default-project",
|
||||||
"name": "default-project",
|
"name": "default-project",
|
||||||
"customProperties": {
|
"customProperties": {
|
||||||
"__harborId": "2",
|
"__projectIndex": "2",
|
||||||
"__enableContentTrust": "true",
|
"__enableContentTrust": "true",
|
||||||
"__preventVulnerableImagesFromRunning": "true",
|
"__preventVulnerableImagesFromRunning": "true",
|
||||||
"__preventVulnerableImagesFromRunningSeverity": "medium",
|
"__preventVulnerableImagesFromRunningSeverity": "medium",
|
||||||
@ -374,8 +374,6 @@ func TestCreate(t *testing.T) {
|
|||||||
assert.True(t, project.AutomaticallyScanImagesOnPush)
|
assert.True(t, project.AutomaticallyScanImagesOnPush)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO get the case back after Admiral'API is fixed
|
|
||||||
/*
|
|
||||||
func TestDelete(t *testing.T) {
|
func TestDelete(t *testing.T) {
|
||||||
pm := NewProjectManager(endpoint, token)
|
pm := NewProjectManager(endpoint, token)
|
||||||
|
|
||||||
@ -401,7 +399,7 @@ func TestDelete(t *testing.T) {
|
|||||||
err = pm.Delete(name)
|
err = pm.Delete(name)
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
func TestUpdate(t *testing.T) {
|
func TestUpdate(t *testing.T) {
|
||||||
pm := NewProjectManager(endpoint, token)
|
pm := NewProjectManager(endpoint, token)
|
||||||
err := pm.Update(nil, nil)
|
err := pm.Update(nil, nil)
|
||||||
@ -490,9 +488,10 @@ func TestGetTotal(t *testing.T) {
|
|||||||
assert.Equal(t, total1+1, total2)
|
assert.Equal(t, total1+1, total2)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO add test case
|
|
||||||
func TestGetHasReadPerm(t *testing.T) {
|
func TestGetHasReadPerm(t *testing.T) {
|
||||||
|
pm := NewProjectManager(endpoint, token)
|
||||||
|
_, err := pm.GetHasReadPerm()
|
||||||
|
assert.NotNil(t, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
func delete(t *testing.T, id int64) {
|
func delete(t *testing.T, id int64) {
|
||||||
|
Loading…
Reference in New Issue
Block a user