diff options
| author | Linus Färnstrand <linus@mullvad.net> | 2019-07-04 13:22:04 +0200 |
|---|---|---|
| committer | Linus Färnstrand <linus@mullvad.net> | 2019-07-04 13:22:04 +0200 |
| commit | f23a3582e7b44b71f3d624617e65041d13a36606 (patch) | |
| tree | fbda3e54ecc24c4f3fa0477eabca57071771f897 | |
| parent | e034721879f51443da4b7937fbf224c0dd373c23 (diff) | |
| parent | 863a68511e534f4f1e50da5401afd2444a447600 (diff) | |
| download | mullvadvpn-f23a3582e7b44b71f3d624617e65041d13a36606.tar.xz mullvadvpn-f23a3582e7b44b71f3d624617e65041d13a36606.zip | |
Merge branch 'add-metadata-parse-test'
| -rw-r--r-- | mullvad-problem-report/src/lib.rs | 41 | ||||
| -rw-r--r-- | mullvad-problem-report/src/metadata.rs | 6 | ||||
| -rw-r--r-- | mullvad-rpc/src/lib.rs | 4 |
3 files changed, 41 insertions, 10 deletions
diff --git a/mullvad-problem-report/src/lib.rs b/mullvad-problem-report/src/lib.rs index 38949bfa36..344d651e41 100644 --- a/mullvad-problem-report/src/lib.rs +++ b/mullvad-problem-report/src/lib.rs @@ -13,7 +13,7 @@ use regex::Regex; use std::{ borrow::Cow, cmp::min, - collections::{HashMap, HashSet}, + collections::{BTreeMap, HashSet}, ffi::OsStr, fs::{self, File}, io::{self, BufWriter, Read, Seek, SeekFrom, Write}, @@ -285,7 +285,7 @@ fn write_problem_report(path: &Path, problem_report: &ProblemReport) -> io::Resu #[derive(Debug)] struct ProblemReport { - metadata: HashMap<String, String>, + metadata: BTreeMap<String, String>, logs: Vec<(String, String)>, log_paths: HashSet<PathBuf>, redact_custom_strings: Vec<String>, @@ -409,14 +409,14 @@ impl ProblemReport { /// Tries to parse out the metadata map from a string that is supposed to be a report written by /// this struct. - pub fn parse_metadata(report: &str) -> Option<HashMap<String, String>> { + pub fn parse_metadata(report: &str) -> Option<BTreeMap<String, String>> { // IMPORTANT: Make sure this implementation stays in sync with `write_to` above. const PATTERN: &str = ": "; let mut lines = report.lines(); if lines.next() != Some("System information:") { return None; } - let mut metadata = HashMap::new(); + let mut metadata = BTreeMap::new(); for line in lines { // Abort on first empty line, as this is the separator between the metadata and the // first log @@ -583,7 +583,7 @@ mod tests { } #[test] - fn test_does_not_redact_time() { + fn does_not_redact_time() { assert_does_not_redact("09:47:59"); } @@ -592,4 +592,35 @@ mod tests { let res = report.redact(input); assert_eq!(input, res); } + + #[test] + fn parse_metadata() { + let report = ProblemReport::new(Vec::new()); + let mut report_data = Vec::new(); + report + .write_to(&mut report_data) + .expect("Unable to write report to vector"); + + let report_string = std::str::from_utf8(&report_data).expect("Report is not correct UTF-8"); + + let parsed_metadata = ProblemReport::parse_metadata(report_string) + .expect("Unable to parse metadata from report"); + let expected_metadata = metadata::collect(); + + assert_eq!(parsed_metadata.len(), expected_metadata.len()); + for (key, value) in &expected_metadata { + let parsed_value = parsed_metadata + .get(key) + .expect("Parsed metadata and new one don't match"); + if key == "id" { + assert_ne!(parsed_value, value, "id not supposed to match"); + } else { + assert_eq!( + parsed_value, value, + "value for key '{}' does not match", + key + ); + } + } + } } diff --git a/mullvad-problem-report/src/metadata.rs b/mullvad-problem-report/src/metadata.rs index 8153e7671f..3bcb44948a 100644 --- a/mullvad-problem-report/src/metadata.rs +++ b/mullvad-problem-report/src/metadata.rs @@ -1,10 +1,10 @@ -use std::{collections::HashMap, process::Command}; +use std::{collections::BTreeMap, process::Command}; pub const PRODUCT_VERSION: &str = include_str!(concat!(env!("OUT_DIR"), "/product-version.txt")); -pub fn collect() -> HashMap<String, String> { - let mut metadata = HashMap::new(); +pub fn collect() -> BTreeMap<String, String> { + let mut metadata = BTreeMap::new(); metadata.insert("id".to_owned(), uuid::Uuid::new_v4().to_string()); metadata.insert( "mullvad-product-version".to_owned(), diff --git a/mullvad-rpc/src/lib.rs b/mullvad-rpc/src/lib.rs index 4e26bcd125..6261ef9c10 100644 --- a/mullvad-rpc/src/lib.rs +++ b/mullvad-rpc/src/lib.rs @@ -13,7 +13,7 @@ use jsonrpc_client_core::{expand_params, jsonrpc_client}; use jsonrpc_client_http::{header::Host, HttpTransport, HttpTransportBuilder}; use mullvad_types::{account::AccountToken, relay_list::RelayList, version}; use std::{ - collections::HashMap, + collections::BTreeMap, net::{IpAddr, Ipv4Addr}, path::{Path, PathBuf}, time::Duration, @@ -113,7 +113,7 @@ jsonrpc_client!(pub struct ProblemReportProxy { email: &str, message: &str, log: &str, - metadata: &HashMap<String, String>) + metadata: &BTreeMap<String, String>) -> RpcRequest<()>; }); |
