mirror of
https://github.com/goharbor/harbor.git
synced 2025-02-02 13:01:23 +01:00
Merge remote-tracking branch 'upstream/dev' into dev-originary-user-show
This commit is contained in:
commit
2fcd649e01
20
Makefile
20
Makefile
@ -104,8 +104,8 @@ GOIMAGEBUILD=$(GOIMAGEBUILDCMD) build
|
|||||||
GOBUILDPATH_UI=$(GOBUILDPATH)/src/ui
|
GOBUILDPATH_UI=$(GOBUILDPATH)/src/ui
|
||||||
GOBUILDPATH_JOBSERVICE=$(GOBUILDPATH)/src/jobservice
|
GOBUILDPATH_JOBSERVICE=$(GOBUILDPATH)/src/jobservice
|
||||||
GOBUILDMAKEPATH=$(GOBUILDPATH)/make
|
GOBUILDMAKEPATH=$(GOBUILDPATH)/make
|
||||||
GOBUILDMAKEPATH_UI=$(GOBUILDMAKEPATH)/ui
|
GOBUILDMAKEPATH_UI=$(GOBUILDMAKEPATH)/dev/ui
|
||||||
GOBUILDMAKEPATH_JOBSERVICE=$(GOBUILDMAKEPATH)/jobservice
|
GOBUILDMAKEPATH_JOBSERVICE=$(GOBUILDMAKEPATH)/dev/jobservice
|
||||||
|
|
||||||
# binary
|
# binary
|
||||||
UISOURCECODE=$(SRCPATH)/ui
|
UISOURCECODE=$(SRCPATH)/ui
|
||||||
@ -270,7 +270,7 @@ package_offline: compile build modify_composefile
|
|||||||
$(DOCKERIMAGENAME_LOG):$(VERSIONTAG) \
|
$(DOCKERIMAGENAME_LOG):$(VERSIONTAG) \
|
||||||
$(DOCKERIMAGENAME_DB):$(VERSIONTAG) \
|
$(DOCKERIMAGENAME_DB):$(VERSIONTAG) \
|
||||||
$(DOCKERIMAGENAME_JOBSERVICE):$(VERSIONTAG) \
|
$(DOCKERIMAGENAME_JOBSERVICE):$(VERSIONTAG) \
|
||||||
nginx:1.9.0 registry:2.5.0
|
nginx:1.9 registry:2.5.0
|
||||||
|
|
||||||
@$(TARCMD) -zcvf harbor-offline-installer-$(VERSIONTAG).tgz \
|
@$(TARCMD) -zcvf harbor-offline-installer-$(VERSIONTAG).tgz \
|
||||||
--exclude=$(HARBORPKG)/common/db --exclude=$(HARBORPKG)/ubuntu \
|
--exclude=$(HARBORPKG)/common/db --exclude=$(HARBORPKG)/ubuntu \
|
||||||
@ -346,8 +346,16 @@ cleanpackage:
|
|||||||
@if [ -f $(BUILDPATH)/harbor-offline-installer-$(VERSIONTAG).tgz ] ; \
|
@if [ -f $(BUILDPATH)/harbor-offline-installer-$(VERSIONTAG).tgz ] ; \
|
||||||
then rm $(BUILDPATH)/harbor-offline-installer-$(VERSIONTAG).tgz ; fi
|
then rm $(BUILDPATH)/harbor-offline-installer-$(VERSIONTAG).tgz ; fi
|
||||||
|
|
||||||
.PHONY: clean
|
.PHONY: cleanall
|
||||||
clean: cleanbinary cleanimage cleandockercomposefile cleanversiontag cleanpackage
|
cleanall: cleanbinary cleanimage cleandockercomposefile cleanversiontag cleanpackage
|
||||||
|
|
||||||
|
clean:
|
||||||
|
@echo " make cleanall: remove binary, Harbor images, specific version docker-compose"
|
||||||
|
@echo " file, specific version tag, online and offline install package"
|
||||||
|
@echo " make cleanbinary: remove ui and jobservice binary"
|
||||||
|
@echo " make cleanimage: remove Harbor images"
|
||||||
|
@echo " make cleandockercomposefile: remove specific version docker-compose"
|
||||||
|
@echo " make cleanversiontag: cleanpackageremove specific version tag"
|
||||||
|
@echo " make cleanpackage: remove online and offline install package"
|
||||||
|
|
||||||
all: install
|
all: install
|
||||||
|
|
||||||
|
@ -428,7 +428,13 @@ func TestResetUserPassword(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestChangeUserPassword(t *testing.T) {
|
func TestChangeUserPassword(t *testing.T) {
|
||||||
err := ChangeUserPassword(models.User{UserID: currentUser.UserID, Password: "NewHarborTester12345", Salt: currentUser.Salt})
|
user := models.User{UserID: currentUser.UserID}
|
||||||
|
query, err := GetUser(user)
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("Error occurred when get user salt")
|
||||||
|
}
|
||||||
|
currentUser.Salt = query.Salt
|
||||||
|
err = ChangeUserPassword(models.User{UserID: currentUser.UserID, Password: "NewHarborTester12345", Salt: currentUser.Salt})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("Error occurred in ChangeUserPassword: %v", err)
|
t.Errorf("Error occurred in ChangeUserPassword: %v", err)
|
||||||
}
|
}
|
||||||
@ -444,7 +450,14 @@ func TestChangeUserPassword(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestChangeUserPasswordWithOldPassword(t *testing.T) {
|
func TestChangeUserPasswordWithOldPassword(t *testing.T) {
|
||||||
err := ChangeUserPassword(models.User{UserID: currentUser.UserID, Password: "NewerHarborTester12345", Salt: currentUser.Salt}, "NewHarborTester12345")
|
user := models.User{UserID: currentUser.UserID}
|
||||||
|
query, err := GetUser(user)
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("Error occurred when get user salt")
|
||||||
|
}
|
||||||
|
currentUser.Salt = query.Salt
|
||||||
|
|
||||||
|
err = ChangeUserPassword(models.User{UserID: currentUser.UserID, Password: "NewerHarborTester12345", Salt: currentUser.Salt}, "NewHarborTester12345")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("Error occurred in ChangeUserPassword: %v", err)
|
t.Errorf("Error occurred in ChangeUserPassword: %v", err)
|
||||||
}
|
}
|
||||||
|
@ -34,8 +34,8 @@ func CommonAddUser() {
|
|||||||
|
|
||||||
commonUser := models.User{
|
commonUser := models.User{
|
||||||
Username: TestUserName,
|
Username: TestUserName,
|
||||||
Email: TestUserPwd,
|
Password: TestUserPwd,
|
||||||
Password: TestUserEmail,
|
Email: TestUserEmail,
|
||||||
}
|
}
|
||||||
|
|
||||||
_, _ = dao.Register(commonUser)
|
_, _ = dao.Register(commonUser)
|
||||||
|
@ -12,8 +12,8 @@ import (
|
|||||||
|
|
||||||
"github.com/vmware/harbor/src/common/dao"
|
"github.com/vmware/harbor/src/common/dao"
|
||||||
"github.com/vmware/harbor/src/common/models"
|
"github.com/vmware/harbor/src/common/models"
|
||||||
"github.com/vmware/harbor/tests/apitests/apilib"
|
|
||||||
"github.com/vmware/harbor/src/common/utils"
|
"github.com/vmware/harbor/src/common/utils"
|
||||||
|
"github.com/vmware/harbor/tests/apitests/apilib"
|
||||||
// "strconv"
|
// "strconv"
|
||||||
// "strings"
|
// "strings"
|
||||||
|
|
||||||
@ -285,7 +285,7 @@ func (a testapi) ProjectsGetByPID(projectID string) (int, apilib.Project, error)
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Search projects by projectName and isPublic
|
//Search projects by projectName and isPublic
|
||||||
func (a testapi) ProjectsGet(projectName string, isPublic int32) (int, []apilib.Project, error) {
|
func (a testapi) ProjectsGet(projectName string, isPublic int32, authInfo ...usrInfo) (int, []apilib.Project, error) {
|
||||||
_sling := sling.New().Get(a.basePath)
|
_sling := sling.New().Get(a.basePath)
|
||||||
|
|
||||||
//create api path
|
//create api path
|
||||||
@ -299,7 +299,15 @@ func (a testapi) ProjectsGet(projectName string, isPublic int32) (int, []apilib.
|
|||||||
|
|
||||||
var successPayload []apilib.Project
|
var successPayload []apilib.Project
|
||||||
|
|
||||||
httpStatusCode, body, err := request(_sling, jsonAcceptHeader)
|
var httpStatusCode int
|
||||||
|
var err error
|
||||||
|
var body []byte
|
||||||
|
if len(authInfo) > 0 {
|
||||||
|
httpStatusCode, body, err = request(_sling, jsonAcceptHeader, authInfo[0])
|
||||||
|
} else {
|
||||||
|
httpStatusCode, body, err = request(_sling, jsonAcceptHeader)
|
||||||
|
}
|
||||||
|
|
||||||
if err == nil && httpStatusCode == 200 {
|
if err == nil && httpStatusCode == 200 {
|
||||||
err = json.Unmarshal(body, &successPayload)
|
err = json.Unmarshal(body, &successPayload)
|
||||||
}
|
}
|
||||||
|
@ -30,8 +30,7 @@ func TestLogGet(t *testing.T) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
logNum := len(result)
|
logNum := len(result)
|
||||||
logID := result[0].LogId
|
fmt.Println("result", result)
|
||||||
fmt.Println(result)
|
|
||||||
//add the project first.
|
//add the project first.
|
||||||
fmt.Println("add the project first.")
|
fmt.Println("add the project first.")
|
||||||
reply, err := apiTest.ProjectsPost(*admin, project)
|
reply, err := apiTest.ProjectsPost(*admin, project)
|
||||||
@ -48,12 +47,16 @@ func TestLogGet(t *testing.T) {
|
|||||||
t.Log(err)
|
t.Log(err)
|
||||||
} else {
|
} else {
|
||||||
assert.Equal(logNum+1, len(result), "lines of logs should be equal")
|
assert.Equal(logNum+1, len(result), "lines of logs should be equal")
|
||||||
assert.Equal(int32(logID+1), result[0].LogId, "LogId should be equal")
|
num, index := getLog(result)
|
||||||
assert.Equal("my_project/", result[0].RepoName, "RepoName should be equal")
|
if num != 1 {
|
||||||
assert.Equal("N/A", result[0].RepoTag, "RepoTag should be equal")
|
assert.Equal(1, num, "add my_project log number should be 1")
|
||||||
assert.Equal("create", result[0].Operation, "Operation should be equal")
|
} else {
|
||||||
|
assert.Equal("my_project/", result[index].RepoName, "RepoName should be equal")
|
||||||
|
assert.Equal("N/A", result[index].RepoTag, "RepoTag should be equal")
|
||||||
|
assert.Equal("create", result[index].Operation, "Operation should be equal")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
fmt.Println("log ", result)
|
||||||
//case 2: wrong format of start_time parameter, expect the wrong output
|
//case 2: wrong format of start_time parameter, expect the wrong output
|
||||||
now = fmt.Sprintf("%v", time.Now().Unix())
|
now = fmt.Sprintf("%v", time.Now().Unix())
|
||||||
statusCode, result, err = apiTest.LogGet(*admin, "ss", now, "3")
|
statusCode, result, err = apiTest.LogGet(*admin, "ss", now, "3")
|
||||||
@ -103,13 +106,17 @@ func TestLogGet(t *testing.T) {
|
|||||||
if logNum+1 >= 10 {
|
if logNum+1 >= 10 {
|
||||||
logNum = 10
|
logNum = 10
|
||||||
} else {
|
} else {
|
||||||
logNum += 1
|
logNum++
|
||||||
}
|
}
|
||||||
assert.Equal(logNum, len(result), "lines of logs should be equal")
|
assert.Equal(logNum, len(result), "lines of logs should be equal")
|
||||||
assert.Equal(int32(logID+1), result[0].LogId, "LogId should be equal")
|
num, index := getLog(result)
|
||||||
assert.Equal("my_project/", result[0].RepoName, "RepoName should be equal")
|
if num != 1 {
|
||||||
assert.Equal("N/A", result[0].RepoTag, "RepoTag should be equal")
|
assert.Equal(1, num, "add my_project log number should be 1")
|
||||||
assert.Equal("create", result[0].Operation, "Operation should be equal")
|
} else {
|
||||||
|
assert.Equal("my_project/", result[index].RepoName, "RepoName should be equal")
|
||||||
|
assert.Equal("N/A", result[index].RepoTag, "RepoTag should be equal")
|
||||||
|
assert.Equal("create", result[index].Operation, "Operation should be equal")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//get the project
|
//get the project
|
||||||
@ -138,3 +145,14 @@ func TestLogGet(t *testing.T) {
|
|||||||
fmt.Printf("\n")
|
fmt.Printf("\n")
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func getLog(result []apilib.AccessLog) (int, int) {
|
||||||
|
var num, index int
|
||||||
|
for i := 0; i < len(result); i++ {
|
||||||
|
if result[i].RepoName == "my_project/" {
|
||||||
|
num++
|
||||||
|
index = i
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return num, index
|
||||||
|
}
|
||||||
|
@ -286,6 +286,13 @@ func (p *ProjectAPI) List() {
|
|||||||
if public != 1 {
|
if public != 1 {
|
||||||
if isAdmin {
|
if isAdmin {
|
||||||
projectList[i].Role = models.PROJECTADMIN
|
projectList[i].Role = models.PROJECTADMIN
|
||||||
|
} else {
|
||||||
|
roles, err := dao.GetUserProjectRoles(p.userID, projectList[i].ProjectID)
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("failed to get user's project role: %v", err)
|
||||||
|
p.CustomAbort(http.StatusInternalServerError, "")
|
||||||
|
}
|
||||||
|
projectList[i].Role = roles[0].RoleID
|
||||||
}
|
}
|
||||||
if projectList[i].Role == models.PROJECTADMIN {
|
if projectList[i].Role == models.PROJECTADMIN {
|
||||||
projectList[i].Togglable = true
|
projectList[i].Togglable = true
|
||||||
|
@ -13,7 +13,7 @@ var addProject *apilib.ProjectReq
|
|||||||
var addPID int
|
var addPID int
|
||||||
|
|
||||||
func InitAddPro() {
|
func InitAddPro() {
|
||||||
addProject = &apilib.ProjectReq{"test_project", 1}
|
addProject = &apilib.ProjectReq{"add_project", 1}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestAddProject(t *testing.T) {
|
func TestAddProject(t *testing.T) {
|
||||||
@ -106,7 +106,49 @@ func TestProGetByName(t *testing.T) {
|
|||||||
} else {
|
} else {
|
||||||
assert.Equal(int(401), httpStatusCode, "httpStatusCode should be 200")
|
assert.Equal(int(401), httpStatusCode, "httpStatusCode should be 200")
|
||||||
}
|
}
|
||||||
fmt.Printf("\n")
|
|
||||||
|
//-------------------case 3 : check admin project role------------------------//
|
||||||
|
httpStatusCode, result, err = apiTest.ProjectsGet(addProject.ProjectName, 0, *admin)
|
||||||
|
if err != nil {
|
||||||
|
t.Error("Error while search project by proName and isPublic", err.Error())
|
||||||
|
t.Log(err)
|
||||||
|
} else {
|
||||||
|
assert.Equal(int(200), httpStatusCode, "httpStatusCode should be 200")
|
||||||
|
assert.Equal(addProject.ProjectName, result[0].ProjectName, "Project name is wrong")
|
||||||
|
assert.Equal(int32(1), result[0].Public, "Public is wrong")
|
||||||
|
assert.Equal(int32(1), result[0].CurrentUserRoleId, "User project role is wrong")
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------case 4 : add project member and check his role ------------------------//
|
||||||
|
CommonAddUser()
|
||||||
|
roles := &apilib.RoleParam{[]int32{2}, TestUserName}
|
||||||
|
projectID := strconv.Itoa(addPID)
|
||||||
|
httpStatusCode, err = apiTest.AddProjectMember(*admin, projectID, *roles)
|
||||||
|
if err != nil {
|
||||||
|
t.Error("Error whihle add project role member", err.Error())
|
||||||
|
t.Log(err)
|
||||||
|
} else {
|
||||||
|
assert.Equal(int(200), httpStatusCode, "httpStatusCode should be 200")
|
||||||
|
}
|
||||||
|
httpStatusCode, result, err = apiTest.ProjectsGet(addProject.ProjectName, 0, *testUser)
|
||||||
|
if err != nil {
|
||||||
|
t.Error("Error while search project by proName and isPublic", err.Error())
|
||||||
|
t.Log(err)
|
||||||
|
} else {
|
||||||
|
assert.Equal(int(200), httpStatusCode, "httpStatusCode should be 200")
|
||||||
|
assert.Equal(addProject.ProjectName, result[0].ProjectName, "Project name is wrong")
|
||||||
|
assert.Equal(int32(1), result[0].Public, "Public is wrong")
|
||||||
|
assert.Equal(int32(2), result[0].CurrentUserRoleId, "User project role is wrong")
|
||||||
|
}
|
||||||
|
id := strconv.Itoa(CommonGetUserID())
|
||||||
|
httpStatusCode, err = apiTest.DeleteProjectMember(*admin, projectID, id)
|
||||||
|
if err != nil {
|
||||||
|
t.Error("Error whihle add project role member", err.Error())
|
||||||
|
t.Log(err)
|
||||||
|
} else {
|
||||||
|
assert.Equal(int(200), httpStatusCode, "httpStatusCode should be 200")
|
||||||
|
}
|
||||||
|
CommonDelUser()
|
||||||
}
|
}
|
||||||
|
|
||||||
//Get project by proID
|
//Get project by proID
|
||||||
|
@ -357,7 +357,7 @@ func TestUsersUpdatePassword(t *testing.T) {
|
|||||||
//TODO: verify the new password takes effect
|
//TODO: verify the new password takes effect
|
||||||
}
|
}
|
||||||
//case 6: update user2 password setting the new password same as the old
|
//case 6: update user2 password setting the new password same as the old
|
||||||
password.NewPassword = password.OldPassword
|
password.OldPassword = password.NewPassword
|
||||||
code, err = apiTest.UsersUpdatePassword(testUser0002ID, password, *admin)
|
code, err = apiTest.UsersUpdatePassword(testUser0002ID, password, *admin)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Error("Error occured while change user profile", err.Error())
|
t.Error("Error occured while change user profile", err.Error())
|
||||||
|
Loading…
Reference in New Issue
Block a user