diff --git a/core/check_meta_service.py b/core/check_meta_service.py index 4864c175b04fa68f08e3709e26339edf4eb0e620..3997590eeac3686a203683e0a7056e9cb3bb1ba6 100644 --- a/core/check_meta_service.py +++ b/core/check_meta_service.py @@ -45,6 +45,7 @@ class CheckMetaPull(object): self.token = self.kwargs['access_token'] self.current_path = os.getcwd() self.check_error = [] + self.meta_path = self.kwargs['obs_meta_path'] def _clean(self): """ @@ -83,21 +84,25 @@ class CheckMetaPull(object): fetch_cmd = "git fetch origin pull/%s/head:thispr" % self.prid branch_cmd = "git branch -a | grep 'thispr'" checkout_cmd = "git checkout thispr" - changed_file_cmd = "git diff --name-status master...thispr" - for x in range(5): + changed_file_cmd = "git diff --name-status HEAD~1 HEAD~0" + if not self.meta_path: + for x in range(5): + os.chdir("obs_meta") + fetch_result = os.popen(fetch_cmd).read() + log.info(fetch_result) + branch_result = os.popen(branch_cmd).readlines() + if branch_result: + log.info(branch_result) + break + else: + os.chdir("../") + self._clean() + self._get_latest_obs_meta() + show_result = os.popen(checkout_cmd).readlines() + log.info(show_result) + else: + cp_result = os.system("cp -rf %s ./ " % self.meta_path) os.chdir("obs_meta") - fetch_result = os.popen(fetch_cmd).read() - log.info(fetch_result) - branch_result = os.popen(branch_cmd).readlines() - if branch_result: - log.info(branch_result) - break - else: - os.chdir("../") - self._clean() - self._get_latest_obs_meta() - show_result = os.popen(checkout_cmd).readlines() - log.info(show_result) changed_file = os.popen(changed_file_cmd).readlines() log.info(changed_file) os.chdir("../") @@ -201,7 +206,7 @@ class CheckMetaPull(object): error_flag = self._pkgname_check(info['pkg_name'], info['ser_name']) else: log.error("**************_Service URL ERROR*****************") - log.error("FAILED:Please check the branch in your %s _service again" + log.error("FAILED:Please check the url in your %s _service again" % info['pkg_name']) error_flag = "yes" return error_flag @@ -233,7 +238,7 @@ class CheckMetaPull(object): 'ser_next':service_next, 'pkg_name':path_info[0], 'ser_name':service_name} error_flag2 = self._check_correspond_from_service(**all_info) - if "-b" not in sys.argv: + if self.token: error_flag3 = self._detect_protect_branch(pkg_path) error_flag4 = self._one_pkg_one_branch(pkg_path) error_flag = error_flag1 or error_flag2 or error_flag3 or error_flag4 @@ -392,8 +397,11 @@ class CheckMetaPull(object): """ get all change file_path """ - self._clean() - self._get_latest_obs_meta() + if self.meta_path: + cp_result = os.system("cp -rf %s ./" % self.meta_path) + else: + self._clean() + self._get_latest_obs_meta() changefile = self._get_change_file() changelist = [] for msg in changefile: @@ -534,8 +542,9 @@ class CheckMetaPull(object): if __name__ == "__main__": kw = {} - kw['pr_id'] = "765" + kw['pr_id'] = "780" kw['branch'] = "" - kw['access_token'] = "***" + kw['access_token'] = "" + kw['obs_meta_path'] = "" check = CheckMetaPull(**kw) check.do_all() diff --git a/test/config.ini b/test/config.ini index f87706e860fce72a854675809b9dc880626b2038..b5fe42435913ccf11f9130d1bb67d30ef46cf7ec 100644 --- a/test/config.ini +++ b/test/config.ini @@ -1,7 +1,8 @@ [gitee] user = passwd = -email = +email = +token = [obs] url = user = diff --git a/test/func.py b/test/func.py index cb6ad59446924cae8fbc08e2db495d73f2990295..8084c4231278ec54628bc91eba1fa67b15c05b7b 100644 --- a/test/func.py +++ b/test/func.py @@ -58,10 +58,15 @@ class SetEnv(object): self._gitee_info = None self.obs_info = {} self.gitee_info = {} + self.token = "" self.home_dir = os.environ['HOME'] self.oscrc = os.path.join(self.home_dir, ".oscrc") self.oscrc_bak = os.path.join(self.home_dir, ".oscrc.bak") self.gitee_info_bak = {"user":"", "email":""} + + def get_token(self): + self.token = self.config.get("gitee", "token") + return self.token def set_oscrc(self): self._obs_info = self.config.options("obs") diff --git a/test/test_check_obs_service.py b/test/test_check_obs_service.py new file mode 100644 index 0000000000000000000000000000000000000000..70307ff1d48ace94575fbf47fb777dd83ce3d357 --- /dev/null +++ b/test/test_check_obs_service.py @@ -0,0 +1,262 @@ +#/bin/env python3 +# -*- encoding=utf8 -*- +#****************************************************************************** +# Copyright (c) Huawei Technologies Co., Ltd. 2020-2020. All rights reserved. +# licensed under the Mulan PSL v2. +# You can use this software according to the terms and conditions of the Mulan PSL v2. +# You may obtain a copy of Mulan PSL v2 at: +# http://license.coscl.org.cn/MulanPSL2 +# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR +# PURPOSE. +# See the Mulan PSL v2 for more details. +# Author: yaokai13 +# Create: 2021-06-15 +# ***************************************************************************** +""" +test all: python3 -m pytest -s test_check_obs_service.py +test one class: python3 -m pytest -s test_check_obs_service.py::TestCase +test one class one case: python3 -m pytest -s test_check_obs_service.py::TestCase::test_1 +""" +import os +import sys +import pytest +current_path = os.path.join(os.path.split(os.path.realpath(__file__))[0]) +sys.path.append(os.path.join(current_path, "..")) +from func import SetEnv, CommonFunc +from common.common import Pexpect +from core.check_meta_service import CheckMetaPull +S = SetEnv() +C = CommonFunc() +token = S.get_token() + +def verify_obs_meta(cmd_str): + """ + make the commit to obs_meta for make check enironment + """ + rm_rel = os.system("rm -rf ./obs_meta") + repo_path = C.pull_from_gitee_repo(S.gitee_info["user"], S.gitee_info["passwd"], \ + "https://gitee.com/{0}/obs_meta".format(S.gitee_info["user"]), "master", "obs_meta") + commit_cmd = "cd obs_meta && git add -A && git commit -m 'test' && cd -" + cmd_resul = os.system(cmd_str) + commit_cmd = os.system(commit_cmd) + if cmd_resul != 0 and commit_cmd != 0: + return False + else: + return True + +class TestCase(object): + def setup_class(self): + S.set_oscrc() + S.set_gitee() + + def teardown_class(self): + S.unset_oscrc() + S.unset_gitee() + + def test_1(self): + """ + test obs_meta commit for modifiy service : Service Correct + """ + name_path = "obs_meta/master/openEuler:Factory" + old_path = "obs_meta/master/openEuler:Mainline" + cp_cmd = "mv %s/libcyaml %s/libcyaml" % (name_path, old_path) + verfiy_meta = verify_obs_meta(cp_cmd) + if not verfiy_meta: + assert False + kw = { + "branch": "", + "pr_id": "test", + "access_token": token, + "obs_meta_path": "./obs_meta" + } + check1 = CheckMetaPull(**kw) + try: + check1.do_all() + except SystemExit: + assert False + else: + assert True + + def test_2(self): + """ + test error service for given branch : Branch have no wrong service + """ + kw = { + "branch": "openEuler-20.03-LTS", + "pr_id": "", + "access_token": "", + "obs_meta_path": "" + } + check2 = CheckMetaPull(**kw) + try: + check2.do_all() + except SystemExit: + assert False + else: + assert True + + def test_3(self): + """ + test the meta file commit for obs_meta : The meta file have a correct format + """ + kw = { + "branch": "", + "pr_id": "698", + "access_token": token, + "obs_meta_path": "" + } + check3 = CheckMetaPull(**kw) + try: + check3.do_all() + except SystemExit: + assert False + else: + assert True + + def test_4(self): + """ + test obs_meta commit for modifiy service : Service Error + """ + kw = { + "branch": "", + "pr_id": "744", + "access_token": token, + "obs_meta_path": "" + } + check4 = CheckMetaPull(**kw) + try: + check4.do_all() + except SystemExit: + assert True + else: + assert False + + def test_5(self): + """ + test obs_meta commit for meta file : The meta file have a wrong format + """ + name_path = "obs_meta/OBS_PRJ_meta/openEuler-20.03-LTS/openEuler:20.03:LTS:Epol" + mv_cmd = "sed -i '1d' %s" % name_path + verfiy_meta = verify_obs_meta(mv_cmd) + if not verfiy_meta: + assert False + kw = { + "branch": "", + "pr_id": "***", + "access_token": token, + "obs_meta_path": "./obs_meta" + } + check4 = CheckMetaPull(**kw) + try: + check4.do_all() + except SystemExit: + assert True + else: + assert False + + def test_6(self): + """ + test error service for given branch : Branch have wrong service + """ + kw = { + "branch": "openEuler-20.03-LTS-SP1", + "pr_id": "", + "access_token": "", + "obs_meta_path": "" + } + check2 = CheckMetaPull(**kw) + try: + check2.do_all() + except SystemExit: + assert True + else: + assert False + + def test_7(self): + """ + test the protect branch: not in protect branch + """ + kw = { + "branch": "", + "pr_id": "763", + "access_token": token, + "obs_meta_path": "" + } + check2 = CheckMetaPull(**kw) + try: + check2.do_all() + except SystemExit: + assert False + else: + assert True + + def test_8(self): + """ + test the pkg name in service: service have wrong name + """ + name_path = "obs_meta/master/openEuler:Mainline" + mv_cmd = "mv %s/gcc %s/gdd" % (name_path, name_path) + verfiy_meta = verify_obs_meta(mv_cmd) + if not verfiy_meta: + assert False + kw = { + "branch": "", + "pr_id": "test", + "access_token": token, + "obs_meta_path": "./obs_meta" + } + check8 = CheckMetaPull(**kw) + try: + check8.do_all() + except SystemExit: + assert True + else: + assert False + + def test_9(self): + """ + test error : pkg in branch have different project + """ + name_path = "obs_meta/master/openEuler:Factory" + old_path = "obs_meta/master/openEuler:Mainline" + cp_cmd = "cp %s/gcc %s/gcc -rf" % (old_path, name_path) + verfiy_meta = verify_obs_meta(cp_cmd) + if not verfiy_meta: + assert False + kw = { + "branch": "", + "pr_id": "test", + "access_token": token, + "obs_meta_path": "./obs_meta" + } + check9 = CheckMetaPull(**kw) + try: + check9.do_all() + except SystemExit: + assert True + else: + assert False + + def test_10(self): + """ + test error : The key word for next in service url spelling mistakes + """ + old_path = "obs_meta/master/openEuler:Mainline" + sed_cmd = "sed -i 's/next/Next/g' %s/gcc/_service" % old_path + verfiy_meta = verify_obs_meta(sed_cmd) + if not verfiy_meta: + assert False + kw = { + "branch": "", + "pr_id": "test", + "access_token": token, + "obs_meta_path": "./obs_meta" + } + check9 = CheckMetaPull(**kw) + try: + check9.do_all() + except SystemExit: + assert True + else: + assert False