diff --git a/Deploy/templates/ui/env b/Deploy/templates/ui/env index c4afba44bf..6fd484d4bd 100644 --- a/Deploy/templates/ui/env +++ b/Deploy/templates/ui/env @@ -12,6 +12,7 @@ AUTH_MODE=$auth_mode LDAP_URL=$ldap_url LDAP_BASE_DN=$ldap_basedn UI_SECRET=$ui_secret +SECRET_KEY=$secret_key SELF_REGISTRATION=$self_registration USE_COMPRESSED_JS=$use_compressed_js LOG_LEVEL=debug diff --git a/api/harborapi_test.go b/api/harborapi_test.go index 232747b8da..4a964a5eb3 100644 --- a/api/harborapi_test.go +++ b/api/harborapi_test.go @@ -79,6 +79,11 @@ func init() { beego.Router("/api/repositories/tags", &RepositoryAPI{}, "get:GetTags") beego.Router("/api/repositories/manifests", &RepositoryAPI{}, "get:GetManifests") beego.Router("/api/repositories/top", &RepositoryAPI{}, "get:GetTopRepos") + beego.Router("/api/targets/", &TargetAPI{}, "get:List") + beego.Router("/api/targets/", &TargetAPI{}, "post:Post") + beego.Router("/api/targets/:id([0-9]+)", &TargetAPI{}) + beego.Router("/api/targets/:id([0-9]+)/policies/", &TargetAPI{}, "get:ListPolicies") + beego.Router("/api/targets/ping", &TargetAPI{}, "post:Ping") _ = updateInitPassword(1, "Harbor12345") @@ -502,6 +507,102 @@ func (a api) GetReposTop(authInfo usrInfo, count string) (int, error) { return httpStatusCode, err } +//-------------------------Targets Test---------------------------------------// +//Create a new replication target +func (a api) AddTargets(authInfo usrInfo, repTarget apilib.RepTargetPost) (int, error) { + _sling := sling.New().Post(a.basePath) + + path := "/api/targets" + + _sling = _sling.Path(path) + _sling = _sling.BodyJSON(repTarget) + + httpStatusCode, _, err := request(_sling, jsonAcceptHeader, authInfo) + return httpStatusCode, err +} + +//List filters targets by name +func (a api) ListTargets(authInfo usrInfo, targetName string) (int, []apilib.RepTarget, error) { + _sling := sling.New().Get(a.basePath) + + path := "/api/targets?name=" + targetName + + _sling = _sling.Path(path) + + var successPayload []apilib.RepTarget + + httpStatusCode, body, err := request(_sling, jsonAcceptHeader, authInfo) + if err == nil && httpStatusCode == 200 { + err = json.Unmarshal(body, &successPayload) + } + + return httpStatusCode, successPayload, err +} + +//Ping target by targetID +func (a api) PingTargetsByID(authInfo usrInfo, targetID string) (int, error) { + _sling := sling.New().Post(a.basePath) + + path := "/api/targets/ping?id=" + targetID + + _sling = _sling.Path(path) + + httpStatusCode, _, err := request(_sling, jsonAcceptHeader, authInfo) + return httpStatusCode, err +} + +//Get target by targetID +func (a api) GetTargetByID(authInfo usrInfo, targetID string) (int, error) { + _sling := sling.New().Get(a.basePath) + + path := "/api/targets/" + targetID + + _sling = _sling.Path(path) + + httpStatusCode, _, err := request(_sling, jsonAcceptHeader, authInfo) + + return httpStatusCode, err +} + +//Update target by targetID +func (a api) PutTargetByID(authInfo usrInfo, targetID string, repTarget apilib.RepTargetPost) (int, error) { + _sling := sling.New().Put(a.basePath) + + path := "/api/targets/" + targetID + + _sling = _sling.Path(path) + _sling = _sling.BodyJSON(repTarget) + + httpStatusCode, _, err := request(_sling, jsonAcceptHeader, authInfo) + + return httpStatusCode, err +} + +//List the target relevant policies by targetID +func (a api) GetTargetPoliciesByID(authInfo usrInfo, targetID string) (int, error) { + _sling := sling.New().Get(a.basePath) + + path := "/api/targets/" + targetID + "/policies/" + + _sling = _sling.Path(path) + + httpStatusCode, _, err := request(_sling, jsonAcceptHeader, authInfo) + + return httpStatusCode, err +} + +//Delete target by targetID +func (a api) DeleteTargetsByID(authInfo usrInfo, targetID string) (int, error) { + _sling := sling.New().Delete(a.basePath) + + path := "/api/targets/" + targetID + + _sling = _sling.Path(path) + + httpStatusCode, _, err := request(_sling, jsonAcceptHeader, authInfo) + return httpStatusCode, err +} + //Return projects created by Harbor //func (a HarborApi) ProjectsGet (projectName string, isPublic int32) ([]Project, error) { // } diff --git a/api/target_test.go b/api/target_test.go new file mode 100644 index 0000000000..94b6b25e0b --- /dev/null +++ b/api/target_test.go @@ -0,0 +1,274 @@ +package api + +import ( + "fmt" + "os" + "strconv" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/vmware/harbor/tests/apitests/apilib" +) + +const ( + addTargetName = "testTargets" +) + +var addTargetID int + +func TestTargetsPost(t *testing.T) { + var httpStatusCode int + var err error + + assert := assert.New(t) + apiTest := newHarborAPI() + + endPoint := os.Getenv("REGISTRY_URL") + repTargets := &apilib.RepTargetPost{endPoint, addTargetName, adminName, adminPwd} + + fmt.Println("Testing Targets Post API") + + //-------------------case 1 : response code = 201------------------------// + fmt.Println("case 1 : response code = 201") + httpStatusCode, err = apiTest.AddTargets(*admin, *repTargets) + if err != nil { + t.Error("Error whihle add targets", err.Error()) + t.Log(err) + } else { + assert.Equal(int(201), httpStatusCode, "httpStatusCode should be 201") + } + + //-----------case 2 : response code = 409,name is already used-----------// + fmt.Println("case 2 : response code = 409,name is already used") + httpStatusCode, err = apiTest.AddTargets(*admin, *repTargets) + if err != nil { + t.Error("Error whihle add targets", err.Error()) + t.Log(err) + } else { + assert.Equal(int(409), httpStatusCode, "httpStatusCode should be 409") + } + + //-----------case 3 : response code = 409,name is already used-----------// + fmt.Println("case 3 : response code = 409,endPoint is already used") + repTargets.Username = "errName" + httpStatusCode, err = apiTest.AddTargets(*admin, *repTargets) + if err != nil { + t.Error("Error whihle add targets", err.Error()) + t.Log(err) + } else { + assert.Equal(int(409), httpStatusCode, "httpStatusCode should be 409") + } + + //--------case 4 : response code = 401,User need to log in first.--------// + fmt.Println("case 4 : response code = 401,User need to log in first.") + httpStatusCode, err = apiTest.AddTargets(*unknownUsr, *repTargets) + if err != nil { + t.Error("Error whihle add targets", err.Error()) + t.Log(err) + } else { + assert.Equal(int(401), httpStatusCode, "httpStatusCode should be 401") + } + + fmt.Printf("\n") + +} + +func TestTargetsGet(t *testing.T) { + var httpStatusCode int + var err error + var reslut []apilib.RepTarget + + assert := assert.New(t) + apiTest := newHarborAPI() + + fmt.Println("Testing Targets Get API") + + //-------------------case 1 : response code = 200------------------------// + fmt.Println("case 1 : response code = 200") + httpStatusCode, reslut, err = apiTest.ListTargets(*admin, addTargetName) + if err != nil { + t.Error("Error whihle get targets", err.Error()) + t.Log(err) + } else { + assert.Equal(int(200), httpStatusCode, "httpStatusCode should be 200") + addTargetID = int(reslut[0].Id) + } +} + +func TestTargetPing(t *testing.T) { + var httpStatusCode int + var err error + + assert := assert.New(t) + apiTest := newHarborAPI() + + fmt.Println("Testing Targets Ping Post API") + + //-------------------case 1 : response code = 200------------------------// + fmt.Println("case 1 : response code = 200") + id := strconv.Itoa(addTargetID) + httpStatusCode, err = apiTest.PingTargetsByID(*admin, id) + if err != nil { + t.Error("Error whihle ping target", err.Error()) + t.Log(err) + } else { + assert.Equal(int(200), httpStatusCode, "httpStatusCode should be 200") + } + + //--------------case 2 : response code = 404,target not found------------// + fmt.Println("case 2 : response code = 404,target not found") + id = "1111" + httpStatusCode, err = apiTest.PingTargetsByID(*admin, id) + if err != nil { + t.Error("Error whihle ping target", err.Error()) + t.Log(err) + } else { + assert.Equal(int(404), httpStatusCode, "httpStatusCode should be 404") + } + + //------------case 3 : response code = 400,targetID is invalid-----------// + fmt.Println("case 2 : response code = 400,target not found") + id = "cc" + httpStatusCode, err = apiTest.PingTargetsByID(*admin, id) + if err != nil { + t.Error("Error whihle ping target", err.Error()) + t.Log(err) + } else { + assert.Equal(int(400), httpStatusCode, "httpStatusCode should be 400") + } + +} + +func TestTargetGetByID(t *testing.T) { + var httpStatusCode int + var err error + + assert := assert.New(t) + apiTest := newHarborAPI() + + fmt.Println("Testing Targets Get API by Id") + + //-------------------case 1 : response code = 200------------------------// + fmt.Println("case 1 : response code = 200") + id := strconv.Itoa(addTargetID) + httpStatusCode, err = apiTest.GetTargetByID(*admin, id) + if err != nil { + t.Error("Error whihle get target by id", err.Error()) + t.Log(err) + } else { + assert.Equal(int(200), httpStatusCode, "httpStatusCode should be 200") + } + + //--------------case 2 : response code = 404,target not found------------// + fmt.Println("case 2 : response code = 404,target not found") + id = "1111" + httpStatusCode, err = apiTest.GetTargetByID(*admin, id) + if err != nil { + t.Error("Error whihle get target by id", err.Error()) + t.Log(err) + } else { + assert.Equal(int(404), httpStatusCode, "httpStatusCode should be 404") + } + +} + +func TestTargetsPut(t *testing.T) { + var httpStatusCode int + var err error + + assert := assert.New(t) + apiTest := newHarborAPI() + + endPoint := "1.1.1.1" + updateRepTargets := &apilib.RepTargetPost{endPoint, addTargetName, adminName, adminPwd} + id := strconv.Itoa(addTargetID) + + fmt.Println("Testing Target Put API") + + //-------------------case 1 : response code = 200------------------------// + fmt.Println("case 1 : response code = 200") + httpStatusCode, err = apiTest.PutTargetByID(*admin, id, *updateRepTargets) + if err != nil { + t.Error("Error whihle update target", err.Error()) + t.Log(err) + } else { + assert.Equal(int(200), httpStatusCode, "httpStatusCode should be 200") + } + + //--------------case 2 : response code = 404,target not found------------// + id = "111" + fmt.Println("case 2 : response code = 404,target not found") + httpStatusCode, err = apiTest.PutTargetByID(*admin, id, *updateRepTargets) + if err != nil { + t.Error("Error whihle update target", err.Error()) + t.Log(err) + } else { + assert.Equal(int(404), httpStatusCode, "httpStatusCode should be 404") + } + +} +func TestTargetGetPolicies(t *testing.T) { + var httpStatusCode int + var err error + + assert := assert.New(t) + apiTest := newHarborAPI() + + fmt.Println("Testing Targets Get API to list policies") + + //-------------------case 1 : response code = 200------------------------// + fmt.Println("case 1 : response code = 200") + id := strconv.Itoa(addTargetID) + httpStatusCode, err = apiTest.GetTargetPoliciesByID(*admin, id) + if err != nil { + t.Error("Error whihle get target by id", err.Error()) + t.Log(err) + } else { + assert.Equal(int(200), httpStatusCode, "httpStatusCode should be 200") + } + + //--------------case 2 : response code = 404,target not found------------// + fmt.Println("case 2 : response code = 404,target not found") + id = "1111" + httpStatusCode, err = apiTest.GetTargetPoliciesByID(*admin, id) + if err != nil { + t.Error("Error whihle get target by id", err.Error()) + t.Log(err) + } else { + assert.Equal(int(404), httpStatusCode, "httpStatusCode should be 404") + } + +} + +func TestTargetsDelete(t *testing.T) { + var httpStatusCode int + var err error + + assert := assert.New(t) + apiTest := newHarborAPI() + + id := strconv.Itoa(addTargetID) + fmt.Println("Testing Targets Delete API") + + //-------------------case 1 : response code = 200------------------------// + fmt.Println("case 1 : response code = 200") + httpStatusCode, err = apiTest.DeleteTargetsByID(*admin, id) + if err != nil { + t.Error("Error whihle delete targets", err.Error()) + t.Log(err) + } else { + assert.Equal(int(200), httpStatusCode, "httpStatusCode should be 200") + } + + //--------------case 2 : response code = 404,target not found------------// + fmt.Println("case 2 : response code = 404,target not found") + id = "1111" + httpStatusCode, err = apiTest.DeleteTargetsByID(*admin, id) + if err != nil { + t.Error("Error whihle delete targets", err.Error()) + t.Log(err) + } else { + assert.Equal(int(404), httpStatusCode, "httpStatusCode should be 404") + } + +}