diff --git a/src/dns_cache.rs b/src/dns_cache.rs index cb372081..cbe9950e 100644 --- a/src/dns_cache.rs +++ b/src/dns_cache.rs @@ -176,7 +176,7 @@ impl DnsCache { /// If it has expired, it removes it from the cache. pub fn timeout_cache(&mut self) { let mut cache = self.get_cache(); - cache.filter_timeout_cache_data(); + cache.filter_timeout_by_rtype(); self.set_cache(cache); } } diff --git a/src/dns_cache/cache_by_record_type.rs b/src/dns_cache/cache_by_record_type.rs index 095aeb92..ad03827d 100644 --- a/src/dns_cache/cache_by_record_type.rs +++ b/src/dns_cache/cache_by_record_type.rs @@ -163,19 +163,26 @@ impl CacheByRecordType{ /// For each type of cache data, it removes the cache data that has expired, using /// the `timeout_rr_cache` method of the `CacheByDomainName` struct. If the `CacheByDomainName` struct /// is empty after the removal, it is removed from the cache data. - pub fn filter_timeout_cache_data(&mut self) { + pub fn filter_timeout_by_rtype(&mut self) { let cache_data = self.get_cache_data(); - let clean_cache_data: HashMap = cache_data - .into_iter() - .filter_map(|(rtype, mut host_data)| { - host_data.filter_timeout_host_data(); - if host_data.get_domain_names_data().is_empty() { - None - } else { - Some((rtype, host_data)) + // let clean_cache_data: HashMap = cache_data + // .into_iter() + // .filter_map(|(rtype, mut host_data)| { + // host_data.filter_timeout_by_domain_name(); + // if host_data.get_domain_names_data().is_empty() { + // None + // } else { + // Some((rtype, host_data)) + // } + // }) + // .collect(); + let mut clean_cache_data: HashMap = HashMap::new(); + for (rtype, mut host_data) in cache_data { + host_data.filter_timeout_by_domain_name(); + if !host_data.get_domain_names_data().is_empty() { + clean_cache_data.insert(rtype, host_data); } - }) - .collect(); + } self.set_cache_data(clean_cache_data); } @@ -447,7 +454,7 @@ mod cache_data_test{ } #[test] - fn filter_timeout_cache_data_rtype_a() { + fn filter_timeout_by_rtype_rtype_a() { use std::{thread, time}; let mut cache_record_type = CacheByRecordType::new(); let a_rdata = Rdata::A(ARdata::new()); @@ -474,7 +481,7 @@ mod cache_data_test{ println!("Before timeout: {:?}", Utc::now()); thread::sleep(time::Duration::from_secs(5)); println!("After timeout: {:?}", Utc::now()); - cache_record_type.filter_timeout_cache_data(); + cache_record_type.filter_timeout_by_rtype(); //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::A){ @@ -489,7 +496,7 @@ mod cache_data_test{ } #[test] - fn filter_timeout_cache_data_rtype_ns() { + fn filter_timeout_by_rtype_rtype_ns() { use std::{thread, time}; let mut cache_record_type = CacheByRecordType::new(); let ns_rdata = Rdata::NS(NsRdata::new()); @@ -516,7 +523,7 @@ mod cache_data_test{ println!("Before timeout: {:?}", Utc::now()); thread::sleep(time::Duration::from_secs(5)); println!("After timeout: {:?}", Utc::now()); - cache_record_type.filter_timeout_cache_data(); + cache_record_type.filter_timeout_by_rtype(); //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::NS){ @@ -531,7 +538,7 @@ mod cache_data_test{ } #[test] - fn filter_timeout_cache_data_rtype_cname() { + fn filter_timeout_by_rtype_rtype_cname() { use std::{thread, time}; let mut cache_record_type = CacheByRecordType::new(); let cname_rdata = Rdata::CNAME(CnameRdata::new()); @@ -558,7 +565,7 @@ mod cache_data_test{ println!("Before timeout: {:?}", Utc::now()); thread::sleep(time::Duration::from_secs(5)); println!("After timeout: {:?}", Utc::now()); - cache_record_type.filter_timeout_cache_data(); + cache_record_type.filter_timeout_by_rtype(); //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::CNAME){ @@ -573,7 +580,7 @@ mod cache_data_test{ } #[test] - fn filter_timeout_cache_data_rtype_soa() { + fn filter_timeout_by_rtype_rtype_soa() { use std::{thread, time}; let mut cache_record_type = CacheByRecordType::new(); let soa_rdata = Rdata::SOA(SoaRdata::new()); @@ -600,7 +607,7 @@ mod cache_data_test{ println!("Before timeout: {:?}", Utc::now()); thread::sleep(time::Duration::from_secs(5)); println!("After timeout: {:?}", Utc::now()); - cache_record_type.filter_timeout_cache_data(); + cache_record_type.filter_timeout_by_rtype(); //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::SOA){ @@ -615,7 +622,7 @@ mod cache_data_test{ } #[test] - fn filter_timeout_cache_data_rtype_ptr() { + fn filter_timeout_by_rtype_rtype_ptr() { use std::{thread, time}; let mut cache_record_type = CacheByRecordType::new(); let ptr_rdata = Rdata::PTR(PtrRdata::new()); @@ -642,7 +649,7 @@ mod cache_data_test{ println!("Before timeout: {:?}", Utc::now()); thread::sleep(time::Duration::from_secs(5)); println!("After timeout: {:?}", Utc::now()); - cache_record_type.filter_timeout_cache_data(); + cache_record_type.filter_timeout_by_rtype(); //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::PTR){ @@ -657,7 +664,7 @@ mod cache_data_test{ } #[test] - fn filter_timeout_cache_data_rtype_mx() { + fn filter_timeout_by_rtype_rtype_mx() { use std::{thread, time}; let mut cache_record_type = CacheByRecordType::new(); let mx_rdata = Rdata::MX(MxRdata::new()); @@ -684,7 +691,7 @@ mod cache_data_test{ println!("Before timeout: {:?}", Utc::now()); thread::sleep(time::Duration::from_secs(5)); println!("After timeout: {:?}", Utc::now()); - cache_record_type.filter_timeout_cache_data(); + cache_record_type.filter_timeout_by_rtype(); //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::MX){ @@ -699,7 +706,7 @@ mod cache_data_test{ } #[test] - fn filter_timeout_cache_data_rtype_txt() { + fn filter_timeout_by_rtype_rtype_txt() { use std::{thread, time}; let mut cache_record_type = CacheByRecordType::new(); let txt_rdata = Rdata::TXT(TxtRdata::new(vec![String::from("test")])); @@ -726,7 +733,7 @@ mod cache_data_test{ println!("Before timeout: {:?}", Utc::now()); thread::sleep(time::Duration::from_secs(5)); println!("After timeout: {:?}", Utc::now()); - cache_record_type.filter_timeout_cache_data(); + cache_record_type.filter_timeout_by_rtype(); //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){ @@ -741,7 +748,7 @@ mod cache_data_test{ } #[test] - fn filter_timeout_cache_data_rtype_hinfo() { + fn filter_timeout_by_rtype_rtype_hinfo() { use std::{thread, time}; let mut cache_record_type = CacheByRecordType::new(); let hinfo_rdata = Rdata::HINFO(HinfoRdata::new()); @@ -768,7 +775,7 @@ mod cache_data_test{ println!("Before timeout: {:?}", Utc::now()); thread::sleep(time::Duration::from_secs(5)); println!("After timeout: {:?}", Utc::now()); - cache_record_type.filter_timeout_cache_data(); + cache_record_type.filter_timeout_by_rtype(); //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::HINFO){ @@ -784,7 +791,7 @@ mod cache_data_test{ #[test] - fn filter_timeout_cache_data_rtype_tsig() { + fn filter_timeout_by_rtype_rtype_tsig() { use std::{thread, time}; let mut cache_record_type = CacheByRecordType::new(); let tsig_rdata = Rdata::TSIG(TSigRdata::new()); @@ -811,7 +818,7 @@ mod cache_data_test{ println!("Before timeout: {:?}", Utc::now()); thread::sleep(time::Duration::from_secs(5)); println!("After timeout: {:?}", Utc::now()); - cache_record_type.filter_timeout_cache_data(); + cache_record_type.filter_timeout_by_rtype(); //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::TSIG){ @@ -864,7 +871,7 @@ mod cache_data_test{ println!("Before timeout: {:?}", Utc::now()); thread::sleep(time::Duration::from_secs(5)); println!("After timeout: {:?}", Utc::now()); - cache_record_type.filter_timeout_cache_data(); + cache_record_type.filter_timeout_by_rtype(); let record_types_data_after_clean = cache_record_type.get_cache_data(); @@ -913,13 +920,15 @@ mod cache_data_test{ let record_types_data = cache_record_type.get_cache_data(); //CacheByDomainName for A type if let Some(record_types_data_a) = record_types_data.get(&Rtype::A) { - if let Some(rrstore_data_vec_a) = record_types_data_a.clone().get_from_host_data(domain_name_1.clone()){ + if let Some(rrstore_data_vec_a) = + record_types_data_a.clone().get_from_host_data(domain_name_1.clone()){ assert_eq!(rrstore_data_vec_a.len(), 1); } } //CacheByDomainName for NS type if let Some(record_types_data_ns) = record_types_data.get(&Rtype::NS) { - if let Some(rrstore_data_vec_ns) = record_types_data_ns.clone().get_from_host_data(domain_name_2.clone()){ + if let Some(rrstore_data_vec_ns) = + record_types_data_ns.clone().get_from_host_data(domain_name_2.clone()){ assert_eq!(rrstore_data_vec_ns.len(), 1); } } @@ -927,7 +936,7 @@ mod cache_data_test{ println!("Before timeout: {:?}", Utc::now()); thread::sleep(time::Duration::from_secs(5)); println!("After timeout: {:?}", Utc::now()); - cache_record_type.filter_timeout_cache_data(); + cache_record_type.filter_timeout_by_rtype(); let record_types_data_after_cleaning = cache_record_type.get_cache_data(); @@ -1007,7 +1016,7 @@ mod cache_data_test{ println!("Before timeout: {:?}", Utc::now()); thread::sleep(time::Duration::from_secs(5)); println!("After timeout: {:?}", Utc::now()); - cache_record_type.filter_timeout_cache_data(); + cache_record_type.filter_timeout_by_rtype(); let record_types_data_after_cleaning = cache_record_type.get_cache_data();