Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/certbot/certbot.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'tests/modification-check.py')
-rwxr-xr-xtests/modification-check.py124
1 files changed, 124 insertions, 0 deletions
diff --git a/tests/modification-check.py b/tests/modification-check.py
new file mode 100755
index 000000000..e00994b04
--- /dev/null
+++ b/tests/modification-check.py
@@ -0,0 +1,124 @@
+#!/usr/bin/env python
+
+from __future__ import print_function
+
+import os
+import subprocess
+import sys
+import tempfile
+import shutil
+try:
+ from urllib.request import urlretrieve
+except ImportError:
+ from urllib import urlretrieve
+
+def find_repo_path():
+ return os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
+
+# We do not use filecmp.cmp to take advantage of universal newlines
+# handling in open() for Python 3.x and be insensitive to CRLF/LF when run on Windows.
+# As a consequence, this function will not work correctly if executed by Python 2.x on Windows.
+# But it will work correctly on Linux for any version, because every file tested will be LF.
+def compare_files(path_1, path_2):
+ l1 = l2 = True
+ with open(path_1, 'r') as f1, open(path_2, 'r') as f2:
+ line = 1
+ while l1 and l2:
+ line += 1
+ l1 = f1.readline()
+ l2 = f2.readline()
+ if l1 != l2:
+ print('---')
+ print((
+ 'While comparing {0} (1) and {1} (2), a difference was found at line {2}:'
+ .format(os.path.basename(path_1), os.path.basename(path_2), line)))
+ print('(1): {0}'.format(repr(l1)))
+ print('(2): {0}'.format(repr(l2)))
+ print('---')
+ return False
+
+ return True
+
+def validate_scripts_content(repo_path, temp_cwd):
+ errors = False
+
+ if not compare_files(
+ os.path.join(repo_path, 'certbot-auto'),
+ os.path.join(repo_path, 'letsencrypt-auto')):
+ print('Root certbot-auto and letsencrypt-auto differ.')
+ errors = True
+ else:
+ shutil.copyfile(
+ os.path.join(repo_path, 'certbot-auto'),
+ os.path.join(temp_cwd, 'local-auto'))
+ shutil.copy(os.path.normpath(os.path.join(
+ repo_path,
+ 'letsencrypt-auto-source/pieces/fetch.py')), temp_cwd)
+
+ # Compare file against current version in the target branch
+ branch = os.environ.get('TRAVIS_BRANCH', 'master')
+ url = (
+ 'https://raw.githubusercontent.com/certbot/certbot/{0}/certbot-auto'
+ .format(branch))
+ urlretrieve(url, os.path.join(temp_cwd, 'certbot-auto'))
+
+ if compare_files(
+ os.path.join(temp_cwd, 'certbot-auto'),
+ os.path.join(temp_cwd, 'local-auto')):
+ print('Root *-auto were unchanged')
+ else:
+ # Compare file against the latest released version
+ latest_version = subprocess.check_output(
+ [sys.executable, 'fetch.py', '--latest-version'], cwd=temp_cwd)
+ subprocess.call(
+ [sys.executable, 'fetch.py', '--le-auto-script',
+ 'v{0}'.format(latest_version.decode().strip())], cwd=temp_cwd)
+ if compare_files(
+ os.path.join(temp_cwd, 'letsencrypt-auto'),
+ os.path.join(temp_cwd, 'local-auto')):
+ print('Root *-auto were updated to the latest version.')
+ else:
+ print('Root *-auto have unexpected changes.')
+ errors = True
+
+ return errors
+
+def main():
+ repo_path = find_repo_path()
+ temp_cwd = tempfile.mkdtemp()
+ errors = False
+
+ try:
+ errors = validate_scripts_content(repo_path, temp_cwd)
+
+ shutil.copyfile(
+ os.path.normpath(os.path.join(repo_path, 'letsencrypt-auto-source/letsencrypt-auto')),
+ os.path.join(temp_cwd, 'original-lea')
+ )
+ subprocess.call([sys.executable, os.path.normpath(os.path.join(
+ repo_path, 'letsencrypt-auto-source/build.py'))])
+ shutil.copyfile(
+ os.path.normpath(os.path.join(repo_path, 'letsencrypt-auto-source/letsencrypt-auto')),
+ os.path.join(temp_cwd, 'build-lea')
+ )
+ shutil.copyfile(
+ os.path.join(temp_cwd, 'original-lea'),
+ os.path.normpath(os.path.join(repo_path, 'letsencrypt-auto-source/letsencrypt-auto'))
+ )
+
+ if not compare_files(
+ os.path.join(temp_cwd, 'original-lea'),
+ os.path.join(temp_cwd, 'build-lea')):
+ print('Script letsencrypt-auto-source/letsencrypt-auto '
+ 'doesn\'t match output of build.py.')
+ errors = True
+ else:
+ print('Script letsencrypt-auto-source/letsencrypt-auto matches output of build.py.')
+ finally:
+ shutil.rmtree(temp_cwd)
+
+ return errors
+
+if __name__ == '__main__':
+ if main():
+ sys.exit(1)