blob: d826c8af5fb486ff31b3fcfaf5bd2b88add64cb2 [file] [log] [blame]
use tempfile;
use gpt::{disk, mbr};
use std::fs::File;
use std::io::Read;
#[test]
fn test_mbr_partrecord() {
let pr0 = mbr::PartRecord::zero();
let data0 = pr0.as_bytes().unwrap();
assert_eq!(data0.len(), 16);
assert_eq!(data0, [0x00; 16]);
let pr1 = mbr::PartRecord::new_protective(None);
let data1 = pr1.as_bytes().unwrap();
assert_eq!(data0.len(), data1.len());
assert_ne!(data0, data1);
}
#[test]
fn test_mbr_protective() {
let m0 = mbr::ProtectiveMBR::new();
let data0 = m0.as_bytes().unwrap();
assert_eq!(data0.len(), 512);
assert_eq!(data0[510], 0x55);
assert_eq!(data0[511], 0xAA);
let m1 = mbr::ProtectiveMBR::with_lb_size(0x01);
let data1 = m1.as_bytes().unwrap();
assert_eq!(data0.len(), data1.len());
assert_ne!(data0, data1);
assert_eq!(data1[510], 0x55);
assert_eq!(data1[511], 0xAA);
}
#[test]
fn test_mbr_write() {
let mut tempdisk = tempfile::tempfile().unwrap();
let m0 = mbr::ProtectiveMBR::new();
let data0 = m0.as_bytes().unwrap();
m0.overwrite_lba0(&mut tempdisk).unwrap();
m0.update_conservative(&mut tempdisk).unwrap();
let mut buf = Vec::new();
let size = tempdisk.read_to_end(&mut buf).unwrap();
assert!(size != 0);
assert_eq!(buf, data0);
}
#[test]
fn test_mbr_read() {
let mut diskf = File::open("tests/fixtures/gpt-linux-disk-01.img").unwrap();
let m0 = mbr::ProtectiveMBR::from_disk(&mut diskf, disk::LogicalBlockSize::Lb512).unwrap();
assert_eq!(m0.bootcode().to_vec(), vec![0; 440]);
assert_eq!(m0.disk_signature().to_vec(), vec![0; 4]);
}
#[test]
fn test_mbr_rw_roundtrip() {
let mut tempdisk = tempfile::tempfile().unwrap();
let mut m0 = mbr::ProtectiveMBR::new();
let newsig = [0x11, 0x22, 0x33, 0x44];
m0.set_disk_signature(newsig);
m0.overwrite_lba0(&mut tempdisk).unwrap();
let data0 = m0.as_bytes().unwrap();
let m1 = mbr::ProtectiveMBR::from_disk(&mut tempdisk, disk::LogicalBlockSize::Lb512).unwrap();
let data1 = m1.as_bytes().unwrap();
assert_eq!(m0.bootcode().to_vec(), m1.bootcode().to_vec());
assert_eq!(m0.disk_signature().to_vec(), m1.disk_signature().to_vec());
assert_eq!(m0.disk_signature().to_vec(), newsig);
assert_eq!(data0, data1);
}
#[test]
fn test_mbr_bootcode() {
let mut tempdisk = tempfile::tempfile().unwrap();
let m0 = mbr::ProtectiveMBR::new();
m0.overwrite_lba0(&mut tempdisk).unwrap();
let b0 = mbr::read_bootcode(&mut tempdisk).unwrap();
assert_eq!(b0.len(), 440);
assert_eq!(b0.to_vec(), vec![0; 440]);
let b1 = [0xAA; 440];
mbr::write_bootcode(&mut tempdisk, &b1).unwrap();
let b2 = mbr::read_bootcode(&mut tempdisk).unwrap();
assert_eq!(b1.to_vec(), b2.to_vec());
}
#[test]
fn test_mbr_disksig() {
let mut tempdisk = tempfile::tempfile().unwrap();
let m0 = mbr::ProtectiveMBR::new();
m0.overwrite_lba0(&mut tempdisk).unwrap();
let s0 = mbr::read_disk_signature(&mut tempdisk).unwrap();
assert_eq!(s0.len(), 4);
assert_eq!(s0.to_vec(), vec![0; 4]);
let s1 = [0x00, 0x11, 0x22, 0x33];
mbr::write_disk_signature(&mut tempdisk, &s1).unwrap();
let s2 = mbr::read_disk_signature(&mut tempdisk).unwrap();
assert_eq!(s1.to_vec(), s2.to_vec());
}