def test_resgroup_add_pids(makedirs_mock, set_effective_root_uid_mock,
                           resgroup_name, pids, mongroup_name, expected_writes,
                           expected_setuid_calls_count, expected_makedirs):
    """Test that for ResGroup created with resgroup_name, when add_pids() is called with
    pids and given mongroup_name, expected writes (filenames with expected bytes writes)
    will happen together with number of setuid calls and makedirs calls.
    """
    write_mocks = {filename: mock_open() for filename in expected_writes}
    resgroup = ResGroup(name=resgroup_name)

    # if expected_log:
    with patch('builtins.open', new=create_open_mock(write_mocks)):
        resgroup.add_pids(pids, mongroup_name)

    for filename, write_mock in write_mocks.items():
        expected_filename_writes = expected_writes[filename]
        expected_write_calls = [
            call().write(write_body) for write_body in expected_filename_writes
        ]
        write_mock.assert_has_calls(expected_write_calls, any_order=True)

    # makedirs used
    makedirs_mock.assert_has_calls(expected_makedirs)

    # setuid used (at least number of times)
    expected_setuid_calls = [call.__enter__()] * expected_setuid_calls_count
    set_effective_root_uid_mock.assert_has_calls(expected_setuid_calls,
                                                 any_order=True)
Пример #2
0
def test_resgroup_add_pids_invalid(makedirs_mock, set_effective_root_uid_mock,
                                   side_effect, log_call):
    resgroup = ResGroup(name='')
    writes_mock = {
        '/sys/fs/resctrl/tasks': Mock(return_value=Mock(write=Mock(side_effect=side_effect))),
        '/sys/fs/resctrl/mon_groups/c1/tasks': MagicMock()
    }
    with patch('builtins.open', new=create_open_mock(writes_mock)), patch(
            'wca.resctrl.log') as log_mock:
        resgroup.add_pids(['123'], 'c1')
        log_mock.assert_has_calls([log_call])