77 lines
2.3 KiB
Python
77 lines
2.3 KiB
Python
from pathlib import Path
|
|
from unittest import TestCase
|
|
from unittest import mock
|
|
|
|
import os
|
|
import shutil
|
|
import tempfile
|
|
import time
|
|
|
|
from cloud_build import CB
|
|
from cloud_build import BuildError
|
|
|
|
import tests.call as call
|
|
|
|
|
|
DS = {'make': [call.return_d(0), call.nop_d]}
|
|
|
|
|
|
class TestRebuild(TestCase):
|
|
def setUp(self):
|
|
self.data_dir = Path(tempfile.mkdtemp(prefix='cloud_build'))
|
|
self.cb = CB(
|
|
config='tests/test_rebuild.yaml',
|
|
data_dir=self.data_dir,
|
|
)
|
|
|
|
def tearDown(self):
|
|
shutil.rmtree(self.data_dir)
|
|
|
|
@mock.patch('subprocess.call', call.Call(decorators=DS))
|
|
def test_do_rebuild(self):
|
|
tarball = self.data_dir / 'out/docker_Sisyphus-x86_64.tar.xz'
|
|
tarball.touch()
|
|
two_hours_ago = time.time() - 2*60*60
|
|
os.utime(tarball, times=(two_hours_ago, two_hours_ago))
|
|
msg = 'Do not try to rebuild with outdated cache'
|
|
with self.assertRaises(BuildError, msg=msg):
|
|
self.cb.create_images(no_tests=True)
|
|
|
|
@mock.patch('subprocess.call', call.Call(decorators=DS))
|
|
def test_do_force_rebuild(self):
|
|
tarball = self.data_dir / 'out/docker_Sisyphus-x86_64.tar.xz'
|
|
tarball.touch()
|
|
del self.cb
|
|
cb = CB(
|
|
config='tests/test_rebuild.yaml',
|
|
data_dir=self.data_dir,
|
|
config_override={'rebuild_after': {'days': 0}},
|
|
)
|
|
msg = 'Do not try to rebuild when force_rebuild'
|
|
with self.assertRaises(BuildError, msg=msg):
|
|
cb.create_images(no_tests=True)
|
|
|
|
@mock.patch('subprocess.call', call.Call(decorators=DS))
|
|
def test_dont_rebuild(self):
|
|
tarball = self.data_dir / 'out/docker_Sisyphus-x86_64.tar.xz'
|
|
tarball.touch()
|
|
msg = 'Try to rebuild with valid cache'
|
|
try:
|
|
self.cb.create_images(no_tests=True)
|
|
except BuildError:
|
|
self.fail(msg)
|
|
|
|
@mock.patch('subprocess.call', call.Call())
|
|
def test_dont_create_image_when_rebuild(self):
|
|
tarball = self.data_dir / 'out/docker_Sisyphus-x86_64.tar.xz'
|
|
tarball.touch()
|
|
self.cb.create_images(no_tests=True)
|
|
image = (
|
|
self.data_dir
|
|
/ 'images'
|
|
/ 'alt-sisyphus-rootfs-minimal-x86_64.tar.xz'
|
|
)
|
|
msg = 'Do not create image when rebuild'
|
|
if not image.exists():
|
|
self.fail(msg)
|