mirror of
https://github.com/SK8-ENGINE/skate-3-rust-engine.git
synced 2026-10-27 19:54:40 +00:00
42 lines
1.7 KiB
Python
42 lines
1.7 KiB
Python
"""Publisher checks without network or a game process."""
|
|
import hashlib
|
|
import json
|
|
from pathlib import Path
|
|
import tempfile
|
|
import unittest
|
|
import zipfile
|
|
import publish_experimental as p
|
|
from test_updater import metadata
|
|
|
|
|
|
class RollingReleaseTests(unittest.TestCase):
|
|
def test_only_complete_build_sets_are_retained(self):
|
|
assets = [dict(name=n, state='uploaded') for n in (
|
|
'release-3.json', 'skate3rust-windows-x64-build-3.zip',
|
|
'skate3rust-windows-x64-build-3.zip.sha256', 'release-4.json')]
|
|
self.assertEqual(p.complete_builds(assets), [3])
|
|
assets[0]['state'] = 'new'
|
|
self.assertEqual(p.complete_builds(assets), [])
|
|
|
|
def test_package_validation_and_corruption(self):
|
|
with tempfile.TemporaryDirectory() as temp:
|
|
root = Path(temp)
|
|
meta = {**metadata(), 'tag': 'experimental'}
|
|
meta['files'] = {n: hashlib.sha256(b'program').hexdigest() for n in meta['files']}
|
|
(root/'release.json').write_text(json.dumps(meta))
|
|
with zipfile.ZipFile(root/p.PACKAGE, 'w') as z:
|
|
z.writestr(p.PREFIX+'release.json', json.dumps(meta))
|
|
for name in meta['files']:
|
|
z.writestr(p.PREFIX+name, b'program')
|
|
digest = hashlib.sha256((root/p.PACKAGE).read_bytes()).hexdigest()
|
|
checksum = root/(p.PACKAGE+'.sha256')
|
|
checksum.write_text(digest+' '+p.PACKAGE)
|
|
self.assertEqual(p.validate(root), (meta, digest))
|
|
checksum.write_text('0'*64+' '+p.PACKAGE)
|
|
with self.assertRaisesRegex(ValueError, 'checksum'):
|
|
p.validate(root)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|