mirror of
https://gitlab.com/fdroid/fdroidserver.git
synced 2024-11-19 21:30:10 +01:00
b7901952a1
This should not change the logic at all, just make the loop runs into standalone functions.
163 lines
7.2 KiB
Python
Executable File
163 lines
7.2 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
import inspect
|
|
import logging
|
|
import optparse
|
|
import os
|
|
import sys
|
|
import tempfile
|
|
import unittest
|
|
from unittest import mock
|
|
|
|
localmodule = os.path.realpath(
|
|
os.path.join(os.path.dirname(inspect.getfile(inspect.currentframe())), '..'))
|
|
if localmodule not in sys.path:
|
|
sys.path.insert(0, localmodule)
|
|
|
|
import fdroidserver.common
|
|
import fdroidserver.server
|
|
from testcommon import TmpCwd
|
|
|
|
|
|
class ServerTest(unittest.TestCase):
|
|
'''fdroidserver/server.py'''
|
|
|
|
def setUp(self):
|
|
logging.basicConfig(level=logging.DEBUG)
|
|
self.basedir = os.path.join(localmodule, 'tests')
|
|
|
|
fdroidserver.server.options = mock.Mock()
|
|
fdroidserver.server.config = {}
|
|
|
|
def test_update_serverwebroot_make_cur_version_link(self):
|
|
|
|
# setup parameters for this test run
|
|
fdroidserver.server.options.no_chcksum = True
|
|
fdroidserver.server.options.identity_file = None
|
|
fdroidserver.server.options.verbose = False
|
|
fdroidserver.server.options.quiet = True
|
|
fdroidserver.server.options.identity_file = None
|
|
fdroidserver.server.config['make_current_version_link'] = True
|
|
serverwebroot = "example.com:/var/www/fdroid"
|
|
repo_section = 'repo'
|
|
|
|
# setup function for asserting subprocess.call invocations
|
|
call_iteration = 0
|
|
|
|
def update_server_webroot_call(cmd):
|
|
nonlocal call_iteration
|
|
if call_iteration == 0:
|
|
self.assertListEqual(cmd, ['rsync',
|
|
'--archive',
|
|
'--delete-after',
|
|
'--safe-links',
|
|
'--quiet',
|
|
'--exclude', 'repo/index.xml',
|
|
'--exclude', 'repo/index.jar',
|
|
'--exclude', 'repo/index-v1.jar',
|
|
'repo',
|
|
'example.com:/var/www/fdroid'])
|
|
elif call_iteration == 1:
|
|
self.assertListEqual(cmd, ['rsync',
|
|
'--archive',
|
|
'--delete-after',
|
|
'--safe-links',
|
|
'--quiet',
|
|
'repo',
|
|
serverwebroot])
|
|
elif call_iteration == 2:
|
|
self.assertListEqual(cmd, ['rsync',
|
|
'--archive',
|
|
'--delete-after',
|
|
'--safe-links',
|
|
'--quiet',
|
|
'Sym.apk',
|
|
'Sym.apk.asc',
|
|
'Sym.apk.sig',
|
|
'example.com:/var/www/fdroid'])
|
|
else:
|
|
self.fail('unexpected subprocess.call invocation')
|
|
call_iteration += 1
|
|
return 0
|
|
|
|
with tempfile.TemporaryDirectory() as tmpdir, TmpCwd(tmpdir):
|
|
os.mkdir('repo')
|
|
os.symlink('repo/com.example.sym.apk', 'Sym.apk')
|
|
os.symlink('repo/com.example.sym.apk.asc', 'Sym.apk.asc')
|
|
os.symlink('repo/com.example.sym.apk.sig', 'Sym.apk.sig')
|
|
with mock.patch('subprocess.call', side_effect=update_server_webroot_call):
|
|
fdroidserver.server.update_serverwebroot(serverwebroot,
|
|
repo_section)
|
|
self.assertEqual(call_iteration, 3, 'expected 3 invocations of subprocess.call')
|
|
|
|
def test_update_serverwebroot_with_id_file(self):
|
|
|
|
# setup parameters for this test run
|
|
fdroidserver.server.options.no_chcksum = False
|
|
fdroidserver.server.options.verbose = True
|
|
fdroidserver.server.options.quiet = False
|
|
fdroidserver.server.options.identity_file = None
|
|
fdroidserver.server.config['identity_file'] = './id_rsa'
|
|
fdroidserver.server.config['make_current_version_link'] = False
|
|
serverwebroot = "example.com:/var/www/fdroid"
|
|
repo_section = 'archive'
|
|
|
|
# setup function for asserting subprocess.call invocations
|
|
call_iteration = 0
|
|
|
|
def update_server_webroot_call(cmd):
|
|
nonlocal call_iteration
|
|
if call_iteration == 0:
|
|
self.assertListEqual(cmd, ['rsync',
|
|
'--archive',
|
|
'--delete-after',
|
|
'--safe-links',
|
|
'--verbose',
|
|
'-e',
|
|
'ssh -oBatchMode=yes -oIdentitiesOnly=yes -i '
|
|
+ fdroidserver.server.config['identity_file'],
|
|
'--exclude', 'archive/index.xml',
|
|
'--exclude', 'archive/index.jar',
|
|
'--exclude', 'archive/index-v1.jar',
|
|
'archive',
|
|
serverwebroot])
|
|
elif call_iteration == 1:
|
|
self.assertListEqual(cmd, ['rsync',
|
|
'--archive',
|
|
'--delete-after',
|
|
'--safe-links',
|
|
'--verbose',
|
|
'-e',
|
|
'ssh -oBatchMode=yes -oIdentitiesOnly=yes -i '
|
|
+ fdroidserver.server.config['identity_file'],
|
|
'archive',
|
|
serverwebroot])
|
|
else:
|
|
self.fail('unexpected subprocess.call invocation')
|
|
call_iteration += 1
|
|
return 0
|
|
|
|
with mock.patch('subprocess.call', side_effect=update_server_webroot_call):
|
|
fdroidserver.server.update_serverwebroot(serverwebroot,
|
|
repo_section)
|
|
self.assertEqual(call_iteration, 2, 'expected 2 invocations of subprocess.call')
|
|
|
|
@unittest.skipIf(not os.getenv('VIRUSTOTAL_API_KEY'), 'VIRUSTOTAL_API_KEY is not set')
|
|
def test_upload_to_virustotal(self):
|
|
fdroidserver.server.options.verbose = True
|
|
virustotal_apikey = os.getenv('VIRUSTOTAL_API_KEY')
|
|
fdroidserver.server.upload_to_virustotal('repo', virustotal_apikey)
|
|
|
|
|
|
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(ServerTest))
|
|
unittest.main(failfast=False)
|