P23-03: 生活の観察
This commit is contained in:
@@ -2293,5 +2293,86 @@ class FrameReviewTests(unittest.TestCase):
|
||||
self.assertEqual(check.reviewed_pixel_categories(manifest, digest, verdict_path), set())
|
||||
|
||||
|
||||
class Repair36LabelTests(unittest.TestCase):
|
||||
inputs = check.ROOT.parent / '.runtime/P23-03/build/audit-support/badge-repair36-exact-inputs'
|
||||
|
||||
def recorded(self):
|
||||
request = json.loads((self.inputs/'bad-native-request/request.json').read_bytes())
|
||||
stream = self.inputs.parent.parent/'p23-normal-os-26f-r17/os-pair/B/writer-stream'
|
||||
capture = next(json.loads(line) for line in (stream/'manifest.jsonl').read_text().splitlines()
|
||||
if json.loads(line).get('label') == 'writer-request-0021')
|
||||
return request, check.read_object(stream, capture['state']), check.decode(request['report'])
|
||||
|
||||
def resolved(self, report):
|
||||
result = copy.deepcopy(report)
|
||||
for collection, index, fields in check.observation_label_layout(report):
|
||||
result[collection][index].update(fields)
|
||||
return result
|
||||
|
||||
def test_recorded_negative_and_positive_with_raw_semantics(self):
|
||||
request, state, old = self.recorded()
|
||||
rectangles = check.drawing_rectangle_rows(old)
|
||||
self.assertTrue(check.intersects(rectangles[5][2], rectangles[26][2]))
|
||||
with self.assertRaises(ValueError):
|
||||
check.validate_observation_labels(old)
|
||||
report = self.resolved(old)
|
||||
check.validate_observation_labels(report)
|
||||
check.compare_queues(state, report)
|
||||
check.compare_badges(state, report)
|
||||
check.compare_actor_geometry(state, report)
|
||||
queue = next(b for b in report['landing_badges'] if b['visible_count'] == 0)
|
||||
manifest = json.loads((self.inputs/'bad-native-request/review-image-0/manifest.json').read_bytes())
|
||||
original = manifest['rows'][5]
|
||||
self.assertEqual(queue['anchor'], original['local_rect'][:2])
|
||||
self.assertEqual(original['screenshot_rect'][:2], [642,469])
|
||||
self.assertEqual(queue['members'], next(b['members'] for b in old['landing_badges'] if b['visible_count'] == 0))
|
||||
|
||||
def test_recorded_forgery_controls(self):
|
||||
_, state, old = self.recorded()
|
||||
good = self.resolved(old)
|
||||
for attack in ('at', 'displaced_by', 'count', 'hidden', 'anchor'):
|
||||
report = copy.deepcopy(good)
|
||||
row = report['actor_aggregations'][0]
|
||||
if attack == 'at': row['at'][0] += 1
|
||||
elif attack == 'displaced_by': row['displaced_by'] = []
|
||||
elif attack == 'count': row['text'] = '+'
|
||||
elif attack == 'hidden': report['actor_aggregations'] = []
|
||||
else: row['anchor'][0] += 1
|
||||
with self.subTest(attack=attack), self.assertRaises(ValueError):
|
||||
check.validate_observation_labels(report)
|
||||
check.compare_queues(state, report)
|
||||
check.compare_actor_geometry(state, report)
|
||||
|
||||
def test_generic_order_and_edge_contact(self):
|
||||
for kinds in [('business', 'aggregation'), ('supply', 'landing'),
|
||||
('business', 'supply', 'landing', 'aggregation')]:
|
||||
report = dict(cabins=[], badges=[], landing_badges=[], actor_aggregations=[])
|
||||
for kind in kinds:
|
||||
key = 'badges' if kind in ('business', 'supply') else 'landing_badges' if kind == 'landing' else 'actor_aggregations'
|
||||
report[key].append(dict(kind=kind, at=[10,20], text='abc'))
|
||||
result = self.resolved(report)
|
||||
check.validate_observation_labels(result)
|
||||
positions = [fields['at'] for _, _, fields in check.observation_label_layout(result)]
|
||||
self.assertEqual(positions, [[10+36*i,20] for i in range(len(kinds))])
|
||||
report = dict(cabins=[dict(rect=[0,50,20,20], badge_at=[10,20], badge='abc')],
|
||||
badges=[], landing_badges=[dict(at=[10,20], text='x')], actor_aggregations=[])
|
||||
self.assertEqual(self.resolved(report)['landing_badges'][0]['at'], [46,20])
|
||||
report['landing_badges'][0]['at'] = [46,20]
|
||||
self.assertEqual(self.resolved(report)['landing_badges'][0]['displaced_by'], [])
|
||||
|
||||
def test_future_review_requires_indexed_judgments(self):
|
||||
manifest = dict(rows=[dict(row_index=7, category='queue', eligibility='visible', mechanical_pass=True)], mechanical_pass=True)
|
||||
verdict = dict(manifest_sha256='digest', reviewer='independent-opus-direct-image',
|
||||
state_bits='1', position_bits='1', category_bits='1')
|
||||
with tempfile.TemporaryDirectory() as folder:
|
||||
path = Path(folder)/'verdict.json'
|
||||
path.write_text(json.dumps(verdict))
|
||||
with self.assertRaisesRegex(ValueError, 'indexed judgments'):
|
||||
check.reviewed_pixel_categories(manifest, 'digest', path, require_judgments=True)
|
||||
verdict['judgments'] = [dict(row_index=7, category=True, state=True, position=True)]
|
||||
path.write_text(json.dumps(verdict))
|
||||
self.assertEqual(check.reviewed_pixel_categories(manifest, 'digest', path, require_judgments=True), {'queue'})
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
|
||||
Reference in New Issue
Block a user