webauthn_rp

WebAuthn RP library.
git clone https://git.philomathiclife.com/repos/webauthn_rp
Log | Files | Refs | README

tests.rs (2428B)


      1 use super::{Equivalent, Insert, InsertRemoveExpired, MaxLenHashSet, TimedCeremony};
      2 use core::hash::{Hash, Hasher};
      3 #[cfg(not(feature = "serializable_server_state"))]
      4 use std::time::Instant;
      5 #[cfg(feature = "serializable_server_state")]
      6 use std::time::SystemTime;
      7 #[derive(Clone, Copy)]
      8 struct Ceremony {
      9     id: usize,
     10     #[cfg(not(feature = "serializable_server_state"))]
     11     exp: Instant,
     12     #[cfg(feature = "serializable_server_state")]
     13     exp: SystemTime,
     14 }
     15 impl Default for Ceremony {
     16     fn default() -> Self {
     17         Self {
     18             id: 0,
     19             #[cfg(not(feature = "serializable_server_state"))]
     20             exp: Instant::now(),
     21             #[cfg(feature = "serializable_server_state")]
     22             exp: SystemTime::now(),
     23         }
     24     }
     25 }
     26 impl PartialEq for Ceremony {
     27     fn eq(&self, other: &Self) -> bool {
     28         self.id == other.id
     29     }
     30 }
     31 impl Eq for Ceremony {}
     32 impl Hash for Ceremony {
     33     fn hash<H: Hasher>(&self, state: &mut H) {
     34         self.id.hash(state);
     35     }
     36 }
     37 impl TimedCeremony for Ceremony {
     38     #[cfg(not(feature = "serializable_server_state"))]
     39     fn expiration(&self) -> Instant {
     40         self.exp
     41     }
     42     #[cfg(feature = "serializable_server_state")]
     43     fn expiration(&self) -> SystemTime {
     44         self.exp
     45     }
     46 }
     47 impl Equivalent<Ceremony> for usize {
     48     #[inline]
     49     fn equivalent(&self, key: &Ceremony) -> bool {
     50         *self == key.id
     51     }
     52 }
     53 #[test]
     54 fn hash_set_insert_removed() {
     55     const REQ_MAX_LEN: usize = 8;
     56     let mut set = MaxLenHashSet::new(REQ_MAX_LEN);
     57     let cap = set.as_ref().capacity();
     58     let max_len = set.max_len();
     59     assert_eq!(cap >> 1u8, max_len);
     60     assert!(max_len >= REQ_MAX_LEN);
     61     let mut cer = Ceremony::default();
     62     for i in 0..max_len {
     63         assert!(set.as_ref().capacity() <= cap);
     64         cer.id = i;
     65         assert_eq!(set.insert(cer), Insert::Success);
     66     }
     67     assert!(set.as_ref().capacity() <= cap);
     68     assert_eq!(set.as_ref().len(), max_len);
     69     for i in 0..max_len {
     70         assert!(set.as_ref().contains(&i));
     71     }
     72     cer.id = cap;
     73     assert_eq!(set.insert_remove_expired(cer), InsertRemoveExpired::Success);
     74     assert!(set.as_ref().capacity() <= cap);
     75     assert_eq!(set.as_ref().len(), max_len);
     76     let mut counter = 0;
     77     for i in 0..max_len {
     78         counter += usize::from(set.as_ref().contains(&i));
     79     }
     80     assert_eq!(counter, max_len - 1);
     81     assert!(set.as_ref().contains(&(max_len - 1)));
     82 }