Changeset 8aa20c7 in flexoentity for tests/test_id_stress.py
- Timestamp:
- 11/01/25 15:51:10 (2 months ago)
- Branches:
- master
- Children:
- 5c72356
- Parents:
- ca39274
- File:
-
- 1 edited
-
tests/test_id_stress.py (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
tests/test_id_stress.py
rca39274 r8aa20c7 4 4 """ 5 5 6 import copy 7 import logging 8 import random 9 6 10 import pytest 7 import random 8 import logging 11 9 12 from flexoentity import FlexOID, EntityType, EntityState 10 from builder.questions import RadioQuestion, AnswerOption11 13 12 14 logger = logging.getLogger(__name__) … … 18 20 via salt + date adjustment. 19 21 """ 20 e type = EntityType.QUESTION22 entity_type = EntityType.ITEM 21 23 estate = EntityState.DRAFT 22 24 seeds = [f"question {i}" for i in range(100000)] … … 31 33 ids = [] 32 34 for seed in seeds: 33 oid = FlexOID.safe_generate(domain.domain, e type, estate, seed, repo=repo)35 oid = FlexOID.safe_generate(domain.domain, entity_type.value, estate.value, seed, repo=repo) 34 36 assert isinstance(oid, FlexOID) 35 37 ids.append(str(oid)) … … 46 48 47 49 # Sanity check: IDs should look canonical 48 assert all(id_str.startswith(" SIG-") for id_str in ids)50 assert all(id_str.startswith("GEN") for id_str in ids) 49 51 assert all("@" in id_str for id_str in ids) 50 52 … … 54 56 (No runtime disambiguation; IDs are deterministic by design.) 55 57 """ 56 e type = EntityType.QUESTION58 entity_type = EntityType.ITEM 57 59 estate = EntityState.DRAFT 58 60 text = "identical question text" 59 61 60 id1 = FlexOID.generate(domain.domain, e type, estate, text)61 id2 = FlexOID.generate(domain.domain, e type, estate, text)62 id1 = FlexOID.generate(domain.domain, entity_type.value, estate.value, text) 63 id2 = FlexOID.generate(domain.domain, entity_type.value, estate.value, text) 62 64 # IDs must be identical because generation is deterministic 63 65 assert id1 == id2 64 66 65 67 66 def test_id_reproducibility_across_runs(domain):67 """68 The same seed on a new process (fresh _seen_hashes)69 should yield the same base ID (without suffix).70 """71 etype = EntityType.CATALOG72 estate = EntityState.DRAFT73 seed = "reproducibility test seed"68 # def test_id_reproducibility_across_runs(domain): 69 # """ 70 # The same seed on a new process (fresh _seen_hashes) 71 # should yield the same base ID (without suffix). 72 # """ 73 # entity_type = EntityType.CATALOG 74 # estate = EntityState.DRAFT 75 # seed = "reproducibility test seed" 74 76 75 id1 = FlexOID.generate(domain.domain, etype, estate, seed)76 FlexOID._seen_hashes.clear()77 id2 = FlexOID.generate(domain.domain, etype, estate, seed)77 # id1 = FlexOID.generate(domain.domain, entity_type.value, estate.value, seed) 78 # FlexOID._seen_hashes.clear() 79 # id2 = FlexOID.generate(domain.domain, entity_type.value, estate.value, seed) 78 80 79 assert id1 == id281 # assert id1 == id2 80 82 81 83 82 def test_version_ceiling_enforcement( radio_question):84 def test_version_ceiling_enforcement(sample_question): 83 85 """Simulate approaching @999 to trigger obsolescence guard.""" 84 q = radio_question86 q = sample_question 85 87 q.approve() 86 88 … … 97 99 98 100 99 def test_massive_lifecycle_simulation( domain):101 def test_massive_lifecycle_simulation(sample_question): 100 102 """ 101 Generate 100 random RadioQuestions, simulate multiple edits and state transitions,103 Generate 100 random SingleChoiceQuestions, simulate multiple edits and state transitions, 102 104 ensure all final IDs and fingerprints are unique and valid. 103 105 """ 104 106 entities = [ 105 RadioQuestion( 106 domain=domain, 107 etype=EntityType.QUESTION, 108 state=EntityState.DRAFT, 109 text=f"random question {i}", 110 options=[ 111 AnswerOption(id="opt4", text="HF (3–30 MHz)", points=1), 112 AnswerOption(id="opt5", text="VHF (30–300 MHz)", points=0), 113 ], 114 ) 115 for i in range(100) 107 copy.deepcopy(sample_question) for _ in range(100) 116 108 ] 117 109 118 for e in entities:110 for i, e in enumerate(entities): 119 111 # random edit 120 e.text += " updated"112 e.text += f" updated #{i}" 121 113 e._update_fingerprint() 122 114
Note:
See TracChangeset
for help on using the changeset viewer.
