diff --git a/src/dns_cache/cache_by_record_type.rs b/src/dns_cache/cache_by_record_type.rs index 5c9bae2c..34d94fb6 100644 --- a/src/dns_cache/cache_by_record_type.rs +++ b/src/dns_cache/cache_by_record_type.rs @@ -696,6 +696,48 @@ mod cache_data_test{ } + #[test] + fn filter_timeout_cache_data_rtype_txt() { + use std::{thread, time}; + let mut cache_record_type = CacheByRecordType::new(); + let txt_rdata = Rdata::TXT(TxtRdata::new(vec![String::from("test")])); + + let mut resource_record_valid = ResourceRecord::new(txt_rdata.clone()); + resource_record_valid.set_ttl(1000); + let rr_cache_valid = RRStoredData::new(resource_record_valid.clone()); + + let mut resource_record_invalid = ResourceRecord::new(txt_rdata); + resource_record_invalid.set_ttl(4); + let rr_cache_invalid = RRStoredData::new(resource_record_invalid); + + let mut domain_name = DomainName::new(); + domain_name.set_name(String::from("uchile.cl")); + + cache_record_type.add_to_cache_data(Rtype::TXT, domain_name.clone(), rr_cache_valid); + cache_record_type.add_to_cache_data(Rtype::TXT, domain_name.clone(), rr_cache_invalid); + + //check if the domain with A type has 2 RRStoredData + if let Some(rr_cache_vec) = cache_record_type.get_from_cache_data(domain_name.clone(), Rtype::TXT){ + assert_eq!(rr_cache_vec.len(), 2); + } + + println!("Before timeout: {:?}", Utc::now()); + thread::sleep(time::Duration::from_secs(5)); + println!("After timeout: {:?}", Utc::now()); + cache_record_type.filter_timeout_cache_data(); + + //check if the len is 1 instead of 2 (one RRStoredData was eliminated) + if let Some(rr_cache_vec) = cache_record_type.get_from_cache_data(domain_name.clone(), Rtype::TXT){ + assert_eq!(rr_cache_vec.len(), 1); + //chek if the resource record who survives is the right one + if let Some(rrstore_data_valid) = rr_cache_vec.get(0){ + let resource_record_after_filter = rrstore_data_valid.get_resource_record(); + assert_eq!(resource_record_after_filter, resource_record_valid); + } + } + + } + #[test] fn filter_timout_cache_data_2_differents_rtypes(){ use std::{thread, time};