-
Notifications
You must be signed in to change notification settings - Fork 48
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: Added a fixture for integration tests to check selinux denials #312
base: master
Are you sure you want to change the base?
Conversation
84671c5
to
2e35f96
Compare
2e35f96
to
9457a1a
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This will make all test fail even if some other RHEL package has SELinux misconfigured and gets run. Which I guess is good, but it could poison our results for some time until it gets fixed.
Would it make sense to only check lines that might be related to our tools (e.g. insights-client, gpg, python, ...?)
integration-tests/conftest.py
Outdated
result = logged_run(options, stdout=subprocess.PIPE, stderr=subprocess.PIPE) | ||
if "<no matches>" not in str(result.stdout): | ||
lines = str(result.stdout).split("\n") | ||
for line in lines: | ||
words = line.split() | ||
if "denied" in words: | ||
assert "permissive=1" in words, "SELinux AVC denials found" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You could simplify this a bit by passing text=True
to logged_run()
. This would be an equivalent:
result = logged_run(options, capture_output=True, text=True)
for line in result.stdout.split("\n"):
if "denied" in line:
assert "permissive=1" in line, "SELinux AVC denials found"
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I am ok to use capture_output=True instead of subprocess.PIPE. Only reason for using the later was to avoid python version issues. I think capture_output is available in version > python 3.7. But it should not affect the tests, I will modify the command. Thanks!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@m-horky Like I suspsected 'capture_output' is failing on RHEL8 tests(python 3.6), so I am reverting the change back to original commit.
While the idea is good, I think this ought to be done rather in pytest-client-tools:
|
Thanks for feedback, I agree that we should put it in pytest_client_tools. Eventually we would add such checks in rhc repo as well. So would you suggest keeping this fixture in pytest_client_tools/plugin.py ? |
Yes I planned to do so. |
9457a1a
to
e464b8d
Compare
Not as a fixture, no. There are already hooks that track certain parts of the tests execution flow, and the SELinux checks would need to be added there:
In pytest-client-tools there are already the bits to handle per-test stuff, so this should not be complicated to add. |
e464b8d
to
a89592c
Compare
Would you suggest me to implement this in pytest_client_tools, Can you help me point to the bits that handle per-test stuff because I tried but could not figure out. |
Sure. Start from the current code in
So in practice I think that:
[1] https://docs.pytest.org/en/stable/reference/reference.html#hooks |
No description provided.