1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
import tarfile
from unittest.mock import patch
from datetime import datetime
from django.core.management import call_command
from django.core.management.base import CommandError
from django.test import TransactionTestCase
from django.utils import timezone
from main.models import Arch, Package, Repo
from packages.models import FlagRequest
# Django's TestCase is wrapped in transaction, therefore use TransactionTestCase
class RepoReadTest(TransactionTestCase):
fixtures = ['main/fixtures/arches.json', 'main/fixtures/repos.json']
def create_pkg(self, repo=None, pkgver='4.10.1', pkgrel='1'):
if not repo:
repo = Repo.objects.get(name__iexact='core')
arch = Arch.objects.get(name__iexact='any')
now = datetime.now(tz=timezone.utc)
return Package.objects.create(arch=arch, repo=repo, pkgname='systemd',
pkgbase='systemd', pkgver=pkgver,
pkgrel=pkgrel, pkgdesc='Linux kernel',
compressed_size=10, installed_size=20,
last_update=now, created=now)
def test_invalid_args(self):
with self.assertRaises(CommandError) as e:
call_command('reporead')
self.assertIn('missing arch and file.', str(e.exception))
with self.assertRaises(CommandError) as e:
call_command('reporead', 'x86_64')
self.assertIn('Package database file is required.', str(e.exception))
with self.assertRaises(CommandError) as e:
call_command('reporead', 'x86_64', 'nothing.db.tar.gz')
self.assertIn('Specified package database file does not exist.', str(e.exception))
def test_invalid_arch(self):
with self.assertRaises(CommandError) as e:
call_command('reporead', 'armv64', 'devel/fixtures/core.db.tar.gz')
self.assertEqual('Specified architecture armv64 is not currently known.', str(e.exception))
def test_read_packages(self):
with patch('devel.management.commands.reporead.logger') as logger:
call_command('reporead', 'x86_64', 'devel/fixtures/core.db.tar.gz')
logger.info.assert_called()
# Verify contents
with tarfile.open('devel/fixtures/core.db.tar.gz') as tar:
files = [name.replace('core.db/', '') for name in tar.getnames()
if name != 'core.db' and 'desc' not in name]
packages = Package.objects.all()
import_packages = ["{}-{}-{}".format(pkg.pkgname, pkg.pkgver, pkg.pkgrel) for pkg in packages]
self.assertCountEqual(files, import_packages)
def test_flagoutofdate(self):
pkg = self.create_pkg()
FlagRequest.objects.create(pkgbase=pkg.pkgbase, repo=pkg.repo,
pkgver=pkg.pkgver, epoch=pkg.epoch,
ip_address='1.1.1.1')
with patch('devel.management.commands.reporead.logger') as logger:
call_command('reporead', 'x86_64', 'devel/fixtures/core.db.tar.gz')
logger.info.assert_called()
self.assertEqual(len(FlagRequest.objects.all()), 0)
def test_flagoutofdate_staging(self):
staging = Repo.objects.get(name__iexact='staging')
pkg = self.create_pkg()
staging_pkg = self.create_pkg(repo=staging, pkgrel='2')
FlagRequest.objects.create(pkgbase=pkg.pkgbase, repo=pkg.repo,
pkgver=pkg.pkgver, epoch=pkg.epoch,
ip_address='1.1.1.1')
FlagRequest.objects.create(pkgbase=staging_pkg.pkgbase, repo=staging_pkg.repo,
pkgver=staging_pkg.pkgver, epoch=staging_pkg.epoch,
ip_address='1.1.1.1')
with patch('devel.management.commands.reporead.logger') as logger:
call_command('reporead', 'x86_64', 'devel/fixtures/core.db.tar.gz')
logger.info.assert_called()
objects = FlagRequest.objects.all()
self.assertEqual(len(objects), 1)
self.assertEqual(objects[0].pkgver, staging_pkg.pkgver)
|