#![cfg(feature = "std")]
use std::io::Read;
use win_drives::PhysicalDrive;
#[test]
fn should_enumerate_drives() {
for drive in PhysicalDrive::enumerate() {
println!("{:?}", drive);
println!("{:?}", drive.device_number());
}
}
#[test]
fn physical_drive_zero_has_valid_geometry() {
let drive = win_drives::PhysicalDrive::open(0)
.expect("PhysicalDrive0 not accessible — are you running as Administrator?");
let bps = drive.bytes_per_sector();
assert!(
bps.is_power_of_two(),
"bytes_per_sector should be a power of two, got {bps}"
);
assert!(
matches!(bps, 512 | 1024 | 2048 | 4096),
"bytes_per_sector should be a standard size, got {bps}"
);
assert!(drive.cylinders() > 0, "cylinders must be > 0");
assert!(drive.tracks_per_cylinder() > 0, "tracks_per_cylinder must be > 0");
assert!(drive.sectors_per_track() > 0, "sectors_per_track must be > 0");
let expected = drive.cylinders() as u64
* drive.tracks_per_cylinder() as u64
* drive.sectors_per_track() as u64
* bps as u64;
assert_eq!(drive.size(), expected, "size() must equal CHS * bytes_per_sector");
let mt = drive.media_type();
assert!(
matches!(mt, 11 | 12),
"media_type should be RemovableMedia (11) or FixedMedia (12), got {mt}"
);
}
#[test]
fn can_read_first_sector() {
let mut drive = PhysicalDrive::open(0)
.expect("PhysicalDrive0 not accessible — are you running as Administrator?");
let mut buf = vec![0u8; drive.bytes_per_sector() as usize];
let n = drive.read(&mut buf).expect("read of first sector failed");
assert_eq!(n, buf.len(), "should have read exactly one sector");
}