Skip to content

Commit

Permalink
Merge pull request #88 from cgalibern/master
Browse files Browse the repository at this point in the history
[Test] Verify empty keys from '--value ""' or '--from /dev/null'
  • Loading branch information
cgalibern committed Mar 10, 2020
2 parents 88f761c + 9e79319 commit f296d4b
Showing 1 changed file with 50 additions and 48 deletions.
98 changes: 50 additions & 48 deletions lib/tests/test_mgr.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,14 +28,13 @@ def fake_svc(osvc_path_tests, has_privs, mocker):
@pytest.mark.parametrize('sysname', OS_LIST)
class TestServiceActionWithoutPrivs:
@staticmethod
def test_no_call_to_main_and_exit_1(mocker, mock_argv, mock_sysname, sysname):
def test_no_call_to_main_and_exit_1(mocker, mock_sysname, sysname):
mocker.patch('rcUtilities.os.geteuid', return_value=66)
mock_sysname(sysname)
mock_argv(['mgr', "create"])
sys_exit = mocker.patch.object(sys, 'exit', side_effect=Exception("exit"))
_main = mocker.patch.object(Mgr, '_main')
with pytest.raises(Exception, match="exit"):
Mgr(selector='svc1')()
Mgr(selector='svc1')(['create'])
sys_exit.assert_called_once_with(1)
assert _main.call_count == 0

Expand All @@ -45,42 +44,38 @@ def test_no_call_to_main_and_exit_1(mocker, mock_argv, mock_sysname, sysname):
@pytest.mark.parametrize('sysname', OS_LIST)
class TestServiceActionWithPriv:
@staticmethod
def test_wrong_action_exit_1(fake_svc, mock_argv, mock_sysname, sysname):
mock_argv(['mgr', "wrong-action"])
def test_wrong_action_exit_1(fake_svc, mock_sysname, sysname):
mock_sysname(sysname)

assert Mgr(selector='fake-svc')() == 1
assert Mgr(selector='fake-svc')(["wrong-action"]) == 1

@staticmethod
def test_print_config(fake_svc, tmp_file, capture_stdout, mock_argv, mock_sysname, sysname):
mock_argv(['mgr', "print", "config"])
def test_print_config(fake_svc, tmp_file, capture_stdout, mock_sysname, sysname):
mock_sysname(sysname)

with capture_stdout(tmp_file):
assert Mgr(selector='fake-svc')() == 0
assert Mgr(selector='fake-svc')(["print", "config"]) == 0
with open(tmp_file) as f:
config_text = f.read()
assert '[DEFAULT]' in config_text
assert 'id =' in config_text

@staticmethod
def test_print_config_json(fake_svc, tmp_file, capture_stdout, mock_argv, mock_sysname, sysname):
mock_argv(['mgr', "print", "config", '--format', 'json'])
def test_print_config_json(fake_svc, tmp_file, capture_stdout, mock_sysname, sysname):
mock_sysname(sysname)

with capture_stdout(tmp_file):
assert Mgr(selector='fake-svc')() == 0
assert Mgr(selector='fake-svc')(["print", "config", '--format', 'json']) == 0
with open(tmp_file) as json_file:
config = json.load(json_file)
assert config['DEFAULT']['id']

@staticmethod
def test_create_call_node_create_service(mocker, mock_argv, mock_sysname, sysname):
mock_argv(['mgr', "create"])
def test_create_call_node_create_service(mocker, mock_sysname, sysname):
mock_sysname(sysname)
node_create_service = mocker.patch.object(Node, 'create_service', return_value=None)

assert Mgr(selector='svc1', node=Node())() == 0
assert Mgr(selector='svc1', node=Node())(["create"]) == 0
assert node_create_service.call_count == 1


Expand All @@ -89,38 +84,31 @@ def test_create_call_node_create_service(mocker, mock_argv, mock_sysname, sysnam
class TestServiceActionFsFlag:
@staticmethod
@pytest.mark.parametrize('sysname', OS_LIST_WITH_FS_FLAG)
def test_create_service_with_fs_flag_then_verify_config(
mock_argv, tmp_file, capture_stdout, mock_sysname, sysname):
def test_create_service_with_fs_flag_then_verify_config(tmp_file, capture_stdout, mock_sysname, sysname):
mock_sysname(sysname)

mock_argv(['mgr', 'create', '--kw', 'fs#1.type=flag'])
assert Mgr(selector=sysname)() == 0
assert Mgr(selector=sysname)(['create', '--kw', 'fs#1.type=flag']) == 0

mock_argv(['mgr', 'set', '--kw', 'fs#2.type=flag'])
assert Mgr(selector=sysname)() == 0
assert Mgr(selector=sysname)(['set', '--kw', 'fs#2.type=flag']) == 0

mock_argv(['om', 'print', 'config', '--format', 'json'])
with capture_stdout(tmp_file):
assert Mgr(selector=sysname)() == 0
assert Mgr(selector=sysname)(['print', 'config', '--format', 'json']) == 0
with open(tmp_file) as config_file:
config = json.load(config_file)
assert config["fs#1"] == {'type': 'flag'}
assert config["fs#2"] == {'type': 'flag'}

@staticmethod
@pytest.mark.parametrize('sysname', OS_LIST ^ OS_LIST_WITH_FS_FLAG)
def test_set_fs_flag_not_added_when_not_supported_on_os(
fake_svc, mock_argv, tmp_file, capture_stdout, mock_sysname, sysname):
mock_argv(['mgr', 'set', '--kw', 'fs#1.type=flag'])
def test_set_fs_flag_not_added_when_not_supported_on_os(fake_svc, tmp_file, capture_stdout, mock_sysname, sysname):
mock_sysname(sysname)

assert Mgr(selector='fake-svc')() == 1
assert Mgr(selector='fake-svc')(['set', '--kw', 'fs#1.type=flag']) == 1

@staticmethod
@pytest.mark.parametrize('sysname', OS_LIST_WITH_FS_FLAG)
def test_create_then_start_then_verify_flag_file_exists(tmp_path,
mocker,
mock_argv,
mock_sysname,
sysname):
mock_sysname(sysname)
Expand All @@ -132,13 +120,11 @@ def test_create_then_start_then_verify_flag_file_exists(tmp_path,

assert not os.path.exists(expected_flag_file)

mock_argv(['mgr', 'create', '--kw', 'fs#1.type=flag', '--debug'])
Mgr(selector=sysname)()
Mgr(selector=sysname)(['create', '--kw', 'fs#1.type=flag', '--debug'])

assert not os.path.exists(expected_flag_file)

mock_argv(['mgr', 'start', '--debug', '--local'])
assert Mgr(selector=sysname)() == 0
assert Mgr(selector=sysname)(['start', '--debug', '--local']) == 0

assert os.path.exists(expected_flag_file)

Expand All @@ -147,16 +133,15 @@ def test_create_then_start_then_verify_flag_file_exists(tmp_path,
@pytest.mark.usefixtures('has_privs')
class TestServiceActionWithVolume:
@staticmethod
def test_provision_service_with_config(has_service_with_vol_and_cfg, mock_argv):
def test_provision_service_with_config(has_service_with_vol_and_cfg):
expected_voldir = os.path.join(
str(has_service_with_vol_and_cfg),
'var',
'pool',
'directory',
'vol-test.root.vol.default')

mock_argv(['mgr', 'provision', '--local', '--leader', '--debug'])
assert Mgr(selector='svc')() == 0
assert Mgr(selector='svc')(['provision', '--local', '--leader', '--debug']) == 0

def assert_file_contain(file, expected_value):
with open(os.path.join(expected_voldir, file)) as file:
Expand Down Expand Up @@ -200,7 +185,7 @@ def assert_file_contain(file, expected_value):
class TestServiceActionWhenNoDaemonListen:
@staticmethod
@pytest.mark.parametrize('sysname', OS_LIST_WITH_FS_FLAG)
def test_no_hang(osvc_path_tests, mock_argv, mock_sysname, sysname):
def test_no_hang(osvc_path_tests, mock_sysname, sysname):
import socket

h2_sock = os.path.join(str(osvc_path_tests), 'var', 'lsnr', 'h2.sock')
Expand All @@ -211,11 +196,9 @@ def test_no_hang(osvc_path_tests, mock_argv, mock_sysname, sysname):
sockuxh2.close()
assert os.path.exists(h2_sock)

mock_argv(['mgr', 'create', '--debug'])
Mgr(selector=sysname)()
Mgr(selector=sysname)(['create', '--debug'])

mock_argv(['mgr', 'start', '--debug', '--local'])
assert Mgr(selector=sysname)() == 0
assert Mgr(selector=sysname)(['start', '--debug', '--local']) == 0


@pytest.mark.ci
Expand All @@ -224,15 +207,34 @@ class TestCreateAddDecode:
@staticmethod
@pytest.mark.parametrize('key', ['lowercase', 'camelCase', 'UPPERCASE'])
@pytest.mark.parametrize('obj', ['demo/cfg/name', 'demo/sec/name'])
def test_decoded_value_is_correct(mock_argv, capture_stdout, tmp_file, obj, key):
def run_command(args):
mock_argv(args)
return Mgr(selector=obj)()

assert run_command(['mgr', 'create']) == 0
assert run_command(['mgr', 'add', '--key', key, '--value', 'john']) == 0
def test_decoded_value_is_correct(capture_stdout, tmp_file, obj, key):
assert Mgr(selector=obj)(['create']) == 0
assert Mgr(selector=obj)(['add', '--key', key, '--value', 'john']) == 0
with capture_stdout(tmp_file):
assert run_command(['mgr', 'decode', '--key', key]) == 0
assert Mgr(selector=obj)(['decode', '--key', key]) == 0

with open(tmp_file) as output_file:
assert output_file.read() == 'john'

@staticmethod
@pytest.mark.parametrize('obj', ['demo/cfg/name', 'demo/sec/name'])
def test_accept_empty_values(capture_stdout, tmp_file, obj):
assert Mgr(selector=obj)(['create']) == 0
assert Mgr(selector=obj)(['add', '--key', 'empty', '--value', '']) == 0
with capture_stdout(tmp_file):
assert Mgr(selector=obj)(['decode', '--key', 'empty']) == 0

with open(tmp_file) as output_file:
assert output_file.read() == ''

@staticmethod
@pytest.mark.parametrize('obj', ['demo/cfg/name', 'demo/sec/name'])
def test_accept_from_empty_files(capture_stdout, tmp_file, obj):
open(tmp_file, 'w+').close()
assert Mgr(selector=obj)(['create']) == 0
assert Mgr(selector=obj)(['add', '--key', 'empty', '--from', tmp_file]) == 0
with capture_stdout(tmp_file):
assert Mgr(selector=obj)(['decode', '--key', 'empty']) == 0

with open(tmp_file) as output_file:
assert output_file.read() == ''

0 comments on commit f296d4b

Please sign in to comment.