#!/usr/bin/env python3

import tempfile
import os
import sys

from posix_parity import mergerfs_mount


def main():
    try:
        with mergerfs_mount() as (mount, _):
            (srcfd, src) = tempfile.mkstemp(dir=mount)
            (tgtfd, tgt) = tempfile.mkstemp(dir=mount)

            st_src_before = os.fstat(srcfd)
            st_tgt_before = os.fstat(tgtfd)

            os.unlink(tgt)
            os.rename(src, tgt)

            st_src_after = os.fstat(srcfd)
            st_tgt_after = os.fstat(tgtfd)

            if st_src_after.st_size != st_src_before.st_size:
                os.close(srcfd)
                os.close(tgtfd)
                print("rename: src fd size changed before={} after={}".format(
                    st_src_before.st_size, st_src_after.st_size), end='')
                return 1

            if st_tgt_after.st_ino != st_tgt_before.st_ino:
                os.close(srcfd)
                os.close(tgtfd)
                print("rename: tgt fd inode changed after unlink+rename expected={} got={}".format(
                    st_tgt_before.st_ino, st_tgt_after.st_ino), end='')
                return 1

            os.close(srcfd)
            os.close(tgtfd)
            return 0
    except RuntimeError as exc:
        print(str(exc), end="")
        return 77


if __name__ == "__main__":
    raise SystemExit(main())
