Let's fake the filesystem instead

Signed-off-by: Pedro Algarvio <palgarvio@vmware.com>
This commit is contained in:
Pedro Algarvio 2023-11-27 12:11:19 +00:00 committed by Pedro Algarvio
parent c66d14b700
commit eaf5245965
30 changed files with 109 additions and 37 deletions

View file

@ -10,3 +10,4 @@ pytest-httpserver
pytest-custom-exit-code >= 0.3
flaky
more-itertools
pyfakefs

View file

@ -419,6 +419,10 @@ pycryptodomex==3.9.8
# -c requirements/static/ci/../pkg/py3.10/linux.txt
# -c requirements/static/ci/py3.10/linux.txt
# -r requirements/crypto.txt
pyfakefs==5.3.1
# via
# -c requirements/static/ci/py3.10/linux.txt
# -r requirements/pytest.txt
pyinotify==0.9.6 ; sys_platform != "win32" and sys_platform != "darwin" and platform_system != "openbsd"
# via
# -c requirements/static/ci/py3.10/linux.txt

View file

@ -302,6 +302,8 @@ pycryptodomex==3.9.8
# via
# -c requirements/static/ci/../pkg/py3.10/darwin.txt
# -r requirements/crypto.txt
pyfakefs==5.3.1
# via -r requirements/pytest.txt
pygit2==1.13.1
# via -r requirements/static/ci/darwin.in
pynacl==1.5.0

View file

@ -293,6 +293,8 @@ pycryptodomex==3.9.8
# via
# -c requirements/static/ci/../pkg/py3.10/freebsd.txt
# -r requirements/crypto.txt
pyfakefs==5.3.1
# via -r requirements/pytest.txt
pygit2==1.13.1
# via -r requirements/static/ci/freebsd.in
pyinotify==0.9.6 ; sys_platform != "win32" and sys_platform != "darwin" and platform_system != "openbsd"

View file

@ -304,6 +304,8 @@ pycryptodomex==3.9.8
# via
# -c requirements/static/ci/../pkg/py3.10/linux.txt
# -r requirements/crypto.txt
pyfakefs==5.3.1
# via -r requirements/pytest.txt
pygit2==1.13.1
# via -r requirements/static/ci/linux.in
pyiface==0.0.11

View file

@ -277,6 +277,8 @@ pycryptodomex==3.10.1
# via
# -c requirements/static/ci/../pkg/py3.10/windows.txt
# -r requirements/crypto.txt
pyfakefs==5.3.1
# via -r requirements/pytest.txt
pygit2==1.13.1
# via -r requirements/static/ci/windows.in
pymssql==2.2.7

View file

@ -396,6 +396,10 @@ pycryptodomex==3.9.8
# -c requirements/static/ci/../pkg/py3.11/linux.txt
# -c requirements/static/ci/py3.11/linux.txt
# -r requirements/crypto.txt
pyfakefs==5.3.1
# via
# -c requirements/static/ci/py3.11/linux.txt
# -r requirements/pytest.txt
pyinotify==0.9.6 ; sys_platform != "win32" and sys_platform != "darwin" and platform_system != "openbsd"
# via
# -c requirements/static/ci/py3.11/linux.txt

View file

@ -282,6 +282,8 @@ pycryptodomex==3.9.8
# via
# -c requirements/static/ci/../pkg/py3.11/darwin.txt
# -r requirements/crypto.txt
pyfakefs==5.3.1
# via -r requirements/pytest.txt
pygit2==1.13.1
# via -r requirements/static/ci/darwin.in
pynacl==1.5.0

View file

@ -277,6 +277,8 @@ pycryptodomex==3.9.8
# via
# -c requirements/static/ci/../pkg/py3.11/freebsd.txt
# -r requirements/crypto.txt
pyfakefs==5.3.1
# via -r requirements/pytest.txt
pygit2==1.13.1
# via -r requirements/static/ci/freebsd.in
pyinotify==0.9.6 ; sys_platform != "win32" and sys_platform != "darwin" and platform_system != "openbsd"

View file

@ -288,6 +288,8 @@ pycryptodomex==3.9.8
# via
# -c requirements/static/ci/../pkg/py3.11/linux.txt
# -r requirements/crypto.txt
pyfakefs==5.3.1
# via -r requirements/pytest.txt
pygit2==1.13.1
# via -r requirements/static/ci/linux.in
pyiface==0.0.11

View file

@ -276,6 +276,8 @@ pycryptodomex==3.10.1
# via
# -c requirements/static/ci/../pkg/py3.11/windows.txt
# -r requirements/crypto.txt
pyfakefs==5.3.1
# via -r requirements/pytest.txt
pygit2==1.13.1
# via -r requirements/static/ci/windows.in
pymssql==2.2.7

View file

@ -396,6 +396,10 @@ pycryptodomex==3.9.8
# -c requirements/static/ci/../pkg/py3.12/linux.txt
# -c requirements/static/ci/py3.12/linux.txt
# -r requirements/crypto.txt
pyfakefs==5.3.1
# via
# -c requirements/static/ci/py3.12/linux.txt
# -r requirements/pytest.txt
pyinotify==0.9.6 ; sys_platform != "win32" and sys_platform != "darwin" and platform_system != "openbsd"
# via
# -c requirements/static/ci/py3.12/linux.txt

View file

@ -282,6 +282,8 @@ pycryptodomex==3.9.8
# via
# -c requirements/static/ci/../pkg/py3.12/darwin.txt
# -r requirements/crypto.txt
pyfakefs==5.3.1
# via -r requirements/pytest.txt
pygit2==1.13.1
# via -r requirements/static/ci/darwin.in
pynacl==1.5.0

View file

@ -277,6 +277,8 @@ pycryptodomex==3.9.8
# via
# -c requirements/static/ci/../pkg/py3.12/freebsd.txt
# -r requirements/crypto.txt
pyfakefs==5.3.1
# via -r requirements/pytest.txt
pygit2==1.13.1
# via -r requirements/static/ci/freebsd.in
pyinotify==0.9.6 ; sys_platform != "win32" and sys_platform != "darwin" and platform_system != "openbsd"

View file

@ -288,6 +288,8 @@ pycryptodomex==3.9.8
# via
# -c requirements/static/ci/../pkg/py3.12/linux.txt
# -r requirements/crypto.txt
pyfakefs==5.3.1
# via -r requirements/pytest.txt
pygit2==1.13.1
# via -r requirements/static/ci/linux.in
pyiface==0.0.11

View file

@ -276,6 +276,8 @@ pycryptodomex==3.10.1
# via
# -c requirements/static/ci/../pkg/py3.12/windows.txt
# -r requirements/crypto.txt
pyfakefs==5.3.1
# via -r requirements/pytest.txt
pygit2==1.13.1
# via -r requirements/static/ci/windows.in
pymssql==2.2.7

View file

@ -469,6 +469,10 @@ pyeapi==0.8.3
# via
# -c requirements/static/ci/py3.7/linux.txt
# napalm
pyfakefs==5.3.1
# via
# -c requirements/static/ci/py3.7/linux.txt
# -r requirements/pytest.txt
pyinotify==0.9.6 ; sys_platform != "win32" and sys_platform != "darwin" and platform_system != "openbsd"
# via
# -c requirements/static/ci/py3.7/linux.txt

View file

@ -333,6 +333,8 @@ pycryptodomex==3.9.8
# -r requirements/crypto.txt
pyeapi==0.8.3
# via napalm
pyfakefs==5.3.1
# via -r requirements/pytest.txt
pygit2==1.10.1
# via -r requirements/static/ci/freebsd.in
pyinotify==0.9.6 ; sys_platform != "win32" and sys_platform != "darwin" and platform_system != "openbsd"

View file

@ -346,6 +346,8 @@ pycryptodomex==3.9.8
# -r requirements/crypto.txt
pyeapi==0.8.3
# via napalm
pyfakefs==5.3.1
# via -r requirements/pytest.txt
pygit2==1.10.1
# via -r requirements/static/ci/linux.in
pyiface==0.0.11

View file

@ -291,6 +291,8 @@ pycryptodomex==3.10.1
# via
# -c requirements/static/ci/../pkg/py3.7/windows.txt
# -r requirements/crypto.txt
pyfakefs==5.3.1
# via -r requirements/pytest.txt
pygit2==1.10.1
# via -r requirements/static/ci/windows.in
pymssql==2.2.1

View file

@ -456,6 +456,10 @@ pyeapi==0.8.3
# via
# -c requirements/static/ci/py3.8/linux.txt
# napalm
pyfakefs==5.3.1
# via
# -c requirements/static/ci/py3.8/linux.txt
# -r requirements/pytest.txt
pyinotify==0.9.6 ; sys_platform != "win32" and sys_platform != "darwin" and platform_system != "openbsd"
# via
# -c requirements/static/ci/py3.8/linux.txt

View file

@ -320,6 +320,8 @@ pycryptodomex==3.9.8
# -r requirements/crypto.txt
pyeapi==0.8.3
# via napalm
pyfakefs==5.3.1
# via -r requirements/pytest.txt
pygit2==1.13.1
# via -r requirements/static/ci/freebsd.in
pyinotify==0.9.6 ; sys_platform != "win32" and sys_platform != "darwin" and platform_system != "openbsd"

View file

@ -333,6 +333,8 @@ pycryptodomex==3.9.8
# -r requirements/crypto.txt
pyeapi==0.8.3
# via napalm
pyfakefs==5.3.1
# via -r requirements/pytest.txt
pygit2==1.13.1
# via -r requirements/static/ci/linux.in
pyiface==0.0.11

View file

@ -278,6 +278,8 @@ pycryptodomex==3.10.1
# via
# -c requirements/static/ci/../pkg/py3.8/windows.txt
# -r requirements/crypto.txt
pyfakefs==5.3.1
# via -r requirements/pytest.txt
pygit2==1.13.1
# via -r requirements/static/ci/windows.in
pymssql==2.2.1

View file

@ -458,6 +458,10 @@ pyeapi==0.8.3
# via
# -c requirements/static/ci/py3.9/linux.txt
# napalm
pyfakefs==5.3.1
# via
# -c requirements/static/ci/py3.9/linux.txt
# -r requirements/pytest.txt
pyinotify==0.9.6 ; sys_platform != "win32" and sys_platform != "darwin" and platform_system != "openbsd"
# via
# -c requirements/static/ci/py3.9/linux.txt

View file

@ -331,6 +331,8 @@ pycryptodomex==3.9.8
# -r requirements/crypto.txt
pyeapi==0.8.3
# via napalm
pyfakefs==5.3.1
# via -r requirements/pytest.txt
pygit2==1.13.1
# via -r requirements/static/ci/darwin.in
pynacl==1.5.0

View file

@ -322,6 +322,8 @@ pycryptodomex==3.9.8
# -r requirements/crypto.txt
pyeapi==0.8.3
# via napalm
pyfakefs==5.3.1
# via -r requirements/pytest.txt
pygit2==1.13.1
# via -r requirements/static/ci/freebsd.in
pyinotify==0.9.6 ; sys_platform != "win32" and sys_platform != "darwin" and platform_system != "openbsd"

View file

@ -333,6 +333,8 @@ pycryptodomex==3.9.8
# -r requirements/crypto.txt
pyeapi==0.8.3
# via napalm
pyfakefs==5.3.1
# via -r requirements/pytest.txt
pygit2==1.13.1
# via -r requirements/static/ci/linux.in
pyiface==0.0.11

View file

@ -279,6 +279,8 @@ pycryptodomex==3.10.1
# via
# -c requirements/static/ci/../pkg/py3.9/windows.txt
# -r requirements/crypto.txt
pyfakefs==5.3.1
# via -r requirements/pytest.txt
pygit2==1.13.1
# via -r requirements/static/ci/windows.in
pymssql==2.2.1

View file

@ -1,11 +1,3 @@
"""
:synopsis: Unit Tests for Advanced Packaging Tool module 'module.aptpkg'
:platform: Linux
:maturity: develop
versionadded:: 2017.7.0
"""
import copy
import importlib
import logging
@ -24,7 +16,7 @@ from salt.exceptions import (
SaltInvocationError,
)
from salt.utils.odict import OrderedDict
from tests.support.mock import MagicMock, Mock, call, mock_open, patch
from tests.support.mock import MagicMock, Mock, call, patch
try:
from aptsources.sourceslist import ( # pylint: disable=unused-import
@ -1556,31 +1548,35 @@ SERVICE:cups-daemon,390,/usr/sbin/cupsd
]
@pytest.fixture
def _test_sourceslist_multiple_comps_fs(fs):
fs.create_dir("/etc/apt/sources.list.d")
fs.create_file(
"/etc/apt/sources.list",
contents="deb http://archive.ubuntu.com/ubuntu/ focal-updates main restricted",
)
yield
@pytest.mark.skipif(
HAS_APTSOURCES is True, reason="Only run test with python3-apt library is missing."
)
@pytest.mark.usefixtures("_test_sourceslist_multiple_comps_fs")
def test_sourceslist_multiple_comps():
"""
Test SourcesList when repo has multiple comps
"""
repo_line = "deb http://archive.ubuntu.com/ubuntu/ focal-updates main restricted"
with patch.object(aptpkg, "HAS_APT", return_value=True):
with patch("salt.utils.files.fopen", mock_open(read_data=repo_line)):
with patch("pathlib.Path.is_file", side_effect=[True, False]):
sources = aptpkg.SourcesList()
for source in sources:
assert source.type == "deb"
assert source.uri == "http://archive.ubuntu.com/ubuntu/"
assert source.comps == ["main", "restricted"]
assert source.dist == "focal-updates"
sources = aptpkg.SourcesList()
for source in sources:
assert source.type == "deb"
assert source.uri == "http://archive.ubuntu.com/ubuntu/"
assert source.comps == ["main", "restricted"]
assert source.dist == "focal-updates"
@pytest.mark.skipif(
HAS_APTSOURCES is True, reason="Only run test with python3-apt library is missing."
)
@pytest.mark.parametrize(
"repo_line",
[
@pytest.fixture(
params=(
"deb [ arch=amd64 ] http://archive.ubuntu.com/ubuntu/ focal-updates main restricted",
"deb [arch=amd64 ] http://archive.ubuntu.com/ubuntu/ focal-updates main restricted",
"deb [arch=amd64 test=one ] http://archive.ubuntu.com/ubuntu/ focal-updates main restricted",
@ -1588,24 +1584,31 @@ def test_sourceslist_multiple_comps():
"deb [ arch=amd64,armel test=one ] http://archive.ubuntu.com/ubuntu/ focal-updates main restricted",
"deb [ arch=amd64,armel test=one] http://archive.ubuntu.com/ubuntu/ focal-updates main restricted",
"deb [arch=amd64] http://archive.ubuntu.com/ubuntu/ focal-updates main restricted",
],
)
)
def repo_line(request, fs):
fs.create_dir("/etc/apt/sources.list.d")
fs.create_file("/etc/apt/sources.list", contents=request.param)
yield request.param
@pytest.mark.skipif(
HAS_APTSOURCES is True, reason="Only run test with python3-apt library is missing."
)
def test_sourceslist_architectures(repo_line):
"""
Test SourcesList when architectures is in repo
"""
with patch("salt.utils.files.fopen", mock_open(read_data=repo_line)):
with patch("pathlib.Path.is_file", side_effect=[True, False]):
sources = aptpkg.SourcesList()
for source in sources:
assert source.type == "deb"
assert source.uri == "http://archive.ubuntu.com/ubuntu/"
assert source.comps == ["main", "restricted"]
assert source.dist == "focal-updates"
if "," in repo_line:
assert source.architectures == ["amd64", "armel"]
else:
assert source.architectures == ["amd64"]
sources = aptpkg.SourcesList()
for source in sources:
assert source.type == "deb"
assert source.uri == "http://archive.ubuntu.com/ubuntu/"
assert source.comps == ["main", "restricted"]
assert source.dist == "focal-updates"
if "," in repo_line:
assert source.architectures == ["amd64", "armel"]
else:
assert source.architectures == ["amd64"]
@pytest.mark.parametrize(