def test_data_digest_remote_location_warns(diverse_repo): from hangar.records import hashs from hangar.diagnostics.integrity import _verify_column_integrity hq = hashs.HashQuery(diverse_repo._env.hashenv) replace_key = list(hq.gen_all_hash_keys_db())[0] with diverse_repo._env.hashenv.begin(write=True) as txn: txn.put(replace_key, b'50:ekaearar') with pytest.warns( RuntimeWarning, match='Can not verify integrity of partially fetched array'): _verify_column_integrity(hashenv=diverse_repo._env.hashenv, repo_path=diverse_repo._env.repo_path)
def test_remove_schema_digest_is_caught(self, diverse_repo): from hangar.records import hashs from hangar.diagnostics.integrity import _verify_commit_ref_digests_exist hq = hashs.HashQuery(diverse_repo._env.hashenv) keys_to_remove = list(hq.gen_all_schema_keys_db()) for key_removed in keys_to_remove: with diverse_repo._env.hashenv.begin(write=True) as txn: val_removed = txn.get(key_removed) txn.delete(key_removed) with pytest.raises(RuntimeError): _verify_commit_ref_digests_exist( hashenv=diverse_repo._env.hashenv, refenv=diverse_repo._env.refenv) with diverse_repo._env.hashenv.begin(write=True) as txn: txn.put(key_removed, val_removed)
def test_data_digest_modification_is_caught(diverse_repo): from hangar.records import hashs from hangar.diagnostics.integrity import _verify_column_integrity hq = hashs.HashQuery(diverse_repo._env.hashenv) keys_to_replace = list(hq.gen_all_hash_keys_db()) replacer_key = keys_to_replace.pop() for kreplaced in keys_to_replace: with diverse_repo._env.hashenv.begin(write=True) as txn: replacer_val = txn.get(replacer_key) vreplaced = txn.get(kreplaced) txn.put(kreplaced, replacer_val) with pytest.raises(RuntimeError): _verify_column_integrity(hashenv=diverse_repo._env.hashenv, repo_path=diverse_repo._env.repo_path) with diverse_repo._env.hashenv.begin(write=True) as txn: txn.put(kreplaced, vreplaced)
def test_schema_digest_modification_is_caught(diverse_repo): from hangar.records import hashs from hangar.diagnostics.integrity import _verify_schema_integrity hq = hashs.HashQuery(diverse_repo._env.hashenv) keys_to_replace = list(hq.gen_all_schema_keys_db()) replacer_key = keys_to_replace.pop() for kreplaced in keys_to_replace: with diverse_repo._env.hashenv.begin(write=True) as txn: replacer_val = txn.get(replacer_key) vreplaced = txn.get(kreplaced) txn.put(kreplaced, replacer_val) with pytest.raises( RuntimeError, match='Data corruption detected for schema. Expected digest'): _verify_schema_integrity(hashenv=diverse_repo._env.hashenv) with diverse_repo._env.hashenv.begin(write=True) as txn: txn.put(kreplaced, vreplaced)