docker.images/ansible.awx/awx-17.1.0/awx/main/tests/functional/test_python_requirements.py

65 lines
1.8 KiB
Python

import os
import re
import pytest
from django.conf import settings
@pytest.mark.skip(reason="This test needs some love")
def test_env_matches_requirements_txt():
from pip.operations import freeze
def check_is_in(src, dests):
if src not in dests:
print("%s not in" % src)
return False
return True
def skip_line(line):
return (
line == '' or line.strip().startswith('#') or
line.strip().startswith('git') or line.startswith('-e') or
'## The following requirements were added by pip freeze' in line
)
base_dir = settings.BASE_DIR
requirements_path = os.path.join(base_dir, '../', 'requirements/requirements.txt')
reqs_actual = []
xs = freeze.freeze(local_only=True)
for x in xs:
if skip_line(x):
continue
x = x.lower()
(pkg_name, pkg_version) = x.split('==')
reqs_actual.append([pkg_name, pkg_version])
reqs_expected = []
with open(requirements_path) as f:
for line in f:
line = line.partition('#')[0]
line = line.rstrip().lower()
# TODO: process git requiremenst and use egg
if skip_line(line):
continue
'''
Special case pkg_name[pkg_subname]==version
For this case, we strip out [pkg_subname]
'''
(pkg_name, pkg_version) = line.split('==')
pkg_name = re.sub(r'\[.*\]', '', pkg_name)
reqs_expected.append([pkg_name, pkg_version])
not_found = []
for r in reqs_expected:
res = check_is_in(r, reqs_actual)
if res is False:
not_found.append(r)
if len(not_found) > 0:
raise RuntimeError("%s not found in \n\n%s" % (not_found, reqs_actual))