示例#1
0
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)
示例#2
0
 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()
示例#3
0
 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)
示例#4
0
 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)
示例#5
0
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)
示例#6
0
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)
示例#7
0
    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)