Skip to content

Commit

Permalink
refact: filter_timeout_by_rtype and by_domain_name
Browse files Browse the repository at this point in the history
  • Loading branch information
justRkive committed Jan 9, 2024
1 parent 66f236c commit 007fdc5
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 35 deletions.
2 changes: 1 addition & 1 deletion src/dns_cache.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
}
Expand Down
77 changes: 43 additions & 34 deletions src/dns_cache/cache_by_record_type.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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<Rtype, CacheByDomainName> = 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<Rtype, CacheByDomainName> = 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<Rtype, CacheByDomainName> = 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);

}
Expand Down Expand Up @@ -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());
Expand All @@ -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){
Expand All @@ -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());
Expand All @@ -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){
Expand All @@ -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());
Expand All @@ -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){
Expand All @@ -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());
Expand All @@ -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){
Expand All @@ -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());
Expand All @@ -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){
Expand All @@ -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());
Expand All @@ -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){
Expand All @@ -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")]));
Expand All @@ -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){
Expand All @@ -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());
Expand All @@ -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){
Expand All @@ -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());
Expand All @@ -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){
Expand Down Expand Up @@ -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();

Expand Down Expand Up @@ -913,21 +920,23 @@ 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);
}
}

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();

Expand Down Expand Up @@ -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();

Expand Down

0 comments on commit 007fdc5

Please sign in to comment.