| @@ -1,4 +1,8 @@ | |||
| from focker.focker import * | |||
| import focker.focker | |||
| from collections import defaultdict | |||
| import sys | |||
| import pytest | |||
| def test_parser_bootstrap(): | |||
| @@ -105,3 +109,101 @@ def test_parser_jail(monkeypatch): | |||
| assert args.force | |||
| assert counter[0] == 10 | |||
| def test_parser_volume(monkeypatch): | |||
| parser = create_parser() | |||
| counter = [0] | |||
| def count_calls(fun, counter): | |||
| def inner(*args, **kwargs): | |||
| counter[0] += 1 | |||
| return fun(*args, **kwargs) | |||
| return inner | |||
| monkeypatch.setattr(parser, 'parse_args', count_calls(parser.parse_args, counter)) | |||
| args = parser.parse_args(['volume', 'create', '--tags', 'a', 'b', 'c']) | |||
| assert args.func == command_volume_create | |||
| assert args.tags == ['a', 'b', 'c'] | |||
| args = parser.parse_args(['volume', 'prune']) | |||
| assert args.func == command_volume_prune | |||
| args = parser.parse_args(['volume', 'list', '--full-sha256']) | |||
| assert args.func == command_volume_list | |||
| assert args.full_sha256 | |||
| args = parser.parse_args(['volume', 'tag', 'deadbee', 'a', 'b', 'c']) | |||
| assert args.func == command_volume_tag | |||
| assert args.reference == 'deadbee' | |||
| assert args.tags == ['a', 'b', 'c'] | |||
| args = parser.parse_args(['volume', 'untag', 'a', 'b', 'c']) | |||
| assert args.func == command_volume_untag | |||
| assert args.tags == ['a', 'b', 'c'] | |||
| args = parser.parse_args(['volume', 'remove', 'volume-A', 'volume-B', '--force']) | |||
| assert args.func == command_volume_remove | |||
| assert args.references == ['volume-A', 'volume-B'] | |||
| assert args.force | |||
| args = parser.parse_args(['volume', 'set', 'volume-A', 'rdonly=on', 'quota=1G']) | |||
| assert args.func == command_volume_set | |||
| assert args.reference == 'volume-A' | |||
| assert args.properties == ['rdonly=on', 'quota=1G'] | |||
| args = parser.parse_args(['volume', 'get', 'volume-A', 'rdonly', 'quota']) | |||
| assert args.func == command_volume_get | |||
| assert args.reference == 'volume-A' | |||
| assert args.properties == ['rdonly', 'quota'] | |||
| assert counter[0] == 8 | |||
| def test_parser_compose(): | |||
| parser = create_parser() | |||
| args = parser.parse_args(['compose', 'build', '--squeeze', '/a/b/c/focker-compose.yml']) | |||
| assert args.func == command_compose_build | |||
| assert args.filename == '/a/b/c/focker-compose.yml' | |||
| assert args.squeeze | |||
| args = parser.parse_args(['compose', 'run', '/a/b/c/focker-compose.yml', 'noop']) | |||
| assert args.func == command_compose_run | |||
| assert args.filename == '/a/b/c/focker-compose.yml' | |||
| assert args.command == 'noop' | |||
| def test_focker_main_01(monkeypatch): | |||
| log = defaultdict(list) | |||
| def log_call(fun): | |||
| def inner(*args, **kwargs): | |||
| log[fun.__name__].append((args, kwargs)) | |||
| return fun(*args, **kwargs) | |||
| return inner | |||
| monkeypatch.setattr(focker.focker, 'focker_lock', log_call(focker_lock)) | |||
| monkeypatch.setattr(focker.focker, 'zfs_init', log_call(zfs_init)) | |||
| monkeypatch.setattr(focker.focker, 'create_parser', log_call(create_parser)) | |||
| monkeypatch.setattr(focker.focker, 'command_image_list', log_call(command_image_list)) | |||
| monkeypatch.setattr(sys, 'argv', ['focker', 'image', 'list']) | |||
| main() | |||
| assert len(log) == 4 | |||
| assert 'focker_lock' in log | |||
| assert 'zfs_init' in log | |||
| assert 'create_parser' in log | |||
| assert 'command_image_list' in log | |||
| def test_focker_main_02(monkeypatch): | |||
| log = defaultdict(list) | |||
| def log_call(fun): | |||
| def inner(*args, **kwargs): | |||
| log[fun.__name__].append((args, kwargs)) | |||
| return fun(*args, **kwargs) | |||
| return inner | |||
| monkeypatch.setattr(sys, 'argv', ['focker']) | |||
| monkeypatch.setattr(sys, 'exit', log_call(sys.exit)) | |||
| with pytest.raises(SystemExit): | |||
| main() | |||
| assert len(log) == 1 | |||
| assert 'exit' in log | |||