Port releng tests to pytest

This commit is contained in:
Jelle van der Waa 2021-09-20 10:32:00 +02:00
parent f8a5ec056e
commit c9e108502e
No known key found for this signature in database
GPG Key ID: C06086337C50773E
4 changed files with 116 additions and 56 deletions

View File

@ -1,6 +1,7 @@
from base64 import b64decode
from bencode import bdecode, bencode
from datetime import datetime
import binascii
import hashlib
from pytz import utc
@ -59,7 +60,7 @@ def info_html(self):
def torrent(self):
try:
data = b64decode(self.torrent_data.encode('utf-8'))
except TypeError:
except (TypeError, binascii.Error):
return None
if not data:
return None

34
releng/tests/conftest.py Normal file
View File

@ -0,0 +1,34 @@
from datetime import datetime
from base64 import b64encode
from bencode import bencode
import pytest
from releng.models import Release
VERSION = '1.0'
KERNEL_VERSION = '4.18'
@pytest.fixture
def release(db):
release = Release.objects.create(release_date=datetime.now(),
version=VERSION,
kernel_version=KERNEL_VERSION)
yield release
release.delete()
@pytest.fixture
def torrent_data():
data = {
'comment': 'comment',
'created_by': 'Arch Linux',
'creation date': int(datetime.utcnow().timestamp()),
'info': {
'name': 'arch.iso',
'length': 1,
}
}
return b64encode(bencode(data)).decode()

View File

@ -1,34 +1,50 @@
from django.test import TestCase
from releng.models import Release
def test_feed(client, release):
response = client.get('/feeds/releases/')
assert response.status_code == 200
class RelengTest(TestCase):
fixtures = ['releng/fixtures/release.json']
def test_str(release):
assert str(release) == release.version
def setUp(self):
self.release = Release.objects.first()
def test_feed(self):
response = self.client.get('/feeds/releases/')
self.assertEqual(response.status_code, 200)
def test_absolute_url(release):
assert release.version, release.get_absolute_url()
def test_absolute_url(self):
self.assertIn(self.release.version, self.release.get_absolute_url())
def test_iso_url(self):
url = self.release.iso_url()
ver = self.release.version
expected = 'iso/{}/archlinux-{}-x86_64.iso'.format(ver, ver)
self.assertEqual(url, expected)
def test_iso_url(release):
url = release.iso_url()
ver = release.version
expected = 'iso/{}/archlinux-{}-x86_64.iso'.format(ver, ver)
assert url == expected
def test_info_html(self):
self.assertIn(self.release.info, self.release.info_html())
def test_dir_path(self):
dir_path = u'iso/{}/'.format(self.release.version)
self.assertEqual(dir_path, self.release.dir_path())
def test_info_html(release):
assert release.info in release.info_html()
def test_sitemap(self):
response = self.client.get('/sitemap-releases.xml')
self.assertEqual(response.status_code, 200)
def test_dir_path(release):
dir_path = u'iso/{}/'.format(release.version)
assert dir_path == release.dir_path()
def test_sitemap(client, release):
response = client.get('/sitemap-releases.xml')
assert response.status_code == 200
def test_garbage_torrent_data(release):
assert release.torrent() is None
release.torrent_data = 'garbage'
assert release.torrent() is None
def test_torrent_data(release, torrent_data):
release.torrent_data = torrent_data
data = release.torrent()
assert 'arch' in data['file_name']
def test_magnet_uri(release, torrent_data):
release.torrent_data = torrent_data
assert release.magnet_uri()

View File

@ -1,40 +1,49 @@
from django.test import TestCase
def test_release_json(client, release, torrent_data):
version = release.version
response = client.get('/releng/releases/json/')
assert response.status_code == 200
from releng.models import Release
data = response.json()
assert data['version'] == 1
release_data = data['releases'][0]
assert release_data['version'] == version
# Test with torrent data
release.torrent_data = torrent_data
release.save()
response = client.get('/releng/releases/json/')
assert response.status_code == 200
class RelengViewTest(TestCase):
fixtures = ['releng/fixtures/release.json']
def test_json(db, client):
response = client.get('/releng/releases/json/')
assert response.status_code == 200
def setUp(self):
self.release = Release.objects.first()
data = response.json()
assert data['releases'] == []
def test_release_json(self):
version = self.release.version
response = self.client.get('/releng/releases/json/')
self.assertEqual(response.status_code, 200)
data = response.json()
self.assertEqual(data['version'], 1)
release = data['releases'][0]
self.assertEqual(release['version'], version)
def test_netboot_page(db, client):
response = client.get('/releng/netboot/')
assert response.status_code == 200
def test_netboot_page(self):
response = self.client.get('/releng/netboot/')
self.assertEqual(response.status_code, 200)
def test_netboot_config(self):
response = self.client.get('/releng/netboot/archlinux.ipxe')
self.assertEqual(response.status_code, 200)
def test_netboot_config(db, client):
response = client.get('/releng/netboot/archlinux.ipxe')
assert response.status_code == 200
def test_release_torrent_not_found(self):
# TODO: Add torrent data to release fixture
version = self.release.version
response = self.client.get('/releng/releases/{}/torrent/'.format(version))
self.assertEqual(response.status_code, 404)
def test_release_details(self):
version = self.release.version
response = self.client.get('/releng/releases/{}/'.format(version))
self.assertEqual(response.status_code, 200)
self.assertIn(version, response.content.decode('utf-8'))
def test_release_torrent(client, release, torrent_data):
response = client.get('/releng/releases/{}/torrent/'.format(release.version))
assert response.status_code == 404
release.torrent_data = torrent_data
release.save()
response = client.get('/releng/releases/{}/torrent/'.format(release.version))
assert response.status_code == 200
def test_release_details(client, release):
response = client.get('/releng/releases/{}/'.format(release.version))
assert response.status_code == 200
assert release.version in response.content.decode()