1
0
mirror of https://gitlab.com/fdroid/fdroidserver.git synced 2024-11-04 14:30:11 +01:00
fdroidserver/tests/vcs.TestCase
2023-04-27 11:34:14 +02:00

104 lines
3.3 KiB
Python
Executable File

#!/usr/bin/env python3
# http://www.drdobbs.com/testing/unit-testing-with-python/240165163
import inspect
import logging
import optparse
import os
import sys
import unittest
from git import Repo
localmodule = os.path.realpath(
os.path.join(os.path.dirname(inspect.getfile(inspect.currentframe())), '..')
)
print('localmodule: ' + localmodule)
if localmodule not in sys.path:
sys.path.insert(0, localmodule)
import fdroidserver.build
import fdroidserver.common
import fdroidserver.metadata
import fdroidserver.scanner
from testcommon import mkdtemp
class VCSTest(unittest.TestCase):
"""For some reason the VCS classes are in fdroidserver/common.py"""
def setUp(self):
logging.basicConfig(level=logging.DEBUG)
self.basedir = os.path.join(localmodule, 'tests')
os.chdir(self.basedir)
self._td = mkdtemp()
self.testdir = self._td.name
def tearDown(self):
self._td.cleanup()
os.chdir(self.basedir)
def test_remote_set_head_can_fail(self):
os.chdir(self.testdir)
# First create an upstream repo with one commit
upstream_repo = Repo.init("upstream_repo")
with open(upstream_repo.working_dir + "/file", 'w') as f:
f.write("Hello World!")
upstream_repo.index.add([upstream_repo.working_dir + "/file"])
upstream_repo.index.commit("initial commit")
commitid = upstream_repo.head.commit.hexsha
# Now clone it once manually, like gitlab runner gitlab-runner sets up a repo during CI
clone1 = Repo.init("clone1")
clone1.create_remote("upstream", "file://" + upstream_repo.working_dir)
clone1.remote("upstream").fetch()
clone1.head.reference = clone1.commit(commitid)
clone1.head.reset(index=True, working_tree=True)
self.assertTrue(clone1.head.is_detached)
# and now we want to use this clone as a source repo for fdroid build
config = {}
os.mkdir("build")
config['sdk_path'] = 'MOCKPATH'
config['ndk_paths'] = {'r10d': os.getenv('ANDROID_NDK_HOME')}
config['java_paths'] = {'fake': 'fake'}
fdroidserver.common.config = config
app = fdroidserver.metadata.App()
app.RepoType = 'git'
app.Repo = clone1.working_dir
app.id = 'com.gpl.rpg.AndorsTrail'
build = fdroidserver.metadata.Build()
build.commit = commitid
build.androidupdate = ['no']
vcs, build_dir = fdroidserver.common.setup_vcs(app)
# force an init of the repo, the remote head error only occurs on the second gotorevision call
vcs.gotorevision(build.commit)
fdroidserver.common.prepare_source(
vcs,
app,
build,
build_dir=build_dir,
srclib_dir="ignore",
extlib_dir="ignore",
)
self.assertTrue(os.path.isfile("build/com.gpl.rpg.AndorsTrail/file"))
if __name__ == "__main__":
os.chdir(os.path.dirname(__file__))
parser = optparse.OptionParser()
parser.add_option(
"-v",
"--verbose",
action="store_true",
default=False,
help="Spew out even more information than normal",
)
(fdroidserver.common.options, args) = parser.parse_args(['--verbose'])
newSuite = unittest.TestSuite()
newSuite.addTest(unittest.makeSuite(VCSTest))
unittest.main(failfast=False)