~untrusted-ci-dev-bot/bileto/bileto-ubuntu-trusty-landing-005

« back to all changes in this revision

Viewing changes to tests/test_worker_manager.py

  • Committer: Bileto Bot
  • Author(s): Robert Bruce Park
  • Date: 2016-08-18 23:44:41 UTC
  • mfrom: (672.1.31 publish-job)
  • Revision ID: untrusted-ci-dev-bot@canonical.com-20160818234441-5hbohl9uzrkh9g31
Implement publish job in Bileto, obsoleting jenkins entirely.

Show diffs side-by-side

added added

removed removed

Lines of Context:
3
3
Test the package manager class.
4
4
"""
5
5
 
 
6
from os import unlink
6
7
from os.path import join
 
8
 
7
9
from subprocess import PIPE
8
10
from asyncio import coroutine
9
11
from collections import defaultdict
311
313
            ('xenial/media-hub', 'Successfully built', None),
312
314
            ('yakkety/media-hub', 'Successfully built', None),
313
315
        ]
314
 
        ticket = Mock(status='Preparing packages.')
 
316
        ticket = Mock(
 
317
            status='Preparing packages.',
 
318
            lockfile=join(self.tempdir, 'lockfile'))
315
319
        manager = Manager(ticket)
316
320
        manager.status()
317
321
        ticket.set_status.assert_called_once_with(
347
351
            ('xenial/media-hub', 'Successfully built', None),
348
352
            ('yakkety/media-hub', 'Successfully built', None),
349
353
        ]
350
 
        ticket = Mock(status='Preparing packages.')
 
354
        ticket = Mock(
 
355
            status='Preparing packages.',
 
356
            lockfile=join(self.tempdir, 'lockfile'))
351
357
        manager = Manager(ticket)
352
358
        manager.status()
353
359
        ticket.set_status.assert_called_once_with(
368
374
            ('xenial/media-hub', 'Release pocket', '2'),
369
375
            ('yakkety/media-hub', 'Updates pocket', '3'),
370
376
        ]
371
 
        ticket = Mock(status='Preparing packages.')
 
377
        ticket = Mock(
 
378
            status='Preparing packages.',
 
379
            lockfile=join(self.tempdir, 'lockfile'))
372
380
        manager = Manager(ticket)
373
381
        manager.status()
374
382
        ticket.set_status.assert_called_once_with(
378
386
            '"2", "yakkety": "3"}}')
379
387
        Acts.finalize.assert_called_once_with(manager)
380
388
 
 
389
    @patch('bileto.worker.manager.parallelize')
 
390
    @patch('bileto.worker.manager.Manager.packages')
 
391
    def test_manager_prepublish(self, packages, parallelize):
 
392
        """Allow publish to proceed."""
 
393
        packages.return_value = {}
 
394
        parallelize.return_value = [
 
395
            ('vivid/media-hub', None),
 
396
            ('xenial/media-hub', None),
 
397
            ('yakkety/media-hub', None),
 
398
        ]
 
399
        ticket = Mock()
 
400
        manager = Manager(ticket)
 
401
        manager.prepublish()  # No exception raised
 
402
 
 
403
    @patch('bileto.worker.manager.parallelize')
 
404
    @patch('bileto.worker.manager.Manager.packages')
 
405
    def test_manager_prepublish_abort(self, packages, parallelize):
 
406
        """Prevent publication when problems found."""
 
407
        packages.return_value = {}
 
408
        parallelize.return_value = [
 
409
            ('vivid/media-hub', 'Diff missing'),
 
410
            ('xenial/media-hub', 'Diff missing'),
 
411
            ('yakkety/media-hub', 'Dependency wait'),
 
412
        ]
 
413
        ticket = Mock()
 
414
        manager = Manager(ticket)
 
415
        with self.assertRaisesRegex(BiletoError, 'Publish failed: Dep'):
 
416
            manager.prepublish()
 
417
 
 
418
    @patch('bileto.worker.manager.rename')
 
419
    @patch('bileto.worker.manager.makedirs')
 
420
    @patch('bileto.worker.manager.parallelize')
 
421
    @patch('bileto.worker.manager.Manager.packages')
 
422
    @patch('bileto.worker.manager.Package.manifest', ['a\n', 'b\n', 'c\n'])
 
423
    def test_manager_publish(self, packages, parallelize, makedirs, rename):
 
424
        """Do publishy things."""
 
425
        packages.return_value = {}
 
426
        parallelize.return_value = [
 
427
            ('vivid/media-hub', None),
 
428
            ('xenial/media-hub', None),
 
429
            ('yakkety/media-hub', None),
 
430
        ]
 
431
        ticket = Mock(siloname='ubuntu/landing-555')
 
432
        manager = Manager(ticket)
 
433
        manager.publish()
 
434
        makedirs.assert_called_once_with(
 
435
            join(self.tempdir, 'publish'), exist_ok=True)
 
436
        filename = 'packagelist_rsync_ubuntu-landing-555'
 
437
        path = join(self.tempdir, 'publish', filename)
 
438
        rename.assert_called_once_with(filename, path)
 
439
        with open(filename, encoding='utf-8') as data:
 
440
            self.assertEqual(data.read().strip(), 'a\nb\nc')
 
441
        unlink(filename)
 
442
 
381
443
    @patch('bileto.worker.manager.Manager.ppa')
382
444
    @patch('bileto.worker.vcs.create_subprocess_exec', POST_NUKE)
383
445
    def test_manager_nuke(self, ppa):