Skip to content

Commit 5e6f28b

Browse files
committed
fix: additional testing
1 parent 1b15e35 commit 5e6f28b

File tree

5 files changed

+111
-27
lines changed

5 files changed

+111
-27
lines changed

Cargo.lock

Lines changed: 24 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ ppp = "1.2"
4040

4141
[dev-dependencies]
4242
serde_test = "1.0"
43+
tracing-test = "0.1"
4344

4445
[features]
4546
default = ["postgres"]

src/config/mod.rs

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
use anyhow::Result;
22
use serde::Deserialize;
3-
use std::fs::File;
4-
use std::io::Read;
3+
use std::fs::read_to_string;
54
use tracing::{debug, info, info_span};
65

76
pub use listener::{Listener, ProxyProtocol};
@@ -54,17 +53,32 @@ pub fn load_config(config_path: Option<String>) -> Result<Config> {
5453
let span = info_span!("load_config", config_path);
5554
let _enter = span.enter();
5655

57-
let mut file = File::open(config_path)?;
58-
debug!(?file, "Opened file");
56+
let file = read_to_string(config_path)?;
57+
debug!(file_length = file.len(), "Read file");
5958

60-
let mut bytes = vec![];
61-
file.read_to_end(&mut bytes)?;
62-
debug!(file_length = bytes.len(), "Read file");
63-
64-
let config = toml::de::from_slice::<Config>(&bytes)?;
59+
let config = toml::de::from_slice::<Config>(file.as_ref())?;
6560
// redact db information
6661
let config_str = format!("{:?}", config).replace(&config.general.db, "******");
6762
info!(config = %config_str, "Deserialized config");
6863

6964
Ok(config)
7065
}
66+
67+
#[cfg(test)]
68+
mod tests {
69+
use super::load_config;
70+
use std::path::Path;
71+
use tracing_test::traced_test;
72+
73+
#[test]
74+
#[traced_test]
75+
fn load_config_test() {
76+
let path = Path::new(file!()).with_file_name("test_config.toml");
77+
let path = path.to_string_lossy().into_owned();
78+
let config = load_config(Some(path)).unwrap();
79+
80+
// check if logs contain redacted db information
81+
let config = format!("{:?}", config).replace("postgres://root@localhost/acme", "******");
82+
assert!(logs_contain(&config));
83+
}
84+
}

src/config/records.rs

Lines changed: 52 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -149,28 +149,62 @@ mod tests {
149149
#[serde(deserialize_with = "deserialize")] PreconfiguredRecords,
150150
);
151151

152+
fn a_record_tokens() -> [Token; 8] {
153+
[
154+
Token::BorrowedStr("acme.example.com"),
155+
Token::Map { len: Some(1) },
156+
Token::BorrowedStr("A"),
157+
Token::Seq { len: Some(2) },
158+
Token::U32(100),
159+
Token::BorrowedStr("1.1.1.1"),
160+
Token::SeqEnd,
161+
Token::MapEnd,
162+
]
163+
}
164+
165+
fn cname_record_tokens() -> [Token; 8] {
166+
[
167+
Token::BorrowedStr("acme.example.com"),
168+
Token::Map { len: Some(1) },
169+
Token::BorrowedStr("CNAME"),
170+
Token::Seq { len: Some(2) },
171+
Token::U32(1000),
172+
Token::BorrowedStr("google.com"),
173+
Token::SeqEnd,
174+
Token::MapEnd,
175+
]
176+
}
177+
178+
fn txt_record_tokens() -> [Token; 8] {
179+
[
180+
Token::BorrowedStr("acme.example.com"),
181+
Token::Map { len: Some(1) },
182+
Token::BorrowedStr("TXT"),
183+
Token::Seq { len: Some(2) },
184+
Token::U32(200),
185+
Token::BorrowedStr("Hallo Welt"),
186+
Token::SeqEnd,
187+
Token::MapEnd,
188+
]
189+
}
190+
152191
#[test]
153192
fn deserialize_test() {
154193
let records = Default::default();
155194
let records = PreconfiguredRecordsWrapper(records);
156195

157-
assert_de_tokens(
158-
&records,
159-
&[
160-
Token::NewtypeStruct {
161-
name: "PreconfiguredRecordsWrapper",
162-
},
163-
Token::Map { len: Some(1) },
164-
Token::BorrowedStr("acme.example.com"),
165-
Token::Map { len: Some(1) },
166-
Token::BorrowedStr("A"),
167-
Token::Seq { len: Some(2) },
168-
Token::U32(100),
169-
Token::BorrowedStr("1.1.1.1"),
170-
Token::SeqEnd,
171-
Token::MapEnd,
172-
Token::MapEnd,
173-
],
174-
)
196+
// header
197+
let mut records_token = vec![
198+
Token::NewtypeStruct {
199+
name: "PreconfiguredRecordsWrapper",
200+
},
201+
Token::Map { len: Some(1) },
202+
];
203+
records_token.extend_from_slice(&a_record_tokens());
204+
records_token.extend_from_slice(&cname_record_tokens());
205+
records_token.extend_from_slice(&txt_record_tokens());
206+
records_token.push(Token::MapEnd);
207+
208+
assert_de_tokens(&records, &records_token)
175209
}
176210
}

src/config/test_config.toml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
[general]
2+
dns = "0.0.0.0:53"
3+
db = "postgres://root@localhost/acme"
4+
acme = "https://acme.example.com/directory"
5+
name = "acme.example.com"
6+
7+
[records."acme.example.com"]
8+
A = [100, "1.1.1.1", "2.2.2.2"]
9+
10+
[api]
11+
https = "0.0.0.0:443"

0 commit comments

Comments
 (0)