P08-03: 配置の通常操作受入
This commit is contained in:
@@ -524,6 +524,82 @@ class EvidenceTests(unittest.TestCase):
|
||||
def test_mock_native_timeout_restores_project_and_cleans_owned_child(self):
|
||||
self.collector_mock(fail_wait=True)
|
||||
|
||||
class R09ImageTests(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.temp = tempfile.TemporaryDirectory(dir=ROOT/'tests/fixtures/p08-03/.scratch')
|
||||
self.addCleanup(self.temp.cleanup)
|
||||
self.fixture = module('repair13_image_fixture', ROOT/'tests/fixtures/p08-03/repair13_images.py')
|
||||
self.out, self.original, self.index, self.measurement, self.pins = self.fixture.make(Path(self.temp.name), C.R09_COMMIT)
|
||||
|
||||
def images(self):
|
||||
C.r09_images(self.out, self.index, self.measurement)
|
||||
|
||||
def change_bytes(self, data):
|
||||
row = self.measurement['images'][0]
|
||||
(self.out/row['file']).write_bytes(data)
|
||||
row['source_sha256'] = hashlib.sha256(data).hexdigest()
|
||||
self.fixture.refresh(self.out, self.index, self.measurement)
|
||||
|
||||
def test_baseline_progressive_and_collection_positive(self):
|
||||
self.images()
|
||||
self.assertEqual(self.original, C.r09_collection(self.out,self.index,self.pins))
|
||||
self.assertEqual((1280,752),C.jpeg_dimensions(self.fixture.jpeg(progressive=True)))
|
||||
|
||||
def test_truncated_or_non_jpeg(self):
|
||||
good = self.fixture.jpeg()
|
||||
for data in (good[:-1], b'NOT JPEG', b'\xff\xd8\xff\xe0\xff\xff\xff\xd9',
|
||||
good[:15]+b'\xff\xd9', b'\xff\xd8\xff\xd9'):
|
||||
with self.subTest(data=data):
|
||||
self.change_bytes(data)
|
||||
with self.assertRaisesRegex(ValueError, 'JPEG'):
|
||||
self.images()
|
||||
|
||||
def test_sof_dimension_mismatch(self):
|
||||
self.change_bytes(self.fixture.jpeg(height=720))
|
||||
with self.assertRaisesRegex(ValueError,'SOF dimension mismatch'): self.images()
|
||||
|
||||
def test_before_after_dimension_drift(self):
|
||||
self.change_bytes(self.fixture.jpeg(height=753))
|
||||
self.measurement['images'][0]['height'] = 753
|
||||
with self.assertRaisesRegex(ValueError,'before/after dimension drift'): self.images()
|
||||
|
||||
def test_missing_image_entry(self):
|
||||
self.measurement['images'].pop()
|
||||
with self.assertRaisesRegex(ValueError,'missing/extra image entry'): self.images()
|
||||
|
||||
def test_extra_image_entry(self):
|
||||
row = dict(self.measurement['images'][0],file='os-pair/extra.png')
|
||||
self.measurement['images'].append(row)
|
||||
with self.assertRaisesRegex(ValueError,'missing/extra image entry'): self.images()
|
||||
|
||||
def test_duplicate_image_entry(self):
|
||||
self.measurement['images'].append(self.measurement['images'][0])
|
||||
with self.assertRaisesRegex(ValueError,'duplicate file'): self.images()
|
||||
|
||||
def test_extra_indexed_image(self):
|
||||
(self.out/'os-pair/extra.png').write_bytes(self.fixture.jpeg())
|
||||
self.fixture.refresh(self.out,self.index,self.measurement)
|
||||
with self.assertRaisesRegex(ValueError,'missing/extra image entry'): self.images()
|
||||
|
||||
def test_source_sha256_mismatch(self):
|
||||
self.measurement['images'][0]['source_sha256'] = '0'*64
|
||||
with self.assertRaisesRegex(ValueError,'source_sha256 mismatch'): self.images()
|
||||
|
||||
def test_stale_index_pin(self):
|
||||
self.measurement['original_index_sha256'] = '0'*64
|
||||
with self.assertRaisesRegex(ValueError,'stale image index pin'): self.images()
|
||||
|
||||
def test_original_canonical_divergence(self):
|
||||
(self.out/self.measurement['images'][0]['file']).write_bytes(self.fixture.jpeg(height=720))
|
||||
with self.assertRaisesRegex(ValueError,'original/canonical byte divergence'):
|
||||
C.r09_collection(self.out,self.index,self.pins)
|
||||
|
||||
def test_collection_pin_mismatch(self):
|
||||
self.pins['runner_input']['sha256'] = '0'*64
|
||||
with self.assertRaisesRegex(ValueError,'collection pin SHA'):
|
||||
C.r09_collection(self.out,self.index,self.pins)
|
||||
|
||||
|
||||
class RealR05InfrastructureTests(unittest.TestCase):
|
||||
"""Actual native snapshot, never a fabricated acceptance specimen."""
|
||||
def setUp(self):
|
||||
|
||||
Reference in New Issue
Block a user