adnix: rudimentary tests for config parser

Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
This commit is contained in:
Harsh Shandilya 2020-04-29 02:46:06 +05:30
parent 8ef418e113
commit 03954b3d25
No known key found for this signature in database
GPG Key ID: 366D7BBAD1031E80
2 changed files with 34 additions and 21 deletions

View File

@ -19,7 +19,7 @@ fn main() {
let matches = App::from_yaml(yaml).get_matches(); let matches = App::from_yaml(yaml).get_matches();
let sources: HashMap<String, Source> = if matches.is_present("sources_file") { let sources: HashMap<String, Source> = if matches.is_present("sources_file") {
parse_file(&matches.value_of("sources_file").unwrap()) parse_sources_config_file(&matches.value_of("sources_file").unwrap())
} else { } else {
let mut list: HashMap<String, Source> = HashMap::new(); let mut list: HashMap<String, Source> = HashMap::new();
list.insert( list.insert(
@ -60,26 +60,38 @@ fn main() {
} }
} }
fn parse_file(filepath: &str) -> HashMap<String, Source> { fn parse_sources_config_file(filepath: &str) -> HashMap<String, Source> {
let mut list: HashMap<String, Source> = HashMap::new(); let mut list: HashMap<String, Source> = HashMap::new();
let file = File::open(filepath).unwrap_or_else(|err| { if let Ok(file) = File::open(filepath) {
eprintln!("Problem openning file: {}", err); let lines = BufReader::new(file).lines();
process::exit(1); for line in lines {
}); let content = line.unwrap_or_else(|err| {
eprintln!("Problem parsing lines: {}", err);
let lines = BufReader::new(file).lines(); process::exit(1);
for line in lines { });
let content = line.unwrap_or_else(|err| { let vec: Vec<&str> = content.split('|').collect();
eprintln!("Problem parsing lines: {}", err); list.insert(
process::exit(1); vec[0].to_owned(),
}); Source {
let vec: Vec<&str> = content.split('|').collect(); url: vec[1].to_owned(),
list.insert( },
vec[0].to_owned(), );
Source { }
url: vec[1].to_owned(), } else {
}, eprintln!("Problem opening file: {}", filepath);
); };
}
list list
} }
#[cfg(test)]
mod tests {
use super::parse_sources_config_file;
#[test]
fn test_parse_sources_config_file() {
let source_config = parse_sources_config_file("test_data/sample_config");
assert!(source_config.contains_key("StevenBlack"));
assert!(source_config.get("StevenBlack").is_some());
assert!(source_config.get("StevenBlack").unwrap().url == String::from("https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts"));
}
}

1
test_data/sample_config Normal file
View File

@ -0,0 +1 @@
StevenBlack|https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts