'
- '\n\ngenerated by GitLab CI Job #%s
'
- % (os.getenv('CI_PROJECT_URL'), os.getenv('CI_JOB_ID'), os.getenv('CI_JOB_ID'))
- )
- try:
- mr = project.mergerequests.create({
- 'source_branch': branch.name,
- 'target_project_id': 36527, # fdroid/fdroidserver
- 'target_branch': 'master',
- 'title': 'update to gradle v' + version,
- 'description': description,
- 'labels': ['fdroid-bot', 'gradle'],
- 'remove_source_branch': True,
- })
- mr.save()
- except gitlab.exceptions.GitlabCreateError as e:
- if e.response_code == 409: # Another open merge request already exists for this source branch
- print(e.error_message)
- else:
- raise e
+p = subprocess.run(['git', '--no-pager', 'diff'])
+errors += p.returncode
+sys.exit(errors)
diff --git a/tests/key-tricks.py b/tests/key-tricks.py
index 7fc0f3ea..a01bf0bf 100755
--- a/tests/key-tricks.py
+++ b/tests/key-tricks.py
@@ -1,9 +1,10 @@
#!/usr/bin/env python3
import os
-import fdroidserver
import shutil
import sys
+
+import fdroidserver
from fdroidserver import common, nightly
if os.getenv('CI') is None:
diff --git a/tests/metadata-rewrite-yml/app.with.special.build.params.yml b/tests/metadata-rewrite-yml/app.with.special.build.params.yml
index 0fc97b65..95c1695c 100644
--- a/tests/metadata-rewrite-yml/app.with.special.build.params.yml
+++ b/tests/metadata-rewrite-yml/app.with.special.build.params.yml
@@ -1,5 +1,5 @@
AntiFeatures:
- - UpstreamNonFree
+ - Tracking
Categories:
- System
License: GPL-3.0-only
diff --git a/tests/metadata/app.with.special.build.params.yml b/tests/metadata/app.with.special.build.params.yml
index d12c713c..c58cadf1 100644
--- a/tests/metadata/app.with.special.build.params.yml
+++ b/tests/metadata/app.with.special.build.params.yml
@@ -1,5 +1,5 @@
AntiFeatures:
- - UpstreamNonFree
+ - Tracking
Categories:
- System
License: GPL-3.0-only
diff --git a/tests/metadata/com.politedroid.yml b/tests/metadata/com.politedroid.yml
index cd474d6c..87d13bcb 100644
--- a/tests/metadata/com.politedroid.yml
+++ b/tests/metadata/com.politedroid.yml
@@ -22,7 +22,6 @@ Builds:
target: android-10
antifeatures:
- KnownVuln
- - UpstreamNonFree
- NonFreeAssets
- versionName: '1.3'
@@ -43,7 +42,6 @@ Builds:
- yes
antifeatures:
- KnownVuln
- - UpstreamNonFree
- NonFreeAssets
ArchivePolicy: 4 versions
diff --git a/tests/metadata/dump/app.with.special.build.params.yaml b/tests/metadata/dump/app.with.special.build.params.yaml
index 9f2c61f6..fae6c9ae 100644
--- a/tests/metadata/dump/app.with.special.build.params.yaml
+++ b/tests/metadata/dump/app.with.special.build.params.yaml
@@ -2,7 +2,7 @@
---
AllowedAPKSigningKeys: []
AntiFeatures:
- UpstreamNonFree: {}
+ Tracking: {}
ArchivePolicy: 0
AuthorEmail: null
AuthorName: null
diff --git a/tests/metadata/dump/com.politedroid.yaml b/tests/metadata/dump/com.politedroid.yaml
index b4d56c3e..01d55b82 100644
--- a/tests/metadata/dump/com.politedroid.yaml
+++ b/tests/metadata/dump/com.politedroid.yaml
@@ -19,7 +19,6 @@ Builds:
antifeatures:
KnownVuln: {}
NonFreeAssets: {}
- UpstreamNonFree: {}
binary: null
build: ''
buildjni: []
@@ -127,7 +126,6 @@ Builds:
antifeatures:
KnownVuln: {}
NonFreeAssets: {}
- UpstreamNonFree: {}
binary: null
build: ''
buildjni: []
diff --git a/tests/openssl-version-check-test.py b/tests/openssl-version-check-test.py
index d4022126..69a1ff59 100755
--- a/tests/openssl-version-check-test.py
+++ b/tests/openssl-version-check-test.py
@@ -6,6 +6,7 @@
# This is used in update.has_known_vulnerability()
import re
+
import requests
# this list was generated using:
diff --git a/tests/repo/entry.json b/tests/repo/entry.json
index 1eb017bc..85b6b14f 100644
--- a/tests/repo/entry.json
+++ b/tests/repo/entry.json
@@ -3,8 +3,8 @@
"version": 20002,
"index": {
"name": "/index-v2.json",
- "sha256": "f0912b64db80168ee807f43ab3470bb709b6659aee05ad63057dcbcd1c97dc5e",
- "size": 55186,
+ "sha256": "94dca5f4398d2a0167bbe69c790cdd66f1bc305ca5e362ee5e3f793e9f88e3cf",
+ "size": 53355,
"numPackages": 11
},
"diffs": {}
diff --git a/tests/repo/index-v1.json b/tests/repo/index-v1.json
index ed1cbcde..03f8f060 100644
--- a/tests/repo/index-v1.json
+++ b/tests/repo/index-v1.json
@@ -244,8 +244,7 @@
"added": 1498176000000,
"antiFeatures": [
"KnownVuln",
- "NonFreeAssets",
- "UpstreamNonFree"
+ "NonFreeAssets"
],
"apkName": "com.politedroid_6.apk",
"hash": "70c2f776a2bac38a58a7d521f96ee0414c6f0fb1de973c3ca8b10862a009247d",
@@ -332,8 +331,7 @@
"added": 1498176000000,
"antiFeatures": [
"KnownVuln",
- "NonFreeAssets",
- "UpstreamNonFree"
+ "NonFreeAssets"
],
"apkName": "com.politedroid_3.apk",
"hash": "665d03d61ebc642289fda697f71a59305b0202b16cafc5ffdae91cbe91f0b25d",
diff --git a/tests/repo/index-v2.json b/tests/repo/index-v2.json
index 96c2cfea..263dffd2 100644
--- a/tests/repo/index-v2.json
+++ b/tests/repo/index-v2.json
@@ -453,49 +453,6 @@
"ro": "Urmărire",
"zh-rCN": "跟踪用户"
}
- },
- "UpstreamNonFree": {
- "description": {
- "de": "Der Originalcode ist nicht völlig quelloffen",
- "en-US": "The upstream source code is not entirely Free",
- "fa": "کد مبدأ بالادستی کاملاً آزاد نیست",
- "ro": "Codul sursa originar nu este în totalitatea lui software liber",
- "zh-rCN": "上游源代码不是完全自由的"
- },
- "icon": {
- "de": {
- "name": "/icons/ic_antifeature_upstreamnonfree.xml",
- "sha256": "06a9af843ff56ecd7a270f98c0b19b3154edf3ffa854e6d50a84ef00d0ce1a86",
- "size": 1442
- },
- "en-US": {
- "name": "/icons/ic_antifeature_upstreamnonfree.xml",
- "sha256": "06a9af843ff56ecd7a270f98c0b19b3154edf3ffa854e6d50a84ef00d0ce1a86",
- "size": 1442
- },
- "fa": {
- "name": "/icons/ic_antifeature_upstreamnonfree.xml",
- "sha256": "06a9af843ff56ecd7a270f98c0b19b3154edf3ffa854e6d50a84ef00d0ce1a86",
- "size": 1442
- },
- "ro": {
- "name": "/icons/ic_antifeature_upstreamnonfree.xml",
- "sha256": "06a9af843ff56ecd7a270f98c0b19b3154edf3ffa854e6d50a84ef00d0ce1a86",
- "size": 1442
- },
- "zh-rCN": {
- "name": "/icons/ic_antifeature_upstreamnonfree.xml",
- "sha256": "06a9af843ff56ecd7a270f98c0b19b3154edf3ffa854e6d50a84ef00d0ce1a86",
- "size": 1442
- }
- },
- "name": {
- "de": "Originalcode nicht-quelloffen",
- "en-US": "Upstream Non-Free",
- "fa": "بالادست ناآزاد",
- "ro": "Surse ne-libere",
- "zh-rCN": "上游代码非自由"
- }
}
},
"categories": {
@@ -627,8 +584,7 @@
"en-US": "1.5"
},
"NonFreeAssets": {},
- "NonFreeNet": {},
- "UpstreamNonFree": {}
+ "NonFreeNet": {}
}
},
"5bdbfa071cca4b8d05ced41d6b28763595d6e8096cca5bbf0f9253c9a2622e5d": {
@@ -756,8 +712,7 @@
"en-US": "1.5"
},
"NonFreeAssets": {},
- "NonFreeNet": {},
- "UpstreamNonFree": {}
+ "NonFreeNet": {}
}
}
}
diff --git a/tests/repo/index.xml b/tests/repo/index.xml
index 4036a6f7..04e8f87d 100644
--- a/tests/repo/index.xml
+++ b/tests/repo/index.xml
@@ -346,7 +346,7 @@ APK is called F-Droid Privileged Extension.
https://github.com/miguelvps/PoliteDroid/issues
1.5
6
- KnownVuln,NoSourceSince,NonFreeAssets,NonFreeNet,UpstreamNonFree
+ KnownVuln,NoSourceSince,NonFreeAssets,NonFreeNet
1.5
6
diff --git a/tests/shared_test_code.py b/tests/shared_test_code.py
index 59f515a7..3e34900b 100644
--- a/tests/shared_test_code.py
+++ b/tests/shared_test_code.py
@@ -20,10 +20,8 @@ import sys
import tempfile
import unittest
import unittest.mock
-
from pathlib import Path
-
GP_FINGERPRINT = 'B7C2EEFD8DAC7806AF67DFCD92EB18126BC08312A7F2D6F3862E46013C7A6135'
diff --git a/tests/test_api.py b/tests/test_api.py
index 6cb9a53b..ba18caa6 100755
--- a/tests/test_api.py
+++ b/tests/test_api.py
@@ -8,8 +8,8 @@ from unittest import mock
import fdroidserver
from fdroidserver import common, signindex
-from .shared_test_code import GP_FINGERPRINT, mkdtemp
+from .shared_test_code import GP_FINGERPRINT, mkdtemp
basedir = Path(__file__).parent
diff --git a/tests/test_build.py b/tests/test_build.py
index f7558c8c..578837ed 100755
--- a/tests/test_build.py
+++ b/tests/test_build.py
@@ -6,15 +6,16 @@ import sys
import tempfile
import textwrap
import unittest
-import yaml
from pathlib import Path
from unittest import mock
-from .shared_test_code import TmpCwd, mkdtemp
+import yaml
import fdroidserver.build
import fdroidserver.common
+from .shared_test_code import TmpCwd, mkdtemp
+
class FakeProcess:
output = 'fake output'
diff --git a/tests/test_checkupdates.py b/tests/test_checkupdates.py
index 4cc76db3..107caf29 100755
--- a/tests/test_checkupdates.py
+++ b/tests/test_checkupdates.py
@@ -1,19 +1,19 @@
#!/usr/bin/env python3
-import git
import os
import platform
import shutil
import tempfile
import time
import unittest
-from unittest import mock
from pathlib import Path
+from unittest import mock
+
+import git
import fdroidserver
import fdroidserver.checkupdates
-
basedir = Path(__file__).parent
diff --git a/tests/test_common.py b/tests/test_common.py
index 1f6ff947..3110b446 100755
--- a/tests/test_common.py
+++ b/tests/test_common.py
@@ -1,40 +1,44 @@
#!/usr/bin/env python3
import difflib
-import git
import glob
+import gzip
import importlib
import json
import logging
import os
import re
-import ruamel.yaml
import shutil
import subprocess
import sys
import tempfile
+import textwrap
import time
import unittest
-import textwrap
-import gzip
from argparse import ArgumentParser
from datetime import datetime, timezone
-from zipfile import BadZipFile, ZipFile
-from unittest import mock
from pathlib import Path
+from unittest import mock
+from zipfile import BadZipFile, ZipFile
+import git
+import ruamel.yaml
import fdroidserver
-import fdroidserver.signindex
import fdroidserver.common
import fdroidserver.metadata
-from .shared_test_code import TmpCwd, mkdtemp, mkdir_testfiles
+import fdroidserver.signindex
+from fdroidserver._yaml import config_dump, yaml, yaml_dumper
from fdroidserver.common import ANTIFEATURES_CONFIG_NAME, CATEGORIES_CONFIG_NAME
-from fdroidserver._yaml import yaml, yaml_dumper, config_dump
-from fdroidserver.exception import FDroidException, VCSException,\
- MetaDataException, VerificationException
+from fdroidserver.exception import (
+ FDroidException,
+ MetaDataException,
+ VCSException,
+ VerificationException,
+)
from fdroidserver.looseversion import LooseVersion
+from .shared_test_code import TmpCwd, mkdir_testfiles, mkdtemp
basedir = Path(__file__).parent
@@ -2415,9 +2419,10 @@ class CommonTest(SetUpTearDownMixin, unittest.TestCase):
@mock.patch('sdkmanager._generate_package_xml', lambda a, b, c: None)
def test_auto_install_ndk_mock_dl(self):
"""Test NDK installs by actually calling sdkmanager"""
- import sdkmanager
import importlib.metadata
+ import sdkmanager
+
sdkmanager_version = LooseVersion(importlib.metadata.version('sdkmanager'))
if sdkmanager_version < LooseVersion('0.6.4'):
raise unittest.SkipTest('needs fdroid sdkmanager >= 0.6.4')
@@ -2779,7 +2784,6 @@ class CommonTest(SetUpTearDownMixin, unittest.TestCase):
'NonFreeDep',
'NonFreeNet',
'Tracking',
- 'UpstreamNonFree',
],
list(antiFeatures.keys()),
)
@@ -2815,6 +2819,46 @@ class CommonTest(SetUpTearDownMixin, unittest.TestCase):
)
self.assertEqual(['en-US'], list(categories['GuardianProject']['name'].keys()))
+ def test_load_localized_config_copy_icon(self):
+ os.chdir(self.testdir)
+ os.mkdir('config')
+ Path('config/categories.yml').write_text('System:\n icon: system.png')
+ source_file = 'config/system.png'
+ Path(source_file).write_text('placeholder')
+ time.sleep(0.01) # ensure reliable failure if mtime isn't preserved
+ fdroidserver.common.load_localized_config(CATEGORIES_CONFIG_NAME, 'repo')
+ dest_file = f'repo/icons/{os.path.basename(source_file)}'
+ self.assertEqual(os.path.getsize(source_file), os.path.getsize(dest_file))
+ self.assertEqual(os.path.getmtime(source_file), os.path.getmtime(dest_file))
+
+ def test_load_localized_config_copy_unchanged(self):
+ """The destination file should only change if the source file did."""
+ os.chdir(self.testdir)
+ os.mkdir('config')
+ Path('config/categories.yml').write_text('System:\n icon: system.png')
+ source_file = 'config/system.png'
+ Path(source_file).write_text('placeholder')
+ fdroidserver.common.load_localized_config(CATEGORIES_CONFIG_NAME, 'repo')
+ delta = 0.01
+ time.sleep(delta) # ensure reliable failure if file isn't preserved
+ fdroidserver.common.load_localized_config(CATEGORIES_CONFIG_NAME, 'repo')
+ dest_file = f'repo/icons/{os.path.basename(source_file)}'
+ self.assertAlmostEqual(
+ os.path.getctime(source_file), os.path.getctime(dest_file), delta=delta
+ )
+
+ def test_load_localized_config_copy_over_dest(self):
+ os.chdir(self.testdir)
+ os.mkdir('config')
+ Path('config/categories.yml').write_text('System:\n icon: system.png')
+ source_file = Path('config/system.png')
+ dest_file = Path(f'repo/icons/{os.path.basename(source_file)}')
+ source_file.write_text('placeholder')
+ dest_file.parent.mkdir(parents=True)
+ dest_file.write_text('different contents')
+ fdroidserver.common.load_localized_config(CATEGORIES_CONFIG_NAME, 'repo')
+ self.assertEqual(os.path.getsize(source_file), os.path.getsize(dest_file))
+
def test_load_localized_config_0_file(self):
os.chdir(self.testdir)
os.mkdir('config')
diff --git a/tests/test_deploy.py b/tests/test_deploy.py
index b821725c..60d157c3 100755
--- a/tests/test_deploy.py
+++ b/tests/test_deploy.py
@@ -11,7 +11,8 @@ from unittest import mock
import git
import fdroidserver
-from .shared_test_code import TmpCwd, mkdtemp, VerboseFalseOptions
+
+from .shared_test_code import TmpCwd, VerboseFalseOptions, mkdtemp
basedir = Path(__file__).parent
diff --git a/tests/test_exception.py b/tests/test_exception.py
index accc6653..01a6cd46 100755
--- a/tests/test_exception.py
+++ b/tests/test_exception.py
@@ -1,6 +1,7 @@
#!/usr/bin/env python3
import unittest
+
import fdroidserver
diff --git a/tests/test_github.py b/tests/test_github.py
index 39514c5d..f30ce0bb 100755
--- a/tests/test_github.py
+++ b/tests/test_github.py
@@ -3,9 +3,10 @@
import unittest
import unittest.mock
-from .shared_test_code import mock_urlopen
import fdroidserver
+from .shared_test_code import mock_urlopen
+
class GithubApiTest(unittest.TestCase):
def test__init(self):
diff --git a/tests/test_gpgsign.py b/tests/test_gpgsign.py
index f73b217e..84634874 100755
--- a/tests/test_gpgsign.py
+++ b/tests/test_gpgsign.py
@@ -5,11 +5,11 @@ import os
import shutil
import tempfile
import unittest
-
-from fdroidserver import common, gpgsign
from pathlib import Path
from unittest.mock import MagicMock, patch
+from fdroidserver import common, gpgsign
+
basedir = Path(__file__).parent
diff --git a/tests/test_gradlew-fdroid b/tests/test_gradlew-fdroid
deleted file mode 100755
index 26d9bf5b..00000000
--- a/tests/test_gradlew-fdroid
+++ /dev/null
@@ -1,75 +0,0 @@
-#!/bin/bash
-
-red='\033[0;31m'
-green='\033[0;32m'
-nocolor='\033[0m'
-
-TEST_VALUE='HELLO WORLD!'
-
-run_test() {
- cd $source_files/$1
- printf "\n${1}:\n"
- if ($basedir/gradlew-fdroid 2>/dev/null || true) | grep -Fo "$2"; then
- printf "${green}passed: $1\n"
- else
- printf "${red}ERROR: $2 not found in $1\n"
- ((exit_value++))
- fi
- printf $nocolor
-}
-
-download_cache_test() {
- if $basedir/gradlew-fdroid helloWorld 2>/dev/null | grep -F "$TEST_VALUE"; then
- printf "${green}passed: $1\n"
- else
- printf "${red}ERROR: \n"
- $basedir/gradlew-fdroid helloWorld
- ((exit_value++))
- fi
- printf $nocolor
-}
-
-exit_value=0
-basedir=$(cd $(dirname $0)/..; pwd)
-source_files=$basedir/tests/source-files
-export https_proxy=127.7.7.7:7 # fake proxy to block downloading
-
-run_test osmandapp/osmand 2.2.1
-run_test com.integreight.onesheeld 3.3
-run_test se.manyver/android 5.5
-run_test yuriykulikov/AlarmClock 5.1.1
-
-printf "\n\nforce test files to have Windows linefeeds:\n"
-tmpdir=`mktemp -d`
-cp -a $source_files/osmandapp $source_files/yuriykulikov $tmpdir/
-awk 'sub("$", "\r")' \
- $source_files/yuriykulikov/AlarmClock/gradle/wrapper/gradle-wrapper.properties \
- > $tmpdir/yuriykulikov/AlarmClock/gradle/wrapper/gradle-wrapper.properties
-awk 'sub("$", "\r")' \
- $source_files/osmandapp/osmand/build.gradle \
- > $tmpdir/osmandapp/osmand/build.gradle
-source_files=$tmpdir
-
-run_test yuriykulikov/AlarmClock 5.1.1
-run_test osmandapp/osmand 2.2.1
-
-cd $tmpdir
-mkdir -p download_cache_test/gradle/wrapper
-cd download_cache_test
-echo 'distributionUrl=https\://services.gradle.org/distributions/gradle-7.3-bin.zip' \
- > gradle/wrapper/gradle-wrapper.properties
-printf "task helloWorld {\n\tdoLast {\n\t\tprintln '$TEST_VALUE'\n\t}\n}" > build.gradle
-
-export GRADLE_VERSION_DIR=$tmpdir/gradle/versions
-mkdir -p $GRADLE_VERSION_DIR
-
-unset https_proxy
-printf "download, unpack, and run: "
-download_cache_test 7.3
-printf "unpack and run: "
-rm -rf $GRADLE_VERSION_DIR/7.3/
-download_cache_test 7.3
-printf "just run: "
-download_cache_test 7.3
-
-exit $exit_value
diff --git a/tests/test_import_subcommand.py b/tests/test_import_subcommand.py
index 05e2c379..530e10fb 100755
--- a/tests/test_import_subcommand.py
+++ b/tests/test_import_subcommand.py
@@ -13,11 +13,11 @@ import git
import requests
import yaml
-from .shared_test_code import TmpCwd, mkdtemp, VerboseFalseOptions
-
import fdroidserver
import fdroidserver.import_subcommand
+from .shared_test_code import TmpCwd, VerboseFalseOptions, mkdtemp
+
basedir = Path(__file__).parent
logging.basicConfig(level=logging.DEBUG)
diff --git a/tests/test_index.py b/tests/test_index.py
index b4973d79..c8ff5cbe 100755
--- a/tests/test_index.py
+++ b/tests/test_index.py
@@ -3,21 +3,22 @@
import copy
import datetime
import glob
-import os
-import unittest
-from pathlib import Path
-import yaml
-import zipfile
-from unittest.mock import patch
-import requests
-import tempfile
import json
+import os
import shutil
+import tempfile
+import unittest
+import zipfile
+from pathlib import Path
+from unittest.mock import patch
+
+import requests
+import yaml
import fdroidserver
from fdroidserver import common, index, publish, signindex, update
-from .shared_test_code import GP_FINGERPRINT, TmpCwd, mkdtemp
+from .shared_test_code import GP_FINGERPRINT, TmpCwd, mkdtemp
basedir = Path(__file__).parent
diff --git a/tests/test_init.py b/tests/test_init.py
index 179f06c7..a038493b 100755
--- a/tests/test_init.py
+++ b/tests/test_init.py
@@ -8,6 +8,7 @@ import unittest
import fdroidserver.common
import fdroidserver.init
+
from .shared_test_code import mkdtemp
basedir = pathlib.Path(__file__).parent
diff --git a/tests/test_install.py b/tests/test_install.py
index b4e404d5..aa239d4d 100755
--- a/tests/test_install.py
+++ b/tests/test_install.py
@@ -3,7 +3,6 @@
import os
import textwrap
import unittest
-
from pathlib import Path
from unittest.mock import Mock, patch
diff --git a/tests/test_integration.py b/tests/test_integration.py
index 76a7e82b..6d757b1e 100755
--- a/tests/test_integration.py
+++ b/tests/test_integration.py
@@ -18,6 +18,7 @@ except ModuleNotFoundError:
from androguard.core.apk import get_apkid
from fdroidserver._yaml import yaml, yaml_dumper
+
from .shared_test_code import mkdir_testfiles
# TODO: port generic tests that use index.xml to index-v2 (test that
diff --git a/tests/test_lint.py b/tests/test_lint.py
index f0bf6b4d..37b7ce95 100755
--- a/tests/test_lint.py
+++ b/tests/test_lint.py
@@ -9,13 +9,13 @@ import unittest
from pathlib import Path
from unittest import mock
-from .shared_test_code import mkdtemp
-
import fdroidserver.common
import fdroidserver.lint
import fdroidserver.metadata
from fdroidserver._yaml import config_dump
+from .shared_test_code import mkdtemp
+
basedir = Path(__file__).parent
@@ -510,7 +510,7 @@ class LintAntiFeaturesTest(unittest.TestCase):
def test_check_antiFeatures(self):
app = fdroidserver.metadata.App()
- app['AntiFeatures'] = ['Ads', 'UpstreamNonFree']
+ app['AntiFeatures'] = ['Ads', 'Tracking']
self.assertEqual([], list(fdroidserver.lint.check_antiFeatures(app)))
def test_check_antiFeatures_fails_one(self):
diff --git a/tests/test_main.py b/tests/test_main.py
index 50fda3e2..68984088 100755
--- a/tests/test_main.py
+++ b/tests/test_main.py
@@ -2,12 +2,13 @@
import os
import pkgutil
+import tempfile
import textwrap
import unittest
-import tempfile
from unittest import mock
import fdroidserver.__main__
+
from .shared_test_code import TmpCwd, TmpPyPath
diff --git a/tests/test_metadata.py b/tests/test_metadata.py
index 8c3f7591..84040024 100755
--- a/tests/test_metadata.py
+++ b/tests/test_metadata.py
@@ -4,22 +4,23 @@ import copy
import io
import os
import random
-import ruamel.yaml
import shutil
-import unittest
import tempfile
import textwrap
+import unittest
from collections import OrderedDict
from pathlib import Path
from unittest import mock
+import ruamel.yaml
+
import fdroidserver
from fdroidserver import metadata
-from fdroidserver.exception import MetaDataException
-from fdroidserver.common import DEFAULT_LOCALE
from fdroidserver._yaml import yaml
-from .shared_test_code import TmpCwd, mkdtemp
+from fdroidserver.common import DEFAULT_LOCALE
+from fdroidserver.exception import MetaDataException
+from .shared_test_code import TmpCwd, mkdtemp
basedir = Path(__file__).parent
@@ -671,7 +672,7 @@ class MetadataTest(unittest.TestCase):
"""Definitions in .yml files should override the localized versions."""
app = metadata.parse_metadata('metadata/app.with.special.build.params.yml')
- self.assertEqual(app['AntiFeatures'], {'UpstreamNonFree': {}})
+ self.assertEqual(app['AntiFeatures'], {'Tracking': {}})
self.assertEqual(49, app['Builds'][-3]['versionCode'])
self.assertEqual(
@@ -960,7 +961,6 @@ class MetadataTest(unittest.TestCase):
- versionCode: 123
antifeatures:
- KnownVuln
- - UpstreamNonFree
- NonFreeAssets
"""
)
@@ -971,11 +971,7 @@ class MetadataTest(unittest.TestCase):
'AntiFeatures': {'Ads': {}},
'Builds': [
{
- 'antifeatures': {
- 'KnownVuln': {},
- 'NonFreeAssets': {},
- 'UpstreamNonFree': {},
- },
+ 'antifeatures': {'KnownVuln': {}, 'NonFreeAssets': {}},
'versionCode': 123,
}
],
@@ -996,7 +992,7 @@ class MetadataTest(unittest.TestCase):
es: 2nd
az: zero
en-US: first
- UpstreamNonFree:
+ Tracking:
NonFreeAssets:
AntiFeatures:
NonFreeDep:
@@ -1018,7 +1014,7 @@ class MetadataTest(unittest.TestCase):
'antifeatures': {
'KnownVuln': {'az': 'zero', 'en-US': 'first', 'es': '2nd'},
'NonFreeAssets': {},
- 'UpstreamNonFree': {},
+ 'Tracking': {},
},
'versionCode': 123,
}
@@ -1872,7 +1868,6 @@ class MetadataTest(unittest.TestCase):
antifeatures:
- KnownVuln
- NonFreeAssets
- - UpstreamNonFree
ArchivePolicy: 4
AutoUpdateMode: Version v%v
diff --git a/tests/test_net.py b/tests/test_net.py
index 581edcfb..beacd9af 100755
--- a/tests/test_net.py
+++ b/tests/test_net.py
@@ -2,16 +2,17 @@
import os
import random
-import requests
import socket
import tempfile
import threading
import time
import unittest
+from pathlib import Path
from unittest.mock import MagicMock, patch
+import requests
+
from fdroidserver import net
-from pathlib import Path
class RetryServer:
diff --git a/tests/test_nightly.py b/tests/test_nightly.py
index 681df96d..fb1614b7 100755
--- a/tests/test_nightly.py
+++ b/tests/test_nightly.py
@@ -2,19 +2,18 @@
import os
import platform
-import requests
import shutil
import subprocess
import tempfile
import time
import unittest
-import yaml
-
from pathlib import Path
from unittest.mock import patch
-from fdroidserver import common, exception, index, nightly
+import requests
+import yaml
+from fdroidserver import common, exception, index, nightly
DEBUG_KEYSTORE = '/u3+7QAAAAIAAAABAAAAAQAPYW5kcm9pZGRlYnVna2V5AAABNYhAuskAAAK8MIICuDAOBgorBgEEASoCEQEBBQAEggKkqRnFlhidQmVff83bsAeewXPIsF0jiymzJnvrnUAQtCK0MV9uZonu37Mrj/qKLn56mf6QcvEoKvpCstZxzftgYYpAHWMVLM+hy2Z707QZEHlY7Ukppt8DItj+dXkeqGt7f8KzOb2AQwDbt9lm1fJb+MefLowTaubtvrLMcKIne43CbCu2D8HyN7RPWpEkVetA2Qgr5W4sa3tIUT80afqo9jzwJjKCspuxY9A1M8EIM3/kvyLo2B9r0cuWwRjYZXJ6gmTYI2ARNz0KQnCZUok14NDg+mZTb1B7AzRfb0lfjbA6grbzuAL+WaEpO8/LgGfuOh7QBZBT498TElOaFfQ9toQWA79wAmrQCm4OoFukpPIy2m/l6VjJSmlK5Q+CMOl/Au7OG1sUUCTvPaIr0XKnsiwDJ7a71n9garnPWHkvuWapSRCzCNgaUoGQjB+fTMJFFrwT8P1aLfM6onc3KNrDStoQZuYe5ngCLlNS56bENkVGvJBfdkboxtHZjqDXXON9jWGSOI527J3o2D5sjSVyx3T9XPrsL4TA/nBtdU+c/+M6aoASZR2VymzAKdMrGfj9kE5GXp8vv2vkJj9+OJ4Jm5yeczocc/Idtojjb1yg+sq1yY8kAQxgezpY1rpgi2jF3tSN01c23DNvAaSJLJX2ZuH8sD40ACc80Y1Qp1nUTdpwBZUeaeNruBwx4PHU8GnC71FwtiUpwNs0OoSl0pgDUJ3ODC5bs8B5QmW1wu1eg7I4mMSmCsNGW6VN3sFcu+WEqnmTxPoZombdFZKxsr2oq359Nn4bJ6Uc9PBz/sXsns7Zx1vND/oK/Jv5Y269UVAMeKX/eGpfnxzagW3tqGbOu12C2p9Azo5VxiU2fG/tmk2PjaG5hV/ywReco7I6C1p8OWM2fwAAAAEABVguNTA5AAAB6TCCAeUwggFOoAMCAQICBE89gTUwDQYJKoZIhvcNAQEFBQAwNzELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0FuZHJvaWQxFjAUBgNVBAMTDUFuZHJvaWQgRGVidWcwHhcNMTIwMjE2MjIyMDM3WhcNNDIwMjA4MjIyMDM3WjA3MQswCQYDVQQGEwJVUzEQMA4GA1UEChMHQW5kcm9pZDEWMBQGA1UEAxMNQW5kcm9pZCBEZWJ1ZzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA3AKU7S7JXhUjEwxWP1/LPHXieh61SaA/+xbpqsPA+yjGz1sAcGAyuG6bjNAVm56pq7nkjJzicX7Wi83nUBo58DEC/quxOLdy0C4PEOSAeTnTT1RJIwMDvOgiL1GFCErvQ7gCH6zuAID/JRFbN6nIkhDjs2DYnSBl7aJJf8wCLc0CAwEAATANBgkqhkiG9w0BAQUFAAOBgQAoq/TJffA0l+ZGf89xndmHdxrO6qi+TzSlByvLZ4eFfCovTh1iO+Edrd5V1yXGLxyyvdsadMAFZT8SaxMrP5xxhJ0nra0APWYLpA96M//auMhQBWPgqPntwgvEZuEH7f0kdItjBJ39yijbG8xfgwid6XqNUo0TDDkp/wNWKpJ9tJe+2PrGw1NAvrgSydoH2j8DI1Eq'
DEBUG_KEYSTORE_KEY_FILE_NAME = (
diff --git a/tests/test_publish.py b/tests/test_publish.py
index cb47bff5..82c670d7 100755
--- a/tests/test_publish.py
+++ b/tests/test_publish.py
@@ -15,17 +15,15 @@ import os
import pathlib
import shutil
import sys
-import unittest
import tempfile
+import unittest
from unittest import mock
-from fdroidserver import publish
-from fdroidserver import common
-from fdroidserver import metadata
-from fdroidserver import signatures
+from fdroidserver import common, metadata, publish, signatures
from fdroidserver._yaml import yaml
from fdroidserver.exception import FDroidException
-from .shared_test_code import mkdtemp, VerboseFalseOptions
+
+from .shared_test_code import VerboseFalseOptions, mkdtemp
basedir = pathlib.Path(__file__).parent
diff --git a/tests/test_rewritemeta.py b/tests/test_rewritemeta.py
index 5ad1b94d..4dcdd03f 100755
--- a/tests/test_rewritemeta.py
+++ b/tests/test_rewritemeta.py
@@ -1,13 +1,14 @@
#!/usr/bin/env python3
import os
-import unittest
import tempfile
import textwrap
+import unittest
from pathlib import Path
from unittest import mock
from fdroidserver import metadata, rewritemeta
+
from .shared_test_code import TmpCwd, mkdtemp
basedir = Path(__file__).parent
@@ -39,7 +40,6 @@ class RewriteMetaTest(unittest.TestCase):
'target': 'android-10',
'antifeatures': {
'KnownVuln': {},
- 'UpstreamNonFree': {},
'NonFreeAssets': {},
},
},
diff --git a/tests/test_scanner.py b/tests/test_scanner.py
index d982ed4f..849476e6 100755
--- a/tests/test_scanner.py
+++ b/tests/test_scanner.py
@@ -26,6 +26,7 @@ import fdroidserver.common
import fdroidserver.exception
import fdroidserver.metadata
import fdroidserver.scanner
+
from .shared_test_code import TmpCwd, mkdtemp, mock_open_to_str
basedir = pathlib.Path(__file__).parent
diff --git a/tests/test_signatures.py b/tests/test_signatures.py
index 603ddf2c..4f7bd105 100755
--- a/tests/test_signatures.py
+++ b/tests/test_signatures.py
@@ -6,9 +6,10 @@ import sys
import unittest
from tempfile import TemporaryDirectory
-from .shared_test_code import TmpCwd
from fdroidserver import common, signatures
+from .shared_test_code import TmpCwd
+
basedir = os.path.dirname(__file__)
diff --git a/tests/test_signindex.py b/tests/test_signindex.py
index 149afb24..21d54585 100755
--- a/tests/test_signindex.py
+++ b/tests/test_signindex.py
@@ -6,11 +6,11 @@ import shutil
import subprocess
import tempfile
import unittest
-
-from fdroidserver import apksigcopier, common, exception, signindex, update
from pathlib import Path
from unittest.mock import patch
+from fdroidserver import apksigcopier, common, exception, signindex, update
+
class Options:
allow_disabled_algorithms = False
diff --git a/tests/test_update.py b/tests/test_update.py
index de39d8fd..623f48cc 100755
--- a/tests/test_update.py
+++ b/tests/test_update.py
@@ -1,7 +1,6 @@
#!/usr/bin/env python3
import copy
-import git
import glob
import hashlib
import json
@@ -12,16 +11,18 @@ import shutil
import string
import subprocess
import sys
+import textwrap
import time
import unittest
-import yaml
import zipfile
-import textwrap
from binascii import hexlify
from datetime import datetime
from pathlib import Path
from unittest import mock
+import git
+import yaml
+
try:
# these were moved in androguard 4.0
from androguard.core.apk import APK
@@ -44,15 +45,16 @@ except ImportError:
except ImportError:
from yaml import Loader as FullLoader
+from PIL import PngImagePlugin
+
import fdroidserver.common
import fdroidserver.exception
import fdroidserver.metadata
import fdroidserver.update
from fdroidserver.common import CATEGORIES_CONFIG_NAME
from fdroidserver.looseversion import LooseVersion
-from .shared_test_code import TmpCwd, mkdtemp
-from PIL import PngImagePlugin
+from .shared_test_code import TmpCwd, mkdtemp
DONATION_FIELDS = ('Donate', 'Liberapay', 'OpenCollective')
@@ -253,6 +255,113 @@ class UpdateTest(unittest.TestCase):
fdroidserver.update.insert_localized_app_metadata(apps)
self.assertEqual('42', apps[app.id]['localized']['en-US']['whatsNew'])
+ def test_fastlane_with_subdir(self):
+ """Test if fastlane in simple one-level subdir is found."""
+ os.chdir(self.testdir)
+ config = dict()
+ fdroidserver.common.fill_config_defaults(config)
+ fdroidserver.update.config = config
+
+ app = fdroidserver.metadata.App()
+ app.id = 'com.example.app'
+ build_dir = f'build/{app.id}'
+ flavor = 'flavor'
+ subdir = 'subproject'
+ apps = {app.id: app}
+ build = fdroidserver.metadata.Build()
+ build.versionCode = 42
+ build.gradle = [flavor]
+ build.subdir = subdir
+ app['Builds'] = [build]
+
+ first_value = 'first'
+ first_dir = Path(f'{build_dir}/src/{flavor}/fastlane/metadata/android/en-US')
+ first_dir.mkdir(parents=True)
+ (first_dir / 'title.txt').write_text(first_value)
+ fdroidserver.update.insert_localized_app_metadata(apps)
+ self.assertEqual(first_value, apps[app.id]['localized']['en-US']['name'])
+
+ second_value = 'second'
+ second_dir = Path(f'{build_dir}/{subdir}/fastlane/metadata/android/en-US')
+ second_dir.mkdir(parents=True)
+ (second_dir / 'title.txt').write_text(second_value)
+ fdroidserver.update.insert_localized_app_metadata(apps)
+ self.assertEqual(second_value, apps[app.id]['localized']['en-US']['name'])
+
+ def test_fastlane_with_schildichat(self):
+ """Test if fastlane is found in this tangle of dirs and symlinks.
+
+ https://github.com/SchildiChat/schildichat-android-next/tree/sc_v0.10.3-ex_25_6_2
+ """
+ os.chdir(self.testdir)
+ config = dict()
+ fdroidserver.common.fill_config_defaults(config)
+ fdroidserver.update.config = config
+
+ app = fdroidserver.metadata.App()
+ app.id = 'chat.schildi.android'
+ build_dir = f'build/{app.id}'
+ flavors = ['fdroid', 'sc', 'default']
+ subdir = 'app'
+ apps = {app.id: app}
+ build = fdroidserver.metadata.Build()
+ build.versionCode = 42
+ build.gradle = flavors
+ build.subdir = subdir
+ app['Builds'] = [build]
+
+ wrong_value = 'wrong'
+ wrong_dir = Path(f'{build_dir}/upstream_infra/fastlane/metadata/android/en-US')
+ wrong_dir.mkdir(parents=True)
+ (wrong_dir / 'title.txt').write_text(wrong_value)
+
+ right_value = 'right'
+ right_dir = Path(f'{build_dir}/metadata/en-US')
+ right_dir.mkdir(parents=True)
+ (right_dir / 'title.txt').write_text(right_value)
+ _fastlane = Path('.fastlane/metadata')
+ _fastlane.mkdir(parents=True)
+ os.symlink('../../metadata', _fastlane / 'android')
+ os.symlink('.fastlane', 'fastlane')
+ fdroidserver.update.insert_localized_app_metadata(apps)
+ self.assertEqual(right_value, apps[app.id]['localized']['en-US']['name'])
+
+ def test_fastlane_with_multi_level_subdir(self):
+ """Test if fastlane in multi-level subdir is found."""
+ os.chdir(self.testdir)
+ config = dict()
+ fdroidserver.common.fill_config_defaults(config)
+ fdroidserver.update.config = config
+
+ app = fdroidserver.metadata.App()
+ app.id = 'org.videolan.vlc'
+ build_dir = f'build/{app.id}'
+ subdir = 'application/app'
+ apps = {app.id: app}
+ build = fdroidserver.metadata.Build()
+ build.versionCode = 42
+ build.gradle = ['yes']
+ build.subdir = subdir
+ app['Builds'] = [build]
+
+ first_value = 'first'
+ first_dir = Path(f'{build_dir}/{subdir}/fastlane/metadata/android/en-US')
+ first_dir.mkdir(parents=True)
+ (first_dir / 'title.txt').write_text(first_value)
+ fdroidserver.update.insert_localized_app_metadata(apps)
+ self.assertEqual(first_value, apps[app.id]['localized']['en-US']['name'])
+
+ # I'm not sure that it is correct behavior for this path to
+ # override the above path, but it is how it is working now. It
+ # seems to me it should be the other way around, but that is
+ # really hard to implement using the current algorithm.
+ second_value = 'second'
+ second_dir = Path(f'{build_dir}/fastlane/metadata/android/en-US')
+ second_dir.mkdir(parents=True)
+ (second_dir / 'title.txt').write_text(second_value)
+ fdroidserver.update.insert_localized_app_metadata(apps)
+ self.assertEqual(second_value, apps[app.id]['localized']['en-US']['name'])
+
def test_name_title_scraping(self):
"""metadata file --> fdroiddata localized files --> fastlane/triple-t in app source --> APK"""
shutil.copytree(basedir, self.testdir, dirs_exist_ok=True)
@@ -1266,7 +1375,7 @@ class UpdateTest(unittest.TestCase):
if apk['packageName'] == 'com.politedroid' and apk['versionCode'] == 3:
antiFeatures = apk.get('antiFeatures')
self.assertTrue('KnownVuln' in antiFeatures)
- self.assertEqual(3, len(antiFeatures))
+ self.assertEqual(2, len(antiFeatures))
foundtest = True
self.assertTrue(foundtest)
diff --git a/tests/test_vcs.py b/tests/test_vcs.py
index 2b640a9e..a007feae 100755
--- a/tests/test_vcs.py
+++ b/tests/test_vcs.py
@@ -7,7 +7,8 @@ from git import Repo
import fdroidserver.common
import fdroidserver.metadata
-from .shared_test_code import mkdtemp, VerboseFalseOptions
+
+from .shared_test_code import VerboseFalseOptions, mkdtemp
class VCSTest(unittest.TestCase):
diff --git a/tests/test_verify.py b/tests/test_verify.py
index f9da9092..e5a2f7c4 100755
--- a/tests/test_verify.py
+++ b/tests/test_verify.py
@@ -6,13 +6,11 @@ import shutil
import sys
import tempfile
import unittest
-
from pathlib import Path
from unittest.mock import patch
from fdroidserver import verify
-
TEST_APP_ENTRY = {
"1539780240.3885746": {
"local": {