123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- #
- # Copyright OpenEmbedded Contributors
- #
- # SPDX-License-Identifier: MIT
- #
- import os
- import sys
- basepath = os.path.abspath(os.path.dirname(__file__) + '/../../../../../')
- lib_path = basepath + '/scripts/lib'
- sys.path = sys.path + [lib_path]
- import oeqa.utils.gitarchive as ga
- from oeqa.utils.git import GitError
- import tempfile
- import shutil
- import scriptutils
- from oeqa.selftest.case import OESelftestTestCase
- logger = scriptutils.logger_create('resulttool')
- def create_fake_repository(commit, tag_list=[], add_remote=True):
- """ Create a testing git directory
- Initialize a simple git repository with one initial commit, and as many
- tags on this commit as listed in tag_list
- Returns both git directory path and gitarchive git object
- If commit is true, fake data will be commited, otherwise it will stay in staging area
- If commit is true and tag_lsit is non empty, all tags in tag_list will be
- created on the initial commit
- Fake remote will also be added to make git ls-remote work
- """
- fake_data_file = "fake_data.txt"
- tempdir = tempfile.mkdtemp(prefix='fake_results.')
- repo = ga.init_git_repo(tempdir, False, False, logger)
- if add_remote:
- repo.run_cmd(["remote", "add", "origin", "."])
- with open(os.path.join(tempdir, fake_data_file), "w") as fake_data:
- fake_data.write("Fake data")
- if commit:
- repo.run_cmd(["add", fake_data_file])
- repo.run_cmd(["commit", "-m", "\"Add fake data\""])
- for tag in tag_list:
- repo.run_cmd(["tag", tag])
-
- return tempdir, repo
- def delete_fake_repository(path):
- shutil.rmtree(path)
- def tag_exists(git_obj, target_tag):
- for tag in git_obj.run_cmd(["tag"]).splitlines():
- if target_tag == tag:
- return True
- return False
- class GitArchiveTests(OESelftestTestCase):
- TEST_BRANCH="main"
- TEST_COMMIT="0f7d5df"
- TEST_COMMIT_COUNT="42"
- def test_create_first_test_tag(self):
- path, git_obj = create_fake_repository(False)
- keywords = {'commit': self.TEST_COMMIT, 'branch': self.TEST_BRANCH, "commit_count": self.TEST_COMMIT_COUNT}
- target_tag = f"{self.TEST_BRANCH}/{self.TEST_COMMIT_COUNT}-g{self.TEST_COMMIT}/0"
- ga.gitarchive(path, path, True, False,
- "Results of {branch}:{commit}", "branch: {branch}\ncommit: {commit}", "{branch}",
- False, "{branch}/{commit_count}-g{commit}/{tag_number}",
- 'Test run #{tag_number} of {branch}:{commit}', '',
- [], [], False, keywords, logger)
- self.assertTrue(tag_exists(git_obj, target_tag), msg=f"Tag {target_tag} has not been created")
- delete_fake_repository(path)
- def test_create_second_test_tag(self):
- first_tag = f"{self.TEST_BRANCH}/{self.TEST_COMMIT_COUNT}-g{self.TEST_COMMIT}/0"
- second_tag = f"{self.TEST_BRANCH}/{self.TEST_COMMIT_COUNT}-g{self.TEST_COMMIT}/1"
- keywords = {'commit': self.TEST_COMMIT, 'branch': self.TEST_BRANCH, "commit_count": self.TEST_COMMIT_COUNT}
- path, git_obj = create_fake_repository(True, [first_tag])
- ga.gitarchive(path, path, True, False,
- "Results of {branch}:{commit}", "branch: {branch}\ncommit: {commit}", "{branch}",
- False, "{branch}/{commit_count}-g{commit}/{tag_number}",
- 'Test run #{tag_number} of {branch}:{commit}', '',
- [], [], False, keywords, logger)
- self.assertTrue(tag_exists(git_obj, second_tag), msg=f"Second tag {second_tag} has not been created")
- delete_fake_repository(path)
- def test_get_revs_on_branch(self):
- fake_tags_list=["main/10-g0f7d5df/0", "main/10-g0f7d5df/1", "foo/20-g2468f5d/0"]
- tag_name = "{branch}/{commit_number}-g{commit}/{tag_number}"
- path, git_obj = create_fake_repository(True, fake_tags_list)
- revs = ga.get_test_revs(logger, git_obj, tag_name, branch="main")
- self.assertEqual(len(revs), 1)
- self.assertEqual(revs[0].commit, "0f7d5df")
- self.assertEqual(len(revs[0].tags), 2)
- self.assertEqual(revs[0].tags, ['main/10-g0f7d5df/0', 'main/10-g0f7d5df/1'])
- delete_fake_repository(path)
- def test_get_tags_without_valid_remote(self):
- url = 'git://git.yoctoproject.org/poky'
- path, git_obj = create_fake_repository(False, None, False)
- tags = ga.get_tags(git_obj, pattern="yocto-*", url=url)
- """Test for some well established tags (released tags)"""
- self.assertIn("yocto-4.0", tags)
- self.assertIn("yocto-4.1", tags)
- self.assertIn("yocto-4.2", tags)
- delete_fake_repository(path)
- def test_get_tags_without_valid_remote_neither_url(self):
- url = 'git://git.yoctoproject.org/poky'
- path, git_obj = create_fake_repository(False, None, False)
- """Test for some well established tags (released tags)"""
- with self.assertRaises(GitError):
- tags = ga.get_tags(git_obj, pattern="yocto-*")
- delete_fake_repository(path)
- def test_get_tags_without_valid_remote_and_wrong_url(self):
- url = 'git://git.foo.org/bar'
- path, git_obj = create_fake_repository(False, None, False)
- """Test for some well established tags (released tags)"""
- with self.assertRaises(GitError):
- tags = ga.get_tags(git_obj, pattern="yocto-*", url=url)
- delete_fake_repository(path)
|