Skip to content

Commit

Permalink
add test filter_timeout with rtype MX in cache_by_recor_type
Browse files Browse the repository at this point in the history
  • Loading branch information
konegoro committed Jan 5, 2024
1 parent 0fd0765 commit ba168c5
Showing 1 changed file with 43 additions and 0 deletions.
43 changes: 43 additions & 0 deletions src/dns_cache/cache_by_record_type.rs
Original file line number Diff line number Diff line change
Expand Up @@ -230,6 +230,7 @@ mod cache_data_test{
//use std::time::Duration as StdDuration;

use crate::message::rdata::cname_rdata::CnameRdata;
use crate::message::rdata::mx_rdata::MxRdata;
use crate::message::rdata::ptr_rdata::PtrRdata;
use crate::message::rdata::soa_rdata::SoaRdata;
use crate::message::rdata::{txt_rdata::TxtRdata, ns_rdata::NsRdata};
Expand Down Expand Up @@ -653,6 +654,48 @@ mod cache_data_test{

}

#[test]
fn filter_timeout_cache_data_rtype_mx() {
use std::{thread, time};
let mut cache_record_type = CacheByRecordType::new();
let mx_rdata = Rdata::MX(MxRdata::new());

let mut resource_record_valid = ResourceRecord::new(mx_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(mx_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::MX, domain_name.clone(), rr_cache_valid);
cache_record_type.add_to_cache_data(Rtype::MX, 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::MX){
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::MX){
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};
Expand Down

0 comments on commit ba168c5

Please sign in to comment.