Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e5014832 authored by Sonny Sasaka's avatar Sonny Sasaka
Browse files

Add unit tests for BDAddr conversions

Bug: 188718349
Tag: #floss
Test: manual - Build floss on Linux, ran cargo test

Change-Id: Ic79c2972c917295ee20dfca40eaaaeaf110ca8f6
parent 6633fc28
Loading
Loading
Loading
Loading
+8 −3
Original line number Diff line number Diff line
@@ -53,15 +53,16 @@ impl ToString for BDAddr {

impl BDAddr {
    /// Constructs a BDAddr from a vector of 6 bytes.
    fn from_byte_vec(raw_addr: &Vec<u8>) -> Option<BDAddr> {
    pub fn from_byte_vec(raw_addr: &Vec<u8>) -> Option<BDAddr> {
        if let Ok(val) = raw_addr.clone().try_into() {
            return Some(BDAddr { val });
        }
        None
    }

    fn from_string(addr_str: String) -> Option<BDAddr> {
        let s = addr_str.split(':').collect::<Vec<&str>>();
    pub fn from_string<S: Into<String>>(addr: S) -> Option<BDAddr> {
        let addr: String = addr.into();
        let s = addr.split(':').collect::<Vec<&str>>();

        if s.len() != 6 {
            return None;
@@ -79,6 +80,10 @@ impl BDAddr {

        Some(BDAddr { val: raw })
    }

    pub fn to_byte_arr(&self) -> [u8; 6] {
        self.val.clone()
    }
}

/// Message types that are sent to the stack main dispatch loop.
+39 −0
Original line number Diff line number Diff line
#[cfg(test)]
mod tests {
    use btstack::BDAddr;

    #[test]
    fn from_string_invalid() {
        assert!(BDAddr::from_string("").is_none());
        assert!(BDAddr::from_string("some invalid string").is_none());
        assert!(BDAddr::from_string("aa:bb:cc:dd:ee:ff:00").is_none());
        assert!(BDAddr::from_string("aa:bb:cc:dd:ee").is_none());
        assert!(BDAddr::from_string("aa:bb:cc:dd::ff").is_none());
    }

    #[test]
    fn from_string_valid() {
        let addr = BDAddr::from_string("11:22:33:aa:bb:cc");
        assert!(addr.is_some());
        assert_eq!([0x11, 0x22, 0x33, 0xaa, 0xbb, 0xcc], addr.unwrap().to_byte_arr());

        // Upper/lower case should not matter.
        let addr = BDAddr::from_string("11:22:33:AA:BB:CC");
        assert!(addr.is_some());
        assert_eq!([0x11, 0x22, 0x33, 0xaa, 0xbb, 0xcc], addr.unwrap().to_byte_arr());
    }

    #[test]
    fn from_byte_vec_invalid() {
        assert!(BDAddr::from_byte_vec(&vec![]).is_none());
        assert!(BDAddr::from_byte_vec(&vec![1, 2, 3, 4, 5]).is_none());
        assert!(BDAddr::from_byte_vec(&vec![1, 2, 3, 4, 5, 6, 7]).is_none());
    }

    #[test]
    fn from_byte_vec_valid() {
        let addr = BDAddr::from_byte_vec(&vec![1, 2, 3, 4, 5, 6]);
        assert!(addr.is_some());
        assert_eq!([1, 2, 3, 4, 5, 6], addr.unwrap().to_byte_arr());
    }
}