fn locking()

in src/api/sync.rs [1008:1038]


    fn locking() {
        use std::sync::{Arc, Mutex};
        let tmp = Arc::new(Mutex::new(TempDir::new()));

        let mut handles = vec![];
        for _ in 0..5 {
            let tmp2 = tmp.clone();
            let f = std::thread::spawn(move || {
                // 0..256ms sleep to randomize potential clashes
                std::thread::sleep(Duration::from_millis(rand::random::<u8>().into()));
                let api = ApiBuilder::new()
                    .with_progress(false)
                    .with_cache_dir(tmp2.lock().unwrap().path.clone())
                    .build()
                    .unwrap();

                let model_id = "julien-c/dummy-unknown".to_string();
                api.model(model_id.clone()).download("config.json").unwrap()
            });
            handles.push(f);
        }
        while let Some(handle) = handles.pop() {
            let downloaded_path = handle.join().unwrap();
            assert!(downloaded_path.exists());
            let val = Sha256::digest(std::fs::read(&*downloaded_path).unwrap());
            assert_eq!(
                val[..],
                hex!("b908f2b7227d4d31a2105dfa31095e28d304f9bc938bfaaa57ee2cacf1f62d32")
            );
        }
    }