cloud-build/tests/test_rebuild.py
2022-02-08 02:52:55 +03:00

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)