diff --git a/.travis.yml b/.travis.yml index df896b7e3..02ee6286e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,31 +2,44 @@ sudo: true language: go -go: - - 1.9.2 +go: +- 1.9.2 go_import_path: github.com/goharbor/harbor -services: - - docker +services: +- docker dist: trusty +matrix: + include: + - go: "1.9.2" + env: + - UTTEST=true + - go: "1.9.2" + env: + - APITEST_DB=true + - go: "1.9.2" + env: + - APITEST_LDAP=true + env: - POSTGRESQL_HOST: localhost - POSTGRESQL_PORT: 5432 - POSTGRESQL_USR: postgres - POSTGRESQL_PWD: root123 - POSTGRESQL_DATABASE: registry - ADMINSERVER_URL: http://127.0.0.1:8888 - DOCKER_COMPOSE_VERSION: 1.7.1 - HARBOR_ADMIN: admin - HARBOR_ADMIN_PASSWD: Harbor12345 - CORE_SECRET: tempString - KEY_PATH: /data/secretkey - REDIS_HOST: localhost - REG_VERSION: v2.6.2 - UI_BUILDER_VERSION: 1.6.0 + global: + - POSTGRESQL_HOST: localhost + - POSTGRESQL_PORT: 5432 + - POSTGRESQL_USR: postgres + - POSTGRESQL_PWD: root123 + - POSTGRESQL_DATABASE: registry + - ADMINSERVER_URL: http://127.0.0.1:8888 + - DOCKER_COMPOSE_VERSION: 1.22.0 + - HARBOR_ADMIN: admin + - HARBOR_ADMIN_PASSWD: Harbor12345 + - CORE_SECRET: tempString + - KEY_PATH: /data/secretkey + - REDIS_HOST: localhost + - REG_VERSION: v2.6.2 + - UI_BUILDER_VERSION: 1.6.0 addons: apt: @@ -37,59 +50,20 @@ apt: - google-chrome-beta before_install: - - export CHROME_BIN=chromium-browser - - export DISPLAY=:99.0 - - sh -e /etc/init.d/xvfb start - - sudo ./tests/hostcfg.sh - - sudo ./tests/generateCerts.sh - - sudo ./make/prepare - - sudo mkdir -p "/data/redis" - - sudo mkdir -p /etc/core/ca/ && sudo mv ./tests/ca.crt /etc/core/ca/ - - sudo mkdir -p /harbor && sudo mv ./VERSION /harbor/UIVERSION - - sudo ./tests/testprepare.sh - -install: - - sudo apt-get update && sudo apt-get install -y libldap2-dev - - go get -d github.com/docker/distribution - - go get -d github.com/docker/libtrust - - go get -d github.com/lib/pq - - go get github.com/golang/lint/golint - - go get github.com/GeertJohan/fgt - - go get github.com/dghubble/sling - - go get github.com/stretchr/testify - - go get golang.org/x/tools/cmd/cover - - go get github.com/mattn/goveralls - - go get -u github.com/client9/misspell/cmd/misspell - 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 - IP=`ip addr s eth0 |grep "inet "|awk '{print $2}' |awk -F "/" '{print $1}'` - sudo sed -i '$a DOCKER_OPTS=\"--insecure-registry '$IP':5000\"' /etc/default/docker + - export IP=$IP - sudo service docker restart - - sudo service postgresql stop -before_script: - - cd src/portal - - npm install -g -q --no-progress angular-cli - - npm install -g -q --no-progress karma - - npm install -q --no-progress - - npm run build_lib && npm run link_lib && cd ../.. - - export POSTGRESQL_HOST=$IP - - export REGISTRY_URL=$IP:5000 - - echo $REGISTRY_URL - - cd tests && sudo ./ldapprepare.sh && cd .. - - sudo ./tests/admiral.sh - - sudo make compile_adminserver - - sudo make -f make/photon/Makefile _build_adminserver _build_db _build_registry -e VERSIONTAG=dev -e CLAIRDBVERSION=dev -e REGISTRYVERSION=${REG_VERSION} - - sudo sed -i 's/__reg_version__/${REG_VERSION}-dev/g' ./make/docker-compose.test.yml - - sudo sed -i 's/__version__/dev/g' ./make/docker-compose.test.yml - - sudo mkdir -p ./make/common/config/registry/ && sudo mv ./tests/reg_config.yml ./make/common/config/registry/config.yml +install: + - if [ "$UTTEST" == true ]; then bash ./tests/travis/ut_install.sh ; fi + - if [ "$APITEST_DB" == true ]; then bash ./tests/travis/api_common_install.sh $IP DB; fi + - if [ "$APITEST_LDAP" == true ]; then bash ./tests/travis/api_common_install.sh $IP LDAP; fi script: - - cd src/portal && npm run lint && npm run lint:lib && npm run test && cd ../.. - - sudo docker-compose -f ./make/docker-compose.test.yml up -d - - make go_check - - ./tests/pushimage.sh - - go test -race -i ./src/core ./src/adminserver ./src/jobservice - - sudo -E env "PATH=$PATH" "POSTGRES_MIGRATION_SCRIPTS_PATH=/home/travis/gopath/src/github.com/goharbor/harbor/make/migrations/postgresql/" ./tests/coverage4gotest.sh - - goveralls -coverprofile=profile.cov -service=travis-ci + - if [ "$UTTEST" == true ]; then bash ./tests/travis/ut_run.sh $IP; fi + - if [ "$APITEST_DB" == true ]; then bash ./tests/travis/api_run.sh DB $IP; fi + - if [ "$APITEST_LDAP" == true ]; then bash ./tests/travis/api_run.sh LDAP $IP; fi \ No newline at end of file diff --git a/tests/apitests/python/library/base.py b/tests/apitests/python/library/base.py index 84b3fde55..38ee9b29c 100644 --- a/tests/apitests/python/library/base.py +++ b/tests/apitests/python/library/base.py @@ -26,7 +26,7 @@ def _create_client(server, credential, debug): return swagger_client.ProductsApi(swagger_client.ApiClient(cfg)) def _random_name(prefix): - return "%s-%d" % (prefix, time.time()) + return "%s-%d" % (prefix, int(round(time.time() * 1000))) def _get_id_from_header(header): location = header["Location"] diff --git a/tests/apitests/python/library/project.py b/tests/apitests/python/library/project.py index db22f7b68..6e82f4c4d 100644 --- a/tests/apitests/python/library/project.py +++ b/tests/apitests/python/library/project.py @@ -5,8 +5,10 @@ import base import swagger_client class Project(base.Base): - def create_project(self, name=base._random_name("project"), + def create_project(self, name=None, metadata = {}, **kwargs): + if name is None: + name = base._random_name("project") client = self._get_client(**kwargs) _, _, header = client.projects_post_with_http_info( swagger_client.ProjectReq(name, metadata)) diff --git a/tests/hostcfg.sh b/tests/hostcfg.sh index 85912d533..aeb25fdc4 100755 --- a/tests/hostcfg.sh +++ b/tests/hostcfg.sh @@ -4,4 +4,13 @@ PROTOCOL='https' #echo $IP sudo sed "s/reg.mydomain.com/$IP/" -i make/harbor.cfg -sudo sed "s/^ui_url_protocol = .*/ui_url_protocol = $PROTOCOL/g" -i make/harbor.cfg \ No newline at end of file +sudo sed "s/^ui_url_protocol = .*/ui_url_protocol = $PROTOCOL/g" -i make/harbor.cfg + +if [ "$1" = 'LDAP' ]; then + sudo sed "s/db_auth/ldap_auth/" -i make/harbor.cfg + sudo sed "s/ldaps:\/\/ldap.mydomain.com/ldap:\/\/$IP/g" -i make/harbor.cfg + sudo sed "s/#ldap_searchdn = uid=searchuser,ou=people,dc=mydomain,dc=com/ldap_searchdn = cn=admin,dc=example,dc=com/" -i make/harbor.cfg + sudo sed "s/#ldap_search_pwd = password/ldap_search_pwd = admin/" -i make/harbor.cfg + sudo sed "s/ldap_basedn = ou=people,dc=mydomain,dc=com/ldap_basedn = dc=example,dc=com/" -i make/harbor.cfg + sudo sed "s/ldap_uid = uid/ldap_uid = cn/" -i make/harbor.cfg +fi \ No newline at end of file diff --git a/tests/resources/APITest-Util.robot b/tests/resources/APITest-Util.robot index eb21f2cb3..8055b4ab0 100644 --- a/tests/resources/APITest-Util.robot +++ b/tests/resources/APITest-Util.robot @@ -5,6 +5,9 @@ Setup API Test Should Be Equal As Integers ${rc} 0 Harbor API Test [Arguments] ${testcase_name} - ${rc} ${output}= Run And Return Rc And Output SWAGGER_CLIENT_PATH=./harborclient HARBOR_HOST=${ip} python ${testcase_name} - Log ${output} + ${current_dir}= Run pwd + Log To Console ${current_dir} + Log To Console ${ip} + ${rc} ${output}= Run And Return Rc And Output SWAGGER_CLIENT_PATH=${current_dir}/harborclient HARBOR_HOST=${ip} python ${testcase_name} + Log To Console ${output} Should Be Equal As Integers ${rc} 0 \ No newline at end of file diff --git a/tests/robot-cases/Group0-BAT/API_DB.robot b/tests/robot-cases/Group0-BAT/API_DB.robot new file mode 100644 index 000000000..1473c2d25 --- /dev/null +++ b/tests/robot-cases/Group0-BAT/API_DB.robot @@ -0,0 +1,31 @@ +*** Settings *** +Documentation Harbor BATs +Resource ../../resources/APITest-Util.robot +Resource ../../resources/Docker-Util.robot +Library ../../apitests/python/library/Harbor.py ${SERVER_CONFIG} +Library OperatingSystem +Library String +Library Collections +Library requests +Library Process +Default Tags APIDB + +*** Variables *** +${SERVER} ${ip} +${SERVER_URL} https://${SERVER} +${SERVER_API_ENDPOINT} ${SERVER_URL}/api +&{SERVER_CONFIG} endpoint=${SERVER_API_ENDPOINT} verify_ssl=False + +*** Test Cases *** +Test Case - Create Project + ${project_id} ${project_name} = Create Project + Log To Console ${project_name} + +Test Case - Push Image + Sleep 1 + Docker Pull hello-world:latest + ${project_id} ${project_name} = Create Project + Log To Console ${project_name} + Docker Login ${SERVER} admin Harbor12345 + Docker Tag hello-world:latest ${SERVER}/${project_name}/hello-world:1.0 + Docker Push ${SERVER}/${project_name}/hello-world:1.0 diff --git a/tests/robot-cases/Group0-BAT/API_LDAP.robot b/tests/robot-cases/Group0-BAT/API_LDAP.robot new file mode 100644 index 000000000..2ce9f6948 --- /dev/null +++ b/tests/robot-cases/Group0-BAT/API_LDAP.robot @@ -0,0 +1,19 @@ +*** Settings *** +Documentation Harbor BATs +Resource ../../resources/APITest-Util.robot +Library OperatingSystem +Library String +Library Collections +Library requests +Library Process +Default Tags API + +*** Test Cases *** +Test Case - LDAP Group Admin Role + Harbor API Test ./tests/apitests/python/test_ldap_admin_role.py + +Test Case - LDAP Group User Group + Harbor API Test ./tests/apitests/python/test_user_group.py + +Test Case - Run LDAP Group Related API Test + Harbor API Test ./tests/apitests/python/test_assign_role_to_ldap_group.py \ No newline at end of file diff --git a/tests/travis/api_common_install.sh b/tests/travis/api_common_install.sh new file mode 100644 index 000000000..d4acea8ad --- /dev/null +++ b/tests/travis/api_common_install.sh @@ -0,0 +1,26 @@ +#!/bin/bash + +set +e +sudo rm -fr /data/* +sudo mkdir -p /data + +set -e +# prepare cert ... +sudo sed "s/127.0.0.1/$1/" -i tests/generateCerts.sh +sudo ./tests/generateCerts.sh +sudo mkdir -p /etc/docker/certs.d/$1 && sudo cp ./harbor_ca.crt /etc/docker/certs.d/$1/ + +if [ "$2" = 'LDAP' ]; then + sudo ./tests/hostcfg.sh LDAP + cd tests && sudo ./ldapprepare.sh && cd .. +fi + +if [ "$2" = 'DB' ]; then + sudo ./tests/hostcfg.sh +fi + +sudo apt-get update && sudo apt-get install -y --no-install-recommends python-dev openjdk-7-jdk libssl-dev && sudo apt-get autoremove -y && sudo rm -rf /var/lib/apt/lists/* +sudo wget https://bootstrap.pypa.io/get-pip.py && sudo python ./get-pip.py && sudo pip install --ignore-installed urllib3 chardet requests && sudo pip install robotframework robotframework-httplibrary requests dbbot robotframework-pabot --upgrade +sudo make swagger_client +sudo make install GOBUILDIMAGE=golang:1.9.2 COMPILETAG=compile_golangimage CLARITYIMAGE=goharbor/harbor-clarity-ui-builder:1.6.0 NOTARYFLAG=true CLAIRFLAG=true CHARTFLAG=true +sleep 10 \ No newline at end of file diff --git a/tests/travis/api_run.sh b/tests/travis/api_run.sh new file mode 100644 index 000000000..f9a7f98ee --- /dev/null +++ b/tests/travis/api_run.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +set -e + +docker ps +# run db auth api cases +if [ "$1" = 'DB' ]; then + pybot -v ip:$2 -v HARBOR_PASSWORD:Harbor12345 /home/travis/gopath/src/github.com/goharbor/harbor/tests/robot-cases/Group0-BAT/API_DB.robot +fi +# run ldap api cases +if [ "$1" = 'LDAP' ]; then + pybot -v ip:$2 -v HARBOR_PASSWORD:Harbor12345 /home/travis/gopath/src/github.com/goharbor/harbor/tests/robot-cases/Group0-BAT/API_LDAP.robot +fi diff --git a/tests/travis/ut_install.sh b/tests/travis/ut_install.sh new file mode 100644 index 000000000..2ee5445fd --- /dev/null +++ b/tests/travis/ut_install.sh @@ -0,0 +1,39 @@ +#!/bin/bash + +set -e + +cd ./src/portal +npm install -g -q --no-progress angular-cli +npm install -g -q --no-progress karma +npm install -q --no-progress +npm run build_lib && npm run link_lib && cd ../.. + +sudo apt-get update && sudo apt-get install -y libldap2-dev +go get -d github.com/docker/distribution +go get -d github.com/docker/libtrust +go get -d github.com/lib/pq +go get github.com/golang/lint/golint +go get github.com/GeertJohan/fgt +go get github.com/dghubble/sling +go get github.com/stretchr/testify +go get golang.org/x/tools/cmd/cover +go get github.com/mattn/goveralls +go get -u github.com/client9/misspell/cmd/misspell +sudo service postgresql stop +sleep 2 + +sudo -E env "PATH=$PATH" make go_check +sudo ./tests/hostcfg.sh +sudo ./tests/generateCerts.sh +sudo ./make/prepare +sudo mkdir -p "/data/redis" +sudo mkdir -p /etc/core/ca/ && sudo mv ./tests/ca.crt /etc/core/ca/ +sudo mkdir -p /harbor && sudo mv ./VERSION /harbor/UIVERSION +sudo ./tests/testprepare.sh + +cd tests && sudo ./ldapprepare.sh && sudo ./admiral.sh && cd .. +sudo make compile_adminserver +sudo make -f make/photon/Makefile _build_adminserver _build_db _build_registry -e VERSIONTAG=dev -e CLAIRDBVERSION=dev -e REGISTRYVERSION=${REG_VERSION} +sudo sed -i 's/__reg_version__/${REG_VERSION}-dev/g' ./make/docker-compose.test.yml +sudo sed -i 's/__version__/dev/g' ./make/docker-compose.test.yml +sudo mkdir -p ./make/common/config/registry/ && sudo mv ./tests/reg_config.yml ./make/common/config/registry/config.yml \ No newline at end of file diff --git a/tests/travis/ut_run.sh b/tests/travis/ut_run.sh new file mode 100755 index 000000000..0ba7a82d4 --- /dev/null +++ b/tests/travis/ut_run.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +set -e + +export POSTGRESQL_HOST=$1 +export REGISTRY_URL=$1:5000 +export CHROME_BIN=chromium-browser +export DISPLAY=:99.0 +sh -e /etc/init.d/xvfb start + +cd ./src/portal && npm run lint && npm run lint:lib && npm run test && cd - +sudo docker-compose -f ./make/docker-compose.test.yml up -d +sleep 10 +./tests/pushimage.sh +docker ps + +go test -race -i ./src/core ./src/adminserver ./src/jobservice +sudo -E env "PATH=$PATH" "POSTGRES_MIGRATION_SCRIPTS_PATH=/home/travis/gopath/src/github.com/goharbor/harbor/make/migrations/postgresql/" ./tests/coverage4gotest.sh +goveralls -coverprofile=profile.cov -service=travis-ci \ No newline at end of file