mirror of
https://github.com/goharbor/harbor.git
synced 2024-12-24 09:38:09 +01:00
Merge pull request #320 from yhua123/master
for API testing (support Travis automation testing)
This commit is contained in:
commit
e4d4e8a92f
59
.travis.yml
59
.travis.yml
@ -1,3 +1,5 @@
|
|||||||
|
sudo: true
|
||||||
|
|
||||||
language: go
|
language: go
|
||||||
|
|
||||||
go:
|
go:
|
||||||
@ -5,10 +7,32 @@ go:
|
|||||||
|
|
||||||
go_import_path: github.com/vmware/harbor
|
go_import_path: github.com/vmware/harbor
|
||||||
|
|
||||||
service:
|
services:
|
||||||
|
- docker
|
||||||
- mysql
|
- mysql
|
||||||
|
|
||||||
env: DB_HOST=127.0.0.1 DB_PORT=3306 DB_USR=root DB_PWD=
|
dist: trusty
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- mysql-server-5.6
|
||||||
|
- mysql-client-core-5.6
|
||||||
|
- mysql-client-5.6
|
||||||
|
|
||||||
|
env:
|
||||||
|
DB_HOST: 127.0.0.1
|
||||||
|
DB_PORT: 3306
|
||||||
|
DB_USR: root
|
||||||
|
DB_PWD:
|
||||||
|
DOCKER_COMPOSE_VERSION: 1.7.1
|
||||||
|
HARBOR_ADMIN: admin
|
||||||
|
HARBOR_ADMIN_PASSWD: Harbor12345
|
||||||
|
|
||||||
|
before_install:
|
||||||
|
- ./tests/hostcfg.sh
|
||||||
|
- cd Deploy
|
||||||
|
- ./prepare
|
||||||
|
- cd ..
|
||||||
|
|
||||||
install:
|
install:
|
||||||
- sudo apt-get update && sudo apt-get install -y libldap2-dev
|
- sudo apt-get update && sudo apt-get install -y libldap2-dev
|
||||||
@ -17,12 +41,37 @@ install:
|
|||||||
- go get -d github.com/go-sql-driver/mysql
|
- go get -d github.com/go-sql-driver/mysql
|
||||||
- go get github.com/golang/lint/golint
|
- go get github.com/golang/lint/golint
|
||||||
- go get github.com/GeertJohan/fgt
|
- go get github.com/GeertJohan/fgt
|
||||||
|
- sudo apt-get install -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" docker-engine=1.11.1-0~trusty
|
||||||
|
- sudo rm /usr/local/bin/docker-compose
|
||||||
|
- curl -L https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-`uname -s`-`uname -m` > docker-compose
|
||||||
|
- chmod +x docker-compose
|
||||||
|
- sudo mv docker-compose /usr/local/bin
|
||||||
|
- go get github.com/dghubble/sling
|
||||||
|
- go get github.com/stretchr/testify
|
||||||
|
- go get github.com/yhua123/harbor/tests/apitests/apilib
|
||||||
|
|
||||||
before_script:
|
before_script:
|
||||||
# create tables and load data
|
# create tables and load data
|
||||||
- mysql < ./Deploy/db/registry.sql -uroot --verbose
|
- mysql < ./Deploy/db/registry.sql -uroot --verbose
|
||||||
|
|
||||||
script:
|
script:
|
||||||
- go list ./... | grep -v /vendor/ | xargs -L1 fgt golint
|
- go list ./... | grep -v 'tests' | grep -v /vendor/ | xargs -L1 fgt golint
|
||||||
- go list ./... | grep -v 'vendor' | xargs -L1 go vet
|
- go list ./... | grep -v 'tests' | grep -v 'vendor' | xargs -L1 go vet
|
||||||
- go list ./... | grep -v 'vendor' | xargs -L1 go test -v
|
- go list ./... | grep -v 'tests' | grep -v 'vendor' | xargs -L1 go test -v
|
||||||
|
|
||||||
|
- docker-compose -f Deploy/docker-compose.yml up -d
|
||||||
|
|
||||||
|
- docker ps
|
||||||
|
- docker version
|
||||||
|
- docker-compose version
|
||||||
|
- go run tests/startuptest.go http://localhost/
|
||||||
|
- go run tests/userlogintest.go -name ${HARBOR_ADMIN} -passwd ${HARBOR_ADMIN_PASSWD}
|
||||||
|
|
||||||
|
|
||||||
|
# test for API
|
||||||
|
- #IP=`ip addr s eth0 |grep "inet "|awk '{print $2}' |awk -F "/" '{print $1}'`
|
||||||
|
- #echo $IP
|
||||||
|
- #docker login -u admin -p Harbor12345 $IP
|
||||||
|
- #./tests/testprepare.sh
|
||||||
|
- docker ps
|
||||||
|
- go test -v ./tests/apitests
|
||||||
|
BIN
tests/apitests/.harborAPISearch_test.go.swp
Normal file
BIN
tests/apitests/.harborAPISearch_test.go.swp
Normal file
Binary file not shown.
BIN
tests/apitests/apilib/.harborapi.go.swp
Normal file
BIN
tests/apitests/apilib/.harborapi.go.swp
Normal file
Binary file not shown.
23
tests/apitests/apilib/accesslog.go
Normal file
23
tests/apitests/apilib/accesslog.go
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
/*
|
||||||
|
Copyright (c) 2016 VMware, Inc. All Rights Reserved.
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package HarborAPI
|
||||||
|
|
||||||
|
type AccessLog struct {
|
||||||
|
Username string `json:"username,omitempty"`
|
||||||
|
Keywords string `json:"keywords,omitempty"`
|
||||||
|
BeginTimestamp int32 `json:"beginTimestamp,omitempty"`
|
||||||
|
EndTimestamp int32 `json:"endTimestamp,omitempty"`
|
||||||
|
}
|
113
tests/apitests/apilib/harborapi.go
Normal file
113
tests/apitests/apilib/harborapi.go
Normal file
@ -0,0 +1,113 @@
|
|||||||
|
//Package HarborAPI
|
||||||
|
//These APIs provide services for manipulating Harbor project.
|
||||||
|
package HarborAPI
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
//"fmt"
|
||||||
|
"io/ioutil"
|
||||||
|
"net/http"
|
||||||
|
|
||||||
|
"github.com/dghubble/sling"
|
||||||
|
)
|
||||||
|
|
||||||
|
type HarborAPI struct {
|
||||||
|
basePath string
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewHarborAPI() *HarborAPI {
|
||||||
|
return &HarborAPI{
|
||||||
|
basePath: "http://localhost",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewHarborAPIWithBasePath(basePath string) *HarborAPI {
|
||||||
|
return &HarborAPI{
|
||||||
|
basePath: basePath,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
type UsrInfo struct {
|
||||||
|
Name string
|
||||||
|
Passwd string
|
||||||
|
}
|
||||||
|
|
||||||
|
//Search for projects and repositories
|
||||||
|
//Implementation Notes
|
||||||
|
//The Search endpoint returns information about the projects and repositories
|
||||||
|
//offered at public status or related to the current logged in user.
|
||||||
|
//The response includes the project and repository list in a proper display order.
|
||||||
|
//@param q Search parameter for project and repository name.
|
||||||
|
//@return []Search
|
||||||
|
//func (a HarborAPI) SearchGet (q string) (Search, error) {
|
||||||
|
func (a HarborAPI) SearchGet(q string) (Search, error) {
|
||||||
|
|
||||||
|
_sling := sling.New().Get(a.basePath)
|
||||||
|
|
||||||
|
// create path and map variables
|
||||||
|
path := "/api/search"
|
||||||
|
|
||||||
|
_sling = _sling.Path(path)
|
||||||
|
|
||||||
|
type QueryParams struct {
|
||||||
|
Query string `url:"q"`
|
||||||
|
}
|
||||||
|
|
||||||
|
_sling = _sling.QueryStruct(&QueryParams{q})
|
||||||
|
|
||||||
|
// accept header
|
||||||
|
accepts := []string{"application/json", "text/plain"}
|
||||||
|
for key := range accepts {
|
||||||
|
_sling = _sling.Set("Accept", accepts[key])
|
||||||
|
break // only use the first Accept
|
||||||
|
}
|
||||||
|
|
||||||
|
req, err := _sling.Request()
|
||||||
|
client := &http.Client{}
|
||||||
|
httpResponse, err := client.Do(req)
|
||||||
|
defer httpResponse.Body.Close()
|
||||||
|
|
||||||
|
body, err := ioutil.ReadAll(httpResponse.Body)
|
||||||
|
if err != nil {
|
||||||
|
// handle error
|
||||||
|
}
|
||||||
|
|
||||||
|
var successPayload = new(Search)
|
||||||
|
err = json.Unmarshal(body, &successPayload)
|
||||||
|
return *successPayload, err
|
||||||
|
}
|
||||||
|
|
||||||
|
//Create a new project.
|
||||||
|
//Implementation Notes
|
||||||
|
//This endpoint is for user to create a new project.
|
||||||
|
//@param project New created project.
|
||||||
|
//@return void
|
||||||
|
//func (a HarborAPI) ProjectsPost (prjUsr UsrInfo, project Project) (int, error) {
|
||||||
|
func (a HarborAPI) ProjectsPost(prjUsr UsrInfo, project Project) (int, error) {
|
||||||
|
|
||||||
|
_sling := sling.New().Post(a.basePath)
|
||||||
|
|
||||||
|
// create path and map variables
|
||||||
|
path := "/api/projects"
|
||||||
|
|
||||||
|
_sling = _sling.Path(path)
|
||||||
|
|
||||||
|
// accept header
|
||||||
|
accepts := []string{"application/json", "text/plain"}
|
||||||
|
for key := range accepts {
|
||||||
|
_sling = _sling.Set("Accept", accepts[key])
|
||||||
|
break // only use the first Accept
|
||||||
|
}
|
||||||
|
|
||||||
|
// body params
|
||||||
|
_sling = _sling.BodyJSON(project)
|
||||||
|
|
||||||
|
req, err := _sling.Request()
|
||||||
|
req.SetBasicAuth(prjUsr.Name, prjUsr.Passwd)
|
||||||
|
|
||||||
|
client := &http.Client{}
|
||||||
|
httpResponse, err := client.Do(req)
|
||||||
|
defer httpResponse.Body.Close()
|
||||||
|
|
||||||
|
return httpResponse.StatusCode, err
|
||||||
|
}
|
15
tests/apitests/apilib/harborlogout.go
Normal file
15
tests/apitests/apilib/harborlogout.go
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
// HarborLogout.go
|
||||||
|
package HarborAPI
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net/http"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (a HarborAPI) HarborLogout() (int, error) {
|
||||||
|
|
||||||
|
response, err := http.Get(a.basePath + "/logout")
|
||||||
|
|
||||||
|
defer response.Body.Close()
|
||||||
|
|
||||||
|
return response.StatusCode, err
|
||||||
|
}
|
28
tests/apitests/apilib/harlogin.go
Normal file
28
tests/apitests/apilib/harlogin.go
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
// HarborLogon.go
|
||||||
|
package HarborAPI
|
||||||
|
|
||||||
|
import (
|
||||||
|
"io/ioutil"
|
||||||
|
"net/http"
|
||||||
|
"net/url"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (a HarborAPI) HarborLogin(user UsrInfo) (int, error) {
|
||||||
|
|
||||||
|
v := url.Values{}
|
||||||
|
v.Set("principal", user.Name)
|
||||||
|
v.Set("password", user.Passwd)
|
||||||
|
|
||||||
|
body := ioutil.NopCloser(strings.NewReader(v.Encode())) //endode v:[body struce]
|
||||||
|
|
||||||
|
client := &http.Client{}
|
||||||
|
reqest, err := http.NewRequest("POST", a.basePath+"/login", body)
|
||||||
|
|
||||||
|
reqest.Header.Set("Content-Type", "application/x-www-form-urlencoded;param=value") //setting post head
|
||||||
|
|
||||||
|
resp, err := client.Do(reqest)
|
||||||
|
defer resp.Body.Close() //close resp.Body
|
||||||
|
|
||||||
|
return resp.StatusCode, err
|
||||||
|
}
|
15
tests/apitests/apilib/project.go
Normal file
15
tests/apitests/apilib/project.go
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
package HarborAPI
|
||||||
|
|
||||||
|
import ()
|
||||||
|
|
||||||
|
type Project struct {
|
||||||
|
ProjectId int32 `json:"id,omitempty"`
|
||||||
|
OwnerId int32 `json:"owner_id,omitempty"`
|
||||||
|
ProjectName string `json:"project_name,omitempty"`
|
||||||
|
CreationTime string `json:"creation_time,omitempty"`
|
||||||
|
Deleted int32 `json:"deleted,omitempty"`
|
||||||
|
UserId int32 `json:"user_id,omitempty"`
|
||||||
|
OwnerName string `json:"owner_name,omitempty"`
|
||||||
|
Public bool `json:"public,omitempty"`
|
||||||
|
Togglable bool `json:"togglable,omitempty"`
|
||||||
|
}
|
9
tests/apitests/apilib/projecttemp4search.go
Normal file
9
tests/apitests/apilib/projecttemp4search.go
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
package HarborAPI
|
||||||
|
|
||||||
|
import ()
|
||||||
|
|
||||||
|
type Project4Search struct {
|
||||||
|
ProjectId int32 `json:"id,omitempty"`
|
||||||
|
ProjectName string `json:"name,omitempty"`
|
||||||
|
Public int32 `json:"public,omitempty"`
|
||||||
|
}
|
16
tests/apitests/apilib/repository.go
Normal file
16
tests/apitests/apilib/repository.go
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
package HarborAPI
|
||||||
|
|
||||||
|
import (
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Repository struct {
|
||||||
|
Id string `json:"id,omitempty"`
|
||||||
|
Parent string `json:"parent,omitempty"`
|
||||||
|
Created time.Time `json:"created,omitempty"`
|
||||||
|
DurationDays string `json:"duration_days,omitempty"`
|
||||||
|
Author string `json:"author,omitempty"`
|
||||||
|
Architecture string `json:"architecture,omitempty"`
|
||||||
|
DockerVersion string `json:"docker_version,omitempty"`
|
||||||
|
Os string `json:"os,omitempty"`
|
||||||
|
}
|
9
tests/apitests/apilib/repositorytemp4search.go
Normal file
9
tests/apitests/apilib/repositorytemp4search.go
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
package HarborAPI
|
||||||
|
|
||||||
|
type Repository4Search struct {
|
||||||
|
ProjectId int32 `json:"project_id,omitempty"`
|
||||||
|
ProjectName string `json:"project_name,omitempty"`
|
||||||
|
ProjectPublic int32 `json:"project_public,omitempty"`
|
||||||
|
RepoName string `json:"repository_name,omitempty"`
|
||||||
|
}
|
||||||
|
|
7
tests/apitests/apilib/role.go
Normal file
7
tests/apitests/apilib/role.go
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
package HarborAPI
|
||||||
|
|
||||||
|
type Role struct {
|
||||||
|
RoleId int32 `json:"role_id,omitempty"`
|
||||||
|
RoleCode string `json:"role_code,omitempty"`
|
||||||
|
RoleName string `json:"role_name,omitempty"`
|
||||||
|
}
|
6
tests/apitests/apilib/roleparam.go
Normal file
6
tests/apitests/apilib/roleparam.go
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
package HarborAPI
|
||||||
|
|
||||||
|
type RoleParam struct {
|
||||||
|
Roles []int32 `json:"roles,omitempty"`
|
||||||
|
UserName string `json:"user_name,omitempty"`
|
||||||
|
}
|
8
tests/apitests/apilib/search.go
Normal file
8
tests/apitests/apilib/search.go
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
package HarborAPI
|
||||||
|
|
||||||
|
import ()
|
||||||
|
|
||||||
|
type Search struct {
|
||||||
|
Projects []Project4Search `json:"project,omitempty"`
|
||||||
|
Repositories []Repository4Search `json:"repository,omitempty"`
|
||||||
|
}
|
11
tests/apitests/apilib/user.go
Normal file
11
tests/apitests/apilib/user.go
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
package HarborAPI
|
||||||
|
|
||||||
|
type User struct {
|
||||||
|
UserId int32 `json:"user_id,omitempty"`
|
||||||
|
Username string `json:"username,omitempty"`
|
||||||
|
Email string `json:"email,omitempty"`
|
||||||
|
Password string `json:"password,omitempty"`
|
||||||
|
Realname string `json:"realname,omitempty"`
|
||||||
|
Comment string `json:"comment,omitempty"`
|
||||||
|
Deleted int32 `json:"deleted,omitempty"`
|
||||||
|
}
|
95
tests/apitests/hbapiaddprj_test.go
Normal file
95
tests/apitests/hbapiaddprj_test.go
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
package HarborAPItest
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
"testing"
|
||||||
|
"github.com/yhua123/harbor/tests/apitests/apilib"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestAddProject(t *testing.T) {
|
||||||
|
|
||||||
|
fmt.Println("Test for Project Add (ProjectsPost) API\n")
|
||||||
|
assert := assert.New(t)
|
||||||
|
|
||||||
|
apiTest := HarborAPI.NewHarborAPI()
|
||||||
|
|
||||||
|
//prepare for test
|
||||||
|
adminEr := &HarborAPI.UsrInfo{"admin", "Harbor1234"}
|
||||||
|
admin := &HarborAPI.UsrInfo{"admin", "Harbor12345"}
|
||||||
|
|
||||||
|
prjUsr := &HarborAPI.UsrInfo{"unknown", "unknown"}
|
||||||
|
|
||||||
|
var project HarborAPI.Project
|
||||||
|
project.ProjectName = "testProject"
|
||||||
|
project.Public = true
|
||||||
|
|
||||||
|
//case 1: admin login fail, expect project creation fail.
|
||||||
|
fmt.Println("case 1: admin login fail, expect project creation fail.")
|
||||||
|
resault, err := apiTest.HarborLogin(*adminEr)
|
||||||
|
if err != nil {
|
||||||
|
t.Error("Error while admin login", err.Error())
|
||||||
|
t.Log(err)
|
||||||
|
} else {
|
||||||
|
assert.Equal(resault, int(401), "Admin login status should be 401")
|
||||||
|
//t.Log(resault)
|
||||||
|
}
|
||||||
|
|
||||||
|
resault, err = apiTest.ProjectsPost(*prjUsr, project)
|
||||||
|
if err != nil {
|
||||||
|
t.Error("Error while creat project", err.Error())
|
||||||
|
t.Log(err)
|
||||||
|
} else {
|
||||||
|
assert.Equal(resault, int(401), "Case 1: Project creation status should be 401")
|
||||||
|
//t.Log(resault)
|
||||||
|
}
|
||||||
|
|
||||||
|
//case 2: admin successful login, expect project creation success.
|
||||||
|
fmt.Println("case 2: admin successful login, expect project creation success.")
|
||||||
|
resault, err = apiTest.HarborLogin(*admin)
|
||||||
|
if err != nil {
|
||||||
|
t.Error("Error while admin login", err.Error())
|
||||||
|
t.Log(err)
|
||||||
|
} else {
|
||||||
|
assert.Equal(resault, int(200), "Admin login status should be 200")
|
||||||
|
//t.Log(resault)
|
||||||
|
}
|
||||||
|
if resault != 200 {
|
||||||
|
t.Log(resault)
|
||||||
|
} else {
|
||||||
|
prjUsr = admin
|
||||||
|
}
|
||||||
|
|
||||||
|
resault, err = apiTest.ProjectsPost(*prjUsr, project)
|
||||||
|
if err != nil {
|
||||||
|
t.Error("Error while creat project", err.Error())
|
||||||
|
t.Log(err)
|
||||||
|
} else {
|
||||||
|
assert.Equal(resault, int(201), "Case 2: Project creation status should be 201")
|
||||||
|
//t.Log(resault)
|
||||||
|
}
|
||||||
|
|
||||||
|
//case 3: duplicate project name, create project fail
|
||||||
|
fmt.Println("case 3: duplicate project name, create project fail")
|
||||||
|
resault, err = apiTest.ProjectsPost(*prjUsr, project)
|
||||||
|
if err != nil {
|
||||||
|
t.Error("Error while creat project", err.Error())
|
||||||
|
t.Log(err)
|
||||||
|
} else {
|
||||||
|
assert.Equal(resault, int(409), "Case 3: Project creation status should be 409")
|
||||||
|
//t.Log(resault)
|
||||||
|
}
|
||||||
|
|
||||||
|
//resault1, err := apiTest.HarborLogout()
|
||||||
|
//if err != nil {
|
||||||
|
// t.Error("Error while admin logout", err.Error())
|
||||||
|
// t.Log(err)
|
||||||
|
//} else {
|
||||||
|
// assert.Equal(resault1, int(200), "Admin logout status")
|
||||||
|
// //t.Log(resault)
|
||||||
|
//}
|
||||||
|
//if resault1 != 200 {
|
||||||
|
// t.Log(resault)
|
||||||
|
//}
|
||||||
|
|
||||||
|
}
|
31
tests/apitests/hbapisearch_test.go
Normal file
31
tests/apitests/hbapisearch_test.go
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
package HarborAPItest
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
"testing"
|
||||||
|
"github.com/yhua123/harbor/tests/apitests/apilib"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestSearch(t *testing.T) {
|
||||||
|
fmt.Println("Test for Search (SearchGet) API\n")
|
||||||
|
assert := assert.New(t)
|
||||||
|
|
||||||
|
apiTest := HarborAPI.NewHarborAPI()
|
||||||
|
var resault HarborAPI.Search
|
||||||
|
resault, err := apiTest.SearchGet("library")
|
||||||
|
//fmt.Printf("%+v\n", resault)
|
||||||
|
if err != nil {
|
||||||
|
t.Error("Error while search project or repository", err.Error())
|
||||||
|
t.Log(err)
|
||||||
|
} else {
|
||||||
|
assert.Equal(resault.Projects[0].ProjectId, int32(1), "Project id should be equal")
|
||||||
|
assert.Equal(resault.Projects[0].ProjectName, "library", "Project name should be library")
|
||||||
|
assert.Equal(resault.Projects[0].Public, int32(1), "Project public status should be 1 (true)")
|
||||||
|
//t.Log(resault)
|
||||||
|
}
|
||||||
|
//if resault.Response.StatusCode != 200 {
|
||||||
|
// t.Log(resault.Response)
|
||||||
|
//}
|
||||||
|
|
||||||
|
}
|
4
tests/hostcfg.sh
Executable file
4
tests/hostcfg.sh
Executable file
@ -0,0 +1,4 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
IP=`ip addr s eth0 |grep "inet "|awk '{print $2}' |awk -F "/" '{print $1}'`
|
||||||
|
#echo $IP
|
||||||
|
sed "s/reg.mydomain.com/$IP/" -i Deploy/harbor.cfg
|
36
tests/startuptest.go
Normal file
36
tests/startuptest.go
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
// Fetch prints the content found at a URL.
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"io/ioutil"
|
||||||
|
"net/http"
|
||||||
|
"os"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
time.Sleep(60*time.Second)
|
||||||
|
for _, url := range os.Args[1:] {
|
||||||
|
resp, err := http.Get(url)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Fprintf(os.Stderr, "fetch: %v\n", err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
b, err := ioutil.ReadAll(resp.Body)
|
||||||
|
resp.Body.Close()
|
||||||
|
if err != nil {
|
||||||
|
fmt.Fprintf(os.Stderr, "fetch: reading %s: %v\n", url, err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
// fmt.Printf("%s", b)
|
||||||
|
if strings.Contains(string(b), "Harbor") {
|
||||||
|
fmt.Printf("sucess!\n")
|
||||||
|
} else {
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
11
tests/testprepare.sh
Executable file
11
tests/testprepare.sh
Executable file
@ -0,0 +1,11 @@
|
|||||||
|
IP=`ip addr s eth0 |grep "inet "|awk '{print $2}' |awk -F "/" '{print $1}'`
|
||||||
|
#echo $IP
|
||||||
|
docker pull hello-world
|
||||||
|
docker pull docker
|
||||||
|
#docker login -u admin -p Harbor12345 $IP
|
||||||
|
|
||||||
|
docker tag hello-world $IP/library/hello-world
|
||||||
|
docker push $IP/library/hello-world
|
||||||
|
|
||||||
|
docker tag docker $IP/library/docker
|
||||||
|
docker push $IP/library/docker
|
55
tests/userlogintest.go
Normal file
55
tests/userlogintest.go
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"io/ioutil"
|
||||||
|
"net/http"
|
||||||
|
"net/url"
|
||||||
|
"strings"
|
||||||
|
"flag"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
usrNamePtr := flag.String("name","anaymous","user name")
|
||||||
|
usrPasswdPtr := flag.String("passwd","anaymous","user password")
|
||||||
|
flag.Parse()
|
||||||
|
|
||||||
|
v := url.Values{}
|
||||||
|
v.Set("principal", *usrNamePtr)
|
||||||
|
v.Set("password", *usrPasswdPtr)
|
||||||
|
|
||||||
|
body := ioutil.NopCloser(strings.NewReader(v.Encode())) //endode v:[body struce]
|
||||||
|
fmt.Println(v)
|
||||||
|
|
||||||
|
client := &http.Client{}
|
||||||
|
reqest, err := http.NewRequest("POST", "http://localhost/login", body)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("Fatal error ", err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
reqest.Header.Set("Content-Type", "application/x-www-form-urlencoded;param=value") //setting post head
|
||||||
|
|
||||||
|
resp, err := client.Do(reqest)
|
||||||
|
defer resp.Body.Close() //close resp.Body
|
||||||
|
|
||||||
|
fmt.Println("login status: ", resp.StatusCode) //print status code
|
||||||
|
|
||||||
|
//content_post, err := ioutil.ReadAll(resp.Body)
|
||||||
|
//if err != nil {
|
||||||
|
// fmt.Println("Fatal error ", err.Error())
|
||||||
|
//}
|
||||||
|
|
||||||
|
//fmt.Println(string(content_post)) //print reply
|
||||||
|
|
||||||
|
response, err := http.Get("http://localhost/api/logout")
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("Fatal error ", err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
defer response.Body.Close()
|
||||||
|
|
||||||
|
fmt.Println("logout status: ", resp.StatusCode) //print status code
|
||||||
|
//content_get, err := ioutil.ReadAll(response.Body)
|
||||||
|
//fmt.Println(string(content_get))
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user