| Server IP : 82.148.16.210 / Your IP : 216.73.216.19 Web Server : nginx/1.29.5 System : Linux mail.sarafai.ru 6.1.0-43-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.162-1 (2026-02-08) x86_64 User : root ( 0) PHP Version : 7.4.33 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : OFF Directory : /lib/cloudinit/config/tests/ |
Upload File : |
# This file is part of cloud-init. See LICENSE file for license information.
from unittest import mock
import pytest
from cloudinit.config.cc_mounts import create_swapfile
from cloudinit.subp import ProcessExecutionError
M_PATH = 'cloudinit.config.cc_mounts.'
class TestCreateSwapfile:
@pytest.mark.parametrize('fstype', ('xfs', 'btrfs', 'ext4', 'other'))
@mock.patch(M_PATH + 'util.get_mount_info')
@mock.patch(M_PATH + 'subp.subp')
def test_happy_path(self, m_subp, m_get_mount_info, fstype, tmpdir):
swap_file = tmpdir.join("swap-file")
fname = str(swap_file)
# Some of the calls to subp.subp should create the swap file; this
# roughly approximates that
m_subp.side_effect = lambda *args, **kwargs: swap_file.write('')
m_get_mount_info.return_value = (mock.ANY, fstype)
create_swapfile(fname, '')
assert mock.call(['mkswap', fname]) in m_subp.call_args_list
@mock.patch(M_PATH + "util.get_mount_info")
@mock.patch(M_PATH + "subp.subp")
def test_fallback_from_fallocate_to_dd(
self, m_subp, m_get_mount_info, caplog, tmpdir
):
swap_file = tmpdir.join("swap-file")
fname = str(swap_file)
def subp_side_effect(cmd, *args, **kwargs):
# Mock fallocate failing, to initiate fallback
if cmd[0] == "fallocate":
raise ProcessExecutionError()
m_subp.side_effect = subp_side_effect
# Use ext4 so both fallocate and dd are valid swap creation methods
m_get_mount_info.return_value = (mock.ANY, "ext4")
create_swapfile(fname, "")
cmds = [args[0][0] for args, _kwargs in m_subp.call_args_list]
assert "fallocate" in cmds, "fallocate was not called"
assert "dd" in cmds, "fallocate failure did not fallback to dd"
assert cmds.index("dd") > cmds.index(
"fallocate"
), "dd ran before fallocate"
assert mock.call(["mkswap", fname]) in m_subp.call_args_list
msg = "fallocate swap creation failed, will attempt with dd"
assert msg in caplog.text