|
|
@@ -0,0 +1,58 @@ |
|
|
|
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):
|
|
|
|
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)
|