|
- import pytest
- from focker.image import validate_spec, \
- build_squeeze
- import subprocess
- from tempfile import TemporaryDirectory
- import focker.image
- import os
- from focker.zfs import zfs_find, \
- zfs_mountpoint
- from focker.misc import focker_unlock
-
-
- def test_validate_spec_01():
- spec = { 'base': 'base', 'steps': 'steps' }
- validate_spec(spec)
-
-
- def test_validate_spec_02():
- spec = { 'steps': 'steps' }
- with pytest.raises(ValueError):
- validate_spec(spec)
-
-
- def test_validate_spec_03():
- spec = { 'base': 'base' }
- with pytest.raises(ValueError):
- validate_spec(spec)
-
-
- def test_validate_spec_04():
- spec = {}
- with pytest.raises(ValueError):
- validate_spec(spec)
-
-
- def test_build_squeeze(monkeypatch):
- focker_unlock()
- subprocess.check_output(['focker', 'image', 'remove', '--force', '-R', 'test-build-squeeze-base'])
- subprocess.check_output(['focker', 'bootstrap', '--dry-run', '-t', 'test-build-squeeze-base'])
- spec = dict(base='test-build-squeeze-base', steps=[
- dict(copy=['/etc/localtime', '/etc/localtime']),
- dict(copy=['/etc/hosts', '/etc/hosts'])
- ])
- _, base_sha256 = zfs_find('test-build-squeeze-base', focker_type='image')
- def fail(sha256, *args, **kwargs):
- if sha256 != base_sha256:
- raise RuntimeError('No pre-existing layers expected apart from base')
- monkeypatch.setattr(focker.image, 'zfs_snapshot_by_sha256', fail)
- with TemporaryDirectory() as d:
- args = lambda: 0
- args.focker_dir = d
- name, _ = build_squeeze(spec, args)
- focker_unlock()
- mountpoint = zfs_mountpoint(name.split('@')[0])
- print('name:', name, 'mountpoint:', mountpoint)
- assert os.path.exists(os.path.join(mountpoint, 'etc/localtime'))
- assert os.path.exists(os.path.join(mountpoint, 'etc/hosts'))
- subprocess.check_output(['focker', 'image', 'remove', '-R', 'test-build-squeeze-base'])
- assert not os.path.exists(mountpoint)
|