hf2q 0.1.10

Pure Rust CLI for converting HuggingFace models to hardware-optimized formats and serving them over an OpenAI-compatible API on Apple Silicon
use std::io::{Read, Seek, SeekFrom, Write};

use super::*;

#[test]
fn no_replace_rename_rejects_a_collision_created_after_the_last_precheck() {
    let directory = tempfile::tempdir().unwrap();
    let output = directory.path().join("target.bin");
    let mut retained = RetainedTargetTemp::create(&output).unwrap();
    retained.as_file_mut().write_all(b"teacher").unwrap();

    let competing_output = output.clone();
    let result = retained.publish_noclobber_with_before_rename_for_test(
        7,
        |file| {
            file.seek(SeekFrom::Start(0)).unwrap();
            let mut bytes = Vec::new();
            file.read_to_end(&mut bytes).unwrap();
            assert_eq!(bytes, b"teacher");
            Ok(())
        },
        move || std::fs::write(&competing_output, b"competitor").unwrap(),
    );

    assert!(result.is_err());
    assert_eq!(std::fs::read(&output).unwrap(), b"competitor");
    let entries = std::fs::read_dir(directory.path())
        .unwrap()
        .collect::<Result<Vec<_>, _>>()
        .unwrap();
    assert_eq!(entries.len(), 1, "the private temporary must be removed");
    assert_eq!(entries[0].path(), output);
}