Skip to content

Commit 83f0fd2

Browse files
authored
Merge pull request #6 from sclorg/support_check_envs
Add support for check_envs_set
2 parents 3501289 + d5261ca commit 83f0fd2

File tree

5 files changed

+139
-4
lines changed

5 files changed

+139
-4
lines changed

.pre-commit-config.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ repos:
1515
- id: trailing-whitespace
1616
- id: flake8
1717
args:
18-
- --max-line-length=100
18+
- --max-line-length=120
1919
- repo: https://github.com/pre-commit/mirrors-mypy
2020
rev: v0.711
2121
hooks:

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ build-test:
1414
test:
1515
cd tests && PYTHONPATH=$(CURDIR) pytest --color=yes -v --showlocals
1616

17-
test-in-container:
17+
test-in-container: build-test
1818
$(PODMAN) run --rm --net=host -e DEPLOYMENT=test ${TEST_IMAGE_NAME}
1919

2020
clean:

README.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ class TestDummyImage(object):
3434

3535
* [x] ct_cleanup
3636
* [ ] ct_enable_cleanup
37-
* [ ] ct_check_envs_set
37+
* [x] ct_check_envs_set
3838
* [x] ct_get_cip
3939
* [x] ct_get_cid
4040
* [x] ct_wait_for_cid
@@ -69,7 +69,6 @@ class TestDummyImage(object):
6969
* [ ] ct_clone_git_repository
7070
* [ ] ct_show_resources
7171
* [ ] ct_s2i_multistage_build
72-
* [ ]
7372

7473

7574
## OpenShift tests

container_ci_suite/api.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424

2525
import os
2626
import logging
27+
import re
2728
import time
2829
import subprocess
2930
import shutil
@@ -416,3 +417,34 @@ def doc_content_old(self):
416417

417418
def test_response(self):
418419
pass
420+
421+
def test_check_exec_env_vars(self, env_filter: str = "^X_SCLS=|/opt/rh|/opt/app-root"):
422+
check_envs = DockerCLIWrapper.docker_run_command(f'--rm {self.image_name} /bin/bash -c env')
423+
logger.debug(f"Run envs {check_envs}")
424+
self.create_container(cid_file="exec_env_vars", container_args="bash -c 'sleep 1000'")
425+
loop_envs = DockerCLIWrapper.run_docker_command(f"exec {self.get_cid_file(self.cid_file)} env")
426+
self.test_check_envs_set(env_filter=env_filter, check_envs=check_envs, loop_envs=loop_envs)
427+
428+
def test_check_envs_set(self, env_filter: str, check_envs: str, loop_envs: str, env_format="VALUE"):
429+
fields_to_check: List = [
430+
x for x in loop_envs.split('\n') if re.findall(env_filter, x) and not x.startswith("PWD=")
431+
]
432+
for field in fields_to_check:
433+
var_name, stripped = field.split('=', 2)
434+
filtered_envs = [x for x in check_envs.split('\n') if x.startswith(f"{var_name}=")]
435+
if not filtered_envs:
436+
logger.error(f"{var_name} not found during 'docker exec'")
437+
return False
438+
filter_envs = ''.join(filtered_envs)
439+
for value in stripped.split(':'):
440+
# If the value checked does not go through env_filter we do not care about it
441+
ret = re.findall(env_filter, value)
442+
if not ret:
443+
continue
444+
new_env = env_format.replace('VALUE', value)
445+
find_env = re.findall(rf"{new_env}", filter_envs)
446+
if not find_env:
447+
logger.error(f"Value {value} is missing from variable {var_name}")
448+
logger.error(filtered_envs)
449+
return False
450+
return True

tests/test_api.py

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,3 +64,107 @@ def test_s2i_build_from_df(self, app_path, s2i_args, src_image, dest_image, df):
6464
dst_image=dest_image,
6565
)
6666
assert generated_df == df
67+
68+
def test_check_envs_set(self):
69+
run_envs = """MANPATH=/opt/rh/rh-ruby26/root/usr/local/share/man:/opt/rh/rh-ruby26/root/usr/share/man:/opt/rh/rh-nodejs14/root/usr/share/man:
70+
APP_ROOT=/opt/app-root
71+
NODEJS_SCL=rh-nodejs14
72+
X_SCLS=rh-nodejs14 rh-ruby26
73+
LD_LIBRARY_PATH=/opt/rh/rh-ruby26/root/usr/local/lib64:/opt/rh/rh-ruby26/root/usr/lib64:/opt/rh/rh-nodejs14/root/usr/lib64
74+
PATH=/opt/rh/rh-ruby26/root/usr/local/bin:/opt/rh/rh-ruby26/root/usr/bin:/opt/rh/rh-nodejs14/root/usr/bin:/opt/app-root/src/bin:/opt/app-root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
75+
STI_SCRIPTS_URL=image:///usr/libexec/s2i
76+
PWD=/opt/app-root/src
77+
STI_SCRIPTS_PATH=/usr/libexec/s2i
78+
IMAGE_NAME=rhscl/ruby-26-rhel7
79+
HOME=/opt/app-root/src
80+
RUBY_SCL=rh-ruby26
81+
XDG_DATA_DIRS=/opt/rh/rh-ruby26/root/usr/local/share:/opt/rh/rh-ruby26/root/usr/share:/usr/local/share:/usr/share
82+
PKG_CONFIG_PATH=/opt/rh/rh-ruby26/root/usr/local/lib64/pkgconfig:/opt/rh/rh-ruby26/root/usr/lib64/pkgconfig
83+
RUBY_VERSION=2.6"""
84+
exec_envs = """PATH=/opt/rh/rh-ruby26/root/usr/local/bin:/opt/rh/rh-ruby26/root/usr/bin:/opt/rh/rh-nodejs14/root/usr/bin:/opt/app-root/src/bin:/opt/app-root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
85+
SUMMARY=Platform for building and running Ruby 2.6 applications
86+
STI_SCRIPTS_URL=image:///usr/libexec/s2i
87+
STI_SCRIPTS_PATH=/usr/libexec/s2i
88+
APP_ROOT=/opt/app-root
89+
HOME=/opt/app-root/src
90+
BASH_ENV=/opt/app-root/etc/scl_enable
91+
ENV=/opt/app-root/etc/scl_enable
92+
PROMPT_COMMAND=. /opt/app-root/etc/scl_enable
93+
NODEJS_SCL=rh-nodejs14
94+
RUBY_SCL=rh-ruby26
95+
IMAGE_NAME=rhscl/ruby-26-rhel7
96+
LD_LIBRARY_PATH=/opt/rh/rh-ruby26/root/usr/local/lib64:/opt/rh/rh-ruby26/root/usr/lib64:/opt/rh/rh-nodejs14/root/usr/lib64
97+
X_SCLS=rh-nodejs14 rh-ruby26
98+
MANPATH=/opt/rh/rh-ruby26/root/usr/local/share/man:/opt/rh/rh-ruby26/root/usr/share/man:/opt/rh/rh-nodejs14/root/usr/share/man:
99+
XDG_DATA_DIRS=/opt/rh/rh-ruby26/root/usr/local/share:/opt/rh/rh-ruby26/root/usr/share:/usr/local/share:/usr/share
100+
PKG_CONFIG_PATH=/opt/rh/rh-ruby26/root/usr/local/lib64/pkgconfig:/opt/rh/rh-ruby26/root/usr/lib64/pkgconfig
101+
"""
102+
ccs = ContainerCISuite(image_name="f32/nodejs:12")
103+
ccs.test_check_envs_set(env_filter="^X_SCLS=|/opt/rh|/opt/app-root", check_envs=exec_envs, loop_envs=run_envs)
104+
105+
def test_check_envs_set_home_not_in_docker_exec(self):
106+
run_envs = """MANPATH=/opt/rh/rh-ruby26/root/usr/local/share/man:/opt/rh/rh-ruby26/root/usr/share/man:/opt/rh/rh-nodejs14/root/usr/share/man:
107+
APP_ROOT=/opt/app-root
108+
X_SCLS=rh-nodejs14 rh-ruby26
109+
LD_LIBRARY_PATH=/opt/rh/rh-ruby26/root/usr/local/lib64:/opt/rh/rh-ruby26/root/usr/lib64:/opt/rh/rh-nodejs14/root/usr/lib64
110+
PATH=/opt/rh/rh-ruby26/root/usr/local/bin:/opt/rh/rh-ruby26/root/usr/bin:/opt/rh/rh-nodejs14/root/usr/bin:/opt/app-root/src/bin:/opt/app-root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
111+
STI_SCRIPTS_URL=image:///usr/libexec/s2i
112+
STI_SCRIPTS_PATH=/usr/libexec/s2i
113+
HOME=/opt/app-root/src
114+
XDG_DATA_DIRS=/opt/rh/rh-ruby26/root/usr/local/share:/opt/rh/rh-ruby26/root/usr/share:/usr/local/share:/usr/share
115+
PKG_CONFIG_PATH=/opt/rh/rh-ruby26/root/usr/local/lib64/pkgconfig:/opt/rh/rh-ruby26/root/usr/lib64/pkgconfig
116+
RUBY_VERSION=2.6"""
117+
exec_envs = """PATH=/opt/rh/rh-ruby26/root/usr/local/bin:/opt/rh/rh-ruby26/root/usr/bin:/opt/rh/rh-nodejs14/root/usr/bin:/opt/app-root/src/bin:/opt/app-root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
118+
STI_SCRIPTS_URL=image:///usr/libexec/s2i
119+
STI_SCRIPTS_PATH=/usr/libexec/s2i
120+
APP_ROOT=/opt/app-root
121+
BASH_ENV=/opt/app-root/etc/scl_enable
122+
ENV=/opt/app-root/etc/scl_enable
123+
PROMPT_COMMAND=. /opt/app-root/etc/scl_enable
124+
LD_LIBRARY_PATH=/opt/rh/rh-ruby26/root/usr/local/lib64:/opt/rh/rh-ruby26/root/usr/lib64:/opt/rh/rh-nodejs14/root/usr/lib64
125+
X_SCLS=rh-nodejs14 rh-ruby26
126+
MANPATH=/opt/rh/rh-ruby26/root/usr/local/share/man:/opt/rh/rh-ruby26/root/usr/share/man:/opt/rh/rh-nodejs14/root/usr/share/man:
127+
XDG_DATA_DIRS=/opt/rh/rh-ruby26/root/usr/local/share:/opt/rh/rh-ruby26/root/usr/share:/usr/local/share:/usr/share
128+
PKG_CONFIG_PATH=/opt/rh/rh-ruby26/root/usr/local/lib64/pkgconfig:/opt/rh/rh-ruby26/root/usr/lib64/pkgconfig
129+
"""
130+
ccs = ContainerCISuite(image_name="f32/nodejs:12")
131+
ret = ccs.test_check_envs_set(
132+
env_filter="^X_SCLS=|/opt/rh|/opt/app-root",
133+
check_envs=exec_envs,
134+
loop_envs=run_envs
135+
)
136+
assert not ret
137+
138+
def test_check_envs_set_not_in_run_envs_not_path(self):
139+
run_envs = """MANPATH=/opt/rh/rh-ruby26/root/usr/local/share/man:/opt/rh/rh-ruby26/root/usr/share/man:/opt/rh/rh-nodejs14/root/usr/share/man:
140+
APP_ROOT=/opt/app-root
141+
X_SCLS=rh-nodejs14 rh-ruby26
142+
LD_LIBRARY_PATH=/opt/rh/rh-ruby26/root/usr/local/lib64:/opt/rh/rh-ruby26/root/usr/lib64:/opt/rh/rh-nodejs14/root/usr/lib64
143+
PATH=/opt/rh/rh-ruby26/root/usr/local/bin:/opt/rh/rh-ruby26/root/usr/bin:/opt/rh/rh-nodejs14/root/usr/bin:/opt/app-root/src/bin:/opt/app-root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
144+
STI_SCRIPTS_URL=image:///usr/libexec/s2i
145+
STI_SCRIPTS_PATH=/usr/libexec/s2i
146+
HOME=/opt/app-root/src
147+
XDG_DATA_DIRS=/opt/rh/rh-ruby26/root/usr/local/share:/opt/rh/rh-ruby26/root/usr/share:/usr/local/share:/usr/share
148+
PKG_CONFIG_PATH=/opt/rh/rh-ruby26/root/usr/local/lib64/pkgconfig:/opt/rh/rh-ruby26/root/usr/lib64/pkgconfig
149+
RUBY_VERSION=2.6"""
150+
exec_envs = """PATH=/opt/rh/rh-ruby26/root/usr/local/bin:/opt/rh/rh-nodejs14/root/usr/bin:/opt/app-root/src/bin:/opt/app-root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
151+
STI_SCRIPTS_URL=image:///usr/libexec/s2i
152+
STI_SCRIPTS_PATH=/usr/libexec/s2i
153+
APP_ROOT=/opt/app-root
154+
BASH_ENV=/opt/app-root/etc/scl_enable
155+
ENV=/opt/app-root/etc/scl_enable
156+
PROMPT_COMMAND=. /opt/app-root/etc/scl_enable
157+
LD_LIBRARY_PATH=/opt/rh/rh-ruby26/root/usr/local/lib64:/opt/rh/rh-ruby26/root/usr/lib64:/opt/rh/rh-nodejs14/root/usr/lib64
158+
X_SCLS=rh-nodejs14 rh-ruby26
159+
HOME=/opt/app-root/src
160+
MANPATH=/opt/rh/rh-ruby26/root/usr/local/share/man:/opt/rh/rh-ruby26/root/usr/share/man:/opt/rh/rh-nodejs14/root/usr/share/man:
161+
XDG_DATA_DIRS=/opt/rh/rh-ruby26/root/usr/local/share:/opt/rh/rh-ruby26/root/usr/share:/usr/local/share:/usr/share
162+
PKG_CONFIG_PATH=/opt/rh/rh-ruby26/root/usr/local/lib64/pkgconfig:/opt/rh/rh-ruby26/root/usr/lib64/pkgconfig
163+
"""
164+
ccs = ContainerCISuite(image_name="f32/nodejs:12")
165+
ret = ccs.test_check_envs_set(
166+
env_filter="^X_SCLS=|/opt/rh|/opt/app-root",
167+
check_envs=exec_envs,
168+
loop_envs=run_envs
169+
)
170+
assert not ret

0 commit comments

Comments
 (0)