mirror of
https://gitlab.com/fdroid/fdroidserver.git
synced 2024-10-05 18:50:09 +02:00
Merge branch 'sort-fdroid-build-all' into 'master'
sort `fdroid build --all` by most recent first See merge request fdroid/fdroidserver!390
This commit is contained in:
commit
167c730ad8
@ -1111,7 +1111,7 @@ def main():
|
|||||||
|
|
||||||
# Read all app and srclib metadata
|
# Read all app and srclib metadata
|
||||||
pkgs = common.read_pkg_args(options.appid, True)
|
pkgs = common.read_pkg_args(options.appid, True)
|
||||||
allapps = metadata.read_metadata(not options.onserver, pkgs)
|
allapps = metadata.read_metadata(not options.onserver, pkgs, sort_by_time=True)
|
||||||
apps = common.read_app_args(options.appid, allapps, True)
|
apps = common.read_app_args(options.appid, allapps, True)
|
||||||
|
|
||||||
for appid, app in list(apps.items()):
|
for appid, app in list(apps.items()):
|
||||||
|
@ -26,6 +26,7 @@ import logging
|
|||||||
import textwrap
|
import textwrap
|
||||||
import io
|
import io
|
||||||
import yaml
|
import yaml
|
||||||
|
from collections import OrderedDict
|
||||||
# use libyaml if it is available
|
# use libyaml if it is available
|
||||||
try:
|
try:
|
||||||
from yaml import CLoader
|
from yaml import CLoader
|
||||||
@ -703,35 +704,50 @@ def read_srclibs():
|
|||||||
srclibs[srclibname] = parse_srclib(metadatapath)
|
srclibs[srclibname] = parse_srclib(metadatapath)
|
||||||
|
|
||||||
|
|
||||||
def read_metadata(xref=True, check_vcs=[]):
|
def read_metadata(xref=True, check_vcs=[], sort_by_time=False):
|
||||||
"""
|
"""Return a list of App instances sorted newest first
|
||||||
Read all metadata. Returns a list of 'app' objects (which are dictionaries as
|
|
||||||
returned by the parse_txt_metadata function.
|
This reads all of the metadata files in a 'data' repository, then
|
||||||
|
builds a list of App instances from those files. The list is
|
||||||
|
sorted based on creation time, newest first. Most of the time,
|
||||||
|
the newer files are the most interesting.
|
||||||
|
|
||||||
|
If there are multiple metadata files for a single appid, then the first
|
||||||
|
file that is parsed wins over all the others, and the rest throw an
|
||||||
|
exception. So the original .txt format is parsed first, at least until
|
||||||
|
newer formats stabilize.
|
||||||
|
|
||||||
check_vcs is the list of packageNames to check for .fdroid.yml in source
|
check_vcs is the list of packageNames to check for .fdroid.yml in source
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# Always read the srclibs before the apps, since they can use a srlib as
|
# Always read the srclibs before the apps, since they can use a srlib as
|
||||||
# their source repository.
|
# their source repository.
|
||||||
read_srclibs()
|
read_srclibs()
|
||||||
|
|
||||||
apps = {}
|
apps = OrderedDict()
|
||||||
|
|
||||||
for basedir in ('metadata', 'tmp'):
|
for basedir in ('metadata', 'tmp'):
|
||||||
if not os.path.exists(basedir):
|
if not os.path.exists(basedir):
|
||||||
os.makedirs(basedir)
|
os.makedirs(basedir)
|
||||||
|
|
||||||
# If there are multiple metadata files for a single appid, then the first
|
metadatafiles = (glob.glob(os.path.join('metadata', '*.txt'))
|
||||||
# file that is parsed wins over all the others, and the rest throw an
|
+ glob.glob(os.path.join('metadata', '*.json'))
|
||||||
# exception. So the original .txt format is parsed first, at least until
|
+ glob.glob(os.path.join('metadata', '*.yml'))
|
||||||
# newer formats stabilize.
|
+ glob.glob('.fdroid.txt')
|
||||||
|
+ glob.glob('.fdroid.json')
|
||||||
|
+ glob.glob('.fdroid.yml'))
|
||||||
|
|
||||||
for metadatapath in sorted(glob.glob(os.path.join('metadata', '*.txt'))
|
if sort_by_time:
|
||||||
+ glob.glob(os.path.join('metadata', '*.json'))
|
entries = ((os.stat(path).st_mtime, path) for path in metadatafiles)
|
||||||
+ glob.glob(os.path.join('metadata', '*.yml'))
|
metadatafiles = []
|
||||||
+ glob.glob('.fdroid.txt')
|
for _ignored, path in sorted(entries, reverse=True):
|
||||||
+ glob.glob('.fdroid.json')
|
metadatafiles.append(path)
|
||||||
+ glob.glob('.fdroid.yml')):
|
else:
|
||||||
|
# most things want the index alpha sorted for stability
|
||||||
|
metadatafiles = sorted(metadatafiles)
|
||||||
|
|
||||||
|
for metadatapath in metadatafiles:
|
||||||
packageName, _ignored = fdroidserver.common.get_extension(os.path.basename(metadatapath))
|
packageName, _ignored = fdroidserver.common.get_extension(os.path.basename(metadatapath))
|
||||||
if packageName in apps:
|
if packageName in apps:
|
||||||
warn_or_exception(_("Found multiple metadata files for {appid}")
|
warn_or_exception(_("Found multiple metadata files for {appid}")
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
# http://www.drdobbs.com/testing/unit-testing-with-python/240165163
|
# http://www.drdobbs.com/testing/unit-testing-with-python/240165163
|
||||||
|
|
||||||
import inspect
|
import inspect
|
||||||
|
import logging
|
||||||
import optparse
|
import optparse
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
@ -46,22 +47,27 @@ class BuildTest(unittest.TestCase):
|
|||||||
self.assertTrue(os.path.exists(path))
|
self.assertTrue(os.path.exists(path))
|
||||||
self.assertTrue(os.path.isfile(path))
|
self.assertTrue(os.path.isfile(path))
|
||||||
|
|
||||||
|
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_force_gradle_build_tools(self):
|
def test_force_gradle_build_tools(self):
|
||||||
testsbase = os.path.join(os.path.dirname(__file__), '..', '.testfiles')
|
testdir = tempfile.mkdtemp(prefix=inspect.currentframe().f_code.co_name, dir=self.tmpdir)
|
||||||
if not os.path.exists(testsbase):
|
|
||||||
os.makedirs(testsbase)
|
|
||||||
testsdir = tempfile.mkdtemp(prefix='test_adapt_gradle', dir=testsbase)
|
|
||||||
shutil.copytree(os.path.join(os.path.dirname(__file__), 'source-files'),
|
shutil.copytree(os.path.join(os.path.dirname(__file__), 'source-files'),
|
||||||
os.path.join(testsdir, 'source-files'))
|
os.path.join(testdir, 'source-files'))
|
||||||
teststring = 'FAKE_VERSION_FOR_TESTING'
|
teststring = 'FAKE_VERSION_FOR_TESTING'
|
||||||
fdroidserver.build.force_gradle_build_tools(testsdir, teststring)
|
fdroidserver.build.force_gradle_build_tools(testdir, teststring)
|
||||||
pattern = re.compile(bytes("buildToolsVersion[\s=]+'%s'\s+" % teststring, 'utf8'))
|
pattern = re.compile(bytes("buildToolsVersion[\s=]+'%s'\s+" % teststring, 'utf8'))
|
||||||
for p in ('source-files/fdroid/fdroidclient/build.gradle',
|
for p in ('source-files/fdroid/fdroidclient/build.gradle',
|
||||||
'source-files/Zillode/syncthing-silk/build.gradle',
|
'source-files/Zillode/syncthing-silk/build.gradle',
|
||||||
'source-files/open-keychain/open-keychain/build.gradle',
|
'source-files/open-keychain/open-keychain/build.gradle',
|
||||||
'source-files/osmandapp/osmand/build.gradle',
|
'source-files/osmandapp/osmand/build.gradle',
|
||||||
'source-files/open-keychain/open-keychain/OpenKeychain/build.gradle'):
|
'source-files/open-keychain/open-keychain/OpenKeychain/build.gradle'):
|
||||||
with open(os.path.join(testsdir, p), 'rb') as f:
|
with open(os.path.join(testdir, p), 'rb') as f:
|
||||||
filedata = f.read()
|
filedata = f.read()
|
||||||
self.assertIsNotNone(pattern.search(filedata))
|
self.assertIsNotNone(pattern.search(filedata))
|
||||||
|
|
||||||
|
@ -96,8 +96,8 @@ class CommonTest(unittest.TestCase):
|
|||||||
print('no build-tools found: ' + build_tools)
|
print('no build-tools found: ' + build_tools)
|
||||||
|
|
||||||
def test_find_java_root_path(self):
|
def test_find_java_root_path(self):
|
||||||
tmptestsdir = tempfile.mkdtemp(prefix='test_find_java_root_path', dir=self.tmpdir)
|
testdir = tempfile.mkdtemp(prefix=inspect.currentframe().f_code.co_name, dir=self.tmpdir)
|
||||||
os.chdir(tmptestsdir)
|
os.chdir(testdir)
|
||||||
|
|
||||||
all_pathlists = [
|
all_pathlists = [
|
||||||
([ # Debian
|
([ # Debian
|
||||||
@ -170,11 +170,11 @@ class CommonTest(unittest.TestCase):
|
|||||||
testint = 99999999
|
testint = 99999999
|
||||||
teststr = 'FAKE_STR_FOR_TESTING'
|
teststr = 'FAKE_STR_FOR_TESTING'
|
||||||
|
|
||||||
tmptestsdir = tempfile.mkdtemp(prefix='test_prepare_sources', dir=self.tmpdir)
|
testdir = tempfile.mkdtemp(prefix=inspect.currentframe().f_code.co_name, dir=self.tmpdir)
|
||||||
shutil.copytree(os.path.join(self.basedir, 'source-files'),
|
shutil.copytree(os.path.join(self.basedir, 'source-files'),
|
||||||
os.path.join(tmptestsdir, 'source-files'))
|
os.path.join(testdir, 'source-files'))
|
||||||
|
|
||||||
testdir = os.path.join(tmptestsdir, 'source-files', 'fdroid', 'fdroidclient')
|
fdroidclient_testdir = os.path.join(testdir, 'source-files', 'fdroid', 'fdroidclient')
|
||||||
|
|
||||||
config = dict()
|
config = dict()
|
||||||
config['sdk_path'] = os.getenv('ANDROID_HOME')
|
config['sdk_path'] = os.getenv('ANDROID_HOME')
|
||||||
@ -201,13 +201,14 @@ class CommonTest(unittest.TestCase):
|
|||||||
def getsrclib(self):
|
def getsrclib(self):
|
||||||
return None
|
return None
|
||||||
|
|
||||||
fdroidserver.common.prepare_source(FakeVcs(), app, build, testdir, testdir, testdir)
|
fdroidserver.common.prepare_source(FakeVcs(), app, build,
|
||||||
|
fdroidclient_testdir, fdroidclient_testdir, fdroidclient_testdir)
|
||||||
|
|
||||||
with open(os.path.join(testdir, 'build.gradle'), 'r') as f:
|
with open(os.path.join(fdroidclient_testdir, 'build.gradle'), 'r') as f:
|
||||||
filedata = f.read()
|
filedata = f.read()
|
||||||
self.assertIsNotNone(re.search("\s+compileSdkVersion %s\s+" % testint, filedata))
|
self.assertIsNotNone(re.search("\s+compileSdkVersion %s\s+" % testint, filedata))
|
||||||
|
|
||||||
with open(os.path.join(testdir, 'AndroidManifest.xml')) as f:
|
with open(os.path.join(fdroidclient_testdir, 'AndroidManifest.xml')) as f:
|
||||||
filedata = f.read()
|
filedata = f.read()
|
||||||
self.assertIsNone(re.search('android:debuggable', filedata))
|
self.assertIsNone(re.search('android:debuggable', filedata))
|
||||||
self.assertIsNotNone(re.search('android:versionName="%s"' % build.versionName, filedata))
|
self.assertIsNotNone(re.search('android:versionName="%s"' % build.versionName, filedata))
|
||||||
@ -215,7 +216,7 @@ class CommonTest(unittest.TestCase):
|
|||||||
|
|
||||||
def test_prepare_sources_refresh(self):
|
def test_prepare_sources_refresh(self):
|
||||||
packageName = 'org.fdroid.ci.test.app'
|
packageName = 'org.fdroid.ci.test.app'
|
||||||
testdir = tempfile.mkdtemp(prefix='test_prepare_sources_refresh', dir=self.tmpdir)
|
testdir = tempfile.mkdtemp(prefix=inspect.currentframe().f_code.co_name, dir=self.tmpdir)
|
||||||
print('testdir', testdir)
|
print('testdir', testdir)
|
||||||
os.chdir(testdir)
|
os.chdir(testdir)
|
||||||
os.mkdir('build')
|
os.mkdir('build')
|
||||||
@ -262,7 +263,7 @@ class CommonTest(unittest.TestCase):
|
|||||||
fdroidserver.signindex.config = config
|
fdroidserver.signindex.config = config
|
||||||
|
|
||||||
sourcedir = os.path.join(self.basedir, 'signindex')
|
sourcedir = os.path.join(self.basedir, 'signindex')
|
||||||
testsdir = tempfile.mkdtemp(prefix='test_signjar', dir=self.tmpdir)
|
testsdir = tempfile.mkdtemp(prefix=inspect.currentframe().f_code.co_name, dir=self.tmpdir)
|
||||||
for f in ('testy.jar', 'guardianproject.jar',):
|
for f in ('testy.jar', 'guardianproject.jar',):
|
||||||
sourcefile = os.path.join(sourcedir, f)
|
sourcefile = os.path.join(sourcedir, f)
|
||||||
testfile = os.path.join(testsdir, f)
|
testfile = os.path.join(testsdir, f)
|
||||||
@ -291,7 +292,7 @@ class CommonTest(unittest.TestCase):
|
|||||||
|
|
||||||
sourceapk = os.path.join(self.basedir, 'urzip.apk')
|
sourceapk = os.path.join(self.basedir, 'urzip.apk')
|
||||||
|
|
||||||
testdir = tempfile.mkdtemp(prefix='test_verify_apks', dir=self.tmpdir)
|
testdir = tempfile.mkdtemp(prefix=inspect.currentframe().f_code.co_name, dir=self.tmpdir)
|
||||||
print('testdir', testdir)
|
print('testdir', testdir)
|
||||||
|
|
||||||
copyapk = os.path.join(testdir, 'urzip-copy.apk')
|
copyapk = os.path.join(testdir, 'urzip-copy.apk')
|
||||||
@ -529,4 +530,4 @@ if __name__ == "__main__":
|
|||||||
|
|
||||||
newSuite = unittest.TestSuite()
|
newSuite = unittest.TestSuite()
|
||||||
newSuite.addTest(unittest.makeSuite(CommonTest))
|
newSuite.addTest(unittest.makeSuite(CommonTest))
|
||||||
unittest.main(failfast=True)
|
unittest.main(failfast=False)
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
# http://www.drdobbs.com/testing/unit-testing-with-python/240165163
|
# http://www.drdobbs.com/testing/unit-testing-with-python/240165163
|
||||||
|
|
||||||
import inspect
|
import inspect
|
||||||
|
import logging
|
||||||
import optparse
|
import optparse
|
||||||
import os
|
import os
|
||||||
import requests
|
import requests
|
||||||
@ -24,8 +25,15 @@ import import_proxy
|
|||||||
class ImportTest(unittest.TestCase):
|
class ImportTest(unittest.TestCase):
|
||||||
'''fdroid import'''
|
'''fdroid import'''
|
||||||
|
|
||||||
|
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_import_gitlab(self):
|
def test_import_gitlab(self):
|
||||||
os.chdir(os.path.dirname(__file__))
|
|
||||||
# FDroidPopen needs some config to work
|
# FDroidPopen needs some config to work
|
||||||
config = dict()
|
config = dict()
|
||||||
fdroidserver.common.fill_config_defaults(config)
|
fdroidserver.common.fill_config_defaults(config)
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
import inspect
|
import inspect
|
||||||
|
import logging
|
||||||
import optparse
|
import optparse
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
@ -31,30 +32,33 @@ GP_FINGERPRINT = 'B7C2EEFD8DAC7806AF67DFCD92EB18126BC08312A7F2D6F3862E46013C7A61
|
|||||||
class IndexTest(unittest.TestCase):
|
class IndexTest(unittest.TestCase):
|
||||||
|
|
||||||
def setUp(self):
|
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)
|
||||||
|
|
||||||
fdroidserver.common.config = None
|
fdroidserver.common.config = None
|
||||||
config = fdroidserver.common.read_config(fdroidserver.common.options)
|
config = fdroidserver.common.read_config(fdroidserver.common.options)
|
||||||
config['jarsigner'] = fdroidserver.common.find_sdk_tools_cmd('jarsigner')
|
config['jarsigner'] = fdroidserver.common.find_sdk_tools_cmd('jarsigner')
|
||||||
fdroidserver.common.config = config
|
fdroidserver.common.config = config
|
||||||
fdroidserver.signindex.config = config
|
fdroidserver.signindex.config = config
|
||||||
|
|
||||||
@staticmethod
|
def test_verify_jar_signature_succeeds(self):
|
||||||
def test_verify_jar_signature_succeeds():
|
source_dir = os.path.join(self.basedir, 'signindex')
|
||||||
basedir = os.path.dirname(__file__)
|
|
||||||
source_dir = os.path.join(basedir, 'signindex')
|
|
||||||
for f in ('testy.jar', 'guardianproject.jar'):
|
for f in ('testy.jar', 'guardianproject.jar'):
|
||||||
testfile = os.path.join(source_dir, f)
|
testfile = os.path.join(source_dir, f)
|
||||||
fdroidserver.common.verify_jar_signature(testfile)
|
fdroidserver.common.verify_jar_signature(testfile)
|
||||||
|
|
||||||
def test_verify_jar_signature_fails(self):
|
def test_verify_jar_signature_fails(self):
|
||||||
basedir = os.path.dirname(__file__)
|
source_dir = os.path.join(self.basedir, 'signindex')
|
||||||
source_dir = os.path.join(basedir, 'signindex')
|
|
||||||
testfile = os.path.join(source_dir, 'unsigned.jar')
|
testfile = os.path.join(source_dir, 'unsigned.jar')
|
||||||
with self.assertRaises(fdroidserver.index.VerificationException):
|
with self.assertRaises(fdroidserver.index.VerificationException):
|
||||||
fdroidserver.common.verify_jar_signature(testfile)
|
fdroidserver.common.verify_jar_signature(testfile)
|
||||||
|
|
||||||
def test_get_public_key_from_jar_succeeds(self):
|
def test_get_public_key_from_jar_succeeds(self):
|
||||||
basedir = os.path.dirname(__file__)
|
source_dir = os.path.join(self.basedir, 'signindex')
|
||||||
source_dir = os.path.join(basedir, 'signindex')
|
|
||||||
for f in ('testy.jar', 'guardianproject.jar'):
|
for f in ('testy.jar', 'guardianproject.jar'):
|
||||||
testfile = os.path.join(source_dir, f)
|
testfile = os.path.join(source_dir, f)
|
||||||
jar = zipfile.ZipFile(testfile)
|
jar = zipfile.ZipFile(testfile)
|
||||||
@ -68,8 +72,7 @@ class IndexTest(unittest.TestCase):
|
|||||||
self.assertTrue(fingerprint == GP_FINGERPRINT)
|
self.assertTrue(fingerprint == GP_FINGERPRINT)
|
||||||
|
|
||||||
def test_get_public_key_from_jar_fails(self):
|
def test_get_public_key_from_jar_fails(self):
|
||||||
basedir = os.path.dirname(__file__)
|
source_dir = os.path.join(self.basedir, 'signindex')
|
||||||
source_dir = os.path.join(basedir, 'signindex')
|
|
||||||
testfile = os.path.join(source_dir, 'unsigned.jar')
|
testfile = os.path.join(source_dir, 'unsigned.jar')
|
||||||
jar = zipfile.ZipFile(testfile)
|
jar = zipfile.ZipFile(testfile)
|
||||||
with self.assertRaises(fdroidserver.index.VerificationException):
|
with self.assertRaises(fdroidserver.index.VerificationException):
|
||||||
@ -226,9 +229,6 @@ class IndexTest(unittest.TestCase):
|
|||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
if os.path.basename(os.getcwd()) != 'tests' and os.path.isdir('tests'):
|
|
||||||
os.chdir('tests')
|
|
||||||
|
|
||||||
parser = optparse.OptionParser()
|
parser = optparse.OptionParser()
|
||||||
parser.add_option("-v", "--verbose", action="store_true", default=False,
|
parser.add_option("-v", "--verbose", action="store_true", default=False,
|
||||||
help="Spew out even more information than normal")
|
help="Spew out even more information than normal")
|
||||||
|
@ -32,8 +32,7 @@ class LintTest(unittest.TestCase):
|
|||||||
self.assertTrue(fdroidserver.lint.check_for_unsupported_metadata_files())
|
self.assertTrue(fdroidserver.lint.check_for_unsupported_metadata_files())
|
||||||
|
|
||||||
tmpdir = os.path.join(localmodule, '.testfiles')
|
tmpdir = os.path.join(localmodule, '.testfiles')
|
||||||
tmptestsdir = tempfile.mkdtemp(prefix='test_check_for_unsupported_metadata_files-',
|
tmptestsdir = tempfile.mkdtemp(prefix=inspect.currentframe().f_code.co_name, dir=tmpdir)
|
||||||
dir=tmpdir)
|
|
||||||
self.assertFalse(fdroidserver.lint.check_for_unsupported_metadata_files(tmptestsdir + '/'))
|
self.assertFalse(fdroidserver.lint.check_for_unsupported_metadata_files(tmptestsdir + '/'))
|
||||||
shutil.copytree(os.path.join(localmodule, 'tests', 'metadata'),
|
shutil.copytree(os.path.join(localmodule, 'tests', 'metadata'),
|
||||||
os.path.join(tmptestsdir, 'metadata'),
|
os.path.join(tmptestsdir, 'metadata'),
|
||||||
|
@ -2,9 +2,13 @@
|
|||||||
|
|
||||||
# http://www.drdobbs.com/testing/unit-testing-with-python/240165163
|
# http://www.drdobbs.com/testing/unit-testing-with-python/240165163
|
||||||
|
|
||||||
|
import glob
|
||||||
import inspect
|
import inspect
|
||||||
|
import logging
|
||||||
import optparse
|
import optparse
|
||||||
import os
|
import os
|
||||||
|
import random
|
||||||
|
import shutil
|
||||||
import sys
|
import sys
|
||||||
import unittest
|
import unittest
|
||||||
import yaml
|
import yaml
|
||||||
@ -23,15 +27,20 @@ import fdroidserver.metadata
|
|||||||
class MetadataTest(unittest.TestCase):
|
class MetadataTest(unittest.TestCase):
|
||||||
'''fdroidserver/metadata.py'''
|
'''fdroidserver/metadata.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_read_metadata(self):
|
def test_read_metadata(self):
|
||||||
|
|
||||||
def _build_yaml_representer(dumper, data):
|
def _build_yaml_representer(dumper, data):
|
||||||
'''Creates a YAML representation of a Build instance'''
|
'''Creates a YAML representation of a Build instance'''
|
||||||
return dumper.represent_dict(data)
|
return dumper.represent_dict(data)
|
||||||
|
|
||||||
testsdir = os.path.dirname(__file__)
|
|
||||||
os.chdir(testsdir)
|
|
||||||
|
|
||||||
self.maxDiff = None
|
self.maxDiff = None
|
||||||
|
|
||||||
# these need to be set to prevent code running on None, only
|
# these need to be set to prevent code running on None, only
|
||||||
@ -58,12 +67,7 @@ class MetadataTest(unittest.TestCase):
|
|||||||
# yaml.dump(frommeta, f, default_flow_style=False)
|
# yaml.dump(frommeta, f, default_flow_style=False)
|
||||||
|
|
||||||
def test_rewrite_yaml_fakeotaupdate(self):
|
def test_rewrite_yaml_fakeotaupdate(self):
|
||||||
|
testdir = tempfile.mkdtemp(prefix=inspect.currentframe().f_code.co_name, dir=self.tmpdir)
|
||||||
# setup/reset test dir if necessary and setup params
|
|
||||||
tmpdir = os.path.join(os.path.dirname(__file__), '..', '.testfiles')
|
|
||||||
if not os.path.exists(tmpdir):
|
|
||||||
os.makedirs(tmpdir)
|
|
||||||
testdir = tempfile.mkdtemp(prefix='test_rewrite_metadata_', dir=tmpdir)
|
|
||||||
fdroidserver.common.config = {'accepted_formats': ['txt', 'yml']}
|
fdroidserver.common.config = {'accepted_formats': ['txt', 'yml']}
|
||||||
|
|
||||||
# rewrite metadata
|
# rewrite metadata
|
||||||
@ -79,12 +83,7 @@ class MetadataTest(unittest.TestCase):
|
|||||||
self.assertEqual(result.read(), orig.read())
|
self.assertEqual(result.read(), orig.read())
|
||||||
|
|
||||||
def test_rewrite_yaml_fdroidclient(self):
|
def test_rewrite_yaml_fdroidclient(self):
|
||||||
|
testdir = tempfile.mkdtemp(prefix=inspect.currentframe().f_code.co_name, dir=self.tmpdir)
|
||||||
# setup/reset test dir if necessary and setup params
|
|
||||||
tmpdir = os.path.join(os.path.dirname(__file__), '..', '.testfiles')
|
|
||||||
if not os.path.exists(tmpdir):
|
|
||||||
os.makedirs(tmpdir)
|
|
||||||
testdir = tempfile.mkdtemp(prefix='test_rewrite_metadata_', dir=tmpdir)
|
|
||||||
fdroidserver.common.config = {'accepted_formats': ['txt', 'yml']}
|
fdroidserver.common.config = {'accepted_formats': ['txt', 'yml']}
|
||||||
|
|
||||||
# rewrite metadata
|
# rewrite metadata
|
||||||
@ -100,12 +99,7 @@ class MetadataTest(unittest.TestCase):
|
|||||||
self.assertEqual(result.read(), orig.read())
|
self.assertEqual(result.read(), orig.read())
|
||||||
|
|
||||||
def test_rewrite_yaml_special_build_params(self):
|
def test_rewrite_yaml_special_build_params(self):
|
||||||
|
testdir = tempfile.mkdtemp(prefix=inspect.currentframe().f_code.co_name, dir=self.tmpdir)
|
||||||
# setup/reset test dir if necessary and setup params
|
|
||||||
tmpdir = os.path.join(os.path.dirname(__file__), '..', '.testfiles')
|
|
||||||
if not os.path.exists(tmpdir):
|
|
||||||
os.makedirs(tmpdir)
|
|
||||||
testdir = tempfile.mkdtemp(prefix='test_rewrite_metadata_', dir=tmpdir)
|
|
||||||
fdroidserver.common.config = {'accepted_formats': ['txt', 'yml']}
|
fdroidserver.common.config = {'accepted_formats': ['txt', 'yml']}
|
||||||
|
|
||||||
# rewrite metadata
|
# rewrite metadata
|
||||||
@ -120,6 +114,31 @@ class MetadataTest(unittest.TestCase):
|
|||||||
self.maxDiff = None
|
self.maxDiff = None
|
||||||
self.assertEqual(result.read(), orig.read())
|
self.assertEqual(result.read(), orig.read())
|
||||||
|
|
||||||
|
def test_read_metadata_sort_by_time(self):
|
||||||
|
testdir = tempfile.mkdtemp(prefix=inspect.currentframe().f_code.co_name, dir=self.tmpdir)
|
||||||
|
metadatadir = os.path.join(testdir, 'metadata')
|
||||||
|
os.makedirs(metadatadir)
|
||||||
|
fdroidserver.common.config = {'accepted_formats': ['txt']}
|
||||||
|
|
||||||
|
randomlist = []
|
||||||
|
randomapps = glob.glob(os.path.join(self.basedir, 'metadata', '*.txt'))
|
||||||
|
random.shuffle(randomapps)
|
||||||
|
i = 1
|
||||||
|
for f in randomapps:
|
||||||
|
shutil.copy(f, metadatadir)
|
||||||
|
new = os.path.join(metadatadir, os.path.basename(f))
|
||||||
|
stat = os.stat(new)
|
||||||
|
os.utime(new, (stat.st_ctime, stat.st_mtime + i))
|
||||||
|
# prepend new item so newest is always first
|
||||||
|
randomlist = [os.path.basename(f)[:-4]] + randomlist
|
||||||
|
i += 1
|
||||||
|
os.chdir(testdir)
|
||||||
|
allapps = fdroidserver.metadata.read_metadata(xref=True, sort_by_time=True)
|
||||||
|
allappids = []
|
||||||
|
for appid, app in allapps.items():
|
||||||
|
allappids.append(appid)
|
||||||
|
self.assertEqual(randomlist, allappids)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
parser = optparse.OptionParser()
|
parser = optparse.OptionParser()
|
||||||
|
@ -11,6 +11,7 @@
|
|||||||
#
|
#
|
||||||
|
|
||||||
import inspect
|
import inspect
|
||||||
|
import logging
|
||||||
import optparse
|
import optparse
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
@ -32,6 +33,14 @@ from fdroidserver.exception import FDroidException
|
|||||||
class PublishTest(unittest.TestCase):
|
class PublishTest(unittest.TestCase):
|
||||||
'''fdroidserver/publish.py'''
|
'''fdroidserver/publish.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_key_alias(self):
|
def test_key_alias(self):
|
||||||
publish.config = {}
|
publish.config = {}
|
||||||
self.assertEqual('a163ec9b', publish.key_alias('com.example.app'))
|
self.assertEqual('a163ec9b', publish.key_alias('com.example.app'))
|
||||||
@ -77,39 +86,35 @@ class PublishTest(unittest.TestCase):
|
|||||||
'com.example.anotherapp',
|
'com.example.anotherapp',
|
||||||
'org.org.org']
|
'org.org.org']
|
||||||
|
|
||||||
with tempfile.TemporaryDirectory() as tmpdir:
|
testdir = tempfile.mkdtemp(prefix=inspect.currentframe().f_code.co_name, dir=self.tmpdir)
|
||||||
orig_cwd = os.getcwd()
|
os.chdir(testdir)
|
||||||
try:
|
with open('config.py', 'w') as f:
|
||||||
os.chdir(tmpdir)
|
pass
|
||||||
with open('config.py', 'w') as f:
|
|
||||||
pass
|
|
||||||
|
|
||||||
publish.store_stats_fdroid_signing_key_fingerprints(appids, indent=2)
|
publish.store_stats_fdroid_signing_key_fingerprints(appids, indent=2)
|
||||||
|
|
||||||
self.maxDiff = None
|
self.maxDiff = None
|
||||||
expected = {
|
expected = {
|
||||||
"com.example.anotherapp": {
|
"com.example.anotherapp": {
|
||||||
"signer": "fa3f6a017541ee7fe797be084b1bcfbf92418a7589ef1f7fdeb46741b6d2e9c3"
|
"signer": "fa3f6a017541ee7fe797be084b1bcfbf92418a7589ef1f7fdeb46741b6d2e9c3"
|
||||||
},
|
},
|
||||||
"com.example.app": {
|
"com.example.app": {
|
||||||
"signer": "d34f678afbaa8f2fa6cc0edd6f0c2d1d2e2e9eb08bea521b24c740806016bff4"
|
"signer": "d34f678afbaa8f2fa6cc0edd6f0c2d1d2e2e9eb08bea521b24c740806016bff4"
|
||||||
},
|
},
|
||||||
"org.org.org": {
|
"org.org.org": {
|
||||||
"signer": "277655a6235bc6b0ef2d824396c51ba947f5ebc738c293d887e7083ff338af82"
|
"signer": "277655a6235bc6b0ef2d824396c51ba947f5ebc738c293d887e7083ff338af82"
|
||||||
},
|
},
|
||||||
"org.test.testy": {
|
"org.test.testy": {
|
||||||
"signer": "6ae5355157a47ddcc3834a71f57f6fb5a8c2621c8e0dc739e9ddf59f865e497c"
|
"signer": "6ae5355157a47ddcc3834a71f57f6fb5a8c2621c8e0dc739e9ddf59f865e497c"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
self.assertEqual(expected, common.load_stats_fdroid_signing_key_fingerprints())
|
self.assertEqual(expected, common.load_stats_fdroid_signing_key_fingerprints())
|
||||||
|
|
||||||
with open('config.py', 'r') as f:
|
with open('config.py', 'r') as f:
|
||||||
self.assertEqual(textwrap.dedent('''\
|
self.assertEqual(textwrap.dedent('''\
|
||||||
|
|
||||||
repo_key_sha256 = "c58460800c7b250a619c30c13b07b7359a43e5af71a4352d86c58ae18c9f6d41"
|
repo_key_sha256 = "c58460800c7b250a619c30c13b07b7359a43e5af71a4352d86c58ae18c9f6d41"
|
||||||
'''), f.read())
|
'''), f.read())
|
||||||
finally:
|
|
||||||
os.chdir(orig_cwd)
|
|
||||||
|
|
||||||
def test_store_and_load_fdroid_signing_key_fingerprints_with_missmatch(self):
|
def test_store_and_load_fdroid_signing_key_fingerprints_with_missmatch(self):
|
||||||
common.config = {}
|
common.config = {}
|
||||||
@ -122,21 +127,14 @@ class PublishTest(unittest.TestCase):
|
|||||||
publish.config['repo_keyalias'] = 'repokey'
|
publish.config['repo_keyalias'] = 'repokey'
|
||||||
publish.config['repo_key_sha256'] = 'bad bad bad bad bad bad bad bad bad bad bad bad'
|
publish.config['repo_key_sha256'] = 'bad bad bad bad bad bad bad bad bad bad bad bad'
|
||||||
|
|
||||||
with tempfile.TemporaryDirectory() as tmpdir:
|
testdir = tempfile.mkdtemp(prefix=inspect.currentframe().f_code.co_name, dir=self.tmpdir)
|
||||||
orig_cwd = os.getcwd()
|
os.chdir(testdir)
|
||||||
try:
|
publish.store_stats_fdroid_signing_key_fingerprints({}, indent=2)
|
||||||
os.chdir(tmpdir)
|
with self.assertRaises(FDroidException):
|
||||||
publish.store_stats_fdroid_signing_key_fingerprints({}, indent=2)
|
common.load_stats_fdroid_signing_key_fingerprints()
|
||||||
with self.assertRaises(FDroidException):
|
|
||||||
common.load_stats_fdroid_signing_key_fingerprints()
|
|
||||||
finally:
|
|
||||||
os.chdir(orig_cwd)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
if os.path.basename(os.getcwd()) != 'tests' and os.path.isdir('tests'):
|
|
||||||
os.chdir('tests')
|
|
||||||
|
|
||||||
parser = optparse.OptionParser()
|
parser = optparse.OptionParser()
|
||||||
parser.add_option("-v", "--verbose", action="store_true", default=False,
|
parser.add_option("-v", "--verbose", action="store_true", default=False,
|
||||||
help="Spew out even more information than normal")
|
help="Spew out even more information than normal")
|
||||||
|
@ -87,7 +87,7 @@ class UpdateTest(unittest.TestCase):
|
|||||||
tmpdir = os.path.join(localmodule, '.testfiles')
|
tmpdir = os.path.join(localmodule, '.testfiles')
|
||||||
if not os.path.exists(tmpdir):
|
if not os.path.exists(tmpdir):
|
||||||
os.makedirs(tmpdir)
|
os.makedirs(tmpdir)
|
||||||
tmptestsdir = tempfile.mkdtemp(prefix='test_insert_triple_t_metadata-', dir=tmpdir)
|
tmptestsdir = tempfile.mkdtemp(prefix=inspect.currentframe().f_code.co_name, dir=tmpdir)
|
||||||
packageDir = os.path.join(tmptestsdir, 'build', packageName)
|
packageDir = os.path.join(tmptestsdir, 'build', packageName)
|
||||||
shutil.copytree(importer, packageDir)
|
shutil.copytree(importer, packageDir)
|
||||||
|
|
||||||
@ -374,7 +374,7 @@ class UpdateTest(unittest.TestCase):
|
|||||||
tmpdir = os.path.join(localmodule, '.testfiles')
|
tmpdir = os.path.join(localmodule, '.testfiles')
|
||||||
if not os.path.exists(tmpdir):
|
if not os.path.exists(tmpdir):
|
||||||
os.makedirs(tmpdir)
|
os.makedirs(tmpdir)
|
||||||
tmptestsdir = tempfile.mkdtemp(prefix='test_process_apk_signed_by_disabled_algorithms-',
|
tmptestsdir = tempfile.mkdtemp(prefix=inspect.currentframe().f_code.co_name,
|
||||||
dir=tmpdir)
|
dir=tmpdir)
|
||||||
print('tmptestsdir', tmptestsdir)
|
print('tmptestsdir', tmptestsdir)
|
||||||
os.chdir(tmptestsdir)
|
os.chdir(tmptestsdir)
|
||||||
@ -504,7 +504,7 @@ class UpdateTest(unittest.TestCase):
|
|||||||
tmpdir = os.path.join(localmodule, '.testfiles')
|
tmpdir = os.path.join(localmodule, '.testfiles')
|
||||||
if not os.path.exists(tmpdir):
|
if not os.path.exists(tmpdir):
|
||||||
os.makedirs(tmpdir)
|
os.makedirs(tmpdir)
|
||||||
tmptestsdir = tempfile.mkdtemp(prefix='test_create_metadata_from_template-',
|
tmptestsdir = tempfile.mkdtemp(prefix=inspect.currentframe().f_code.co_name,
|
||||||
dir=tmpdir)
|
dir=tmpdir)
|
||||||
print('tmptestsdir', tmptestsdir)
|
print('tmptestsdir', tmptestsdir)
|
||||||
os.chdir(tmptestsdir)
|
os.chdir(tmptestsdir)
|
||||||
|
Loading…
Reference in New Issue
Block a user