Files
RustRaptor/tests/test_hd_extended_retained_bound.py
T
raptorreplica a073f73f3a Fix HD atlas sampling and protected terrain joins
Add rational atlas cells and bounded authenticated Original-detail retention with standalone synthetic regression checks. Rebuild Linux and Windows runtimes; validate all 5384 supplied frames and preserve three exact 1080p regression controls.
2026-10-17 19:22:20 +11:00

141 lines
11 KiB
Python

"""Private generic bounds; synthetic Source/PNG fixtures, no real art or engine."""
import ast, copy, hashlib, importlib.util, json, pathlib, struct, sys, tempfile, unittest
from unittest import mock
ROOT=pathlib.Path(__file__).resolve().parents[1]
sys.path.insert(0,str(ROOT/'tools'));sys.path.insert(0,str(ROOT/'tests'))
import hd_frame_policy as policy
import hd_art_audit as audit
import hd_register_reviewed as registrar
import hd_candidate_review as candidate
import test_hd_retained_original_policy as old
from PIL import Image
def raw_source(painted, width=32, height=32):
data=struct.pack('<5i',0,0,0,width,height)
for y in range(height):
n=max(0,min(width,painted-y*width))
if n: data+=struct.pack('<4i',0,y,y*width,n)+bytes((y*width+x)%256 for x in range(n))
return data+struct.pack('<4i',0,0,-1,0)
def frame(count, painted=625):
raw=raw_source(painted)
cells=sorted([[i%32,i//32] for i in range(painted)])[:count]
return dict(frame=0,file='synthetic.png',logical_width=32,logical_height=32,origin=[0,0],source_sha256=hashlib.sha256(raw).hexdigest(),original_detail_cells=cells)
class ExtendedPolicy(unittest.TestCase):
def test_exact_quarter_and_maximum_boundaries(self):
for n,painted,ok in [(64,64,True),(65,260,True),(65,259,False),(73,625,True),(128,512,True),(128,511,False),(129,600,False)]:
with self.subTest(n=n,painted=painted):
if ok: policy.validate_frame_policy(frame(n,painted),raw_source(painted))
else:
with self.assertRaises(ValueError): policy.validate_frame_policy(frame(n,painted),raw_source(painted))
def test_legacy_full_small_source_still_valid_without_new_density_rule(self):
f=old.frame();f['original_detail_cells']=[[0,0],[0,1],[1,0],[1,1]]
policy.validate_frame_policy(f,old.payload())
def test_transparent_canvas_area_is_never_denominator(self):
f=frame(65,259)
self.assertEqual(f['logical_width']*f['logical_height'],1024)
with self.assertRaisesRegex(ValueError,'quarter'): policy.validate_frame_policy(f,raw_source(259))
def test_schema_preparation_is_not_final_density_approval(self):
f=frame(65,259);policy.validate_frame_policy(f)
rows=candidate.proposal_frames({'sequences':[dict(base_asset=1,frame_count=1,frames=[f])]})
self.assertEqual(len(rows['00001']['original_detail_cells']),65)
with self.assertRaises(ValueError):policy.validate_frame_policy(f,raw_source(259))
def test_sorted_unique_inbounds_typed_and_painted_guards_remain(self):
mutations=[lambda c:c[::-1],lambda c:c[:64]+[c[0]],lambda c:c[:64]+[[32,0]],lambda c:c[:64]+[[True,0]],lambda c:c[:64]+[[31,31]]]
for mutate in mutations:
f=frame(65);f['original_detail_cells']=mutate(f['original_detail_cells'])
with self.subTest(cells=f['original_detail_cells'][-1]),self.assertRaises(ValueError):policy.validate_frame_policy(f,raw_source(625))
def test_extended_reserved_painted_domain_and_nearest_cue_overlap(self):
f=frame(128,512);policy.validate_frame_policy(f,raw_source(512))
#256 is transparency, while raw labels0 and240..255 remain painted.
self.assertEqual(sum(0<=p<=255 for p in policy._indices(raw_source(512))[2]),512)
f['native_nearest_cues']=[f['original_detail_cells'][0]]
with self.assertRaises(ValueError):policy.validate_frame_policy(f,raw_source(512))
def test_legacy_v2_cannot_authorize_extended_and_v3_can_keep_legacy(self):
for n in [1,64]:
self.assertTrue(policy.retained_review_version_ok(policy.LEGACY_RETAINED_POLICY,{'00001':[[0,0]]*n}))
self.assertTrue(policy.retained_review_version_ok(policy.EXTENDED_RETAINED_POLICY,{'00001':[[0,0]]*n}))
self.assertFalse(policy.retained_review_version_ok(policy.LEGACY_RETAINED_POLICY,{'00001':[[0,0]]*65}))
self.assertTrue(policy.retained_review_version_ok(policy.EXTENDED_RETAINED_POLICY,{'00001':[[0,0]]*65}))
for bad in [None,True,'retained-original-details-v1',[]]:self.assertFalse(policy.retained_review_version_ok(bad,{'00001':[[0,0]]*65}))
def test_audit_rejects_density_before_png_access(self):
raw=raw_source(259);f=frame(65,259)
with mock.patch.object(audit.Image,'open',side_effect=AssertionError('PNG read forbidden')):
with self.assertRaisesRegex(ValueError,'quarter'):audit.validate_hd_frame(pathlib.Path('/absent'),f,raw,Image.new('RGBA',(32,32)))
def test_real_synthetic_audit_accepts128_of512_without_raw_changes(self):
with tempfile.TemporaryDirectory() as temp:
q=pathlib.Path(temp);raw=raw_source(512);src=q/'Source';src.write_bytes(raw)
picture=audit.decode(src,[(i,i,i) for i in range(256)])
image=Image.new('RGBA',(64,64),(40,50,60,255));image.putpixel((63,63),(0,0,0,0));image.save(q/'synthetic.png')
before=(q/'synthetic.png').read_bytes()
self.assertEqual(audit.validate_hd_frame(q,frame(128,512),raw,picture),64*64*4)
self.assertEqual(before,(q/'synthetic.png').read_bytes())
def test_malformed_source_and_canvas_still_rejected(self):
f=frame(65)
for raw in [b'',struct.pack('<5i',1,0,0,32,32),raw_source(625,25,25)]:
with self.subTest(length=len(raw)),self.assertRaises(ValueError):policy.validate_frame_policy(f,raw)
class ExtendedRegistrar(old.ActualRegistrarProvenance):
# Inherited legacy tests exercise actual approved_job unmodified call surface.
def extended(self, painted=625, count=73, layout='project'):
self.f=frame(count,painted);self.f['file']='raw.png';raw=raw_source(painted)
self.candidate['sequences'][0]['frames']=[self.f];self.rows=candidate.proposal_frames(self.candidate);digest=candidate.binding_digest(self.rows)
self.review['frame_bindings_sha256']=digest
decl=self.review['retained_original_detail_review'];decl.update(cells_by_asset={'00001':self.f['original_detail_cells']},frame_bindings_sha256=digest,policy_version=policy.EXTENDED_RETAINED_POLICY)
self.write_json(self.job_dir/'candidate.json',self.candidate)
self.write_json(self.job_dir/'job.json',dict(job_id='synthetic-complete1',targets=[dict(asset='00001',source_sha256=self.f['source_sha256'],logical_canvas=[32,32])]))
qa=json.loads((self.root/'qa.json').read_text());qa['frame_bindings_sha256']=digest;qa['frames'][0].update(source_sha256=self.f['source_sha256'],logical_canvas=[32,32]);self.write_json(self.root/'qa.json',qa)
data=(self.project/'data') if layout=='project' else self.project.parent/'data'
(data/'sprites').mkdir(parents=True,exist_ok=True);(data/'sprites/fixture.pic').write_bytes(raw);(data/'INDEX').write_text(f'00001 {len(raw)} sprites/fixture.pic\n');return data
def test_extended_actual_approved_job_both_catalog_layouts(self):
data=self.extended();self.assertEqual(len(self.approve()[2]['00001']['original_detail_cells']),73)
#Identical authenticated payload under the other product layout, no larger raw copies.
(data/'INDEX').unlink();self.extended(layout='parent');self.assertEqual(len(self.approve()[2]['00001']['original_detail_cells']),73)
def test_extended_old_version_rejected(self):
self.extended();d=copy.deepcopy(self.review['retained_original_detail_review']);d['policy_version']=policy.LEGACY_RETAINED_POLICY
with self.assertRaisesRegex(ValueError,'provenance'):self.approve(d)
def test_extended_actual_source_density_beats_forged_claim(self):
self.extended(259,65);self.review['retained_original_detail_review']['claimed_painted_Source_cell_count']=1024
with self.assertRaisesRegex(ValueError,'quarter'):self.approve()
def test_extended_actual_source_hash_required(self):
data=self.extended();(data/'sprites/fixture.pic').write_bytes(raw_source(624))
with self.assertRaisesRegex(ValueError,'authentic catalog Source'):self.approve()
def test_extended_missing_source_rejected(self):
data=self.extended();(data/'INDEX').unlink()
with self.assertRaisesRegex(ValueError,'authentic catalog Source'):self.approve()
def test_extended_source_path_escape_rejected(self):
data=self.extended();(data/'INDEX').write_text('00001 4 ../outside.pic\n')
with self.assertRaisesRegex(ValueError,'escapes catalog'):self.approve()
def test_extended_genuine_context_and_retained_not_generated_still_required(self):
self.extended()
for key in ['hybrid_allscale_and_genuine_context_independent_review','retained_original_not_generated_HD']:
d=copy.deepcopy(self.review['retained_original_detail_review']);d[key]=False
with self.subTest(key=key),self.assertRaisesRegex(ValueError,'provenance'):self.approve(d)
def test_density_helper_legacy_path_needs_no_catalog_io(self):
with mock.patch.object(pathlib.Path,'read_text',side_effect=AssertionError('legacy catalog read')):
registrar.validate_extended_retained_sources(pathlib.Path('/absent'),{'00001':old.selected()})
class RustSourceCompatibility(unittest.TestCase):
def test_legacy_hd_function_bodies_and_normalized_key_tags_remain_exact(self):
# Exact pre-bounds atlas baseline (36b3502e), formerly read from the
# private proposal's sibling original/src/hd.rs. Inline fingerprints
# preserve those exact guards in an ordinary standalone checkout.
expected = {'source_reference_budget': '1e544a7639fd123a6e813fbb34f1ded100a1db192973faeb7ce1b96ad54339a0', 'retain_original_detail_samples': '5b1516291d05de782f4d81242f38686be1dca24d00ab0ee4858e3b92729a73b4', 'sprite_with_policy': '7def63d10f179c30ad71c02b3670ca457a7652a976b4c97c1a9098388655fed5', 'terrain_sprite': 'b5d713c0ed8e5327d96c1dae464b2aca4b5e8c9450f85c53928bdde5c99b6e99', 'frame_key': '3605c9fc321571dbc777036ff500f8c436ebb1e717343c056e363c4b634ea1a1', 'original_detail_cache_identity': 'bb9baa84ba832e34dea5274866ddbde52b35f48634cff0ff80533a4dc6d81ffc'}
new=(ROOT/'src/hd.rs').read_text()
def function(s,name):
start=s.index('fn '+name+'(');left=s.index('{',start);depth=1;end=left+1
while depth:depth+=(s[end]=='{')-(s[end]=='}');end+=1
return s[start:end]
for name in ['source_reference_budget','retain_original_detail_samples','sprite_with_policy','terrain_sprite']:
self.assertEqual(expected[name],hashlib.sha256(function(new,name).encode()).hexdigest(),name)
for name,old_bytes,call in [('frame_key','b"raptor-retained-original-details-v2-painted0255"','original_detail_policy_tag(frame.original_detail_cells.len(), false)'),('original_detail_cache_identity','b"retained-original-rejected-fallback-v2-painted0255"','original_detail_policy_tag(frame.original_detail_cells.len(), true)')]:
self.assertEqual(expected[name],hashlib.sha256(function(new,name).replace(call,old_bytes).encode()).hexdigest(),name)
def test_audit_still_calls_actual_payload_validator(self):
tree=ast.parse((ROOT/'tools/hd_art_audit.py').read_text())
node=next(n for n in tree.body if isinstance(n,ast.FunctionDef) and n.name=='validate_hd_frame')
self.assertIsInstance(node.body[1],ast.Expr)
self.assertEqual(ast.unparse(node.body[1]),'validate_frame_policy(frame, payload)')
if __name__=='__main__':unittest.main(verbosity=2)