mirror of
https://gitlab.com/fdroid/fdroidserver.git
synced 2024-09-04 03:30:13 +02:00
Back when fdroidserver was built around aapt, that was needed to guarantee that a compatible version of aapt was used. Now, aapt is only optionally used for getting the APK ID, so this was just complicating maintenance.
90 lines
3.4 KiB
Python
Executable File
90 lines
3.4 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 tempfile
|
|
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
|
|
|
|
|
|
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')
|
|
self.tmpdir = os.path.abspath(os.path.join(self.basedir, '..', '.testfiles'))
|
|
if not os.path.exists(self.tmpdir):
|
|
os.makedirs(self.tmpdir)
|
|
os.chdir(self.basedir)
|
|
|
|
def test_remote_set_head_can_fail(self):
|
|
testdir = tempfile.mkdtemp(prefix=inspect.currentframe().f_code.co_name, dir=self.tmpdir)
|
|
os.chdir(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)
|