Skip to content

Commit 1b15e35

Browse files
committed
fix: serde tests
1 parent 6f24395 commit 1b15e35

File tree

6 files changed

+123
-12
lines changed

6 files changed

+123
-12
lines changed

Cargo.lock

Lines changed: 10 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: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,9 @@ toml = "0.5"
3838
anyhow = "1.0"
3939
ppp = "1.2"
4040

41+
[dev-dependencies]
42+
serde_test = "1.0"
43+
4144
[features]
4245
default = ["postgres"]
4346

src/api/routes.rs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -71,11 +71,8 @@ pub(super) fn routes(
7171
.and(MetricsConfig::path());
7272

7373
let not_found = warp::any()
74-
.map(warp::reply)
75-
.and_then(|reply| async move {
76-
let res = warp::reply::with_status(reply, StatusCode::NOT_FOUND).into_response();
77-
Ok(res) as Result<WarpResponse, Rejection>
78-
})
74+
.and_then(|| async move { Ok(StatusCode::NOT_FOUND) as Result<_, Rejection> })
75+
.map(Reply::into_response)
7976
.and(MetricsConfig::new("404"));
8077

8178
register

src/config/listener.rs

Lines changed: 64 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use serde::de::{SeqAccess, Visitor};
22
use serde::{Deserialize, Deserializer};
33
use std::fmt::Formatter;
44

5-
#[derive(Debug, Copy, Clone)]
5+
#[derive(Debug, Copy, Clone, PartialEq)]
66
pub enum ProxyProtocol {
77
Enabled,
88
Disabled,
@@ -44,7 +44,7 @@ where
4444
where
4545
E: serde::de::Error,
4646
{
47-
Ok((String::from(value).into(), ProxyProtocol::Disabled))
47+
Ok((value.to_owned().into(), ProxyProtocol::Disabled))
4848
}
4949

5050
fn visit_seq<A>(self, mut seq: A) -> Result<Self::Value, A::Error>
@@ -59,3 +59,65 @@ where
5959
}
6060
deserializer.deserialize_any(ListenerVisitor)
6161
}
62+
#[cfg(test)]
63+
mod tests {
64+
use super::{deserialize, Listener, ProxyProtocol};
65+
use serde::Deserialize;
66+
use serde_test::{assert_de_tokens, Token};
67+
68+
#[derive(Deserialize, PartialEq, Debug)]
69+
struct ListenerWrapper(#[serde(deserialize_with = "deserialize")] Listener);
70+
71+
#[test]
72+
fn default() {
73+
assert_eq!(ProxyProtocol::Disabled, ProxyProtocol::default());
74+
}
75+
76+
#[test]
77+
fn deserialize_str_test() {
78+
let listener = ListenerWrapper((Some("test".into()), ProxyProtocol::Disabled));
79+
80+
assert_de_tokens(
81+
&listener,
82+
&[
83+
Token::NewtypeStruct {
84+
name: "ListenerWrapper",
85+
},
86+
Token::Str("test"),
87+
],
88+
);
89+
}
90+
91+
#[test]
92+
fn deserialize_str_and_bool() {
93+
let listener = ListenerWrapper((Some("ip".into()), ProxyProtocol::Enabled));
94+
95+
assert_de_tokens(
96+
&listener,
97+
&[
98+
Token::NewtypeStruct {
99+
name: "ListenerWrapper",
100+
},
101+
Token::Seq { len: Some(2) },
102+
Token::Str("ip"),
103+
Token::Bool(true),
104+
Token::SeqEnd,
105+
],
106+
);
107+
108+
let listener = ListenerWrapper((Some("name".into()), ProxyProtocol::Disabled));
109+
110+
assert_de_tokens(
111+
&listener,
112+
&[
113+
Token::NewtypeStruct {
114+
name: "ListenerWrapper",
115+
},
116+
Token::Seq { len: Some(2) },
117+
Token::Str("name"),
118+
Token::Bool(false),
119+
Token::SeqEnd,
120+
],
121+
)
122+
}
123+
}

src/config/records.rs

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ where
2727
{
2828
let mut res = HashMap::new();
2929
while let Some(key) = map.next_key::<&str>()? {
30-
let name = Name::from_str(key).map_err(DeError::custom)?;
30+
let mut name = Name::from_str(key).map_err(DeError::custom)?;
31+
name.set_fqdn(true);
3132
let (record_type, record_set) = map.next_value_seed(RecordDataSeed(name))?;
3233

3334
res.insert(record_type, record_set);
@@ -136,3 +137,40 @@ impl<'de> DeserializeSeed<'de> for RecordSeed {
136137
deserializer.deserialize_seq(RecordVisitor(self.0, self.1))
137138
}
138139
}
140+
141+
#[cfg(test)]
142+
mod tests {
143+
use super::{deserialize, PreconfiguredRecords};
144+
use serde::Deserialize;
145+
use serde_test::{assert_de_tokens, Token};
146+
147+
#[derive(Deserialize, PartialEq, Debug)]
148+
struct PreconfiguredRecordsWrapper(
149+
#[serde(deserialize_with = "deserialize")] PreconfiguredRecords,
150+
);
151+
152+
#[test]
153+
fn deserialize_test() {
154+
let records = Default::default();
155+
let records = PreconfiguredRecordsWrapper(records);
156+
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+
)
175+
}
176+
}

src/util.rs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,9 @@ pub(crate) fn uuid() -> String {
3434

3535
#[cfg(test)]
3636
mod tests {
37-
use super::*;
37+
use super::{error, now, to_i64, to_u64};
3838
use anyhow::anyhow;
39+
use std::io::{Error as IoError, ErrorKind};
3940
use std::thread;
4041
use std::time::Duration;
4142

@@ -77,9 +78,9 @@ mod tests {
7778

7879
#[test]
7980
fn error_works() {
80-
let expected = anyhow!("test error");
81+
let expected = anyhow!("test");
8182

82-
let actual = match error(anyhow!("test error")) {
83+
let actual = match error(anyhow!("test")) {
8384
acme_lib::Error::Io(err) => err,
8485
_ => panic!("Cannot match err"),
8586
};
@@ -91,6 +92,6 @@ mod tests {
9192

9293
// here we access the actual inner error
9394
let actual = actual.into_inner().expect("Error has no inner error");
94-
assert_eq!(format!("{:?}", expected), format!("{:?}", actual));
95+
assert_eq!(format!("{}", expected), format!("{}", actual));
9596
}
9697
}

0 commit comments

Comments
 (0)