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)
def test_sign_override_key(self): with mock.patch('subprocess.call', call.Call()): cloud_build = CB( config='tests/minimal_config.yaml', data_dir=self.kwargs['data_dir'], config_override={'key': 0}, ) cloud_build.create_images(no_tests=True) cloud_build.sign()
def test_sign_requires_key(self): with mock.patch('subprocess.call', call.Call()): regex = 'key.*config' cloud_build = CB( config='tests/minimal_config.yaml', data_dir=self.kwargs['data_dir'], ) cloud_build.create_images(no_tests=True) self.assertRaisesRegex(Error, regex, cloud_build.sign)
def test_bad_size(self): with mock.patch('subprocess.call', call.Call()): regex = 'Bad size.*' cloud_build = CB( config='tests/test_bad_size.yaml', data_dir=self.kwargs['data_dir'], ) self.assertRaisesRegex(Error, regex, cloud_build.create_images, no_tests=True)
class TestAfterSyncCommands(TestCase): def setUp(self): self.data_dir = Path(tempfile.mkdtemp(prefix='cloud_build')) def tearDown(self): shutil.rmtree(self.data_dir) @mock.patch('subprocess.call', call.Call(decorators=DS)) def test_run_after_sync_remote_commands(self): cb = CB( config='tests/test_run_after_sync_remote_commands.yaml', data_dir=self.data_dir, ) cb.create_images(no_tests=True) regex = r'ssh.*kick' self.assertRaisesRegex(Exception, regex, cb.sync, create_remote_dirs=True) @mock.patch('subprocess.call', call.Call(decorators=DS)) def test_run_after_sync_local_commands(self): cb = CB( config='tests/test_run_after_sync_local_commands.yaml', data_dir=self.data_dir, ) cb.create_images(no_tests=True) regex = r'\[\'kick' self.assertRaisesRegex(Exception, regex, cb.sync, create_remote_dirs=True) @mock.patch('subprocess.call', call.Call(decorators=DS)) def test_dont_run_after_sync_local_commands(self): cb = CB( config='tests/minimal_config.yaml', data_dir=self.data_dir, ) cb.create_images(no_tests=True) cb.sync(create_remote_dirs=False)
class TestNoDelete(TestCase): def setUp(self): self.data_dir = Path(tempfile.mkdtemp(prefix='cloud_build')) self.images_dir = Path('/tmp/cloud-build-test_no_delete/') self.images_dir.mkdir() def tearDown(self): shutil.rmtree(self.data_dir) shutil.rmtree(self.images_dir) @mock.patch('subprocess.call', call.Call()) def test_no_delete_false(self): cb = CB( config='tests/test_no_delete_false.yaml', data_dir=self.data_dir, ) other_file = self.images_dir / 'other_file.txt' other_file.write_text('Some text') cb.create_images(no_tests=True) cb.sync(create_remote_dirs=True) del cb msg = 'Other files shoud be deleted if not no_delete' if other_file.exists(): self.fail(msg) @mock.patch('subprocess.call', call.Call()) def test_no_delete_true(self): cb = CB( config='tests/test_no_delete_true.yaml', data_dir=self.data_dir, ) other_file = self.images_dir / 'other_file.txt' other_file.write_text('Some text') cb.create_images(no_tests=True) cb.sync(create_remote_dirs=True) del cb msg = 'Other files shoud not be deleted if no_delete' if not other_file.exists(): self.fail(msg)
def test_try_build_all_zero_rc(self): def cond(args): return args[1].endswith('aarch64') ds = {'make': [call.return_d(0, cond=cond), call.nop_d(cond=cond)]} with mock.patch('subprocess.call', call.Call(decorators=ds)): cloud_build = CB( config='tests/test_try_build_all.yaml', data_dir=self.kwargs['data_dir'], ) regex = r'build.*:' self.assertRaisesRegex(MultipleBuildErrors, regex, cloud_build.create_images, no_tests=True)