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)