|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209 |
- from focker.focker import *
- import focker.focker
- from collections import defaultdict
- import sys
- import pytest
-
-
- def test_parser_bootstrap():
- parser = create_parser()
-
- args = parser.parse_args(['bootstrap', '--empty', '--tags', 'a', 'b', 'c'])
- assert args.func == command_bootstrap
- assert args.tags == ['a', 'b', 'c']
- assert args.empty
-
-
- def test_parser_image():
- parser = create_parser()
-
- args = parser.parse_args(['image', 'build', '.', '--squeeze', '--tags', 'a', 'b', 'c'])
- assert args.func == command_image_build
- assert args.focker_dir == '.'
- assert args.tags == ['a', 'b', 'c']
- assert args.squeeze
-
- args = parser.parse_args(['image', 'tag', 'deadbee', 'a', 'b', 'c'])
- assert args.func == command_image_tag
- assert args.reference == 'deadbee'
- assert args.tags == ['a', 'b', 'c']
-
- args = parser.parse_args(['image', 'untag', 'a', 'b', 'c'])
- assert args.func == command_image_untag
- assert args.tags == ['a', 'b', 'c']
-
- args = parser.parse_args(['image', 'list', '--full-sha256', '--tagged-only'])
- assert args.func == command_image_list
- assert args.full_sha256
- assert args.tagged_only
-
- args = parser.parse_args(['image', 'prune'])
- assert args.func == command_image_prune
-
- args = parser.parse_args(['image', 'remove', 'a', '--remove-dependents', '--force'])
- assert args.func == command_image_remove
- assert args.reference == 'a'
- assert args.remove_dependents
- assert args.force
-
-
- def test_parser_jail(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(['jail', 'create', 'freebsd-latest', '--command', '/test-command', '--tags', 'a', 'b', 'c', '--env', 'd:1', 'e:2', '--mounts', 'mount-A:/a', 'mount-B:/b', '--hostname', 'xyz'])
- assert args.func == command_jail_create
- assert args.command == '/test-command'
- assert args.tags == ['a', 'b', 'c']
- assert args.env == ['d:1', 'e:2']
- assert args.mounts == ['mount-A:/a', 'mount-B:/b']
- assert args.hostname == 'xyz'
-
- args = parser.parse_args(['jail', 'start', 'jail-A'])
- assert args.func == command_jail_start
- assert args.reference == 'jail-A'
-
- args = parser.parse_args(['jail', 'stop', 'jail-A'])
- assert args.func == command_jail_stop
- assert args.reference == 'jail-A'
-
- args = parser.parse_args(['jail', 'remove', 'jail-A', '--force'])
- assert args.func == command_jail_remove
- assert args.reference == 'jail-A'
- assert args.force
-
- args = parser.parse_args(['jail', 'exec', 'jail-A', '/bin/sh', '-c', 'ls', '-al'])
- assert args.func == command_jail_exec
- assert args.reference == 'jail-A'
- assert args.command == ['/bin/sh', '-c', 'ls', '-al']
-
- args = parser.parse_args(['jail', 'oneshot', '--env', 'd:1', 'e:2', '--mounts', 'mount-A:/a', 'mount-B:/b', '--', 'image-A', '/bin/sh', '-c', 'ls', '-al'])
- assert args.func == command_jail_oneshot
- assert args.image == 'image-A'
- assert args.env == ['d:1', 'e:2']
- assert args.mounts == ['mount-A:/a', 'mount-B:/b']
- assert args.command == ['/bin/sh', '-c', 'ls', '-al']
-
- args = parser.parse_args(['jail', 'list', '--full-sha256'])
- assert args.func == command_jail_list
- assert args.full_sha256
-
- args = parser.parse_args(['jail', 'tag', 'deadbee', 'a', 'b', 'c'])
- assert args.func == command_jail_tag
- assert args.reference == 'deadbee'
- assert args.tags == ['a', 'b', 'c']
-
- args = parser.parse_args(['jail', 'untag', 'a', 'b', 'c'])
- assert args.func == command_jail_untag
- assert args.tags == ['a', 'b', 'c']
-
- args = parser.parse_args(['jail', 'prune', '--force'])
- assert args.func == command_jail_prune
- 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
|