Skip to content
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

Unit test host sensitivity - rpmbuild - TW JeOS #2799

Open
phillxnet opened this issue Feb 9, 2024 · 4 comments
Open

Unit test host sensitivity - rpmbuild - TW JeOS #2799

phillxnet opened this issue Feb 9, 2024 · 4 comments

Comments

@phillxnet
Copy link
Member

When running rpmbuild for the first time on a 'clean' TW 20240205 host, we have 3 remaining tests that are 'sensitive' to prior host conditions.

======================================================================
ERROR: test_delete_valid (rockstor.smart_manager.tests.test_task_scheduler.TaskSchedulerTests.test_delete_valid)
Test delete request with valid tdid
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/usr/lib64/python3.11/shutil.py", line 825, in move
    os.rename(src, real_dst)
FileNotFoundError: [Errno 2] No such file or directory: '/tmp/tmpmubg6ere' -> '/etc/cron.d/rockstortab'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
  File "/home/buildbot/rockstor-buildbot/worker/Poetry-Build-on-Tumbleweed-aarch64/rpmbuild/rockstor-core-5.0.7-2797/src/rockstor/smart_manager/tests/test_task_scheduler.py", line 235, in test_delete_valid
    response = self.client.delete("{}/{}".format(self.BASE_URL, tdid), data=data)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/buildbot/rockstor-buildbot/worker/Poetry-Build-on-Tumbleweed-aarch64/rpmbuild/rockstor-core-5.0.7-2797/.venv/lib/python3.11/site-packages/rest_framework/test.py", line 320, in delete
    response = super().delete(
               ^^^^^^^^^^^^^^^
  File "/home/buildbot/rockstor-buildbot/worker/Poetry-Build-on-Tumbleweed-aarch64/rpmbuild/rockstor-core-5.0.7-2797/.venv/lib/python3.11/site-packages/rest_framework/test.py", line 222, in delete
    return self.generic('DELETE', path, data, content_type, **extra)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/buildbot/rockstor-buildbot/worker/Poetry-Build-on-Tumbleweed-aarch64/rpmbuild/rockstor-core-5.0.7-2797/.venv/lib/python3.11/site-packages/rest_framework/test.py", line 234, in generic
    return super().generic(
           ^^^^^^^^^^^^^^^^
  File "/home/buildbot/rockstor-buildbot/worker/Poetry-Build-on-Tumbleweed-aarch64/rpmbuild/rockstor-core-5.0.7-2797/.venv/lib/python3.11/site-packages/django/test/client.py", line 609, in generic
    return self.request(**r)
           ^^^^^^^^^^^^^^^^^
  File "/home/buildbot/rockstor-buildbot/worker/Poetry-Build-on-Tumbleweed-aarch64/rpmbuild/rockstor-core-5.0.7-2797/.venv/lib/python3.11/site-packages/rest_framework/test.py", line 286, in request
    return super().request(**kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/buildbot/rockstor-buildbot/worker/Poetry-Build-on-Tumbleweed-aarch64/rpmbuild/rockstor-core-5.0.7-2797/.venv/lib/python3.11/site-packages/rest_framework/test.py", line 238, in request
    request = super().request(**kwargs)
              ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/buildbot/rockstor-buildbot/worker/Poetry-Build-on-Tumbleweed-aarch64/rpmbuild/rockstor-core-5.0.7-2797/.venv/lib/python3.11/site-packages/django/test/client.py", line 891, in request
    self.check_exception(response)
  File "/home/buildbot/rockstor-buildbot/worker/Poetry-Build-on-Tumbleweed-aarch64/rpmbuild/rockstor-core-5.0.7-2797/.venv/lib/python3.11/site-packages/django/test/client.py", line 738, in check_exception
    raise exc_value
  File "/home/buildbot/rockstor-buildbot/worker/Poetry-Build-on-Tumbleweed-aarch64/rpmbuild/rockstor-core-5.0.7-2797/.venv/lib/python3.11/site-packages/django/core/handlers/exception.py", line 55, in inner
    response = get_response(request)
               ^^^^^^^^^^^^^^^^^^^^^
  File "/home/buildbot/rockstor-buildbot/worker/Poetry-Build-on-Tumbleweed-aarch64/rpmbuild/rockstor-core-5.0.7-2797/.venv/lib/python3.11/site-packages/django/core/handlers/base.py", line 197, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/buildbot/rockstor-buildbot/worker/Poetry-Build-on-Tumbleweed-aarch64/rpmbuild/rockstor-core-5.0.7-2797/.venv/lib/python3.11/site-packages/django/views/decorators/csrf.py", line 56, in wrapper_view
    return view_func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/buildbot/rockstor-buildbot/worker/Poetry-Build-on-Tumbleweed-aarch64/rpmbuild/rockstor-core-5.0.7-2797/.venv/lib/python3.11/site-packages/django/views/generic/base.py", line 104, in view
    return self.dispatch(request, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/buildbot/rockstor-buildbot/worker/Poetry-Build-on-Tumbleweed-aarch64/rpmbuild/rockstor-core-5.0.7-2797/.venv/lib/python3.11/site-packages/rest_framework/views.py", line 509, in dispatch
    response = self.handle_exception(exc)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/buildbot/rockstor-buildbot/worker/Poetry-Build-on-Tumbleweed-aarch64/rpmbuild/rockstor-core-5.0.7-2797/.venv/lib/python3.11/site-packages/rest_framework/views.py", line 469, in handle_exception
    self.raise_uncaught_exception(exc)
  File "/home/buildbot/rockstor-buildbot/worker/Poetry-Build-on-Tumbleweed-aarch64/rpmbuild/rockstor-core-5.0.7-2797/.venv/lib/python3.11/site-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
    raise exc
  File "/home/buildbot/rockstor-buildbot/worker/Poetry-Build-on-Tumbleweed-aarch64/rpmbuild/rockstor-core-5.0.7-2797/.venv/lib/python3.11/site-packages/rest_framework/views.py", line 506, in dispatch
    response = handler(request, *args, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib64/python3.11/contextlib.py", line 81, in inner
    return func(*args, **kwds)
           ^^^^^^^^^^^^^^^^^^^
  File "/home/buildbot/rockstor-buildbot/worker/Poetry-Build-on-Tumbleweed-aarch64/rpmbuild/rockstor-core-5.0.7-2797/src/rockstor/smart_manager/views/task_scheduler.py", line 218, in delete
    self._refresh_crontab()
  File "/home/buildbot/rockstor-buildbot/worker/Poetry-Build-on-Tumbleweed-aarch64/rpmbuild/rockstor-core-5.0.7-2797/src/rockstor/smart_manager/views/task_scheduler.py", line 141, in _refresh_crontab
    shutil.move(npath, "/etc/cron.d/rockstortab")
  File "/usr/lib64/python3.11/shutil.py", line 845, in move
    copy_function(src, real_dst)
  File "/usr/lib64/python3.11/shutil.py", line 436, in copy2
    copyfile(src, dst, follow_symlinks=follow_symlinks)
  File "/usr/lib64/python3.11/shutil.py", line 258, in copyfile
    with open(dst, 'wb') as fdst:
         ^^^^^^^^^^^^^^^
FileNotFoundError: [Errno 2] No such file or directory: '/etc/cron.d/rockstortab'
======================================================================
FAIL: test_post_valid (rockstor.smart_manager.tests.test_task_scheduler.TaskSchedulerTests.test_post_valid)
Test valid POST request
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/buildbot/rockstor-buildbot/worker/Poetry-Build-on-Tumbleweed-aarch64/rpmbuild/rockstor-core-5.0.7-2797/src/rockstor/smart_manager/tests/test_task_scheduler.py", line 117, in test_post_valid
    self.assertEqual(
AssertionError: 500 != 200 : b'["[Errno 2] No such file or directory: \'/etc/cron.d/rockstortab\'","Traceback (most recent call last):\\n  File \\"/usr/lib64/python3.11/shutil.py\\", line 825, in move\\n    os.rename(src, real_dst)\\nFileNotFoundError: [Errno 2] No such file or directory: \'/tmp/tmpl5vnk0bv\' -> \'/etc/cron.d/rockstortab\'\\n\\nDuring handling of the above exception, another exception occurred:\\n\\nTraceback (most recent call last):\\n  File \\"/home/buildbot/rockstor-buildbot/worker/Poetry-Build-on-Tumbleweed-aarch64/rpmbuild/rockstor-core-5.0.7-2797/src/rockstor/rest_framework_custom/generic_view.py\\", line 41, in _handle_exception\\n    yield\\n  File \\"/home/buildbot/rockstor-buildbot/worker/Poetry-Build-on-Tumbleweed-aarch64/rpmbuild/rockstor-core-5.0.7-2797/src/rockstor/smart_manager/views/task_scheduler.py\\", line 184, in post\\n    self._refresh_crontab()\\n  File \\"/home/buildbot/rockstor-buildbot/worker/Poetry-Build-on-Tumbleweed-aarch64/rpmbuild/rockstor-core-5.0.7-2797/src/rockstor/smart_manager/views/task_scheduler.py\\", line 141, in _refresh_crontab\\n    shutil.move(npath, \\"/etc/cron.d/rockstortab\\")\\n  File \\"/usr/lib64/python3.11/shutil.py\\", line 845, in move\\n    copy_function(src, real_dst)\\n  File \\"/usr/lib64/python3.11/shutil.py\\", line 436, in copy2\\n    copyfile(src, dst, follow_symlinks=follow_symlinks)\\n  File \\"/usr/lib64/python3.11/shutil.py\\", line 258, in copyfile\\n    with open(dst, \'wb\') as fdst:\\n         ^^^^^^^^^^^^^^^\\nFileNotFoundError: [Errno 2] No such file or directory: \'/etc/cron.d/rockstortab\'\\n"]'
======================================================================
FAIL: test_put_valid (rockstor.smart_manager.tests.test_task_scheduler.TaskSchedulerTests.test_put_valid)
Test PUT request with valid tdid
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/buildbot/rockstor-buildbot/worker/Poetry-Build-on-Tumbleweed-aarch64/rpmbuild/rockstor-core-5.0.7-2797/src/rockstor/smart_manager/tests/test_task_scheduler.py", line 186, in test_put_valid
    self.assertEqual(response.status_code, status.HTTP_200_OK, msg=response.content)
AssertionError: 500 != 200 : b'["[Errno 2] No such file or directory: \'/etc/cron.d/rockstortab\'","Traceback (most recent call last):\\n  File \\"/usr/lib64/python3.11/shutil.py\\", line 825, in move\\n    os.rename(src, real_dst)\\nFileNotFoundError: [Errno 2] No such file or directory: \'/tmp/tmp5xc022wb\' -> \'/etc/cron.d/rockstortab\'\\n\\nDuring handling of the above exception, another exception occurred:\\n\\nTraceback (most recent call last):\\n  File \\"/home/buildbot/rockstor-buildbot/worker/Poetry-Build-on-Tumbleweed-aarch64/rpmbuild/rockstor-core-5.0.7-2797/src/rockstor/rest_framework_custom/generic_view.py\\", line 41, in _handle_exception\\n    yield\\n  File \\"/home/buildbot/rockstor-buildbot/worker/Poetry-Build-on-Tumbleweed-aarch64/rpmbuild/rockstor-core-5.0.7-2797/src/rockstor/smart_manager/views/task_scheduler.py\\", line 211, in put\\n    self._refresh_crontab()\\n  File \\"/home/buildbot/rockstor-buildbot/worker/Poetry-Build-on-Tumbleweed-aarch64/rpmbuild/rockstor-core-5.0.7-2797/src/rockstor/smart_manager/views/task_scheduler.py\\", line 141, in _refresh_crontab\\n    shutil.move(npath, \\"/etc/cron.d/rockstortab\\")\\n  File \\"/usr/lib64/python3.11/shutil.py\\", line 845, in move\\n    copy_function(src, real_dst)\\n  File \\"/usr/lib64/python3.11/shutil.py\\", line 436, in copy2\\n    copyfile(src, dst, follow_symlinks=follow_symlinks)\\n  File \\"/usr/lib64/python3.11/shutil.py\\", line 258, in copyfile\\n    with open(dst, \'wb\') as fdst:\\n         ^^^^^^^^^^^^^^^\\nFileNotFoundError: [Errno 2] No such file or directory: \'/etc/cron.d/rockstortab\'\\n"]'
----------------------------------------------------------------------
Ran 279 tests in 87.454s
FAILED (failures=2, errors=1)
@phillxnet
Copy link
Member Author

All faulty tests are from: rockstor.smart_manager.tests.test_task_scheduler

  • test_delete_valid
  • test_post_valid
  • test_put_valid

And all fail as there is no pre-existing (on host) /etc/cron.d/rockstortab

FileNotFoundError: [Errno 2] No such file or directory: '/etc/cron.d/rockstortab'

@FroggyFlox
Copy link
Member

Looks like this was my doing... feel stupid for not thinking of mocking that :-\
Sorry for the additional work it creates now.

@phillxnet
Copy link
Member Author

phillxnet commented Feb 9, 2024

@FroggyFlox No worries on that front. I was actually going to look at your more recent (and our first) proper file mocking in testing to fix this as it goes. Given we are now on new-enough Python. I think it was a more recent addition, from memory.

Maybe this was it: #2718

@phillxnet
Copy link
Member Author

Work-around

To probe for any other outlier unit tests:

After

# for the missing dir - owned by the following rpm dependency:
zypper in --no-recommends cronie
# for the inadvertently sensitive file, created in a prior rockstor-run/unit-test-run:
touch /etc/cron.d/rockstortab

We have, on the same 'clean' system:

Found 279 test(s).
Creating test database for alias 'smart_manager'...
System check identified no issues (0 silenced).
.......................................................................................................................................................................................................................................................................................
----------------------------------------------------------------------
Ran 279 tests in 87.304s
OK

@FroggyFlox from the above these look to be the last of their kind (hopefully) and all within a single test.

I'll not tend to these for now as I've got a significant backlog currently. But just wanted to issue this while I had the reproducer here. If anyone fancies looking at these failure they should be reproducible via the sensitive file's removal (the one that shouldn't yet exist on a clean system :) ). If this one takes any-ones fancy just assign yourself so we don't duplicate effort.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants